# dsh-balance
[English](#english) | [中文](#中文)
## English
A [DeepSeek Harness](https://github.com/deepseek-ai/dsh) Web plugin that displays your DeepSeek API balance in the sidebar footer.

> The plugin is currently `0.1.0` and requires DeepSeek Harness `>=0.1.0-rc.7`.
### Features
- Displays CNY and USD balances next to the sidebar settings area.
- Reads the balance through the official DeepSeek API endpoint.
- Keeps the API key on the server side; the browser only receives normalized balance data.
- Refreshes the balance automatically every 60 seconds.
- Shows `--` while loading, when no balance is available, or when the request fails.
- Supports installation directly from a GitHub repository.
### Requirements
- DeepSeek Harness `>=0.1.0-rc.7`
- The `web` profile
- A configured `DEEPSEEK_API_KEY`
### Installation
#### Install directly from GitHub
```bash
dsh plugin --profile web add github:eka3os/dsh-balance
```
Restart the Web profile after installation:
```bash
dsh web
```
`dsh plugin` installs the package into the selected profile and automatically activates it as a profile bundle because this package declares `dsh.bundle.patch`.
### Configuration
The plugin uses the `DEEPSEEK_API_KEY` credential reference. Configure the key through the DeepSeek Harness credentials/settings UI when available. You can also provide it through the launch environment for a single run:
```bash
DEEPSEEK_API_KEY=sk-your-key dsh web
```
For a managed local credential, add the key to `$DSH_HOME/.credentials.yaml`:
```yaml
DEEPSEEK_API_KEY: sk-your-key
```
Do not commit API keys or credential files to Git.
### How it works
1. The Host plugin registers `GET /api/dsh-balance`.
2. The route resolves `DEEPSEEK_API_KEY` through DSH credentials.
3. The Host requests `https://api.deepseek.com/user/balance` with a server-side Bearer token.
4. The client plugin renders the returned CNY/USD balances in the sidebar footer.
5. The client repeats the request every 60 seconds while the wide sidebar is visible.
### API endpoint
| Method | Path | Description |
| --- | --- | --- |
| `GET`, `HEAD` | `/api/dsh-balance` | Returns the current DeepSeek API balance. |
Successful responses contain the following shape:
```json
{
"isAvailable": true,
"balances": [
{ "currency": "CNY", "totalBalance": "10.00" },
{ "currency": "USD", "totalBalance": "1.00" }
]
}
```
The route returns `503` when the credential is missing and `502` when the DeepSeek API cannot be reached or returns an unsuccessful response. Unsupported methods return `405`.
### GitHub distribution
This plugin is distributed through GitHub only and is not published to npm. Push the repository to GitHub and make sure the built `lib/` files and the package files listed in `package.json` are committed.
### License
MIT
---
## 中文
一个用于 [DeepSeek Harness](https://github.com/deepseek-ai/dsh) Web 界面的插件,会将 DeepSeek API 余额显示在侧边栏底部。

> 当前版本为 `0.1.0`,要求 DeepSeek Harness `>=0.1.0-rc.7`。
### 功能
- 在侧边栏设置区域附近显示 CNY 和 USD 余额。
- 通过 DeepSeek 官方余额接口获取数据。
- API Key 只在服务端使用,浏览器只接收规范化后的余额数据。
- 每 60 秒自动刷新一次余额。
- 加载中、没有余额或请求失败时显示 `--`。
- 支持直接从 GitHub 仓库安装。
### 环境要求
- DeepSeek Harness `>=0.1.0-rc.7`
- `web` profile
- 已配置的 `DEEPSEEK_API_KEY`
### 安装
#### 直接从 GitHub 安装
```bash
dsh plugin --profile web add github:eka3os/dsh-balance
```
安装完成后重新启动 Web profile:
```bash
dsh web
```
`dsh plugin` 会将包安装到指定 profile,并根据本包声明的 `dsh.bundle.patch` 自动将其激活为 profile bundle。
### 配置
插件使用 `DEEPSEEK_API_KEY` 作为凭据引用。建议在 DeepSeek Harness 的凭据/设置界面中配置 API Key。也可以在启动时通过环境变量提供,仅对本次运行生效:
```bash
DEEPSEEK_API_KEY=sk-your-key dsh web
```
如果使用 DSH 的本地凭据文件,可以将密钥写入 `$DSH_HOME/.credentials.yaml`:
```yaml
DEEPSEEK_API_KEY: sk-your-key
```
请勿将 API Key 或凭据文件提交到 Git 仓库。
### 工作原理
1. Host 插件注册 `GET /api/dsh-balance` 路由。
2. 路由通过 DSH credentials 服务解析 `DEEPSEEK_API_KEY`。
3. Host 使用服务端 Bearer Token 请求 `https://api.deepseek.com/user/balance`。
4. Client 插件将返回的 CNY/USD 余额渲染到侧边栏底部。
5. 侧边栏处于宽布局时,Client 每 60 秒重复请求一次。
### API 接口
| 方法 | 路径 | 说明 |
| --- | --- | --- |
| `GET`、`HEAD` | `/api/dsh-balance` | 返回当前 DeepSeek API 余额。 |
成功响应示例:
```json
{
"isAvailable": true,
"balances": [
{ "currency": "CNY", "totalBalance": "10.00" },
{ "currency": "USD", "totalBalance": "1.00" }
]
}
```
凭据缺失时返回 `503`;DeepSeek API 无法访问或返回失败状态时返回 `502`;不支持的方法返回 `405`。
### GitHub 分发
本插件仅通过 GitHub 分发,不发布到 npm。将仓库推送到 GitHub,并确保已提交 `lib/` 构建产物以及 `package.json` 中列出的包文件。
### 许可证
MIT