# dsh-workspace-status · 工作区状态与置顶会话

[English](./README.md) · [中文](./README.zh-CN.md)

为 DeepSeek Harness 侧边栏增加三层能力：

1. **工作区状态标记**：在侧边栏的**工作区（文件夹）行**上显示彩色状态——等待你处理、正在运行、刚刚完成，由该工作区内的会话聚合而来。
2. **已置顶会话区**：通过 Harness 原生置顶操作置顶的会话，会从常规工作区分组中提取出来，显示在工作区列表上方的独立区域；按工作区分组，沿用原生工作区行的样式，并在行尾显示置顶图标。
3. **已置顶会话通知**：置顶会话开始等待你处理或运行结束未读时，窗口在后台会发系统通知，同时置顶区内始终显示应用内提醒；通知开关与提示音按钮位于置顶区标题栏。

侧边栏本来就会在每个会话行上显示状态点，但上方的文件夹行什么都没有。收起分组或滚动之后，就看不出里面是否还有等待审批、仍在运行的会话。本插件补上这一层，并把置顶会话集中到列表上方。

## 功能

### 工作区状态标记

| 标记 | 含义 | 颜色 |
|---|---|---|
| 实心点 | 有会话在等你：审批 / 计划评审 / 回答 | 琥珀 `--dsw-alias-state-warn-primary` |
| 旋转圆环 | 有会话或子代理正在运行 | 蓝 `--dsw-static-deepseek-450` |
| 实心点 | 有会话刚刚结束且尚未打开（1 小时提示窗口） | 绿 `--dsw-alias-state-success-primary` |

- 状态优先级与原生会话行一致：等待 > 运行 > 刚刚完成；一个工作区同时只显示一个主标记。
- 子代理的运行状态计入其父会话所在工作区；子代理行本身不产生标记。
- 已归档会话忽略；未分组会话落在「未分组」行。
- 标记固定在行尾时间戳的位置，不挤动标题；展开或收起都可见。
- 提供隐藏的无障碍描述（如「工作区状态：2 个运行中、1 个等待你处理 — api、web」）。

### 已置顶会话区

- 使用 Harness 原生置顶操作（会话行悬停按钮或 **…** 菜单）；置顶后无需重启即可出现在 **Pinned / 已置顶** 区域。
- 按工作区分组，每组沿用原生 34px 工作区行：文件夹图标、当前工作区蓝色高亮、折叠三角、圆角与计数。
- 每行显示实时状态点、相对时间、当前会话高亮，以及行尾的实心**置顶图标**；点击图标立即取消置顶，行会回到原工作区分组。
- Pinned 标题和各工作区分组都可折叠，折叠状态保存在浏览器本地。
- 区块限高并可独立滚动，不会把工作区列表挤走。
- 置顶集合来自 Harness 的 `pinnedSessionIds`（保存在 profile 的工作区注册表），重启后仍会显示同样的置顶会话与图标。
- 搜索不受影响：已置顶会话仍然出现在搜索结果中；常规分组列表则隐藏被提取的行。
- 常规列表中的工作区标题会保留（其「新会话」按钮仍可用），因此当某个工作区的会话全部被置顶时，常规列表里可能出现一个空分组，而会话显示在上方。

### 已置顶会话通知

- 触发条件（仅限已置顶会话）：开始等待你（审批 / 计划评审 / 提问），或运行结束且完成标记未读。
- 只对状态**变化**发通知：刷新后的第一次观察保持安静，同一等待原因不会重复提醒，原因变化（审批 → 提问）会再次提醒，完成只在每次运行结束时提醒一次。
- 窗口在后台且系统已授权时发**桌面通知**；点击通知会聚焦应用并打开对应会话。
- 置顶区**始终**显示应用内提醒（系统阻止通知时同样可用），带状态图标、标题与原因；点击打开会话，点 **×** 或等待 8 秒自动消失。
- 标题栏的铃铛开关通知并在首次点击时申请权限、显示一条测试提醒；喇叭开关可选的两声提示音。两项偏好保存在浏览器本地，默认通知开、提示音关。
- 通知是客户端行为：应用运行期间才会触发，不提供邮件 / IM / Web Push 等外部推送，也不会提醒置顶以外的会话。

## 快速开始

```sh
dsh plugin --profile web add dsh-workspace-status
```

重启 Harness（或刷新 Web 界面）。工作区行会出现状态标记；置顶任意会话即可看到上方的置顶区域与铃铛/喇叭开关。

## 要求

- DeepSeek Harness `>=0.2.1-rc.2 <0.3.0-0`，Web 或桌面版。
- Node `>=22.18.0`（仅测试需要；无构建步骤）。
- 不修改 Host 行为、不提供 Host 设置项、不向模型注册工具或提示词；置顶状态使用 Harness 原生工作区置顶集合，通知偏好与折叠状态保存在浏览器本地。

## 验证

1. 在某工作区运行会话并收起分组：工作区行尾出现蓝色圆环。
2. 在另一个工作区触发审批：即使展开，该行也显示琥珀点。
3. 让会话跑完但不打开：出现绿点，约一小时后消失。
4. 置顶任意会话：列表上方立即出现 Pinned 区，按工作区分组，行尾有置顶图标。
5. 再置顶另一个工作区的会话：出现第二个分组标题。
6. 点击行尾置顶图标取消置顶：该行立即从 Pinned 区消失并回到原工作区分组。
7. 重启 Harness：同样的置顶会话仍在，图标也仍显示。
8. 点击置顶区标题栏的铃铛：首次会申请通知权限并显示测试提醒；再次点击关闭。
9. 让置顶会话结束或开始等待：置顶区出现应用内提醒；窗口在后台时还会收到系统通知。

## 相关链接

- 英文说明（完整细节）：[README.md](./README.md)
- npm：<https://www.npmjs.com/package/dsh-workspace-status>
- 更新记录：[CHANGELOG.md](./CHANGELOG.md)

<sub>同系列插件：[情绪板](https://github.com/Stijnus/dsh-moodboard) · [输入补全](https://github.com/Stijnus/dsh-composer-predictions) · [移动到工作区](https://github.com/Stijnus/dsh-move-to-workspace) · [工作区状态](https://github.com/Stijnus/dsh-workspace-status) · [提示词改写](https://github.com/Stijnus/dsh-prompt-optimizer)</sub>

<sub>⭐ 如果它帮你省了一步，点个 star 能让更多 DSH 用户发现它。</sub>
