DSH Hub development

August 14, 2026 · View on GitHub

本文档面向参与 DSH Hub 开发、部署和目录维护的贡献者。产品介绍和插件分类请从项目 README 开始。

技术栈

模块技术
WebNext.js 16、React 19、OpenNext for Cloudflare
APIHono、Cloudflare Workers
契约oRPC contract-first、Zod
数据库Cloudflare D1
存储Cloudflare KV、R2
异步任务Cloudflare Queues
包管理pnpm workspace
部署Wrangler

项目结构

apps/
  api/                 Hono Worker、D1 migration、Queue consumer
  web/                 Next.js 应用与 OpenNext Cloudflare 配置
packages/
  catalog/             GitHub 自动发现、资格验证、README renderer
  client/              公共 catalog API 的 TypeScript client
  cli/                 面向开发者和 Agent 的 dshhub CLI
  contracts/           前后端共享的 oRPC 契约
  dsh-plugin/           注册搜索和详情工具的 DSH 原生插件
skills/
  find-dsh-plugins/     原生工具优先、CLI 回退的 Agent workflow
scripts/               Catalog 构建和发布入口

本地开发

需要 Node.js 22+ 和 pnpm 10。

pnpm install
pnpm cf:typegen
pnpm --filter @dshhub/api run db:migrate:local
pnpm dev

Agent 与开发者入口

CLI 默认访问 https://dshhub.org/api/v1,也可通过 DSHHUB_API_URL--api-url 覆盖:

pnpm --filter @dshhubs/cli build
node packages/cli/lib/bin.js search "cross-session memory" --limit 10 --json
node packages/cli/lib/bin.js plugin owner/repository --json

DSH 插件注册 search_dsh_pluginsget_dsh_plugin 两个只读工具:

npx -p @deepseek-ai/dsh dsh plugin --profile web add @dshhubs/plugin-search

仓库内的 skills/find-dsh-plugins 负责搜索、检查和比较流程;它优先使用 DSH 原生工具,不可用时调用 CLI。插件和 Skill 都不会自动安装搜索结果。

Cloudflare 资源

apps/api/wrangler.jsonc 声明了 D1、KV、R2 和 Queue。配置没有账号资源 ID;Wrangler 首次部署时会自动 provision 支持的资源,并回写生成的信息。部署前先确认当前身份:

pnpm exec wrangler whoami
pnpm deploy:api
pnpm --filter @dshhub/api run db:migrate:remote
pnpm deploy:web

如需接入自定义域名,在 apps/web/wrangler.jsonc 中增加 routes。敏感配置使用 wrangler secret put <NAME>,不要提交 .dev.vars.env

插件目录流水线

GitHub Actions 每小时搜索新发布的 DSH 插件,每周刷新已收录仓库。目录构建会更新根 README 中每个分类的 5 个代表插件;完整列表由网站分类页提供。

发现、资格验证、翻译、缓存和发布细节见 Catalog pipeline

pnpm catalog:build
CATALOG_API_URL=http://localhost:8787 CATALOG_INGEST_TOKEN=... pnpm catalog:publish

校验

pnpm typecheck
pnpm test
pnpm build
pnpm --filter @dshhub/web run build:cloudflare
pnpm --filter @dshhub/api exec wrangler deploy --dry-run