dsh-ask-autopilot
Verifieddsh-ask-autopilot · v0.1.0 · MIT · Web UI
Auto-answers an unanswered ask_user_question after a configurable deadline (recommended option first) and plays a notification sound when a question appears.
Install
dsh plugin add dsh-ask-autopilot Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
dsh-ask-autopilot
English | 中文
AI 提问后如果没人回答,插件替你作答,让回合继续推进,而不是卡在等人。等多久由可配置的时限决定,答什么由推荐方案决定。每次提问还会播放提示音,提示音可以换成你自己的音频文件。
做什么
- 自动作答。
ask_user_question等待超过设定时间后,插件替用户作答,回合继续。优先选推荐项:标签以(Recommended)或(推荐)结尾的选项;没有这样的选项就选第一个。没有给出选项的问题,用你写的自定义句子作答,默认是「按你的最佳判断继续(用户超时未回复)」。 - 有人正在看的问题不抢答。 光标停在问题上,或已经开始输入,都会重新计时,所以时限不会在用户正操作时触发。
- 计划审批默认留给人。 批准计划会直接放行后续实现,因此插件默认不自动作答
plan-review问题,除非你关掉这层保护。 - 提示音。 每个新出现的提问播放一次。预设音由浏览器合成,不需要文件;也可以换成宿主读取的本地音频文件,或浏览器直接播放的网址。
- 设置页。 设置里的「提问自动驾驶」可以改等待时间、选择策略、自定义回答和提示音,并带试听按钮。保存立即生效,不需要重新加载。
两个时限,一套策略
浏览器半身通过问题卡片结算时限,因为只有走卡片自己的回答通道,卡片才会从输入框位置撤下。宿主半身另外保留一个更晚的时限——设定时间再加一分钟——应对浏览器被关闭、断开或后台限流的情况。两边的选择来自 index.js 里的同一套策略;浏览器半身把待答问题提交给宿主路由,而不是重复实现选择规则。
宿主时限还会把 tool-ask-user 自带计时等待的到期转换成自动作答,因此两者是叠加关系而不是互相竞争。
设置项
在设置页修改,或直接写进 profile 补丁:
| 字段 | 默认值 | 含义 |
|---|---|---|
enabled |
true |
自动作答总开关。 |
timeoutMinutes |
5 |
等待时限,单位分钟,0.1 到 1440。 |
strategy |
recommended |
recommended、first 或 skip。 |
optionless |
custom |
没有选项的问题怎么处理:填自定义文本或跳过。 |
customText |
按你的最佳判断继续(用户超时未回复) |
自定义回答。 |
skipPlanReview |
true |
计划审批留给人。 |
sound.enabled |
true |
每个提问播放提示音。 |
sound.source |
preset |
preset、file 或 url。 |
sound.preset |
chime |
chime、ding、marimba、alert、soft 或 none。 |
sound.file |
无 | 本地音频路径:mp3、wav、m4a、ogg 或 flac,由宿主读取。 |
sound.url |
无 | 浏览器直接播放的音频网址。 |
sound.volume |
0.6 |
音量,0 到 1。 |
限制
- 作答需要问题卡片。 时限通过卡片结算,所以面板从未渲染过的会话只能靠宿主时限兜底。
- 每个问题只答一次。 已经进入
continued的问题不会被再次作答;用户先提交的回答永远优先。 - 提示音需要一次交互。 浏览器在页面被点击或输入之前会挂起音频;之后插件会保持音频图就绪。
- 本地文件对所有访问宿主的页面可读。 路由只读取配置的那一个路径,从不列目录。
- 路由只监听回环地址。 宿主把 Web 服务绑定在
127.0.0.1,因此这些路由只有本机进程能访问;它们不接受配置写入,也不代表用户作出授权。
安装
把 bundle 加进 profile。插件管理器会从 registry 安装:
plugin_manager action=install_bundle target=dsh-ask-autopilot
也可以从本地目录安装:把 target 指向该目录即可。两个半身都是纯 ESM,不需要构建。
设置保存在 profile 补丁(~/.dsh/profiles/<profile>/cordis.patch.yml)的 ask-autopilot 行里。字段都是 volatile:保存就地提交,并经由时限所用的同一个读取函数重新读取,因此不会重启插件。
开发
用普通 Node 运行本包的测试,不需要构建:
npm test
如果 profile 链接的是本目录而不是从 registry 安装,会遇到 @deepseek-ai/schemastery 的 ERR_MODULE_NOT_FOUND:pnpm 不会为链接进来的包安装依赖,而宿主按真实路径导入本插件。需要建立一次指向 profile 那一份的联接:
mkdir -p node_modules/@deepseek-ai
ln -s ~/.dsh/profiles/<profile>/node_modules/@deepseek-ai/schemastery node_modules/@deepseek-ai/schemastery
Windows 上请建立目录联接(cmd /c mklink /J <链接> <目标>)。从 registry 安装不需要这一步,因为 @deepseek-ai/schemastery 是普通依赖。