npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@firetruck666/dsh-task-board

v0.8.26

Published

Two main-stage panels for the DSH web GUI: a multi-column kanban board with real execution through DSH sessions, schedules, session rules and auto-cruise automation, plus a task-list workbench whose rows are themselves cards on one canvas, with a navigati

Readme

任务看板(dsh-task-board)

English | 中文

npm license Node

DeepSeek Harness 的任务看板插件。它在 Web 界面的侧边栏加一个「任务看板」入口,用五列看板管理任务;任务交给 DSH 自己的会话真实执行,状态自动回写到卡片上。

插件不修改 DSH 源码,卸载后界面恢复原状。看板数据保存在 DSH 主进程(host)一侧,电脑和手机打开同一个部署看到的是同一块板,改动经 SSE 实时同步;窄屏自动进入紧凑布局。

目录

环境要求

  • DeepSeek Harness 0.1.7-rc.2 或更高。0.1.7-rc.2 是已验证的最低版本,本插件当前就运行在这个版本上。更高的版本会跟随更新,但没有逐一验证过,所以不保证。加载失败时先按「常见问题」里的说明处理。
  • Node.js ^22.19.0 或 >= 24.0.0
  • pnpm 10 或更高
  • DSH 的 web profile

本插件只运行在 Web 图形界面上。

安装

三种方式,选一种。三条命令都在你自己的终端里执行。

从 npm 安装

dsh plugin --profile web add @firetruck666/dsh-task-board

适合日常使用。拿到的是最近一次正式发布的版本。

从 GitHub 安装

dsh plugin --profile web add github:FiretrUCK666/dsh-task-board

拿到的是仓库 main 分支的最新代码。它和 npm 装出来的一样是可直接使用的安装包,不是开发环境(没有测试、没有构建工具,改不了代码)。适合想第一时间用上还没发版改动的人;稳定性取决于仓库当时的状态。

本地开发安装

把仓库下载到本地后,在这个仓库目录里执行:

pnpm install
pnpm build
dsh plugin --profile web add .

这条路径用于改代码。详见下面的「从源码构建」。

本地安装是指向工作目录的链接(不是复制),所以挂载一次即可:改完代码只需 pnpm build 再重启 dsh web,不必重跑上面的安装命令。改 client 半区刷新页面即可,改 host 半区才需要重启——见「常见问题」里的「改了代码没生效」。

三种方式的区别

前两种是安装:拿到的都是可以直接使用的包,只包含发布清单里的文件(运行代码、源码、挂载声明、说明文档)。第三种是开发:拿到的是完整仓库,能改代码、能运行测试。

| | 从 npm | 从 GitHub | 本地 | | --- | --- | --- | --- | | 用途 | 安装使用 | 安装使用 | 开发 | | 拿到什么 | 最近一次发布版 | main 最新代码 | 你本地改动 | | 版本特点 | 稳定 | 最新,可能不稳定 | 你自己决定 | | 更新依据 | npm 上的版本号 | 仓库最新提交 | 安装的即本地目录,无需更新 |

从 npm 和从 GitHub 装出来的文件基本一致,差异只在版本新旧。想用还没发版的改动就从 GitHub 装,想要稳定版本就从 npm 装。

安装之后

停掉正在运行的 dsh web,重新启动它。只刷新页面不够——插件的 host 半区在服务端进程里加载,必须重启才生效。重启后刷新页面,侧边栏就会出现「任务看板」入口。

入口和 DSH 自带的「插件」面板并排:点它,看板占用中间主区域;再点一次同一个入口、或点侧边栏里的任意会话,即可回到对话。

这个插件的开关在两处,各管各的:侧边栏「插件」→ 往下拉到「已安装」,那一行右边的开关是总开关; 或点开「任务看板」进它自己的页面,右上角那个开关做的是同一件事。关掉 = 整个插件不加载 (侧边栏入口、看板、清单、后台接口一起停)。页面里「包含的组件」下面还有四行, 每行一个开关,管各自那一半(看板 / 清单 / AI 接口)——详见「常见问题」。

不需要手动配置任何东西

装完就能用,不用改配置文件、不用手写任何声明。而且不要去改 cordis.patch.yml——插件那一行住在插件包里,安装命令只负责把这个包登记进 profile,两者一配合就装配好了;手工再补一行会造成同一个插件出现两条。

| 环节 | 谁做的 | | --- | --- | | 把插件登记进本机 profile | 安装命令(往 dsh.profile.bundles 加一个包名) | | 插件那一行(id、包名) | 插件包里的 cordis.patch.yml,由 package.json 的 dsh.bundle.patch 指向,装配时自动生效 | | 界面入口、看板舞台 | 插件自己注册到 DSH 的官方扩展点,启动时自动完成 | | 数据存哪 | 自动使用 ~/.dsh/storages/dsh_task_board/ 目录,第一次运行时创建 | | 插件显示的名字、说明、图标 | 包里的 locale/ 与 icon.svg,DSH 直接读取 | | 那个开关的位置 | 插件管理页的开关写 profile 里这一行的 disabled(关掉时才会写上) |

唯一必须你做的一步是重启 dsh web(host 半区在服务端进程里,不重启不会加载)。三种安装方式(npm、GitHub、本地)在这件事上完全一样。

这个插件没有设置项,也不需要设置面板:看板的行为(任务、定时、巡航、规则)全在看板界面上直接编辑,而开与关就是上面那个开关。

卸载:

dsh plugin --profile web remove @firetruck666/dsh-task-board

同样需要重启 dsh web。卸载不会删除你的任务数据。

更新

最直接:看板 Header 右侧工具栏里有常驻的「检查更新」按钮,点一下即对比当前版本与最新版。有新版时它会给出你这种安装方式对应的更新命令,复制后在自己的终端里执行。

装了插件市场的话,在「已安装」标签页里点「更新」。也可以直接重新执行一次安装命令:

dsh plugin --profile web add @firetruck666/dsh-task-board@latest

或者:

dsh plugin --profile web add github:FiretrUCK666/dsh-task-board

更新后同样要重启 dsh web。

主要能力

任务看板

  • 五列:待规划 / 待办 / 进行中 / 待审核 / 已完成。卡片可以拖到别的列,同一列里也能上下拖,指定先后。
  • 执行是真的:在详情里点「执行」,DSH 会话开始干活,跑完自动落到「待审核」。跑过几次、上次成没成,卡片上写着。
  • AI 正在跑的卡有黄边,还没读过的有外环。
  • 板顶一行数字:几个在等你、几张待审核。点它开通知中心。
  • 通知中心收着所有等你处理的事;动态页按日分组,看最近发生了什么。
  • 复核页是一次执行的完整记录,可以直接「通过 / 打回」。
  • AI 在评论区里提问,当场就能答;要你批准某件事的,它给一个跳去会话的入口。
  • 每张卡的评论区就是它的 DSH 会话。排队发、插话发都行,图片和文件直接拖进去。
  • 把侧栏里的会话或工作区拖到某一列,就得到一张绑好关系的卡。
  • 定时跑、跑完接着跑、给某个会话按时间表发指令——两种自动化各管各的。
  • 自动巡航:板头一颗开关,设好同时最多几件、哪些时段跑。
  • 多选之后,改色、执行、删除一次做完。
  • 详情能存成模板,新建时选一个就填好了;运行配置能存预设、设默认。
  • 窄屏上列变成横向滑动,功能不少。

任务清单

  • 按「+新建一条」记一件事。第一行用一行语法写全:#标签、!1 优先级、@明天、- [ ] 步骤。边打边显示认出了什么,认错了点一下就还原成普通文字。
  • 清单是独立的,不必先变成卡片;挂上卡之后,跟着那张卡的状态走。
  • 三个时间各自独立:最早开始、截止、最后期限。只有错过最后期限才变红——计划推迟和承诺失守是两回事。
  • 步骤打勾出进度条,优先级四档,标签随手打。
  • 筛选全在左栏:日历、超期、迟迟没动、没定日子、优先级、状态、日程、已删除。每一项都带数字,0 也写。
  • 状态由行首那颗珠子说:进行中 / 待办 / 受阻 / 已完成,四种形状,一行只说一次。
  • 标题、正文、备注、日期都在这一行里改,不另开窗口。
  • 日程页按天读:今天 / 明天 / 本周稍后 / 以后。没定日子的单独收着,还没到开始日子的有一扇门。
  • 删除有撤销;删掉的都在左栏底部「已删除」,30 天内能找回,也能彻底删除。
  • 多选之后,改状态、设优先级、设截止、问 AI、删除一次做完。
  • 键盘:A 新建、J/K 移动、X 多选、1–4 优先级、E 改标题、⌘Z 撤销、Esc 一层一层收。

多台设备与 AI 入口

  • 数据存在这台机器的 ~/.dsh/storages/dsh_task_board/,人可读。换机器,拷这个目录就行。
  • 手机上打开是同一份数据。断网也能用,连上后自动对齐。
  • /task 把你写的话交给当前会话的模型;/task-continue 让它接着上次往下做。

数据保存在哪里

  • 看板真相:~/.dsh/storages/dsh_task_board/ 目录。documents/ 下每种数据一个文件:board.json 是任务台账、巡航、定时预设、运行配置预设与删除墓碑;items.json 是任务清单。人可读、原子写入,可以直接整目录备份;删除这个目录等于清空看板与清单。
  • 浏览器 localStorage 保存离线镜像和本地状态。两份承载数据的镜像是 dsh.taskBoard.v1(看板)与 dsh.taskBoard.items.v1(任务清单)—— 两份都要备,只备一份等于清单那份丢了。其余的键 (cruise / presets / runPresets / templates / drafts / preSync)是这个浏览器自己的状态或 一次性备份,不是另一份真相。键名以 src/client/ 里实际写下的为准;这里列的是哪些值得你 操心,不是全部键的清单。
  • 第一次连接时如果本地数据与 host 有分歧,本地副本备份到 dsh.taskBoard.preSync.v1,host 为准。
  • host 没有挂载存储后端时,看板自动退回纯 localStorage 模式。

从源码构建

前置:Node.js 22 或 24、pnpm、能访问官方 npm 源(类型和运行时 API 全部来自 @deepseek-ai/*,不需要 DSH 源码 checkout)。

git clone https://github.com/FiretrUCK666/dsh-task-board.git
cd dsh-task-board
pnpm install
pnpm build       # 产出 lib/index.js 和 lib/client.js
pnpm typecheck   # 类型检查
pnpm test        # 单元与契约测试
pnpm verify      # 独立插件静态门禁

lib/ 是构建产物,但它随仓库一起提交。原因是从 GitHub 或 npm 安装时只会复制文件,不会执行构建,仓库里没有 lib/ 的话装完就启动不了。改完源码要重新构建,并把 lib/ 和源码放在同一次提交里(CI 会检查两者是否一致)。

仓库根目录的 AGENTS.md 记录了项目的约定、架构索引与发布流程,是 AI 助手在这个仓库里工作时用的依据。

贡献指南

欢迎提 Issue 与 Pull Request。动手前先读 CONTRIBUTING.md:开发环境、提交 PR 前要跑的检查、硬性规范都在里面。报告加载失败类问题时,附上三个信息:DeepSeek Harness 版本、本插件版本、报错原文。

常见问题

插件页面上的四个开关是什么。 侧边栏「插件」→ 已安装 → 点「任务看板」→「包含的组件」列出四行,每行一个开关:

| 那一行 | 关掉之后 | | --- | --- | | 任务看板 | 侧栏面板列表里没有「任务看板」,看板面板不再出现 | | 任务清单 | 侧栏面板列表里没有「任务清单」,清单面板不再出现 | | AI 接口 | 所有会话的 AI 都看不到本插件的工具、斜杠命令与系统提示——它们从未被注册,不是被拒绝 | | 任务看板(插件本体) | 整个插件不加载,上面三行随之无意义 |

「AI 接口」这一行是装配层的开关:关掉它,插件的那几个模块根本不加载,所以没有任何一次运行 时判断可以漏掉。清单与看板各自要开关,是因为它们是两个界面;而一个 npm 包只有一份浏览器产物, 所以这两行由宿主侧的模块宣告,浏览器开机时读一次。

看板上的状态词都什么意思。 它们读的是同一份推导,所以同一张卡在任何一处都是同一个答案:

| 你看到的词 | 它在说什么 | 什么时候消失 | | --- | --- | --- | | 待你决断(失败时写「失败待决断」) | 卡在「待审核」列,有跑完但那个会话你还没看过的结果 | 打开那个会话的评论区,或点「通过 / 打回」 | | 等你处理 N 项 | N 个会话正挂起等你回答(审批 / 计划确认 / 提问) | 你在那个会话里回答完 | | 待审核 M 张 | M 张卡在「待审核」列且那个会话你还没看过 | 同「待你决断」 | | 新 N / 新留言 | 这张卡有还没看过的新内容 | 点开卡片即消失 | | 待处理 N | N 个会话在等你(N > 1 时) | 逐个回答完 | | N 次执行 | 这张卡跑过几轮(历史,不是催你) | 不会自己消失 | | 失败 · 已暂停 | 自动化因上次失败而暂停 | 在详情里重新启用 |

「待你决断」和「新 N」是两件事:「新」是「这张卡你没打开过」,「待你决断」是「那个会话你没 看过、也还没裁决」。取消不算「待你决断」——取消是中止,它只出现在评论线程和动态里。

装完刷新页面看不到入口。 host 半区在服务端进程里加载,必须重启 dsh web,只刷新页面不够。

入口在哪、开关在哪。 看板与清单是侧边栏里的两个面板图标,与 DSH 自带的「插件」面板并排。 这个插件的开关就在插件自己的页面上:侧边栏「插件」→ 已安装 → 点「任务看板」, 四行分别是看板、清单、AI 接口与宿主半区,每行一个开关,关掉哪行哪一半就不注册。 如果你看不到入口,说明这一端还在跑旧的前端资源——刷新页面即可。

升级 DeepSeek Harness 之后插件加载失败(页面提示 Failed to load plugins)。 DeepSeek Harness 的内部接口会随版本变化,本插件需要跟着改。先做这两步:

  1. 把本插件更新到最新版,然后重启 dsh web:

    dsh plugin --profile web add @firetruck666/dsh-task-board@latest
  2. 仍然失败,说明本插件还没跟上你用的那个 DSH 版本。请到 Issues 提交,附上三个信息:你的 DeepSeek Harness 版本、本插件版本(在插件页的「已安装」列表里看——不是设置页,本插件没有设置项)、页面上那段报错原文。有这三样就能直接定位。

看板能打开,但多设备不同步、任务清单也一直是空的。 这是 host 半区没加载成功的表现,也是升级 DSH 之后最容易被忽略的一种:看板本身仍在页面上正常工作,但数据只留在这一个浏览器里,另一台设备看到的不是同一块板,定时与巡航也不会真正触发。任务清单在这种情况下会明说「暂时读不到 host 上的清单,正在用本机的副本」,不会假装自己一条都没有。处理方式与上一条相同——更新插件、重启 dsh web。

打开右侧栏之后看板变了样子。 这是正常的响应式行为,不是故障。DSH 的右侧栏默认占视口约 45%、最少 300px,中栏硬保 400px,所以打开它之后中间那块板本身变窄了:看板的响应式看的是自己盒子的宽度(不是窗口宽度),板盒一旦窄过它的紧凑档阈值,五列就会变成横向滑动的列轨、并出现五等分的列导航标签。把右侧栏收回去就恢复。这条规则本意就是「板盒多宽就摆多宽」,侧栏开合、分屏、手机上都成立。

改了代码没生效。 改 host 半区(src/index.ts、src/host/)需要重启 dsh web;改 client 半区刷新页面即可。两种情况都要先 pnpm build。

手机上打开位置不对,或反复开合侧栏会跳位。 这是修复过的问题。如果仍然出现,先确认服务端进程是重启过的新版本:插件在板头会显示「服务端未重启 · 点此了解」,点开可以看到当前连接的服务端进程的启动时间。如果时间明显是旧的,说明这个地址连到了另一个没重启的实例。

两端同时开着会不会重复执行定时任务。 不会。定时、巡航、接续这类行为由 host 租约仲裁,同一时刻只有一个界面在执行,另一台设备切到前台后会接管并补上期间漏掉的状态。

任务数据在哪,换电脑会丢吗。 在 ~/.dsh/storages/dsh_task_board/ 目录。换电脑时把整个目录拷过去即可;浏览器里的 localStorage 只是离线镜像。

找不到任务清单的入口。 清单是侧栏面板列表里紧跟「任务看板」的第二行——把左栏展开就能看到两行图标,点第二行打开清单, 再点一下回到会话。侧栏收成一条窄图标带时,两行挨着排在一起。

如果那一行根本没有:多半是这一端还在跑旧的前端资源,刷新页面即可;还不行就去看插件页上 「任务清单」那个开关是不是被关了(见上面「四个开关」)。清单关掉不影响看板。

切到看板面板时清单不见了。 那不是坏了,是主舞台一次只显示一个面板——它本来就是这么设计的,不是两个能同屏的东西。 想回清单,点侧栏里清单那一行;想回对话,点「返回对话」或再点一次当前那一行。

dsh plugin 报错找不到 pnpm。 先安装 pnpm(npm install -g pnpm),再重新执行安装命令。

命名约定

| 用途 | 值 | | --- | --- | | 插件 id | dsh-task-board | | npm 包名 | @firetruck666/dsh-task-board | | 权限预设路由 | /api/dsh-task-board/permissions | | 看板数据路由 | /api/dsh-task-board/board(含 /items、/surfaces、/ask、/lease、/command、/events) | | 其余 host 路由 | /api/dsh-task-board/session-state、/update、/client-report | | host 存储单元 | dsh_task_board(documents/ 下每种数据一个文件) | | 看板舞台 slot | main(key: dsh-task-board) | | 任务清单舞台 slot | main(key: dsh-task-board-items,与看板同一个座位、不同键) | | 侧栏入口 slot | sidebar.panellist(id 与各自的 main 键一致) | | localStorage 键 | dsh.taskBoard.v1 等 |

插件 id 和包名是两件事:id 决定加载器行、浏览器资源路径、路由、存储单元和上面那几个扩展点;包名只是 pnpm 安装时的标识。包名带作用域不会改变 id。

本插件没有设置项,所以也没有设置路由和设置面板:插件市场里那条开关写的是 profile 行的 disabled(关掉时才写上),插件本身不声明任何设置字段。

许可证

MIT,见 LICENSE 文件。