dsh-jira-tasks
DSH 输入框下方的 JIRA 任务面板:按工作区配置项目 Key 与可选 JQL,展示指派给当前用户的问题,带状态、优先级与类型标签、总数徽标、收起与刷新、跳转 JIRA,并在设置页卡片配置 JIRA 地址与令牌(含连接测试)。
安装
dsh plugin --profile web add dsh-jira-tasks
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
JIRA 开启任务面板(DeepSeek Harness 插件)

中文 · [English](README.en.md)
在 DSH 会话输入框下方展示当前 JIRA 项目指派给当前用户的「开启 / 重新开启」任务列表;并在左侧栏新增 JIRA 统计入口:点开可按本浏览器已配置 / 最近查看的项目 Key 切换,或手动输入编号,查看该项目的任务统计与版本统计列表。JIRA 地址与令牌在设置 → JIRA 配置(设置对话框左侧导航)中配置(JIRA_BASE_URL / JIRA_API_TOKEN 作为回退);项目 Key 与 JQL 按工作区配置并持久化。
适配的 DSH 版本:0.1.7 与 0.2.x(0.1.7-rc.2、0.2.0-rc.2实测,桌面端0.2.1-rc.5运行验证),浏览器(web profile)与桌面端(Electron 独占的 desktop profile)通用。
客户端槽位conversation.input.dock/plugins.item/settings.section/sidebar.panellist/main、设置服务ctx.configForms(命名空间 = profile 条目 idjira-tasks)、ctx.effect/configForms.whileServed的注销契约在 0.1.7 → 0.2.0 之间没有变化(逐包 diff 过),所以同一份lib/同时覆盖两版;0.1.6 及更早版本的settingsScope/settings.register/settings.plugin.item已不再使用。
包内声明了 DSH 兼容范围>=0.1.7-rc.2 <0.3.0-0(engines.dsh+ 可选 peer@deepseek-ai/dsh):0.2.0 起 DSH 会在安装与启动时校验该范围,不满足的版本会被跳过并在插件管理器里给出allow-version精确豁免入口(peer 标了optional,pnpm不会把整套@deepseek-ai/dsh装进 profile)。
功能
- 📋 新会话与活跃会话的输入框下方均展示任务面板(新会话时与输入框等宽)
<img width="1898" height="886" alt="image" src="https://github.com/user-attachments/assets/d14d0bd4-4f9f-4aa8-9af8-b8a02a2b7296" />
<img width="1972" height="746" alt="image" src="https://github.com/user-attachments/assets/9f543e04-a5ad-4b86-85c8-baa2de26f44e" />
- 👤 默认仅显示当前用户(
assignee = currentUser())的「开启 / 重新开启」任务 - ⚙️ 设置 → JIRA 配置(设置对话框左侧导航,位于「Agent 预设」下方)配置 JIRA 地址与访问令牌(令牌写入凭据存储,不回传前端);插件面板里的同一张 JIRA 卡片仍然可用
- 🟢 设置卡片自动探测连接并显示状态灯:绿=可用、红=不可用、灰=未配置;点「测试连接」可用未保存的草稿值即时验证
<img width="1590" height="1574" alt="image" src="https://github.com/user-attachments/assets/af5f11c6-aa9a-4c3b-84ca-cff6c0017b22" />
- ⚙️ 项目 Key 与 JQL 按工作区保存;未配置的工作区显示"未配置"
- 🔄 打开新会话自动查询,面板内支持一键刷新(⟳)
- 🧭 默认折叠,只显示标题与任务数;点击标题可展开 / 收起(标题徽标显示查询命中的任务总数,列表最多展示 50 条,按更新时间倒序)
- 🏷️ 每条任务附状态徽章(按状态分类着色:新建 / 进行中 / 其他)、优先级与类型标签
- 🔗 任务可点击,在新标签页打开 JIRA 详情
- 📊 左侧栏「JIRA 统计」入口:点开是任务统计页 —— 只有一个可下拉的输入框:下拉列出 DSH 里已配置的项目 Key(各工作区保存的),也可直接输入自定义编号;页面保留任务总数 / 完成率概览
- 🧾 版本统计列表:按发布日期倒序列出最近的版本,每页 10 个,可「上一页 / 下一页」翻页;每行给出发布状态、发布日期、任务数、待办 / 进行中 / 已完成与完成率
- 🖱️ 版本名可点击:进入该版本的 JIRA 任务列表 —— 点表头可按编号 / 摘要 / 状态 / 优先级 / 类型 / 负责人 / 更新排序(再点切升降序),默认把本人的任务排在最前,其余按更新时间倒序;任务编号可点开 JIRA 详情
- 💾 统计页记住上次查看的项目编号(
dsh.jiraTasks.stats.v1);第一次打开默认沿用当前工作区面板里配置的项目编号 - 🎨 颜色使用 DSH 主题令牌,浅色 / 深色主题自适应
安装
包已发布到公共 npm(dsh-jira-tasks);仓库的发布工作流同时把同一版本发布到 GitHub Packages(作用域包名 @liu3734/dsh-jira-tasks)。浏览器(web profile)从 npm 安装(推荐):
dsh plugin --profile web add dsh-jira-tasks
或直接从 GitHub 安装(仓库根即包目录,lib/ 为预构建产物):
dsh plugin --profile web add github:liu3734/jira-tasks-dsh-plugin
重启 DSH 后生效。
桌面端(DeepSeek Harness.app)
桌面端不用 web profile,而是 Electron 独占的 desktop profile(~/.dsh/profiles/desktop/)。该 profile 名被应用保留:npm 全局安装的 dsh 会直接拒绝 --profile desktop 的 boot 与 plugin 操作(profile "desktop" is managed exclusively by the Electron application),必须用桌面端自带的命令:
1. 先打开一次桌面端(由应用初始化 desktop profile),然后完全退出桌面端
2. 应用内菜单 → 管理 dsh 命令 / Manage dsh Command → Install,把桌面端自带的 dsh 装进 PATH
3. 安装插件:
dsh plugin --profile desktop add dsh-jira-tasks
4. 确认 ~/.dsh/profiles/desktop/package.json 的 dsh.profile.bundles 里有 "dsh-jira-tasks",再启动桌面端
桌面端渲染进程的 origin 是dsh-app://app。非静态资源的请求由 Electron 转发到本机 Host,所以插件的fetch("/jira/api/search")这类绝对路径照常可用;任务链接的target="_blank"由 Electron 交给系统浏览器打开。项目 Key / JQL 存在该 origin 的 localStorage 里,与浏览器访问http://127.0.0.1:<port>时的配置互不相通,两边各配一次即可。
装完没反应?先查dsh.profile.bundles。 DSH 只有当对应 profile 的package.json(~/.dsh/profiles/web/package.json或~/.dsh/profiles/desktop/package.json)里的dsh.profile.bundles列了"dsh-jira-tasks"时才把本包当作 profile 层挂载;只出现在dependencies里不够——此时启动日志会打patch: entry "jira-tasks" not found,插件静默不加载。dsh plugin --profile <name> add一般会补上这一行,但该包已在dependencies中时重装不会重新补,手动往dsh.profile.bundles追加"dsh-jira-tasks"即可。
若改用 GitHub Packages 源:先在 profile 的.npmrc配置@liu3734:registry=https://npm.pkg.github.com/及读取令牌,再执行dsh plugin --profile web add @liu3734/dsh-jira-tasks。
<details>
<summary>手动安装(不使用 npm)</summary>
1. 将本仓库(仓库根目录即包目录)复制为 profile 内的 packages/dsh-jira-tasks/(可忽略 .git/)——web 用 ~/.dsh/profiles/web/,桌面端用 ~/.dsh/profiles/desktop/
2. 编辑该 profile 的 package.json:
dependencies增加:"dsh-jira-tasks": "file:./packages/dsh-jira-tasks"dsh.profile.bundles追加:"dsh-jira-tasks"
3. 在 profile 目录执行 pnpm install
4. 重启 DSH(桌面端需完全退出后重新打开)
注:pnpm install会把包复制到node_modules/(非符号链接),改动源码后需同步node_modules/dsh-jira-tasks或重跑 install。
</details>
<details>
<summary>动态插件方式(临时,重启后消失)</summary>
在 DSH 会话中用 Cordis 工具执行:cordis_define(kind: new,idPrefix: "jira",源码见仓库 plugin/host.js / plugin/client.js)→ cordis_run 激活。动态插件只存在于进程内存,重启后消失,仅适合临时试用。动态版只包含输入框下方的任务面板,不包含左侧栏的任务统计页(统计页依赖 profile bundle 的完整客户端模块加载顺序与 sidebar.panellist / main 槽位,动态版未适配)。
</details>
配置
1. JIRA 地址与令牌
打开 设置 → JIRA 配置(左侧导航最后一项,在「Agent 预设」下面;插件面板里的 JIRA 卡片是同一张表单),填写:
- JIRA 地址:如
http://jira.example.com/(写入本插件 profile 条目jira-tasks的Config.baseUrl,即 profile 的cordis.patch.yml,可在界面回读;保存被宿主拒绝时会直接报错,不会静默失败) - 访问令牌 / PAT:写入凭据存储(
$DSH_HOME/.credentials.yaml,引用名是插件自有的JIRA_TASKS_TOKEN),前端只显示"已配置",不回传令牌本身
留空并保存会保持已有令牌不变;地址留空并保存则清除设置项,回退到凭据存储 / 环境变量。认证自动识别:令牌含 : 用 Basic,否则用 Bearer(JIRA PAT)。
设置页令牌优先于环境变量:启动 DSH 的环境里已有JIRA_API_TOKEN(Windows 用户级环境变量也算)时,卡片照常可以输入并保存——保存的是插件自有引用JIRA_TASKS_TOKEN,DSH 不会拒绝(它只拒绝写入会被环境遮蔽的同名引用),Host 解析时也把它排在环境变量之前:
```
JIRA_TASKS_TOKEN(设置页) > JIRA_API_TOKEN > JIRA_TOKEN
```
想改回用环境变量,点卡片里的「清除设置页令牌」即可。
连接测试
卡片底部有连接状态灯与 测试连接 按钮:
- 打开卡片时会自动探测一次(请求 JIRA
/rest/api/2/myself),保存后也会自动重测 - 绿 = 地址与令牌可用(并显示当前登录用户);红 = 不可用(显示 JIRA 返回的原因,如 401 认证失败);灰 = 地址或令牌未配置
- 点 测试连接 会用当前输入框里的内容(未保存也可)立即测试,方便改完再存
以下环境变量 / 凭据仍作为回退(设置页未配置 `bas
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:14,最后更新 2026-11-04