Skip to main content
J

dsh-question-timeout-protection

julardepick/dsh-question-timeout-protection

A plugin for dsh: once ask_user_question times out, the content you entered will remain in the UI or model context.

Install

dsh plugin --profile web add github:julardepick/dsh-question-timeout-protection

README

dsh-question-timeout-protection

Version Copyright License

English | [简体中文]

一旦 ask_user_question 超时, 您输入的内容将保留在 UI 或模型上下文中。

功能

  • 超时可见: 提问卡片显示剩余等待时间,并随剩余时间递减
  • 临近超时警示: 剩余时间进入警示秒数(默认 5 秒)时红字闪烁
  • 超时兜底: 超时后不保留等待中的问答框,已输入的草稿按兜底范围处理
  • 上下文注入: 兜底范围包含上下文时,超时后把已选选项与输入内容经宿主官方通道 userQuestions.answer 送进对话(它会把回复 steer 成一条用户消息),由模型自行决定是否重新提问或暂时跳过
  • 上下文展示交给原版: 注入内容不做任何自定义渲染,对话历史里由原版工具返回值自己展示,气泡展开行为保持宿主原样
  • 卡片适配: 倒计时文案改为「x秒后超时」,「慢慢回答」按钮更名为「无限等待」,并隐藏问答卡片的收起/展开开关
  • 选中高亮: 单选题选中后, 选项前的标号方块改用多选题复选框的实心底色
  • 状态同步: 点击「无限等待」后客户端把状态上报给服务端,服务端改为继续阻塞等待
  • 兜底范围可选: 仅收起问答框并保留草稿到界面、把草稿送进上下文、或不注入

机制

  • 宿主默认使用阻塞式提问,提问不会超时;本插件在 agent 作用域注册同名的 ask_user_question,以就近遮蔽接管提问等待,不需要改动你的预设
  • 超时由插件自己计时: 宿主卡片在客户端接管或开始编辑回答时会暂停自己的定时器,插件用同一时长再赛跑一次,保证到期一定返回 pending 并进入兜底流程
  • 工具走宿主的 timed 等待: 卡片倒计时、聚焦或编辑时冻结倒计时、超时后问题转为可继续回答,均由宿主界面提供
  • 客户端适配器读取卡片倒计时文本,在最后数秒附加红字闪烁;超时后按兜底范围收起问答框(ui)或把已选选项与输入内容经 userQuestions.answer 送回模型(context 与 both)

兼容性

  • dsh: 0.2.1-rc.2
  • 运行时: Node.js >= 20

安装

尚未发布到 npm;可从本仓库构建后以包目录或 tarball 安装:

pnpm pack
dsh plugin --profile <profile> add release/dsh-question-timeout-protection-<版本>.tgz

pnpm pack 会先构建,打包完成后 tarball 自动移入 release/ 目录。

配置

配置页位于插件详情页顶部的插件级配置区块,不在「包含的组件」里;其中只有「注入到上下文」一个勾选可以调整,其余能力随插件启用状态固定生效,列表中只做说明。

配置项取值默认值界面说明
fallbackui / context / bothui可改一项超时兜底;界面只给「注入到上下文」勾选,勾上写 both,不勾写 ui。界面保留草稿恒定开启,所以不会再出现 context
cardEnhancements布尔true固定特性卡片增强: 倒计时文案、隐藏收起/展开、超时锁定与历史只读标记
infiniteWait布尔true固定特性提供「无限等待」按钮与点击后的阻塞行为
draftFallback布尔true固定特性超时后保存草稿并按兜底范围处理
warningSeconds数字5不暴露进入红字闪烁警示的剩余秒数
timeoutSeconds数字120不暴露提问等待时长(秒),由模型调用工具时的 timeout 参数决定;此处只是未传参时的默认值

界面保留草稿是必选行为: 超时后草稿总留在该提问的本地草稿里,可在工具调用行点开查看。勾上「注入到上下文」后,超时后已输入的内容会作为一条消息送回模型,由模型自行决定是否重新提问或暂时跳过相关问答。

开发

pnpm install
pnpm build
pnpm typecheck

许可证

本项目采用 Apache License 2.0 授权,版权声明见 COPYRIGHT。

Copyright (c) 2026 JularDepick

相关链接

Related plugins