dsh-zentao-panel 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,119 @@
2
2
 
3
3
  本项目所有显著变更记录于此。版本号遵循 SemVer。
4
4
 
5
+ ## [Unreleased]
6
+
7
+ 暂无。
8
+
9
+ ## [0.3.0] - 2026-10-25
10
+
11
+ ### 新增
12
+
13
+ - **账号别名**:每个禅道账号可设置别名方便区分——账号菜单里点 ✎ 行内编辑(回车或 ✓ 保存、
14
+ Esc 取消,留空即清除),添加账号时也可顺手填写;头部账号 chip 与页脚优先显示别名,
15
+ 账号菜单里原账号 + 实例地址下沉为副行。别名只存本机(config.json `alias` 字段,≤30 字),
16
+ 重新登录/upsert 不会抹掉已设别名。新增 `zentao.rename` RPC(空串 = 清除)。
17
+ - **列表搜索与排序**:tab 行右侧新增搜索框(标题 / #ID / 状态 / 创建人/指派人,多关键词空格分隔、
18
+ 全命中才显示)与排序下拉——「智能排序」(逾期 > 临期 > 按截止 > 按优先级,已完结沉底,默认)、
19
+ 按截止、按优先级、默认顺序;截止时间**临期(≤3 天)橙色、逾期红色**高亮,悬停显示逾期天数。
20
+ - **列表快照秒开**:卡片列表按账号快照在本机(mine.v1),DSH 重启或重开面板先用上次列表渲染
21
+ (页脚带「HH:mm 缓存」)再后台静默刷新;禅道暂时连不上时旧数据 + 时间戳即兜底视图,
22
+ 不再是一片骨架/错误页。登出或移除账号时快照一并清除。
23
+ - **处理结果回读**:详情页新增「处理结果(关联会话最新回复)」区——不出面板直接看关联 DSH 会话里
24
+ agent 的最后一条回复。点开详情且卡片「已完成」时自动读取并缓存(10 分钟内不重复拉,失败 60 秒
25
+ 防抖冷却),处理中/等决策状态也可手动「重新读取」;再处理换会话、会话被删、卡片离开列表超宽限期
26
+ 时缓存联动清理。
27
+ - **回复 Markdown 渲染**:处理结果按 markdown 排版渲染(标题/段落/粗斜体/行内代码/链接/代码块/
28
+ 引用/分级列表/分隔线/表格;自研轻量渲染器,元素树直出无 innerHTML),限高 360px 内部滚动,
29
+ 完整内容不截断(缓存上限 20000 字仅防炸兜底;旧版截 500 字的缓存自动判定不完整并重拉)。
30
+ - **智能排序感知处理状态**:「智能排序」把卡片的实时处理状态排进优先级——**等你决策**的卡片
31
+ 永远第一屏置顶(哪怕截止还远),**处理中**紧随其后,**已完成**(禅道侧未完结)沉到普通卡片
32
+ 之后、终态之前;状态来自实时监控 + 持久化进度,重启后依然生效。按截止 / 按优先级 / 默认顺序
33
+ 不受影响(显式选了维度就尊重它)。
34
+ - **会话头部反向跳转**:处理过的 DSH 会话,头部出现「禅道」小按钮——点击切回禅道面板并**自动
35
+ 选中该卡片**打开详情(面板 → 会话 → 面板闭环打通)。卡片属于其他账号时先自动切换账号再定位;
36
+ 卡片已离开「指派给我」列表则停在对应分类页。未关联禅道卡片的会话不显示该按钮。
37
+ - **详情页「最近动态」**:同事备注 / 流转记录(指派、转派、优先级与截止日变更)/ 字段新旧值对照
38
+ 以时间线显示在详情里(默认折叠显示最近 5 条,可展开全部;备注里的截图也以真实图片渲染),
39
+ 不用切回禅道网页看讨论。
40
+ - **自动轮询与在线状态**:面板打开时每 5 分钟静默刷新列表;头部标题旁有连接状态小点
41
+ (绿 = 已连 / 红 = 不可达 / 灰 = 未知),禅道不可达时列表上方常驻提示条展示缓存时间并可一键重试。
42
+ - **新指派提醒**:轮询发现「指派给我」的**新增**事项时弹 toast(「禅道新指派 2 条(任务×1 · Bug×1)」),
43
+ 基线按账号记忆、面板重开不重复提醒。
44
+ - **批量处理 / 批量插入**:列表进入多选模式后可跨分类勾选一批事项,合并为一份任务背景
45
+ (图片合并上限 20 张 = DSH 单消息上限)一次下发给 agent;成功后每张卡片都关联同一会话,
46
+ 徽标 / chip / 反向跳转照常工作。
47
+ - **详情图片双层缓存**:看过的截图在 client(40 张 / 24MB)与 host(10 分钟 TTL / 32MB)各缓存一份,
48
+ 重开详情、面板切走再切回、详情看过的图点「处理」都不再重新下载转圈。
49
+ - **下发弹层「附加指令」**:「处理 / 插入」弹层新增可选输入框(如「只分析定位原因,先不要改代码」),
50
+ 以「## 处理要求」拼到任务背景末尾,单卡与批量共用;记住上次输入,下次打开自动带出。
51
+ - **流程看板**:新增「流程」视图——待处理 / 处理中 / 等你决策 / 已完成待闭环 四列泳道
52
+ 同屏展示全局态势(跨任务/Bug/需求,逾期红标、临期橙标、旗标点),列内再按 任务/Bug/需求
53
+ 分组;点缩略卡回列表打开详情(列表自动滚动定位),视图选择自动记忆;数据实时联动,零新增请求。
54
+ - **卡片回复摘要行**:处理过的卡片在列表里直接显示 agent 最后回复的一行预览(悬停看全文),
55
+ 不用点开详情就知道结论;换会话再处理后旧回复自动不显示。
56
+ - **决策应答台**:卡片「等你决策」时详情页顶部出现应答框——一键「同意,继续执行」或自定义
57
+ 答复,直接在禅道面板里拍板,不用跳转会话;agent 的提问同步自动读取。
58
+ - **本地备注**:卡片可写自己的备忘(如「等张三回复后再动」),卡片上一行摘要、详情页编辑,
59
+ 仅本机可见不回写禅道;事项离开指派列表超宽限期自动清理。
60
+ - **继续处理**:处理过的卡片在详情页「继续处理…」往**关联的那个会话**追加指令
61
+ (如「按刚才的分析把代码改了」),不开新会话丢上下文;会话在跑时自动排队。
62
+ - **一键复制**:卡片一键复制「#ID 标题」(贴 IM 问同事),详情页一键复制完整 Markdown
63
+ (标题 + 描述/重现步骤);剪贴板带老环境兜底。
64
+ - **旗标与隐藏**:卡片可打旗标(重点关注,快捷筛选新增「已标记」维度)或本地隐藏
65
+ (不回写禅道,默认从列表滤掉;页脚「显示已隐藏」临时查看与找回);标记按账号隔离,
66
+ 事项离开指派列表超宽限期自动清理。
67
+ - **极速重发**:卡片上 ⚡ 按钮——记住上次成功下发的工作区/模型/思考强度/附加指令,
68
+ 同类问题不用再过弹层直接重发;悬停可看将使用的配置摘要。
69
+ - **快捷筛选条**:列表上方一行筛选 chip——**等你决策 / 处理中 / 逾期 / 今天到期 / 已完成**一键过滤,
70
+ 激活时跨任务/Bug/需求合并展示(叠加搜索词),计数实时联动;点分类 tab 即回到分类视图。
71
+ - **指令模板预设**:附加指令支持多套模板——textarea 下方 chip 行一键填入(悬停看全文)、× 删除、
72
+ 「+ 存为预设」把当前输入存成模板;全文去重、最多 12 条(超限最旧先出),本机持久化。
73
+ - **完成后一键去禅道闭环**:卡片处理完(绿勾)后,详情页出现「去禅道标记完成」按钮,深链到
74
+ 禅道的完成 / 解决 / 关闭操作页(`task-finish` / `bug-resolve` / `story-close`),由你在禅道表单里
75
+ 确认提交——插件保持只读,不做任何 API 回写。
76
+
77
+ ### 变更
78
+
79
+ - 列表卡片选中态视觉加强:全高类型彩条 + 阴影浮起 + 右移示意 +「查看中」文字角标,
80
+ 当前查看的卡片一眼可辨(用户反馈两轮加强)。
81
+ - 会话头部「禅道」按钮跳回面板后,列表自动滚动定位到目标卡片(此前只选中不滚动)。
82
+ - README 补充真实界面截图(Bug 列表页),安装命令中的 DSH 应用路径修正为
83
+ `DeepSeek Harness.app`。
84
+
85
+ ### 修复
86
+
87
+ - **需求(story)详情 404**:v1 路径复数是 `stories`,此前误拼成 `storys` 导致需求详情自首个版本起
88
+ 一直报「不存在」。
89
+ - host.mjs 端到端测试的凭据解析升级到多账号 schema v2(环境变量 → `$DSH_HOME` 配置激活账号 →
90
+ 只读兜底真实 `~/.dsh` 配置),登录失败明确报错退出不再崩栈。
91
+
92
+ ## [0.2.1] - 2026-10-25
93
+
94
+ ### 新增
95
+
96
+ - **处理进度持久化**:卡片的活性状态(处理中 / 等你决策 / 已完成)落盘 localStorage
97
+ (`states.v1`,按禅道账号隔离),DSH 重启或重开面板后徽标立即恢复——包括 DSH 关闭期间
98
+ 后台会话跑完的那些。「已完成」是粘性进度记录:看过关联会话后仍然保留,直到再次处理、
99
+ 会话被删或卡片离开列表;徽标悬停可见进度更新时间。
100
+ - **陈旧事项定时清理**:每次拉取「指派给我」列表后顺带清理——已不在列表中(完结 / 转派)
101
+ 超过 72 小时的卡片,其会话关联与进度记录一起删除;在线卡片刷新 `lastSeen` 计时基准
102
+ (每小时最多写一次盘)。
103
+
104
+ ### 变更
105
+
106
+ - **「插入对话」改版为弹层式新会话**:点击后与「处理」同样先选工作区、接入模型与思考强度,
107
+ 确认后新建会话并**自动跳转过去**,任务背景与截图已填入草稿但**不会自动发送**——检查或
108
+ 修改后再手动发送;「处理」保持后台发送、不跳转。新会话创建失败时降级为插入当前会话
109
+ 输入框(原行为,再兜底剪贴板)。
110
+
111
+ ### 修复
112
+
113
+ - **正看着的会话跑完不标记「已完成」**:宿主的完成未读信号只对后台会话置位——用户正在
114
+ 看的会话(「插入对话」跳过去手动发送、或中途点 chip 去看过)跑完永远不产生该信号,
115
+ 此前被漏成「无状态」。现「处理中」消失且有结束确认信号时直接记为「已完成」;
116
+ 「等你决策」消失仍视为已回应(agent 会继续跑)。
117
+
5
118
  ## [0.2.0] - 2026-10-25
6
119
 
7
120
  ### 新增
package/README.md CHANGED
@@ -1,27 +1,66 @@
1
1
  # dsh-zentao-panel
2
2
 
3
- DeepSeekRuntime 的禅道(ZenTao)工作台插件:在 DSH **左侧边栏**里以一个**禅道**图标
3
+ DeepSeek Harness(DSH)的禅道(ZenTao)工作台插件:在 DSH **左侧边栏**里以一个**禅道**图标
4
4
  作为入口(与「记忆系统」同款形式,位于其下方),点开后禅道面板占据主区域,查看
5
5
  **指派给我**的任务 / Bug / 需求,一键把卡片转成 DSH 对话上下文。
6
6
 
7
+ ![真实截图:Bug 列表页——快捷筛选、搜索与智能排序、逾期高亮、处理状态徽标、关联会话与最近回复摘要](docs/bug-list.webp)
8
+
7
9
  ## 功能
8
10
 
9
11
  - 左侧栏全局面板:任务 / Bug / 需求三个分段标签,卡片列表 + 详情;
12
+ - **列表搜索与排序**:tab 行右侧搜索框按标题 / #ID / 状态 / 创建人实时过滤(多词空格分隔、
13
+ 全命中才显示),排序可选「智能排序」(逾期 > 临期 > 按截止 > 按优先级,已完结沉底)/
14
+ 按截止 / 按优先级 / 默认顺序;**截止临期(≤3 天)橙色、逾期红色**高亮,一眼看到最急的活;
15
+ - **快捷筛选条**:列表上方一键过滤「等你决策 / 处理中 / 逾期 / 今天到期 / 已完成」(跨任务/Bug/需求
16
+ 合并展示,计数随搜索联动),比切排序更直接;
17
+ - **秒开与离线兜底**:列表按账号快照在本机,DSH 重启或重开面板先显示上次列表(页脚带
18
+ 「HH:mm 缓存」时间)再后台刷新;禅道暂时连不上也能看到旧数据而不是一片空白;
19
+ - **处理结果回读**:处理完的卡片在详情页直接显示**关联会话里 agent 的最新回复摘要**
20
+ (点开详情且已完成后自动读取并缓存,也可手动「重新读取」),不用切过去翻会话;
10
21
  - **多账号**:可保存多个禅道账号(同实例换账号、多实例混用都行),头部账号菜单一键切换,
11
- 切换即时生效不用重新登录(每账号独立 cookie/缓存),也可按账号移除;
12
- - 卡片拖拽/点击插入对话输入框(精简 Markdown:标题 + 描述/重现步骤,不带元信息/原地址/页脚);
22
+ 切换即时生效不用重新登录(每账号独立 cookie/缓存),也可按账号移除;每个账号可设
23
+ **别名**(账号菜单里点 ✎ 行内编辑,或添加账号时填写),头部账号 chip 与页脚显示别名、
24
+ 原账号+实例地址下沉到副行,多个账号一眼区分(别名只存本机,最多 30 字,留空即清除);
25
+ - 卡片拖拽进对话输入框(精简 Markdown:标题 + 描述/重现步骤,不带元信息/原地址/页脚);
26
+ - **「插入对话」按钮**:先弹窗选**工作区**、**接入的模型**与**思考强度**(同「处理」),确认后新建会话、
27
+ **自动跳转过去**,任务背景与截图已填入草稿,**不会自动发送**——检查/改完再点发送;
13
28
  - **描述里的截图变成真实图片**:插入时把禅道 `<img>`(含列表接口的 `{35861.png}` 占位符)
14
- 下载下来,作为 DSH 图片附件挂到输入框,发送后模型真的能看到图;
29
+ 下载下来,作为 DSH 图片附件挂到草稿,发送后模型真的能看到图;
15
30
  - 「处理」按钮:先弹窗选**工作区**、**接入的模型**(按接入方分组)和**思考强度**(默认带出当前会话的
16
31
  在用项),确认后新建会话、按所选模型设置并自动下发任务背景提示词(含图片附件);下发**不会跳转视图**,
17
32
  你仍留在禅道面板继续挑活,卡片上会亮出该会话的状态与入口(要过去再点 chip);
18
- - **关联会话跳转**:处理过的卡片左侧会出现会话 chip(显示该 DSH 会话标题),点击即可跳回那个会话
19
- 继续跟进;会话被删除后 chip 显示「会话已删除」,点击清除标记。关联按禅道账号隔离,只存本机
20
- localStorage,不落任何远端;
33
+ - **关联会话跳转(双向)**:处理过的卡片左侧会出现会话 chip(显示该 DSH 会话标题),点击即可跳回
34
+ 那个会话继续跟进;反过来,处理过的会话头部也会有「禅道」小按钮,点击切回禅道面板并**自动定位
35
+ 选中该卡片**(列表自动滚动到位,跨账号自动切换)。会话被删除后 chip 显示「会话已删除」,点击清除
36
+ 标记。关联按禅道账号隔离,只存本机 localStorage,不落任何远端;
21
37
  - **实时状态(处理中的任务一目了然)**:处理过的卡片 chip 前有活性状态点;会话在跑 → 卡片亮蓝色
22
38
  「处理中」胶囊(三点跳动);agent 等你拍板 → 琥珀色「等你决策」(呼吸描边);后台会话跑完 →
23
39
  绿色「已完成」徽标,同时弹提醒条,点「去看看」直接跳回那个会话。提醒不依赖面板是否打开
24
40
  (正开着的会话完成不重复提醒;装了 dsh-notify-me 的话系统通知照发,两条通道独立);
41
+ - **详情页「最近动态」**:同事备注 / 流转记录(指派、转派、优先级与截止日变更)/ 字段新旧值对照,
42
+ 以时间线直接显示在详情里(默认折叠显示最近 5 条,可展开全部;备注里的截图也以真实图片渲染),
43
+ 不用切回禅道网页看讨论;
44
+ - **自动轮询 + 在线状态 + 新指派提醒**:面板打开时每 5 分钟静默刷新;标题旁连接小点
45
+ (绿 = 已连 / 红 = 不可达),禅道连不上时列表上方常驻提示条(展示缓存时间、可重试);
46
+ 轮询到**新指派**弹提醒(「禅道新指派 2 条(任务×1 · Bug×1)」),按账号记忆不重复提醒;
47
+ - **流程看板**:head「流程」切换——四列泳道(待处理/处理中/等你决策/已完成待闭环)同屏
48
+ 看全局,列内再按 任务/Bug/需求 分组,点卡回列表定位(自动滚动到卡片),视图自动记忆;
49
+ - **回复摘要行 / 决策应答台**:处理过的卡片显示 agent 最后回复的一行预览;「等你决策」时
50
+ 在详情页直接回复 agent(一键同意或自定义答复),不用跳会话;
51
+ - **本地备注 / 继续处理**:卡片自己的备忘(仅本机可见,卡片摘要 + 详情编辑);处理过的卡片在
52
+ 详情页往关联会话**追加指令**继续执行,不开新会话丢上下文;
53
+ - **一键复制 / 旗标隐藏 / 极速重发**:卡片复制「#ID 标题」贴 IM、详情复制完整 Markdown;
54
+ 卡片可打旗标(「已标记」一键筛选)或本地隐藏(页脚找回);⚡ 按上次配置直接重发同类任务;
55
+ - **批量处理 / 批量插入**:多选模式跨分类勾选一批事项,合并成一份任务背景一次下发
56
+ (图片合并上限 20 张);每张卡片都关联同一会话,徽标 / chip 照常工作;
57
+ - **详情图片双层缓存**:看过的截图 client + host 各缓存一份,重开详情 / 面板切回 /
58
+ 详情看过的图点「处理」都不再重新转圈;
59
+ - **下发「附加指令」**:「处理 / 插入」弹层可选输入框(如「只分析定位原因,先不要改代码」),
60
+ 拼到任务背景末尾,单卡与批量共用;记住上次输入,且支持**多套模板预设**(chip 一键填入、
61
+ × 删除、「存为预设」新增,最多 12 条);
62
+ - **完成后一键去禅道闭环**:卡片绿勾(已完成)后详情页出现「去禅道标记完成」,深链到禅道的
63
+ 完成 / 解决 / 关闭操作页,由你确认提交——插件保持只读;
25
64
  - 登录态持久化(30 天免登),会话失效自动重登;
26
65
  - 全部颜色走 DSH 语义 token(`--dsw-alias-*`),日间 / 夜间自动跟随;
27
66
  - 只读,不回写禅道。
@@ -32,19 +71,24 @@ DeepSeekRuntime 的禅道(ZenTao)工作台插件:在 DSH **左侧边栏**
32
71
  - **M1** ✅ host 插件:登录(30 天免登 cookie)/ my-work 三接口 / v1 详情 / loopback RPC
33
72
  - **M2** ✅ client 入口:左侧栏全局面板(`sidebar.panellist` 图标行 + `main` keyed 面板,
34
73
  参照 dsh-mnemon 的「记忆系统」);旧版 DSH 没有这两个 slot 时自动退回悬浮按钮 + 侧滑面板
35
- - **M3** ✅ 插入输入框(服务级 setDraft + 真实图片附件 → composer DOM → 剪贴板兜底)+
36
- 新会话下发(后台 retain 保活,不打断当前视图)
37
- - **M4** ⏳ 自动刷新、错误提示打磨
74
+ - **M3** ✅ 「插入对话」弹层式新会话(选工作区/模型 → 建会话 → 自动跳转 → 只填草稿不自动发送;
75
+ 服务缺失时降级:服务级 setDraft → composer DOM → 剪贴板)+
76
+ 「处理」新会话下发(后台 retain 保活 + 自动发送,不打断当前视图)
77
+ - **M4** ✅ 打磨:自动轮询(5 分钟)+ 在线/离线状态 + 新指派提醒;列表搜索/排序/逾期高亮;
78
+ 快照秒开 + 离线兜底;批量处理/批量插入;详情图片双层缓存;下发「附加指令」;完成后一键去禅道闭环
38
79
  - **M5** ✅ 多账号:配置 schema v2(accounts[] + activeId,旧单账号自动迁移)、
39
80
  每账号独立 client/cookie/缓存、账号菜单切换/添加/按账号移除
40
81
  - **M6** ✅ 实时状态:卡片活性徽标(处理中/等你决策/已完成)+ 完成/等决策常驻提醒
41
- (信号来自 DSH 宿主 `uiSession.sessionStatus`,零轮询)
82
+ (信号来自 DSH 宿主 `uiSession.sessionStatus`,零轮询)+ 处理进度持久化(重启后徽标恢复)
83
+ - **M7** ✅ 详情页「最近动态」时间线(v1 actions:备注/流转/字段变更,折叠展示、备注截图真实渲染);
84
+ 修复需求(story)详情自 M3 起一直 404 的问题——v1 路径复数是 `stories`,此前误拼成 `storys`
42
85
 
43
86
  ## 测试
44
87
 
45
88
  ```bash
46
- node test/client.mjs # client 半边:bundle 装载 + 左侧栏注册契约(无需 DSH)
89
+ node test/client.mjs # client 半边:bundle 装载 + 注册契约 + 纯函数(无需 DSH)
47
90
  node test/multi.mjs # 多账号:store 迁移/切换/缓存隔离/移除(mock,不打网络)
91
+ node test/protocol.mjs # 禅道响应信封协议 + actions 映射(stub fetch,不打网络)
48
92
  DSH_HOME=/tmp/zt-smoke node test/smoke.mjs # 直连真实禅道验证 client/service(需内网可达)
49
93
  DSH_HOME=/tmp/zt-host node test/host.mjs # apply() + RPC wire 协议端到端(mock ctx,真实禅道)
50
94
  ```
@@ -57,7 +101,7 @@ DSH_HOME=/tmp/zt-host node test/host.mjs # apply() + RPC wire 协议端到
57
101
  从 npm 安装(推荐):
58
102
 
59
103
  ```bash
60
- DSH="/Applications/DeepSeekRuntime.app/Contents/Resources/runtime/cli/bin/dsh"
104
+ DSH="/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh"
61
105
  "$DSH" plugin --profile desktop add dsh-zentao-panel
62
106
  ```
63
107
 
@@ -65,7 +109,7 @@ DSH="/Applications/DeepSeekRuntime.app/Contents/Resources/runtime/cli/bin/dsh"
65
109
 
66
110
  ```bash
67
111
  git clone https://github.com/big-li99/dsh-zentao-panel.git
68
- DSH="/Applications/DeepSeekRuntime.app/Contents/Resources/runtime/cli/bin/dsh"
112
+ DSH="/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh"
69
113
  "$DSH" plugin --profile desktop add "$(pwd)/dsh-zentao-panel"
70
114
  ```
71
115
 
@@ -86,12 +130,13 @@ rm -rf ~/.dsh/zentao-panel
86
130
  ```jsonc
87
131
  {
88
132
  "version": 2,
89
- "accounts": [ /* { id, baseUrl, account, password(base64 混淆), cookies } */ ],
133
+ "accounts": [ /* { id, baseUrl, account, alias?, password(base64 混淆), cookies } */ ],
90
134
  "activeId": "当前激活账号的 id"
91
135
  }
92
136
  ```
93
137
 
94
- 账号 id 由 `baseUrl + account` 哈希得到,同账号重复登录等于更新凭据;旧版单账号
138
+ 账号 id 由 `baseUrl + account` 哈希得到,同账号重复登录等于更新凭据(已有别名保留,
139
+ 不会被登录覆盖);`alias` 为本机显示别名(可选,≤30 字)。旧版单账号
95
140
  格式读取时自动迁移,无需手动处理。卸载插件后文件不会自动删除,需要时手动清理。
96
141
 
97
142
  ## 技术说明