Skip to content

User Interaction zh

pawaca edited this page Aug 30, 2026 · 2 revisions

用户交互

上游用户提问和确认系统在 Edge 中的适配。

上游参考:用户交互

上游提供了什么

用户交互子系统(ctx.userQuestions)允许 agent 在工具或权限插件需要人类批准时暂停执行并请求输入。

  • 提问协议 — 结构化问题,带稳定 ID、可选多选、自由文本"其他"选项,以及展示意图(如 plan-review 用于计划审批)。
  • 提供者接缝 — 一个 context 中只能有一个活跃的 UserQuestionProvider。UI 注册提供者,宿主运行时转发问题给已连接的客户端。
  • 回答契约 — 响应携带所选选项标签和可选自定义文本,按问题 ID 索引。
  • 错误分类EMPTY_QUESTIONSNO_PROVIDERASK_ABORTEDCALLER_NOT_LIVE

此能力供审批系统、计划模式和任何需要人类确认的插件使用。

当前 Edge 状态

未实现

Edge 未安装 dsh-user-questions 包,也未注册 UserQuestionProvider。不存在用户提问流程——调用 ctx.userQuestions.ask() 的工具和插件会收到 NO_PROVIDER 错误。

edge-api.ts 中的 respond 处理器无条件返回 { accepted: false, reason: 'not-pending' }——永远没有待回答的问题。

userQuestions 也是 ApiProxyService 四个未满足 inject 依赖之一(还有 directoryPickersubagentssessionQuery),这是 Edge 手写 createEdgeApi() 而非安装上游插件的原因之一。

影响

  • 审批系统 — 无法在执行危险操作前请求用户批准。
  • 计划模式 — 无法向用户展示计划以供审批。
  • 工具确认 — 任何委托给用户提问的工具守卫会静默失败。

需要什么

dsh-user-questions 包(ctx.userQuestions)是纯能力接缝,无平台依赖。缺失的是一个提供者——基于 WebSocket 的实现,将问题转发给浏览器并收集响应。客户端问题 UI 已在 33 插件包中(dsh-client-ui-conversation 渲染问题节点)。服务端提供者需要:

  • 通过 mux WebSocket 广播 session/question
  • 等待客户端的 respond POST
  • 将结构化回答返回给调用插件

这遵循与投影推送和事件广播相同的传输桥模式。所有计划均可用。

架构总结

组件 分类 状态
UserQuestionService 缺失 包可用但未安装
WebSocket 问题提供者 缺失 需要 Edge 传输桥实现
客户端问题 UI 可用 已在客户端包中

TODO

(#107) **安装 dsh-user-questions 并实现基于 WebSocket 的提供者。**上游接缝无平台依赖。提供者模式与已有的投影推送桥一致:向 mux 广播,等待客户端响应,传递给调用者。也会解除审批系统、计划模式的阻塞,并是 ApiProxyService 四个依赖之一。

English

中文

Clone this wiki locally