dsh-group-status 0.3.0 → 0.5.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 +69 -0
- package/README.en.md +12 -10
- package/README.md +14 -10
- package/lib/client.js +1294 -281
- package/lib/client.js.map +1 -1
- package/lib/index.js +7 -4
- package/lib/types/client/BadgeSettingsCard.d.ts.map +1 -1
- package/lib/types/client/BadgeSettingsCard.js +6 -6
- package/lib/types/client/BadgeSettingsCard.js.map +1 -1
- package/lib/types/client/badge-field.d.ts +33 -10
- package/lib/types/client/badge-field.d.ts.map +1 -1
- package/lib/types/client/badge-field.js +35 -16
- package/lib/types/client/badge-field.js.map +1 -1
- package/lib/types/client/badge-labels.d.ts +3 -3
- package/lib/types/client/badge-labels.js +3 -3
- package/lib/types/client/badge-settings.d.ts +0 -25
- package/lib/types/client/badge-settings.d.ts.map +1 -1
- package/lib/types/client/badge-settings.js +0 -18
- package/lib/types/client/badge-settings.js.map +1 -1
- package/lib/types/client/contract/slots.d.ts +39 -21
- package/lib/types/client/contract/slots.d.ts.map +1 -1
- package/lib/types/client/contract/slots.js.map +1 -1
- package/lib/types/client/contract/toast.d.ts +67 -0
- package/lib/types/client/contract/toast.d.ts.map +1 -0
- package/lib/types/client/contract/toast.js +2 -0
- package/lib/types/client/contract/toast.js.map +1 -0
- package/lib/types/client/facets.d.ts +39 -5
- package/lib/types/client/facets.d.ts.map +1 -1
- package/lib/types/client/facets.js +48 -4
- package/lib/types/client/facets.js.map +1 -1
- package/lib/types/client/index.d.ts +6 -3
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +48 -13
- package/lib/types/client/index.js.map +1 -1
- package/lib/types/client/locales.d.ts +14 -8
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/locales.js +14 -8
- package/lib/types/client/locales.js.map +1 -1
- package/lib/types/client/navigation.d.ts +45 -12
- package/lib/types/client/navigation.d.ts.map +1 -1
- package/lib/types/client/navigation.js +102 -26
- package/lib/types/client/navigation.js.map +1 -1
- package/lib/types/client/rows/GroupBadge.d.ts +4 -4
- package/lib/types/client/rows/GroupBadge.d.ts.map +1 -1
- package/lib/types/client/rows/GroupBadge.js +10 -7
- package/lib/types/client/rows/GroupBadge.js.map +1 -1
- package/lib/types/client/rows/Rows.d.ts.map +1 -1
- package/lib/types/client/rows/Rows.js +4 -4
- package/lib/types/client/rows/Rows.js.map +1 -1
- package/lib/types/client/rows/WorkspaceBrowser.d.ts +1 -1
- package/lib/types/client/rows/WorkspaceBrowser.d.ts.map +1 -1
- package/lib/types/client/rows/WorkspaceBrowser.js +66 -61
- package/lib/types/client/rows/WorkspaceBrowser.js.map +1 -1
- package/lib/types/client/session-actions/ArchiveSession.js +1 -1
- package/lib/types/client/session-actions/ArchiveSession.js.map +1 -1
- package/lib/types/client/session-actions/ForkSession.d.ts +5 -4
- package/lib/types/client/session-actions/ForkSession.d.ts.map +1 -1
- package/lib/types/client/session-actions/ForkSession.js +7 -4
- package/lib/types/client/session-actions/ForkSession.js.map +1 -1
- package/lib/types/client/session-actions/PinSession.js +1 -1
- package/lib/types/client/session-actions/PinSession.js.map +1 -1
- package/lib/types/client/session-actions/RowActionToast.d.ts +5 -8
- package/lib/types/client/session-actions/RowActionToast.d.ts.map +1 -1
- package/lib/types/client/session-actions/RowActionToast.js +10 -49
- package/lib/types/client/session-actions/RowActionToast.js.map +1 -1
- package/lib/types/client/session-actions/SessionId.d.ts +8 -0
- package/lib/types/client/session-actions/SessionId.d.ts.map +1 -0
- package/lib/types/client/session-actions/SessionId.js +16 -0
- package/lib/types/client/session-actions/SessionId.js.map +1 -0
- package/lib/types/client/session-watermarks.d.ts +30 -0
- package/lib/types/client/session-watermarks.d.ts.map +1 -0
- package/lib/types/client/session-watermarks.js +54 -0
- package/lib/types/client/session-watermarks.js.map +1 -0
- package/lib/types/client/shortcuts.d.ts +2 -7
- package/lib/types/client/shortcuts.d.ts.map +1 -1
- package/lib/types/client/shortcuts.js +7 -11
- package/lib/types/client/shortcuts.js.map +1 -1
- package/lib/types/client/toast/Toast.d.ts +41 -0
- package/lib/types/client/toast/Toast.d.ts.map +1 -0
- package/lib/types/client/toast/Toast.js +44 -0
- package/lib/types/client/toast/Toast.js.map +1 -0
- package/lib/types/client/toast/register.d.ts +11 -0
- package/lib/types/client/toast/register.d.ts.map +1 -0
- package/lib/types/client/toast/register.js +162 -0
- package/lib/types/client/toast/register.js.map +1 -0
- package/lib/types/client/tree.d.ts +16 -1
- package/lib/types/client/tree.d.ts.map +1 -1
- package/lib/types/client/tree.js +20 -8
- package/lib/types/client/tree.js.map +1 -1
- package/lib/types/client/use-registered-facets.d.ts +11 -0
- package/lib/types/client/use-registered-facets.d.ts.map +1 -0
- package/lib/types/client/use-registered-facets.js +48 -0
- package/lib/types/client/use-registered-facets.js.map +1 -0
- package/lib/types/host-contract.d.ts +57 -0
- package/lib/types/host-contract.d.ts.map +1 -0
- package/lib/types/host-contract.js +84 -0
- package/lib/types/host-contract.js.map +1 -0
- package/lib/types/index.d.ts +7 -10
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +7 -4
- package/lib/types/index.js.map +1 -1
- package/package.json +34 -30
- package/lib/types/client/facet-visibility.d.ts +0 -17
- package/lib/types/client/facet-visibility.d.ts.map +0 -1
- package/lib/types/client/facet-visibility.js +0 -18
- package/lib/types/client/facet-visibility.js.map +0 -1
- package/lib/types/client/legacy/bridge.d.ts +0 -30
- package/lib/types/client/legacy/bridge.d.ts.map +0 -1
- package/lib/types/client/legacy/bridge.js +0 -58
- package/lib/types/client/legacy/bridge.js.map +0 -1
- package/lib/types/client/legacy/register-legacy-facets.d.ts +0 -14
- package/lib/types/client/legacy/register-legacy-facets.d.ts.map +0 -1
- package/lib/types/client/legacy/register-legacy-facets.js +0 -77
- package/lib/types/client/legacy/register-legacy-facets.js.map +0 -1
- package/lib/types/client/legacy/schedule.d.ts +0 -49
- package/lib/types/client/legacy/schedule.d.ts.map +0 -1
- package/lib/types/client/legacy/schedule.js +0 -73
- package/lib/types/client/legacy/schedule.js.map +0 -1
- package/lib/types/client/legacy/store-source.d.ts +0 -78
- package/lib/types/client/legacy/store-source.d.ts.map +0 -1
- package/lib/types/client/legacy/store-source.js +0 -82
- package/lib/types/client/legacy/store-source.js.map +0 -1
- package/lib/types/client/legacy/waiting-review.d.ts +0 -85
- package/lib/types/client/legacy/waiting-review.d.ts.map +0 -1
- package/lib/types/client/legacy/waiting-review.js +0 -179
- package/lib/types/client/legacy/waiting-review.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,75 @@
|
|
|
6
6
|
|
|
7
7
|
## 未发布
|
|
8
8
|
|
|
9
|
+
## 0.5.0 — 2026-10-22
|
|
10
|
+
|
|
11
|
+
- **fix** 宿主契约漂移**从此有人看着了**:`pendingInteraction.kind` 是开放集合
|
|
12
|
+
(`SessionPendingInteractionMap` 靠声明合并扩展,任何宿主包都能贡献自己的 kind),而本仓库的
|
|
13
|
+
`src/client/tree.ts` 是宿主 workspace 投影的 fork。宿主新增一种 kind 时本插件**不会**自动跟上,
|
|
14
|
+
于是宿主侧栏与折叠徽标会**一起不显示**它 —— 两边口径一致所以不是"谁错了",但用户只会觉得
|
|
15
|
+
"这俩对不上"。而"宿主换了代"本来该由 `scripts/check-upstream.ts` 提醒,**那个脚本从来没有工作过**:
|
|
16
|
+
它比对的 `src/vendor/src` 目录早就不存在了(vendored 的上游源码直接摊在 `src/` 下),上游发布包里
|
|
17
|
+
也没有 `src/`(只有 `lib/`),于是它一跑就 `ENOENT: scandir 'src/vendor/src'`;而 `docs/upgrading.md`
|
|
18
|
+
还让人照着它 rebase —— 一条指着不存在目录的命令比没有更糟:它让人以为"没红就是没漂移"。
|
|
19
|
+
现在:同一份比对实现(`src/host-contract.ts`)被两处调用 —— `npm test` 里的
|
|
20
|
+
`tests/host-pending-kinds.node.test.mjs`(离线,读锁定版宿主的实现,CI 会跑)与
|
|
21
|
+
`pnpm check-upstream`(人看的;`--latest` 还能查 npm 上**已发布的最高版**,注意该包的 `latest`
|
|
22
|
+
标签是旧的、还指着 0.0.1-rc.1,不能直接用 `npm view <pkg> version`)。守卫覆盖三件事:我们认的
|
|
23
|
+
kind 集合必须与宿主一致、宿主不能把我们要读的两个状态事实改名、以及"守卫自己不是摆设"(拿真实
|
|
24
|
+
bundle 的改造副本当反例)。另加类型层一道:`Rows.tsx` 的 `assertNever` 让"新增 kind 却没给行内
|
|
25
|
+
表现"直接编译不过。
|
|
26
|
+
|
|
27
|
+
- **breaking** 删除设置项 `showScheduledInBadge` 与 `showWaitingReviewInBadge`:**外部来源的显隐不再由本插件管**。
|
|
28
|
+
这两个字段把别人家的域名(定时任务 / 等待评审)、来源名(dsh-later / dsh-gitea-dispatch)连图标形状
|
|
29
|
+
("时钟" / "沙漏")全都写死在**消费方**的 `Config`、设置卡片与文案里,与本插件「不认识任何具体来源」的
|
|
30
|
+
立身之本直接矛盾 —— facet 协议把适配方向翻正了,配置面却没跟着翻。而且它**已经是错的**:dsh-gitea-dispatch
|
|
31
|
+
自其 #60 起让徽标跟随自己的 `waitingIconStyle`,三档里两档不是沙漏,卡片却仍在承诺"沙漏";对方没装时,
|
|
32
|
+
那句"关闭后不再画"更是空话。
|
|
33
|
+
现在的规则只有一条:**登记即显示,不注册即不显示**。要给用户一个"关掉它"的开关,请加在**你自己的**
|
|
34
|
+
配置卡片里。协议成员 `settingKey` 同时废弃(v1 仍接受、不报错,但本插件不再读取)。
|
|
35
|
+
**升级影响**:profile 里残留的这两个旧值不再被读取,等同回到默认「显示」(默认全开,最坏情况是某个来源
|
|
36
|
+
重新出现,不会留下坏数据)。曾考虑的另一种收口(消费方保留 `disabledFacets: string[]` + 卡片遍历登记面)
|
|
37
|
+
只是把来源名从文案换成 id,机制仍长在消费方身上,故未采用;取舍过程写进 `docs/facet-protocol.md`。
|
|
38
|
+
- **refactor** 徽标设置卡片的开关顺序改为**与徽标画点一致**(待审批 → 进行中 → 已完成)。此前是
|
|
39
|
+
进行中 → 待审批 → 已完成,而徽标与悬停明细都是待审批在前;用户的操作场景恰是"我看到徽标第 N 个图标,
|
|
40
|
+
想关掉它"。同一族毛病 #25① 已在点行与明细之间修过一次,卡片是当时漏掉的第三个面。单一事实来源是
|
|
41
|
+
`badge-field.ts` 的 `ALL_BADGE_FIELDS`,并由 `tests/badge-settings-card.client.spec.tsx` 钉住
|
|
42
|
+
(含"卡片文案里不得出现任何提供方名字与形状词")。
|
|
43
|
+
- **refactor** 删除 `facetVisibleBySettings` 与 `facet-visibility.ts`;`useVisibleFacets` 更名
|
|
44
|
+
`useRegisteredFacets`(它不再筛任何东西,只负责"订阅 + 读登记面",见下一条目为何必须收进一个 hook)。
|
|
45
|
+
|
|
46
|
+
- **fix** 提供方**晚于首渲染**注册的状态源永远进不了折叠徽标:`WorkspaceBrowser` 订阅了
|
|
47
|
+
facet 存储,却把 `useSyncExternalStore` 的返回值丢掉,`useMemo` 的依赖里只有设置项——
|
|
48
|
+
于是登记面变化只换来一次重渲染,渲染算的仍是**上一次**的登记面。表现是「徽标少一家、
|
|
49
|
+
无任何报错、刷新页面就好了」,而刷新只是碰巧让注册赶在了首渲染之前。宿主不保证插件
|
|
50
|
+
`apply` 与侧栏挂载的先后,所以这条按加载时序随机命中。修法是把订阅 + 读表 + 按设置筛
|
|
51
|
+
收进 `use-visible-facets.ts` 一个 hook,让"只用信号、不用值"在结构上写不出来。这条接缝
|
|
52
|
+
此前测不到(能渲染整条路径的 `tests/workspace-browser.client.spec.tsx` 在本仓库是跳过的),
|
|
53
|
+
新增 `tests/use-visible-facets.client.spec.tsx` 5 例覆盖,并用变异测试验过非空洞性:把依赖
|
|
54
|
+
里的版本号拿掉,「晚到的注册」与「晚到的注销」两条会红。
|
|
55
|
+
- **fix** 登记面从**模块级**单例改为挂在 `globalThis` 上的**进程级**共享表。宿主热替换只
|
|
56
|
+
换代被替换的那个模块(`dsh-client-modules` 的 `invalidate()` 不级联到依赖方,也不重跑
|
|
57
|
+
别人的 `apply`),于是本插件一旦被换成新实例就持有一张**空表**:提供方那一次性登记留在
|
|
58
|
+
被丢弃的旧表上,徽标从此少一家,且只有刷新页面才好。开发环境用 `link:` 装插件、反复
|
|
59
|
+
重建 `lib/`,这条几乎必然发生。现在换代只是"再拿一次同一张表";`registerGroupStatusFacet`
|
|
60
|
+
也改为**现取**当前那张表,而不是用模块加载时抄下的引用。那把全局键同时是现场诊断入口:
|
|
61
|
+
`globalThis.__dshGroupStatusFacetRegistry__.list()` 一眼看出注册到底落没落,判据写进
|
|
62
|
+
`docs/facet-protocol.md` 新增的「登记面的生命周期」一节。
|
|
63
|
+
- **test** `tests/facets.node.test.mjs` 补 3 例:共享表重复取不新建、模块级 `registry` 常量
|
|
64
|
+
就是那张共享表、换代后新注册只落新表不落被丢弃的旧表。
|
|
65
|
+
|
|
66
|
+
## 0.4.0 — 2026-10-20
|
|
67
|
+
|
|
68
|
+
- **upgrade** 依赖基线从 DSH `0.2.0-rc.2` 升到 `0.2.1-rc.2`:Cordis peer 改为 `~4.0.5`,Schemastery 与全部 `@deepseek-ai/dsh-*` 开发依赖升到对应版本;客户端 `dsh.client.inject` 加入 `@deepseek-ai/dsh-api-remote-access`。`tsc`、`tsdown`、27 个 Node 用例与 165 个 Vitest 用例全绿。
|
|
69
|
+
- **feat** 同步上游 `dsh-client-ui-workspace 0.2.1-rc.2` 的会话行「复制 Session ID」菜单项(`order: 450`)和成功 / 失败全局提示;复制不打开会话、不 retain reference、不加载历史。
|
|
70
|
+
- **feat** 同步上游 Workspace 权限面:注册并对外提供 keyed hook `useWorkspaceAccess(workspaceId, action)`,注入 `remoteAccess` 服务;fork 菜单项改由 `useSessionAccess(sessionId, 'session/fork')` 决定是否出现。
|
|
71
|
+
- **feat** 同步上游 New Session 语义:`startSession` / `openWorkspace` / `connectWorkspace` 接受 `agentPreset`、`prompt` 与 `clearPreviousDraft`;启动恢复读取已保存空白会话日志记录的 preset,preset 失效时回退 Host 默认;添加工作区保留现有空白会话草稿。
|
|
72
|
+
- **feat** 同步上游会话水位线:基础仍为 5 条非空白会话,但运行中、子智能体运行中、等待用户、未读完成、当前打开与搜索揭示的会话会自动抬高水位线;搜索揭示可超过 50 条上限,手动展开或收起按上游规则重置;水位线不写入 viewing store。
|
|
73
|
+
- **refactor** 同步上游 Toast 架构:`workspace.toast` 按 notice kind 分派,共享 Factory 为 `workspace.toast.content`;归档动作、筛选动作与 fork 迁移提示回到各自业务注册项。旧 `WorkspaceBrowser` 内联 fork 错误条随之删除。
|
|
74
|
+
- **feat** 同步上游 fork 迁移处理:会话行 fork 以 `allowMigration: false` 请求 Host;源会话需要迁移时提示「打开原会话」,用户确认只导航,不自动重试 fork。
|
|
75
|
+
- **style** 同步上游侧栏弹层细节:Workspace / Session hover card 加入 `HoverCardGroup` 和 `grouped`,共享首张卡片的 800ms 停留计时;新建会话、置顶、归档、搜索恢复等按钮 Tooltip 经 body portal 绘制,避免被侧栏层叠上下文裁切。
|
|
76
|
+
- **docs** README、升级手册与依赖表统一改为 DSH / 上游基线 `0.2.1-rc.2`;验证清单补复制 Session ID、权限 fork、水位线和共享 Toast 四项。
|
|
77
|
+
|
|
9
78
|
## 0.3.0 — 2026-10-20
|
|
10
79
|
|
|
11
80
|
- **refactor** 删除过渡适配器 `src/client/legacy/`(5 个文件)、`package.json` 的两条 `dsh.client.external` 声明,以及只为它们存在的 5 个文案键(`status.waitingReview` / `...Overdue` / `...Imminent` / `...Left`、`status.scheduled`)。两家已各自注册同名 facet:dsh-gitea-dispatch 走其 PR #51(Issues #47),dsh-later 走其 PR #40(Issues #36)。
|
package/README.en.md
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
[中文](./README.md) | **English**
|
|
8
8
|
|
|
9
|
-
[](https://github.com/dsh-plugin-collection/dsh-group-status)
|
|
10
10
|
[](LICENSE)
|
|
11
|
-
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
12
12
|
|
|
13
13
|
</div>
|
|
14
14
|
|
|
@@ -64,12 +64,14 @@ Rules:
|
|
|
64
64
|
| `showRunningInBadge` | `true` | Whether the folded badge shows the "running" spinning dot |
|
|
65
65
|
| `showPendingInBadge` | `true` | Whether the folded badge shows the "pending" yellow dot (approval / plan review / waiting for answer) |
|
|
66
66
|
| `showCompletedInBadge` | `true` | Whether the folded badge shows a green "completed" dot |
|
|
67
|
-
| `showScheduledInBadge` | `true` | Whether the folded badge shows the "scheduled" clock icon (data from dsh-later) |
|
|
68
|
-
| `showWaitingReviewInBadge` | `true` | Whether the folded badge shows the "waiting for review" hourglass icon (data from dsh-gitea-dispatch) |
|
|
69
67
|
| `showHoverDetails` | `true` | Whether the hover card shows the aggregated status detail lines |
|
|
70
68
|
| `countThreshold` | `2` | The count is shown on the badge only when the total is >= this value (default 2, i.e. omits the count when it equals 1 — the dots already convey "something is happening"; set to 1 to always show) |
|
|
71
69
|
|
|
72
|
-
Switching a
|
|
70
|
+
Switching a tier off takes it out of the folded row's aggregate entirely — no dot/icon, no contribution to the badge count, no hover detail line, and it no longer keeps the badge alive. **The state dot on a session row itself is unaffected**: that is row-level state, not a folder hint. With `showHoverDetails` off, the hover card shows only the title, path, and creation time.
|
|
71
|
+
|
|
72
|
+
**External sources (e.g. "waiting for review", "scheduled") have no switch on this page, on purpose.** This plugin knows no concrete source, so its config face must not carry another plugin's domain names or icon shapes either. To silence a source, use **that plugin's own** settings card: when it is off, it simply does not register its facet, and the badge loses that glyph. See "Who owns visibility" in [`docs/facet-protocol.md`](docs/facet-protocol.md).
|
|
73
|
+
|
|
74
|
+
> ⚠️ As of this change the `showScheduledInBadge` / `showWaitingReviewInBadge` fields are removed (they hard-coded names and icon shapes on behalf of dsh-later / dsh-gitea-dispatch). Values left in the profile are no longer read and behave as the default "show".
|
|
73
75
|
|
|
74
76
|
Saving applies it live, with no refresh; the Host writes it into the profile patch's `dsh-group-status` entry `config`, so it survives a page reload. When the settings face cannot be read (e.g. the Host serves no settings service), it falls back to the default "show", matching the schema default — failing to read a config is not the user turning it off.
|
|
75
77
|
|
|
@@ -100,7 +102,7 @@ const unregister = gs?.registerGroupStatusFacet?.({
|
|
|
100
102
|
subscribe: store.subscribe, // an external-store face, not a React hook
|
|
101
103
|
getSnapshot: store.getSnapshot,
|
|
102
104
|
fold: (snapshot, sessionIds, now) => ({ count, tone, pulse, data }),
|
|
103
|
-
merge, label, renderIcon,
|
|
105
|
+
merge, label, renderIcon, order, // all optional
|
|
104
106
|
})
|
|
105
107
|
ctx.effect(() => () => unregister?.(), 'my-plugin: group status facet')
|
|
106
108
|
```
|
|
@@ -178,9 +180,9 @@ dsh plugin --profile web remove dsh-group-status
|
|
|
178
180
|
|
|
179
181
|
| Item | Value |
|
|
180
182
|
|---|---|
|
|
181
|
-
| DSH core | `0.2.
|
|
182
|
-
| peer dependency | `@deepseek-ai/cordis ~4.0.
|
|
183
|
-
| Upstream base | `@deepseek-ai/dsh-client-ui-workspace 0.2.
|
|
183
|
+
| DSH core | `0.2.1-rc.2` |
|
|
184
|
+
| peer dependency | `@deepseek-ai/cordis ~4.0.5` |
|
|
185
|
+
| Upstream base | `@deepseek-ai/dsh-client-ui-workspace 0.2.1-rc.2` (source vendored into `src/`) |
|
|
184
186
|
| Install shape | fork override: same slots registered, stock row disabled via `cordis.patch.yml` |
|
|
185
187
|
| Optional partners | dsh-later (schedule summary), dsh-gitea-dispatch (waiting-review summary) |
|
|
186
188
|
|
|
@@ -194,7 +196,7 @@ Every upstream generation requires a manual rebase — see the [upgrade runbook]
|
|
|
194
196
|
pnpm install
|
|
195
197
|
pnpm build # tsc typecheck + tsdown bundle → lib/
|
|
196
198
|
pnpm watch # rebuild on src/ changes (a dsh web restart is still required)
|
|
197
|
-
pnpm test # = test:node (node --test,
|
|
199
|
+
pnpm test # = test:node (node --test, 27 cases) + test:spec (vitest + jsdom, 165 cases)
|
|
198
200
|
pnpm test:spec # the upstream spec suite only
|
|
199
201
|
```
|
|
200
202
|
|
package/README.md
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
**中文** | [English](./README.en.md)
|
|
8
8
|
|
|
9
|
-
[](https://github.com/dsh-plugin-collection/dsh-group-status)
|
|
10
10
|
[](LICENSE)
|
|
11
|
-
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
12
12
|
|
|
13
13
|
</div>
|
|
14
14
|
|
|
@@ -66,12 +66,14 @@
|
|
|
66
66
|
| `showRunningInBadge` | `true` | 折叠徽标是否显示「进行中」转圈 |
|
|
67
67
|
| `showPendingInBadge` | `true` | 折叠徽标是否显示「待审批 / 待评审 / 待回答」黄点 |
|
|
68
68
|
| `showCompletedInBadge` | `true` | 折叠徽标是否显示「已完成」绿点 |
|
|
69
|
-
| `showScheduledInBadge` | `true` | 折叠徽标是否显示「定时任务」时钟图标(数据来自 dsh-later) |
|
|
70
|
-
| `showWaitingReviewInBadge` | `true` | 折叠徽标是否显示「等待评审」沙漏图标(数据来自 dsh-gitea-dispatch) |
|
|
71
69
|
| `showHoverDetails` | `true` | 悬停卡是否显示聚合状态明细行 |
|
|
72
70
|
| `countThreshold` | `2` | 徽标数字显示阈值:数量 >= 此值时才显示数字(默认 2,即 count=1 时省略——点已表达"有东西在发生";设为 1 则始终显示) |
|
|
73
71
|
|
|
74
|
-
|
|
72
|
+
按状态关掉后,对应档位完全退出折叠行的聚合提示——不画点/图标、不计入徽标数字、不进悬停明细、不参与「是否显示徽标」的判断。**会话行自身的状态点不受影响**:那是行级状态,不是分组提示。`showHoverDetails` 关闭后,悬停卡只显示标题、路径与创建时间。
|
|
73
|
+
|
|
74
|
+
**外部来源(如「等待评审」「定时任务」)在这一页没有开关**,这是有意的:本插件不认识任何具体来源,所以配置面里也不该有别人家的域名与图标形状。要关某个来源,去**那个插件自己**的设置卡片;它关掉时不注册 facet,徽标自然就没有那一格。详见 [`docs/facet-protocol.md`](docs/facet-protocol.md) 的「显隐归谁」。
|
|
75
|
+
|
|
76
|
+
> ⚠️ 本次起 `showScheduledInBadge` / `showWaitingReviewInBadge` 两个字段已删除(它们曾替 dsh-later / dsh-gitea-dispatch 写死名字与图标形状)。profile 里残留的旧值不再被读取,等同回到默认「显示」。
|
|
75
77
|
|
|
76
78
|
点「保存」后即时生效,无需刷新;设置由宿主写进 profile patch 的 `dsh-group-status` 条目 `config`,刷新页面后仍在。设置面读不到时(例如宿主未提供设置服务)回落为默认「显示」,与 schema 默认值同源——读不到配置不等于用户关掉了。
|
|
77
79
|
|
|
@@ -102,7 +104,7 @@ const unregister = gs?.registerGroupStatusFacet?.({
|
|
|
102
104
|
subscribe: store.subscribe, // 外部存储面,不是 React hook
|
|
103
105
|
getSnapshot: store.getSnapshot,
|
|
104
106
|
fold: (snapshot, sessionIds, now) => ({ count, tone, pulse, data }),
|
|
105
|
-
merge, label, renderIcon,
|
|
107
|
+
merge, label, renderIcon, order, // 全部可选
|
|
106
108
|
})
|
|
107
109
|
ctx.effect(() => () => unregister?.(), 'my-plugin: group status facet')
|
|
108
110
|
```
|
|
@@ -180,14 +182,16 @@ dsh plugin --profile web remove dsh-group-status
|
|
|
180
182
|
|
|
181
183
|
| 项 | 值 |
|
|
182
184
|
|---|---|
|
|
183
|
-
| DSH 内核 | `0.2.
|
|
184
|
-
| peer 依赖 | `@deepseek-ai/cordis ~4.0.
|
|
185
|
-
| 上游基线 | `@deepseek-ai/dsh-client-ui-workspace 0.2.
|
|
185
|
+
| DSH 内核 | `0.2.1-rc.2` |
|
|
186
|
+
| peer 依赖 | `@deepseek-ai/cordis ~4.0.5` |
|
|
187
|
+
| 上游基线 | `@deepseek-ai/dsh-client-ui-workspace 0.2.1-rc.2`(源码已 vendored 进本仓库 `src/`)|
|
|
186
188
|
| 安装形态 | fork 覆盖包:同槽位注册 + `cordis.patch.yml` 禁用官方行 |
|
|
187
189
|
| 可选搭档 | dsh-later(定时任务摘要)、dsh-gitea-dispatch(等待评审摘要)|
|
|
188
190
|
|
|
189
191
|
上游一换代就得按[升级手册](./docs/upgrading.md) rebase 一次;上游改槽位名、组件签名或上下文契约时,本包不会自动跟上。
|
|
190
192
|
|
|
193
|
+
其中**会静默失效**的那部分(我们认的待处理 kind 集合、我们从宿主读的两个状态事实)有守卫兜着:`tests/host-pending-kinds.node.test.mjs` 直接读锁定版宿主的实现来比对,宿主一改就红;人看的版本是 `pnpm check-upstream`(加 `--latest` 还能查 npm 上已发布的最高版)。
|
|
194
|
+
|
|
191
195
|
---
|
|
192
196
|
|
|
193
197
|
## 开发
|
|
@@ -196,7 +200,7 @@ dsh plugin --profile web remove dsh-group-status
|
|
|
196
200
|
pnpm install
|
|
197
201
|
pnpm build # tsc 类型检查 + tsdown 打包 → lib/
|
|
198
202
|
pnpm watch # 监听 src/ 自动重建(改完仍需重启 dsh web,侧栏是整包替换)
|
|
199
|
-
pnpm test # = test:node(node --test,
|
|
203
|
+
pnpm test # = test:node(node --test,27 用例)+ test:spec(vitest + jsdom,165 用例)
|
|
200
204
|
pnpm test:spec # 只跑上游 spec 套件
|
|
201
205
|
```
|
|
202
206
|
|