DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

zzzstarx /

zzzstarx/dsh-workbuddy-hub

Verified

DeepSeek Harness plugin for WorkBuddy2API-Hub (gateway by @ardeyouxipianyi, MIT)

★ 1 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: main@e33c4ba6

dsh-workbuddy-hub

这是什么:WorkBuddy2API-Hub 的 DeepSeek Harness 插件壳 + 内置更新器。 原作者:网关本体由 @ardeyouxipianyi 开发,仓库 ardeyouxipianyi/workbuddy2api-hub(MIT)。本仓库只做「装进 Harness、看数据、管版本」这一层,不改上游代码;详见 CREDITS.md。

本仓库:https://github.com/zzzstarx/dsh-workbuddy-hub · 打包产物见 Releases。

把 WorkBuddy2API-Hub(WorkBuddy 国际版/国内版多账号反代网关,OpenAI 兼容)做成 DeepSeek Harness(DSH)插件,并带内置更新检测:插件自己查 GitHub Release、自己验签、自己解包、自己切换版本,失败自动回滚。

它解决什么问题

上游是 Python 网关 + 一堆 .bat 启动器,DSH 是 Node 插件宿主。中间原本有三处手工活:

手工活 这个插件怎么做
双击 .bat 起网关、看它在不在 插件探活 /health、按需启动/停止/重启,崩溃后限次数自动拉起
想知道有没有新版,去 GitHub 页面翻 内置检测:默认 24 小时节流 + 启动补查一次,结果落盘、进工具、上状态条
下载 zip、解压、搬账号目录、切版本 一条工具调用:下载 → SHA256 → 解包 → 冒烟 → 迁移 → 切换 → 校验 → 失败回滚

数据面板(搬进 Harness 的那个页面)

上游 dashboard 是一张 1.4 MB 的自带页面,在 Harness 里直接 iframe 会撞上三件事:主题不跟随、滚动被主栏裁掉、每次看数据都要跳出对话。所以这里做了一层「原生面板 + 原页面兜底」:

入口 位置 内容
侧栏 WorkBuddy 图标 sidebar.panellist + main 完整数据面板(下面 8 个页签)
Settings → WorkBuddy settings.section 同一个面板,主栏被占用时也能进
输入框上方状态条 conversation.input.dock 在线/版本/可升级,点一下强制查更新

页签:概览(今日请求/tokens/积分/缓存命中 + 7 日柱状图 + 按模型占比)、账号(池里每个账号的区域、档位、剩余积分、凭证过期与冷却/封禁状态)、用量(每日明细表 + 按模型/账号分布)、请求(最近 N 条:结果、tokens、缓存、耗时、首帧、积分、账号)、模型(/v1/models + 每个模型的最近用量)、日志(网关日志或插件托管日志)、更新(当前/最新版本、检查/升级/回滚按钮、发布说明、磁盘占用)、原面板(上游 dashboard 原样内嵌,需要它自己的面板密码)。

数据是分层的,缺哪层都不挡路:

  1. 公开:/health、/v1/models(Key 自动发现);
  2. 本地:直接读 usage/usage.jsonl 做聚合(请求量、tokens、积分、缓存命中、首帧、按模型/账号)——所以不填面板密码也能看到真实数字;
  3. 面板:POST /panel/login 换 X-Panel-Token 后,账号池明细、请求明细、网关日志、/updates 才是完整版。密码可以写在 config.panelPassword,也可以在地面上那张「面板未解锁」卡片里输一次(token 存插件数据目录,权限 600)。

宿主侧接口(仅回环 + POST 必须 application/json):GET /api/workbuddy-hub/panel、POST /api/workbuddy-hub/panel/login、POST /api/workbuddy-hub/panel/logout、POST /api/workbuddy-hub/check、POST /api/workbuddy-hub/apply、POST /api/workbuddy-hub/update/rollback、GET /api/workbuddy-hub/summary。

安装

# 1) 挂进 desktop profile(幂等,可重复跑)
node scripts/install.mjs                   # 复制到 ~/.dsh/plugins/dsh-workbuddy-hub
node scripts/install.mjs --link            # 或者用目录联接,改代码立刻生效
node scripts/install.mjs --dry-run         # 只看会做什么

# 2) 重启 DSH,然后在会话里说「查一下 workbuddy 状态」

装完自检(不启动宿主、只用 mock ctx):

node scripts/selfcheck.mjs --zip <任一 release zip>   # 12 项:注册/工具/更新检查/解包
node scripts/e2e-upgrade.mjs --port 8799 --root %TEMP%\\wbh-e2e --zip <release.zip>

e2e-upgrade.mjs 是隔离演练:独立端口 + 独立目录,真下载、真验签、真解包、真起进程、真查 /health,跑完自己停掉。不碰你正在跑的实例。

模型接入

插件不覆盖你既有的 provider 配置(那是模型面的事,误改会把在用的 provider 打掉)。要看当前网关能提供哪些模型、生成一段可粘贴的 YAML:

node scripts/install.mjs --print-provider

多数 DSH 安装里 profile/cordis.patch.yml 已经有这样一段:

- id: llm-pi-ai
  name: "@deepseek-ai/dsh-llm-pi-ai"
  config:
    providers:
      wb-proxy:
        displayName: WB Proxy
        apiKeyEnv: WB_PROXY_API_KEY
        api: openai-completions
        baseURL: http://127.0.0.1:8788/v1

API Key 不用手填:网关把 api_keys[].key 明文存在自己的 accounts/settings.json 里,插件按 config.apiKey → 环境变量 → settings.json 的顺序自动取(workbuddy_doctor 里能看到它用的是哪一路,但不会把 Key 打到输出里)。

工具

工具 干什么
workbuddy_status 在线与否、版本、账号数、模型清单、更新检测结果
workbuddy_gateway start / stop / restart / discover / adopt
workbuddy_logs 托管进程日志尾部
workbuddy_models /v1/models 的模型 id
workbuddy_update_check 强制查一次(默认 24 小时节流)
workbuddy_update_apply 升级;必须带 confirm: true,否则只返回计划
workbuddy_update_rollback 退回上一个版本
workbuddy_doctor Python / 端口 / 目录 / 进程 / Key / profile 接线自检

内置更新检测怎么工作

  • 发现:GET api.github.com/repos/<repo>/releases,只认 vX.Y.Z 稳定 tag,草稿与预发布跳过,取版本号最大的那个。403 / 限流 / JSON 坏掉时退回 github.com/<repo>/releases/latest 的 302 Location(那条路不吃匿名 API 的 60 次/小时配额)。
  • 节流:默认 24 小时一次;启动补查延后 30 秒,且最多 6 次/小时(崩溃重启循环不会把配额刷穿)。缓存落在 <root>/update-state.json。
  • 安装:选 workbuddy2api-hub-v<ver>.zip(便携包,自带 Python 3.12 运行时),用同版本的 SHA256SUMS 校验;解包到 versions/<ver>(先 .staging-<ver>,验证通过才 rename);python wb_proxy.py --help 冒烟(导入全部模块);从旧目录补 accounts/usage/catalog/pricing;停进程 → 切 state.json 指针 → 起进程 → /health 校验;起不来就切回上一版本并重新拉起。
  • 回滚:workbuddy_update_rollback 用 previousVersion 再来一遍,或手动把 state.json 的 activeVersion 改回去。

配置

bundle patch 里给了默认值(cordis.patch.yml),完整字段:

- insert:
    - id: workbuddy-hub
      name: 'dsh-workbuddy-hub'
      config:
        port: 8788                 # 网关端口
        host: '127.0.0.1'
        lan: false                 # =true 时给 wb_proxy.py 加 --lan
        apiKey: ''                 # 留空则自动从环境变量/网关 settings.json 取
        python: ''                 # 指定解释器;留空按 便携包python/ -> .venv -> PATH 找
        rootDir: ''                # 默认 ~/.dsh/workbuddy-hub
        installDir: ''             # 已有网关目录:启动时自动接管(只读)
        repo: ardeyouxipianyi/workbuddy2api-hub
        autoStart: true            # 插件加载时网关没跑就拉起
        autoRestart: true          # 守护:掉线自动拉起(10 分钟最多 3 次)
        checkOnStart: true         # 启动补查一次更新
        checkIntervalHours: 24
        startupCheckDelaySeconds: 30
        migrateData: true          # 升级时迁移账号数据
        skipBundledPython: false   # true 则不落 python/(省 29MB,用系统解释器)
        keepVersions: 3            # 保留几个旧版本目录
        superviseIntervalMs: 20000

数据布局

~/.dsh/workbuddy-hub/
├── state.json          # 服役版本指针(activeVersion / mode / previousVersion)
├── update-state.json   # 更新检测缓存(版本号、时间戳、发布页 URL,不含请求头/响应体)
├── versions/<x.y.z>/   # 各版本网关代码(便携版含 python/)
├── data/accounts/      # 托管实例的账号与 settings.json(升级不丢)
├── data/usage/
├── downloads/          # 归档缓存(校验通过后会删)
└── logs/gateway.log    # 托管进程 stdout/stderr

浏览器半身

client.js 在输入框上方挂一条状态条:在线/离线、版本、账号数,发现新版显示 v1.9.2 → v2.1.2,点一下立刻查一次更新。它只读 /api/workbuddy-hub/summary(宿主侧限制回环地址可访问),不启停进程——启停和升级都在模型的显式工具调用里。

许可与来源

  • 本插件:MIT。
  • 网关本体:MIT,版权归 ardeyouxipianyi/workbuddy2api-hub 作者。seed/ 目录是该仓库的源码快照(版本见 seed/SOURCE.json),仅用于离线首装。
  • 便携包内自带 Python 运行时,许可见 PSF。
—/ 5

No ratings yet

Verified DSH bundle

Commit e33c4ba6ae1f

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout