DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Task Assist — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
T

dsh-task-assist

Task Assist

DSH 任务辅助启动器:在对话框发送键旁放置一个常驻按钮,点击后自动扫描本会话已安装的、对当前任务有帮助的技能与 MCP 工具,弹候选清单(默认勾选匹配项),一键确认后把选中技能注入当前对话交给 Agent 自动执行。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:TheFold060629/dsh-task-assist#44a66394e437c879c47feddb06d8e537218407bb
README兼容性版本

兼容性与来源证明

Task Assist 以 dsh-task-assist 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/9

版本

0.1.0stable
2026/10/9

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 1
周下载
0
最近提交
2026/10/9
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 agents-orchestration 分类下经过校验的插件。

Headless@deepseek-ai/dsh-headlessdsh one-shot bundle:基于 dsh-base 的直接核心 Agent/Session 运行器,不包含 Host、HTTP 或浏览器层Experimental Agent Team Profile@deepseek-ai/dsh-experimental-agent-team-profile在一个实验性捆绑包中提供 Agent Teams 协作、工具和 Web UIExperimental Ralph Bundle@deepseek-ai/dsh-experimental-ralph-bundle使用全新代理执行明确请求的重复工作。Hindsight Coding Agents@vectorize-io/hindsight-coding-agents面向编程代理的仅反思式 Hindsight 长期记忆(可插拔支持多种运行框架:opencode、……),自动在后台导入(无需设置 CLI)。

README

dsh-task-assist

DSH(DeepSeek Harness)任务辅助启动器插件。在对话框输入卡 发送键左侧 放一个常驻「辅助」按钮:点击后自动扫描本会话已安装的、对当前任务有帮助的 技能(skills) 与 MCP 工具,弹出候选清单(命中关键词的技能默认勾选),确认后把选中技能作为指令注入当前对话,由正在运行的 Agent 自动加载并按其方法论执行。

功能

  • 发送键旁常驻按钮:挂在官方 conversation.input.right 槽位(发送/停止键左侧的输入卡工具栏右侧)。
  • 自动扫描匹配:读取输入框当前草稿作为「任务描述」,向后端 api/task-assist/scan 发起扫描,对已装技能做关键词打分排序。
  • 候选面板:列出技能(可勾选,命中即默认勾选)与 MCP 工具(陈列),支持取消/确认。
  • 一键注入执行:确认后把勾选技能 POST 到 api/task-assist/inject,作为 steering 输入进入当前会话,Agent 下一步自动接手执行。

安装

把它加进目标 profile 的 dsh.profile.bundles,然后重启桌面端:

dsh plugin --profile <profile-name> add dsh-task-assist

仓库源码安装(link:):dsh plugin --profile <name> add link:<本目录>。 注意 link: 在本机 profile 里会留成软链,适合开发;正式安装请用包名。

⚠️ 不要另外在 profile 的 cordis.patch.yml 里手写 - insert: [dsh-task-assist]。 本插件自带的 dsh.bundle.patch(即包内的 cordis.patch.yml)已经会 insert 这一行; 再写一次会让同一个 entry id 在补丁栈里出现两次,触发 duplicate entry id … (loader-level boot failure),桌面端直接起不来。

改完 host 端一定要完全退出再重启(托盘 → 退出,或任务管理器结束所有 DeepSeek Harness.exe)。只刷新页面不够,原因见下方「开发须知」第 4 条。

环境要求

  • dsh >= 0.2.0-rc.2(见 package.json 的 dsh.engines.dsh)
  • 客户端槽位依赖 conversation.input.right,该槽由 @deepseek-ai/dsh-client-ui-conversation 声明

开发

pnpm install        # 安装构建依赖
pnpm build          # tsc 类型检查 + tsdown 产出 lib/index.js 与 lib/client.js

产物:

  • lib/index.js — host 端:路由 api/task-assist/scan、api/task-assist/inject、技能/MCP 枚举与打分。
  • lib/client.js — 浏览器端:conversation.input.right 槽位组件 + 候选面板。

开发须知(踩过的坑)

写 DSH 插件有几条不吃亏的硬约束,本插件每一条都真栽过,记在这里省得再试:

  1. 绝不写 export default apply。 插件半体按 mod.default ?? mod 解析。一旦有 default 导出,拿到的就是那个裸 apply 函数, 它没有声明点,inject 声明读不到 → 客户端 runner 会拒绝直接访问服务 (ctx.slots 直接抛异常而不是返回 undefined)。 官方插件(dsh-client-ui-model-selection、dsh-host-open-in-app 等)export default 数量实测为 0。 本项目 host 端结尾是 export { Config, apply, inject, name },client 端同理。 函数式插件可再补一句 (apply as any).inject = inject 兜底。

  2. slots.inject 注「槽自身」,不注父槽。 认领 conversation.input.right 要写 slots.inject('conversation.input.right', …), 而不是 slots.inject('conversation.composer.bar', …)。理由见下方「说明」中的同名条目。 注错槽会让桌面端整体起不来。

  3. 标准 hook 是 SnapshotSelectorHook,选择器必填。 useInput / useSession 内部走 useSyncExternalStoreWithSelector(w.subscribe, w.getSnapshot, void 0, sel, eq), 而 store 会调用 sel(snapshot)。所以 useInput() 不带参数会抛 TypeError: l is not a function(压缩后变量名)。 内核自己也一律用恒等选择器:useInput((s) => s)、useSession((s) => s)、useStore((s) => s.draft)。 真 InputState 形状(内核 compose() 产出): { draft, attachmentIds, draftRev, phase, claim?, occurrences, queue }。

  4. 改完 host 端必须重启整个进程,HMR 不够。 dsh-client-hmr 只热换客户端半体;Node 侧 host 半体只在进程启动时读一次产物。 这会造出「新客户端 + 旧 host」的混合版本态,看起来完全像插件 bug(症状:按钮出现但接口 404)。 核对方法:比对 ~/.dsh/dsh-boot-state.json 里的 bootedAt 与 lib/ 产物的 mtime。

  5. apply() 全身套 try/catch。 客户端 fiber 一旦 FAILED,前端 boot 会整体 throw(web boot: 1 entry did not activate), 整个桌面端卡在 "Failed to load plugins"。失败只 console.error 并降级成「按钮不出现」。 宿主侧同理(startup failed: N required plugins did not activate)。

排障通道:客户端 diag(stage, detail) → POST api/task-assist/diag → 宿主追加写 ~/.dsh/rescue/task-assist-client.log(用 diagOnce() 去重,避免刷屏)。

工作原理

用户输入任务 → 点【辅助】→ client 读 useInput().draft
  → GET  api/task-assist/scan?task=..&session=..
  → host 扫描技能根目录(~/.agents/skills、~/.dsh/skills、项目 .dsh/.agents/skills)
     + 枚举已连 MCP server 工具,对 task 关键词打分排序
  → 面板展示候选(命中默认勾选)
  → 用户点【启动辅助】→ POST api/task-assist/inject {selected, session}
  → host 组装注入指令 → ctx.agents.get(sessionId).steer(message) 提交 steering 输入
  → 运行中的 Agent 在下一步拾取并按所选技能执行

说明

  • 扫描是只读的:只枚举技能元信息(name/description)与 MCP 工具名,不执行任何技能、不调用任何业务工具。
  • 注入是提示级指令(作为 steering 输入进入会话),不是直接代跑技能;是否真的加载/执行由 Agent 按上下文判断。
  • 注入经 ctx.agents 的 steer() 提交,消息 source 固定为 plugin:dsh-task-assist。 V4 会话格式要求 producer-owned source kind —— 写成旧的 { kind: 'plugin', plugin: … } 会让整轮对话被拒,而不是只让注入失败。
  • 客户端槽位认领是 slots.inject('conversation.input.right', …) —— 注「槽自身」, 不要注父槽 conversation.composer.bar。 slots.inject(key, cb) 订阅的是 key 自己的声明 epoch,那才是它变得可注册的时刻; 而 conversation.input.right 与父槽 conversation.composer.bar 在注册序列里差了 4 步, 注父槽会在子槽尚未声明时触发回调,抛 slot "conversation.input.right" is not declared (a parent entry's children table must declare it), 并使客户端 fiber FAILED → 整个 web boot 抛 1 entry did not activate,桌面端起不来。
  • 两侧 apply() 全身套 try/catch:客户端 fiber 一旦 FAILED,前端 boot 会整体 throw, 失败只 console.error 并降级成「按钮不出现」,绝不拖死宿主。
  • 技能来源分级:user-agents / user-dsh / project-dsh / project-agents / bundled / other,同分时按此优先级展示。
  • 请求围栏只拒绝明确跨站的请求:桌面端 Electron 渲染层的 Origin 是 dsh-app://app, 与 Host(127.0.0.1:<port>)永不相等,严格 origin === host 会把桌面端请求全部 403。

License

MIT