Repository navigation
Releases: lmliheng/Adelie
Release list
Adelie v0.5.4
Adelie v0.5.4 —— 被拒绝的原因继续留在框里,组件库多了一族 GPU 背景
这一版自 v0.5.3 起在 main 上落了 14 笔提交,其中 4 个用户看得见的改动(其余是每轮的记账与一处测试
工具的修理)。数据根、配置格式、包名与既有 HTTP 接口都没有变化,装好的机器升级后不用改任何配置。
这一版改了什么
-
插件设置里的操作被拒时,卡片留着、原因也在卡片里。 插件卡片上的操作(部署必须在这台机器上做一次的
事,比如 Windows 沙盒的「初始化」)执行前要先确认,而那张卡片过去在按下「执行」的那一刻就关掉了。请求
被拒、或分组自己回答「此卡片上还有任务在运行」的时候,机器一点没变,原因却是一条六秒后自己消失、还浮在
卡片上方的提示。现在卡片拿到答复才关:被拒就把服务端那句话画在句子下面,重试就是同一个按钮。 -
批量删除对话被拒时,框和勾选都留着,删了一半也说得清。 批量删除是逐条发出去的(服务端没有批量
路由),所以它可能只成了一半。过去用的是「一条被拒就丢掉其它行的结果」:列表与服务端已经对不上,而行却
全还勾着,再看一眼分不清哪些已经没了。现在每条的结果都收下来 —— 删掉的行离开列表与勾选,被拒的行留着
勾(卡片里的条数正好是「重试会动到的那几条」),框留着并画出服务端原话,整批都删掉才关框。 -
删除 MCP Server 被拒时,同样留着框与原因。 智能体设置「工具」页的 MCP Server 表里,删除一行是先
确认再整张表写回去;那张卡片过去在请求返回时就关,不管写没写成功,被拒的原因只剩一条会消失的提示。现在
写成功之后才关,被拒就把原话画在句子下面,重试还是同一个按钮。 -
组件库多了一族 GPU 背景。
@adelie/ui现在有会自己漂移的色彩场(两色在 oklab 里流动、一层很轻
的噪点、可选跟着指针的拖尾)与点阵(一色一间距的「工程纸」,静止或微闪),建在 MIT 的shaders上、
走 WebGPU 画。要紧的不是好看,而是不会破相:盒子先问这台设备画不画得了(WebGPU 探针 + 系统的「减少
动效」设置),画不了就把调用方给的静态替身放进同一个盒子(同色的渐变、或一排 CSS 点),设备中途把画布
收回去也立刻切回替身。颜色由调用方传(GPU 画布读不到 CSS 变量),画廊新增的「着色器」话题按当前主题的
色值演示这两块,并显示它此刻画的是画布还是替身。目前还没有页面在使用它们 —— 先在画廊里可用。
看不见的一处:给工作区包加依赖时,pnpm 会把 @adelie/ui 装成 node_modules 里的副本,而打包那一步在那里
找不到它的 tsconfig,退回老式 JSX 编译,于是 Web 与画廊的单测整片报 React is not defined。这个问题一直埋
着,这版把两份测试配置写明用新版 JSX 运行时,两种装法都验过。用户看不见,但它会让以后每次加依赖都不再翻车。
升级
桌面端在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。Windows 安装包仍未签名,
SmartScreen 会提示一次(「更多信息 → 仍要运行」)。
命令行与 Web:penguin update(或重装 npm install -g @adelie/cli)。npm 上 24 个包都到了 0.5.4。
安装
curl -fsSL https://github.com/lmliheng/Adelie/releases/latest/download/install.sh | shirm https://github.com/lmliheng/Adelie/releases/latest/download/install.ps1 | iex也可以只装 CLI:npm install -g @adelie/cli(需要 Node.js >= 24)。
要求
- Node.js >= 24(单行安装脚本自带运行时,npm 安装需要本机有)。
- Linux / macOS / Windows 的 x64 与 arm64;其他 POSIX 平台用
--universal安装包。 - 桌面端:Linux 提供 AppImage 与 deb,Windows 提供 exe;macOS 未签名,这一版不随 Release 发布。
上一版(v0.5.3)把「写入被拒绝的原因」铺到模型库、定时任务、评估中心、插件市场与删除对话,并让桌宠真的
拖得动;再往前(v0.5.2)加了桌宠、结束的定时任务自己移进 expired/、MCP Server 可以停用而不必删除。文档在
https://lmliheng.github.io/Adelie/docs/。变更明细见仓库里的
changelog/unreleased/。
Adelie v0.5.3
Adelie v0.5.3 —— 被拒绝的原因留在框里,桌宠真的拖得动
这一版自 v0.5.2 起在 main 上落了 39 笔提交,其中 9 个用户看得见的改动(其余是浏览器用例的稳定性
与每轮的记账)。数据根、配置格式、包名与既有 HTTP 接口都没有变化,装好的机器升级后不用改任何配置。
一条主线贯穿十几个页面:写入被服务器拒绝时,原因就留在你刚按下的那张确认框里,而不是变成一条六秒
后自己消失、还浮在框上方的提示。另一条是上一版那只桌宠 —— 它从「能看」变成「能动」。
这一版改了什么
-
桌宠拖得动,点它有反应,也不再是一张静止的画。 上一版那只企鹅其实拖不动:窗口上盖着一整片系统
拖动区,偏偏把企鹅挖了出去(为了让点击落到页面上),而企鹅是透明窗口上人唯一摸得到的地方 —— 看得见
的桌宠正好就是拖不动的那部分。现在企鹅自己就是把手:按住它移动就挪动窗口,按住不动就是一次点击,
开合面板并让企鹅跳一下。它还会自己眨眼,瞳孔跟着指针转;跳跃在点击和收到通知时都播,于是「注意到了」
是看得见的,而不只是读得到的。系统里要求减少动效时,眨眼、摇晃与跳跃随其它动画一起关掉,瞳孔仍然
跟着指针(那是一个位置,不是一段补间)。窗口其余部分的拖动区照旧,此前拖得动的地方现在还是拖得动。 -
被拒绝的原因画在确认框里。 模型库里六个写着配置的确认框 —— 保存模型的配置、设为默认模型、设为
视觉代理模型、删除模型、删除分组、同步预置 —— 现在把服务端那句话画在框里、句子下面、重试按钮上方,
落款「操作被拒绝:」。此前它只出现在一条 toast 里:最需要它的时候(看完原因再决定要不要重试)往往
已经消失了。 -
删除模型和保存模型配置:写成功才收起那张框。 这两张确认框此前在请求发出时就关闭,不管写没写
成,而页面会先摆出「尝试中」的那张表。于是被拒的一次删除让模型从页面上消失、服务器却还留着它,连
打开卡片的入口也没了;被拒的一次改名让页面显示着服务器没接受的名字。现在写入有结果才收起,被拒时
卡片、那一行和原来那张表都原样留着,重试就是同一个按钮。 -
同一条规矩铺到另外五个地方。 删除定时任务(项目定时任务页、对话侧栏的定时任务面板、Agent 设置页
的定时任务表三处界面)、评估中心删除 Benchmark、插件市场安装或移除模块插件、侧栏删除对话:被拒时
卡片留着它的句子,原因画在下面,不再弹一条自己会消失的提示。仍用提示条的是几处没有框可以留的
写入 —— 分组密钥、工具栏上的「同步预置」、定时任务的启停开关、插件页的批量更新与单 Agent 操作,以及
可能删一半的批量删除对话。 -
新对话页的版本行会写出最新发布版。 落后两个版本的安装此前看不出来自己落后了:那一行只写正在
运行的版本,新版号藏在旁边上标的悬停提示里。现在检查到更新的发布版时,这一行直接接着写
「最新版本 vX.Y.Z」;已经是最新就不重复写。 -
浏览器用例不再在动画中途量尺寸。 三个用例(竖栏折叠、停靠栏与弹入面板、缩放后的取样)改成等过渡
落定再断言,此前偶发的红与真实缺陷无关。这一条用户看不见。
升级
桌面端在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。Windows 安装包仍未签名,
SmartScreen 会提示一次(「更多信息 → 仍要运行」)。
命令行与 Web:penguin update(或重装 npm install -g @adelie/cli)。npm 上 24 个包都到了
0.5.3。
安装
curl -fsSL https://github.com/lmliheng/Adelie/releases/latest/download/install.sh | shirm https://github.com/lmliheng/Adelie/releases/latest/download/install.ps1 | iex也可以只装 CLI:npm install -g @adelie/cli(需要 Node.js >= 24)。
要求
- Node.js >= 24(单行安装脚本自带运行时,npm 安装需要本机有)。
- Linux / macOS / Windows 的 x64 与 arm64;其他 POSIX 平台用
--universal安装包。 - 桌面端:Linux 提供 AppImage 与 deb,Windows 提供 exe;macOS 未签名,这一版不随 Release 发布。
上一版(v0.5.2)给桌面版加了桌宠、让结束的定时任务自己移进 expired/、MCP Server 可以停用而不必删除;
再往前(v0.5.1)把阿里云镜像彻底停掉,发布只剩 GitHub 一个地址。文档在
https://lmliheng.github.io/Adelie/docs/。变更明细见仓库里的
changelog/unreleased/。
Adelie v0.5.2
Adelie v0.5.2 —— 桌面版多一只桌宠,定时任务自己归档
这一版自 v0.5.1 起在 main 上落了 34 笔提交,其中 11 个用户看得见的改动(其余是浏览器 e2e 与
每轮的记账)。数据根、配置格式、包名与既有 HTTP 接口都没有变化,装好的机器升级后不用改任何配置。
主线有两个:桌面版多了一只会报事的桌宠,以及「跑完的定时任务」不再堆在列表里。顺带把这一周在
界面上踩到的几处「说成功其实没成功」逐个修掉。
这一版改了什么
- 桌面版能养一只桌宠。 主窗口所在屏幕的右下角蹲着一只阿德利企鹅,透明、置顶、无边框,压在
其他窗口之上。它会用一句话报出:定时任务触发了(带任务名)、有几个工具调用在等批准、同事的花费
接近或超过预算;点开面板能看最近五条、账号上固定住的分组余额与刷新动作,以及客户端更新状态
连同那个状态唯一能做的动作。默认关闭 —— 它是一扇会盖住别的应用的窗口,设置 › 外观(托盘
开关旁)或桌宠自己的面板里打开、收起,两处写的是同一份偏好。 - MCP Server 可以停用而不必删掉。 Agent 设置里的 MCP 区块每行多了一个开关:关掉后条目与它的
每个字段都留在配置里,但任何一轮都不会连接它,它的mcp__*工具也从工具列表里消失。此前想让它
「别再每轮都连一次」只能删掉再重填,插件装上的桥(比如 WPS 加载项)于是即使不用也一直留在每一轮
对话里。同一个字段也可以在system_config.yaml里手写。 - 结束的定时任务移进
schedule/expired/。 已触发的一次性任务、服务器停机期间错过时间的一次性
任务、以及已过结束时间的任务,文件原样移进该 Agent 的agent_state/schedule/expired/,不再出现在
任何列表、计数、侧栏闹钟与{{SCHEDULE_LIST}}里。同名文件加时间戳后缀,不覆盖任何东西;把文件
移回schedule/就当新任务重新登记。注意:开始时间已过的一次性任务现在直接拒绝(400),不再
「立刻执行一次」——penguin schedule add --start-at now要带上--period。 - 切换 Project 不再显示、也不再询问上一个 Project 的 Agent。 机器慢的时候尤其常见:智能体页会
把刚离开的项目里的 Agent 列在新项目下,还能打开它的设置;切换时打开着的对话会留在新项目里。
现在每个 Project 范围的应答都带着发起时的 Project,过期的应答一律丢弃。 - 成本中心的「清空错误记录」删的正是确认框写下的那几条。 那个数字此前取的是仪表盘加载时的快照,
而加载成本中心本身就会记一条错误 —— 写着「1 条」的确认框删掉了 2 条。现在点开确认框时重新读一次
计数,删除停在这次读得到的最新一条上;背后的统计也跟着刷新,屏幕上两个数字不再互相矛盾。 - 模型页两处确认框:写成功之后才收起。 「现在升级」同步预置、自定义分组的「删除分组」此前在
请求发出时就关闭确认框,被拒之后页面上是一张「看起来已经同步过」「分组已经没了」的表,而服务器
还留着旧数据:重试算出空差量、一个请求都不发,删除入口跟随分组一起消失。现在写入有结果才收起,
被拒时退回写入前的样子,错误照旧显示服务端那句话。 - 下侧栏的拖拽边界整条都能抓。 那条 6 px 的拖拽带过去有一半伸在框架外面被
overflow-hidden
裁掉,屏幕上看到的边界线恰好落在被裁掉的一侧,按下去毫无反应。现在整条贴在内侧。 - Windows 上桌面版的任务完成通知真的会弹了。 桌面端此前根本没申请通知权限,所以那条通知
从来不会出现。 - WPS 加载项的桥不再对着一个已经不在的会话每 10 秒重连一次。 会话流返回 404/410 时停止订阅并
记一条 info。
升级
桌面端在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。Windows 安装包仍未签名,
SmartScreen 会提示一次(「更多信息 → 仍要运行」)。桌宠默认关闭,想要的话去设置 › 外观打开。
命令行与 Web:penguin update(或重装 npm install -g @adelie/cli)。npm 上 24 个包都到了
0.5.2。
定时任务:如果你有「开始时间设在过去的一次性任务」这种脚本用法,改成给一个将来的开始时间并
带上周期;已经落在磁盘上的过期任务,会在升级后的第一次对账里自己移进 expired/。
安装
curl -fsSL https://github.com/lmliheng/Adelie/releases/latest/download/install.sh | shirm https://github.com/lmliheng/Adelie/releases/latest/download/install.ps1 | iex也可以只装 CLI:npm install -g @adelie/cli(需要 Node.js >= 24)。
要求
- Node.js >= 24(单行安装脚本自带运行时,npm 安装需要本机有)。
- Linux / macOS / Windows 的 x64 与 arm64;其他 POSIX 平台用
--universal安装包。 - 桌面端:Linux 提供 AppImage 与 deb,Windows 提供 exe;macOS 未签名,这一版不随 Release 发布。
上一版(v0.5.1)把阿里云镜像彻底停掉,发布只剩 GitHub 一个地址;再往前(v0.5.0)包名改挂
@adelie/*。文档在 https://lmliheng.github.io/Adelie/docs/。变更明细见仓库里的
changelog/unreleased/。
Adelie v0.5.1
Adelie v0.5.1 —— 发布只剩 GitHub 一个地址
这一版很小,只有一件事:把阿里云那面镜像彻底停掉。数据根、配置格式、HTTP 接口与命令名都没有
变化,装好的机器升级后不用改任何配置。
这一版改了什么
- 桌面端检查更新少一次注定失败的往返。 以前它默认先去阿里云 OSS 那面镜像取
latest.yml,
探不通才回退到 GitHub Releases。那面镜像是这个项目自己的桶,账号早已被停用,所以每次检查都会先
撞一次 403。现在它直接读 GitHub Releases —— 唯一的发布地址,也是始终最新的那个。自建镜像的
部署不受影响:PENGUIN_UPDATE_FEED_URL仍然能把检查指向自己的源。 - 发布流水线里不再有镜像作业。
release.yml的mirror-oss作业、oss-staging工作流,以及
scripts/下三个跟 ossutil 打交道的脚本一并删除。每次发布就是把 14 件资产传到 GitHub Release,
没有第二步。README 里那句「同一份资产也镜像到阿里云 OSS」相应去掉。
两个安装脚本此前就只认 GitHub(PENGUIN_DOWNLOAD_SOURCE=auto|github,写 oss 会被明确拒绝),
所以下载与安装这条路没有任何变化。
升级
桌面端在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。
命令行与 Web:penguin update(或重装 npm install -g @adelie/cli)。npm 上 24 个包都到了
0.5.1。
注意:如果你此前给 Adelie 配过自建下载源(PENGUIN_DOWNLOAD_BASE_URL)或自建更新源
(PENGUIN_UPDATE_FEED_URL),那些设置仍然有效,这一版没有动它们。
安装
curl -fsSL https://github.com/lmliheng/Adelie/releases/latest/download/install.sh | shirm https://github.com/lmliheng/Adelie/releases/latest/download/install.ps1 | iex也可以只装 CLI:npm install -g @adelie/cli(需要 Node.js >= 24)。
要求
- Node.js >= 24(单行安装脚本自带运行时,npm 安装需要本机有)。
- Linux / macOS / Windows 的 x64 与 arm64;其他 POSIX 平台用
--universal安装包。 - 桌面端:Linux 提供 AppImage 与 deb,Windows 提供 exe;macOS 未签名,这一版不随 Release 发布。
上一版(v0.5.0)的大改动在 RELEASE-v0.5.0.md:包名改挂 @adelie/*、
官网页面只留文档站。文档在 https://lmliheng.github.io/Adelie/docs/。
Adelie v0.5.0
Adelie v0.5.0 —— 包名改挂 @adelie,官网页面只留文档
这一版自 v0.4.1 起在 main 上落了 30 笔提交,其中 10 个用户看得见的改动(其余是每轮的记账、
CI 与发布准备)。这一版有需要动手的改动:npm 上所有包的名字从 @lmliheng/penguin-* 换成
@adelie/*,安装与升级命令跟着换,Project 配置里写的插件名也要换。数据根(~/.adelie/data)、
配置格式与既有 HTTP 接口都没动,已经装好的机器照旧运行。
主线是「这个项目不再借别人的名字出现」。包挂到自己的作用域,官网页面只留自己的文档站,README、
文档、安装脚本头部和 npm 包页面上的链接都指回这个仓库;顺带把自 0.4.1 起攒下的 Agent API 与几处
界面修补一并交到你手上。
这一版改了什么
- 包名改挂
@adelie。 仓库自己发布的 24 个包全部换了名字:三个宿主包是@adelie/core、
@adelie/server、@adelie/cli,协议包@adelie/amsp,二十个插件去掉penguin-前缀换作用域
(@adelie/goal、@adelie/requirements-box等)。命令行名字没变,还是penguin与
penguin-hmr;PENGUIN_*环境变量也没有换名字的地方。旧名字在注册表上标记为失效并指向新名字,
已经钉住旧名字的安装仍然能解析。 - 官网页面只留文档。 https://lmliheng.github.io/Adelie/docs/ 现在挂的是这个仓库自己的文档站
(packages/docs构建,站点根是一页跳转)。原先挂在那里的上游官网快照——首页、下载页、博客、
画廊——已经删掉:它的下载页给的是上游自己的安装器,跟着装出来的是另一个产品,而不是这个仓库发的
这个。想装 Adelie,用下面「安装」里的两条命令。 - 链接都指回自己。 README、文档、
.github各模板、docker/compose.yaml、两个安装脚本的头部
注释,以及每个包的package.json里那个「源码地址」,全部改成这个仓库与它的 Release 资产、
文档站地址。有意保留指向上游的只剩三处:ModelScope 桥接与 Penguin Go 网关(跑在上游服务器上,
值必须与代码发出去的一致)、README 里的上游归属说明、Dockerfile 的镜像来源标签。 - 文档改称 Adelie,并且与代码对上。 30 对中英文页面里的产品名、桌面端日志目录、数据根
(~/.adelie/data)与安装目录都改了;页面里写的环境变量逐个对着代码的读点核过——该写
ADELIE_*的写成ADELIE_*,属于安装器协议与上游网关的PENGUIN_*保持原样。顺手把下载来源
那一段改对:Adelie 的安装器只认auto|github,没有上游那套 OSS 测速镜像。 - Agent API:外部程序可以和某个 Agent 对话。 Agent 设置里多了一个 API 标签页,打开后你的
脚本、你自己的小工具、另一台机器上的程序都能经 HTTP 与这个 Agent 对话,事件流用 AMSP 协议推
(POST /api/amsp/v1/...),凭Agent ID与密钥接入,审批模式单独可设。运行使用 Project 的模型
与凭据,记录方式与其他对话一致。 - 几处界面修补。 打开历史对话不再先等侧栏;被截断的文字悬停即可看到全文;列表行的操作始终
可见,无论文字多长;极客主题的图表连线改为点间直线;账号菜单里「反馈社区」下面那行小字去掉;
有一处悬停提示此前不显示,已恢复。
升级
npm 全局安装换了名字:npm install -g @adelie/cli(旧的 @lmliheng/penguin-cli 已标记失效,
从旧名字装过的机器重装一次即可,数据根不动)。装完放进 PATH 的命令仍是 penguin。
Project 配置里的插件名要改:[plugins] 表里写过的 @lmliheng/penguin-* 换成对应的
@adelie/*(如 @adelie/requirements-box、@adelie/goal)。插件不会被自动覆盖,需要的在插件
市场里各自更新。
桌面端在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。Windows 安装包仍未签名,
SmartScreen 会提示一次(「更多信息 → 仍要运行」)。
命令行安装(Linux / macOS / Windows)用同一份单行安装脚本,--version v0.5.0 可钉住这一版。
数据根、配置文件与既有接口都没动,所以已经装好的机器升级后不需要改任何配置。
安装
curl -fsSL https://github.com/lmliheng/Adelie/releases/latest/download/install.sh | shirm https://github.com/lmliheng/Adelie/releases/latest/download/install.ps1 | iex也可以只装 CLI:npm install -g @adelie/cli(需要 Node.js >= 24)。
要求
- Node.js >= 24(单行安装脚本自带运行时,npm 安装需要本机有)。
- Linux / macOS / Windows 的 x64 与 arm64;其他 POSIX 平台用
--universal安装包。 - 桌面端:Linux 提供 AppImage 与 deb,Windows 提供 exe;macOS 未签名,这一版不随 Release 发布。
文档在 https://lmliheng.github.io/Adelie/docs/。变更明细见仓库里的
changelog/unreleased/ ——
这个仓库把每一版的条目留在那里,按日期与 slug 命名,中英各一份。
Adelie v0.4.1
Adelie v0.4.1 —— 需求箱能看见「哪些提交还没发出去」,账号菜单多了公开反馈板
这一版自 v0.4.0 起在 main 上落了 10 笔提交,其中 5 个功能性改动(另外 5 笔是每轮的记账)。
没有破坏性改动:数据根(~/.adelie/data)、配置格式、既有 HTTP 接口都没动,已装好的机器不需要
改任何配置。
这一版的主线还是「少一步手工、少一次开终端」。需求箱那一页现在自己写着仓库里哪些提交还没发版、
现网跟没跟上;想反馈问题不必先等某个后端配好,账号菜单里直接有一扇门通向公开反馈板;模型页那四个
国内分组从字母方块换成了各家自己的标记。
这一版改了什么
- 需求箱页面多一块「提交同步」。 以前要知道「提交了但没发出去的有哪些」「现网到底在跑哪一版」,
得开终端敲 git。现在这一页自己写着三件事:未发版(最后一个发布标签之后的提交)、现网没跟上
(已发出去、而正在跑的服务还没换上的提交,只算会进构建的提交 —— 发布正文和记账这类只动 markdown
的不算,否则每次发完版都在喊「现网落后 1 条」)、装了没重启(磁盘上的版本比正在跑的进程新,
这是单独一种状态,以前页面上完全看不出来)。现网在跑哪个版本是问服务自己的/api/version,不是
读磁盘上那份——读磁盘正好会把「装好了没重启」盖掉;那个接口要本机口令,口令只在服务进程里读,
不下发浏览器。出处(仓库、现网地址、口令文件、安装目录)都在box.config.json,安装脚本会自己推。
插件@lmliheng/requirements-box的版本相应升到2026.10.15.1。 - 账号菜单多一行「反馈社区」。 左下角账号菜单里新的一行打开产品的公开反馈板(腾讯兔小巢),
新标签页打开,不打断当前页面。它和旁边那行「用户反馈」并排放着而不是合并:原来那行是把内容收进
这台机器的反馈队列、而且只有这台机器配了反馈后端时才出现;公开板块属于产品本身,每个安装都是
同一个地址,因此永远都在。两行的区别用一行小字「公开」标出来。 - 小米、百度、腾讯、讯飞四家分组的图标。 上一版把新加的四家(Xiaomi MiMo、Baidu ERNIE、
Tencent Hunyuan、iFlytek Spark)发成首字母方块,因为没有核对得到的品牌图形——手画一个商标比方块
更糟。这轮把四个形状逐字取回来:小米那个圆角方块的 Mi、百度的爪印、腾讯混元的环形标记、讯飞站标
里那个徽记。四家都照别的服务商那样收成单色、纯路径、不加载任何外部图片,深浅两套主题下都读得出。 - 限流不再藏在「网络错误」里。 provider 回 429 与连接中断此前共用
network一个错误码,下游分不
出「线路抖了一下,稍等再试」和「这个模型已经没有配额了,退避到头还是 429」——两者的处置不一样。
ErrorCode增加rate_limited(isRateLimitError与isFatalProviderRejection并列导出,沿错误
cause链读),结果状态仍是retryable,重连阶梯、放弃时机、重试内容都没变,只是把原因命名出来。
最直接的可见处是成本中心的错误面板:它按error_code分组,限流因此不再混在 network 那一桶里
(上游 #1114 移植)。 - 智能体面板:子智能体的描述比名称小一号。 调用关系图里子节点的第二行(派生它的
run_subagent
调用带来的描述)此前与上方的 Agent 名同一档字号,中文描述看上去和名称一样大甚至更大,节点上
「先是谁、再做什么」的层次就没了。现在名称用正文字号、描述仍用小号字排在下方,三套主题都是如此;
关系图的节点框、间距与连线也改为跟随「字号」设置按 rem 排布,此前白领主题在「特大」档会把描述
的下沿截掉(上游 #1096 移植)。
升级
桌面端(Windows / Linux 的 AppImage)在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。
默认的镜像源当前不可用,客户端会自动回退到 GitHub Releases;Windows 安装包仍未签名,SmartScreen
会提示一次(「更多信息 → 仍要运行」)。
命令行安装(Linux / macOS / Windows)改用同一份单行安装脚本,--version v0.4.1 可钉住这一版。
插件不会被自动覆盖:需要的在插件市场里各自更新。WPS 插件另说 —— 你在笔记本上改过的那份面板
(图标、字号、权限胶囊那套,技能版本 2026.10.15.2)仍只在你那台机器上,仓库里这一份是 2026.10.15.3。
在笔记本上点「更新」会把它换成仓库里这一份,那一套改动会丢;要保住就先别更新它,或让它先落进仓库。
Adelie v0.4.0
Adelie v0.4.0 —— 四家国内模型厂商进预置目录,插件库多一个 Offer岛
这一版自 v0.3.9 起在 main 上落了 8 个功能性提交:四条新面孔(小米、百度、腾讯、讯飞四家的
预置模型,加一个新插件 Offer岛),三条界面修补,以及 WPS 插件的两处真问题。没有破坏性改动:
数据根(~/.adelie/data)、配置格式、既有 HTTP 接口都没动,已装好的机器不需要改任何配置。
主线是「少一步手工」。这四家模型以前只能自己到模型页「自定义端点」里手填 base URL 才用得上,现在
各是一个预置分组,贴一把 key 就能用;Offer岛的 skill 以前只发在它自己的仓库里、要手动拷文件,现在
它是一个正经插件,装上就能搜岗位、发 JD、读 AI 资讯。
这一版改了什么
- 小米、百度、腾讯、讯飞四家进模型页预置分组。 小米 MiMo(
mimo-v2.6-pro/flash,1M
上下文、支持图片)、百度文心(ernie-5.1/5.0/4.5-turbo-vl/4.5-turbo-128k/x1.1)、
腾讯混元(hunyuan-a13b与三个视觉模型)、讯飞星火(4.0Ultra/pro-128k/lite),共 14 行。
每行的上下文窗口、图片支持与价格都取自各厂商自己的文档(价格按目录惯例折成美元),读不出来的
不编:讯飞那几行不带价格(它的 HTTP 文档没有价格表,产品页又只按另一个型号系列列价),星火的
Max 一对、混元的角色扮演 / 翻译 / 向量化、小米的 ultraspeed 档也都没收录,理由写在目录的注释里。
四家在 AgentHub 里都没有一方客户端,所以每行都钉住 Chat Completions 协议并内联端点;分组图标
先走首字母方块(没有可核对的品牌图形,不手画商标)。 - 新插件 Offer岛:搜岗位、发布 JD、看 AI 资讯。
@lmliheng/use-offerdao,插件库「办公效率」
分类,不预装。按公司 / 岗位 / 地点 / 工作类型 / 时间搜已审核的岗位、查 AI 公司目录、找面经
攻略、读每日 AI 资讯;把一段 JD 或一个链接交给它,还能解析成结构化岗位替你提交审核。公司目录、
面经、资讯不需要 key;搜索与发布要一把 Offer岛的 key,存进 Agent 密钥库的OFFERDAO_API_KEY
即可。按 Adelie 的规矩做了四处适配(补Before you start、把原文的browser-act换成本仓库的
browser-automation、去掉只对 Offer岛自家客户端成立的站内卡片与 daemon 自动更新约定、把密钥
改成写进密钥库);上游是 MIT 许可,许可证原文随内容一起放,出处与改动记在插件 README 与
SKILL.md 末尾。 - WPS 插件:装好了摸不到文档工具,重连后还会一直卡在「正在处理…」。 两处都在桥里。其一,
安装脚本把文档工具那一条写在tools.mcpServers下,而 Adelie 的配置接口里这份列表是顶层的
mcpServers——接口对不认识的键照答 200 却把内容丢掉,于是「安装成功」的下一步是会话里一个
mcp__wps__*工具都看不到;卸载脚本是同一处问题,那条登记也就删不掉。其二,侧栏每次连上事件
流时,桥先把这一轮的真实状态补一帧:之前只有下发命令时才转达状态,面板在回合开始之后才打开
(或断开重连)就等不到收尾,一直停在「Adelie 正在处理…」。 - 用户管理表多一列「最近一次会话」。 该账号名下全部项目里最近活跃的一次对话,显示时间与标题;
没有会话显示—,会话还没有标题就只显示时间。服务端GET /api/admin/users多带
lastSessionAt/lastSessionTitle两个字段,面板从 5xl 加宽到 6xl 以放下第七列。 - 被压缩过的长会话可以整套搬到另一台 Adelie。 以前只能导出/导入单个 Trace 文件,而一个长会话
被上下文压缩切开后是多个文件,导入端只收第一片、同一会话再来一片直接拒绝——搬过去的其实是断的。
现在对话的轨迹面板多一个「导出整个会话」,把该会话的全部分片打成一个包;在设置里导入这个包,
会在目标机上落成一个完整会话,侧栏可见、可续聊。包在落盘前整体校验:分片必须从 1 连续、每片都
声明同一个会话 id,任一片不合法就整包拒绝且不写任何文件;本机已有同 id 会话仍然拒绝,不覆盖也
不追加。 - 成本中心的错误提醒:标记已读之后重启不再回来。 成本中心读的是屏幕上那个时间范围的错误,
却把应用启动时那次探测的时间戳标成已读——于是应用开着时进来的错误被这个标记盖住,重启后又冒
出来。现在打开页面先刷新这条提醒,表格和标记指向的是同一个最新错误;而且标记只有在偏好写入
成功之后才隐藏提醒:写失败会报出接口错误并把提醒留在原地,连续关闭按顺序落盘,先发的请求不会
覆盖后发的标记(上游 #1118 移植)。 - 设置里 WSL 的中文诊断不再乱码。 插件页里凡是
wsl.exe用 UTF-16LE 回话的地方都显示成
乱码——即使每次调用都带WSL_UTF8=1:字节先按 UTF-8 解了一遍,UTF-16 回话留下的 NUL 再也
变不回字符。现在宿主把wsl.exe的输出当字节收着,最后只解码一次:decodeOutput()认带或不带
BOM 的 UTF-16LE(它的标签、空格、换行高位字节都是 0,而 UTF-8 文本不会),UTF-8 输出原样放行;
安装日志走同一个解码器,实时进度仍用流式 UTF-8 解码器,所以一个汉字被行边界切开也能整字到达
(上游 #1125 移植)。
升级
桌面端(Windows / Linux 的 AppImage)在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。
默认的镜像源当前不可用,客户端会自动回退到 GitHub Releases;Windows 安装包仍未签名,
SmartScreen 会提示一次(「更多信息 → 仍要运行」)。
服务器 / CLI 装的(tar 包或 npm 全局)用同一条链路,数据根(~/.adelie/data)不动:
penguin update --check # 看有没有新版
penguin update --yes # 原地替换 bin/lib/web/node| 产物 | 目标 |
|---|---|
adelie-desktop-win32-x64.exe |
Windows x64 桌面端(未签名,NSIS 安装器) |
adelie-desktop-linux-x86_64.AppImage / adelie-desktop-linux-amd64.deb |
Linux x64 桌面端 |
penguin-linux-x64.tar.gz |
Linux x64 命令行版(自带 Node 24.18.0) |
penguin-win32-x64.zip |
Windows x64 命令行版(自带 Node 与 MinGit) |
penguin-universal.tar.gz |
任意平台(不带运行时,需要 Node ≥ 24) |
install.sh / install.ps1 |
在线安装脚本(penguin update 取的就是它) |
latest.yml / latest-linux.yml |
桌面端自动更新读的元数据 |
安装包都在 GitHub Release 上:https://github.com/lmliheng/Adelie/releases/tag/v0.4.0,
下载页同样直指这里。npm 上整条链同样是 0.4.0(3 个宿主包 + 20 个插件包,其中新加入的是
Offer岛):npm install -g @lmliheng/penguin-cli。
存储清理仍是出厂关闭的。 想用就在设置页「存储」页打开开关,或 penguin storage mode on;
不想用就什么都不用做,行为与上一版一致。
质量门禁(本机跑过)
在发布树(版本戳提交 c8e8f714)上跑,四道门禁全过:
pnpm typecheck:9 个工作区包 + 四个 sandbox 插件全部 Done,用时 1m31s。pnpm lint(oxlint):2167 个文件、3 条规则,0 警告 0 错误,用时 2s。pnpm format:check(prettier):所有文件都符合格式,用时 57s。- 测试全绿:746 个测试文件(744 通过 / 2 跳过),9522 个测试:9504 通过 / 18 跳过 /
0 失败,用时 4m12s(docs 62 · ui 1028 · core 1395(+6 跳过) · server 2842(+4 跳过) ·
cli 539 · web 3120(+2 跳过) · desktop 286 · ui-gallery 133 · 四个 sandbox 插件 99(+6 跳过));
WPS 插件自己那套node --test另有 23 个通过 / 0 失败。 - 打包出来的三件命令行包与三件桌面安装器按三层口径逐条核过:三个
.sha256与文件一致、
latest.yml/latest-linux.yml里的 sha512 与 size 对得上真实文件、deb 的Version: 0.4.0、
两个安装脚本里的版本戳都是v0.4.0且占位符已全部替换。
已知待办
- 没有代码签名:Windows 的 Authenticode 与 macOS 的 Developer ID 都没有;macOS 的 dmg 会被
Gatekeeper 拦,所以仍不发 macOS。 - WPS 插件这一版只带两处修复:面板的视觉改版(图标、字号、权限胶囊)还没并进仓库,随插件走的
仍是当前这一版界面;WPS 那一侧本身也仍没有验证——功能区按钮、任务窗格、文档接口只在装了 WPS 的
机器上存在,第一次必须发生在 Windows 上、并且当着 WPS 的面。 - OSS 镜像当前不可用:镜像账号被停用,直链与读写都返回
403 UserDisable;因此下载页与 Release
资产都只指向 GitHub,桌面端更新自动回退到 GitHub。等镜像恢复后一行换回即可。 - 存储清理的第 3、4 步未做:删会话时把它留下的临时工作区一并移入回收站(止漏)、以及重复工具
环境的合并迁移(人工点一次)。数据库维护(VACUUM)也推迟。 - 命令名仍是
penguin、数据根~/.adelie;安装脚本与打包脚本里的产物名仍是penguin-*。 .github/workflows/release.yml仍是上游那条(只能手动 dispatch,且会推上游的 Docker 镜像),
Adelie 自己的发布流水线还没写;这一版的安装包是「本机脚本 +desktop-build.yml手工 dispatch」
打的。
Adelie v0.3.9
Adelie v0.3.9 —— 在 WPS 文字里和 Adelie 一起改手上的文档
这一版自 v0.3.8 起在 main 上落了 5 个功能性提交:一个新插件(WPS),加四条从上游带回来的
界面修补。没有破坏性改动:数据根(~/.adelie/data)、配置格式、既有 HTTP 接口都没动,
已装好的机器不需要改任何配置。
主角是新插件 WPS(@lmliheng/use-wps-office):它把 Adelie 的对话搬进 WPS 文字——功能区点一下
开侧栏,再把你屏幕上那份打开的文档交到 Agent 手里。读随便读,每一处改动都要你在侧栏里点一下同意。
其余四条都是日常会碰到的界面问题:窗口底部的悬停提示不再被底边截掉一半、上一轮还在跑的智能体不会从
面板上消失、切走再切回一个会话时它的面板仍停在原来的全屏状态、很长的会话往上翻时记忆更新卡片不再丢。
这一版改了什么
- Adelie 能读改你正在看的 WPS 文档。 新插件 WPS 在 WPS 文字的功能区加一个「Adelie」按钮,
点开是侧栏,可以像聊天一样让它操作当前这篇文档:九个操作——读概况、读正文、搜索、替换、插入、
删除、插分隔符、新建、定位——以mcp__wps__*工具的形式交给会话。运行时就是一个零依赖的 Node
文件(kit/serve.mjs),全程不出这台机器:桥只绑127.0.0.1,Adelie 走回环地址访问,不对网络
开任何端口。要有这个桥,是因为面板跑在 WPS 的内嵌浏览器里、与 Adelie 不同源,而 Adelie 明确不开
CORS;桥只做四件事——托管加载项那页、把文档指令下发给真正执行它的面板、替面板跟 Adelie 说话、
通过 WPS 自己的本机上架服务登记加载项。改文档要用户点头:面板建的会话是只读的,读随便读,
每一处改动都是侧栏里的一次审批;替换与删除还能带一个「期望原文」,对不上就拒绝执行并回
「段落已变,先重新读取」,因为模型读到的段号会过期。指令一次只跑一条、按顺序(同一份文档上两个
写者会让两边都读不懂),面板始终不回话时那一轮会报一句看得懂的错而不是一直卡着。安装脚本会写设置、
把加载项交给 WPS、把桥登记成 Agent 的一个 MCP 服务器并自己连一次核对、在 Windows 的启动文件夹放
一个开机自启项、然后把桥拉起来,每一步都可以重复跑,所以重跑就是修复;卸载脚本是它的反面。
设置、状态和bridge.log都在<数据根>/wps-bridge/下,不放插件目录(插件更新会整体替换)。 - 窗口底部的悬停提示改在上方弹出。 悬停输入框的上下文圆环时,提示原本出现在下方、被窗口底边
截去一半,三套主题都是如此。现在,挂在控件下方的提示若下方放不下、而上方的空间更大,就改在控件
上方弹出——面板以自己的下边缘定位、向上生长,文字折成几行都不会被裁掉;其余情况仍在下方。窗口
底部任何控件的悬停提示都按同样规则处理,不只圆环(上游 #1098 移植)。 - 运行中的子智能体跨轮次留在面板上。 后来的一条消息开启新一轮任务时,智能体面板原本会整张换掉
调用图——于是仍在后台运行、运行时也仍报告为「运行中」的子智能体从面板上消失了。现在默认调用图
会把「运行时报告为运行中」的已加载子节点与最新一轮任务派生的子智能体一并留下:每个都保留原有的
任务描述与自己那条会话,任务结束后它自己再消失。点击历史子智能体快捷行时,显示的仍只有那一轮
自己的调用图(上游 #1110 移植)。 - 切回某个 Session,它的面板仍停在原来的全屏状态。 切到别的 Session 再切回来,停靠面板原本
总是普通尺寸——因为切换本身把全屏状态清掉了。现在全屏按停靠布局记在内存里:一个 Session 可以
让右侧停靠栏全屏,另一个同时让底部停靠栏全屏,草稿发出的第一条消息所创建的 Session 也继承草稿的
全屏状态。跨 Session 共用的面板宽度与底部高度不变;退出全屏、隐藏停靠栏、关掉它的最后一个标签页
都会清掉(上游 #1128 移植)。 - 分页读取长会话时,记忆更新卡片不再丢失。 打开一条很长的会话时,记忆更新卡片原本可能整块
不见,尽管它对应的文件其实已经改成功了:历史窗口可能从session_meta那条记录之后开始,而
Agent State 目录正是那条记录带着的,于是流模型手里没有<agent_state>/memory/这个根,认不出
哪些文件写入属于记忆。现在历史分页的信封里带上「窗口起始那个上下文记录下来的」Agent State 目录,
流控制器在回放这一页之前先把它填进去。打开会话、往上加载更早的消息、断开后重连三种情形下卡片都
回来了;同一个话题被反复编辑仍只画一行,对记忆索引的编辑照旧不算(上游 #1138 移植)。
升级
桌面端(Windows / Linux 的 AppImage)在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。
默认的镜像源当前不可用,客户端会自动回退到 GitHub Releases;Windows 安装包仍未签名,
SmartScreen 会提示一次(「更多信息 → 仍要运行」)。
服务器 / CLI 装的(tar 包或 npm 全局)用同一条链路,数据根(~/.adelie/data)不动:
penguin update --check # 看有没有新版
penguin update --yes # 原地替换 bin/lib/web/node| 产物 | 目标 |
|---|---|
adelie-desktop-win32-x64.exe |
Windows x64 桌面端(未签名,NSIS 安装器) |
adelie-desktop-linux-x86_64.AppImage / adelie-desktop-linux-amd64.deb |
Linux x64 桌面端 |
penguin-linux-x64.tar.gz |
Linux x64 命令行版(自带 Node 24.18.0) |
penguin-win32-x64.zip |
Windows x64 命令行版(自带 Node 与 MinGit) |
penguin-universal.tar.gz |
任意平台(不带运行时,需要 Node ≥ 24) |
install.sh / install.ps1 |
在线安装脚本(penguin update 取的就是它) |
latest.yml / latest-linux.yml |
桌面端自动更新读的元数据 |
安装包都在 GitHub Release 上:https://github.com/lmliheng/Adelie/releases/tag/v0.3.9,
下载页同样直指这里。npm 上整条链同样是 0.3.9(3 个宿主包 + 19 个插件包,其中新加入的是
WPS):npm install -g @lmliheng/penguin-cli。
存储清理仍是出厂关闭的。 想用就在设置页「存储」页打开开关,或 penguin storage mode on;
不想用就什么都不用做,行为与上一版一致。
质量门禁(本机跑过)
在发布树(版本戳提交 d6810f3b)上跑,四道门禁全过,用时 1m32s + 1.9s + 57s + 4m08s:
pnpm typecheck:9 个工作区包 + 四个 sandbox 插件全部 Done。pnpm lint(oxlint):2166 个文件、3 条规则,0 警告 0 错误。pnpm format:check(prettier):所有文件都符合格式。- 测试全绿:743 个测试文件通过 / 2 跳过,9488 通过 / 18 跳过 / 0 失败
(docs 62 · ui 1028 · core 1395(+6 跳过) · server 2833(+4 跳过) · cli 539 · web 3120(+2 跳过) ·
desktop 286 · ui-gallery 133 · 四个 sandbox 插件 92(+6 跳过));新插件 WPS 自己那套node --test
另有 23 个通过 / 0 失败。 - 打包出来的三件命令行包与三件桌面安装器按三层口径逐条核过:三个
.sha256与文件一致、
latest.yml/latest-linux.yml里的 sha512 与 size 对得上真实文件、deb 的Version: 0.3.9、
两个安装脚本里的版本戳都是v0.3.9。
已知待办
- 没有代码签名:Windows 的 Authenticode 与 macOS 的 Developer ID 都没有;macOS 的 dmg 会被
Gatekeeper 拦,所以仍不发 macOS。 - WPS 插件里,WPS 那一侧本身没有验证:面板和桥这边都测过(桥、安装脚本、加载项托管走
node --test;十四条浏览器测试让真面板跑在假 WPS 上),但功能区的按钮、任务窗格、文档接口只在
装了 WPS 的机器上存在——第一次必须发生在 Windows 上、并且当着 WPS 的面。 - OSS 镜像当前不可用:镜像账号被停用,直链与读写都返回
403 UserDisable;因此下载页与
Release 资产都只指向 GitHub,桌面端更新自动回退到 GitHub。等镜像恢复后一行换回即可。 - 存储清理的第 3、4 步未做:删会话时把它留下的临时工作区一并移入回收站(止漏)、以及重复工具
环境的合并迁移(人工点一次)。数据库维护(VACUUM)也推迟。 - 命令名仍是
penguin、数据根~/.adelie;安装脚本与打包脚本里的产物名仍是penguin-*。 .github/workflows/release.yml仍是上游那条(只能手动 dispatch,且会推上游的 Docker 镜像),
Adelie 自己的发布流水线还没写;这一版的安装包是「本机脚本 +desktop-build.yml手工 dispatch」
打的。
Adelie v0.3.8
Adelie v0.3.8 —— 断掉的实时流自己追上,手机上的频道消息读得清
这一版自 v0.3.7 起在 main 上落了 12 个功能性提交,全部是从上游带回来的健壮性与界面修补。
没有破坏性改动:数据根(~/.adelie/data)、配置格式、既有 HTTP 接口都没动,已装好的机器
不需要改任何配置。
最值得先说的一条是页面的实时连接:会话流或用户事件流如果在没有任何报错的情况下断掉(半开的连接、
卡住的代理、休眠或换了网络的笔记本),页面过去会一直停在原处直到你手动刷新,而 Agent 其实还在
服务器上继续跑;现在页面会察觉这段静默、从收到的最后一个事件处续接,服务器也会主动切断对端已不再
读取的流。另一条是公司模式:打开某个组织的页面时,侧栏不再停留在上一次打开的那家。其余集中在几处
日常会碰到的界面问题——手机上的频道消息变宽、频道记住你没发出的字、输入框打字不再把对话带得抖、
全屏的智能体面板输入区回到对话那一列、回复里的波浪号不再被当成删除线、白领主题的滚动条常显。
这一版改了什么
- 实时流无声断开时,Web App 自行追上进度。 Session 流或用户事件流的连接如果在没有任何错误的
情况下断掉(半开的连接、卡住的代理或 NAT、休眠或切换了网络的笔记本),页面会一直停在原处,
直到刷新,而 Agent 仍在服务器上继续运行。现在页面会察觉这段静默,从收到的最后一个事件处续接流;
服务器也会切断对端已不再读取的流。做法是:服务器心跳改为名为ping的事件(不带id:),
在流的初始事件之后立即发送、之后每 20 秒一次;页面在见过 ping 之后,把 50 秒内没有任何事件判定为
连接已死,关掉这条流并从见到的最后一个事件 id 新开一条,服务器据此重放(该 id 已移出缓冲区时回
resync_required),标签页重新显示时立即检查一次。没有Last-Event-ID请求头时,两条流接口也
接受以查询参数lastEventId传来的最后事件 id。两条兼容性都保住了:从不发送 ping 的旧服务器拿到的
仍是普通 EventSource,旧页面没有ping监听器、而这个不带 id 的帧也不改动它的Last-Event-ID
(上游 #1026 移植)。 - 公司侧栏显示的是当前页面所在的组织。 公司模式下打开某个组织的页面时,侧栏(工位、频道)可能
停留在上一次打开的组织上:页面写着一家公司,侧栏列的却是另一家的员工,切换组织时看起来像新
组织没有任何 Session。原因是「没有路由指明组织时采用上次打开的组织」这个判断用的是发起它的那次渲染
里的值,而组织路由在同一次提交里先执行、shell 看到的仍是「没有」,于是用存储的组织盖掉了路由指定的
那个。现在这个判断按当下的 store 状态决定:路由的选择优先,只在没有任何组织被指定时才采用存储的
那个(上游 #824 移植)。 - 在输入框打字不再带动对话。 输入框每次按键都会重新计算文本框高度:先收成
height: auto,
再读内容高度——这次读取让页面按变矮的输入框排一次版,上方按剩余空间定高的消息列表随之瞬间变高,
停在底部的列表被夹到更高视口的底部,高度恢复后滚动位置却没有退回来。草稿只有一两行时,在部分主题
与字号组合下列表会滑动一个设备像素,回复流式输出期间每次更新把它拉回底部、下一次按键又让它滑开,
于是打字时列表一直在抖;草稿达到三行及以上时,第一次按键就让列表往回滚动多出的那几行,自动跟随
把这次跳动当成用户向上滚动,流式回复不再自动滚入视野、「回到最新消息」按钮随之出现。现在仍然收起
文本框来测量,但测量期间把它的父元素固定在当前高度,输入框以外的布局不受影响;公司频道的输入框
同样修复(上游 #1052 移植)。 - 频道保留你还没发出的消息。 在频道输入框里写了还没发出的文字,过去只活在当前视图里:打开另一个
频道、某个工位、任何别的页面——或刷新——都会把它丢掉。现在它按用户、项目、组织与频道保存在浏览器里
(penguin.channelDraft.…),与对话里未发送的输入同一口径:回到该频道,文字还在原处;别的频道不会
继承它;发出消息(或清空输入框)才会结束它。磁盘与服务端什么都不变(上游 #810 移植)。 - 手机上的频道消息有了足够的宽度。 手机上公司频道的消息气泡偏窄,时间戳又把文字往左挤,中文每行
只排得下七个字左右。现在窄屏上气泡最多占列宽的 88%(sm断点及以上仍是 75%),时间戳不再作为正文
旁边的一栏,而是收在气泡末尾——一行放得下就跟在文字后面,文字需要整行宽度时就单独占一行、靠右、
贴在最后一行下面;正文在手机上是text-base,sm及以上仍是text-sm(上游 #826 移植)。 - 智能体面板全屏时,输入区与子会话对话对齐。 智能体面板把所选子会话的对话排在主对话的阅读列里
(居中,限宽max-w-3xl),输入区却铺满整个面板:停靠时两者重合,停靠栏全屏后对话仍是居中一列、
输入区却横贯被覆盖的整行(1440px 窗口下是 768px 的列配 1100px 的输入区,1920px 下输入区宽达
1616px)。现在输入区与主对话的输入区一样落在对话所在的列内;停靠时的面板没有变化(上游 #1050 移植)。 - 回复中的波浪号按原样显示,不再渲染删除线。 回复里的
~多用来表示范围(3~5 天)或「大约」
(~30 秒),很少用作删除线;同一段里出现两个时,二者之间的文字会被整段划掉。现在不再渲染删除线:
~text~与~~text~~的波浪号按原样显示,夹在中间的内容保留各自的格式。这在 Web App 中凡是以
Markdown 渲染回复的地方(对话、Trace、插件页、文件预览)都生效,转发到飞书、Telegram、QQ 与微信的
回复也一样;GFM 的其余部分(表格、任务列表、自动链接、脚注)不变(上游 #1017 移植)。 - 远程控制的启用开关置灰时,点击会说明先做什么。 对话的远程控制编辑器里,前序步骤未完成时
启用连接开关仍呈置灰样式,但点击它不再没有反应:点击不会向服务器发出请求,而是把提示行的原因弹为
提示消息、短暂强调该行,并把焦点移到要补的地方——微信和 QQ 移到扫码区,飞书和 Telegram 移到第一个
未填写的凭证字段,表单有未保存的修改时移到保存按钮;另一个渠道已启用时,提示会点名该渠道,焦点
保持不动。远程控制文档补充了这一行为(上游 #1029 移植)。 - 创建组织时在组织的锁内写入目录布局。 创建组织现在在组织的锁内写入布局——骨架、
org_config.toml、
org_chart.yaml、手册——并创建 CEO 的 Agent,而删除组织把目录移入回收站时持有的正是同一把锁;
前置检查仍在加锁前进行。此前一次落在「创建写出第一个文件」与「加锁」之间那几毫秒里的删除能通过自己的
守卫、把写了一半的目录移走,留下一个任何列表都不显示的目录、一个占着该 id 的 CEO Agent,却给调用者
一个「未找到」。现在创建进行中到达的删除会等待,随后看到的要么是尚不存在的目录,要么是完整的组织
(上游 #957 移植)。 - 白领主题的滚动条常显。 白领主题是新安装的默认主题,新装的桌面应用也是它。此前在这个主题下,
滚动条只在指针悬停于滚动区域时才出现,有嵌套滚动区的弹窗(如插件详情及其中的文件预览)看不出哪一块
还能滚动;现在白领和朴素、极客一样细滚动条始终显示,颜色沿用它自己的浅色与深色滚动条配色
(上游 #1070 移植)。 - 沙盒不加限制的文件写入模式改称「完全访问」。 沙盒设置里不加任何限制的文件写入选项,名称由
「关闭(完全访问)」(英文 "Off (full access)")改为完全访问(英文 "Full access")——旧名对
选项列表来说太长,也没有别处用它,新名正是权限菜单与预设已经在用的那个;该设置的说明与「没有可用
沙盒后端」的提示也改用同一个名字。已保存的值(danger-full-access)不变,只改了显示名称
(上游 #1021 移植)。 - 目录里的 Dots3-Note Preview 改用半角括号。 内置目录把
dots-3-note-preview列为
Dots3-Note Preview(Free),全角括号沿用自卖方的中文目录,而目录里的模型名不随界面语言翻译,
于是英文界面里也照样显示成一对贴着字的宽字形。用词仍按卖方的写法,只改标点,与目录里其他带括号的
名称一致(Nemotron 3 Ultra (free)、Gemini 3.1 Pro (Preview))(上游 #996 移植)。
升级
桌面端(Windows / Linux 的 AppImage)在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。
默认的镜像源当前不可用,客户端会自动回退到 GitHub Releases;Windows 安装包仍未签名,
SmartScreen 会提示一次(「更多信息 → 仍要运行」)。
服务器 / CLI 装的(tar 包或 npm 全局)用同一条链路,数据根(~/.adelie/data)不动:
penguin update --check # 看有没有新版
penguin update --yes # 原地替换 bin/lib/web/node| 产物 | 目标 |
|---|---|
adelie-desktop-win32-x64.exe |
Windows x64 桌面端(未签名,NSIS 安装器) |
adelie-desktop-linux-x86_64.AppImage / adelie-desktop-linux-amd64.deb |
Linux x64 桌面端 |
penguin-linux-x64.tar.gz |
Linux x64 命令行版(自带 Node 24.18.0) |
penguin-win32-x64.zip |
Windows x64 命令行版(自带 Node 与 MinGit) |
penguin-universal.tar.gz |
任意平台(不带运行时,需要 Node ≥ 24) |
install.sh / install.ps1 |
在线安装脚本(penguin update 取的就是它) |
latest.yml / latest-linux.yml |
桌面端自动更新读的元数据 |
安装包都在 GitHub Release 上:https://github.com/lmliheng/Adelie/releases/tag/v0.3.8,
下载页同样直指这里。npm 上整条链同样是 0.3.8:npm install -g @lmliheng/penguin-cli。
存储清理仍是出厂关闭的。 想用就在设置页「存储」页打开开关,或 penguin storage mode on;
不想用就什么都不用做,行为与上一版一致。
质量门禁(本机跑过)
pnpm typecheck(8 个工作区包全 Done)、pnpm lint(oxlint,2152 文件 3 规则,0 警告 0 错误)、
pnpm format:check(prettier)全过,四道门禁用时 1m41s + 2s + 49s + 4m12s。- 测试全绿:743 个测试文件通过 / 2 跳过,9474 通过 / 18 跳过 / 0 失败(docs 62 · ui 1025 ·
core 1395(+6 跳过) · server 2832(+4 跳过) · cli 539 · web 3110(+2 跳过) · desktop 286 ·
ui-gallery 133 · 四个 sandbox 插件 92(+6 跳过))。
已知待办
- 没有代码签名:Windows 的 Authenticode 与 macOS 的 Developer ID 都没有;macOS 的 dmg 会被
Gatekeeper 拦,所以仍不发 macOS。 - OSS 镜像当前不可用:镜像账号被停用,直链与读写都返回
403 UserDisable;因此下载页与
Release 资产都只指向 GitHub,桌面端更新自动回退到 GitHub。等镜像恢复后一行换回即可。 - 存储清理的第 3、4 步未做:删会话时把它留下的临时工作区一并移入回收站(止漏)、以及重复工具环境的
合并迁移(人工点一次)。数据库维护(VACUUM)也推迟。 - 命令名仍是
penguin、数据根~/.adelie;安装脚本与打包脚本里的产物名仍是penguin-*。 .github/workflows/release.yml仍是上游那条(只能手动 dispatch,且会推上游的 Docker 镜像),
Adelie 自己的发布流水线还没写;这一版的安装包是「本机脚本 +desktop-build.yml手工 dispatch」打的。
Adelie v0.3.7
Adelie v0.3.7 —— 翻看更早的对话不再被甩走,回复可以只复制正文
这一版自 v0.3.6 起在 main 上落了 10 个功能性提交,多数是从上游带回来的健壮性与界面修补,
另有一笔是直接点单的新能力:回复能复制成纯文本。没有破坏性改动:数据根(~/.adelie/data)、
配置格式、既有 HTTP 接口都没动,已装好的机器不需要改任何配置。
最值得先说的一条是对话页的翻页:滚到顶部取回更早的一页时,过去读者会被新插入的整页推走或被甩到底部,
现在正读的那条消息留在原处。另一条是 penguin chat 的粘贴:Task 运行期间贴进去的内容过去会被静默丢掉,
现在会和键入的一行一样成为插话。其余是:等待审批的会话在所有列表里实时标出、排队的 follow-up 加上限、
组织工单的存储在崩溃面前不再丢数据、平台的 HTTP 面在鉴权上收紧了几处。
这一版改了什么
- 往上翻页时,读者停在原来读的那条消息上。 对话页滚到顶部会取回更早的一页并插到已有内容的上方;
过去这次插入会把正在读的内容推走、有时直接甩到对话最底部。现在正看着的那条消息留在原处:
列表与滚动修正在同一次渲染里变化(缓存以已插入的内容本身为键,而不只是那个被节流的版本号),
修正量是量出来的——每次滚动与渲染记下最靠上那条提问在屏幕上的位置,插入后按它实际被挪动的
距离补回(浏览器自己的滚动锚定在非顶端会补偿、在顶端不会,按高度差固定修正要么重复要么缺失);
顶部那行加载提示在上方还有历史时保持高度,出现和消失不再挪动对话(上游 #995 移植)。 - 回复可以复制成纯文本,不再只有 Markdown 源码。 AI 回复的页脚原本只有一个复制按钮,给的是
回复的 Markdown 源码——粘到聊天窗口、工单或文档里,对方看到的是##、**、| --- |这些标记本身。
现在页脚上有两个按钮:原来的照旧复制 Markdown,旁边新增的**「复制纯文本」**给出把标记去掉之后的正文。
纯文本按渲染时的同一套方言拆开(标题 / 强调 / 行内代码去标记,列表保留-与编号并按层级缩进,
表格去首尾竖线与那条对齐用的| --- |,引用去>,链接写成标签 (地址),图片取 alt,
围栏代码块里的代码原样保留),只有这一轮确实有正文时这个按钮才出现。 - 等待审批的会话在所有列表里实时标出。 过去侧栏行上的审批标记只来自最近一次列表拉取,所以当你
开着另一个对话时,某个开始等待工具审批的会话不会显示任何标记,直到列表重新加载。现在用户通道新增
session_approvals事件(带该会话等待审批的调用数),Web App 收到就立刻更新对应那一行:
升级给人、回答、中断或 Task 边界上被拒都会发布,一次中断拒掉多个调用只发一个事件,计数归零同样发出
(上游 #1002 移植)。 penguin chat在 Task 运行期间的粘贴不再被丢掉。 过去终端里贴进去的文本既没送到模型、屏幕上
也没有任何提示,而同一时刻键入的一行却会成为插话;Task 刚结束、REPL 还没回到提示符时的粘贴同样会丢。
现在粘贴在所有接受消息的状态下都与键入的文本一致:运行中贴入的文本回显并等 Enter,按下后整段作为
一条插话发出(多行粘贴因此是一条消息),等待期间流式输出暂停;Task 若在按 Enter 之前结束,
这段文本留在续行提示符下,下一次 Enter 把它作为下一条 Prompt 发送。审批询问与退出确认期间的粘贴
仍按要求只接受键入的 y/N(上游 #1001 移植)。penguin chat为终端标记提示符。 在终端里现在会输出 OSC 133 语义提示符序列——支持它的终端
可以在对话的提示符之间跳转、整轮选中输出,承载对话的宿主程序也能知道对话何时回到提示符、可以接收
输入,而不必去匹配提示符文本。只有 stdin 与 stdout 都是终端且TERM不是dumb时才输出,
被重定向或接管道时一个标记都没有;这些序列宽度为零,不认识的终端会忽略它们(上游 #1003 移植)。- 一个会话排队的 follow-up 上限 16。 带
queueIfBusy提交的 Task 现在对第 17 条排队的 follow-up
以429 queue_full拒绝,而不是无上限入队。总是要求排队的路径——组织频道的 @提及、日程向繁忙工位的
派发——把拒绝记下来后继续(周期日程项在下一个槽位照常触发),于是一场提及风暴或一次 @ALL 扇出
不再让工位队列无限增长、再把每一条都重放成一次模型调用。不带queueIfBusy的409 task_in_progress
不变,排出一条即空出一个位置(上游 #853 移植)。 - 派发失败的一次性日程项在下一轮重新触发。 一次性日程项派发返回 skipped(开不出工位,或 Task 无法
入队)时,已消耗的时间槽现在会释放,于是下一轮对账重新触发该事件,并带上随之重新入队的工位通知。
此前那个时间槽一直算已消耗,员工的工单变化无限期留在队列里,只留下一行派发错误。这类失败运行从未
开始,重试不会让事件触发两次;持续失败仍会在每一轮以error结果显露(上游 #852 移植)。 - 组织存储的写入改原子、崩溃后同时出现在两列的工单不再丢。 组织存储写出的每个文件——组织配置、
架构图、工单、频道、日程项、手册——现在都经由核心的原子写入(唯一命名的临时文件再重命名到位)落盘,
写到一半崩溃不会再留下被对账判为非法、从而从看板移除的截断文件;移动工单时删旧列也不再吞掉错误,
只放过文件本已不存在的情形。同一工单 id 出现在两列时(写入与删除之间崩溃),看板保留最新的一份、
过期的一份列入非法文件,而不是两份一起消失(上游 #850 移植)。 - 阻塞工单时按组织架构校验
by主体。 阻塞工单(block接口、penguin org ticket block --by
与员工工具)现在对agent:<id>/user:<id>形式的by施加组织接受的其他主体早已遵循的规则:
agent 必须是架构图上的员工,user 必须是本 Project 的成员,否则以400 invalid_principal拒绝写入。
此前任何形状合法的 id 都会写进blocked_by,并在摘要与看板上显示成「(by …)」。工单 id 形式仍只做
存在性检查,省略by仍清除阻塞,已存储的值不会被改写(上游 #851 移植)。 - 路由组的
auth标记不再随挂载位置而变。 平台的 HTTP 面原先只在第一个受保护路由组之前、
于/api/*上挂一次登录门,于是路由组的auth标记实际取决于它的排列顺序。现在登录门挂在每个受保护
路由组自己的前缀上:以auth: "none"贡献、位于/api下的路由组即使排在受保护组之后也保持公开
(此前未登录请求会拿到 401);没有任何路由组服务的路径由平台拒绝、返回 404(此前/api下的
这类路径对未登录请求返回 401);一条路径经过多个受保护前缀时只鉴权一次。顺带一处收紧:
GET /api/contributions每条贡献的id与from恒为服务端自己的归属信息,贡献数据里的同名字段
不再能覆盖它们(上游 #793 移植)。
升级
桌面端(Windows / Linux 的 AppImage)在应用内更新:账号菜单的更新入口,或应用菜单里的「检查更新」。
默认的镜像源当前不可用,客户端会自动回退到 GitHub Releases;Windows 安装包仍未签名,
SmartScreen 会提示一次(「更多信息 → 仍要运行」)。
服务器 / CLI 装的(tar 包或 npm 全局)用同一条链路,数据根(~/.adelie/data)不动:
penguin update --check # 看有没有新版
penguin update --yes # 原地替换 bin/lib/web/node| 产物 | 目标 |
|---|---|
adelie-desktop-win32-x64.exe |
Windows x64 桌面端(未签名,NSIS 安装器) |
adelie-desktop-linux-x86_64.AppImage / adelie-desktop-linux-amd64.deb |
Linux x64 桌面端 |
penguin-linux-x64.tar.gz |
Linux x64 命令行版(自带 Node 24.18.0) |
penguin-win32-x64.zip |
Windows x64 命令行版(自带 Node 与 MinGit) |
penguin-universal.tar.gz |
任意平台(不带运行时,需要 Node ≥ 24) |
install.sh / install.ps1 |
在线安装脚本(penguin update 取的就是它) |
latest.yml / latest-linux.yml |
桌面端自动更新读的元数据 |
安装包都在 GitHub Release 上:https://github.com/lmliheng/Adelie/releases/tag/v0.3.7,
下载页同样直指这里。npm 上整条链同样是 0.3.7:npm install -g @lmliheng/penguin-cli。
存储清理仍是出厂关闭的。 想用就在设置页「存储」页打开开关,或 penguin storage mode on;
不想用就什么都不用做,行为与上一版一致(只有只读的分类账多出来)。
质量门禁(本机跑过)
pnpm typecheck(8 个工作区包全 Done)、pnpm lint(oxlint,2142 文件 3 规则,0 警告 0 错误)、
pnpm format:check(prettier)全过,四道门禁用时 1m34s + 2s + 52s + 4m15s。- 测试全绿:738 个测试文件通过 / 2 跳过,9450 通过 / 18 跳过 / 0 失败(docs 62 · ui 1021 ·
core 1395(+6 跳过) · server 2826(+4 跳过) · cli 539 · web 3096(+2 跳过) · desktop 286 ·
ui-gallery 133 · 四个 sandbox 插件 92(+6 跳过))。
已知待办
- 没有代码签名:Windows 的 Authenticode 与 macOS 的 Developer ID 都没有;macOS 的 dmg 会被
Gatekeeper 拦,所以仍不发 macOS。 - OSS 镜像当前不可用:镜像账号被停用,直链与读写都返回
403 UserDisable;因此下载页与
Release 资产都只指向 GitHub,桌面端更新自动回退到 GitHub。等镜像恢复后一行换回即可。 - 存储清理的第 3、4 步未做:删会话时把它留下的临时工作区一并移入回收站(止漏)、以及重复工具环境的
合并迁移(人工点一次)。数据库维护(VACUUM)也推迟——web.db不是占用大头。 - 命令名仍是
penguin、数据根~/.adelie;安装脚本与打包脚本里的产物名仍是penguin-*。 .github/workflows/release.yml仍是上游那条(只能手动 dispatch,且会推上游的 Docker 镜像),
Adelie 自己的发布流水线还没写;这一版的安装包是「本机脚本 +desktop-build.yml手工 dispatch」打的。