# DeepSeek Harness Tray

一个 Windows 系统托盘启动器，用于管理 [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness)、本机 OpenAI-compatible 模型（例如 LM Studio），以及私人 Telegram Bot 控制界面。

> 这是独立的社区工具，并非 DeepSeek 官方产品。

## 功能

- 从系统托盘启动、停止、重启与开启安全的 DSH Web 页面。
- 安装、修复、重新安装及卸载全局 `@deepseek-ai/dsh`。
- 在 Settings 配置 Provider、模型、Base URL、API Key、连接超时、最大输出 Token 和项目目录。
- 测试 LM Studio/OpenAI-compatible 连接，并刷新、加载或卸载模型。
- 自动续写：自定义 DSH 构建可在 Token 上限后继续生成，累计最多 1,000,000 Token。
- 图片视觉分析：Telegram 图片会发送到 Settings 中选择的视觉模型。
- Telegram Bot：中文回复、底部中文菜单、任务队列、取消、进度、状态、历史与 Markdown 结果档案。
- Telegram Owner 专用控制：白名单、DSH 重启／停止二次确认、每日状态通知。
- 每日统计报表：Token、执行时间、步骤、首 Token、生成速度与本机资源峰值。
- 长 Telegram 输出每 3,900 字符分段发送，并附上完整 Markdown 档案。
- DSH 的内部 reasoning 不会发送到 Telegram，只会回传最终答案。

## 系统需求

- Windows 10 或 Windows 11
- [Node.js](https://nodejs.org/)（安装 DSH 时需要；建议 LTS）
- Python 3.12+（从源码构建时需要）
- LM Studio 或另一套 OpenAI-compatible 模型服务（可选）
- Telegram Bot Token（仅使用 Telegram 功能时需要）

启用自动续写时，需有 DSH 源码目录，预设为：

```text
C:\Users\<你的用户名>\Documents\deepseek-harness
```

## 快速开始

1. 下载 Release 中的 `DeepSeek Harness Tray vX.X.X.exe` 并放到固定目录。
2. 启动程式，在 Windows 通知区域寻找 **D** 图标。
3. 右键图标，选择 **Install DeepSeek Harness**（首次使用时）。
4. 开启 **Settings…**，设定模型后按 **Save**。
5. 选择 **Restart DSH**，再选择 **Open DSH**。

首次由 Tray 接管旧的 DSH 程序时，建议执行一次 **Restart DSH**，以建立新的安全浏览器链接。

## LM Studio 配置示例

```text
Open Address: http://localhost:3080
Provider: lmstudio
Model: <LM Studio 已加载的模型 ID>
Base URL: http://127.0.0.1:1234/v1
API Key: lm-studio
Timeout: 30
```

按 **Test Connection** 会读取 `/v1/models` 并更新模型选择。选择模型、按 **Save** 后，重启 DSH 使设定生效。

## Telegram Bot

### 首次设置

1. 在 Telegram 开启 [@BotFather](https://t.me/BotFather)，使用 `/newbot` 建立机器人。
2. 使用 Windows PowerShell 保存 Bot Token：

   ```powershell
   [Environment]::SetEnvironmentVariable(
     "DSH_TELEGRAM_BOT_TOKEN",
     "paste-your-BotFather-token-here",
     "User"
   )
   ```

3. 关闭并重新开启 Tray。
4. 在 Settings 填入你的 **Telegram Owner User ID**，勾选 **Enable Telegram Bot**，然后按 **Save**。
5. 在聊天中发送 `/start`，Bot 会以你的 Telegram 名称打招呼并显示中文底部菜单。

在 BotFather 使用 `/setjoingroups` 并选择 **Disable**，避免 Bot 被加入群组。

### 中文菜单与指令

Owner 会看到 4 × 3 的菜单：

| 第一行 | 第二行 | 第三行（仅 Owner） |
| --- | --- | --- |
| 📝 提交任务、📷 图片分析、📊 查看状态、⚙️ 查看设定 | 🗂️ 任务历史、⏹️ 取消任务、❓ 帮助、🙈 隐藏菜单 | 🔄 重启 DSH、⛔ 停止 DSH、👥 白名单、🏠 主菜单 |

也可直接输入：

```text
/ask <任务内容>
/cancel
/status
/settings
/history
/whitelist list
/whitelist add <Telegram user ID>
/whitelist remove <Telegram user ID>
```

`/restart` 与 `/stop` 只对 Owner 开放，且必须在 Telegram 点击二次确认按钮。点击 **🙈 隐藏菜单** 后，可发送 `/start` 或 `/help` 重新显示菜单。

### Telegram 任务与视觉分析

- **Telegram Task Timeout (seconds)** 默认是 `7200`（两小时），最大是 `86400`。
- Telegram 只有一个执行中的任务和一个等待位置；使用 `/cancel` 会取消执行中的任务并清空等待队列。
- 文字任务使用 DSH headless profile，并要求以中文回覆。
- 将图片直接发送给 Bot（可加 caption）会调用 Settings 中的视觉模型。请先选择支持图片输入的模型，并启用 **Enable Vision / Image Analysis**。
- 图片与长结果会储存在 `%APPDATA%\DSHTray`，不应上传至 GitHub。

### 每日统计报表

在 Settings 启用 **Daily Telegram Status** 并设定 `HH:MM` 时间后，Owner 会在每天指定时间收到报表；也可使用 Owner 菜单的 **📅 每日报表** 或输入 `/daily` 随时查看当天统计。

报表会包含任务数、输入／输出 Token、LLM 总运行时间、步骤数、平均首 Token 时间、平均 tok/s，以及本机 CPU／DRAM／NVIDIA GPU VRAM 与温度峰值。

- 使用启用自动续写的自定义 DSH 时，输入／输出 Token、步骤与首 Token 取自 Provider 回报。
- 官方 DSH 或没有 usage 回报的模型会以明确标示的估算值显示 Token。
- GPU／VRAM／温度是 Tray 所在电脑的系统级峰值，需要 NVIDIA `nvidia-smi`；若 LM Studio 跑在另一台电脑，不能取得远端机器的硬件数据。

## 自动续写

启用 **Auto Continue on Token Limit** 后，Tray 会使用本地 DSH 自定义构建。当模型达到单次输出上限时，会要求模型从中断处继续；**Auto Continue Limit** 最高为 1,000,000 Token。

Settings 顶部出现绿色勾选，表示自定义构建已可使用。若显示红色叉号，请打开 **Build Status…** 查看日志。

## 从源码构建

在本目录执行：

```bat
py -3.12 -m pip install -r requirements.txt
py -3.12 -m PyInstaller --noconfirm --onefile --windowed --name "DeepSeek Harness Tray" dsh_tray_launcher.py
```

输出会在 `dist\DeepSeek Harness Tray.exe`。

## GitHub 上传与安全

建议提交：

- `dsh_tray_launcher.py`
- `README.md`
- `requirements.txt`
- `.gitignore`

不要提交：

- `build/`、`dist/`、`__pycache__/`
- `%APPDATA%\DSHTray\settings.json`（含 API Key）
- `%APPDATA%\DSHTray\dsh-home\`
- `%APPDATA%\DSHTray\telegram-results\`、`telegram-images\`
- `.env` 或任何 Bot Token／API Key

Bot Token 只应放在 Windows 使用者环境变量 `DSH_TELEGRAM_BOT_TOKEN`，绝不可写进源码、README、Issue 或 Git commit。API Key 储存在 `%APPDATA%\DSHTray\settings.json`，请妥善保护。

## License

发布前请选择适合的授权条款；独立开源工具常用 [MIT License](https://opensource.org/license/mit)。
