Customize the "thinking" status text for agent runtime in the dsh Web chat view, effective immediately without restart.
- Language
- TypeScript
- License
- MIT
- Branch
- master
Install
$ dsh plugin --profile web add --allow-build=dsh-ui-status-label github:alingalingling/ui-status-labelRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
Install via your agent
Install the DeepSeek Harness plugin alingalingling/ui-status-label for me: review the repository at https://github.com/alingalingling/ui-status-label first, then run the install command and verify the plugin loads successfully.
Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.
One-line Summary
Replaces the "Thinking..." prompt text in the dsh Web chat view (the officially hardcoded Deep diving...) with your own custom text. Input takes effect immediately—no restart or save required.
Core Features
- Adds a text input field in the General settings area to customize the chat view's runtime status bar text
- Uses browser DOM injection as a fallback path to directly modify the hardcoded text on versions without official extension points
- Provides an optional
conversationStatusservice; once upstream adds extension points, the chat view directly renders the configured text, and DOM injection automatically yields - Persists settings to
$DSH_HOME/settings.yaml, effective across Web ports for the same user home - Supports both Chinese and English UI text (
settings.status.title,settings.status.descriptiondictionaries)
Technical Implementation
- Language: TypeScript
- Key Dependencies: @deepseek-ai/dsh-settings (settings namespace persistence), @deepseek-ai/schemastery (node-side schema validation), react (settings row component), @deepseek-ai/cordis (plugin runtime)
- Architecture Pattern: Plugin splits into two halves—node half (
src/index.ts) registers to Web roster via cordis.patch.yml, registers persistentui-status-labelnamespace with settings service; client half (src/client/index.ts) auto-discovered viapackage.json#dsh.client, registers settings row, providesconversationStatusservice, starts DOM injector - Entry Files:
src/index.ts(node half) +src/client/index.ts(browser half)
Use Cases
Want more personalized "Thinking..." prompts in dsh Web chat view—e.g., change to "努力干活中" or "小鱼正在游泳"—instead of staring at English Deep diving... every time. Also suitable for operations or localization scenarios needing whale-mermaid brand copy in the status bar. Has zero impact on model response content.
Prerequisites and Compatibility
| Dependency | Min Version | Description |
|---|---|---|
| DSH | >=0.0.1-rc.1 <0.2.0 (peer dependency) | Official stable with 0.1.0-rc.6 works directly; DSH auto-injects cordis and dsh-client-* peer dependencies |
| Node | Not declared | Source doesn't specify minimum Node version |
| Platform | Cross-platform (macOS / Windows / Linux) | Browser interaction only, no native modules |
| Native Modules | None | All dependencies are JS/TS packages |
Installation
dsh plugin --profile web add github:alingalingling/ui-status-label
Configuration Options
No extra configuration needed—all user-visible options are adjusted via UI in dsh Web General settings area.
| Config | Type | Description | Default |
|---|---|---|---|
ui-status-label.statusLabel | string | Status text displayed during agent runtime in chat view | 小难梁在0721 (input max 40 chars, clearing reverts to default) |
FAQ
Q: Do I need to restart dsh Web after installation?
A: Yes. Currently running GUI won't hot-load new plugin bundles. After installation, restart dsh web process and refresh page to see the "Runtime Status Text" entry in settings.
Q: What's the default text?
A: Default text is "小难梁在0721". Setting row also reverts to this default when cleared—empty input never renders as a blank status row.
Q: Is there a length limit for the input?
A: Yes, max 40 characters. This limit comes from the setting row's maxLength property to prevent chat view layout from being stretched by overly long text.
Q: Do I need to click a save button after modifying?
A: No. Input takes effect immediately—changes sync right away to chat view's runtime status bar, no manual save needed.
Q: Will this plugin change model response content?
A: No. Plugin only replaces the status text in browser rendering layer; it doesn't touch any model requests, inference, or response content.
Q: What to do when git installation is blocked by pnpm prepare scripts?
A: Repo already includes pre-built lib/ (with type declarations) committed alongside source code—git install can skip prepare and use artifacts directly; only add package to pnpm-workspace.yaml's allowBuilds when rebuilding from source.
Q: Can a customized dsh build with this plugin built-in install it again?
A: No. It would duplicate ui-status-label settings namespace registration; only official releases without built-in can install normally.
Q: How to uninstall?
A: Run dsh plugin --profile web remove dsh-ui-status-label, then restart process.
Difficulty Level
Beginner — install it, change one line of text, it takes effect immediately. No programming or configuration needed, zero risk, fully reversible.
Known Issues and Limitations
- DOM injection path uses string-level matching against official hardcoded
Deep diving...: if upstream changes that text in the future, DOM fallback automatically stops working (by thenconversationStatusservice path will take over) - Must install under dsh Web profile; headless or TUI profile installation has no meaning
- Conflicts with "customized dsh builds with this plugin built-in" (e.g., locally built deepseek-harness)—duplicate installation not recommended in such scenarios
- Input text only affects UI rendering layer; cannot differentiate text by different sessions/models
把你的鲸鱼娘思考时的 deep diving 自定义成任意你想要的样子。
为 dsh Web 聊天视图提供可配置的运行中轮次状态文案:General 设置区的一行文本输入,插件把聊天视图运行状态栏的文案替换为你输入的文字(支持 DOM 注入和上游 conversationStatus 服务两条路径,见兼容性)。插件注册持久的 ui-status-label settings 命名空间(默认 小难梁在0721);在设置行输入新文字后,聊天视图在轮次运行期间(等待首 token、工具执行、流式输出)显示的状态文案随之更新。选择持久化在 $DSH_HOME/settings.yaml,跟随同一个用户 home 跨越 Web 端口。
前提
- dsh Web(
dsh --profile web或自定义 Web 组合)。本插件只面向浏览器交互面;headless/TUI profile 装它没有意义。 - 依赖分两类:
@deepseek-ai/cordis、dsh-client-*等为 peer 依赖(由 dsh 安装提供);@deepseek-ai/dsh-settings、schemastery为直接依赖(从 npm 安装)。仓库内的pnpm-workspace.yaml已关闭 peer 自动安装(autoInstallPeers: false),clone 后直接pnpm install即可完成直接依赖。
安装
本包声明了 dsh.bundle,dsh plugin add 会自动激活它的 cordis.patch.yml 层(把 dsh-ui-status-label 行插入 Web roster)。
# ① tarball(需要先在仓库根执行 pnpm pack 生成 dsh-ui-status-label-0.1.0.tgz)
dsh plugin --profile web add ./dsh-ui-status-label-0.1.0.tgz
# ② git 仓库直装
dsh plugin --profile web add github:alingalingling/ui-status-label
# ③ npm(当前 npm 上尚未发布,发布后可用)
dsh plugin --profile web add dsh-ui-status-label
git 安装注意:pnpm ≥10 默认阻止运行 git 依赖的 prepare 脚本——首次 add 可能报 "Ignored build scripts",报错会打印一个包 key。把它加入 profile 目录下 pnpm-workspace.yaml 的 allowBuilds 后重新 add 即可(这是允许执行该包构建代码的授权,只对你信任的包开启):
allowBuilds:
dsh-ui-status-label: true
不过本仓库已把预构建的 lib/(含类型声明)随源码一起提交,git 安装即使跳过 prepare 也能直接用产物;allowBuilds 只在你想从源码重新构建时才需要。
卸载用 dsh plugin --profile web remove dsh-ui-status-label。
仅在使用内置了本插件的定制 dsh 构建(如 deepseek-harness 仓库本地构建)时,不要重复安装——
ui-status-labelsettings 命名空间会注册两次。官方发布版未内置本插件,正常安装即可。
安装后生效
装完需要重启 dsh web 进程(当前运行中的 GUI 不会热加载新插件 bundle),重启后刷新页面即可在设置里看到入口。
兼容性
本插件同时提供两条生效路径,官方正式版(含 0.1.0-rc.6)即可直接生效:
- DOM 注入(默认兜底):插件监听聊天视图的运行状态元素(官方标记
role="status"+ 硬编码Deep diving...),把文本替换为你配置的文案。不依赖官方任何新机制,装完即用。 conversationStatus可选服务:当 ui-conversation 带上了扩展点(随UPSTREAM-EXTENSION.patch合入官方后),聊天视图直接渲染你配置的文案,DOM 注入自动让位,两者不会冲突。
设置
安装并重启后,修改入口在 dsh Web 页面里:
- 打开 dsh Web 页面(默认
http://127.0.0.1:3080) - 点击页面左下角的齿轮图标,打开设置面板
- 在左侧导航选择 General(通用) 分区
- 找到「运行状态文案」一行,在输入框里输入你想要的文字(例如"努力干活中")
- 输入即生效,无需保存——下次智能体运行期间,聊天视图的状态行就会显示你输入的文字
清空输入框会回到默认文案 小难梁在0721。文案按用户而非按会话,上限 40 字符。
从源码构建
pnpm install # 安装直接依赖(dsh-settings、schemastery 等,均已发布 npm)
pnpm run bundle # 重建 JS 产物:lib/index.js(node 半边)+ lib/client.js(浏览器半边)+ lib/invariant.js
pnpm pack # 生成 tarball(含 lib/ 与 cordis.patch.yml)
lib/(含 lib/types 类型声明)已预构建并随仓库提交;prepare/bundle(tsdown)只重建 JS 产物,不重新生成 .d.ts——类型由仓库维护,改动源码后如需同步类型请对照 lib/types 更新。
结构
src/schema.ts— 仅 node 半边;ui-status-label设置 schema(放在浏览器 bundle 之外,运行时不依赖 schemastery)。src/status-settings.ts— 两个半边共享的常量与 section 类型。src/client/StatusLabelRow.tsx— General 设置文本行。src/client/status-label-policy.ts— 实时 snapshot store、持久化写穿、采纳 Host 侧变更,以及空值回退默认。src/client/status-label-injector.ts— DOM 兜底:把官方硬编码的Deep diving...文本替换为配置文案(上游合入扩展点后自动让位)。src/client/index.ts— 注册设置行、提供conversationStatus服务并启动 DOM 注入器;把本插件从 cordis.yml 组合掉后,ui-conversation 的内置文案保持原样。
模型体验
无——设置行与服务只影响浏览器呈现;本包不会触及任何模型请求。
Read the usage guide →
Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.
Listing badge
[](https://deepseek-plugin.org/plugins/alingalingling/ui-status-label)Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.
