Skills Plugins MCP Prompt Model 导航 博客 资讯 我的中心
界面增强 #deepseek-harness#dsh#dsh-plugin

dsh-step-clock

在网页版输入框上方用一句中文显示当前正在执行的智能体步骤:步号、正在执行的工具、以及已运行多久。步骤结束后会保留该步用时,直到下一步开始,因此慢步骤事后也能查证。

wste47 @wste47 ⬇ 2 ★ 0 main

安装

dsh plugin --profile web add github:wste47/dsh-step-clock
下载安装清单

需要可复现安装时,可在仓库后追加 #commit 固定提交。

在网页版输入框上方用一句中文显示当前正在执行的智能体步骤:步号、正在执行的工具、以及已运行多久。步骤结束后会保留该步用时,直到下一步开始,因此慢步骤事后也能查证。

该插件未提供要点说明,请参考仓库 README。

deepseek-harnessdshdsh-plugin
  1. 安装并启动 DeepSeek Harness:npx @deepseek-ai/dsh web
  2. 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
  3. 用 dsh plugins list 确认已安装,必要时重启 Harness 生效

插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。

代码仓库github.com/wste47/dsh-step-clock
许可证MIT
主要语言main
下载量2
GitHub 星标0
最近推送2026-09-12
收录日期2026-09-19
分类界面增强

事实信息来自公开插件目录快照(2026-10-01),介绍文案由本站再加工。

以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。

# dsh-step-clock

[中文](README.zh.md) | English

A live per-step elapsed-time bar for the [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) web GUI. It answers one question the built-in turn timer does not: **how long has the step that is running right now been running?**

```
● 正在执行 bash,已运行 1 分 12 秒    第 12 步   [bash]        1:12
```

and, once that step finishes, keeps the result on screen:

```
● 上一步(第 12 步)已完成,用时 3 分 45 秒                    3:45
```

The bar sits in the composer dock — the strip just above the input box, where the todo and goal bars live — with a second seat below the composer so a tall goal bar cannot push it out of view.

## Why

The harness already shows a turn-level clock at the bottom of the conversation, but it only appears after 15 seconds and it measures the whole turn. When you are watching a long `bash` call you cannot tell whether it started two seconds ago or has been stuck for four minutes, and the turn clock cannot tell you either.

This plugin measures **the current step**, from the instant its activity actually started:

- **Tool steps** are anchored to the tool call's own start time. An in-flight call exists in the live snapshot only while it is in flight, so `0:47` means the call itself has been running 47 seconds — not an estimate derived from the turn.
- **Thinking steps** fall back to the step boundary, the closest honest anchor for model time.
- The clock ticks from `0:00` with **no delay threshold**.

## What it says

The bar states the situation in plain language rather than showing a bare number:

| State | Wording |
| --- | --- |
| Running a tool | `正在执行 ,已运行 47 秒` |
| Several tools at once | `正在执行 bash,另有 2 个工具并行,本步已运行 5 秒` |
| Model streaming | `模型正在思考,本步已耗时 23 秒` |
| Submitted, no output yet | `已提交,正在等待模型响应,已等待 3 秒` |
| Finished step | `上一步(第 12 步)已完成,用时 3 分 45 秒` |
| Nothing running | `空闲,等待下一步` |

Alongside it: the step number, a chip of the running tool names (up to 4, then `+N`, hover for all), and a compact `m:ss` clock at the right edge.

Durations read naturally — `47 秒`, `1 分 12 秒`, `2 分钟`, `1 小时 3 分` — so `0:03` is never ambiguous. The wording is Chinese, matching the language of the session this was built for.

### Why the finished step stays

A step is frequently over in well under a second, so a bar that exists only *during* a step is easy to miss. Holding the last step's duration until the next step replaces it means a slow step — a `bash` call that ran for four minutes, say — can be identified after the fact. The record is kept only when the step's own `start` and `end` timestamps are both present; when they are not, the bar reports itself idle rather than inventing a duration.

## Install

```sh
dsh plugin --profile web add @climber47/dsh-step-clock
```

Then restart `dsh web`. The bar appears above the composer during the next running step.

## How it works

A dsh bundle, mounted as one inserted row:

- `package.json` declares `dsh.bundle.patch`, which is what makes the package installable, and `dsh.client` (`platform: web`), which is what serves the browser half.
- `cordis.patch.yml` inserts the `step-clock` row.
- `lib/index.js` is the (intentionally empty) host half. A bundle's row resolves the package root, so the package must be importable; this plugin has no host behaviour.
- `lib/client.js` is the browser half, in the `window.__ModuleLoader__.load({ id, factory })` registration shape a client bundle must have. React is taken from the module loader via `require('react')` rather than bundled.
- It registers one additive entry in `conversation.input.dock` (`replaceRisk: none`, so every shipped todo / goal / queue entry is untouched) and injects its stylesheet by creating a tagged `

数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。