deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
DSH 插件商城 · 服务端 —— 开源、多服务器可部署的 DSH 插件商店后端(独立仓库)。
配合客户端插件 dsh-storecloud 使用:部署本服务端 → 客户端插件指向它 → DSH 用户即可在界面里浏览、搜索、一键安装插件与 Agent 预设。
📌 配套客户端见 dsh-storecloud(悬浮球 / 设置页 / 会话视图三入口 + 本地安装器 + 反向代理桥)。 两者联动:服务端提供全部数据与写接口;客户端负责展示与本地安装。默认也提供作者的服务器开箱即用(不部署本仓库也能体验完整商城)。
topic:dsh-plugin 搜索 GitHub 仓库,自动收录插件与 Agent 预设;package.json 的 name → npm 注册表校验取最新版本 → 未发布自动回落 github:owner/repo);stars_7d),趋势 / 热门 / 最新多维排序。服务端是客户端「插件组」功能的云端支撑:别人推荐的组合、你创建的组合都存在这里,客户端一键整组安装:
peer_secret)建立关系,管理端可视化联邦关系表;X-Federation-Secret 鉴权,不与管理端口令混用。X-Anon-Token(1h 同目标去重计数),下载/安装计数可信。github:owner/repo / npm:包名 / 直链 tgz 三种写法),客户端自动提示更新;curl | bash 从零拉起(拉镜像 → 建库 → 迁移 → 起服务 → 自检),重复执行即升级且数据不丢;docker pull;服务器上只需装好 docker,执行下面这一条命令(脚本直接从 GitHub 下载执行;仓库公开 → 镜像公开,无需登录):
curl -fsSL https://raw.githubusercontent.com/hajimilvdou/dsh-store-server/main/scripts/deploy-remote.sh | bash
脚本自动完成:拉镜像 → 建网络/数据卷 → 起数据库容器(首次自动生成密码写入 .env)→ 迁移 → 起 redis + 主程序容器 → 自检。重复执行 = 拉新镜像升级,数据不丢。
带自定义参数运行(例如指定端口和管理口令):
PORT=9000 ADMIN_TOKEN=你的强口令 bash <(curl -fsSL https://raw.githubusercontent.com/hajimilvdou/dsh-store-server/main/scripts/deploy-remote.sh)
cp .env.example .env # 按注释填写占位符:DB_PASSWORD 必填;生产环境建议同时设置 ADMIN_TOKEN
方式 A:纯 docker 命令(无需 compose 插件,推荐)
./scripts/deploy-docker.sh # 拉取 GitHub Actions 构建好的 GHCR 镜像部署
./scripts/deploy-docker.sh --build # 改用本地 docker build 构建镜像后部署
容器清单(脚本自动创建,均 --restart unless-stopped 开机自愈):dshstore-db(postgres:16-alpine,仅内网可见)、dshstore-redis、dshstore-api(映射 ${PORT:-8080})。管理端:http://<服务器IP>:8080/admin。
方式 B:docker compose
docker compose up -d # 自动拉镜像(失败自动回退本地构建):装库 → 迁移 → 起服务
./scripts/deploy.sh # 同上,拉取失败自动回退本地构建 + /health 自检
ADMIN_TOKEN 环境变量指定;GITHUB_OAUTH_CLIENT_ID / GITHUB_OAUTH_CLIENT_SECRET / JWT_SECRET(GitHub 登录);OAUTH_CALLBACK_URL(反代/域名场景,需与 OAuth App 注册的回调地址完全一致);GITHUB_TOKENS(同步抓取 token 池)。密钥不在部署时必填:搜索 token(可多枚)、OAuth、JWT、管理员密码、注册开关等均可在管理端「配置中心」修改(每项独立保存、保存即热更新;JWT 更换后全员重新登录)。
插件库的自动收录依赖 GitHub Search API,需要一枚 classic PAT:
dsh-store-sync),有效期自选;public_repo);ghp_xxxxxxxxxxxxxxxxxxxx;GITHUB_TOKENS(逗号分隔多枚);SYNC_TOPIC 默认为 dsh-plugin(只收录打了该 topic 的仓库),管理端可随时「▶ 立即抓取」。未配置搜索 token 时:同步与登录功能休眠,其余(浏览/下载计数/管理端)不受影响。
OAUTH_CALLBACK_URL 完全一致(默认按请求 host 拼接,反代/域名场景需显式设置);配置完成后,用户在客户端「我的」页点「立即登录 GitHub」→ 新窗口完成授权 → token 自动回传并存到本地,全程无需复制粘贴。
http://<服务器>:8080/admin → 进入「首次使用 · 设置管理员密码」流程(≥8 位,先到先得)→ 之后用该密码登录;ADMIN_TOKEN 预置口令;生产环境两者皆未配置时管理端整体 503(防后门);X-Admin-Token)自动保存在浏览器本地(dshs_admin_token),下次打开免输入;dsh_store_token),不需要手动获取或粘贴;Authorization: Bearer mock-liwei / mock-xiaoyu 演示账号。sync.data_heartbeat_min),保存即热更新、即时下发到客户端;user.combo_limit)调整,保存即生效;purgeExpiredCombos 定时任务,宽限 72h);.github/workflows/docker-build.yml 自动构建镜像并推送到 GHCR(ghcr.io/<owner>/<repo>,无需任何 Secrets)。服务器上无需构建:
./scripts/deploy.sh # 拉取镜像 → 迁移 → 启动 → /health 自检
./scripts/deploy-docker.sh # 纯 docker 命令版(无需 compose 插件)
GHCR 镜像可见性与仓库一致:仓库公开 → 镜像公开,服务器直接
docker pull,无需登录。 镜像标签:分支名 /v*版本标签 /sha/ 默认分支附加latest。
# 升级(宿主机 git 检出部署:管理面板「系统更新」一键更新,失败自动回滚)
git fetch --tags && git checkout <新版本> && docker compose up -d --build
# 容器化部署升级:推荐直接点管理面板「系统更新 → 一键更新」(面板热更新,免登录服务器)
./scripts/deploy-docker.sh # 纯 docker 命令部署方式:升级 = 重跑本脚本(自动拉新镜像并重建容器)
./scripts/deploy-remote.sh # 远程一键部署:升级 = 重跑(同上)
# 迁移进度
docker compose exec db psql -U store -d dshstore -c "SELECT version FROM schema_migrations ORDER BY version;"
# 纪律:迁移只加不减;删除类变更延迟一个版本周期(expand-contract)
# 回滚(数据库无需回滚:expand-contract 保证旧代码兼容新表结构)
git checkout <旧版本> && docker compose up -d --build
# 备份 / 恢复
docker compose exec -T db pg_restore -U store -d dshstore --clean < 备份文件
管理端「🔄 系统更新」页:手动一键检测 GitHub 最新 Release + 检测源保存 + 一键在线更新(容器部署走面板热更新:拉新镜像自动重建容器、失败自动回滚;宿主机 git 部署走 git 拉取→构建→迁移→切换→自检→回滚)+ 客户端插件版本推送(版本号 + 安装地址,支持 github:owner/repo / npm:包名 / 直链 tgz 三种写法,页面内附示例)。
⚠️ 面板热更新依赖把宿主 docker socket 挂进 api 容器(
deploy-remote.sh/deploy-docker.sh默认挂载)。 含义:拿到管理端口令即具备操作宿主机 docker 的能力,请务必保管好管理员密码;如不需要面板热更新,删除脚本中-v /var/run/docker.sock:/var/run/docker.sock两行后重跑即可(此时面板会提示在宿主机执行更新命令)。
dsh-store-server/
├── src/
│ ├── shared/ # 跨端契约(协议/模型/API/配置)单一事实来源
│ ├── repo/ # 仓库:MemoryRepo(内存) / PgRepo(PostgreSQL 写穿)
│ ├── routes.ts # REST 路由(公开 / 登录 / 联邦 / 管理端 / 管理面板)
│ ├── auth.ts # GitHub OAuth + JWT(凭据缺失时休眠)
│ ├── sync/github.ts # GitHub 同步管线(Search API 搜索 + 提取 + 星数快照 + 趋势榜)
│ ├── sync/federation.ts# 联邦互联(握手/共享/心跳/解约)
│ ├── security/ # 安全扫描管线 + 限流守卫(读/写/认证分档,429+告警)
│ ├── clock.ts # 时钟漂移自检(>500ms 告警,>5s 拒签凭证)
│ ├── config.ts # 配置加载(环境变量覆盖 shared 默认值)
│ ├── db/ # PostgreSQL 连接池 + 迁移运行器
│ └── index.ts # 启动入口(仓库选择 / 同步调度 / 时钟自检)
├── admin/index.html # 管理端面板(服务端托管于 /admin,接 admin API)
├── db/migrations/ # 迁移脚本(001~014 随版本递增)
├── scripts/update.sh # 一键更新预置流水线(面板热更新 / 宿主机双模式)
├── scripts/deploy.sh # compose 部署/升级(拉取失败自动回退本地构建)
├── scripts/deploy-docker.sh # 纯 docker 命令部署/构建(无需 compose,自动建库/迁移/起容器)
├── scripts/deploy-remote.sh # 零门槛一键远程部署(curl 直接执行,免拉仓库/免登录)
├── docker-compose.yml # db + migrate + api + redis
└── .env.example
npm install # 依赖与缓存均落在工作区内(.npmrc 已配置 cache=.npm-cache)
npm run build # 编译
npm run dev # 启动(无 DATABASE_URL 时用内存仓库 + 假数据)
启动后:
GET /api/v1/manifest、GET /api/v1/plugins?since=、GET /api/v1/combos?since=、GET /api/v1/announcementsPOST /api/v1/anon-token(换取匿名会话凭证)→ POST /api/v1/downloads(安装/下载计数,需 X-Anon-Token,同 token 同目标 1h 内去重,按天聚合产出 downloads_7d)Authorization: Bearer mock-liwei / mock-xiaoyuX-Admin-Token: <管理口令>。口令 = 配置中心「管理员」密码 → 环境变量 ADMIN_TOKEN 兜底;纯离线演示模式默认 mock-admin。生产环境两者皆未配置时管理端整体 503,无任何硬编码后门口令商城收录的每个插件都提取「安装 spec」(install 字段),与 dsh 真实插件管理机制一致:
| 动作 | 命令 | 说明 |
|---|---|---|
| 安装 | dsh plugin --profile <name> add <install> |
转发给 pnpm add;install 为 npm 包名(如 dsh-memory)或 git spec(如 github:owner/repo,未发布到 npm 时);可锁版本 add <install>@<version> |
| 卸载 | dsh plugin --profile <name> remove <pkg> |
转发给 pnpm remove,自动从组合层移除 |
| 入组合层 | 自动 | 插件 package.json 声明 "dsh": { "bundle": { "patch": "./cordis.patch.yml" } } 即被加入 profile 的配置层栈 |
提取管线:仓库 package.json 的 name → npm 注册表校验(registry.npmjs.org/<name>/latest 取最新版本)→ 未发布则回落 github:owner/repo。
DSH 插件商店的服务端按 GitHub topic 收录插件仓库,请给插件仓库(如 dsh-storecloud)打上:
| Topic | 作用 |
|---|---|
dsh-plugin |
必打:本服务端按此 topic 搜索并收录插件 |
本仓库(服务端)建议同时打:dsh-store、dsh、plugin-marketplace、deepseek。
打上
dsh-plugintopic 的插件仓库,会在本服务端下一次同步时被自动收录(需在配置中心配置 GitHub 搜索 token)。
本项目采用 CC BY-NC-SA 4.0(署名-非商业性使用-相同方式共享) 开源协议:
node_modules)与 npm 缓存(.npm-cache/)全部落在工作区内,不写入用户目录、不安装全局包、不修改系统环境。npm install / build / typecheck / dev;Docker 镜像构建与容器启动属部署阶段,不在本机执行。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。