Repository navigation
v0.9.1
这一版的主线是「找得到、看得清、接得上」:会话与文件都能按正文和拼音检索,微信成为第二个 IM 渠道,ACP 工具对正式渠道开放,同时同步 pi 1.3.0 与 DSH 0.2.1;0.9.0 的 macOS 签名缺陷也在本版本修复。
🚀 新功能
- 微信(ilink)接入:手机上的第二个 IM 渠道 — 设置 → 外部连接可扫码登录微信,把微信消息接进 PiDeck 会话:按模型优先级链逐条尝试,某个模型调用失败自动换下一个;回复前先亮「正在输入」,发出前剥掉思考段只保留最终答案。会话在侧栏带微信 / 飞书渠道标,并按首批消息自动命名;两个渠道都能各自选择会话后端(pi / DSH),换后端时自动换绑一个新会话,避免两套历史混在一条记录里。出站
client_id改为逐条唯一,第二条回复不会再被幂等去重吃掉。 - 跨会话正文搜索:不再只搜标题 — 侧栏搜索此前只过滤标题,记不清会话名字就找不回来。新增随包的 Go 索引 sidecar(
session-index,只用标准库),把全部会话正文扫成快照并增量更新(千级会话 / 1.6GB 首次建库约 12 秒,之后启动 37ms 直接读快照,快照超过 64MB 自动压缩);查询按空格拆词逐个 AND 匹配,顺序无关、中英文都支持,结果按时间线给出命中片段与命中数,点击直接跳到那条消息。索引范围除全局会话目录外,还会读取各项目.pi/settings.json里的 sessionDir(WSL 项目不支持);索引未就绪或失败时立即退回标题过滤,不再让搜索框挂住几十秒。 - 会话内查找(Ctrl/Cmd+Shift+F) — 消息区右上角新增放大镜入口,键位与「搜索会话」的 Ctrl+F 刻意分开。查找走同一个索引 sidecar 的
search-session命令,命中按时间线顺序列出(默认最多 100 条)并带上下文片段,点击在时间线里定位到那一条;42.7MiB 的会话查询耗时约 2ms。分屏时每个窗格各查自己的会话,DSH / ACP 会话不提供入口。 - 拼音检索:会话标题与文件抽屉 — 侧栏会话与文件抽屉的搜索框都接受纯字母查询:
xhhy命中「小红书运营」,cq与zq都能命中「重庆」(内置异读首字母),全拼与跳字同样生效。打分与文件索引逐值对齐(首字母整名 700 / 首字母前缀 680 / 全拼 640 / 跳字 560),会话侧用随包生成的拼音表(26.7k 条目,npm run gen:pinyin-table),输入两三个字母就能定位到口语里常说的那个名字。 - 文件抽屉按正文搜索 — 抽屉搜索框除文件名外还能搜文件内容:新增
file-indexsidecar(同样随包分发)按扩展名白名单扫描,单文件上限 1MiB、整次扫描上限 64MiB,自动跳过依赖与产物目录;命中按文件分组并带行号片段。sidecar 不可用、尚未就绪或项目在 WSL 时返回null,界面直接隐藏内容分区而不是留一个转圈的空面板,名字搜索退回直接扫盘。 - 侧边任务:不占标签栏的第二条会话 — 侧栏与标签栏的会话菜单都新增「侧边任务」,在右侧抽屉里开一条独立会话,复用完整聊天界面(模型、权限、工具卡、排队消息都在),但不进主标签栏、不抢当前焦点。抽屉宽度上限从 560 放宽到 880,写代码时可以让它和主对话并排;图标用 Rocket 与普通会话区分。
- 会话平均 TPS — 会话级统计不再只有单轮读数:把每个回合的时间区间取并集后计算平均速度,并发子代理派生任务重叠的耗时不会被重复计入。输入框读数、会话状态与轨迹检查器的多公式展示统一走同一份区间数据,切换测量口径(流式 / 端到端)即时跟随。
- Web 移动端:把竖屏空间还给内容 — 手机浏览器里顶部栏与输入区原来常驻,375×812 的屏幕可用内容高度只剩 594px。现在顶栏随滚动方向收起(上滑 8px 展开、下滑 24px 收起,按累计位移判定,桌面端恒为展开),输入区空闲时先压到 66px、顶栏收起且不在底部时再隐藏到 0;浮层打开、切会话、输入框聚焦都会强制展开,收起态用
inert+aria-hidden摘掉键盘焦点,动画 240ms。折叠不再卸载工具行,流式自动贴底也不算「用户滚动」,不会一边输出一边把顶栏晃来晃去。 - ACP 工具对正式渠道开放 — ACP 入口此前只在开发构建可见。现在只由设置 → ACP 工具里的开关控制(默认关闭、开启后重启生效),正式版也能创建 Gemini CLI / Claude Agent / Codex CLI 等外部 CLI 会话。
- 同步 pi 1.3.0 — 模型目录升级到 pi-ai 1.3.0,含 opencode 网关更名与 kimi-coding 改走 OpenAI 协议
/v1端点;models.json 支持官方新增字段,sessionShareDestination按原样透传(刻意不为它单开控件,走「其他设置项」JSON 兜底)。 - DSH 运行时升级到 0.2.1 — 内置 DeepSeek Harness 升到 0.2.1-rc.2,29 个
@deepseek-ai/dsh*依赖连同锁文件整体重建,移除了已合并的 dsh-invariants / dsh-subagent-in-process-driver 两个包,接通 PeerScope,pwsh 插件按精确版本钉住。 - 提示词库改为远程资产 + 毫秒级检索 — 库不再打进安装包(省约 4.3MB),改为从 Release 资产下载缓存到 userData,AtomGit 优先、GitHub 兜底,sha256 与 db 必须同源成套校验,1 小时检查一次更新。检索换成
xue-indexsidecar(4012 条常驻内存),标题 / 描述 / 正文都能毫秒级命中中文——旧实现用 sql.js 的 LIKE 去匹配 gzip BLOB,中文查询恒不命中。 - 用量查询覆盖 MiniMax Coding Plan — 新增内置探针:同时解析新版
/v1/token_plan/remains与旧版/v1/api/openplatform/coding_plan/remains,展示 5 小时滚动窗口与周窗口的剩余量,minimaxi.com/minimax.io双域名都可用。 - Ctrl/Cmd+W 关闭当前会话标签 — 沿用标签栏右键「关闭」的语义:会话在跑时先确认,确认后先停止再关闭,会话记录保留(不是删除)。键位可在设置里改绑。
- 文件树按 Git 状态着色 — 文件与目录按 IDEA 风格显示新增 / 修改 / 删除 / 未跟踪 / 冲突色:直接父目录用实色,更远的祖先按 65% 淡化(对比度下限 2.5),键名大小写不敏感并在 Windows / macOS 上兜底匹配;
refs变化时自动重载可见文件,未跟踪用琥珀棕、冲突用红。只在内容真的变化时重取,不做轮询。
✨ 改进
- 会话索引落盘默认开启 — 条目表落盘到
<userData>/session-store/tables/,以size+mtimeMs为版本键,尾部扫描增量更新,256 个文件 / 512MiB 按 mtime 淘汰,单表 32MB 上限,写入走临时文件 + rename。重启后首次打开大会话 14–20ms(纯 TS 冷建表 99–188ms),settings.sessionStoreEnabled默认改为开,关掉即回退纯 TS 解析。 - 扩展清单首屏预热 — 启动 3 秒后在后台拉一次扩展清单,打开扩展页不再是一个等握手的空列表;顺带把 ExtensionManager 拆成四个单责模块(1073 → 502 行)。
- 目标模式不再每轮重复灌目标全文 — 静态规则与目标正文移进系统提示 section(
pi_deck_goal_mode),每轮只追加一行 Round,续轮不再重复堆历史 (#366);计划 / 安全档位三处模式提示同样改走系统提示 sections (#365)。 - 列表排序统一为拖拽 — 供应商卡片(模型 / 认证 / DSH)与快捷消息对话框去掉「上移 / 下移」按钮,改成整卡拖拽并带 FLIP 归位动画;拖拽手柄可用键盘聚焦、用 ↑/↓ 微调。
- 会话列表时间按回合推进 — 时间戳改为回合开始 / 结束时刻,只有真的产生回合才变;显示粒度(刚刚 / N 分钟 / N 小时 / N 天 / N 个月)字号同步收小,不再和时间戳抢视线。
- 外观设置继续收敛 — 功能模块新增「等待回复提示」开关;模式选择器从「功能模块」迁到更贴切的「输入框功能显示」。
- 文件抽屉不再藏构建产物 —
build/dist/target等目录在文件树里可见;浏览与搜索各自维护忽略表,只忽略.git与node_modules。 - 超长列表按需挂载 — 文件抽屉每批挂载 200 行,
FileRow/DirectoryRow与 Git 变更树做了记忆化,应用根不再订阅整条会话消息列表——长会话滚动与切会话不再整树重渲染。
🐛 修复
- macOS 安装包在 Apple Silicon 上无法启动 — 0.9.0 的 macOS 包在打包时被静默跳过代码签名(electron-builder 26.15 起,找不到证书时不再自动回退 ad-hoc 签名),装好后双击没有窗口、进程停在
_dyld_start,也不会出现「仍要打开」入口。现在打包显式使用 ad-hoc 签名,发布流程同时新增签名校验,签名缺失会让打包任务直接失败而不是发出坏包。已安装 0.9.0 的用户重新安装本版本即可;暂时不想升级时,也可以对已安装的应用手动重新签名(codesign --force --deep --sign -)恢复启动,注意每次重新安装后都要再执行一次。 - 局域网访问与终端 SSH 恢复正常 — 同一次签名退化还把签名标识变成了
Electron:macOS 按签名标识记录「本地网络」授权,用户此前给com.ayuayue.pi-desktop的授权因此失效。0.9.0 上的表现是局域网模型服务连不上(Connection error/EHOSTUNREACH)、PiDeck 终端里ssh报No route to host,而系统的「本地网络」开关看起来是开着的。现在签名标识恢复为应用自身的 Bundle ID,嵌套 Helper 也用自己的标识签名,并补上NSLocalNetworkUsageDescription声明。升级到本版本后如果局域网仍不通,请到系统设置 → 隐私与安全性 → 本地网络里删掉旧的Electron条目、重新允许 PiDeck。 - Web 端 DSH 后端不再「察觉不到结束」 — Web 页面此前只订阅 pi 事件,DSH 后端整轮没有 SSE 帧,输出只能靠 3 秒轮询补齐,停止状态也看不出来。新增
DshChannelToPiEvents把通道载荷翻成 pi 事件形状,复用同一套流式适配器,非 pi 后端同样有实时事件与明确的回合结束帧。 - Ctrl+Tab 按标签栏顺序切换 — 此前按内部会话顺序跳,标签栏拖过分屏之后键位和眼睛对不上;现在标签栏条目的展开与扁平化共用一份来源 (#346)。
- 重启后历史骨架屏不再永驻 — 首次历史加载把
runtimeGeneration捕获成了 undefined,第一个请求自我取消,界面一直停在骨架屏 (#350)。 - 历史记录不再重复、标题不再错乱 — 旧版写下的目录身份键是小写、新版按原大小写查找,同一会话被当成两条;现在安全归并旧身份并保留标题与旧 ID 引用,迟到的扫描结果也不再回退会话活动时间与排序 (#354)。
- Windows 删不掉会话 — 删除前等 pi 进程真正退出(最多轮询 3 秒)再重试回收站,不再因为文件仍被占用而静默失败 (#364)。
- 删除项目不再被已死运行时卡住 — 按进程是否存活判定,先回收残留 runtime 与预热进程再删 (#360)。
- macOS Dock 启动时 tailscale 命令可用 — Dock 里的 tailscale 是 GUI 二进制,会打印
The Tailscale GUI failed to start却以 0 退出,解析直接报错;现在显式走 GUI 模式并补TERM兜底 (#351)。 - 会话标题不再被工具行与占位符污染 — 工具标记行不再成为标题;视觉桥的占位标题不再用于新会话(已存在的脏标题刻意不做存量自愈,避免旧会话名突然改变)。
- 思考档位与思考标记修正 — 思考强度被限制在当前模型支持的档位内,超限时按 pi-ai 规则自动 clamp,选择器不再能逃出支持范围;未闭合的思考标记不再泄漏进助手正文,轨迹与飞书最终消息沿用同一语义。
- 外部连接的空会话给出友好提示 — 首次发消息前的 pi 会话文件尚不存在,此前会报 ENOENT;现在显示「这个会话还没有内容」,模型选择器同时改为展开全部供应商。
- 微信渠道三处修复 — 扫码登录后能正常开启;设置操作失败时回传后端错误原文,不再只给一句笼统失败;换后端即换绑新会话,模型按会话现状播种并在界面上标出来。
- 技能商店搜索与安装恢复 — 商店搜索改走 Electron 的
net.fetch(此前用裸 fetch,undici 不读代理,境外 API 直接挂到超时);安装改为 spawn + 流式解析,进度推到界面并注入代理环境变量。 - 工具卡不再「没跑完就写完成」 — 展开区状态段按真实运行态渲染,运行中显示运行中。
- 子会话胶囊不再压住行尾「⋯」 — 胶囊右移贴住时间戳,hover 让位。
- 编辑器当前行高亮不再压住正文 — 高亮改为背景层,不再覆盖正文字形与选区文字,另加 CodeMirror 回归守卫。
- 宿主插件细节修复 —
billion-context示例不再弹出黑色控制台窗口;插件表里超长路径与描述不再撑破列。
🙏 致谢
感谢 san-ren 重做 Web 移动端的可视区高度,把顶栏与输入区的收起状态机抽成纯函数并补齐 e2e;感谢 GME 的会话平均 TPS(区间并集消解并发重叠)与思考档位 clamp;感谢 Q-xuan 修掉未闭合思考标记泄漏进正文;也感谢 bfzha 这一轮的文件树 Git 着色、历史身份归并与会话查找系列修复;感谢 juzijun233 的统一接口聚合层(piDeckApi 门面与 55 个域的注册装配,#355);也感谢 yuta2 定位并验证 0.9.0 macOS 包缺少签名的根因与修复方向 (#347) 🎉
也感谢 LLLinggg、Lamb-Yang、Newbeeha、op15066212、45231hgjkl、gugugaga008 提交的 Issue 与复现步骤——本版本的多个修复直接来自他们的定位。
特别感谢 罪、橙子、微时 为软件开发提供的模型服务 🎉