Skip to main content
H

dsh-task-hub

handsomeboy65/dsh-task-hub

TAPD + ZenTao task hub for DSH: list assigned work in the sidebar and dispatch an agent on a branch you name.

Install

dsh plugin --profile web add github:handsomeboy65/dsh-task-hub

README

dsh-task-hub

English · 简体中文

DSH 的任务中心插件:从 TAPD / 禅道 中读取分配给你的需求或任务,选一个工作区、手填分支名,把选中的任务派发给 Agent 开始干活。

两个来源是二选一:顶部用 tab 切换当前来源,同一时间只列出一个来源的数据,也只有一个来源生效;切换不会把两个来源合并展示。每个来源的地址、凭据、项目等配置分别保存在 settings.json 里,来回切换不会丢。

安装

dsh plugin --profile web add github:handsomeboy65/dsh-task-hub

装完重启 dsh web,侧边栏会出现「任务中心」。桌面端请在应用内的 设置 → 插件 里安装。

需要 DSH 0.2.1 或更新版本。包发布到 npm 之后,dsh plugin --profile web add dsh-task-hub 是等价写法。

分支名手动填写

派发弹窗要求填写完整分支名(例如 feature/order-export),插件不会再自动拼接 issue_<需求号>,也不会追加任何后缀。分支名会用 git check-ref-format --branch 校验,非法名字直接报错。

首次配置

点击面板右上角「设置」,先在顶部选择来源,再填写该来源的配置。

TAPD

字段说明
认证方式Token 或 API 账号 + 密码
API 账号 / 密码TAPD 开放平台 → 个人设置 → API 账号,不是登录密码
处理人过滤需求的处理人;留空表示用 TAPD 账号本身
项目 IDTAPD 项目的 workspace_id,多个用逗号分隔;可点「拉取项目」选择
Nick拉取项目列表时使用,可留空

禅道

字段说明
禅道地址例如 https://zentao.example.com,会自动补 /api.php/v1
账号 / 密码禅道登录账号;密码只写入 DSH credentials
范围产品 读取产品需求(stories),项目 读取项目下各执行的任务(tasks)
产品 / 项目可在列表中勾选多个,也可填写多个 ID,用逗号分隔

禅道没有“分配给我”的接口,插件会先登录拿 token,再按当前账号在本地过滤。

凭据写入 DSH credentials(也可用环境变量 TAPD_API_USER / TAPD_API_TOKEN / TAPD_API_PASSWORD / ZENTAO_PASSWORD 提供),任何密钥都不会落在插件数据文件里。

通用

字段说明
默认工作区派发时默认选中的 DSH 工作区(如 TMS2.0)
基线分支留空则自动探测 origin/HEAD
隔离 worktree默认开启:在仓库同级 .dsh-worktrees/<仓库>-<分支> 另开工作树,不打断你当前分支
隐藏已完成列表默认只显示未完成项

派发流程

  1. 面板列出当前来源里「处理人 = 我」的条目,按最近修改排序,可筛选 未完成 / 已完成 / 全部。TAPD 需求的「应用」字段(如 德速TMS2.0客户端)单独占一列,排在 ID 之前;多应用时逐个标签竖排,当前来源没有应用字段时该列整列隐藏。

  2. 点某条的「派发 Agent」。

  3. 在弹窗里确认:目标工作区(或手填仓库路径)、分支名称、是否用 worktree、基线分支,以及可选的「补充要求」。

    「补充要求」不是拿来手写整条任务说明的:留空时插件会用需求标题、描述、附件、图片和工作约定自动生成一份任务说明;你填的内容会以 ## 补充要求 追加在它后面,不会替换需求正文。

  4. 确认后插件依次执行:

    • git worktree add -b <分支名>(或就地 checkout -b);
    • 在工作树/仓库上建立(或复用)DSH 工作区,并创建会话;
    • 把标题、来源链接、父需求及关联应用(如有)、完整需求正文、参考资料、工作环境(仓库、分支、对比基线)和执行要求写进新会话的输入框草稿;不再附带处理人、状态、优先级、迭代及时间等管理字段。正文不截断,描述为空时提示先读资料并澄清目标;
    • TAPD 会带上需求附件(含父/根需求)和描述截图;禅道读取需求或任务详情,并下载正文中的禅道图片和附件。这些附件同样只作为草稿附件挂在输入框上;
    • 会话标题改为 <分支名> · <标题>,并自动跳转到该会话。 不会自动发送:跳过去之后,任务说明和附件都已经在输入框里,你看一眼、改一改,自己按发送。
  5. 面板显示分支、会话状态(运行中 / 空闲 / 待发送 / 会话已不存在),每 8 秒刷新一次运行状态。

重复派发同一条时,如果之前的会话还在,会直接返回原会话。点「打开」可以恢复尚未发送的草稿,已有的输入内容会保留。已发送的任务会直接进入原会话。

数据与失败模式

  • 设置:~/.dsh/task-hub/settings.json;派发记录:~/.dsh/task-hub/state.json。
  • 派发记录按 来源:id(如 zentao:task-31)区分,不同系统的同号条目不会互相覆盖;旧的 TAPD 记录仍按原 id 兼容。
  • 就地派发要求工作区干净,否则报「工作区有未提交改动」。
  • 已存在同名 worktree 但停在别的分支时报冲突,不会强改。
  • 单个项目/产品查询失败不会拖垮整张列表,失败信息会在面板上提示。

开发

npm test     # 纯函数、git 流程、派发、客户端渲染、双来源适配

改完代码后,已安装的 bundle 需要重启 DSH 才会加载新的 JS 代次(安装时的首次加载可走 HMR)。

限制

  • TAPD 只对接需求(stories),不含任务/缺陷;禅道按产品读需求或按项目读执行任务,不含缺陷。
  • 不回写来源系统(不改状态、不写评论)。
  • 不代替 Agent 执行计划;派发后由会话里的 Agent 自己规划与实现。

Related plugins