Skip to content

Releases: liu3734/jira-tasks-dsh-plugin

v1.4.0 — 左侧栏任务统计页

Choose a tag to compare

@liu3734 liu3734 released this 04 Nov 08:07

左侧栏任务统计页

  • 左侧栏新增「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 任务面板默认折叠

Choose a tag to compare

@liu3734 liu3734 released this 10 Oct 09:31

变更

  • 面板默认折叠:挂载后只显示标题行「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 与桌面端

Choose a tag to compare

@liu3734 liu3734 released this 29 Sep 14:28

适配 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,本插件不适用
  • manifest.json 补 dshVersion(0.2.0-rc.2)/ dshVersionRange / verifiedDshVersions /
    targetSurfaces(web、desktop)与 desktop 段(desktop profile、dsh-app://app origin、
    外链交给系统浏览器、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 配置」入口

Choose a tag to compare

@liu3734 liu3734 released this 25 Sep 06:19

新增:设置导航里的「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.json JSON 校验通过

v1.1.0 — 适配 DSH 0.1.7

Choose a tag to compare

@liu3734 liu3734 released this 25 Sep 05:46

适配 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

Choose a tag to compare

@liu3734 liu3734 released this 20 Sep 04:22

修复

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

Choose a tag to compare

@liu3734 liu3734 released this 20 Sep 03:59

修复

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

Choose a tag to compare

@liu3734 liu3734 released this 10 Sep 08:48

新特性

设置卡片(设置 → 插件 → 插件配置 → 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

Choose a tag to compare

@liu3734 liu3734 released this 10 Sep 07:27

新特性

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

Choose a tag to compare

@liu3734 liu3734 released this 03 Sep 10:57

docs: 安装/卸载改为 web 浏览器 profile(dsh web)

  • 四份 README(中/英、仓库与 npm 包)desktop → web
  • manifest profileDir 同步为 $DSH_HOME/profiles/web
  • 代码无变化(1.0.3 行为不变)