Introduction¶
When running long tasks in DSH (DeepSeek Harness), there are two common confusions: first, you don’t know exactly how long this turn ran or how many tokens were burned; it is not visible on the interface. Second, before sending, you don’t know roughly how many tokens this turn will produce, the cost converted, or how long you have to wait. The former is a lack of data for post-hoc review, while the latter is the inability to make judgments before sending.
dsh-turn-eta addresses these two points by doing one thing: the conversation header displays the current turn’s duration, tokens, speed, and a remaining time countdown in real-time, while above the input box, it provides an estimate of output tokens, cost (≈¥), and estimated duration before sending. Below, I will introduce the positioning, installation, configuration, and usage of this plugin.
What is it¶
dsh-turn-eta is a DeepSeek Harness plugin. The directory page is https://www.skillhub.cn/plugins/2370998716-jpg/dsh-turn-eta, the source code is at https://github.com/2370998716-jpg/dsh-turn-eta, maintained by 2370998716-jpg, the author in package.json is zuo, and the license is MIT. The repository version is 1.1.3, and it belongs to the Model Inference category.
It solves only one thing: expose the actual duration and approximate output of each turn to the interface, so you have numbers to look at while waiting for results, instead of staring at nothing.
Core Features¶
The plugin places information in two locations, both of which are pure text, with no progress bars and no animations.
-
Conversation Header: Current duration, produced tokens, speed (tok/s), whether tools are currently running, and a remaining time countdown. The countdown follows a single rule: it only decreases, never increases.
-
Above the Input Box: Before sending, it estimates the approximate number of output tokens for this turn, the cost based on unit price (default
≈¥), and the estimated duration.
The default unit price is built-in, so even if cost-meter is not installed on the machine, ≈¥ can still be displayed. When cost-meter is installed, the plugin will prioritize reading its real bill unit price (see ‘Price Source Priority’ below).
After installation, open any conversation, and the header should appear similar to:
⏱ 0:03 · 120 tok · 60 tok/s · 估约 1:37
Above the input box, it should appear similar to:
⚖ 预计 3.2k tok 产出 · 上下文 60k · ≈¥0.016 · ~0:22
Note: Single-turn statistics only start accumulating after the first message is sent; the more historical turns, the more accurate the estimate.
Installation and Enablement¶
Requires Node.js ≥ 22.19 (DSH comes with it, usually no need to worry). Choose one of the three methods.
Method 1: Install directly from the repository, the most stable way. Replace <profile> with the profile you are using; for the desktop version, it is usually desktop, and for the Web version, it is web:
dsh plugin --profile <profile> add git+https://github.com/2370998716-jpg/dsh-turn-eta.git
On Windows, if dsh is not in PATH, use the full path (replace <你> with the current user):
cmd /c ""C:\Users\<你>\AppData\Local\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add git+https://github.com/2370998716-jpg/dsh-turn-eta.git"
Method 2: Install from a local folder. First, put the entire repository folder in any location (avoid paths with special symbols), then execute in the terminal:
dsh plugin --profile <profile> add "<path to the folder above>"
Method 3: Install from a custom index source, provided your DSH has a “Discover” page. Starting from DSH 0.2.1, if the plugin page has a “Discover” tab, you can add it to the index source:
https://raw.githubusercontent.com/2370998716-jpg/dsh-turn-eta/main/index.json
It will appear in the list as “Turn Duration and Cost Estimation”. If there is no “Discover” tab, use Method 1 directly.
After installation, you must fully exit DSH and reopen it (not just refresh the page). Host-side code is only loaded at startup, so you won’t see ≈¥ without a restart.
Uninstall command:
dsh plugin --profile <profile> remove dsh-turn-eta
A restart of DSH is also required.
Typical Usage: Changing Prices and Switching Models¶
By default, it uses DeepSeek’s token unit price (USD/1M tokens) with three tiers: cache miss, cache hit, and output. Prices double during peak hours (UTC 1–4, 6–10, i.e., Beijing 9–12, 14–18, Monday to Friday, excluding holidays). Peak and valley periods are judged by UTC windows, while days of the week and holidays are calculated based on Beijing Time.
To change prices or switch models, create a configuration file (Windows: C:\Users\<你>\.dsh\storages\dsh-turn-eta\config.json):
{
"model": "deepseek-flash",
"currency": "CNY",
"symbol": "¥",
"exchangeRate": 7.2,
"peakEnabled": true,
"peakWindows": [{ "start": 1, "end": 4 }, { "start": 6, "end": 10 }],
"prices": { "cacheMiss": 0.15, "cacheHit": 0.003, "output": 0.6 }
}
Configuration rules:
pricescan be written as the flat unit prices shown above, or as the full structure{ "models": { "deepseek-flash": { "cacheMiss": …, "cacheHit": …, "output": …, "peak": { … } } } }.- Only write the fields you want to change; unspecified ones will fall back to default values.
- No restart is needed after changing; wait up to 60 seconds (prices are cached for 1 minute).
The priority of price sources is: config.json override → ~/.dsh/storages/cost-meter/ledger.json (read real bill unit price if cost-meter is installed) → Built-in defaults. So machines with cost-meter will automatically use real unit prices, while those without use built-in prices.
The environment variable DSH_TURN_ETA_MODEL can temporarily specify which model’s price table to use, without changing the config file.
How the Numbers are Calculated¶
This section determines whether you can use these numbers with confidence.
- Countdown: Uses the historical median of “approximate tokens produced this turn”, then converts based on current speed. The target value is locked within the same turn, so the number will only go down, not jump back up, even if the tool runs for a long time.
- Adjustment Mechanism: Splits into three stages when exceeding the estimate. Within the median, it displays “Est. About” (估约); exceeding the median but still within the historical p75, it changes to “Est. At Most” (最多约) — this is an upper bound, not a new median, changed only once per turn; only when truly crossing p75 does it display “Overestimated” (超预估), at which point the number disappears and no new number is fabricated. The phrase in the README “Better to say at most first” means exactly this.
- Idle Time Doesn’t Count: When the wall-clock time of a turn is significantly greater than the actual work time (model + tools, > 2x and +20s), it records samples based on actual work time, avoiding pulling all subsequent estimates long due to one idle session. Single outliers are compressed to within 8 times the median.
- History Range: Hover over the header to see the p25–p75 history range; the header itself only shows a clean number.
- History Storage: Stored in
~/.dsh/storages/dsh-turn-eta/history.json; delete it to start learning anew.
Suitable Scenarios and Notes¶
Suitable for two types of people: first, AI developers who frequently run long tasks and need to review single-turn tokens and duration; second, people who want to judge how much money and time a turn will roughly cost before sending a message.
A few points to note:
- The plugin runs with the permissions of the current DSH process. Before installing, you should check the source code and license (MIT), especially when installing from a local folder or a third-party index source.
- The plugin uses the historical median for estimation. During cold start, there are only samples after the first message, so early numbers have limited reference value.
- The countdown only locks the target value within the same turn; it does not predict how long the tools themselves will run. It will not change if the tool gets stuck.
- The config file path is
~/.dsh/storages/dsh-turn-eta/config.json; changing the wrong field will fall back to default values without error.
Conclusion¶
The value of dsh-turn-eta lies in changing single-turn duration, tokens, and cost from “unclear” to “visible and estimable”: check real-time progress in the header, check pre-send estimates above the input box, and hover to view history ranges. Default unit prices are built-in and do not depend on additional plugins.
- Directory Page: https://www.skillhub.cn/plugins/2370998716-jpg/dsh-turn-eta
- GitHub: https://github.com/2370998716-jpg/dsh-turn-eta
- Issue: https://github.com/2370998716-jpg/dsh-turn-eta/issues
Feedback can be sent directly to 2370998716@qq.com; simply write “DSH version + what number you saw wrong in which interface”.