Bundle
@ljcscp/dsh-session-cost
DeepSeek account balance and session-cost readout for the DeepSeek Harness Web GUI: official balance endpoint, auto-fetched official pricing with peak/off-peak hours, per-model costing (flash/pro).
- Source
- ljcscp
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 6 days ago
Readme
# dsh-session-cost
DeepSeek account balance and session-cost readout for the [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH) Web GUI.
- **Account balance** — queries the official `GET /user/balance` endpoint (the API key stays on the host, resolved per refresh through the DSH credentials seam)
- **Session spend** — token usage × **official DeepSeek prices**, auto-fetched from the [official pricing page](https://api-docs.deepseek.com/zh-cn/quick_start/pricing/) every 6h, so price changes never require a plugin update
- **Peak/off-peak pricing** — the 2026-08-17 rollout is applied automatically: peak hours 09:00-12:00 / 14:00-18:00 (Beijing), off-peak at half price
- **Per-model costing** — the session's actual model (deepseek-v4-flash / deepseek-v4-pro) is read from the newest assistant message's provenance and priced at its own bucket
The composer dock shows one readout under the shipped stats line:
```
本会话 ¥0.90 · 余额 ¥30.82
```
Hover for the breakdown (input / cache read / output, model, pricing source) and the balance split (granted + topped up).
## Requirements
- DeepSeek Harness `0.1.0-rc.5` or newer (web profile)
- A DeepSeek API key stored through the DSH credentials seam (`DEEPSEEK_API_KEY` — the web Models page writes it)
## Installation
From a git URL (no npm account needed):
```sh
dsh plugin --profile web add https://github.com/ljcscp/dsh-session-cost
```
From npm:
```sh
dsh plugin --profile web add @ljcscp/dsh-session-cost
```
From a local checkout (development):
```sh
git clone https://github.com/ljcscp/dsh-session-cost.git
dsh plugin --profile web add link:$(pwd)/dsh-session-cost
```
Restart `dsh web`, then refresh the page. The readout appears in the composer dock below the conversation stats line.
## Configuration
Zero-config by default. Optional composition settings:
```yaml
- insert:
- id: session-cost
name: '@ljcscp/dsh-session-cost'
config:
refreshMs: 60000 # balance cache lifetime (ms)
pricingRefreshHours: 6 # official-pricing page refresh cadence
apiKeyEnv: DEEPSEEK_API_KEY
baseURL: https://api.deepseek.com
```
| Key | Type | Default | Meaning |
|---|---|---|---|
| `refreshMs` | `number` | `60000` | Balance cache lifetime in ms (failures retry after 10s) |
| `pricingRefreshHours` | `number` | `6` | Hours between official-pricing page refreshes |
| `apiKeyEnv` | `string` | `DEEPSEEK_API_KEY` | Credential ref storing the DeepSeek API key |
| `baseURL` | `string` | `https://api.deepseek.com` | Endpoint base; `/user/balance` is appended |
| `trustedHosts` | `string[]` | `[]` | Non-loopback authorities served beyond the trust fence |
## How it works
- **Host half** (`src/index.ts`): registers one trusted webserver route `/session-cost` that serves the balance snapshot (cached `refreshMs`) and the effective pricing snapshot (official page parsed per `pricingRefreshHours`, peak/off-peak band applied by the current Beijing hour once the rollout is live). The API key never leaves the host.
- **Browser half** (`src/client/`): a `conversation.composer.dock` entry that reads the `tokenUsage` projection, detects the session's model from the newest assistant provenance, applies the effective bucket, and renders the readout — refreshed every minute.
Cost formula (matches the official billing rule `扣减费用 = token 消耗量 × 模型单价`):
```
spend = uncachedInput × inputPerMillion + cacheRead × cacheReadPerMillion + output × outputPerMillion (per 1M tokens)
```
Cache writes bill at the uncached input rate (DeepSeek reports only hit/miss buckets). The readout is an estimate at official rates; the official bill on platform.deepseek.com/usage lags by a few minutes of settlement.
## License
MIT. The browser-bundle build preset (`shared/`) is adapted from [dsh-balance-meter](https://github.com/Ghost011118/dsh-balance-meter) (BSD-3-Clause), which adapted it from [deepseek-harness](https://github.com/deepseek-ai/deepseek-harness) (MIT).Install
dsh plugin --profile web add github:ljcscp/dsh-session-cost
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install ljcscp-dsh-session-cost from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.