dsh-task-clarifier · 任务澄清器
一句话进,一份精准任务书出。左侧栏「任务澄清」入口 + 中央双栏工作台:先用一句话 描述需求,再回答几个自适应问题,右侧实时组装出可直接发送的任务书。 澄清全程在浏览器本地完成,0 次模型调用、0 token。
- 版本:0.1.0 · 许可:MIT · 形态:DSH 本地 bundle(纯 JavaScript,无构建、无第三方依赖)
- 包名 / patch 行 id:
dsh-task-clarifier/task-clarifier - 数据:只写入本机浏览器
localStorage,不上传
简介
给 DSH 发一句「帮我做个插件」这类模糊指令,通常要来回追问好几轮:目标是什么、给谁用、 范围多大、怎么算完成。每一轮追问都要花 token,猜错还要返工。
任务澄清器把澄清前移到发送之前:用一条短问答流程补齐关键信息,把模糊的一句话变成一份 结构化任务书,再交给对话执行。它不试图让模型更聪明,而是让第一次发出的指令就足够完整。
- 一句话 → 几个关键问题 → 一份任务书
- 任务书可直接复制,或点「开始执行」填入新对话的输入框(不会自动发送);澄清只做结构化 整理,不做语义理解(见「已知限制」)
为什么省 token
- 澄清不经过模型:意图分类、事实抽取、问题选择、任务书生成、token 估算全部是浏览器 里的确定性规则(正则 + 权重 + 固定问题库),没有任何 Host 请求或模型调用;页面右侧 指标区会显示「本页澄清 0 token」。
- 已经说过的不再问:从原句自动识别路径、URL、技术栈、篇幅、读者、风格、禁止项、 「当前目录」等,命中的维度直接写进任务书并跳过对应问题。
- 任务书自带执行约定:例如「信息不足时按最合理的默认直接执行,不要反问」「先给结果, 再给必要说明」「不要复述本任务书」,减少后续追问;该约定可在右侧切换。
- 两种长度按需选:标准版结构清晰,极简版更短更省;界面实时给出 token 与字数估算。
- 历史本地复用:完成过的任务自动留在本机,可查看或重新澄清,不用重问。
省下的是「澄清这一轮」的 token。真正执行任务的那次对话仍然正常消耗 token,任务书本身 也会作为输入的一部分——只是它比模糊指令更值得花。
入口与界面
- 左侧栏:与「插件」「定时任务」等内置页面同一列的全局面板入口,标签为任务澄清,
order: 40。点击切到澄清工作台,再点对话即切回。 - 页面:标题「任务澄清器」;右上角是澄清深度切换(快速 / 标准 / 深度,悬停显示说明) 和「新任务」按钮。左侧约 58% 是输入 / 问答流,右侧约 42% 是任务书预览与操作区; 窄屏时自动改为上下堆叠(容器宽度断点,不依赖窗口尺寸)。
- 起始页:一句话输入框、「开始澄清」「跳过提问,直接整理」、5 条示例、最近任务列表、 隐私脚注。
- 问答页:进度条 +「直接生成任务书」;「已自动识别」chip 条;已答问题卡片(可「修改」); 当前问题卡(选项 / 文本框、跳过、上一个、下一步)或确认卡;完成后是完成卡。
- 预览区:标准 / 极简切换、任务书实时渲染、信息不足时设置、指标行(≈tokens、字数、 本页澄清 0 token、信息完整度、预计少问轮数),以及「复制任务书」「开始执行」。
- 崩溃边界:渲染异常时显示「任务澄清器出错了」、错误详情与「重试」(刷新页面),已保存 的进度仍在本机。
使用流程
- 起始页用一句话描述任务。
Enter开始澄清,Shift+Enter换行;也可点示例填入,或点 「跳过提问,直接整理」只生成任务书。 - 插件分析这句话:识别语言、意图、领域,以及句中已有的事实。已识别内容以 chip 显示在 问答页顶部,对应提问自动跳过。
- 逐题回答。可选预设选项(编号键
1–9或点击),有文本框的题目可以自己写;不确定就点 「跳过,你决定」,它会在任务书里留空而不是编造。已答问题可「修改」,也可「上一个」回退。 - 最后是确认卡「确认一下,我理解得对吗?」:逐行复述当前理解,有偏差可在输入框补充或 纠正(会写进任务书),点「对,生成任务书」完成,或「需要补充」聚焦输入。
- 右侧任务书随回答实时组装;可随时切换标准 / 极简与信息不足时的处理方式。
- 点「复制任务书」拿到 Markdown;或点「开始执行」,插件把任务书填入新对话的 composer 草稿并切到对话页,提示「已打开新对话并填入任务书,按 Enter 发送」——发送仍由你确认。
- 完成后是完成卡:若还有没问完的问题,会同时给出「继续回答(还剩 N 题)」和「继续补充」 (加一句备注,直接写进任务书)两个入口;「重新开始」换一句话。再次完成的同一任务会更新 历史里对应的一条记录。
环境缺少工作区 / 布局服务时,「开始执行」退化为复制;输入框已有草稿会被替换。
澄清引擎与问题库
引擎是纯函数式、确定性的:同一句话永远得到同一组问题,不随机、不联网。
- 语言检测:按中文字符占比判断,比例 ≥ 0.22 视为中文,否则按英文处理。任务书语言 跟随原句语言;界面语言跟随 DSH 的 locale。
- 意图分类(10 类):
build开发实现、fix修复问题、analyze分析评估、research调研、explain解释说明、write写作、artifact制作成品、plan做方案、operate环境操作, 以及兜底的general完成任务。关键词按权重计分,强动词压过名词(如「修复插件报错」判为 fix 而非 build);低于阈值时落到 general。 - 领域识别:
code/data/document/design/research/ops/writing/learning,用于追加针对性执行约定(如代码类任务「只改相关文件,不做无关重构」)。 - 事实抽取:HTTP(S) URL、文件路径(带扩展名或含
/的路径)、17 类技术栈关键词、篇幅 (页 / 张 / 字 / 行 / 分钟等)、读者(「给/面向 …」等)、风格词、禁止项(「不要…」)、截止 时间、「当前目录」提示、参考/示例提示。路径、技术栈、篇幅、读者、风格、禁止项、URL 会 直接映射为任务书维度并跳过对应问题;当前意图会问的维度可点 chip 强制重开,其余已识别 信息以静态 chip 展示。否定子句不会当作正事实:「不要用 Python,改用 Node」只会把 Node 当作技术栈,同时把「不要用 Python」写进任务书的 avoid 行。 - 问题库:55 个实质问题 + 1 张确认卡。每个意图有 4–7 道专属问题,另加一道共享的 「最看重哪一点」(速度 / 质量 / 最小改动)。题型含单选、多选、纯文本、确认四类,部分问题 有出现条件:成品为 Excel 时不问页数,结构/模板问题只在 Word / PPT / PDF 时出现。
- 模式预算:每个模式的实质问题总上限是 3 / 5 / 8(含已回答的题)。已答问题永远保留 (切换深度不抹掉进度),超预算时不再新增;自动识别的维度不占预算、也不提问;点击 chip 重开的问题优先进入队列。每个模式最后都有一张确认卡,不计入上限;实际题数还受问题库大小 约束(例如「解释说明」只有 4 道专属问题 + 1 道共享题,不会凑满 8 题)。
| 模式 | 实质问题总上限(含已答) | 适合场景 | 说明 |
|---|---|---|---|
| 快速 | 3 | 目标已经比较清楚,想尽快出发 | 只问权重最高的 3 个关键问题 |
| 标准(默认) | 5 | 大多数任务 | 推荐;覆盖交付物、范围、验收与约束 |
| 深度 | 8 | 一次做对很重要、返工成本高 | 尽量问满该意图的专属问题 |
确认卡摘要由当前维度实时生成(「我理解你要:…」),只包含已有内容。任务书把回答、自动识别、 确认补充与备注合并成维度集合,空维度不输出。
标准与极简任务书
右侧预览同时给出两种长度,切换只改渲染,不改变内容。生成后仍是普通 Markdown。
标准版(默认)按固定章节输出,空章节自动省略:
# 任务
<你输入的那句话>
## 交付物
- 交付:…
## 验收标准
- 验收:…
## 执行约定
- 信息不足时按最合理的默认直接执行,不要反问。
- 回复先给结果,再给必要说明;不要复述本任务书。
极简版把同样信息压成一段以「任务:/ 交付:/ 范围:/ 约束:/ 验收:/ 背景:/ 约定:」 开头的紧凑文本,执行约定合并成一句,适合简单任务。
「信息不足时」三选一会改变任务书里的执行约定文本:
- 按默认做(默认):按最合理的默认直接执行,不反问——最省 token。
- 先列假设:先列出假设再执行,不反问。
- 问我:关键不确定点停下来问,会多一轮往返。
另有按意图/领域追加的约定:代码类任务只改相关文件、调研分析类不编造来源、成品类把结果 写入工作目录并给出文件名。指标行的数值都是启发式估算,不是计费数据:token/字数按 中文字符约 0.9 token、其他字符约 1/3.8 token 估算;信息完整度是交付物、范围、验收、约束等 十个维度的加权覆盖度;「预计少问 ≈ N 轮」按已补齐维度粗估,最多 5 轮。
快捷操作
| 位置 | 按键 / 操作 | 行为 |
|---|---|---|
| 起始输入框 | Enter |
开始澄清(输入法组合状态下不会误触发) |
| 起始输入框 | Shift+Enter |
换行 |
| 当前问题的选项 | 1–9 |
选中/取消第 n 项;多选题可连按。焦点在输入框内或带 ⌘/Ctrl/Alt 时忽略 |
| 问题 / 确认 / 补充文本框 | ⌘/Ctrl+Enter |
提交当前步骤 |
| 问答页顶部 | 「直接生成任务书」 | 跳过剩余问题,用已有答案生成(至少答过一题才可用) |
| 已答卡片 / 可点的识别 chip | 「修改」/ 点击 chip | 重新打开该问题;chip 表示覆盖自动识别结果(静态 chip 不可点) |
| 右侧「风格」 | 标准 / 极简 | 切换任务书长度 |
| 右侧 | 「复制任务书」 | 复制 Markdown;剪贴板不可用时降级并提示 |
| 右侧 | 「开始执行」 | 填入新对话草稿并切到对话,不自动发送 |
历史记录与本地存储
所有状态只写入当前浏览器(同一 origin)的 localStorage,没有 Host 路由、没有网络上传:
| 键 | 内容 |
|---|---|
dsh-task-clarifier.session.v1 |
当前任务进度:原句、阶段、模式、风格、答案、覆盖项、备注;刷新后自动恢复。 |
dsh-task-clarifier.history.v1 |
最近任务,最多 24 条,新的在前;每条含原句、标准/极简任务书、答案、模式、风格、假设策略、完整度与时间。 |
dsh-task-clarifier.settings.v1 |
上次使用的澄清深度、标准/极简、信息不足时策略。 |
历史区的操作:点击记录 = 查看任务书(恢复为完成态);↻ = 重新澄清(保留原句与设置,
清空答案重问);删除图标 = 删除单条;「清空历史」二次确认后清空全部。同一任务再次完成或
复制/开始执行时会更新原记录而不是新增;超过 24 条淘汰最旧。localStorage 被禁用或写满时
写入会静默失败,页面本身仍可用;清空站点数据、换浏览器或换配置文件后历史不会跟随。
安装·升级·卸载
本机已作为本地 bundle 装进 desktop profile:依赖声明为
link:/Users/sunchujun/Desktop/deepseek/dsh-task-clarifier,bundle 列表含 dsh-task-clarifier,
patch 行 id 为 task-clarifier。安装不需要构建、不需要 npm install。
安装(其他机器或重装,传绝对路径):
plugin_manager action=install_bundle target=/Users/sunchujun/Desktop/deepseek/dsh-task-clarifier
也可用 Web GUI 的「插件 → 添加插件」选择本地目录。安装后重启 DSH 并刷新页面,左侧栏出现
「任务澄清」入口。它依赖 DSH Web 客户端的插槽、布局、工作区、侧栏与语言服务
(dsh.client.inject 已声明),标准 DSH Web / Desktop 组合均具备。
升级:本地 link 安装直接读取此目录。修改源码后需重启 DSH 应用才会加载新的 client
模块代际——只刷新浏览器页面不够;改 package.json、cordis.patch.yml 或 locale 同样重启
后生效。通过插件管理器重装后再重启亦可。
卸载:
plugin_manager action=remove_bundle target=dsh-task-clarifier
然后重启 DSH。浏览器里的历史/设置属于站点数据,卸载插件不会删除;需要时在浏览器站点设置 里清除。卸载后目录本身可以保留,便于以后重新安装。
文件结构
| 文件 | 说明 |
|---|---|
client.js |
浏览器半(约 3200 行,无构建、无 JSX):语言/意图/领域/事实检测、问题库、计划与预算、任务书组装、统计、全部 UI、中英文字典、崩溃边界,以及 sidebar.panellist 行与 keyed main 页面注册。 |
index.js |
Host 半:空的 apply(),仅让 bundle 的 Loader 行生效并出现在插件清单里;不注册路由、不调用模型、没有网络代码。 |
package.json |
包元数据与出口:dsh.bundle.patch 指向 patch 文件;dsh.client 声明 web 平台、immediately 与 5 个客户端服务注入。 |
cordis.patch.yml |
bundle patch:插入 id: task-clarifier 的插件行(名字即包名)。 |
locale/zh.json |
插件管理器/插件列表里显示的中文标题与描述。 |
locale/en.json |
同上,英文。 |
icon.svg |
插件图标(渐变底、漏斗与勾);页面内的侧栏图标由 client.js 内联绘制,不依赖此文件。 |
tests/harness.mjs |
Node 加载 client.js 的桩环境:window.__ModuleLoader__、React 桩、localStorage、clipboard,并导出 module.__test。 |
tests/engine.test.mjs |
引擎与注册的 node:test 测试,共 20 例(作者自测)。 |
tests/review.test.mjs |
独立评审套件,46 例:真实 React + jsdom 挂载页面、DOM 级状态机、i18n/CSS/注册契约与回归缺陷。 |
tests/ssr-render.check.mjs |
可选渲染冒烟检查(29 项):用真实 React 服务端渲染页面各状态,抓渲染期异常与 key 泄漏。 |
tests/interaction.check.mjs |
可选端到端检查(45 项):jsdom 里真实点击走完整流程。 |
README.md |
本文档。 |
测试
主套件只用 Node 内置测试框架,没有第三方依赖:
cd /Users/sunchujun/Desktop/deepseek/dsh-task-clarifier
node --test tests/engine.test.mjs tests/review.test.mjs
预期结果:tests 66 / pass 66 / fail 0(约 1–2 秒)。
tests/engine.test.mjs(20 例):注册与中英文字典键集合一致;语言检测、意图分类、事实抽取 (含否定子句);自动识别维度跳过、模式预算(3/5/8)、降档后已答不丢;问题定义合法性; 标准/极简任务书结构、英文输入、fix 症状与期望保留、跳过问题仍可生成、备注追加;三种假设 策略改写执行约定;token/字数/完整度/轮数统计与确认卡摘要。tests/review.test.mjs(46 例,独立评审):真实 React + jsdom 挂载main页面,覆盖 DOM 级状态机(作答/跳过/回退/修改/确认/完成/历史/复制/交付对话草稿/缺服务降级/语言切换)、 渲染期不崩溃(含坏 localStorage)、i18n 键与占位符、CSS 作用域与主题 token、注册生命周期, 以及评审发现的缺陷回归用例。
两个可选的加强检查(需要本机 dsh-market 的 react / react-dom / jsdom,仅开发时用):
node tests/ssr-render.check.mjs # 29 项渲染冒烟
node tests/interaction.check.mjs # 45 项 DOM 端到端
tests/harness.mjs 用桩 React 在 Node 里加载真实的 client.js,通过模块暴露的 __test
句柄直接测纯函数;review.test.mjs 则复用真实 React 运行时。真正的浏览器视觉(深色主题、
窄屏布局、观感)仍无自动化(见下)。
已知限制
- 纯本地规则,不做语义理解:意图靠关键词权重,长句、口语、多意图混写可能落到
general或选错意图;开始澄清后原句不可编辑,需用「新任务 / 重新开始」换一种写法。否定识别也是 启发式的:「不要用 Python」「不要正式」这类简单否定会被排除并写进 avoid,多层否定或 「不要太正式但也别太随意」这类复杂表达可能识别不全,可在问题里补充说明。 - 问题集固定:55 个问题覆盖常见任务,但不能自定义问题或新增意图;扩展需改
client.js。 - 任务书语言跟随输入,界面语言跟随 DSH:中英混排且中文占比低于阈值时会生成英文任务书。
- 「开始执行」只填草稿,不自动发送:仍由用户按 Enter;且会替换输入框已有草稿。
- 不读文件:只识别文本里的路径/URL 并写进任务书,不会打开或读取对应文件;执行阶段由 DSH 自己读取。
- 数据只在本机当前浏览器:没有导入/导出、不跨设备同步;清站点数据即丢失;最多 24 条; 隐私模式或禁用 localStorage 时不会持久化。
- clipboard 依赖浏览器权限:复制失败会提示手动选中复制。
- 没有真实浏览器自动化测试:布局、深色、窄屏与观感靠人工验证;崩溃边界只兜底空白页, 「重试」等于刷新。
版本与许可
- 版本:0.1.0(
package.json中private: true,作为本地 bundle 使用,不发布 npm)。 - 许可:MIT。
- 无第三方运行时依赖、无遥测;除剪贴板与 DSH 客户端服务外不访问任何外部接口,澄清与 历史均不出浏览器。
No comments yet. Be the first to write one.