Repository navigation
Releases: liu3734/jira-tasks-dsh-plugin
Release list
v1.4.0 — 左侧栏任务统计页
左侧栏任务统计页
- 左侧栏新增「JIRA 统计」入口:项目 Key 下拉来自 DSH 已配置 / 最近查看的 Key,也可手动输入自定义编号
- 概览卡片 + 版本统计列表(按发布日期倒序,每页 10 个,可翻页)
- 点版本名进入版本任务列表:编号 / 摘要 / 状态 / 优先级 / 类型 / 负责人 / 更新 多字段表头排序,默认本人任务在前
- 进入页面 / 切回已看过的项目先用缓存渲染,再后台静默刷新;刷新按钮只在按钮内转圈,失败保留旧内容
- Host 新增
POST /jira/api/stats、POST /jira/api/version-issues(分页扫描 + 整体时间预算 + JQL 转义) - 兼容 DSH 0.1.7 / 0.2.x(桌面端 0.2.1-rc.5 运行验证)
安装:dsh plugin --profile web add dsh-jira-tasks(桌面端用应用自带 dsh 命令),装完完全退出并重启 DSH。
v1.3.1 — JIRA 任务面板默认折叠
变更
- 面板默认折叠:挂载后只显示标题行「JIRA · <项目 Key>」与任务数徽标,点击标题展开,再点收起(原先挂载即展开,占用输入框下方整块高度)
- 折叠状态下自动查询照常执行,徽标数字不受影响
- 无破坏性改动:配置存储键、宿主路由、槽位注册均未变
升级
dsh plugin --profile web add dsh-jira-tasks # 浏览器
dsh plugin --profile desktop add dsh-jira-tasks # 桌面端(用桌面端自带的 dsh 命令)然后硬刷新页面 / 重启客户端。
v1.3.0 — 适配 DSH 0.2.0-rc.2 与桌面端
适配 DSH 0.2.0-rc.2 与桌面端
DSH 0.2.0-rc.2 与 0.1.7-rc.2 之间,本插件用到的接口没有变化(逐包 diff:宿主侧
webServer.register / subprocess.spawn / credentials.resolve / settings.configure /
条目自身 Config,客户端 __ModuleLoader__.load、slots.inject/register、
configForms.get/whileServed、remote.credentials、槽位 conversation.input.dock /
plugins.item / settings.section,以及 ui-session 合并进 SessionStandardProps 的
sessionId 标准座位)。所以 lib/ 与 plugin/ 一行未改,本版是版本声明、桌面端安装
路径与文档,外加一轮真机验证。
元数据
package.json升到 1.3.0,描述覆盖 0.1.7 + 0.2.0 + 浏览器 + 桌面端- 新增 DSH 兼容声明:
engines.dsh与 peer@deepseek-ai/dsh = ">=0.1.7-rc.2 <0.3.0-0"- peer 标
optional是刻意的:DSH 的兼容闸门只读peerDependencies(照常校验并给
出allow-version精确豁免入口),而 pnpm/npm 的 auto-install-peers 不会因此把
整套@deepseek-ai/dsh装进 profile(实测:可选时 +0 包,非可选时 +515 包) - 上界写
<0.3.0-0:DSH 用includePrerelease校验,写<0.3.0会误放0.3.0-rc.x - 下界写
0.1.7-rc.2:0.1.6 及更早没有configForms,本插件不适用
- peer 标
manifest.json补dshVersion(0.2.0-rc.2)/dshVersionRange/verifiedDshVersions/
targetSurfaces(web、desktop)与desktop段(desktop profile、dsh-app://apporigin、
外链交给系统浏览器、localStorage 按 origin 隔离)
桌面端(DeepSeek Harness.app)
桌面端不用 web profile,而是 Electron 独占的 desktop profile;npm 版 dsh 会拒绝
--profile desktop 的 boot 与 plugin 操作(profile "desktop" is managed exclusively by the Electron application),必须用应用内 管理 dsh 命令 / Manage dsh Command 安装的 dsh:
dsh plugin --profile desktop add dsh-jira-tasks两端各配一次项目 Key / JQL:渲染进程 origin 是 dsh-app://app,与非静态资源请求一样会被
Electron 转发到本机 Host(所以插件的绝对路径 fetch("/jira/api/*") 照常可用,任务链接
交给系统浏览器),但 localStorage 按 origin 隔离。README 已补完整步骤与 FAQ。
验证(未改动用户 profile)
| 检查 | 0.1.7-rc.2 | 0.2.0-rc.2 |
|---|---|---|
profile 组装 skippedBundles |
[] |
[] |
POST /jira/api/test |
{"ok":true,…,"user":"刘颖"} |
同 |
POST /jira/api/search(自定义 JQL) |
total 683,issue 字段归一化正常 |
同 |
| 非 POST → 405 | ✔ | ✔ |
__DSH_BOOT__ 含 dsh-jira-tasks 行、/plugins/ 取到 bundle |
✔ 36 KB | ✔ 36 KB |
- 真实
~/.dsh/profiles/desktop与~/.dsh/profiles/web在 0.2.0-rc.2 锚点下组装同样跳过为空 - 兼容闸门边界:
0.1.7-rc.2/0.2.0-rc.2= compatible;0.1.5-rc.2/0.3.0-rc.1/0.3.0= 拒绝并给豁免路径 - 客户端激活桩:三处槽位注册(
conversation.input.dock#jira-open-tasks@10、
plugins.item#jira-tasks@41、settings.section#jira-tasks@30),dock 用 0.2.0 的
{session,input}owner share +sessionId/useWorkspaces标准座位解析出按工作区的
项目 Key 并渲染,设置整页与插件卡片渲染通过(脚本见.audit/verify/) - 桌面端现网核对:应用
Code Cache内含本插件 bundle,localStorage内已有按工作区写入的
dsh.jiraTasks.config.v1
已装旧版的用户:本版无需改任何配置,更新后重启 DSH(桌面端完全退出再打开)即可;
0.1.7 与 0.2.0 共用同一份lib/。
v1.2.0 — 设置导航新增「JIRA 配置」入口
新增:设置导航里的「JIRA 配置」入口
设置对话框左侧导航(「Agent 预设」下方)新增 JIRA 配置 一项,点开就是原来那套 JIRA 地址 / 访问令牌表单:连接状态灯、测试连接(可用未保存的草稿值)、保存、放弃、清除设置页令牌。
- 注册
settings.section(id: "jira-tasks",order: 30—— 大于「Agent 预设」的 20,因此显示在其下方;label: "JIRA 配置");未知 id 由设置外壳回退成默认齿轮图标 - 表单与插件面板卡片共用同一个
JiraSettingsPage:variant: "page"渲染整页(div.jt-set-page+ 标题 + 字段区),否则渲染插件面板卡片(li.jt-set-card),字段区是同一份数组,保存 / 连接探测逻辑不变 plugins.item卡片保留:两个入口共用同一份scope/credentials,且不会同时挂载,状态不会分叉;两处注册各自挂在configForms.whileServed上,宿主未提供jira-tasks命名空间时不显示- 未设置项目 Key / JQL 的配置方式不变(仍在会话面板的 ⚙ 中按工作区配置)
已装 dp 插件的用户:客户端 bundle 由 DSH 的 client-plugin HMR 轮询自动重载;若设置里还没出现「JIRA 配置」,刷新页面或重启 DSH 即可,本版无需改任何配置。
文档与元数据
manifest.json槽位清单补充settings.section,purpose 文案同步- README(中 / 英)所有「设置 → 插件 → JIRA」改为「设置 → JIRA 配置」,架构图与 Client 实现说明同步(顺带修掉英文架构图里多余的一条
└──┘边框)
验证
- 对照 DSH
0.1.7-rc.2源码核对settings.section槽位契约:list / root、options.id/order/label、resolveSlotLabel接受字符串、navIcon对未知 id 回退默认图标 - 桩测试(stub React + DSH 服务直接加载
lib/client.js)30 项断言全通过:三处槽位注册、settings.section的 id / order / label、整页渲染出标题与地址 / 令牌输入框与测试连接 / 保存按钮、plugins.item摘要与详情回归、命名空间未服务时不注册 node --check lib/client.js与package.json/manifest.jsonJSON 校验通过
v1.1.0 — 适配 DSH 0.1.7
适配 DSH 0.1.7(实测 0.1.7-rc.2)
这一版把两半插件都对到 0.1.7 的接口上,并修掉面板被上下文占用环遮挡的问题。
修复
- 面板被占用环遮挡:不再注册
conversation.composer.dock。0.1.7 里该槽位渲染进 InputBar 的.dock—— 一个justify-content:center的横向 flex 行,与右侧上下文占用环并排,整宽面板放进那一行会被压住右侧内容。改为只注册conversation.input.dock(composerStack的纵向整宽行,新会话与活跃会话都会渲染),面板自身order:99排到输入卡之后。 - 设置页在 0.1.7 上不存在:
settingsScope/settings.plugin.item/settings.register已移除,改用ctx.configForms.get("jira-tasks")(命名空间 = profile 条目 id)+plugins.item,并以configForms.whileServed门控。 - 重载时激活失败:两条
webServer路由原先未包ctx.effect,重挂载会撞「重复路由」直接抛错;现已各自持有 disposer,非 POST 返回 405。 - 设置写入静默失败:
ConfigForm.set/unset返回false(宿主拒绝或 memory 模式)时现在会报错。 - React hook 顺序隐患:
plugins.item的摘要位改为零 hook 的分发组件。
安装
dsh plugin --profile web add dsh-jira-tasks装完若面板不出现,先确认 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 里有 "dsh-jira-tasks" —— 只出现在 dependencies 时 DSH 不会挂载,启动日志会报 patch: entry "jira-tasks" not found。
验证
- 临时
DSH_HOME挂载 web profile:POST /jira/api/test以 Bearer 认证到http://192.168.13.101:38081/,返回用户「刘颖」;POST /jira/api/search返回 32 条「开启/重新开启」任务。 - 浏览器实测空会话与活跃会话:面板整宽位于输入框下方,与输入卡对齐,不再与占用环重叠。
dsh-jira-tasks@1.0.8
修复
v1.0.7 在检测到 JIRA_API_TOKEN 由启动环境提供(Windows 用户级环境变量很常见)时禁用了令牌输入框。正确行为是允许输入、并让它覆盖环境变量——本版改回并真正实现覆盖。
DSH 侧只拒绝写入「会被启动环境遮蔽的同名引用」,因此覆盖必须由插件自己完成,而不是直接写 JIRA_API_TOKEN。
变更
-
设置页令牌改写入插件自有引用
JIRA_TASKS_TOKEN(启动环境通常不会导出该名,凭据服务不会拒绝),Host 解析顺序为:JIRA_TASKS_TOKEN(设置页) > JIRA_API_TOKEN > JIRA_TOKEN查询(
POST /jira/api/search)与测试连接(POST /jira/api/test)两条路径一致 -
卡片:令牌输入框始终可编辑,并显示当前生效来源
- 有环境变量、无覆盖 →「当前使用环境变量 JIRA_API_TOKEN;在下方填写并保存即可覆盖它。」(占位符「填写以覆盖环境变量」)
- 已覆盖 →「设置页令牌已保存,优先于环境变量 JIRA_API_TOKEN」
- 新增**「清除设置页令牌(回退到环境变量)」**
- 仅保存令牌时也会自动重测连接(原本只有 baseUrl 变化才重测)
-
回退值按
describe的source区分env/file:老版本存在凭据文件里的JIRA_API_TOKEN仍可读取,且不会被误提示成"环境变量" -
动态插件 Host(
plugin/host.js)同步;中英文 README、manifest.json(新增credentialRefs、优先级说明)同步 -
版本 1.0.8
验证
以假 React/DOM 驱动真实 lib/client.js bundle:环境变量只读时输入框 disabled === false、占位符与提示文案正确、保存确实调用 credentials.set('JIRA_TASKS_TOKEN', …)、清除调用 unset 且提示回退。
以真实 lib/index.js 驱动 /jira/api/search:两个来源同时存在时 Authorization 取设置页令牌且短路不读环境变量;无覆盖时回退 JIRA_API_TOKEN、再回退 JIRA_TOKEN;含 : 的令牌仍走 Basic。
安装/升级后需重启 DSH 生效。
dsh-jira-tasks@1.0.7
修复
Windows 上启动 DSH 的环境里已存在 JIRA_API_TOKEN(用户级环境变量很常见)时,设置卡片仍允许输入令牌并保存,最终把 DSH 的英文错误直接抛给用户:
保存失败:credentials-local: "JIRA_API_TOKEN" is supplied read-only by the launching environment, so set would be shadowed; unset it in the shell you start dsh from instead
根因:卡片虽然已经通过 credentials.describe 拿到 writable: false,但该字段从未被使用——输入框与「保存」按钮的 disabled 只按设置命名空间的 writable(只管 baseUrl)判断。
变更
- 令牌只读时:禁用输入框、占位符显示「由环境变量提供(只读)」,并在卡片内给出中文说明(含 Windows 移除命令)
- 保存路径双重兜底:即使写入仍被拒绝,也把
is supplied read-only by the launching environment原文映射为可操作的中文提示 readTokenInfo返回命中的引用名与真实writable;状态读取失败不再伪装成「只读」,不阻断保存- 中英文 README 同步(配置说明 + FAQ);版本 1.0.7
环境变量已生效时面板本来就能查询,无需在设置页保存;要改由设置页管理令牌,先移除环境变量并重启 DSH:
[Environment]::SetEnvironmentVariable('JIRA_API_TOKEN', $null, 'User')
安装/升级后需重启 DSH 生效。
dsh-jira-tasks@1.0.6
新特性
设置卡片(设置 → 插件 → 插件配置 → JIRA)新增连接测试与状态灯。
- 状态灯:绿 = 地址与令牌可用(显示当前登录用户);红 = 不可用(显示 JIRA 返回原因,如 401);灰 = 地址或令牌未配置
- 自动测试:打开卡片时探测一次(
GET /rest/api/2/myself),保存配置后自动重测 - 测试连接 按钮:用输入框中的未保存草稿值即时验证,方便改完先测再存
实现
- Host 新增
POST /jira/api/test,返回{ ok, code, error, user }(code∈unconfigured|auth|http|network),草稿值优先、回退已保存设置与环境变量 - Client 以代际计数避免自动测试与手动测试的结果乱序覆盖
- 中英文 README 同步;版本 1.0.6
安装/升级后需重启 DSH 生效。
dsh-jira-tasks@1.0.5
新特性
JIRA 地址与访问令牌从环境变量/凭据文件迁移到 设置 → 插件 → 插件配置 → JIRA,成为正式的插件设置项。
- JIRA 地址:存入用户设置文档(settings 命名空间
jira-tasks),界面可回读 - 访问令牌 / PAT:写入凭据存储(
$DSH_HOME/.credentials.yaml),前端只显示"已配置",令牌永不回传 - 留空保存保持令牌不变;地址清空则回退环境变量
JIRA_BASE_URL/JIRA_URL与JIRA_API_TOKEN/JIRA_TOKEN仍作为回退,兼容旧部署
依赖与兼容
- 新增依赖
@deepseek-ai/schemastery(用于声明设置命名空间 schema) - 项目 Key / JQL 仍按工作区在会话面板 ⚙ 中配置,行为不变
- 安装/升级后需重启 DSH 生效
dsh-jira-tasks@1.0.4
docs: 安装/卸载改为 web 浏览器 profile(dsh web)
- 四份 README(中/英、仓库与 npm 包)desktop → web
- manifest profileDir 同步为 $DSH_HOME/profiles/web
- 代码无变化(1.0.3 行为不变)