Releases: lijian-ui/Pi-DeskTop
Releases · lijian-ui/Pi-DeskTop
Release list
Pi Desktop 0.6.0
Pi Desktop v0.6.0 Release Notes
✨ 本版概要
- 语音合成(TTS):桌面端 LLM 回复支持朗读 + 流式自动播放,并可在 IM 渠道以语音消息回复(小米 MiMo-V2.5-TTS)。
- 飞书(Feishu / Lark)IM 通道:新增飞书机器人接入,与钉钉 / 微信 / QQ 并列。
- IM 语音回复:QQ、飞书支持把 AI 回复合成语音发送,可设「仅发送语音」。
- IM 会话 / 工作区命令:新增
/workspaces/workspace/sessions/continue。 - LLM 回复区重构:思考过程 / 工具 / 中间回复折叠为「思考与工具」面板;思考内容默认折叠,避免大段思考撑爆回复区。
- 用户消息代码引用卡片折叠:引用卡片可点击展开 / 收起。
新增功能
1. 语音合成(TTS)
- 新增独立 TTS 子系统(主进程
src/main/tts/tts-service.ts,渲染端src/renderer/sidebar/TtsPage.tsx)。 - 模型:MiMo-V2.5-TTS(小米 mimo),通过 OpenAI 兼容接口调用。
- 非流式:返回完整 WAV(base64)。
- 流式:返回 PCM16(24kHz 单声道) 分块,渲染端
pcm-player.ts实时播放,LLM 流式结束即同步朗读。
- 设置页新增「语音合成」分区:
- 多配置管理(增 / 删 / 改 / 设为当前)、预置音色(冰糖 / 茉莉 / 苏打 / 白桦 / Mia / Chloe / Milo / Dean)、自然语言「语气风格」指令、测试语音、流式自动播放开关。
- 配置持久化到
~/.pi/agent/tts-config.json(独立于settings.json,密钥隔离)。
- 桌面端 LLM 回复气泡新增「朗读 / 停止」按钮(
AssistantTurn.tsx),开启流式开关后回复完成自动播放。 - IPC:
pi:getTtsConfig/pi:saveTtsConfig/pi:ttsSynthesize/pi:ttsSynthesizeStream;主进程通过pi:ttsChunk/pi:ttsDone推送音频分块。预加载window.piDesk.ttsSynthesize/onTtsChunk/onTtsDone。
2. 飞书(Feishu / Lark)IM 通道
- 新增
feishu渠道类型(src/main/im/feishu/:adapter / connection / reply)。 - 配置字段:
appId/appSecret/encryptKey(可选)/verificationToken(可选)/brand(feishu / lark)。 - 渠道弹窗(
ImChannelModal)支持飞书字段与可选标记;vite.config.ts将@larksuiteoapi/node-sdk设为 external(与 dingtalk-stream 同模式,运行时由 Electron 解析)。
3. IM 语音回复(QQ + 飞书)
- 渠道实例新增
ttsReply(同时发语音)与ttsVoiceOnly(仅发语音,失败自动回退文字)。 - QQ 适配器
sendVoice:文本 → MiMo TTS → WAV → SILK Base64 → QQ 语音消息(@tencent-connect/qqbot-nodejs的audioFileToSilkBase64)。 - 网关在回复完成时按渠道配置合成语音;
voiceOnly模式下跳过文字流、仅发语音(语音失败回退文字)。
4. IM 会话 / 工作区管理命令
/workspaces:列出所有工作区(近期目录 + 会话历史 cwd,标记当前会话)。/workspace <路径>:设置待切换工作区(校验目录存在),下次/new生效。/sessions:列出全部会话(编号 + 首条消息预览 + 工作区),供/continue快捷引用。/continue <id 或编号>:将当前会话映射到已有 Pi 会话文件(ImSessionMap.setMapping)。- 帮助文本同步更新;
/model列表格式优化。
5. LLM 回复区 · 思考与工具折叠
- 会话回合折叠(消息列表重构为
MessageList → AssistantTurn + ThinkingTools),同一回合只显示一个 Pi 头像,中间过程(思考 / 工具 / 中间回复)聚合成「思考与工具」面板:流式自动展开、完成自动折叠。 - 本版新增:思考内容默认折叠——面板内新增「思考过程」开关,流式 / 完成态均折叠,用户手动点开查看大段思考,回复区始终保持清爽(折叠态下空 step 自动过滤,不留分隔线)。
6. 用户消息代码引用卡片折叠
- 用户气泡内的代码 / 终端引用卡片(
RefCard)可点击标题折叠 / 展开(ChevronRight旋转指示)。
修复与体验优化
- 代码块复制修复:
Markdown.tsx复制改为从渲染后<code>元素取textContent,修复 rehype-highlight 把代码包成<span>导致复制内容带标签 / 丢失的问题;同时修正代码块首尾多余换行。 - 发送流程优化:
ChatComposer/useAgentSession在发送时乐观插入用户气泡(含attachments,经mutateBuffer写入messagesByPath避免附件被 SDK 事件覆盖);队列发送时重建fullBody(用户文本 + 展开的代码引用),确保模型收到完整上下文,附件引用随消息入队转发。 - 停止逻辑统一:
steer/followUp/abort改用resolveCwd(cwd)解析工作目录(与既有「空 cwd 回退 chatOnlyCwd」约定一致),避免误定位到 null 工作区。 - 主题 / 原生控件修复:
tokens.css增加color-scheme: dark / light;global.css强制<option>背景 / 前景按主题着色,修复 Windows / Electron 下<select>下拉框始终白底黑字的问题。 - i18n:新增飞书、TTS、语音回复、IM 命令等近 90 条中英文文案。
依赖与构建
vite.config.ts:external 增加@larksuiteoapi/node-sdk。package.json/package-lock.json:TTS 服务使用axios;QQ 适配复用@tencent-connect/qqbot-nodejs的 SILK 转换。
验证状态
| 项目 | 状态 |
|---|---|
类型检查(渲染端 tsc -p tsconfig.json --noEmit) |
✅ 通过 |
类型检查(主进程 tsc -p tsconfig.node.json --noEmit,含 TTS / 飞书) |
|
| 生产构建 / 打包(electron-builder) | |
| TTS 实际合成 / 飞书接入 / QQ 语音回复 |
本版为未提交的工作区改动汇总。发版前请在本地完成主进程类型检查与生产构建,并实测 TTS、飞书接入与 QQ 语音回复链路。
如果使用过程中遇到任何问题,请直接到 [Issues]( 反馈。
Pi Desktop 0.5.0
Pi Desktop v0.5.0 Release Notes
✨ 本版概要
- Pi SDKimidazoline 升级
@earendil-works/pi-coding-agent:0.83.0→0.84.2(0.84.0 为 SDK minor 版本,按 semver 属破坏性升级;经兼容性核对,本项目所用 API 无破坏,已直接升级) - 桌面端里程碑:
v0.4.0→v0.5.0(新增能力汇总 + 依赖升级,属于大版本更新)
重要变更(Breaking / Notable)
依赖:Pi SDK 0.83 → 0.84
0.84.0 的 Breaking 集中在内层:
pi-agent-core的会话仓储 API 全面切换为 v4 Lane 结构(SessionStorage/SessionRepo)- 移除旧版
message_update事件中的累积message与partial字段;本项目仅使用assistantMessageEvent.delta(文本与思考增量),不受影响 ModelRuntime.setRuntimeApiKey()第三参数由「目录刷新参数」改为「鉴权取消参数」——本项目仅传两个参数,不受影响- 远程会话通用客户端(
RemoteSession.sessions摘要)切换为SessionMetadata——本项目未使用
上述 Breaking 均不涉及本项目实际使用的 SDK 面;已验证流式协议类型定义(
message_update结构完全匹配)。
新增功能(0.84.x 带给我们)
- Mermaid / LaTeX 渲染(0.84.0 新增)
- Git Bash 文件工具路径修复(0.84.0;Windows 桌面端直接受益)
- 流式
message_update的累计用量修复(0.84.2) - Windows 下 Git Bash 的
~/.pi/agent目录扫描效率优化(0.84.2) - 模型目录、认证检查等可靠性增强(0.84.x)
0.84.0 ∽ 0.84.2 详细差异(选择)
0.84.1 / 0.84.2:错误修复(固定 message_update 上 accumulated usage 消失;defaultTools设置项,缺省与旧行为等价)- Windows drive 路径、网络重试增强等
🐛 修复与体验
- 0.84.2 修复流式
message_update过程中 usage 累积丢失 - 0.84.0 修复 Git Bash 文件工具盘符路径与终端显示路径不一致问题(Windows 桌面端显著受益)
- 0.84 模型目录 / npm 包在启动阶段异常退出时可自动重试
- 0.84 增加
defaultTools配置文件设置项(不配置即沿用旧行为)
📦 安装与升级
- 升级:
npm install @earendil-works/pi-coding-agent@^0.84.2已执行 - 定位:agent SDK 作为依赖内嵌,不使用独立 pi CLI 二进制;无独立二进制 / 自更新器需要替换
验证状态
| 项目 | 状态 |
|---|---|
类型检查(tsc --noEmit) |
✅ 通过 |
| 生产构建(renderer / main / preload) | ✅ 通过 |
事件协议核对(message_update) |
✅ 兼容 |
| lint |
如果使用过程中遇到任何问题,请直接到 [Issues]( 反馈。
Pi Desktop 0.4.0
Pi Desktop v0.4.0 Release Notes
✨ 新功能
IM 网关(钉钉机器人接入)
- 新增「IM 接入」导航页:配置钉钉机器人(渠道名称 / AppKey / AppSecret)、启用 / 停用、连接状态实时展示,支持单聊与群聊。
- AI 卡片流式输出:钉钉端回复实时流式呈现(AI 卡片),工具执行期间保持"输入中",回复结束自动定格;长回复节流合并发送,不再被平台截断。
- 斜杠命令(钉钉内直接发送):
/model查看已配置模型、/model <名称或编号>切换会话模型;/compact压缩上下文;/help命令帮助;/reset/clear/new开启新会话。 - 默认工作区:每个渠道可配置默认工作目录,机器人会话的 AI 可直接读写该目录下的项目文件;未配置时使用内置聊天目录。
- 会话迁移:已建立的 IM 会话可整体迁移到新工作目录,对话历史保留、会话身份不变(同一会话在桌面端与钉钉端连续)。两个入口:IM 接入页按渠道批量迁移、桌面会话窗口"选择工作目录"单会话迁移(正在回复的会话自动跳过)。
- 侧栏辨识:IM 会话在侧栏显示为「[渠道名] 首条消息」,一眼区分来源;会话按工作目录归入「空间」分组。
- 图片消息支持:钉钉中直接发图片(或图片 + 文字),AI 可识别图片内容(多模态,需模型支持视觉)。图片经钉钉下载接口转 base64 随消息传给模型,下载失败自动降级为文本提示,不影响回复。
- 群聊回复自动 @:群聊中 @ 机器人提问后,AI 回复会自动 @ 提问人,多人场景不再看漏回复。
/status命令:钉钉内发送/status查看当前会话的工作目录与所用模型(/help命令列表同步更新)。- 引用消息:钉钉中"回复某条消息"再提问,被引用内容(含图片)自动附加给 AI,追问场景上下文不丢。
- 语音转文字:语音消息由钉钉服务端识别后交给 AI(无识别结果时降级为提示文本)。
- 文件消息解析:接收 docx / pdf / txt 等文件并自动解析文本内容供 AI 阅读(解析失败降级为文件名提示,不影响回复)。
- AI 主动发送图片 / 文件:回复中提及本地文件路径(或 markdown 图片语法)时自动上传,并作为独立图片 / 文件消息发送,文本中替换为提示——不依赖 AI 学习任何特殊约定。
- markdown 表格渲染:AI 卡片与消息中的 markdown 表格正常渲染(此前被内容预处理破坏,已改为原样发送)。
- 群聊消息队列:同一群的并发提问按到达顺序串行回复(A → B → C),不会回复丢失或内容混合。
- 工具调用进度展示:AI 调工具时卡片实时显示"🔧 正在调用工具:xxx 参数",正文到达自然覆盖;工具只调不总结时卡片定格"✅ 已完成"。
- 用户姓名 / 群名感知:AI 收到
[群:xxx][用户:张三]前缀,知道谁在哪个群提问,可称呼对方;群聊最终回复带@昵称前缀(文本 @,明确回复对象——钉钉企业内部机器人不支持真 @ 渲染,为平台限制)。 - 渠道卡片操作强化:编辑 / 删除 / 启停开关 / 批量迁移会话 / 配置工作区。
个人微信(iLink 扫码接入)
- 扫码绑定,无 AppID/AppSecret:添加渠道选「微信」→ 显示二维码(主进程用
qrcode渲染为图片)→ 手机微信扫码(必要时输入配对码)→ 绑定成功自动写入凭证,保存即连接。 - 文本收发:官方 iLink 协议(HTTP 长轮询 getupdates),单聊直连;回复自动过滤不支持的 markdown 语法(代码块/表格保留、中文斜体/图片标记剥离),发送期间显示"正在输入"。
- 图片收发:接收图片自动 AES 解密后交给 AI 识别(多模态);AI 回复中提及本地图片 / 文件路径时自动上传发送为独立图片 / 文件消息(发图依赖 iLink CDN 服务,平台侧偶有限制)。
- 会话过期保护:token 失效(errcode=-14)自动暂停轮询 5 分钟,渠道卡片显示「登录已过期」并提供一键重新扫码绑定,不再静默失联。
- 断线重连:长轮询超时静默重试、指数退避;
get_updates_buf游标与上下文 token 落盘,重启后续聊不丢消息。 - 支持多实例:可扫码绑定多个微信(各实例独立机器人、独立会话)。
QQ 机器人(扫码接入)
- 扫码绑定,无 AppID/AppSecret 手动配置:添加渠道选「QQ」→ 展示二维码 → 手机 QQ 扫码 → 自动写入机器人凭证(AppID + AppSecret),保存即连接;已绑定渠道可一键重新扫码。
- 文本收发:QQ 官方 SDK(
@tencent-connect/qqbot-nodejs,WebSocket 长连接),私聊全收、群聊仅响应 @ 机器人的消息(自动防骚扰);QQ 原生渲染 markdown(代码块 / 表格 / 列表直接显示)。 - 斜杠命令(QQ 内直接发送):
/model/compact/status/reset/clear/new/help,与钉钉 / 微信一致。 /stop命令(桌面端 + IM 端):随时停止当前运行——agent 停止生成,正在执行的 bash 命令同步终止(子进程树被清理),桌面端停止按钮与 IM 端/stop行为一致(QQ / 钉钉 / 微信通用)。- 图片收发:接收图片自动下载交给 AI 识别(多模态,无需解密——QQ 附件直接给明文 URL);AI 回复中提及本地图片 / 文件路径时自动上传为独立图片 / 文件消息,文本中替换为提示。
- 语音转文字:语音消息由 QQ 服务端识别(ASR)后交给 AI,无需额外处理。
- 流式输出(打字机):私聊回复实时逐字呈现(QQ stream_messages,500ms 节流),群聊自动回退整段发送(平台不支持群聊流式);流式被平台拒绝(内容前缀变更)时自动降级整段发送,不中断回复。
- 引用消息:QQ 中"回复某条消息"再提问,被引用内容自动附加给 AI,追问场景上下文不丢。
- 渠道命令审批:渠道开启「命令审批」后,AI 执行 bash 命令需在 QQ 上确认——QQ 发送带按钮的审批卡片(✅ 允许 / ⛔ 拒绝 / 🔁 允许并记住 / 本次会话允许),点按钮即放行;钉钉 / 微信回退文本指令(
/allow/deny/allow_always,或allow:1等),三端统一不重复确认(渠道审批优先于桌面端全局模式,危险命令黑名单始终强制)。 - 允许并加入白名单:审批时点「允许并记住」→ 命令动词自动写入全局白名单(
~/.pi/agent/bash-guard.json),以后全渠道免审批;黑名单命令拒绝写入。桌面端审批弹窗同步新增该选项。 - 定时任务完成推送:定时任务可配置「完成后推送」到指定 IM 渠道(QQ / 微信 / 钉钉),任务执行结果(最终回复)主动推送到该渠道最近活跃会话。
定时任务(自动化)
- 新增「自动化」一级导航与定时任务管理页:创建 / 编辑 / 启用暂停 / 删除 / 立即运行。
- 三种调度类型:每天(指定时间)、间隔(按分钟)、单次;30 秒心跳调度,防重入,错过运行窗口按配置策略自动处理。
- 任务编辑支持:提示词、附加规则(随任务注入
<scheduled_task>系统提示词块)、执行模型独立选择、权限配置(YOLO 全自动 / 询问仅白名单,危险命令黑名单始终强制)。 - 运行历史自动归档:一个任务 = 一个累计会话,存于标准会话目录;侧栏「定时任务」分组点击即开,支持继续追问、导出、重命名、删除;运行中显示转圈,执行事件实时推送。
- 任务配置独立存放
~/.pi/agent/scheduled/(scheduled-tasks.json / scheduled-runs.json / scheduled-state.json),启动自动迁移旧位置文件。
多模态图片输入
- 对话输入框支持粘贴(Ctrl/Cmd+V 剪贴板截图)/ 文件上传 / 拖拽三种方式添加图片。
- 待发送图片以胶囊缩略图展示,可逐个移除;发送时以 base64 随消息传给模型(Pi SDK 原生支持
prompt(text, { images }),主进程 / preload 零改动)。 - 消息内渲染图片缩略图,点击可看大图;图片从 SDK
message_start事件与会话历史的imagecontent block 解析,切换/重开会话后缩略图依然保留。 - 流式队列场景透传图片;支持多模态模型(Qwen-VL / GPT-4o / Claude 等)"看到"图片,纯文本模型自动忽略不崩溃。
规则与记忆(设置)
- 原「记忆」占位页升级为「规则与记忆」页面。
- 导入设置:AGENTS.md、CLAUDE.md(含 CLAUDE.local.md)上下文文件导入开关,拨动即保存;默认均不注入,由用户自行开启。开启后按目录链自动发现并注入系统提示词(AGENTS 与 CLAUDE 可同时注入)。
- 规则:单一
rules.md文件管理全部规则,支持创建 / 编辑 / 删除;规则以<rules>块注入系统提示词最末尾,所有会话(含定时任务)遵循;每轮重读,保存后下一条消息即生效。
Pi 扩展商店
- 新增一级导航「扩展」,对标 pi.dev 的扩展市场:市场 / 已安装双 Tab。
- 市场:数据直接来自 npm registry(
keywords: pi-package),支持关键字搜索、按下载量排序、无限滚动分页(触底自动加载 + 「加载更多」兜底,可浏览成百上千个包)。 - 包详情弹窗:点击任意卡片弹出,展示完整元信息(版本 / 发布时间 / 作者 / 许可证 / 体积 / 依赖数 / 月下载 / 周下载量)+ README 全文(Markdown 渲染),并可直接安装、跳转 npm / 主页 / GitHub。
- 已安装:列出已安装扩展(支持 git 源),一键卸载;npm 源的已安装卡同样可点开详情;详情中对已装包显示「已安装」状态。
- 安装机制直接复用 Pi SDK 的包管理器(无需
piCLI):包下载到~/.pi/agent/npm/node_modules/,配置写入settings.json的packages;装/卸后清缓存,下一会话生效(暂只支持全局安装)。
帮助与反馈
- 新增「帮助」页面:新手引导(快速上手)、常见问题(FAQ)、资源链接(官方文档 / 扩展市场 / 版本发布页)、反馈渠道(问题上报),并接入原生菜单入口。
- 帮助页内所有外部链接统一走系统默认浏览器,不弹应用内窗口。
技能页(扩展技能管理)
- 新增启用 / 停用开关:停用后 agent 系统提示词不再注入该技能(
disable-model-invocationfrontmatter,即时生效),输入框/命令补全同样排除;技能列表默认全部显示(停用项置灰 + 「已停用」标记),可一键「隐藏已停用」。 - 新增删除按钮(垃圾桶图标):移除技能目录,二次确认弹窗,仅允许删除用户 / 项目技能目录内的技能(路径安全校验)。
🐛 问题修复
- 定时任务会话点击无反应:会话文件改存标准
sessions/目录,可被正常发现与打开。 - 运行后侧栏分组不出现(需手动刷新):运行事件同步刷新会话列表。
- 第二次运行结果不显示(需整页重载):定时任务运行事件接入统一事件管道,内容实时累积。
- 运行完成后仍转圈:运行记录引入唯一 ID,状态准确落盘。
- 定时任务默认工作目录误用 chat 目录导致会话重复渲染:默认改为空,未绑定工作空间时运行于
~/.pi/agent/cron兜底目录。 - 外部链接打开应用内新窗口:所有 http/https 外链(详情页链接、README、LLM 回复中的链接等)统一改用系统默认浏览器打开,不再弹出应用内窗口。
- 扩展市场搜索 400:搜索关键字与基础查询参数冲突(重复 text 参数),改为替换式拼接。
- 钉钉机器人连接报错(bufferutil):
ws可选原生依赖残留打包导致连接启动失败,改为运行时解析整条依赖链。 - 钉钉消息无响应:机器人订阅声明晚于连接握手,服务端不下发消息;调整注册时序后正常收发。
- 钉钉"回声"与回复丢失:SDK 对用户消息也会发
message_end,回复路由按角色过滤后修复。 - IM 会话点开不渲染 / 切模型不生效:会话事件改为始终广播(渲染端按会话累积);模型切换显式携带会话工作目录。
- 钉钉卡片卡"处理中" / 长回复截断
***:结束信号改用回复周期终点(agent_end);流式发送节流合并,规避平台单帧限制。 - IM 会话迁移后 AI 仍在旧目录工作:会话工作目录以会话文件自身 header 为准(迁移、渠道配置均不覆盖),钉钉端与桌面端一致。
/model无参报错:模型列表超长触发平台消息长度限制,改为只列已配置模型并自动拆条发送。/model供应商名显示为模型名:展示层增加品牌名映射与脏数据兜底(provider 名称等于模型 ID 时回退显示供应商 ID)。- 钉钉发图 AI 无响应 / 只收到文本:图片消息负载解析错误(钉钉将消息体放在
content字段而非顶层字段),已修正;同时支持图文混合(richText)消息,图片 + 文字可一并交给 AI。 - IM 接入页进入时内容跳动:异步加载期间显示稳定"加载中"占位,不再先闪现空状态再跳成真实内容。
- IM 空状态重复的"添加渠道"按钮:移除空状态内的按钮,统一使用右上角入口。
- IM 接入页观感回归朴素:移除渐变头、悬停抬升、入场动画等装饰,仅保留功能性状态动画(加载旋转、状态指示),暗 / 亮主题一致。
- 钉钉 markdown 表格不渲染:卡片内容预处理给表格每行前插空行,导致解析器不识别为连续表格;移除预处理、内容原样发送后正常。
- AI 发送图片在钉钉显示损坏:
sampleImageMsg的photoURL需传带@前缀的原始 media_id(去@或 URL 形式客户端均不识别,显示损坏图标)。 - AI 发送文件在钉钉显示异常:
sampleFile的mediaId字段同样需传带@前缀的原始 media_id(与图片一致),否则文件消息不可用。 - 钉钉内联 markdown 图片不显示:客户端 markdown(卡片 / 消息)不渲染图片引用,回复中的图片引用统一替换为纯文本提示,图片走独立图片消息。
- 群聊回复不自动 @:新版机器人接口的
sampleText消息参数不支持at,改用消息自带的会话 webhook 发送群聊回复(官方同款通道),命令 / 文本回复自动 @ 提问人。 - 命令回复挤成一行:钉钉 markdown 渲染遵循规范(单个换行不换行),
/status/help/model回复改为 markdown 列表项,逐行展示。 - 桌面端钉钉会话只显示最近几轮:点击会话时若本地缓冲存在即跳过历史加载;改为始终从主进程拉取完整历史(缓冲仅用于实时增量)。
- 钉钉群聊 @ 无法渲染:企业内部机器人(stream + 新版接口)不支持 @(官方文档"接口暂不支持 @ 功能",webhook 的 userIds / atUserIds / atDingtalkIds 均不渲染)——平台限制,以回复文本
@昵称前缀替代。 - QQ 保存配置卡"保存中":SDK 启动在扫码后未上线的机器人上永久重连不返回,绑定已成功但保存流程被阻塞;改为异步预取 token + 启动超时兜底,保存即时完成(绑定成功 ≠ 机器人已上线,需在开放平台完善信息)。
- QQ 审批按钮点击变文本:按钮交互类型配置错误(
action.type=2被 QQ 当作快捷回复,点击把代码当消息发送);改为type=1(交互回调)后点按钮直接审批放行。 - 钉钉审批无多按钮卡片:钉钉 v1.0 机器人接口无多按钮 ActionCard 模板(
sampleActionCard_2/sampleCard均被拒),钉钉审批以文本指令(/allowallow:1)呈现,多行排版展示。 - 停止按钮不终止正在运行的 bash 命令:SDK 的
session.abort()只停止 agent 生成、等待 bash 子进程自然结束(abortBash仅在会话销毁时调用);改为停止前先触发abortBash()终止命令进程树——桌面端停止按钮与 IM 端/stop均立即生效。
📦 构建
- 版本号:
0.4.0 - Electron:
^35.0.0 - Pi SDK:
^0.83.0 - node-pty:
^1.1.0 - React:
^19.1.0 - 新增依赖:
dingtalk-stream(钉钉机器人长连接)、axios(钉钉开放平台 API)、mammoth+pdf-parse(docx / pdf 文档解析)、form-data(媒体上传)、@tencent-connect/qqbot-connector+@tencent-connect/qqbot-nodejs(QQ 扫码绑定与机器人 SDK)
Pi Desktop 0.3.0
Pi Desktop v0.3.0 Release Notes
✨ 新功能
跨平台终端
- macOS 终端支持:终端模块完成跨平台重构,Mac 上点击终端按钮即可打开内置终端,默认使用 zsh,可在下拉列表切换为 Bash;Windows 继续支持 Git Bash / PowerShell / CMD。
- Shell 自动探测:根据已安装环境自动列出可用 shell,未安装的 shell(如未安装的 Git Bash)不会出现在下拉列表中。
- 终端基于 node-pty 真 PTY:关闭面板 = 隐藏(保留全部输出与进程常驻),切换设置/技能视图时不卸载,切 shell 显式重建。
🐛 问题修复
- Mac 终端无法启动(posix_spawnp failed):修复 Mac 上 node-pty 原生二进制与 Electron 运行时不兼容导致终端打不开的问题;Mac 构建现自动针对本机 Electron 重编 node-pty。
- 任务会话权限按钮错位:不选择工作空间进入任务会话时,权限选择按钮稳定保持在输入框右侧。
- 暗色主题下拉白底:修复暗色主题下权限下拉列表、配置模型模态框背景显示为白底的问题(修正主题变量引用)。
- 配置模型模态框误关:修复在模态框内选中文本并拖出时误关闭配置页面的问题(改为按下时判定点击目标)。
- 输入框拼写红线:关闭所有输入框的拼写检查波浪线。
- 启动偶发报错:修复启动阶段 IPC 竞态(渲染进程早期调用抢跑在 SDK 初始化完成前),启动更稳定。
- 关于框版本号:版本号改为动态读取,正确显示当前版本(不再写死旧值)。
📦 构建
- 版本号:
0.3.0 - Electron:
^35.0.0 - Pi SDK:
^0.83.0 - macOS 构建需本机安装 Xcode 命令行工具(
xcode-select --install),构建时自动重编 node-pty。
Pi Desktop 0.2.0
Pi Desktop v0.2.0 Release Notes
🐛 问题修复
资源泄漏
- TerminalManager 退出未释放:修复了应用退出时
node-pty伪终端进程未调用dispose()的问题,避免残留僵尸进程。
数据安全
- auth.json 并发写竞争:新增
authWriteLock顺序写锁,保护saveApiKey/deleteApiKey/saveCustomProvider/deleteCustomProvider的读-改-写操作,防止并发调用导致写入覆盖。
安全可用性
- Bash 黑名单无效正则静默丢弃:
compileBashPatterns现在会在控制台输出警告日志,提示用户在bash-guard.json中配置了无效的正则模式,不再静默跳过。
代码质量
- 消除 extractText 重复代码:提取共享工具模块
src/renderer/utils/content-utils.ts,统一extractText/extractThinking的实现,替代三处内联的any类型逻辑。
🚀 性能优化
- 会话缓冲 LRU 淘汰:
messagesByPath新增 20 个会话的上限,超限时自动驱逐最旧的非当前会话缓冲,防止频繁切换工作区导致内存持续增长。 - 工具输出截断显示:工具执行输出超过 5,000 字符时默认折叠,附带"展开完整输出"按钮。不影响 SDK 上下文(LLM 仍持有完整输出)。
- 上下文用量去重写入:
compaction_end事件中,当 token 数与上次写入相同时跳过磁盘写入,减少不必要的 I/O。
📦 构建
- 版本号:
0.2.0 - Electron:35.7.5
- Pi SDK:0.83.0