Completed OpenCode requests left their event streams open across repeated and parallel conversations. Each request now closes its own subscription on exit without cancelling peer sessions, and cancellation preserves its original cause. Direct-model Execute commands no longer restrict cwd to the workspace. Absolute paths, parent-relative paths, and symlinks to external directories are accepted. The workspace remains the default and relative-path base; Ask stays read-only, and local execution binding, directory validation, and process cleanup remain. Add real OpenCode lifecycle and real Shell tool-loop regressions, plus matching feature documentation. Focused checks: 182 passed, 1 skipped; typecheck and lint passed. Full shared-worktree suite: 3542 passed, 57 skipped, 1 unrelated sidebar heading failure, reproduced separately and documented. Release note: 修复 OpenCode 连续及并行对话结束后事件连接未释放的问题;直连模型 Execute 命令现在可直接指定工作区外的绝对路径、相对路径或符号链接目录,Ask 只读边界保持不变。
6.3 KiB
直连模型 Agent 能力 User Stories
文档信息
| 项目 | 内容 |
|---|---|
| 状态 | 已实施,跨平台 CI 待验证 |
| 版本 | 0.3 |
| 日期 | 2026-09-03 |
| 关联 PRD | 直连模型 Agent 能力 PRD |
| 关联逻辑 | 功能逻辑设计 |
1. 角色
1.1 普通项目用户
希望模型直接完成脚本、文档生成或数据处理,不关心不同平台的 Shell 名称。
1.2 开发者
希望直连模型能够修改代码、运行测试、检查 Git 状态并根据失败结果继续修正。
1.3 Runtime 用户
已经使用 OpenCode、Continue 或 DeepSeek Harness,希望继续使用 Runtime 原生能力,不看到 重复的 GoodBuddy Shell 或 Subagent。
2. Epic A:跨平台执行
US-A1 在 Windows 运行项目命令
关联:FR-2、FR-3、FR-4。
Given 当前项目位于 Windows 本机且选择直连模型 Execute,When 模型调用
process_execute,Then GoodBuddy 使用可用 PowerShell 在项目目录运行命令,并返回
Shell、目录、退出码、输出和耗时。
US-A2 在 macOS/Linux 运行项目命令
关联:FR-2、FR-3。
Given 当前项目位于 macOS 或 Linux 本机,When 模型运行同一工具,Then GoodBuddy 使用 Bash,Bash 不可用时使用 Sh,工具契约保持不变且实际 Shell 明确可见。
US-A3 选择命令工作目录
关联:FR-3。
Given 当前请求为本机 Execute,When 模型传入绝对路径或相对工作区路径,Then 命令在
解析后的目录执行,包括工作区外目录和符号链接目标,And 后续省略 cwd 时仍使用原工作区。
When 目标不是目录或不存在,Then 命令不启动并返回准确错误。
US-A4 根据非零退出继续修正
关联:FR-2、FR-9。
Given 测试命令退出码非零,When 进程结束,Then 工具正常返回退出码和 stderr,而不是终止 整个模型请求,And 模型可以读取失败原因、修改代码并再次运行。
US-A5 取消长命令
关联:FR-7。
Given 命令仍在运行,When 用户取消父请求,Then 当前 Shell 及其由本次命令创建的子进程树 停止,And 活动状态显示“已取消”,And 其他用户进程不受影响。
US-A6 看懂截断结果
关联:FR-7、FR-9。
Given 命令输出超过上限,When 工具返回结果,Then 保留有用的开头和结尾并明确
truncated: true,And 模型与用户都不会把结果理解为完整日志。
US-A7 从瞬时模型网络故障恢复
关联:FR-7、FR-9、FR-11。
Given 直连模型在 TLS 建连、网络传输或单次请求超时时失败且尚未显示输出,When 请求仍未 取消,Then GoodBuddy 显示当前重试次数并使用递增等待时间最多重试 3 次,And 成功后继续 原问答或工具轮次。Given 已经显示文本或推理内容,Then 不自动重放该调用。
3. Epic B:编程闭环
US-B1 修改后运行验证
关联:FR-2、FR-4。
Given 用户选择 Execute 并要求修复代码,When 直连模型修改文件,Then 它可以运行聚焦测试 或检查命令,并根据真实结果继续修改,直到给出完成或阻塞结论。
US-B2 使用本机工具环境
关联:FR-8、FR-10。
Given 用户选择了 GoodBuddy 托管或自定义 Node/Python,When 新命令调用 node、npm、
npx、python 或 pip,Then 它们解析到当前工具环境,And 不修改系统 PATH 或已有终端。
US-B3 依赖或命令不存在
关联:FR-2、FR-9。
Given 项目缺少所需命令或依赖,When Shell 返回错误,Then 工具保留退出码和错误文本, And 模型说明缺失项或在 Execute 中采取用户要求的安装步骤,不把环境缺失报告为模型故障。
4. Epic C:Subagent 委派
US-C1 委派聚焦编程任务
关联:FR-5、FR-6。
Given 父直连模型正在处理复杂请求,When 它调用 subagent_delegate 并给出独立任务,
Then 子级使用同一项目、模型连接和 Execute 能力完成工作,And 最终结果返回父模型综合。
US-C2 Ask 中只读委派
关联:FR-4、FR-5。
Given 父请求为 Ask,When 模型委派分析任务,Then 子级保持 Ask,不能写文件或运行命令, And 不因 Subagent 存在而扩大权限。
US-C3 禁止递归委派
关联:FR-5、FR-7。
Given 子级正在执行,When 它读取自己的工具清单,Then 清单中没有
subagent_delegate,And 子级不能创建孙级任务。
US-C4 子级失败后父级继续
关联:FR-5、FR-9。
Given 子级运行期间失败或超时,When 子任务结算,Then 父模型收到失败状态、部分输出和 有界错误,And 可以自行继续、改变方案或向用户说明阻塞。
US-C5 取消传播
关联:FR-7。
Given 一个 Subagent 正在运行模型或命令,When 用户取消父请求,Then 排队和运行中的子级 全部取消,当前命令进程树停止,And 不再向父请求追加迟到结果。
US-C6 保持产品对象简单
关联:FR-6。
Given 直连模型完成一次委派,When 用户查看会话、Task Center 和活动,Then 会话内可看到 Subagent 状态与结果摘要,And Task Center 不出现新的子 Task,And UI 不展示 Job/Run 树。
5. Epic D:Runtime 与执行空间边界
US-D1 Agent Runtime 不重复获得工具
关联:FR-1、FR-10。
Given 用户选择 OpenCode、Continue 或 DeepSeek Harness,When Runtime 启动,Then
GoodBuddy 不注入 process_execute 或 subagent_delegate,And Runtime 原生能力保持不变。
US-D2 切换 Runtime 后工具清单更新
关联:FR-1。
Given 会话从直连模型切换为 Agent Runtime,When 下一次请求开始,Then 新请求只使用目标 Runtime 的能力;切回直连模型时重新获得符合工作模式的直连工具。
US-D3 不在错误设备执行
关联:FR-3。
Given 当前执行空间是 SSH 且远端进程后端尚不可用,When 解析工具清单,Then 不注册
process_execute;即使调用参数有效,也不能回退到桌面本机执行。
US-D4 消息通道使用相同规则
关联:FR-1、FR-4。
Given 消息通道项目选择直连模型,When 合法消息触发 Ask 或 Execute,Then 使用与桌面会话 相同的工具矩阵和通道既有工具策略,不维护第二套 Shell 能力配置。