packages/dsh-task-board
zhu1090093659/dsh-web侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
输入框右侧加一个「优化」按钮:把一句话的口语需求改写成结构化产品简报——一句话定位、3–6 条核心功能、视觉参考、设计规范(配色/尺寸等令牌),左右并排对照原文,可接受回填输入框、重新生成一版,或取消保持原文;不占布局、没有设置页,直接调用你已配置的模型渠道。
dsh-prompt-brief
点一下按钮 → 弹出「原文 / 优化结果」左右对比 → 接受(回填输入框)/ 重新生成 / 取消。
独立实现:按钮、对比弹窗、改写规则与示例提示词都在本仓库内从零编写,只使用 DSH 公开的插件契约(dsh.bundle.patch、dsh.client、exports["./typert"]、Typert Remote 描述符、ctx.llm),不包含任何第三方产品的代码或私有接口。产品形态上「一键把需求写清楚」是通用交互范式,本项目的取舍与输出结构见下文「设计思路」。
输入(口语):
我想买一个东西,这个东西在京东、拼多多等商城都有卖,但我不知道这会儿是不是历史最低价格,我希望有一种工具,在历史低价或者价格在某个区间时就主动提醒我去购买
点「优化」后得到(结构化,可直接发送):
一个多平台商品价格监控工具,帮助用户自动追踪京东、拼多多等商城商品价格,在达到历史低价或预设区间时主动推送购买提醒
核心功能:
- 商品添加:用户粘贴京东、拼多多等平台的商品链接,设置期望价格区间或勾选历史低价触发规则,完成监控任务创建。
- 价格自动追踪:工具定时拉取已监控商品的实时价格,自动对比历史价格数据判断是否达成触发条件,留存全周期价格波动曲线。
- 降价提醒推送:当商品价格命中用户预设的区间阈值或刷新历史最低价时,通过浏览器弹窗 + 站内消息主动向用户推送购买提醒通知。
- 价格趋势查看:用户可点击已监控商品卡片,查看该商品最长 90 天的历史价格走势图表,直观判断当前价格的性价比。
视觉参考: 什么值得买的商品优惠信息展示逻辑,小米商城的简洁卡片式布局,Chrome 插件类工具的轻量化操作交互风格。
设计规范:
- 配色:主色 #FF6700(京东品牌关联橙,用于确认按钮、核心提醒标识),辅助色 #E02020(拼多多品牌关联红,用于降价提醒高亮),背景 #F5F7FA,文字 #333333,强调 #52C41A(绿色用于标注历史最低价格状态)
- 风格:轻量化卡片式流式布局,卡片圆角 12px,元素间距 16px,信息层级清晰无冗余,响应式适配桌面端与移动端
输出结构固定为:一句话定位 → 核心功能(3–6 条) → 视觉参考(用户提到时) → 设计规范(用户提到或明显必要时)。
示例里的品牌、配色、圆角都来自用户原话——插件不内置任何品牌预设,也不会把示例内容套到无关需求上。
按钮挂在 conversation.input.right 槽位,位于发送按钮左侧,和 dsh-better-input 的 ✨ 图标是两套独立按钮,可以共存。
插件是纯 JS 包,无构建、无运行时依赖(react / react-dom 由 DSH 基座提供),安装 = 放进 profile 的 node_modules 并让 profile 加载它。
node_modules:# 例:desktop profile
$profile = "$env:USERPROFILE\.dsh\profiles\desktop"
Copy-Item -Recurse -Force .\* "$profile\node_modules\dsh-prompt-brief"$profile\package.json 的 dsh.profile.bundles 末尾加一行 "dsh-prompt-brief":"dsh": { "profile": { "bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"…其他插件…",
"dsh-prompt-brief"
] } }包内自带的 cordis.patch.yml 会把插件作为一个 root entry 插入,无需手改别处。
dsh web),刷新页面。把包复制进 node_modules\dsh-prompt-brief,然后在 $profile\cordis.patch.yml 末尾追加:
- insert:
- id: dsh-prompt-brief
name: dsh-prompt-brief重启后生效。本机 desktop profile 目前用的就是这种方式。
注意:两种方式只选其一。同时存在会重复插入同一个 entry。
dsh-better-input 的 ✨ 图标是两套独立按钮)。Ctrl+Enter。Esc,或点遮罩空白处。在 profile 的 cordis.patch.yml 里给 dsh-prompt-brief 加 config: 即可覆盖:
- id: dsh-prompt-brief
name: dsh-prompt-brief
config:
provider: deepseek-account # 留空 = 用当前 profile 的默认模型
model: deepseek-flash
reasoningEffort: off # 改写任务不需要长思考;留空自动判断
timeoutMs: 90000
maxInputChars: 12000
extraInstructions: "" # 追加到系统提示词末尾的自定义要求默认行为:不填 provider/model 时依次尝试 profile 的默认模型(agent-default-model)→ 第一个可用 provider 的首个模型。
dsh.profile.bundles 删掉 "dsh-prompt-brief",或删掉 cordis.patch.yml 里那条 insert。$profile\node_modules\dsh-prompt-brief。Host 半侧(lib/index.js、lib/typert.js)是进程启动时加载的,改完必须:
$profile/node_modules/dsh-prompt-brief/lib/)——Desktop 的 profile 里是一份真实拷贝,不是软链;浏览器半侧(lib/client.js)由 Web 服务按 rev 现取,刷新页面即可看到按钮外观变化,但同样建议整机重启一次,避免新旧代码混用。
PromptForgeService 没有声明 static inject = ['llm'],或方法里在「被 Gateway 重新 extend 过的 Context」上直接取 this.ctx.llm。本插件已用两重保护:类上声明 static inject = ['llm'],并在构造期用 ctx.inject(['llm'], …) 把 llm 引用抓到实例上(requireLlm()),方法内不再依赖 this.ctx 的提供者链。llm 服务(缺 @deepseek-ai/dsh-llm 或尚未登录账号)。config 里显式填 provider 与 model。package.json 的 dsh.client.inject 三个包名正确、lib/client.js 存在且是 window.__ModuleLoader__.load(...) 形态,然后刷新页面(必要时重启)。文件 · 作用 lib/index.js · Host 半侧:export const name、可选 Config、apply(ctx);注册 Typert Remote Service PromptForgeService(namespace promptForge),用 ctx.llm 调当前模型流式生成。 lib/typert.js · Host face manifest:{ package, face: 'host', schemas, model, invocations },被 @deepseek-ai/dsh-typert-loader 通过 exports["./typert"] 自动发现并注册,Gateway 据此做参数边界校验与派发。 lib/client.js · 浏览器 bundle:window.__ModuleLoader__.load({ id, factory }) 形式,向 conversation.input.right 槽位注册按钮,弹窗用 createPortal 挂到 document.body。 cordis.patch.yml · 包自身的 loader patch:把插件插成 root entry。 docs/images/ · README 用的示意图(由 scripts 之外的本地脚本绘制,不参与运行时)。
调用链:按钮 → remote.promptForge.optimize(text, context, signal)(客户端 Typert 描述符)→ Gateway 校验 → PromptForgeService.optimize() → ctx.llm.prepareCall() + prepared.stream() → 文本返回弹窗。
lib/*.js 就是最终产物,不依赖 tsdown/esbuild/网络,改动直接生效。dsh.bundle.patch、dsh.client、exports["./typert"]、Typert Remote 描述符)。见 CHANGELOG.md。
每个版本都会把预构建的 dsh-prompt-brief-.tgz 附在 GitHub Release 上,也可以直接指向仓库:
# Release 上的预构建包
dsh plugin --profile desktop add https://github.com/ly14278/dsh-prompt-brief/releases/download/v0.1.0/dsh-prompt-brief-0.1.0.tgz
# 或者直接从仓库装(走源码,无需构建步骤)
dsh plugin --profile desktop add github:ly14278/dsh-prompt-brief包已经按 npm 包习惯准备好(files 白名单只发 lib/、cordis.patch.yml、README.md、LICENSE):
cd packages/dsh-prompt-brief
npm login
npm publish --access public发布后,别人装插件只需要一条命令:
dsh plugin --profile desktop add dsh-prompt-brief(dsh plugin 会把 pnpm 追加参数转发到 profile,等价于在 profile 目录里 pnpm add dsh-prompt-brief。)
插件市场的条目格式见 docs/awesome-dsh-plugin-entry.yml,提交目标是 awesome-dsh-plugin 的 data/plugins/ly14278__dsh-prompt-brief.yml。 市场收录后,在 DSH 的「插件 → 发现」里能直接搜到并一键安装。
MIT © 2026 ly14278,见 LICENSE。