dsh-task-workspace:用文件夹和 PROGRESS.md 固定 DSH 任务工作区约定

前言

在 DSH 里做多轮任务时,常见问题是进度散落在对话里、工作区根目录堆满临时文件,换会话后很难接上。有人靠手动建目录、自己写 Markdown 记进度;有人把 git 建在项目根,和主仓库混在一起。下面介绍维护者 Zilong6666 发布的 dsh-task-workspace(GitHub:Zilong6666/dsh-task-workspace),它把一套可落地的约定写进 DSH:一个会话对应一个任务文件夹、每个任务只维护一份会被整体覆盖更新的 PROGRESS.md,任务变长再在任务目录内单独 git init。

这是什么

dsh-task-workspace 是 DSH 的 bundle 插件(package 版本 0.3.0,MIT 许可证),分类为工作流。它通过 prompt 段 task-workspace、技能 task-workspace-convention,以及一组工具与 CLI,让「一文件夹一任务、一进度文件、必要时 per-task git」在同一工作区内保持一致。社区目录页:https://www.skillhub.cn/plugins/Zilong6666/dsh-task-workspace。

核心功能

约定如何落到磁盘

工作区典型结构如下(摘自官方 README):

<workspace>/
├── .dsh-tasks.json              # 任务索引,写入时更新
├── 竞品调研-20261002/
│   ├── PROGRESS.md              # 该任务唯一的进度文件
│   ├── .dsh-session.json        # 记录哪个 session 拥有此文件夹
│   ├── .git/                    # 仅在任务变长时存在
│   └── data/…
└── etl-refactor-20261003/
    └── PROGRESS.md

同一 session 最多拥有一个任务文件夹;再次调用 task_new 会复用已有目录(reused: true),不会在同一 session 下再建第二个文件夹。PROGRESS.md 固定六个章节:目标、状态、当前进度、下一步、产出物、变更日志。

工具一览

组件 作用
task_new 创建 <workspace>/<name>-<YYYYMMDD>/PROGRESS.md,可选 git init
task_progress 整文件覆盖更新进度相关段落;变更日志追加一行
task_git 在任务目录内初始化 git 并提交,或后续提交
task_list 列出当前工作区已有任务文件夹及状态
task_tidy 分类顶层条目、重写工作区索引,可选清理可证明可删的垃圾(默认 dry run)
CLI dsh-task 与上述逻辑相同,不经过模型

task_progress 的覆盖与压缩

task_progress 会覆盖「当前进度」段,而不是在文末追加。摘要过长(约 18 行以上)时,会自动压缩为「进度历史(压缩摘要)」块并保留可折叠归档,避免文件不可读。若任务目录已有 git 仓库,默认会在更新后提交(可通过 commit: false 或配置 autoCommit: false 跳过)。参数全空会报错,避免无意义 touch 文件。

何时在任务目录建 git

约定里给出的显式触发条件(满足其一即可):预计超过约 3 轮、需要跨 session 继续、产出文件超过约 10 个、或用户明确要求。

安装与启用

插件以当前 dsh 进程权限运行;安装前建议自行查看 GitHub 源码与 MIT 许可证,确认符合你的环境策略。

从 profile 安装(命令来自 README,profile 名按你的环境替换 desktop):

dsh plugin --profile desktop add dsh-task-workspace

或从本地 checkout 安装:

dsh plugin --profile desktop add /absolute/path/to/dsh-task-workspace

安装后需重启该 profile 或新开 session,以便 bundle patch 生效。若 profile 由 Electron 应用独占,dsh plugin --profile desktop add 可能被拒绝,此时 README 提供 scripts/install-into-profile.sh 做链接并追加 dsh.profile.bundles。

运行环境要求 Node >= 20(见 package.json 的 engines)。

配置

配置文件路径:${DSH_HOME}/dsh-task-workspace/config.json。工作区根目录解析顺序:工具参数 → workspaceRoot → $DSH_TASK_WORKSPACE_ROOT → $DSH_WORKSPACE_ROOT → 当前 session 工作区 → $DSH_HOME。显式指定的根目录不存在时会创建;node_modules/、/、临时目录和 $HOME 本身会被拒绝。

常用字段示例:

{
  "enabled": true,
  "workspaceRoot": "",
  "defaultGit": false,
  "autoCommit": true,
  "promptEnabled": true,
  "skillEnabled": true
}

defaultGit: true 表示新建任务即初始化 git;promptEnabled / skillEnabled 设为 false 可保留工具但去掉注入的约定文本。profile 层也可通过 patch 覆盖同名配置项。

典型用法

在 DSH 里新建任务并写进度

先建任务目录与 PROGRESS.md(可选立刻 git init):

{ "name": "竞品调研", "goal": "整理三家竞品的定价与功能差异", "init_git": true }

更新进度(task_dir 或 task 指向文件夹):

{
  "task_dir": "竞品调研-20261002",
  "summary": "已抓取 3 家官网定价页,A 家缺 API 价目",
  "changelog": "完成定价页抓取",
  "status": "进行中",
  "next": "补齐 A 家 API 价目\n输出对比表",
  "deliverables": "data/pricing.csv"
}

任务变长后单独初始化或提交 git:

{ "task_dir": "竞品调研-20261002", "message": "chore: 初始化任务仓库" }

命令行 dsh-task

不经过模型时,可用 CLI 完成同样操作:

dsh-task new "竞品调研" "整理定价差异" --git
dsh-task progress 竞品调研 --summary "抓到 3 家" --changelog "完成抓取"
dsh-task git 竞品调研 --message "chore: 初始化任务仓库"
dsh-task list
dsh-task config --root "/path/to/workspace"

退出码:0 成功,1 用法错误,2 操作失败。人类可读信息在 stderr,结果路径在 stdout,便于 cd "$(dsh-task new …)"。

整理工作区

task_tidy 默认只报告;真正删除需 apply: true,且仅针对可证明可删项(如 .DS_Store、__pycache__、部分备份后缀、误建在 workspace 外的空壳任务文件夹等),不会删任务正文或 README。空目录默认不删,需 empty_dirs: true。

{ "workspace": "/path/to/workspace", "apply": true, "index": true, "empty_dirs": false }

适用场景与注意

适合需要在 DSH 里做多轮、可续接的开发或调研任务、又希望进度文件形状统一、与工作区根目录解耦的开发者。不适合把主应用仓库的 git 策略完全交给本插件——它的 git Scope 是任务子目录。

再次强调:插件工具会在你配置的 workspace 下创建目录、写文件、执行 git,权限与当前 dsh 一致。生产或敏感路径上启用前请核对 workspaceRoot 与 tidy 的 apply 行为。

DeepSeek Harness 生态采用「一切皆插件」思路;SkillHub 等社区目录独立于 DeepSeek / 幻方,并非官方应用商店。本插件在目录页星标为 0,属较新的工作流类条目,使用前以 GitHub README 为准。

结尾

dsh-task-workspace 的价值在于把「一 session 一文件夹、一任务一 PROGRESS.md、长任务再 per-task git」变成 DSH 内可重复调用的工具与 CLI,而不是依赖每次对话里口头约定。目录页:https://www.skillhub.cn/plugins/Zilong6666/dsh-task-workspace;源码与完整参数说明:https://github.com/Zilong6666/dsh-task-workspace。

羽毛球分组比赛记分
小程序二维码

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

小夜