Skip to content

dsh-jira

Verified

@zhaoyuzhen99/dsh-jira · v0.3.0 · MIT · Web UI

DSH Web GUI plugin「工作任务」: Host-authoritative board with Jira Filter inbox, local drafts, ledger tasks, task-scoped Git workflow, and project-level GitLab observer columns.

Install

dsh plugin add @zhaoyuzhen99/dsh-jira

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Published to npm without a public repository. Inspect the package contents before installing.

Tags

Creators

Readme

dsh-jira

English | 中文

DSH Web GUI 插件 工作任务(包名 @zhaoyuzhen99/dsh-jira):Host 权威看板,含侧栏入口、中列看板、账本与真实会话执行、Jira Filter 待规划(转为待办/转回)、本地草稿,以及完成态任务驱动的 Git 查阅(提交 / Pipeline)。独立仓,验收后最终替换「任务看板」入口。

是什么

P1 — 看板壳(已完成):

  • 侧栏入口「工作任务」
  • 中列看板:待规划 / 待办 / 进行中 / 已完成 / 已失败
  • Host 账本:$DSH_HOME/work-task/ledger-v2.json
  • 同源 API:/api/work-task/*
  • 创建 / 更新 / 移列 / 归档 / 执行 / 重跑;新建默认进待办
  • 设置卡由产品按 volatile Host Config 自动渲染(enabled / announceToAgent / preventIdleSleep / Jira / GitLab / rotate)
  • P0 凭据 seam 探测保留

P2 — Jira 待规划(已完成):

  • Server/DC REST v2 GET /rest/api/2/search?jql=filter=<id> + Basic Auth,仅 filter=<id> 不追加 assignee
  • cleanDescription / JOYP 优先排序与 AionUi 一致
  • 待规划列展示远端 Jira Issue 和本地草稿;失败保留上次成功快照并标记 stale
  • claim-inbox → 待办(prompt=标题+清洗后描述,持久化 source);unclaim-inbox 允许 todo/backlog:无历史则删除,有执行/Git/审计则保留为无来源本地草稿并解除占用;running 不可转回

P3 — GitLab 不是待规划来源:

  • 待规划只含 Jira Filter + 本地草稿,不列出、不认领 GitLab Issue。
  • GitLab 凭据和项目设置仍用于观察列与任务级 Git(关联 / 建分支 / 建 MR)。

P4 — 项目级 Git 观察(已完成,看板默认不展示):

  • Host 仍按「观察代码库」勾选轮询各仓默认分支的 commits / pipelines / MRs(只读)。这是后台观察,不是看板默认两栏,也不轮询任务 issue 分支。
  • 看板默认只显示业务列,右侧 Git 收起。完成状态卡片点 Git查阅 后,Git 提交 / 状态作为查阅面板从右侧滑入,只显示该任务 localCommits;当前行高亮,其它行「未查阅」。「请求提交」先合 origin/dev 再 push,冲突则提示「分支代码冲突,请解决代码冲突。」push 成功后再展开 Git 状态。详见 观察列与配置迁移、git-view-redesign-requirements.html。
  • 任务详情:六个仓共用一个分支名,每个仓独立关联 / 提交 / MR / 合并状态。
  • 看板是 行道布局:每个 Issue 固定行号,待办 / 进行中 / 完成 / Git 查阅与待规划同一行;已流转实线、未到达点线(例如 JOYP-15199 在第 3 行,认领后仍在第 3 行)。设计稿见 dsh.pen 看板 v2。

P5–P8 — 看板、任务级 Git 与状态治理(当前):

  • 中英 i18n、语义属性、无障碍 focus 环、prefers-reduced-motion
  • 任务级 Git 关联 / 建分支 / 建 MR(P6–P7):六个仓共用一个分支名,每个仓独立提交与 MR。「建议完成」永不自动结算(D7)。操作者用「标记完成」(complete-task)确认:只改本地账本+审计,不写回 Jira 状态。
  • Host 审计时间线(认领、转回、结算、Git 关联/写/合并、重新打开、归档、确认完成、经办人写回)。运行中可「取消执行」。
  • 已认领的 GitLab Issue(历史账本)按 iid 定点补拉(每轮 ≤20)。closed 更新远端快照并提示冲突;404 不进「来源不再匹配」(待规划不再含 GitLab Issue)。

安装

从仓库安装(开发调试)

cd dsh-jira
pnpm install --ignore-scripts
pnpm run build
dsh plugin --profile web add link:$(pwd)

重启 dsh web 使 cordis.patch.yml 生效。开发期可与旧「任务看板」并存;P5 验收后通过 aggregate 移除旧入口。

配置(命名空间 work-task)

键 默认 含义
enabled true 总开关
announceToAgent false 是否写入 system prompt
preventIdleSleep false 有执行时阻止空闲睡眠
jiraServerUrl "" 公司内网 Jira 基地址(如 http://192.168.20.218:9091)
jiraFilterId "" 已保存过滤器 ID;待规划展示其全部 Issue
jiraMaxResults 50 Jira 最大条数(1-200)
allowJiraAssigneeWrite false 是否允许在 Issue 详情修改 Jira 经办人;Host 强制校验,脱敏事件写入任务审计时间线与 Host 日志
gitlabEndpoint "" 公司内网 GitLab 基地址
gitlabObservedProjects [] 观察代码库(group/repo 列表)。空且已填 endpoint 时 Host 视为现场六库全开
gitlabProjectId "" 遗留键。UI 已去掉默认项目;仅当观察列表为空时作为唯一观察仓
trustedProxyHosts [] 反向代理白名单
proxyTokenEnv "DSH_WORK_TASK_PROXY_TOKEN" 代理 token 环境变量

凭据引用(值不进 settings,走 dsh-credentials):

  • DSH_JIRA_USERNAME / DSH_JIRA_PASSWORD(Basic Auth)
  • DSH_GITLAB_TOKEN(PRIVATE-TOKEN)

连接测试:POST /api/work-task/test-jira 与 /test-gitlab(loopback + Sec-Fetch-Site 围栏,响应不含秘密)。

安全模型

  • 账本与 Jira/GitLab 取数及凭据解析均在 Host;浏览器仅访问同源 /api/work-task/* 的脱敏 snapshot。
  • 仅允许内网 endpoint:http/https、无 userinfo/fragment、精确 Host allowlist 或私网 CIDR(10/8、172.16/12、192.168/16、fc00::/7)、DNS 二次校验、redirect:'error'、公网 SaaS(gitlab.com、atlassian.net…)硬阻断。
  • 每次请求前校验内网,不记录 Authorization/PRIVATE-TOKEN,不提供公网默认值,禁止 rejectUnauthorized: false。
  • Jira/GitLab 默认只读;仅当 allowJiraAssigneeWrite=true 时,Host 允许修改 Jira 经办人。「标记完成」不写回 Jira 状态。经办人写回的成功和失败均写入 Host 日志与账本审计时间线(匹配的已认领任务可见),事件不含凭据和目标用户名。其他看板动作只改本地账本。

已知限制

  • Cron 定时 UI 来自 fork 复制,P1-P4 不要求调度迁移(C13)。
  • 设置界面不假设可调 credentials.set;密钥通过 DSH 凭据管理器写入(C8)。
  • Host 仍可约每 30 秒轮询各仓默认分支,但这些观察卡片不再默认画在看板。完成态 Git 查阅使用账本 localCommits。任务级刷新按已关联仓的共用分支名(commits 带 ref_name,MR state=all 且按源分支,pipelines 按 ref)。SSE 仍按 revision 全量重拉 /state。Inbox 无「加载更多」UI(Host 分页至 200 + 截断提示)。
  • 「测试 GitLab 连接」仍读取遗留 gitlabProjectId;只勾观察代码库时测试按钮可能报未配置,观察列本身以 Token + endpoint + 观察列表为准。
  • 完成状态里执行失败或已归档的卡片仍打开完整任务详情。成功卡打开改动复核(按仓 .ts/.cs 文件、补充修改 follow-up 上一会话);仓头「提交代码」只在该仓建 {Issue}{标题去空格}_{时间戳} 分支并本地 commit,不 push,成功后关闭弹窗。完成态点「Git查阅」后看板才出现该仓「Git 提交」卡片;点「请求提交」先合 origin/dev 再 push,冲突则提示解决。GitLab 网页出现的「Create merge request」(/-/merge_requests/new?source_branch=…)不是看板已建 MR。push 后「Git 状态」按该分支叠 Pipeline / 单元测试:未检测 / 检测失败 / 正在编译(黄)/ 未通过(红)/ 通过(绿);仅「通过」时出现「请求合并」,点了才建 MR(目标 dev)。结算时未扫到 diff 的旧账本会显示「未检出文件改动」。看板「成功」不等于 View 模块已 gulp。

许可证

MIT.