中文
基于 v0.12.2..v0.13.0 的提交整理。
npm install -g @agegr/pi-web@latest新增
- Debug 面板:工具栏会话统计左侧的虫子图标打开一个只读面板,显示本页与服务器之间的连接(每个页面的 SSE 数量对比浏览器每个源 6 个连接的上限、轮询往返、事件流和租约倒计时),以及服务器持有的会话、子代理、MCP、终端和文件监听,还列出当前连接的所有页面。打开它不会启动、恢复或续期任何东西。(#1443, b5acfe8, 3a01952, e368baf)
- 工具调用的参数按行显示:工具卡片不再把参数显示成一段缩进的 JSON,每个参数单独一行,shell 命令保留真实换行,流式输入中也一样。(#1324,感谢 Brynne Taylor;#1396,感谢 Vlad Sirenko)
- ```svg 代码块预览成图片:像 mermaid 一样,回答结束后显示图片,可切换源码、点击放大、下载 SVG。(#1455)
- 公式可以复制 LaTeX:块级数学公式带复制按钮,复制的是模型写的 LaTeX 源码。(#1380, #1454)
- Markdown 里的音频和视频可直接播放:
这类链接会渲染成播放器,开始播放一个会暂停页面上的其他播放器。(#1281,感谢 maximilize) - 压缩期间发送的消息会排队:上下文压缩时发出的消息不再报错退回,压缩结束后按顺序发出,与 pi 的 TUI 一致。(#1426,感谢 Vvvvergram)
- 顶栏 Agents 徽标显示运行中的子代理:有子代理在跑时,徽标显示运行数量并带转圈;手机窄屏折叠的「更多」按钮上也能看到。Agents 列表里的子代理显示实际使用的模型和思考深度。(#1311, #1415, #1450;#1440,感谢 TossPig)
- 模型设置:
- 终端字号跟随聊天字号:设置 › 常规 › 字体与布局里的聊天字号同时调整终端,默认仍是 13px。(#1329)
- 通配地址启动时列出可用网址:用
0.0.0.0或::监听时,启动日志列出每个网卡的访问地址。(#1376,感谢 Daniel Liu)
改进
- 回答下方的用量行与 pi 的 TUI 一致:形如
↑1.2k ↓567 R8.9k W12 $0.0036 · took 10s,零值省略;箭头和时钟改为 SVG 绘制,在 Windows 上不再变形,复制出来的文字不变。列表或代码块结尾的回答,用量行间距也和段落一致。(#1417,感谢 TossPig;#1449, 3383ba6) - 代码块长行自动换行:与 pi 的 TUI 一样,长行、长 URL 不再让代码块横向滚动。(#1369)
- 手机上的 diff 改为单栏,hunk 之间被省略的行会标出跳过了多少行。(#1325,感谢 Brynne Taylor;#1304)
- 手机输入区:「⋯」展开的控件改为浮层、每项一行 (#1421,感谢 draxxris);运行中「引导」「后续消息」按钮单独一行,输入框保持全宽 (#1330,感谢 沈青川);排队消息很多时在自己的框里滚动,输入框不被挤出屏幕 (#1429,感谢 xcg);键盘打开时模型选择器保持可见 (#1294,感谢 xcg);空输入框不再出现滚动条 (#1385,感谢 Brynne Taylor)。
- 附件图片原样交给 pi,由 pi 按模型的限制缩放,前端不再压缩。(#1442,感谢 将军)
- 完成通知等整组代理结束后才发:主代理和它的子代理全部完成、最终回复结束后才提示和推送;扩展命令(如
command:状态按钮)不再触发「会话完成」推送。(#1437,感谢 TossPig;#1361) - 后台标签页释放空闲连接:隐藏的页面会关闭空闲的事件流,多开几个标签页不再占满浏览器的 6 个连接、让设置和消息同步排队。(#1328)
- 状态请求更轻:页面读取会话状态时不再带上系统提示词(大 AGENTS.md 时每次可达数百 KB)。(#1306)
- 斜杠命令补全优先匹配命令名,技能前缀不再影响排序。(#1414,感谢 Salman Abdurrahman)
- 子代理等待可设上限:前台
Agent和get_subagent_result新增wait_timeout(秒,默认 30 分钟),到时主代理继续执行,子代理在后台跑完后照常回报。(#1448,感谢 Delthin) - 侧栏项目分组之间加了间隔 (#1344);折叠的分组和置顶区把「等待输入」和「运行中」分开计数 (#1423,感谢 zs)。
- 设置 › 常规页面在对话框中居中 (#1310);字重显示名称而非数字 (#1309)。
- 模型表单精简了字段说明。(1280e4f, b8a3ffc)
- 更多界面文字有了中文翻译:用量行、模型登录与 API Key 提示、上传计数和媒体加载错误、会话统计提示。(#1382, #1383, #1379, #1378,感谢 zs)
修复
- 会话目录被移动或删除时,不再显示误导的「Model error」,而是说明文件夹已不存在。(#1453)
- 发送失败的消息会退回输入框:网络错误或代理返回非 JSON 时,刚发的内容不再丢失。(#1457)
- 重命名运行中的会话会通过它的 AgentSession 进行,扩展能收到改名,不再产生一条死分支。(#1451)
- 二进制文件(如 .zip)显示下载提示,不再显示乱码。(#1401, #1452)
- 用户消息里的 HTML 按原文显示,与 pi 的 TUI 一致,粘贴的
<Component ... />不再消失。(#1444) - Ctrl+Alt+N 在 macOS 上终于生效。(#1337,感谢 jianzhangg)
- 新建会话后输入框自动获得焦点。(#1317,感谢 LVsarff)
- 「在这里提问」插入引用后,光标停在引用末尾。(#1320,感谢 jianzhangg)
- 刷新页面时正在运行的工具,状态行不再误显示「等待模型…」。(#1348,感谢 nannant666)
- 启动器等首个页面能正常返回后才打开浏览器,冷启动时不再打开到一个还没就绪的页面。(#1363)
- 模型:
- 自定义提供商改名或删除后,不再残留在模型列表里。(#1458,感谢 reshuihaohe)
- 保存不会写入 pi 无法加载的提供商条目(如「添加提供商」的空条目)。(#1362)
- 保存后的模型定义会应用到空闲会话,重新选择该模型即可。(#1287,感谢 xcg)
- 软链接的
models.json保存后仍是软链接。(#1336,感谢 Porawit Poboonma) - 删除自定义提供商时清掉改名跟踪 (#1342,感谢 Qiaochu Hu);Models 侧栏按名称列出
models.json模型 (#1408,感谢 maximilize);区分未登录的模型与无效条目,清理时保留未登录提供商的enabledModels(#1427,感谢 HoloNova);按 pi 1.3 的规则处理多个提供商共有的裸模型 id (#1346)。
- 子代理:服务器重启打断的运行不再一直显示为运行中 (#1386,感谢 Brynne Taylor);工具说明改为让模型等待回报而不是轮询 (#1384,感谢 Brynne Taylor)。
- Code mode:默认
PI_CODEMODE_MAX_WORKERS=8,调用子代理的脚本不再因 worker 被占满而在 60 秒后失败。(6b8005d) - 工具卡片标题显示补丁实际修改的文件(如 pi-hashline-edit-pro 的 insert / replace)。(#1460, #1461)
- 导航恢复同一组工具时保持原有顺序,不再让缓存失效、重新计费。(#1405,感谢 Teng Zhang)
- 文件:通过软链接打开的项目能列出改动文件 (#1387,感谢 Brynne Taylor);Android Chrome 能打开 PDF (#1305);右侧面板标签栏保持 36px,可用滚轮横向滚动 (#1303,感谢 Val.)。
- 工作树:分支已被其他工作树检出时,说明是哪个工作树 (#1456);git 的临时失败不再被缓存,导致工作树被当成独立项目 (#1339,感谢 dingxiaobo)。
- 侧栏:未读标记在同一浏览器的多个标签页间同步 (#1292,感谢 dingxiaobo);已归档会话显示最后一条消息的时间 (#1357,感谢 LVsarff);从子目录切回仓库根目录的会话时不再被关闭 (#1307)。
- 会话搜索能匹配改过名和自动生成的标题。(#1318,感谢 Eric(Mingdong) Tan)
- 会话信息里的活跃时长随实时状态更新。(#1340,感谢 Popcornnnnnnnn)
- Markdown:页内锚点链接能正确跳转 (#1323,感谢 Brynne Taylor);Windows 盘符文件链接保持可点 (#1355,感谢 GaryCCCC)。
- 扩展状态栏和组件里的链接在新标签页打开。(#1377,感谢 zs)
- 技能:用 skills CLI 1.7 装到
.agents/skills的技能归入 skills.sh 分组。(42909b6) settings.json解析失败时,错误信息带上文件路径。(#1349,感谢 Brynne Taylor)
内部调整
- pi 升级到 1.4.0。(#1346,感谢 John Trump)
- npm 包改为由 GitHub Actions 通过 npm Trusted Publishing 发布,带 provenance,不再使用 npm token。(16f195c)
- Windows 测试修复 (#1364, #1365, #1366, #1367, #1368,感谢 WilliamStone) 和 e2e 稳定性修复 (#1285,感谢 xcg;#1326,感谢 Brynne Taylor)。
- 发布 npm 包
@agegr/pi-web@0.13.0。
English
Prepared from commits in v0.12.2..v0.13.0.
npm install -g @agegr/pi-web@latestAdded
- Debug panel: a bug icon left of the session stats opens a read-only panel showing how this page talks to the server (SSE connections per page against the browser's six per origin, poll round trips, the event stream and lease countdowns) and what the server holds (sessions, subagents, MCP, terminals, file watches), plus every connected page. Opening it starts, resumes or renews nothing. (#1443, b5acfe8, 3a01952, e368baf)
- Tool call arguments as rows: a tool card shows one row per argument instead of an indented JSON blob; shell commands keep their real line breaks, while streaming too. (#1324, thanks Brynne Taylor; #1396, thanks Vlad Sirenko)
- ```svg fences preview as an image: like mermaid, the picture shows once the reply ends, with a source toggle, zoom and SVG download. (#1455)
- Copy LaTeX from display math: display formulas get a Copy button that copies the LaTeX the model wrote. (#1380, #1454)
- Audio and video in Markdown play inline:
renders a player; starting one pauses the others. (#1281, thanks maximilize) - Prompts sent during compaction are queued: instead of bouncing back with an error, they are sent in order once compaction ends, as in pi's TUI. (#1426, thanks Vvvvergram)
- Running subagents on the top bar's Agents badge: while subagents run, the badge counts them with a spinner, also on the folded More button on narrow phones. The Agents list shows each subagent's actual model and thinking level. (#1311, #1415, #1450; #1440, thanks TossPig)
- Model settings:
- Per-model Base URL override for custom models. (#1288, thanks xcg)
- "Claude adaptive thinking" switch for custom
anthropic-messagesmodels (pi'scompat.forceAdaptiveThinking). (#1331) - Image size limit for custom models that take images (pi's
inputLimits.images.resize.maxBytes). (ec9f38a) - The model selector and Add provider searches match provider ids and
provider/modelId. (#1308)
- Terminal follows the chat font size set in Settings › General › Fonts & layout; the default stays 13px. (#1329)
- Wildcard binds list reachable URLs: listening on
0.0.0.0or::prints one URL per network interface. (#1376, thanks Daniel Liu)
Improved
- The usage line under a reply matches pi's TUI footer:
↑1.2k ↓567 R8.9k W12 $0.0036 · took 10s, zero counts left out. The arrows and clock are drawn as SVG so Windows fonts no longer distort them; copied text is unchanged. The line keeps the same gap under lists and code blocks as under paragraphs. (#1417, thanks TossPig; #1449, 3383ba6) - Long lines in code blocks wrap, as in pi's TUI, instead of scrolling sideways. (#1369)
- Diffs use one column on a phone, and the lines skipped between hunks are marked with their count. (#1325, thanks Brynne Taylor; #1304)
- Phone composer: the ⋯ controls open as a floating panel, one row each (#1421, thanks draxxris); steer and follow-up buttons get their own row while a run streams (#1330, thanks 沈青川); a long queued-message list scrolls in its own box (#1429, thanks xcg); the model picker stays visible above the keyboard (#1294, thanks xcg); an empty composer shows no scrollbar (#1385, thanks Brynne Taylor).
- Attached images go to pi as they are; pi resizes them to the model's limits instead of the browser compressing them. (#1442, thanks 将军)
- Completion notices wait for the whole agent family: the notice and push are sent once the main agent and all its subagents have finished; extension commands such as
command:status buttons no longer send a "Session complete" push. (#1437, thanks TossPig; #1361) - Hidden tabs release idle event streams, so a few background tabs no longer fill the browser's six connections and stall Settings and message sync. (#1328)
- Lighter status reads: session state requests leave out the system prompt (hundreds of KB with a large AGENTS.md). (#1306)
- Slash command completion ranks name matches first and ignores the skill prefix. (#1414, thanks Salman Abdurrahman)
- Subagent waits can time out: foreground
Agentandget_subagent_resulttakewait_timeout(seconds, default 30 minutes); when it runs out the main agent continues and the subagent reports when done. (#1448, thanks Delthin) - Sidebar project groups are parted by a spacer (#1344); folded groups and the pinned section count awaiting-input sessions apart from running ones (#1423, thanks zs).
- Settings › General centers its column (#1310) and names font weights instead of numbers (#1309).
- Trimmed field notes in the Models form. (1280e4f, b8a3ffc)
- More UI text translated: the usage line, model sign-in and API key prompts, upload counts and media errors, the session stats tooltip. (#1382, #1383, #1379, #1378, thanks zs)
Fixed
- A session whose folder was moved or deleted says so instead of showing a misleading "Model error". (#1453)
- A prompt the server never received goes back into the composer after a network error or a proxy's non-JSON reply. (#1457)
- Renaming a running session goes through its AgentSession, so extensions see the rename and no dead branch is left. (#1451)
- Binary files such as .zip show a download notice instead of garbled bytes. (#1401, #1452)
- HTML in user messages shows as typed, as in pi's TUI; a pasted
<Component ... />no longer disappears. (#1444) - Ctrl+Alt+N now works on macOS. (#1337, thanks jianzhangg)
- A new session focuses the composer. (#1317, thanks LVsarff)
- "Ask here" leaves the caret after the quote. (#1320, thanks jianzhangg)
- Reloading while a tool runs no longer shows "Waiting for model…". (#1348, thanks nannant666)
- The launcher opens the browser once the first page is served, so a cold start no longer opens on a server that is not ready. (#1363)
- Models:
- A renamed or deleted custom provider no longer lingers in the model list. (#1458, thanks reshuihaohe)
- Save refuses a provider entry pi cannot load, such as Add provider's empty stub. (#1362)
- Saved model definitions apply to idle sessions when the model is selected again. (#1287, thanks xcg)
- A symlinked
models.jsonstays a link when saved. (#1336, thanks Porawit Poboonma) - Rename tracking is cleared when a custom provider is deleted (#1342, thanks Qiaochu Hu); the Models sidebar lists
models.jsonmodels by name (#1408, thanks maximilize); signed-out models are told apart from invalid entries and theirenabledModelsentries survive cleanup (#1427, thanks HoloNova); a bare model id several providers offer is scoped to all of them, as pi 1.3 does (#1346).
- Subagents: a run interrupted by a server restart no longer shows as running forever (#1386, thanks Brynne Taylor); tool descriptions tell the model to wait for reports instead of polling (#1384, thanks Brynne Taylor).
- Code mode:
PI_CODEMODE_MAX_WORKERSdefaults to 8, so scripts that call subagents no longer fail after 60 s waiting for a worker. (6b8005d) - A tool card is labeled with the file its patch changed (pi-hashline-edit-pro's insert and replace). (#1460, #1461)
- Navigation that restores the same tools keeps their order, so the cache is not invalidated and re-billed. (#1405, thanks Teng Zhang)
- Files: a project reached through a symlink lists its changed files (#1387, thanks Brynne Taylor); PDFs open on Android Chrome (#1305); the panel tabs stay 36px and scroll with the wheel (#1303, thanks Val.).
- Worktrees: a branch held by another worktree names that worktree (#1456); transient git failures are no longer cached and no longer turn a worktree into a project of its own (#1339, thanks dingxiaobo).
- Sidebar: unread markers sync between a browser's tabs (#1292, thanks dingxiaobo); archived rows show the latest message time (#1357, thanks LVsarff); a repo-root session stays open after a subdirectory was shown (#1307).
- Session search matches renamed and generated titles. (#1318, thanks Eric(Mingdong) Tan)
- Session info's active time follows the live state. (#1340, thanks Popcornnnnnnnn)
- Markdown: in-page fragment links land on their anchors (#1323, thanks Brynne Taylor); Windows drive file links stay clickable (#1355, thanks GaryCCCC).
- Links in extension status bars and widgets open in a new tab. (#1377, thanks zs)
- Skills installed by skills CLI 1.7 into
.agents/skillsare grouped under skills.sh. (42909b6) - A
settings.jsonthat does not parse is reported with its path. (#1349, thanks Brynne Taylor)
Internal
- pi upgraded to 1.4.0. (#1346, thanks John Trump)
- The npm package is now published by GitHub Actions through npm Trusted Publishing, with provenance and no npm token. (16f195c)
- Windows test fixes (#1364, #1365, #1366, #1367, #1368, thanks WilliamStone) and e2e stability fixes (#1285, thanks xcg; #1326, thanks Brynne Taylor).
- Published npm package
@agegr/pi-web@0.13.0.