@feiyang666/dsh-usage-plugin 1.9.0 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -2
- package/README.md +112 -117
- package/README.zh.md +267 -0
- package/cordis.patch.yml +23 -22
- package/lib/balance.js +205 -0
- package/lib/client.js +1447 -1247
- package/lib/index.js +1196 -911
- package/package.json +6 -2
- package/scripts/wire.js +109 -108
- package/README.en.md +0 -272
package/CHANGELOG.md
CHANGED
|
@@ -8,9 +8,24 @@
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## v1.9.2 (2026-08-20)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
> 修复 issue #4:持久化路径随会话工作区漂移,导致历史用量数据"消失/统计为 0",且 UI 显示路径与实际落盘路径不一致。
|
|
14
|
+
|
|
15
|
+
### 修复
|
|
16
|
+
- **固定专用数据目录**:持久化根不再跟随 `agent.session.cwd` / `sandboxPolicy.workspaceRoot` 漂移。解析顺序为:环境变量 `DSH_USAGE_DATA_DIR` > 系统应用数据目录 `%LOCALAPPDATA%\dsh-usage-plugin`(仅 Windows;macOS/Linux 下该分支不生效,因 `LOCALAPPDATA`/`APPDATA` 未定义)> 用户主目录下专用文件夹 `~/dsh-usage-data`(Windows 为 `%USERPROFILE%\dsh-usage-data`,macOS/Linux 为 `~/dsh-usage-data`)。该目录独立于桌面端安装目录、`~/.dsh` 主目录与任何会话工作区,删除工作区或卸载 APP 都不会丢失数据。
|
|
17
|
+
- **启动时合并去重**:首次初始化与会话激活时,自动把散落在用户主目录、`.dsh`、各工作区旧路径里的 `usage-records.json` 按 `time` 去重合并进固定根(复用现有 `normalizeRecord`),不再只读当前根的那一份。
|
|
18
|
+
- **UI 路径一致**:统计页顶部显示的「数据持久化」路径恒等于真实落盘路径;写入不再绑定工作区沙箱策略,固定目录可正常写入。
|
|
19
|
+
- **数据迁移**:切换根目录时对旧根记录做真正合并(非复制/分裂),重启后自动恢复全部历史。
|
|
20
|
+
|
|
21
|
+
### 影响
|
|
22
|
+
- 旧版本落在 `%USERPROFILE%\dsh-usage`、`.dsh\dsh-usage`、各工作区 `dsh-usage` 下的历史记录,会在首次启动本版本时自动合并到固定目录,无需手动迁移。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## v1.9.1 (2026-08-16)
|
|
27
|
+
|
|
28
|
+
- **文档**: README 改为英文优先(`README.md` 英文 + 新增 `README.zh.md` 中文);补充「npm 包名已更换」醒目通知(旧包名 `@feiyang666/deepseekharnessdesktop` → 新包名 `@feiyang666/dsh-usage-plugin`),并移除发布教程等无关内容;修正 tarball 测试命令为新包名文件名。
|
|
14
29
|
|
|
15
30
|
---
|
|
16
31
|
|
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
# DeepSeek Harness
|
|
3
|
+
# DeepSeek Harness Usage & Cost Tracker (dsh-usage-plugin)
|
|
4
4
|
|
|
5
|
-
[
|
|
5
|
+
**English** · [简体中文](./README.zh.md)
|
|
6
6
|
|
|
7
7
|
[GitHub](https://github.com/feiyang-dev/dsh-usage-plugin) · [npm](https://www.npmjs.com/package/@feiyang666/dsh-usage-plugin) · MIT License
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
**A community plugin for DeepSeek Harness** — records token usage and cost for every model call, with peak/off-peak billing, balance query, a calendar heatmap, and CSV / JSON / PNG export.
|
|
10
10
|
|
|
11
11
|

|
|
12
12
|

|
|
@@ -16,129 +16,129 @@
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
-
> ## 🔔
|
|
19
|
+
> ## 🔔 Important Notice (2026-08-16): npm package renamed
|
|
20
20
|
>
|
|
21
|
-
>
|
|
21
|
+
> The **npm package has been renamed from `@feiyang666/deepseekharnessdesktop` to `@feiyang666/dsh-usage-plugin`** (matching the GitHub repo `feiyang-dev/dsh-usage-plugin`).
|
|
22
22
|
>
|
|
23
|
-
> -
|
|
24
|
-
> -
|
|
25
|
-
> -
|
|
23
|
+
> - Use the new package name for install / upgrade: `dsh plugin --profile web add @feiyang666/dsh-usage-plugin`
|
|
24
|
+
> - The old package `@feiyang666/deepseekharnessdesktop` remains published for a while, but it is **no longer maintained and will not receive updates** — please migrate soon.
|
|
25
|
+
> - The desktop client ([`DeepSeek Harness Desktop`](https://github.com/feiyang-dev/DeepSeek-Harness-Desktop)) supports both package names and will auto-detect old-name installs with a **one-click update** to the new name.
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Overview
|
|
30
30
|
|
|
31
|
-
dsh-usage-plugin
|
|
31
|
+
dsh-usage-plugin is a **usage & cost tracker** plugin in the DeepSeek Harness ecosystem (a DSH plugin shipped as a Host + Client two-in-one package). After installation, **"Usage & Cost"** and **"Balance Query"** tabs appear in the Web UI, right after "Conversation" and "Trace":
|
|
32
32
|
|
|
33
|
-
>
|
|
33
|
+
> Supports **Windows / macOS / Linux**: paths are handled per platform (`node:path`), and the folder picker / "reveal in file manager" use each OS's native mechanism (macOS: `osascript` / `open`; Linux: `zenity` / `xdg-open`). Balance query and export do not depend on Windows-only commands.
|
|
34
34
|
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
35
|
+
- **Usage & Cost**: records each model call's token usage and cache hits (input miss / cache hit / cache write / output / reasoning / finish reason), and computes cost using DeepSeek's peak/valley or base pricing (peak hours are automatically priced by Beijing time 09:00–12:00 and 14:00–18:00). Model names come from the actual request parameters, so non-DeepSeek models are shown truthfully instead of "unknown model"; models without an official price are counted as 0. The overview shows a by-model table plus a by-API-provider × model drill-down (each provider grouped with every model's calls and peak/off-peak cost split) and a grand total row.
|
|
36
|
+
- **Usage Calendar**: a monthly daily-usage heatmap (colored by cost or call count), hover for details including the peak/off-peak cost split, click a day for its call list and peak/off-peak totals, plus a per-day statistics table with peak cost / off-peak cost / total columns and monthly rollups.
|
|
37
|
+
- **Cache Hit List**: newest-first, fully scrollable, with quick filters (Today / 7 days / 30 days / All) and custom date ranges; the summary line and footer total split peak vs off-peak consumption with a grand cost total. The list is paginated (100 rows per page), so it stays smooth even with large data volumes.
|
|
38
|
+
- **Price Table**: the official DeepSeek API price table — base and peak/valley unit prices shown side by side (peak vs off-peak), editable in-panel and persisted to `pricing.json`, with a reset-to-default option.
|
|
39
|
+
- **Balance Query**: queries your DeepSeek account balance using the configured `DEEPSEEK_API_KEY`.
|
|
40
|
+
- **Export**: CSV / JSON / **PNG long image** (newest-first, up to the latest 2000 records, warns if exceeded; the PNG report includes peak/off-peak cost columns), to any directory (native picker), auto-opens the folder after export.
|
|
41
|
+
- **Import**: merge-imports JSON / CSV files, deduplicated by time.
|
|
42
|
+
- **Persistence**: records are written live to `<session workspace>/dsh-usage/usage-records.json` and restored on restart (cap 100000 records).
|
|
43
|
+
- **UI adaptation**: panel typography scales with the app's display-size setting (em-relative fonts); table wrapping and spacing are tuned so large display sizes stay readable.
|
|
44
44
|
|
|
45
45
|
---
|
|
46
46
|
|
|
47
|
-
##
|
|
47
|
+
## Screenshots
|
|
48
48
|
|
|
49
|
-
###
|
|
50
|
-

|
|
51
51
|
|
|
52
|
-
###
|
|
53
|
-

|
|
54
54
|
|
|
55
|
-
##
|
|
55
|
+
## Recommended Installation
|
|
56
56
|
|
|
57
|
-
>
|
|
57
|
+
> Either method works and is equivalent. **We recommend the desktop app** — fully graphical, no command line needed.
|
|
58
58
|
|
|
59
|
-
###
|
|
59
|
+
### Option 1 (recommended): One-click via the desktop app
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
Install [DeepSeek Harness Desktop](https://github.com/feiyang-dev/DeepSeek-Harness-Desktop), open it, then go to **"Install Plugins" → Recommended → Usage & Cost Tracker → Install** and click **"Restart Service Now"** to activate.
|
|
62
62
|
|
|
63
|
-
###
|
|
63
|
+
### Option 2: Command line
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
|
-
#
|
|
66
|
+
# Prerequisite: install dsh (npm install -g @deepseek-ai/dsh)
|
|
67
67
|
dsh plugin --profile web add @feiyang666/dsh-usage-plugin
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
Or install to another profile:
|
|
71
71
|
|
|
72
72
|
```bash
|
|
73
73
|
dsh plugin --profile web add @feiyang666/dsh-usage-plugin
|
|
74
74
|
dsh plugin --profile headless add @feiyang666/dsh-usage-plugin
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
Restart the dsh web service after installation. Detailed manual install / wiring / uninstall / troubleshooting follows below.
|
|
78
78
|
|
|
79
79
|
---
|
|
80
80
|
|
|
81
|
-
##
|
|
81
|
+
## What's in the package
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
One npm package = a **host half** (Node-side Cordis plugin: recording, billing, balance query, export — see `lib/index.js`) + a **client half** (browser-side panel — see `lib/client.js`, which talks to the host via `/usage/api`).
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
The package integrates with DSH through two declarations:
|
|
86
86
|
|
|
87
|
-
|
|
|
87
|
+
| Declaration | Purpose |
|
|
88
88
|
| --- | --- |
|
|
89
|
-
| `dsh.bundle.patch
|
|
90
|
-
| `dsh.client` + `exports["./client"]` |
|
|
89
|
+
| `dsh.bundle.patch` (`cordis.patch.yml`) | Lets DSH recognize it as a **standard bundle plugin package**: `dsh plugin --profile <name> add <package>` installs and wires it in one command, no manual config editing |
|
|
90
|
+
| `dsh.client` + `exports["./client"]` | Lets the web client auto-load the browser panel at `/plugins/<package>/client.js` |
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
So for users, **installation is one command** — no YAML editing, no manual file copying.
|
|
93
93
|
|
|
94
94
|
---
|
|
95
95
|
|
|
96
|
-
##
|
|
96
|
+
## Installation (for users)
|
|
97
97
|
|
|
98
|
-
### 0.
|
|
98
|
+
### 0. Prerequisites
|
|
99
99
|
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
100
|
+
- DeepSeek Harness installed (`npm install -g @deepseek-ai/dsh`, or a desktop app built on it, or `npx @deepseek-ai/dsh web`).
|
|
101
|
+
- Option A (recommended) needs **pnpm**: `npm install -g pnpm` (or `corepack enable`).
|
|
102
|
+
- Make sure `dsh` is on PATH (for the desktop app, run in its bundled terminal).
|
|
103
103
|
|
|
104
|
-
### 1.
|
|
104
|
+
### 1. Method A (recommended): one command
|
|
105
105
|
|
|
106
106
|
```bash
|
|
107
107
|
dsh plugin --profile web add @feiyang666/dsh-usage-plugin
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
This does three things (all automatic):
|
|
111
111
|
|
|
112
|
-
1.
|
|
113
|
-
2.
|
|
114
|
-
3.
|
|
112
|
+
1. Installs the package via pnpm into `~/.dsh/profiles/web` (auto-initializes the profile on first use);
|
|
113
|
+
2. Detects the package's `dsh.bundle` declaration and writes the package name into the profile's `dsh.profile.bundles` layer list;
|
|
114
|
+
3. After restart, DSH reads the package's `cordis.patch.yml` and mounts the plugin row into the app tree — **no manual config editing**.
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
Same for other profiles (replace `web` with your profile name, e.g. `dsh plugin --profile headless add ...`; `dsh web` equals `dsh --profile web`).
|
|
117
117
|
|
|
118
|
-
>
|
|
118
|
+
> Test a local tarball: `dsh plugin --profile web add C:\path\to\feiyang666-dsh-usage-plugin-1.9.0.tgz`
|
|
119
119
|
|
|
120
|
-
### 2.
|
|
120
|
+
### 2. Method B: manual install (no pnpm / no `dsh plugin`)
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
Only for when you have no pnpm or want full manual control. **Do not `npm install` directly at `~/.dsh/profiles`** (that dir has no package.json; npm would treat the whole node_modules as residue and wipe it).
|
|
123
123
|
|
|
124
|
-
**B1.
|
|
124
|
+
**B1. Use pnpm but not `dsh plugin`:**
|
|
125
125
|
|
|
126
126
|
```bash
|
|
127
127
|
cd ~/.dsh/profiles/web
|
|
128
128
|
pnpm add @feiyang666/dsh-usage-plugin
|
|
129
|
-
#
|
|
129
|
+
# then manually append the plugin row to web/cordis.patch.yml (see B3) and restart
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
-
**B2.
|
|
132
|
+
**B2. Or use npm:** add a minimal package.json to the profile first, then install:
|
|
133
133
|
|
|
134
134
|
```bash
|
|
135
135
|
cd ~/.dsh/profiles/web
|
|
136
|
-
#
|
|
136
|
+
# if no package.json exists there yet (only after `dsh plugin` init):
|
|
137
137
|
# echo '{"name":"dsh-profile-web","private":true,"dependencies":{}}' > package.json
|
|
138
138
|
npm install @feiyang666/dsh-usage-plugin
|
|
139
139
|
```
|
|
140
140
|
|
|
141
|
-
**B3.
|
|
141
|
+
**B3. Wire it up (once, idempotent):** append to `~/.dsh/profiles/web/cordis.patch.yml`:
|
|
142
142
|
|
|
143
143
|
```yaml
|
|
144
144
|
- insert:
|
|
@@ -153,107 +153,101 @@ npm install @feiyang666/dsh-usage-plugin
|
|
|
153
153
|
- agents
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
Or just run the package's built-in wiring script (auto-finds the profile and appends, idempotent):
|
|
157
157
|
|
|
158
158
|
```bash
|
|
159
159
|
node node_modules/@feiyang666/dsh-usage-plugin/scripts/wire.js
|
|
160
160
|
```
|
|
161
161
|
|
|
162
|
-
> ⚠️
|
|
162
|
+
> ⚠️ The `inject` list is **required**: it makes Cordis wait until `fs` / `webServer` / `subprocess` / `credentials` / `sandboxPolicy` / `agents` are ready before activating the plugin. Without it the `/usage/api` route never registers and the panel fails with `Unexpected end of JSON input`.
|
|
163
163
|
|
|
164
|
-
### 3.
|
|
164
|
+
### 3. Method C: desktop app
|
|
165
165
|
|
|
166
|
-
|
|
166
|
+
The desktop app (e.g. [DeepSeek Harness Desktop](https://github.com/feiyang-dev/DeepSeek-Harness-Desktop)) uses the same `~/.dsh/profiles` underneath. Run Method A's command in any terminal, restart the app, and the plugin activates automatically (the app starts the same `dsh web`).
|
|
167
167
|
|
|
168
|
-
### 4.
|
|
168
|
+
### 4. Restart and verify
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
Restart the DeepSeek Harness web app (command line: kill the old process and re-run `dsh web`; desktop: fully quit and reopen). Then:
|
|
171
171
|
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
-
|
|
172
|
+
- Refresh http://127.0.0.1:3080 — after "Conversation" and "Trace", you should see **"Usage & Cost"** and **"Balance Query"** tabs; there are entries in Settings too.
|
|
173
|
+
- The "Usage & Cost" panel contains **Overview / Usage Calendar / Cache Hit List / Price Table** subtabs.
|
|
174
|
+
- Send a message and the "Usage & Cost" panel should show this call's token / cost record.
|
|
175
175
|
|
|
176
|
-
### 5.
|
|
176
|
+
### 5. Configuration (for balance query)
|
|
177
177
|
|
|
178
|
-
|
|
178
|
+
"Balance Query" uses the configured `DEEPSEEK_API_KEY`: set the API Key in **Settings → Models** (same key used for chats), then open the "Balance Query" tab and click "Query Balance".
|
|
179
179
|
|
|
180
180
|
---
|
|
181
181
|
|
|
182
|
-
##
|
|
182
|
+
## Uninstall
|
|
183
183
|
|
|
184
184
|
```bash
|
|
185
185
|
dsh plugin --profile web remove @feiyang666/dsh-usage-plugin
|
|
186
186
|
```
|
|
187
187
|
|
|
188
|
-
|
|
188
|
+
(Equivalent to pnpm remove; `dsh plugin` auto-removes the package name from the `dsh.profile.bundles` layer list.) Restart the app afterward.
|
|
189
189
|
|
|
190
|
-
|
|
190
|
+
For manual installs (Method B), do it in reverse: remove the `usage-plugin` row from `cordis.patch.yml`, then `pnpm remove` / `npm uninstall` the package, and restart.
|
|
191
191
|
|
|
192
|
-
>
|
|
192
|
+
> Upgrading from a 1.0.x manual-wiring install to 1.1.x: first remove the old `usage-plugin` row from `cordis.patch.yml` (or follow the uninstall flow), then reinstall via Method A to avoid mounting the plugin twice.
|
|
193
193
|
|
|
194
194
|
---
|
|
195
195
|
|
|
196
|
-
##
|
|
196
|
+
## Data & locations
|
|
197
197
|
|
|
198
|
-
-
|
|
199
|
-
- 价格配置(面板内编辑后保存):`<会话工作区>/dsh-usage/pricing.json`
|
|
200
|
-
- 导出目录(默认):`<会话工作区>/dsh-usage/{csv,json,images}/`
|
|
201
|
-
- 自定义导出目录:在面板「导出目标目录」里填写或点「选择目录…」
|
|
202
|
-
- 启动诊断日志(若插件激活失败):会话工作区下的 `dsh-usage-boot.log`
|
|
198
|
+
> **Since v1.9.2**, records are stored in a **fixed, dedicated data directory** (fixes [#4](https://github.com/feiyang-dev/dsh-usage-plugin/issues/4)). The path no longer follows the session workspace / `~/.dsh` / desktop-app install dir, so your history never "disappears" (counted as 0) when the workspace changes, and the path shown in the UI equals the on-disk path.
|
|
203
199
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
| 安装时连不上 npm 官方源 | 配置镜像:`npm config set registry https://registry.npmmirror.com`(或对 pnpm 设 `pnpm config set registry ...`)后再执行安装命令 |
|
|
216
|
-
| 卸载后仍报 `Cannot find package '@feiyang666/...'` | profile 里残留了包引用。删掉 `cordis.patch.yml` 中对应行与 `dsh.profile.bundles` 里的包名,重启 |
|
|
200
|
+
- **Records**: `<data root>/dsh-usage/usage-records.json`
|
|
201
|
+
- Resolution order for the **data root**:
|
|
202
|
+
1. env var `DSH_USAGE_DATA_DIR` (if set) — overrides everything;
|
|
203
|
+
2. Windows: `%LOCALAPPDATA%\dsh-usage-plugin` (falls back to `%APPDATA%` if `LOCALAPPDATA` is unset);
|
|
204
|
+
3. user home dir: `~/dsh-usage-data` (Windows `%USERPROFILE%\dsh-usage-data`, macOS/Linux `~/dsh-usage-data`).
|
|
205
|
+
- Default on Windows: `%LOCALAPPDATA%\dsh-usage-plugin\dsh-usage\usage-records.json`
|
|
206
|
+
- **Legacy data auto-merge**: on first start, records previously scattered in `%USERPROFILE%\dsh-usage`, `~/.dsh/dsh-usage`, and each workspace's `dsh-usage` (or `.dsh-usage-records.json`) are merged into the fixed root, deduplicated by `time` — no manual migration needed.
|
|
207
|
+
- Price config (edited & saved in the panel): `<data root>/dsh-usage/pricing.json`
|
|
208
|
+
- Default export dir: `<data root>/dsh-usage/{csv,json,images}/`
|
|
209
|
+
- Custom export dir: set in the panel's "Export target directory" or click "Choose directory…"
|
|
210
|
+
- Startup diagnostics (if the plugin fails to activate): `dsh-usage-boot.log` next to the data root
|
|
217
211
|
|
|
218
212
|
---
|
|
219
213
|
|
|
220
|
-
##
|
|
214
|
+
## FAQ
|
|
221
215
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
216
|
+
| Symptom | Cause / Fix |
|
|
217
|
+
| --- | --- |
|
|
218
|
+
| Panel reports `Unexpected end of JSON input` | The plugin row is missing the `inject` list, so the route isn't registered. Add the inject list per Method B3 and restart |
|
|
219
|
+
| Panel blank / no top tab | Plugin not activated. Check `dsh-usage-boot.log`; confirm the `cordis.patch.yml` row exists with the correct `name` |
|
|
220
|
+
| Balance query fails with "DEEPSEEK_API_KEY not configured" | Set the API Key in Settings → Models |
|
|
221
|
+
| Balance query network error | Ensure `api.deepseek.com` is reachable (configure a proxy if needed) |
|
|
222
|
+
| `dsh plugin` reports pnpm not found | Install pnpm: `npm install -g pnpm` |
|
|
223
|
+
| Install can't reach the npm registry | Set a mirror: `npm config set registry https://registry.npmmirror.com` (or `pnpm config set registry ...`) and retry |
|
|
224
|
+
| After uninstall, still reports `Cannot find package '@feiyang666/...'` | A package reference remains in the profile. Remove the corresponding row from `cordis.patch.yml` and the package name from `dsh.profile.bundles`, then restart |
|
|
231
225
|
|
|
232
226
|
---
|
|
233
227
|
|
|
234
|
-
##
|
|
228
|
+
## Related Projects
|
|
235
229
|
|
|
236
|
-
|
|
|
230
|
+
| Project | Description | Installation |
|
|
237
231
|
| --- | --- | --- |
|
|
238
|
-
| [DeepSeek Harness
|
|
239
|
-
| [
|
|
240
|
-
| [DeepSeek-Harness](https://github.com/deepseek-ai/DeepSeek-Harness) |
|
|
232
|
+
| [DeepSeek Harness Desktop](https://github.com/feiyang-dev/DeepSeek-Harness-Desktop) | Windows desktop console: install/start/stop/restart the dsh web service with one click, built-in plugin management — **install this plugin from its Recommended section** | Download the desktop app and click a few buttons |
|
|
233
|
+
| [Data Vault (dsh-vault)](https://github.com/feiyang-dev/dsh-vault) | Auto backup / wipe detection / one-click restore — protects chat history and workspace data | One-click from the desktop app, or `dsh plugin add @feiyang666/dsh-vault` |
|
|
234
|
+
| [DeepSeek-Harness](https://github.com/deepseek-ai/DeepSeek-Harness) | Official CLI / Web service | Quick start below |
|
|
241
235
|
|
|
242
|
-
###
|
|
236
|
+
### Running DeepSeek Harness
|
|
243
237
|
|
|
244
|
-
|
|
238
|
+
**Quick start (via npm)**
|
|
245
239
|
|
|
246
|
-
|
|
240
|
+
Install Node.js, then run:
|
|
247
241
|
|
|
248
242
|
```bash
|
|
249
243
|
npx @deepseek-ai/dsh web
|
|
250
244
|
```
|
|
251
245
|
|
|
252
|
-
|
|
246
|
+
This command starts the Web UI at the default address http://127.0.0.1:3080. See the [Web UI Guide](https://github.com/deepseek-ai/DeepSeek-Harness) for details.
|
|
253
247
|
|
|
254
|
-
|
|
248
|
+
**Run from source**
|
|
255
249
|
|
|
256
|
-
|
|
250
|
+
To run from the repository source:
|
|
257
251
|
|
|
258
252
|
```bash
|
|
259
253
|
git clone https://github.com/deepseek-ai/deepseek-harness.git
|
|
@@ -263,10 +257,11 @@ pnpm run build
|
|
|
263
257
|
pnpm dsh web
|
|
264
258
|
```
|
|
265
259
|
|
|
266
|
-
##
|
|
260
|
+
## Acknowledgements
|
|
267
261
|
|
|
268
|
-
- **[@
|
|
262
|
+
- **[@mumuer1024](https://github.com/mumuer1024)**: reported and diagnosed the persistence-path drift across workspaces (history "disappearing" / counted as 0) and proposed storing data in a fixed, dedicated directory ([#4](https://github.com/feiyang-dev/dsh-usage-plugin/issues/4)).
|
|
263
|
+
- **[@liu3734](https://github.com/liu3734)**: reported and diagnosed the Windows-only path handling / spawn issues on macOS (POSIX) and proposed the cross-platform fix ([#1](https://github.com/feiyang-dev/dsh-usage-plugin/issues/1)).
|
|
269
264
|
|
|
270
|
-
##
|
|
265
|
+
## License
|
|
271
266
|
|
|
272
267
|
MIT © dsh-usage-plugin
|