pi-web-ui 0.90.1 → 0.91.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -1
- package/dist/server/agent-service.js +763 -61
- package/dist/server/client-state.js +70 -5
- package/dist/server/compaction-markers.js +287 -0
- package/dist/server/delegate-task.js +12 -1
- package/dist/server/dsh/dsh-agent-service.js +21 -1
- package/dist/server/file-transfer-routes.js +4 -1
- package/dist/server/icon-svg.js +35 -0
- package/dist/server/index.js +120 -30
- package/dist/server/plugin-catalog.js +5 -0
- package/dist/server/plugin-facilities.js +42 -11
- package/dist/server/plugins.js +47 -8
- package/dist/server/prompt-composer.js +1 -1
- package/dist/server/protocol-version.js +1 -1
- package/dist/server/schedule-agent-tool.js +23 -5
- package/dist/server/scheduler-tasks.js +60 -1
- package/dist/server/scm-commitmsg.js +140 -0
- package/dist/server/scm.js +42 -0
- package/dist/server/settings-service.js +40 -0
- package/dist/server/skill-tool.js +120 -0
- package/dist/server/soft-cap.js +68 -0
- package/dist/server/subagent-templates.js +6 -0
- package/dist/server/subagents.js +157 -16
- package/dist/server/tool-manager.js +7 -1
- package/package.json +2 -1
- package/plugins/catalog.json +10 -0
- package/web/dist/assets/{TerminalPanel-CkxM4Byl.js → TerminalPanel-GtDQ1h85.js} +1 -1
- package/web/dist/assets/es-DIDZppIF.js +2 -0
- package/web/dist/assets/index-CdsKltOS.css +1 -0
- package/web/dist/assets/index-OoULNF70.js +363 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-DJIV4A-t.js +0 -355
- package/web/dist/assets/index-DLdcRBs_.css +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,45 @@
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.91.0] — 2026-09-19
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **消息一键复制三件套**(#228)—— 消息 hover 工具条新增「复制纯文本 / 复制 Markdown / 复制为图片」:纯文本走轻量去标记(标题/加粗/链接/表格/代码围栏只去标记留内容);Markdown 取原始源码;图片用 html-to-image(按需加载)把气泡导出 2x PNG 写剪贴板(工具条/复制键/流式光标自动排除)。三个都是 `message.actions` 槽位条目(`host:msg-copy-text/markdown/image`),布局页可隐藏/调序。
|
|
18
|
+
- **上下文压缩软上限 Soft Cap**(#229)—— 设置「对话」页可设全局压缩阈值(tokens)+ 按模型覆盖(`provider/id`,如 `xai/grok-4 → 190000`):会话 tokens 到线即触发已有压缩流程,不再堆到物理上限(防 Grok 类阶梯计费翻倍与长上下文降智)。实现为 `compaction.reserveTokens = window - cap` 的 SDK SettingsManager 覆盖(与重试次数同一 live 机制,reload/建会话/换模型后重放,关闭时回填 SDK 默认 16384);底栏上下文条按 `cap/window` 画琥珀色标记线 + hover 显示阈值。pi 引擎独有(DSH 运行时无此概念,保持关闭)。
|
|
19
|
+
- **SCM「AI 生成」提交信息**(#233)—— SCM 面板提交输入行旁新增生成按钮:服务端汇总暂存区 + 工作区 diff(各截 12000 字符并标注截断)+ numstat + 近 15 条提交主题拼提示词,风格跟随仓库近期提交;走 `completeSimple` 一次性补全(不进对话上下文、不打断流式回复),60s 超时;无模型/非仓库/无改动/失败一律恰好应答一次,按钮不卡转圈。提示词可在设置 → 提示词「AI 提交信息」区块追加/替换(不进预设)。
|
|
20
|
+
- **技能全文按名加载工具 `skill`** —— 名录只渲染 name/description,模型不再拼 `location` 路径调 read,需要正文时调 `skill({name})` 精确命中(单文件 8KB 封顶,禁用集由宿主过滤);工具目录 23→24(默认开)。
|
|
21
|
+
- **插件通道对齐定时任务能力**(#226)—— `host.chat` 新增 `cwd` / `conversationId` / `model` / `thinkingLevel` 四个可选参数:`cwd` 显式 pin 工作空间(不存在即拒绝,Windows 下系统目录如 System32 直接拒绝,防后台启动时 cwd 飘到 system32 高危执行);`conversationId` 命中运行中对话时走 steer 语义投递(网页端实时可见,miss 则回落无头执行);`model` / `thinkingLevel` 投递前预切,失败即拒绝不回落。`wechat-ilink` 跟进:设置里可配默认工作空间、模型、思考强度与「投递到网页当前会话」开关。
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **插件运行相位 + 坏 manifest 占位行 + 顶栏缺省收起** —— 设置面板插件清单新增运行相位(failed/disabled/active/idle,汇总条 + 行内圆点 + 重扫按钮);坏 manifest 目录不再静默跳过,清单里出占位行标红给原因(`error` + `view:false`,不激活);顶栏低频条目(浏览器操作/声音/语言/主题/版本/GitHub)缺省收进「⋯」,布局页可勾回。
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- **插件图标 SVG 清洗误杀** —— 白名单比较改大小写不敏感(`viewBox` 曾被整条剥掉致坐标系映射失效);补 `ry`/`points`/`fill-opacity`/`stroke-opacity` 等缺属性(run-trace 的 FiActivity 整图标不可见即 `points` 被剥);`script`/`style`/`title`/`desc`/`foreignObject` 整棵删除(子节点外来命名空间,展平会漏进 SVG);catalog 补 10 个插件 `iconSvg`。
|
|
30
|
+
- **全部组件更新面板列表项防压扁**(#224)—— 补 `flex-shrink: 0` + 悬停暴露错误详情。
|
|
31
|
+
- **插件设置保存后重启即丢(storage 旧快照回写)** —— `PluginStorage` 首次 `load()` 后**缓存永不失效**,而 `storage.json` 有两个写入者:插件自己,以及设置面板的 `saveSettingsValues`(直写磁盘的 `settings` 键,不经过该缓存)。长轮询插件每隔几秒就 `storage.set("cursor", …)` 一次,于是把整份旧快照回写,把面板刚保存的 `settings` 抹成 `undefined` —— 表现为「面板里改了设置、当次会话生效、重启后全部回落默认」。现改为写前重读磁盘(`set`/`delete` 无条件重读,不受 mtime 粒度影响),两个写入者各自保留自己的键;读路径仍走缓存。
|
|
32
|
+
- **`host.chat` / 定时任务的模型切换静默失败**(#226 的「失败即拒绝」未真正生效)—— `ClientSession.setModel` 为兼容 UI 把异常吞成 notice(面板要看到原因,调用方是 fire-and-forget),**永不 reject**,于是插件与定时任务里 `try { await cs.setModel(m) } catch` 的 catch 永不触发:模型 ID 打错或没配供应商密钥时,会静默按旧模型跑完整轮次(账单与效果都和用户预期不符)。新增 `switchModelOrThrow`(切完复核当前模型,不符即抛)供无头路径使用;UI 路径的 `setModel` 语义不变。
|
|
33
|
+
- **子代理 8 项修复** —— `steer`/`stop` 对不存在的 runId 不再谎报成功(先查快照,找不到回未找到 + 指引查 `subagent_list`);`wait_all` 收口长输出改留头 10 行 + 留尾 30 行(旧实现只取前 30 行,结论在尾部会被丢掉);子代理数量上限 16 个(每客户端全局计,超限抛错由工具转友好文本,AI 可改串行/等收口后重试);`spawn`/`delegate` 的启动失败(上限/runtime 创建失败/坏 cwd)转返回文本不再直抛工具异常;相对 `cwd` 按派发者目录解析(旧实现相对 server 进程 cwd 落到别处);跟随模型/思考强度/项目密钥改读真正的派发者会话(旧实现读派发瞬间 active,后台派发会跟错);模板 replace 在 SDK 提示词边界串对不上时前置拼接兜底(旧实现静默回退默认 persona);模板非空扩展白名单不再漏进插件/MCP 工具(工厂期不注册 + `refreshPluginTools` 不回补);快照补上 `prompt`(截断 2000 字符)与 `canceled` 终态;`replace + 空提示词` 模板保存期直接拦截(只想限白名单请用 append)。
|
|
34
|
+
- **升级后主题 CSS 全部 404**(#223)—— 0.90.1 的 Express 4→5 升级后,`sendFile`/`download` 默认 `dotfiles=ignore`,绝对路径含隐藏目录段(如 `~/.pi-web`、`~/.local`、`~/.nvm`)的文件一律被判 404。已对主题 CSS、插件 bundle、文件预览/下载、打包下载、首页等全部绝对路径发送点显式放行(路径本身仍由各路由的 id 白名单/工作区 containment 校验把关),并加冒烟回归 `theme-dotfile-test`。
|
|
35
|
+
- **插件 client bundle 在默认 `~/.pi-web` 下 404**(#230)—— 经实测验证为已修复问题的重复报告:#223 的泛化修复已覆盖插件路由(`dotfiles: "allow"` + `splatParam` 数组兼容),单文件/多级 splat 200、越界 `../..` 404 拦截,直接关闭无代码改动。
|
|
36
|
+
- **定时任务压缩/重启后静默转无头**(#231)—— `schedule_task` 只绑内存对话 id(`c1/c2…`,各客户端从 0 计数、重启/切走即失效),压缩或重启后触发必然误判 closed/gone,巡检报告静默落进后台历史、前台毫无动静。现创建时同时快照落盘会话文件(压缩/重启后稳定):触发先按会话文件重认同一会话(含换新 id 自动重绑定,下次直达);原句柄断开时先回落同项目活跃对话并广播提示;同项目无存活对话才无头执行且明确广播去向。同时 id 唤醒加 `cwd` 护栏(跨项目同 id 必然撞车,不校验会把报告投进无关项目)。
|
|
37
|
+
- **重复压缩标记导致会话打不开**(#235)—— 多次上下文压缩后转录里攒下多个同名 `pi-web-ui-compaction-done` 标记;若标记恰为文件末行,重启后新消息的 parent 会记成该共享 id,SDK 的 last-wins 索引把它解析到最后一个标记(其 parent 前指同子树)→ 回溯成环,`getBranch` 死循环直到 `RangeError: Invalid array length`,整个会话报 `Failed to initialize session`。现标记 id 每次唯一(`clearCompactionPending` 改按 `customType` 定位本次 pending),四个会话打开点(首屏恢复/切项目/打开历史/强制重置)遇到坏转录自动修一次再试:残留 pending 移除(子节点旁路到 pending 的 parent,marker 对上下文零贡献,仍弹"可 /compact 重试")、重复 id 改名+引用改指最近的前序同名、残余环截断;改前同目录留 `.bak` 备份(已存在不覆盖,保最早现场)。
|
|
38
|
+
- **插件子目录文件 404,插件面板白屏**(#225)—— 0.90.1 的 Express 4→5 迁移把通配路由改成命名 `*splat`,但多段路径在 Express 5 里是**数组**(`["a","b.mjs"]`),直接 `String()` 会拼成 `"a,b.mjs"`:插件 vendor 分包/CSS、嵌套文件 HTTP 预览、插件子路径 API(`/plugins/*`、`/plugins-api/*`、`/api/preview/*` 三处)全挂。已加 `splatParam` 统一拼回 `/`(下游越界/包含校验不变),回归进 `plugin-test`(vendor 嵌套)/`plugin-http-test`(多段 API)/新增 `preview-http-test`。另:切到 bundle 没加载出来的插件视图不再静默空白——给「加载中/失败原因 + 重试」占位(`PluginViewFallback`,重试带 `&r=` 击穿 ESM 模块表的失败缓存),真机 E2E 验证过。
|
|
39
|
+
|
|
40
|
+
<!-- auto-i18n:start -->
|
|
41
|
+
|
|
42
|
+
### i18n
|
|
43
|
+
|
|
44
|
+
- 前端新增 key(36):`brand`、`pluginViewLoading`、`pluginViewLoadFailed`、`pluginViewLoadFailedHint`、`pluginViewRetry`、`softCapTokens`、`softCapHint`、`softCapOff`、`softCapByModel`、`softCapByModelHint`、`softCapModelId`、`softCapAdd`、`softCapRemove`、`softCapMarker`、`copyText`、`copyMarkdown`、`copyImage`、`copyFailed`、`scmGenMsg`、`scmGenMsgRunning`、`scmGenMsgTip`、`scmGenMsgFail`、`parallelReminderEnabled`、`parallelReminderEnabledDesc`、`parallelReminderOffHint`、`scmCommitMsgSettingsTitle`、`scmCommitMsgSettingsDesc`、`scmCommitMsgPromptPlaceholder`、`scmCommitMsgSettingsHint`、`uiLayoutTopbarText`、`pluginPhaseActive`、`pluginPhaseDisabled`、`pluginPhaseFailed`、`pluginPhaseIdle`、`pluginRescan`、`pluginRescanHint`
|
|
45
|
+
- 前端删除 key(2):`brandLogo`、`brandName`
|
|
46
|
+
- 服务端新增 key(21):`agent.subagent.limit.reached`、`scm.commitmsg.no.model`、`scm.commitmsg.no.changes`、`scm.commitmsg.model.terminated`、`scm.commitmsg.empty`、`scm.commitmsg.not.repo`、`scm.commitmsg.timeout`、`delegate.start.failed`、`plugins.manifest.broken`、`prompt.skills.intro.use.skill`、`skill.catalog.empty`、`skill.catalog.title`、`skill.catalog.hint`、`skill.not.found`、`skill.no.filepath`、`skill.file.unreadable`、`skill.file.empty`、`skill.file.failed`、`subagents.spawn.failed`、`subagents.steer.not.found`、`subagents.stop.not.found`
|
|
47
|
+
- 服务端文案变更(1):`subagents.wait.empty`
|
|
48
|
+
- 服务端删除 key(1):`prompt.skills.intro.use.read`
|
|
49
|
+
|
|
50
|
+
<!-- auto-i18n:end -->
|
|
51
|
+
|
|
13
52
|
## [0.90.1] — 2026-09-18
|
|
14
53
|
|
|
15
54
|
### Added
|
|
@@ -29,11 +68,13 @@
|
|
|
29
68
|
- **Windows 关机跳过 `pty.kill`**(#215 跟进)—— 根治 ConPTY 关停死锁。
|
|
30
69
|
|
|
31
70
|
<!-- auto-i18n:start -->
|
|
71
|
+
|
|
32
72
|
### i18n
|
|
33
73
|
|
|
34
74
|
- 前端新增 key(3):`takeoverConversation`、`takeoverHasQuestion`、`waitingQuestionBadge`
|
|
35
75
|
- 前端中文变更(1):`elsewhereTip`
|
|
36
76
|
- 前端英文变更(1):`elsewhereTip`
|
|
77
|
+
|
|
37
78
|
<!-- auto-i18n:end -->
|
|
38
79
|
|
|
39
80
|
## [0.90.0] — 2026-09-18
|
|
@@ -64,10 +105,12 @@
|
|
|
64
105
|
- **设置重载失败打日志**,不再静默吞错。
|
|
65
106
|
|
|
66
107
|
<!-- auto-i18n:start -->
|
|
108
|
+
|
|
67
109
|
### i18n
|
|
68
110
|
|
|
69
111
|
- 前端新增 key(27):`brandLogo`、`brandName`、`manageProjects`、`projectPickerTitle`、`newProject`、`projectName`、`createAndOpenProject`、`invalidProjectName`、`openProject`、`fileCompress`、`fileExtract`、`fileCompressDownload`、`fileUploadFolder`、`fileChooseFolder`、`fileExtractDestination`、`fileConflictPolicy`、`fileConflictSkip`、`fileConflictOverwrite`、`fileConflictError`、`fileArchiveLimits`、`fileFolderUploadHint`、`fileTransferBusy`、`fileTransferFailed`、`conversationReadEnabledDesc`、`conversationReadOffHint`、`scheduleTaskEnabledDesc`、`scheduleTaskOffHint`
|
|
70
112
|
- 服务端新增 key(9):`sched.not.wired`、`sched.task.bad.schedule`、`sched.task.interval.too.short`、`sched.task.empty.prompt`、`sched.task.no.cwd`、`sched.list.empty`、`sched.cancel.empty.id`、`sched.cancel.not.found`、`sched.cancel.ok`
|
|
113
|
+
|
|
71
114
|
<!-- auto-i18n:end -->
|
|
72
115
|
|
|
73
116
|
## [0.89.0] — 2026-09-17
|
|
@@ -103,10 +146,12 @@
|
|
|
103
146
|
- **Windows 下 `/webui` 启动不再闪一下控制台窗口**(#176,社区)—— spawn 补 `windowsHide`,`detached` 只在非 Windows 下设;POSIX 行为不变。
|
|
104
147
|
|
|
105
148
|
<!-- auto-i18n:start -->
|
|
149
|
+
|
|
106
150
|
### i18n
|
|
107
151
|
|
|
108
152
|
- 前端新增 key(89):`composerResize`、`updateDesktopNote`、`updateDesktopCheck`、`updateDesktopChecking`、`updateDesktopAvailable`、`updateDesktopDownload`、`updateDesktopDownloading`、`updateDesktopDownloaded`、`updateDesktopInstall`、`updateDesktopManual`、`updateDesktopError`、`updateDesktopNoBridge`、`kindGitExtension`、`fileReveal`、`fileOpenDefault`、`refreshBuiltinCatalog`、`refreshBuiltinHint`、`refreshBuiltinBusy`、`refreshBuiltinOk`、`refreshBuiltinFail`、`appendModel`、`appendModelTitle`、`appendModelIdPh`、`appendModelNamePh`、`appendModelAdd`、`appendModelBusy`、`appendModelCancel`、`appendModelOk`、`appendModelFail`、`appendModelApiTitle`、`appendModelApiAuto`、`appendModelBaseUrlPh`、`toolsSectionPlugin`、`toolsPluginHint`、`pluginToolsSection`、`pluginToolsEmpty`、`pluginToolOffHint`、`pluginListTab`、`settingsScheduler`、`schedulerDesc`、`schedulerEmpty`、`schedulerNew`、`schedulerEdit`、`schedulerDelete`、`schedulerRunNow`、`schedulerRunning`、`schedulerEnable`、`schedulerDisable`、`schedulerEnabled`、`schedulerDisabled`、`schedulerNameLabel`、`schedulerNamePlaceholder`、`schedulerDescPlaceholder`、`schedulerCwdLabel`、`schedulerCwdPlaceholder`、`schedulerUseCurrentCwd`、`schedulerKindLabel`、`schedulerKindCron`、`schedulerKindInterval`、`schedulerCronPlaceholder`、`schedulerPresetDaily`、`schedulerPresetHourly`、`schedulerPresetHalfHour`、`schedulerPresetWorkday`、`schedulerPresetMonday`、`schedulerPresetCustom`、`schedulerIntervalMinutes`、`schedulerPromptLabel`、`schedulerPromptPlaceholder`、`schedulerModelLabel`、`schedulerThinkingLabel`、`schedulerCatchUp`、`schedulerCatchUpHint`、`schedulerNextFire`、`schedulerLastRun`、`schedulerNeverRun`、`schedulerHistory`、`schedulerManualBadge`、`schedulerRunOk`、`schedulerRunFail`、`schedulerConfirmDelete`、`schedulerSave`、`schedulerCancelEdit`、`copyConversationId`、`copyConversationPath`、`quoteConversation`、`quoteConversationShort`、`attachConversation`、`attachConversationShort`
|
|
109
153
|
- 服务端新增 key(6):`convread.list.bad.scope`、`convread.read.bad.args`、`convread.read.id.not.found`、`convread.read.path.not.found`、`convread.bad.action`、`dsh.provider.builtin.refresh.unsupported`
|
|
154
|
+
|
|
110
155
|
<!-- auto-i18n:end -->
|
|
111
156
|
|
|
112
157
|
## [0.88.0] — 2026-09-16
|
|
@@ -1046,7 +1091,9 @@ when?, children?}`,也收 `topbar` / `settings` 这类简写别名);宿主
|
|
|
1046
1091
|
- 0.35.1(2026-08-27):编辑重问保留附件(#18)+ 全窗口拖放(#19)。
|
|
1047
1092
|
- 0.29.0(2026-08-23):全局搜索弹窗(Ctrl+K)+ 消息列表惰性窗口化。
|
|
1048
1093
|
|
|
1049
|
-
[Unreleased]: https://github.com/xing-shuyin/pi-web-ui/compare/v0.
|
|
1094
|
+
[Unreleased]: https://github.com/xing-shuyin/pi-web-ui/compare/v0.91.0...main
|
|
1095
|
+
[0.91.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.91.0
|
|
1096
|
+
[0.90.1]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.90.1
|
|
1050
1097
|
[0.90.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.90.0
|
|
1051
1098
|
[0.89.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.89.0
|
|
1052
1099
|
[0.88.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.88.0
|