diff --git a/FEATURES.md b/FEATURES.md
index 251da032..a3983ee5 100644
--- a/FEATURES.md
+++ b/FEATURES.md
@@ -21,7 +21,7 @@ otherwise.
packages target compatible x64 and arm64 environments, including UOS, Kylin,
Hygon, Zhaoxin, Kunpeng, and Phytium systems. This is not vendor certification.
LoongArch has a separate experimental loong64 preview outside standard
- releases and automatic updates; no preview is planned for 0.13.1. See the
+ releases and automatic updates; no preview is planned for 0.13.2. See the
[preview boundaries](./docs/development/loongarch-preview-build.md).
- [x] **Configurable global shortcut**: Enable, disable, or record an Electron
accelerator under Platform Features / General. The default remains
@@ -38,8 +38,10 @@ otherwise.
Host heading and only the remote path on each project row.
- [x] **Cross-project conversation activity**: A shared activity entry lists
running conversations and conversations needing attention across projects,
- including older conversations with live work. Open the associated
- conversation directly; project selection also shows activity counts.
+ including older conversations with live work. Anchored project-to-conversation
+ menus provide keyboard navigation and exact conversation opening without a
+ full activity dialog. The summary remains visible when idle, and project
+ selection continues to show activity counts.
- [x] **Compact conversation controls**: Composer options share a compact
settings panel while Runtime, mode, sending, and queue controls remain
available. Conversation search has an inline clear action that restores the
@@ -116,8 +118,10 @@ otherwise.
The first upgrade automatically converts existing history and reclaims disk
space, with visible progress and quit/retry support. Chats, execution details,
results, and remote event deduplication are preserved; older clients cannot
- reopen the upgraded database. The unreleased schema-35 repair also handles
- repeated tool blocks written after upgrading to 0.13.1, without deleting events. See
+ reopen the upgraded database. The 0.13.2 candidate's schema-35 repair also handles
+ repeated tool blocks written after upgrading to 0.13.1, without deleting events.
+ Terminal tasks release their write caches; duplicate remote replay does not
+ rebuild a released cache. See
[storage and upgrade behavior](./docs/features/assistant-workbar/execution-history-storage.md).
- [x] **Direct model Runtime**: Supports question answering, knowledge
@@ -224,7 +228,7 @@ otherwise.
failure, Agent `SIGKILL`/restart, and recovery from a reopened Desktop SQLite
database. Successful tool START/END events appear exactly once, with no
Prompt, provider, or tool replay observed. The current Agent source lock is
- `0.11.24`, while the current Desktop release candidate is `0.13.1`; formal
+ `0.11.25`, while the current Desktop release candidate is `0.13.2`; formal
publication status follows the separate Agent and Desktop
release channels. Previous macOS validation covered native package installation,
detached lifecycle, Attach, real Ask/Execute, and cancellation of tools in
@@ -278,7 +282,9 @@ otherwise.
permissions. Image input follows the selected model connection's declared
capability: text models reject images before Host or model invocation, while
image-capable models receive bounded inline JPEG/PNG content through a
- temporary Attachment Store.
+ temporary Attachment Store. On Windows, Host startup and ACP sessions share
+ one canonical workspace path, so equivalent path spellings reuse the same
+ working Runtime instead of failing session creation.
- [x] **DSH npm plugin marketplace**: Disabled by default and searches public
npm `dsh-plugin` packages only after explicit user enablement. It uses the
bundled npm to install exact versions with ordinary lifecycle scripts and
@@ -560,6 +566,9 @@ otherwise.
- [x] **Compact conversation tool records**: Expand individual tool records
to read or copy results, errors, and input parameters. Conversation and
child-task progress use concise rows without repeated Runtime summaries.
+ OpenCode, Continue, DeepSeek Harness, and direct models show available file
+ paths, commands, or search summaries and retain them through completion and
+ conversation reloads.
- [x] **Task and custom-task experience**: Each product-level Task belongs to
one Conversation, while one Conversation can contain multiple Tasks. The
left conversation list exposes Task children through a leading expand
@@ -677,15 +686,18 @@ otherwise.
### Open source, builds, and releases
-- Current source candidates are Desktop `0.13.1` and Agent `0.11.24`, with
+- Current source candidates are Desktop `0.13.2` and Agent `0.11.25`, with
OpenCode pinned to `1.18.29`. Publication status follows the independent
Desktop and Agent release channels.
-- Candidate acceptance remains separate from version preparation. The current
- remote-question source has passed real Linux x64 SSH and Electron question
- tests with a deterministic loopback model, not the complete production
- Main/Preload path with a real provider. That real-model path and candidate
- native CI/package validation remain outstanding; see the
- [remote-question evidence](./docs/features/assistant-workbar/progress.md).
+- Agent `0.11.25` is a maintenance release without standalone remote feature
+ changes, and its packages require Desktop `0.13.2`. The desktop storage repair
+ also works with Agent `0.11.24`; updating Agent is not a substitute for updating Desktop.
+- Candidate acceptance remains separate from version preparation. Current-source
+ storage validation covers real local and Linux x64 Host tool workloads,
+ concurrent projects/conversations, cancellation, and lossless database migration.
+ Windows tool summaries and DeepSeek path handling have real full-App evidence;
+ the release candidate still requires main CI and native release packaging. See the
+ [validation evidence](./docs/features/assistant-workbar/progress.md).
- [x] **0BSD open-source license**: Original code can be freely used, copied,
modified, distributed, and commercialized. Third-party components and
resources retain their own licenses.
diff --git a/FEATURES.zh-CN.md b/FEATURES.zh-CN.md
index da5ae53d..fdad20ba 100644
--- a/FEATURES.zh-CN.md
+++ b/FEATURES.zh-CN.md
@@ -14,10 +14,10 @@
### 桌面基础、工作空间与上下文
- [x] **跨平台桌面应用**:支持 Windows、macOS、Linux,以及 `x64`、`arm64` 发布目标。
-- [x] **信创软硬件覆盖**:正式 Linux 安装包覆盖国产 `x64` 与 `arm64` 架构,可用于统信 UOS、银河麒麟及海光、兆芯、鲲鹏、飞腾等兼容环境。龙芯 LoongArch 另行提供 `loong64` 实验预览版,不属于正式发布矩阵,也未纳入自动更新;`0.13.1` 不构建该预览。这里的覆盖范围不等同于厂商或整机兼容认证,具体状态与限制见[龙芯预览版构建说明](./docs/development/loongarch-preview-build.md)。
+- [x] **信创软硬件覆盖**:正式 Linux 安装包覆盖国产 `x64` 与 `arm64` 架构,可用于统信 UOS、银河麒麟及海光、兆芯、鲲鹏、飞腾等兼容环境。龙芯 LoongArch 另行提供 `loong64` 实验预览版,不属于正式发布矩阵,也未纳入自动更新;`0.13.2` 不构建该预览。这里的覆盖范围不等同于厂商或整机兼容认证,具体状态与限制见[龙芯预览版构建说明](./docs/development/loongarch-preview-build.md)。
- [x] **可配置全局快捷唤起**:在“平台功能 / 通用设置”中启停或录制 Electron accelerator;默认保留 `CommandOrControl+Shift+Space`,冲突或保存失败时继续使用上一组已注册快捷键,并显示可处理的状态。
- [x] **Projects、独立对话与会话分支**:按项目隔离上下文,管理会话、附件和 Git 工作区变更;本地会话可在稳定状态下复制当前聊天内容到独立分支,分支持续显示来源徽标且不复制 Task、队列或成果归属;项目选择器区分本地、托管 SSH 与远程消息通道项目,托管 SSH 项目按 Host 分组并在 Host 标题显示真实 Agent 连接状态,项目行只保留远端路径。
-- [x] **跨项目会话活动**:统一入口汇总各项目正在运行和需要处理的对话,保留仍有活动的较早会话,可直接打开对应对话;项目选择器也显示活动数量。
+- [x] **跨项目会话活动**:统一入口汇总各项目正在运行和需要处理的对话,保留仍有活动的较早会话。锚定的“项目 → 会话”菜单支持键盘导航和精确打开对话,不再使用整块活动弹窗;空闲时摘要入口仍显示,项目选择器继续显示活动数量。
- [x] **紧凑会话控件**:输入选项集中在紧凑设置面板,Runtime、工作模式、发送和队列操作保持可用;会话搜索提供内嵌清除按钮,清除后恢复当前范围列表并把焦点返回输入框。
- [x] **文件、截图、窗口、剪贴板上下文**:用户明确选择后才加入模型上下文。
- [x] **工作区单文件差异**:变更文件可分别查看已暂存和未暂存差异,覆盖删除、重命名和未跟踪文件;刷新会重读当前差异、当前浏览目录和已展开目录,超过 50 项变更可继续加载。
@@ -32,7 +32,7 @@
### Agent Runtime 与模型连接
-- [x] **子任务历史去重与空间回收**:本机与托管 SSH 子任务事件只存变化,不再反复保存完整进度。首次升级自动转换旧记录并回收空间,显示进度且支持退出重试;保留聊天、执行详情、结果和远程事件去重。当前未发布的 schema 35 补修还会整理升级到 0.13.1 后重复写入的工具块,不删除事件。旧客户端不能打开升级后的数据库,具体规则见[执行记录存储与升级回收](./docs/features/assistant-workbar/execution-history-storage.md)。
+- [x] **子任务历史去重与空间回收**:本机与托管 SSH 子任务事件只存变化,不再反复保存完整进度。首次升级自动转换旧记录并回收空间,显示进度且支持退出重试;保留聊天、执行详情、结果和远程事件去重。0.13.2 候选的 schema 35 补修还会整理升级到 0.13.1 后重复写入的工具块,不删除事件;终态及时释放写入缓存,远程重复重放不重建已释放的缓存。旧客户端不能打开升级后的数据库,具体规则见[执行记录存储与升级回收](./docs/features/assistant-workbar/execution-history-storage.md)。
- [x] **直连模型 Runtime**:支持问答、知识总结、受控工具执行、图像生成,以及通过支持 OpenAI 兼容图片编辑接口的服务商进行参考图编辑。连续请求自动复用最近一次成功生成的图片和文字历史,已保存会话重开后仍可继续修改,本轮显式附图优先;上游明确不支持编辑时继续按文字生成,仅在回复底部提示未使用参考图。编辑使用 multipart 上传图片,结果仍只接受经过校验的内联图片,不下载服务商返回的图片 URL。详见[图片生成与连续修改](./docs/features/image-generation/README.md)。
- [x] **直连模型编程 Agent**:本机直连文本模型可在 Execute 模式运行平台 Shell,并可按父请求模式、模型、工作区和能力范围委派一层编程 Subagent;OpenCode、Continue、DeepSeek Harness 和托管 SSH 不重复注入这两个工具。Windows 本机命令与真实模型“修改、测试、修复、复核”闭环已通过,macOS 与 Linux 真机命令仍待对应平台验收。
@@ -44,7 +44,7 @@
- [ ] **SSH Host 环境准备真实 Host 验收**:当前源码已在隔离 Linux x64 环境通过包安装、Ask/Execute、原生子代理工作区外写入、重连及 stop/bootstrap。Host 卡片的完整 GitHub、北京镜像、Linux x64/arm64、取消和离线 GoodBuddy 传输矩阵仍待验收,候选 CI/原生打包与系统休眠唤醒也尚未验证;部分开发证据不代表已经发布。
- [x] **远程工作区与长任务更新**:Agent `0.11.23` 新增远程文件/Git 管理和可选模型限额,随包 Runtime 不再施加固定十分钟 Prompt 时限;无限请求时长仍保留独立连接超时。请先升级 Desktop 至 `0.12.11`,再下载并更新 Host 上的 Agent。
- [x] **远程原生问答与取消修复**:Agent `0.11.24` 修复远程原生问答转交和取消待答后同一会话续发,需要先升级 Desktop 至 `0.13.0`。
-- [x] **DeepSeek Harness(预览)**:使用 GoodBuddy 固定 Host 和 OpenAI 兼容模型连接;优先使用管理员提供的连接,否则跟随兼容的默认模型或首个兼容连接,无需单独重复选择,设置页显示实际管理员或回退模型来源。Ask 只允许调用 Host 中真实注册的 `read`、`skill` 以及 Main 管理的 Web Search/Fetch 代理,拒绝插件同名冒充,Execute 放行全部已启用内置及插件工具,并以当前用户权限运行。图像输入跟随所选模型连接的能力声明,文本模型在 Host 或模型调用前拒绝图片,图片模型通过有界内联内容和临时 Attachment Store 接收 JPEG/PNG。
+- [x] **DeepSeek Harness(预览)**:使用 GoodBuddy 固定 Host 和 OpenAI 兼容模型连接;优先使用管理员提供的连接,否则跟随兼容的默认模型或首个兼容连接,无需单独重复选择,设置页显示实际管理员或回退模型来源。Ask 只允许调用 Host 中真实注册的 `read`、`skill` 以及 Main 管理的 Web Search/Fetch 代理,拒绝插件同名冒充,Execute 放行全部已启用内置及插件工具,并以当前用户权限运行。图像输入跟随所选模型连接的能力声明,文本模型在 Host 或模型调用前拒绝图片,图片模型通过有界内联内容和临时 Attachment Store 接收 JPEG/PNG。Windows Host 启动和 ACP 会话共用规范工作区路径,同目录不同写法可复用正常 Runtime,不再因路径不一致而创建会话失败。
- [x] **DSH npm 插件市场**:市场默认关闭,由用户显式开启后搜索公共 npm 的 `dsh-plugin` 包,使用捆绑 npm 执行精确版本安装和普通 lifecycle scripts,并支持启停、JSON 配置、移除、失败启动自动停用和离线管理已安装插件;关闭市场只隐藏目录与管理界面,不改变已有插件的启停状态,第三方代码不受 Ask 初始化隔离。
- [x] **Ask 与 Execute 工作模式**:Ask 保持只读;Execute 是用户对当前本机或 SSH 账号可用工具、进程、网络和可写路径的完整授权,包括工作区外路径及原生子代理工作。
- [x] **Runtime 原生交互转交**:OpenCode 与 Continue 的选择、yes/no、自由文本回答和跳过使用现有问答卡片,本机与托管 SSH OpenCode 同时转交属于当前请求的子会话提问。托管 SSH 需要 Desktop `0.13.0`、Agent `0.11.24` 和新启动的托管 Runtime,不扩展到任意 ACP 服务。回答或跳过成功后保留原问题与答案,支持多轮记录和本地会话重载;旧版本已丢弃的答案不能恢复。并行问题按顺序等待回答,重复事件保留草稿,提交失败可重试;取消远程待答后可在同一会话继续发送。Execute 权限确认自动处理,不等待第二次审批;具体支持范围见[交互边界](./docs/features/assistant-workbar/runtime-interactions.md)。
@@ -91,7 +91,7 @@
### 工作管理、长期协作与工作流
- [x] **任务、活动与成果**:集中管理任务状态、审计活动和独立成果文件;普通聊天回复只保留在会话中,不再自动复制到成果栏,已有重复聊天 Markdown 从成果列表隐藏但不物理删除。运行记录改由 Main SQLite 保存,不再受旧 Renderer 的 500 条、单详情 4,000 字符或约 2 MB 上限影响,页面按批继续显示;不再常驻旧缓存截断警告,但不会恢复此前已丢失的历史。Token 用量按 Runtime 与模型归类,并针对 OpenAI 兼容与 Anthropic Messages 的不同上报口径归一化展示缓存命中率;活动按会话分组并默认收起,避免长历史占满页面。
-- [x] **紧凑会话工具记录**:逐项展开工具记录即可查看和复制结果、错误及输入参数;会话与子任务进度使用简洁行,减少重复 Runtime 摘要。
+- [x] **紧凑会话工具记录**:逐项展开工具记录即可查看和复制结果、错误及输入参数;会话与子任务进度使用简洁行,减少重复 Runtime 摘要。OpenCode、Continue、DeepSeek Harness 和直连模型可显示已有文件路径、命令或搜索摘要,并在工具完成和会话重载后保留。
- [x] **Task 与定制任务体验**:每个产品级 Task 只关联一条 Conversation,一条 Conversation 可承载多个 Task;左侧会话列表通过行首展开按钮显示带共享状态点的 Task 子项,父会话行不重复任务标签,UI 只展示到 Task,不暴露 Job/Run 层级。新建定制任务可关联当前或新 Conversation,默认 Execute 并沿用 Runtime、工具和审批边界;重复触发复用同一 Task,文本结果回写 Conversation,独立文件和图片保留为成果。普通消息与到期 Scheduled Task 共用 Conversation 级持久发送队列,同一会话一次只执行一项;当前回复期间仍可继续发送,队列按顺序续跑,并允许删除或“立即中断并插入”。Task Center 继续作为完整索引,不建设独立 Automation Center。当前计划触发支持单次、每日和每周;高级时区、Cron、事件触发与重试治理仍按 PRD 逐步实现。详见 [Task Center PRD](./docs/features/task-and-job/task-center-prd.md) 和 [Scheduled Task PRD](./docs/features/task-and-job/scheduled-task-prd.md)。
- [x] **记忆与智能心跳**:当前提供周期回顾、建议记忆、洞察、后续任务和可审计运行轨迹。
- [x] **定时消息沿用会话**:定时消息使用会话当前历史、Runtime、工作模式和已保存的知识检索设置;任务详情显示实际运行模式,当前 occurrence 未结束时禁止重复“立即运行”。
@@ -121,8 +121,9 @@
### 开源、构建与发布
-- 当前源码候选为 Desktop `0.13.1`、Agent `0.11.24`,OpenCode 固定为 `1.18.29`;正式发布状态以 Desktop 与 Agent 的独立发布渠道为准。
-- 候选验收与版本准备分别记录。当前远程问答源码已通过真实 Linux x64 SSH 与 Electron 问答测试,但模型为确定性 loopback 服务,不是完整生产 Main/Preload 配合真实服务商;该真实模型链路和候选原生 CI/打包验证仍待完成,详见[远程问答证据](./docs/features/assistant-workbar/progress.md)。
+- 当前源码候选为 Desktop `0.13.2`、Agent `0.11.25`,OpenCode 固定为 `1.18.29`;正式发布状态以 Desktop 与 Agent 的独立发布渠道为准。
+- Agent `0.11.25` 为维护版,不新增独立远端功能,复合包要求 Desktop `0.13.2`。桌面存储补修也适用于 Agent `0.11.24`,更新 Agent 不能代替升级 Desktop。
+- 候选验收与版本准备分别记录。当前存储源码已通过本地及 Linux x64 Host 真实工具任务、多项目多会话、取消和无损迁移验证;Windows 工具摘要与 DeepSeek 路径处理有完整 App 的真实模型证据。候选仍需主分支 CI 及原生发布打包,详见[验证记录](./docs/features/assistant-workbar/progress.md)。
- [x] **0BSD 开源许可**:原创代码可自由使用、复制、修改、分发和商用;第三方组件和资源仍遵循各自许可证。
- [x] **可复现依赖安装与源码构建**:使用锁定依赖、Node.js 24 和统一的测试、类型检查、Lint、生产构建命令。
- [x] **六平台原生发布矩阵**:Windows、macOS、Linux 的 `x64`、`arm64` 目标由原生 Runner 构建,并提供发布清单和 SHA-256 哈希。Windows 提供 NSIS 与 portable ZIP,macOS 仅 DMG,Linux 提供 AppImage、DEB 和 RPM,共 12 个安装包、20 个发布资产。
diff --git a/agent-runtime-lock.json b/agent-runtime-lock.json
index 82651a26..58f77698 100644
--- a/agent-runtime-lock.json
+++ b/agent-runtime-lock.json
@@ -1,6 +1,6 @@
{
"formatVersion": 1,
- "agentVersion": "0.11.24",
+ "agentVersion": "0.11.25",
"protocol": {
"major": 2,
"minor": 0
diff --git a/docs/features/application-tool-navigation/progress.md b/docs/features/application-tool-navigation/progress.md
index 25c585a5..2c041e7d 100644
--- a/docs/features/application-tool-navigation/progress.md
+++ b/docs/features/application-tool-navigation/progress.md
@@ -27,3 +27,18 @@ Windows Electron 视觉 fixture 使用当前 `ProjectActivity`、生产样式和
Demo 已按最新讨论隐藏空闲摘要并移除会话行箭头;生产实现仍保留空闲摘要,尚未与 Demo 对齐。
后续界面修正已移除生产会话行箭头,并为活动摘要与下方新建会话增加 `8px` 间距。
+
+## 2026-09-14:0.13.2 候选验证
+
+正式发布准备时再次复现 App 问答用例的时序失败。活动摘要改为常驻后,等待该入口出现
+不再意味着会话初始化和 Runtime 状态读取已经完成;测试有时点击仍被禁用的发送按钮,
+留下未消费的一次性问答 mock,继而影响后续用例。
+
+测试现等待已加载的会话和可用发送按钮,并在每个用例前重置问答及审批响应 mock。
+答案重载用例等待提交后的界面状态,而不只等待 API 被调用。未修改生产交互、
+未增加固定延时,也未跳过失败用例。相关 20 项连续三轮通过,完整 App 与 Agent
+发布说明检查共 227 项通过。
+
+最终候选 `npm test` 通过 4,155 项、跳过 66 项、失败 0 项;`npm run typecheck`、
+`npm run lint` 和 `npm run release:notes:verify` 均通过。发布准备未执行本地生产构建、
+打包或安装包启动探针,原生包验收由主分支与标签 CI 完成。
diff --git a/package-lock.json b/package-lock.json
index 3c24dcc4..bbe280a3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "goodbuddy",
- "version": "0.13.1",
+ "version": "0.13.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "goodbuddy",
- "version": "0.13.1",
+ "version": "0.13.2",
"license": "0BSD",
"dependencies": {
"@agentclientprotocol/sdk": "0.25.1",
diff --git a/package.json b/package.json
index 271efd71..852ff2b9 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "goodbuddy",
- "version": "0.13.1",
+ "version": "0.13.2",
"private": true,
"description": "Secure desktop AI workspace with controlled Agent Runtimes",
"desktopName": "GoodBuddy",
diff --git a/resources/agent-release-notes/0.11.25.md b/resources/agent-release-notes/0.11.25.md
new file mode 100644
index 00000000..a4950af3
--- /dev/null
+++ b/resources/agent-release-notes/0.11.25.md
@@ -0,0 +1,23 @@
+# GoodBuddy Agent 0.11.25 更新内容
+
+## 维护更新
+
+- **配套 Desktop 0.13.2 的维护版本**:本次重新发布受支持平台的 Agent 复合包,不新增独立远端功能,也不改变 Agent 协议。桌面端的工具记录和执行历史存储补修由 Desktop 0.13.2 提供,更新 Agent 不能代替桌面升级。
+
+## 升级说明
+
+- 需要 **Desktop 0.13.2 或更高版本**,请先升级 Desktop,再按需更新 Host 环境。提供 Linux x64、Linux arm64 和 macOS arm64 复合包,Node 保持 `24.19.0`,OpenCode 保持 `1.18.29`。
+- Ask 保持只读,Execute 继续使用所选 SSH 账号权限。更新不会热替换运行中的旧进程,请在当前任务结束后更新并使用新 Runtime。
+
+---
+
+# What's New in GoodBuddy Agent 0.11.25
+
+## Maintenance
+
+- **Maintenance release alongside Desktop 0.13.2**: Agent compound packages are republished for the supported platforms without adding standalone remote features or changing the Agent protocol. Desktop 0.13.2 provides the tool-record and execution-history storage repairs; updating Agent does not replace the Desktop upgrade.
+
+## Upgrade Notes
+
+- Requires **Desktop 0.13.2 or later**; upgrade Desktop before updating Host environments as needed. Compound packages target Linux x64, Linux arm64, and macOS arm64, retaining Node `24.19.0` and OpenCode `1.18.29`.
+- Ask remains read-only, and Execute retains the selected SSH account's permissions. Updates do not hot-replace running processes; finish active tasks before updating and using a new Runtime.
diff --git a/resources/release-notes.json b/resources/release-notes.json
index 67aa6333..d65ba498 100644
--- a/resources/release-notes.json
+++ b/resources/release-notes.json
@@ -1,6 +1,42 @@
{
"formatVersion": 1,
"releases": [
+ {
+ "version": "0.13.2",
+ "releasedAt": "2026-09-14",
+ "notes": {
+ "zh-CN": {
+ "highlights": [],
+ "features": [],
+ "fixes": [
+ "**修复升级后仍重复增长的执行记录**:修复 0.13.1 中子代理使用工具时,未变化的工具内容仍被重复保存的问题。首次启动会无损整理这些重复内容,保留会话、执行详情、结果和远程来源记录。任务结束后及时释放存储缓存,不清空其他正在运行会话的缓存。",
+ "**工具正在做什么更清楚**:OpenCode、Continue、DeepSeek Harness 和直连模型的工具记录可显示文件路径、命令或搜索摘要。工具完成后仍保留已有操作说明,展开记录或重新打开会话可继续查看输入、结果和错误。",
+ "**修复 Windows DeepSeek 工作区路径错误**:同一个目录使用不同分隔符或规范路径写法时,不再因为 Host 与会话路径不一致而导致请求失败。Host 启动和后续会话使用同一规范路径,保持原有工作区与权限边界。",
+ "**跨项目活动菜单更紧凑**:点击活动摘要后,可按“项目 → 会话”两级菜单直接进入需要处理的对话,不再打开整块活动弹窗。菜单支持键盘导航,并调整了入口间距和会话行指示,保留原有活动计数及跨项目定位。"
+ ],
+ "notices": [
+ "本次会再次整理已升级至 0.13.1 的数据库;大库可能需要时间和额外磁盘空间,支持退出后继续。升级后的数据库不能由旧客户端打开,需要回退时请使用升级前备份,不要手工修改数据库版本。",
+ "配套发布 **Agent 0.11.25** 维护版,需要先升级至 **Desktop 0.13.2**,再按需更新 Host 环境。存储补修由 Desktop 执行,不依赖升级 Agent;远程项目仍为技术预览,Ask/Execute 权限不变。",
+ "Desktop 提供 Windows、macOS、Linux 的 x64/arm64 标准安装包;本次不构建 LoongArch 实验预览。"
+ ]
+ },
+ "en-US": {
+ "highlights": [],
+ "features": [],
+ "fixes": [
+ "**Fix repeated execution-history growth after upgrading**: Fixed an issue in 0.13.1 where subagents using tools could repeatedly save unchanged tool content. The first launch compacts these duplicates without losing conversations, execution details, results, or remote provenance. Finished tasks release their storage caches without clearing caches for other active conversations.",
+ "**See what tools are doing**: Tool records from OpenCode, Continue, DeepSeek Harness, and direct models can show file paths, commands, or search summaries. Existing operation descriptions remain after completion, and expanded records or reopened conversations retain inputs, results, and errors.",
+ "**Fix Windows DeepSeek workspace-path errors**: Equivalent paths to the same directory no longer fail because the Host and session disagree about separators or canonical spelling. Host startup and subsequent sessions use the same canonical path while preserving workspace and permission boundaries.",
+ "**More compact cross-project activity navigation**: Open the activity summary and use a two-level project-to-conversation menu to reach conversations needing attention instead of opening a large activity dialog. Keyboard navigation, improved spacing, and simpler conversation indicators preserve activity counts and exact cross-project navigation."
+ ],
+ "notices": [
+ "This update also compacts databases already upgraded to 0.13.1; large databases may take time and require extra disk space, with quit-and-resume support. Older clients cannot open the upgraded database, so use a pre-upgrade backup for rollback rather than manually changing its version.",
+ "The accompanying **Agent 0.11.25** maintenance release requires **Desktop 0.13.2** before updating a Host environment. Desktop performs the storage repair without requiring an Agent update; remote projects remain a technical preview and Ask/Execute permissions are unchanged.",
+ "Desktop includes standard Windows, macOS, and Linux x64/arm64 packages, without a LoongArch experimental preview."
+ ]
+ }
+ }
+ },
{
"version": "0.13.1",
"releasedAt": "2026-09-13",
diff --git a/src/renderer/src/App.test.tsx b/src/renderer/src/App.test.tsx
index cc916d2f..4288a7d1 100644
--- a/src/renderer/src/App.test.tsx
+++ b/src/renderer/src/App.test.tsx
@@ -1063,6 +1063,8 @@ describe("App", () => {
delete document.documentElement.dataset.theme;
document.documentElement.style.colorScheme = "";
vi.clearAllMocks();
+ vi.mocked(api.agent.respondQuestion).mockReset().mockResolvedValue();
+ vi.mocked(api.agent.respondApproval).mockReset().mockResolvedValue();
magicTodoStatusChangedListener = undefined;
vi.mocked(api.magicNotes.getTodoStatus)
.mockReset()
@@ -1378,8 +1380,9 @@ describe("App", () => {
it.each(["question", "approval"] as const)("preserves live %s across snapshot refresh and clears persisted terminal prompts", async (kind) => {
render();
- await screen.findByRole("button", { name: /全项目活动/u });
+ await screen.findByLabelText("更多会话操作 Current discussion");
fireEvent.change(screen.getByLabelText("向 GoodBuddy 提问"), { target: { value: "Refresh pending prompt" } });
+ await waitFor(() => expect(screen.getByLabelText("发送")).toBeEnabled());
fireEvent.click(screen.getByLabelText("发送"));
await waitFor(() => expect(run).toHaveBeenCalledOnce());
const request = run.mock.calls[0]![0];
@@ -1439,8 +1442,9 @@ describe("App", () => {
vi.mocked(kind === "question" ? api.agent.respondQuestion : api.agent.respondApproval)
.mockImplementationOnce(() => new Promise((yes, no) => { resolve = yes; reject = no; }));
render();
- await screen.findByRole("button", { name: /全项目活动/u });
+ await screen.findByLabelText("更多会话操作 Current discussion");
fireEvent.change(screen.getByLabelText("向 GoodBuddy 提问"), { target: { value: "Response activity" } });
+ await waitFor(() => expect(screen.getByLabelText("发送")).toBeEnabled());
fireEvent.click(screen.getByLabelText("发送"));
await waitFor(() => expect(run).toHaveBeenCalledOnce());
const request = run.mock.calls[0]![0];
@@ -1476,8 +1480,9 @@ describe("App", () => {
it.each(["question", "approval"] as const)("groups pending %s ahead of running, deduplicates live and task activity, and clears terminal events", async (kind) => {
render();
- await screen.findByRole("button", { name: /全项目活动/u });
+ await screen.findByLabelText("更多会话操作 Current discussion");
fireEvent.change(screen.getByLabelText("向 GoodBuddy 提问"), { target: { value: "Track live activity" } });
+ await waitFor(() => expect(screen.getByLabelText("发送")).toBeEnabled());
fireEvent.click(screen.getByLabelText("发送"));
await waitFor(() => expect(run).toHaveBeenCalledOnce());
const request = run.mock.calls[0]![0];
@@ -10780,7 +10785,9 @@ describe("App", () => {
["先写测试"],
]),
);
- expect(screen.queryByText("OpenCode 需要补充信息")).not.toBeInTheDocument();
+ await waitFor(() =>
+ expect(screen.queryByText("OpenCode 需要补充信息")).not.toBeInTheDocument(),
+ );
expect(screen.getByText("请选择实现方式")).toBeInTheDocument();
expect(screen.getByText("先写测试")).toBeInTheDocument();
act(() => {
diff --git a/tests/agent-release-workflow.test.ts b/tests/agent-release-workflow.test.ts
index 3a2f7150..1d961cf5 100644
--- a/tests/agent-release-workflow.test.ts
+++ b/tests/agent-release-workflow.test.ts
@@ -61,10 +61,11 @@ describe('independent Agent release workflow', () => {
expect(scripts('publish')).toContain('test -s "$notes"')
expect(notes).toContain(`# GoodBuddy Agent ${agentVersion} 更新内容`)
expect(notes).toContain(`# What's New in GoodBuddy Agent ${agentVersion}`)
- expect(notes).toMatch(/^## (?:功能更新|问题修复)$/mu)
- expect(notes).toMatch(/^## (?:Features|Bug Fixes)$/mu)
+ expect(notes).toMatch(/^## (?:功能更新|问题修复|维护更新)$/mu)
+ expect(notes).toMatch(/^## (?:Features|Bug Fixes|Maintenance)$/mu)
expect(notes.includes('## 功能更新')).toBe(notes.includes('## Features'))
expect(notes.includes('## 问题修复')).toBe(notes.includes('## Bug Fixes'))
+ expect(notes.includes('## 维护更新')).toBe(notes.includes('## Maintenance'))
})
it('uses a separate immutable agent-v tag and never enters desktop packaging', () => {