dsh-jira
Đã xác minh@zhaoyuzhen99/dsh-jira · v0.3.0 · MIT · Giao diện web
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.
Cài đặt
dsh plugin add @zhaoyuzhen99/dsh-jira Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Phát hành lên npm mà không có repository công khai. Hãy kiểm tra nội dung package trước khi cài.
Thẻ
Tác giả
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,MRstate=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.