Releases
v0.4.0
Compare
Sorry, something went wrong.
No results found
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.json 的 packages;装/卸后清缓存,下一会话生效(暂只支持全局安装)。
帮助与反馈
新增「帮助」页面:新手引导(快速上手)、常见问题(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 发送图片在钉钉显示损坏 :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 均被拒),钉钉审批以文本指令(/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)
You can’t perform that action at this time.