# ui-status-label

> 在 dsh Web 聊天视图中自定义智能体运行时的"思考中"状态文案，无需重启即时生效。

## Metadata

- Author: [@alingalingling](https://github.com/alingalingling)
- Repo: <https://github.com/alingalingling/ui-status-label.git>
- GitHub: [alingalingling/ui-status-label](https://github.com/alingalingling/ui-status-label)
- Stars: 39
- Language: TypeScript
- License: [MIT](https://spdx.org/licenses/MIT.html)
- Topics: `dsh`, `dsh-plugin`
- Forks: 3
- Open Issues: 5
- Last push: 2026-08-15T08:57:01.000Z
- Added: 2026-08-13T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:alingalingling/ui-status-label
```

## Wiki

## 一句话定位
把 dsh Web 聊天视图里智能体运行时的"思考中"提示文案（官方硬编码的 `Deep diving...`）替换成你自己输入的文字，输入即生效，无需重启或保存。

## 核心能力
- 在 General（通用）设置区新增一行文本输入，允许自定义聊天视图运行状态栏的文案
- 通过浏览器 DOM 注入作为兜底路径，在官方未提供扩展点的版本上直接改写硬编码文字
- 提供可选的 `conversationStatus` 服务，上游合入扩展点后聊天视图直接渲染配置文案，DOM 注入自动让位
- 把设置值持久化到 `$DSH_HOME/settings.yaml`，跟随同一用户 home 跨 Web 端口生效
- 支持中英文界面文案（`settings.status.title`、`settings.status.description` 字典）

## 技术实现
- **语言**: TypeScript
- **关键依赖**: @deepseek-ai/dsh-settings（设置命名空间持久化）、@deepseek-ai/schemastery（节点端 schema 校验）、react（设置行组件）、@deepseek-ai/cordis（插件运行时）
- **架构模式**: 插件分两半边注入——node 半边（`src/index.ts`）通过 cordis.patch.yml 注册到 Web roster，向 settings 服务注册持久的 `ui-status-label` 命名空间；client 半边（`src/client/index.ts`）由 `package.json#dsh.client` 自动发现，注册设置行、提供 `conversationStatus` 服务、启动 DOM 注入器
- **入口文件**: `src/index.ts`（node 半边）+ `src/client/index.ts`（浏览器半边）

## 适用场景
想让 dsh Web 聊天视图里的"思考中"提示更有个性——比如改成"努力干活中""小鱼正在游泳"——而不用每次都盯着英文 `Deep diving...`。也适合需要把鲸鱼娘品牌文案嵌入状态栏的运营或本地化场景；对模型回复内容无任何影响。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | `>=0.0.1-rc.1 <0.2.0`（peer 依赖声明） | 官方正式版含 0.1.0-rc.6 可直接生效；DSH 会自动注入 cordis 与 dsh-client-* 等 peer 依赖 |
| Node | 未声明 | 源码未指定 Node 最低版本 |
| 平台 | 跨平台（macOS / Windows / Linux） | 仅依赖浏览器交互面，无原生模块 |
| 原生模块 | 无 | 全部依赖均为 JS/TS 包 |

## 安装方式
```bash
dsh plugin --profile web add github:alingalingling/ui-status-label
```

## 配置项
本插件无需额外配置——所有用户可见的设置项都在 dsh Web 的 General 设置区内通过 UI 调整。

| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| `ui-status-label.statusLabel` | string | 聊天视图智能体运行时显示的状态文案 | `小难梁在0721`（输入框最大长度 40 字符，清空输入框回退到默认值） |

## 常见问题

**Q: 安装后需要重启 dsh Web 吗？**

A: 需要。当前运行中的 GUI 不会热加载新插件 bundle，装完重启 dsh web 进程、刷新页面才能在设置里看到「运行状态文案」入口。

**Q: 默认文案是什么？**

A: 默认文案是「小难梁在0721」。设置行清空后也会回到这个默认值——空白输入框永远不会渲染为空状态行。

**Q: 输入框有长度限制吗？**

A: 有上限 40 字符。这一限制来自设置行的 `maxLength` 属性，用来避免聊天视图布局被超长文案撑开。

**Q: 修改后还需要点保存按钮吗？**

A: 不需要。输入即生效——修改会立即同步到聊天视图的运行状态栏，无需手动保存。

**Q: 这个插件会改变模型回复内容吗？**

A: 不会。插件只替换浏览器渲染层显示的状态文案，不触及任何模型请求、推理或回复内容。

**Q: 用 git 安装时被 pnpm 阻止 prepare 脚本怎么办？**

A: 仓库已把预构建的 `lib/`（含类型声明）随源码一起提交，git 安装即使跳过 `prepare` 也能直接用产物；只有在你想从源码重新构建时，才需要把包加入 `pnpm-workspace.yaml` 的 `allowBuilds`。

**Q: 已经内置了该插件的定制 dsh 构建能再装一次吗？**

A: 不能。会重复注册 `ui-status-label` 设置命名空间；只有官方未内置的发布版可以正常安装。

**Q: 怎么卸载？**

A: 运行 `dsh plugin --profile web remove dsh-ui-status-label`，然后重启进程即可。

## 上手难度
入门 — 装完改一行文本就生效，没有任何编程或配置操作，零风险可逆。

## 已知问题与限制
- DOM 注入路径是字符串级别匹配官方硬编码的 `Deep diving...`：如果上游未来把那段文字改成别的字符串，DOM 兜底会自动失效（届时 `conversationStatus` 服务路径会接管）
- 必须在 dsh Web profile 下安装，headless 或 TUI profile 装它没有意义
- 与「内置了本插件的定制 dsh 构建」（如本地构建的 deepseek-harness）会重复注册 settings 命名空间，这种场景不要重复安装
- 输入文案只影响 UI 渲染层，无法基于不同会话/不同模型区分文案

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [ui-status-label](https://deepseek-plugin.org/plugins/alingalingling/ui-status-label)
Wiki generated by AI (model: `MiniMax-M3`)
