deepseek-harness-desktop/packages/dsh-task-board

156Star5Fork6Issue0Watching

为 DSH Web GUI 增加多列任务看板,侧边栏入口一键切换;任务通过 Host 真实会话执行并回写状态,5 段 cron 定时由 Host 持有或浏览器兜底。

语言
TypeScript
License
BSD-3-Clause
分支
main
ai-agentai-coding-assistantcodexdeepseekdeepseek-harnessdesktop-appdshdsh-plugin

安装

$ dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-task-board

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

这个插件为 DSH Web 界面新增一个「任务看板」入口,切换后中间列变成多列卡片板,任务可以即时执行(驱动真实 agent 会话)或按 cron 定时执行,结果实时回写到卡片。

核心能力

  • 侧边栏「新会话」下方注入「任务看板」入口行(宽栏显示图标+文字,折叠 rail 仅显示图标),点击后中间列整体切换为五列看板
  • 五列视图:待规划 / 待办 / 进行中 / 已完成 / 已失败;卡片显示标题、描述、状态、更新时间、执行次数;顶部支持搜索、新建任务、返回对话
  • 点击卡片打开详情(标题/描述/执行 Prompt/执行记录),一点不会立刻执行;详情提供「执行/重新执行」「删除(带确认)」「查看会话(跳转到真实 transcript)」
  • 真实执行:点击「执行」后通过客户端 runtime 连接工作区会话(复用空白会话或 host 新建),把任务标题设为会话名,以任务 Prompt 调用 session.prompt 驱动真实 agent;订阅会话快照直到本轮结束,把卡片置为已完成/已失败并记录结果
  • 定时任务:详情面板可启用 5 段 cron 表达式(分 时 日 月 周,支持 * / */n / a-b / 逗号列表)与常用预设(每天 09:00、每小时、每 10 分钟、每周一 09:00);启用即计算并持久化「下次运行时间」,卡片显示定时标识
  • Host 文件持久化:权威 v3 台账保存到 Host 端 profile 隔离路径,存储 Project、紧凑 Task Run、派生 Evidence 与可选的持久调度状态;写入串行并原子发布,损坏文件保留,v2 文档迁移前先复制备份
  • 系统提示词注入:host 半边通过 SystemPrompt.section 注册 plugin:task-board 段(order 200),向每个 agent 声明本插件存在、能力与限制,卸载后该段落自动消失

技术实现

  • 语言: TypeScript(ESM,host + client 双半区)
  • 关键依赖: @deepseek-ai/cordis(cordis 插件骨架)、@deepseek-ai/dsh-client-runtime / dsh-client-connection / dsh-client-ui-settings(客户端运行时服务)、@deepseek-ai/dsh-host-webserver + dsh-system-prompt(Host 路由与系统提示词注入)、schemastery(配置 Schema)
  • 架构模式: 官方 cordis bundle 形态,patch.yml 把 ui-task-board 行插入 web profile;host 半区在 dsh host 进程跑(SystemPrompt + 文件存储 + 固定路由),client 半区在浏览器跑(runtime 服务接线 + DOM 挂载),两侧通过 cordis inject 互相依赖
  • 入口文件: src/index.ts(host loader)+ src/client/index.ts(client apply),打包产物 lib/index.js / lib/client.js

适用场景

用户需要把 DSH 里零散的 agent 任务从「临时会话」提升为「可追踪、可管理、可定时自动化」的工作流。典型场景:运维同学需要在固定时间点跑同一组提示词(数据巡检、日报生成)、团队需要把任务执行状态沉淀到 Host 端做审计、个人希望把灵感异步跑成可复现的 DSH 会话。

前置依赖与兼容性

依赖最低版本说明
DSH runtime>=0.1.0-rc.7 <0.2.0package.json#dsh.compatibility.runtime 显式声明
DSH Desktop>=2.7.0 <3.0.0package.json#dsh.compatibility.desktop 显式声明,2.6 任务支持 Worktree 模式
Python Native API^1.2.0package.json#dsh.compatibility.desktop.api 声明
Node^22.19 || >=24源码未声明 engines,遵循 monorepo 约定;devDependencies 含 @types/node ^22.20.0
React^18.2.0peerDependencies 声明,client 半区是 React 应用
平台跨平台纯 JS/TS 实现,无原生模块依赖

安装方式

dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-task-board

配置项

配置类型说明默认值
enabled开关插件总开关。关闭后不再向 agent 注入系统提示词,看板入口也不再挂载true
announceToAgent开关是否在每个 agent 的系统提示词里宣布「任务看板」插件存在。关闭后 agent 只能从用户口中得知本插件true
profileName字符串Host 端 ledger 归属于哪个 DSH profile 目录;不指定则取 DSH_PROFILE 环境变量,未设置时为 web运行时 DSH_PROFILEweb

配置项在 Web GUI 的「插件设置」面板里展示,按 task-board 命名空间持久化;保存后立即生效,无需重启。

常见问题

Q: 这个插件能干什么?

A: 在 DSH Web 界面侧边栏新增「任务看板」入口;点击后中间列切换为多列卡片板(待规划/待办/进行中/已完成/已失败),可以创建任务、立即执行(驱动真实 agent 会话)、按 5 段 cron 表达式自动调度。

Q: 任务执行会消耗 API 额度吗?

A: 会。每次执行都通过客户端 runtime 创建真实工作区会话并以 session.prompt 驱动 agent,消耗与普通会话相同的 API 配额。

Q: 任务数据存在哪里?

A: 权威 v3 台账在 Host 端 DSH_HOME/profiles/<profile>/state/task-board/tasks-v3.json;profile 默认取运行时 DSH_PROFILEweb。Host 端点不可用时回退到 v2 Host 路径或浏览器 localStorage v1。

Q: 定时任务必须一直打开看板吗?

A: 不一定。Desktop 2.7 在用户明确开启后台自动化且 Runtime Provider 提供 host-job 适配器时,Host 会以租约、时区 cron 和确定性 TaskRun 认领到期槽位(关闭浏览器也能跑)。其他情况(旧 Web Host、状态格式异常、没有 adapter)由浏览器标签页的 ticker 兜底,需要标签页保持打开,错过即跳过不排队。

Q: 错过了 cron 触发点会补跑吗?

A: 默认 skip。睡眠/重启期间错过的触发点全部跳过,nextRunAt 从当前时间向后滚动。显式 run-once 最多合并补跑一个槽位,queue-next 在任务运行中最多保留一个待执行槽位。

Q: 卸载后任务数据会丢失吗?

A: 不会。卸载仅移除 profile 里的插件注册行并恢复 GUI 原状,ledger 文件保留在 Host 端 state/task-board 目录。

Q: 安装后还需要做什么?

A: 需重启 dsh web 进程。profile 层(bundle 行、dsh.client 元数据)只在进程启动时读取,单纯页面刷新不会让入口生效。

Q: Worktree 审核模式是什么?

A: Desktop 2.6 任务可选择 shared-workspace 或 Git Worktree。Runtime Provider 提供 workspace/session 观察能力时 Host 创建受控 Worktree,详情展示有界 Evidence 并提供 Commit / Merge / Keep / 二次确认 Discard;缺少能力时明确回退到 shared-workspace,不伪造隔离状态。

Q: 怎么阻止插件向 agent 暴露自己?

A: 在 Web GUI 插件设置里把 announceToAgent 关闭即可,保存后 plugin:task-board 段会从系统提示词里实时撤掉。

上手难度

入门 — 安装一行命令、重启 GUI 后即可看到入口;配置只暴露 3 个开关/字符串字段,全程图形化操作;执行与调度都走 DSH 自身的会话机制,不需要写代码。

已知问题与限制

  • 持久 Host Scheduler 仅在 Desktop Runtime Provider 有意提供 host-job adapter 时启用(通常以用户明确开启后台自动化为前提);其余运行时(旧的 Web Host、状态路由不可用或格式错误)保留浏览器调度回退
  • 应用完全退出后不承诺调度继续执行;持有可执行归属的 Host 进程停止后到期任务会被跳过
  • Host 在派发前推进 nextRunAt 并写入确定性 TaskRun;旧 owner 租约过期后,只会以原确定性 key 重派尚未记录会话身份的已认领运行
  • Worktree 执行依赖可选 Runtime Provider 能力;缺少能力时使用 shared-workspace,不会伪造隔离状态
  • 浏览器侧 scheduler 是 60s 心跳 + 标签页恢复即时补 tick;正在运行的任务到点会被 runTask guard 拒绝,落到下一次 cron
  • 多个同源浏览器标签页共享同一份台账(Host 通过 SSE 同步),删除任务不会从其他标签页的陈旧副本中被写回复活