DSH Project Board:项目结构、待办与决策的统一记录系统

前言

DeepSeek Harness(DSH)插件生态强调「一切皆插件」,社区目录提供插件分发渠道。DSH Project Board 是一款客户端插件,把「项目结构 + 待办 + 决策」收进一套可追踪的记录系统:一棵节点树、两份 Markdown 文件、右侧栏一键查看。

插件由 Notoonex 维护,分类为客户端,当前星标数为 0。它解决的是 DSH 用户在项目开发中常见的痛点:待办和决策散落在聊天、文档、看板里,过两周就找不到;看板按「阶段」分节,但实际是按「产品部位」干活,找不全一个页面的上下文;决策只记结论不记理由,三个月后无法判断是否还成立;汇总数字手写,改一处忘一处。

核心设计

这套系统用三个约束解决上述问题:

  1. 节点树:使用 ## 20 首页 这样的节点命名,节点 = 持久的产品面/领域,不是任务、不是阶段。节点编号固定,不随任务增减。
  2. 双轨记录:进度看板放任务,决策台账放决策,共用同一套节点 ID。两份文件 stem 必须一致,frontmatter 中的 project: 必须等于 stem。
  3. 派生视图:进度、未完成、待拍板全部算出来,不手写。

右侧栏功能

插件会在 DSH 右侧栏增加「项目看板」标签:

  • 索引 chips + 互斥手风琴:一次只展开一个节点,避免信息过载。
  • 搜索、仅未完成、待拍板过滤。
  • 决策按节点分组,点开底部抽屉可以查看理由、备选、影响、复审。
  • 浅色 / 深色自动跟随 DSH 主题。

安装与启用

作为 DSH 插件安装(推荐):

dsh plugin --profile web add @notoonex/dsh-project-board

从源码安装:

dsh plugin --profile web add github:Notoonex/dsh-project-board

重启 DSH 后,右侧栏会出现「项目看板」。插件会自动把 skill 安装到 ~/.dsh/skills/project-board/,并托管本地 board server。

配置

插件提供两个环境变量:

环境变量 默认 说明
DSH_PROJECTS_DIR ~/Documents/Projects 项目根目录,每个子目录一个项目
DSH_PROJECT_BOARD_PORT 自动 可选;不设时从 8791 起自动找空闲端口

如果项目在别的目录,启动 DSH 前设置 DSH_PROJECTS_DIR。不设端口时,server 会自动找空闲端口,前端也会自动探测,不需要手动配置。

目录结构

每个项目需要各恰好一个 * 进度看板.md 和 * 决策台账.md,两份文件 stem 必须一致,frontmatter 的 project: 必须等于 stem。

目录结构如下:

$DSH_PROJECTS_DIR/
└── my-app/
    ├── my-app 进度看板.md
    ├── my-app 决策台账.md
    ├── 踩坑.md            # 可选,只放教训
    └── README.md          # 可选,定位/背景

文件格式

进度看板

---
schema: project-board/1
project: my-app
archetype: web-app
nodes:
  "00": 治理
  "20": 首页
  "90": 归档
---

## 20 首页
> 范围:首屏 / 导航 / 视觉

- [ ] 首屏文案定稿 · 验收: 3 秒内说清产品是什么 · 关联: D-20-01
- [ ] [[首屏是否放演示视频]] 等 owner 拍板
- [x] ~~四屏结构定型~~ `abc1234`

决策台账

---
schema: decision-log/1
project: my-app
---

### D-20-01 首屏采用单 CTA
- 节点: 20 首页
- 状态: 生效
- 日期: 2026-10-24
- 可逆性: 可逆
- 理由: 首屏只保留一个动作,降低选择成本
- 备选: 双 CTA / 无 CTA
- 影响: 20
- 复审: 上线两周看转化率

决策 ID 自带节点:D-20-01 = 节点 20 的第 1 条。台账扁平按 ID 排序,天然按节点分组,不需要复制章节骨架。

Skill

插件内置 Skill,位于 skill/ 目录:

  • references/init.md:首次接入与迁移。
  • references/operate.md:日常写任务/决策。
  • references/schema.md:完整字段与编号规则。
  • references/packs/:web / business / life 域包。
  • scripts/lint.mjs:跨文件校验。
  • scripts/scan-legacy.mjs:旧看板只读扫描,输出 mapping 草稿。

使用方法:

node "$DSH_SKILL_DIR/scripts/lint.mjs" "$DSH_PROJECTS_DIR/my-app"

Skill 本身不依赖插件,只要有 Markdown 和 Node 就能用。

安全与 Token

插件安全设计如下:

  • 只监听 127.0.0.1,公网访问不到。
  • 非本机来源的请求直接返回 403(不只是「不给读」);DSH Desktop 的 dsh-app:// 属于本机应用来源,单独放行。
  • project 参数按目录白名单校验,拒绝路径穿越。
  • 只读写项目目录内的 * 进度看板.md / * 决策台账.md。
  • 勾选回写优先按任务 ID,其次按「节点 + 任务文本」定位,不依赖行号。
  • 本地 token:首次启动自动生成,客户端自动携带;同一台机器上的其他页面没有 token,调用会被 401 拒绝。

Token 配置:

  • 首次启动生成 ~/.dsh/project-board/token(权限 600)。
  • 插件启动时把 token 写进已安装的 client/client.js。
  • 客户端所有 API 请求带 X-Project-Board-Token。
  • /api/health 不校验 token,只用于端口探测。
  • 如果侧栏报 401:重载 DSH;或删除 token 文件后重启 DSH,让插件重新生成并注入。

这是一次性自动配置,不需要用户输入任何东西。只有一种情况会失败:插件安装目录本身是只读的(例如全局 npm 安装)。用 dsh plugin add 装到 profile 目录通常是可写的。

更新机制

  • 增量更新:只覆盖有变化的文件。
  • 你新增的文件会保留。
  • 你改过的文件会保留(日志提示 kept local skill edit)。
  • 上游删除、且你没改过的文件会被删除。
  • 想强制全量:删掉 ~/.dsh/skills/project-board/ 或其中的 .manifest.json,重启 DSH。

写入定位

侧栏勾选不再按行号硬写:

  1. 任务有 [T-<节点>-<序号>] → 按 ID 找。
  2. 没有 ID → 按「节点 + 任务文本」找。
  3. 都找不到 → 返回 409,让前端刷新,不会误勾别的任务。
  4. 勾选完成只加/去 ~~删除线~~,不改任务原文(链接、反引号、加粗都保留)。

开发与测试

运行测试:

npm test

测试包含:

  • lint 正常/异常 fixture。
  • board server 的 board/decisions API。
  • 路径穿越拦截。
  • CORS 远程来源拒绝 / 本地来源放行。

兼容性

  • DSH(Cordis)插件。
  • 纯 markdown,Obsidian 可直接打开。
  • Skill 部分对 Codex / Claude 也可复用。

适用场景

DSH Project Board 适合需要在 DSH 中管理项目结构、待办事项和决策记录的用户。它通过节点树和双轨记录,把散落在各处的信息收拢到两份 Markdown 文件中,并用右侧栏提供统一的视图。插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。

总结

DSH Project Board 把「项目结构 + 待办 + 决策」收进一套可追踪的记录系统:一棵节点树、两份文件、右侧栏一键查看。它通过节点树、双轨记录、派生视图三个约束,解决待办和决策散落、阶段与产品部位脱节、决策不记理由、汇总数字手写的问题。插件提供完整的 Skill、校验脚本和安全机制,适合需要在 DSH 中建立统一项目记录系统的用户。

  • 目录页:https://www.skillhub.cn/plugins/Notoonex/dsh-project-board
  • GitHub:https://github.com/Notoonex/dsh-project-board
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye