Skip to content

Releases: lijian-ui/Pi-DeskTop

Pi Desktop 0.6.0

Choose a tag to compare

@lijian-ui lijian-ui released this 26 Aug 08:53

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-nodejsaudioFileToSilkBase64)。
  • 网关在回复完成时按渠道配置合成语音;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 / lightglobal.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 / 飞书) ⚠️ 待你本地验证(按约定我不跑主进程 build)
生产构建 / 打包(electron-builder) ⚠️ 待你本地验证
TTS 实际合成 / 飞书接入 / QQ 语音回复 ⚠️ 需配置 API Key 与渠道后实测

本版为未提交的工作区改动汇总。发版前请在本地完成主进程类型检查与生产构建,并实测 TTS、飞书接入与 QQ 语音回复链路。


如果使用过程中遇到任何问题,请直接到 [Issues]( 反馈。

Pi Desktop 0.5.0

Choose a tag to compare

@lijian-ui lijian-ui released this 21 Aug 03:22

Pi Desktop v0.5.0 Release Notes

✨ 本版概要

  • Pi SDKimidazoline 升级 @earendil-works/pi-coding-agent0.83.00.84.2(0.84.0 为 SDK minor 版本,按 semver 属破坏性升级;经兼容性核对,本项目所用 API 无破坏,已直接升级)
  • 桌面端里程碑v0.4.0v0.5.0(新增能力汇总 + 依赖升级,属于大版本更新)

重要变更(Breaking / Notable)

依赖:Pi SDK 0.83 → 0.84

0.84.0 的 Breaking 集中在内层:

  • pi-agent-core 的会话仓储 API 全面切换为 v4 Lane 结构(SessionStorage / SessionRepo
  • 移除旧版 message_update 事件中的累积 messagepartial 字段;本项目仅使用 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 ⚠️ 原有 IM 模块错误(与本次升级无关)

如果使用过程中遇到任何问题,请直接到 [Issues]( 反馈。

Pi Desktop 0.4.0

Choose a tag to compare

@lijian-ui lijian-ui released this 13 Aug 04:11

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 事件与会话历史的 image content 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 的包管理器(无需 pi CLI):包下载到 ~/.pi/agent/npm/node_modules/,配置写入 settings.jsonpackages;装/卸后清缓存,下一会话生效(暂只支持全局安装)。

帮助与反馈

  • 新增「帮助」页面:新手引导(快速上手)、常见问题(FAQ)、资源链接(官方文档 / 扩展市场 / 版本发布页)、反馈渠道(问题上报),并接入原生菜单入口。
  • 帮助页内所有外部链接统一走系统默认浏览器,不弹应用内窗口。

技能页(扩展技能管理)

  • 新增启用 / 停用开关:停用后 agent 系统提示词不再注入该技能(disable-model-invocation frontmatter,即时生效),输入框 / 命令补全同样排除;技能列表默认全部显示(停用项置灰 + 「已停用」标记),可一键「隐藏已停用」。
  • 新增删除按钮(垃圾桶图标):移除技能目录,二次确认弹窗,仅允许删除用户 / 项目技能目录内的技能(路径安全校验)。

🐛 问题修复

  • 定时任务会话点击无反应:会话文件改存标准 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 发送图片在钉钉显示损坏sampleImageMsgphotoURL 需传@ 前缀的原始 media_id(去 @ 或 URL 形式客户端均不识别,显示损坏图标)。
  • AI 发送文件在钉钉显示异常sampleFilemediaId 字段同样需传@ 前缀的原始 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 均被拒),钉钉审批以文本指令(/allow allow: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

Choose a tag to compare

@lijian-ui lijian-ui released this 04 Aug 07:02

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

Choose a tag to compare

@lijian-ui lijian-ui released this 03 Aug 05:42
e51a55e

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

Pi Desktop 0.1.0

Choose a tag to compare

@lijian-ui lijian-ui released this 31 Jul 12:52
e51a55e

自动发版