DreamRift/dsh-web-search-pool

DeepSeek Harness 网页搜索插件:多个 Tavily/Exa key 按限流负载均衡,429 自动切换 key,附带设置页 UI 与 Tavily 额度总览。

项目介绍Project Overview

DSH 搜索 Key 池插件将多个 Tavily 与 Exa 密钥整合为一个池,按 RPM 配额加权轮询,自动在 429、配额耗尽或网络错误时切换备用密钥,并在设置页提供已用额度与限额的实时面板。适用于同时持有多个搜索供应商密钥并希望统一调度、避免触发单账号限流的场景。需在 DeepSeek Harness 0.1.0-rc.7 及以上版本中安装运行。

The DSH Web Search Pool plugin consolidates multiple Tavily and Exa API keys into a single pool with weighted round-robin scheduling based on per-key RPM quotas. It automatically rotates to backup keys on 429 responses, quota exhaustion, or network errors, and exposes a settings dashboard for tracking usage and limits. Use it when juggling several search provider keys to avoid rate-limit bottlenecks. Requires DeepSeek Harness 0.1.0-rc.7 or newer, and at least one valid Tavily or Exa credential to function.

或使用命令行安装(适合开发者)Or use CLI install (for developers)

命令行安装CLI Install

dsh plugin --profile web add github:DreamRift/dsh-web-search-pool

DreamRift/dsh-web-search-pool 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-web-search-pool

Version License: MIT DSH Version: rc.7

DeepSeek Harness 的 多供应商搜索负载均衡插件。将多个 Tavily 和 Exa API keys 组织成智能池,自动按限流调度并故障切换。

✨ Features

  • 🔑 Multi-key Pool: 支持多个 Tavily + Exa keys,统一管理
  • ⚖️ Smart Load Balancing: 基于 RPM(每分钟的请求数)加权轮询调度
  • 🔄 Automatic Fallback: 429 rate limit、额度耗尽、网络错误时自动切换到下一个 key
  • 📊 Usage Dashboard: Settings 页卡片实时查看已用额度、总限额、刷新按钮
  • 🔒 Secure: API keys 通过 DSH credentials service 保存,不写入配置文件
  • 🎯 Exa Anonymous Free Tier: 内置免费匿名层(1 req/sec),有 key 走 REST 提配额
  • 🏗️ Native Bundle (rc.7): DeepSeek Harness 官方式原生 Bundle 集成

📦 Installation

# Build distribution package
npm pack

# Install to your profile
dsh plugin --profile web add ./dsh-web-search-pool-0.1.0-rc.7.tgz

Prerequisites

  • DeepSeek Harness 0.1.0-rc.7 or higher
  • 🔐 At least one search provider API key (Tavily / Exa)

⚙️ Configuration

After installation, configure via DSH Settings UI:

  1. Open DeepSeek HarnessSettingsPlugins
  2. Find "搜索 Key 池" card and expand it
  3. Add your Tavily/Exa keys with:
    • Environment Variable Name (e.g., TAVILY_API_KEY_1)
    • Rate Limit (RPM): requests per minute
    • Remark: friendly name (optional)
  4. Click Save - secrets are stored securely via credentials

🔐 All API keys are stored in DS H's credential system, never in plain-text configs.

🛠️ Usage

Once configured, the plugin automatically becomes your default web_search tool. No manual selection needed!

The provider will:

  • Select optimal key based on current quota and load
  • Switch providers (Tavily ↔ Exa) on failure
  • Respect rate limits and quotas across all keys
  • Return structured errors without exposing sensitive data

🧪 Testing

# Run test suite
npm run test

# Syntax check
node --check src/**/*.js scripts/*.mjs

# Pack integrity check
npm pack --dry-run

📄 Documentation

🔧 Troubleshooting

Issue Cause Solution
No settings card Legacy rc.6 slot registration Update to use key: web-search-pool, restart DSH
Still using official search Bundle patch not loaded Reinstall tarball, verify searchProvider: search-pool
Usage refresh fails Invalid credentials or quota exhausted Check credentials config, wait for quota recovery

See Upgrade Guide for complete table.

🏗️ Architecture

See technical design docs:

🔐 Security

This plugin follows Zero Trust for credentials:

  • No hardcoded secrets or API keys
  • Keys only stored via DSH credentials service
  • Never logged or exposed in responses
  • Public anonymous mode available (Exa free tier)

📜 License

MIT License - see LICENSE file

🤝 Contributing

Issues and PRs welcome! Please follow existing patterns:

  • Core logic in src/core/ (DSH-independent)
  • Provider implementation in src/dsh/ (Host half)
  • Client UI in src/dsh/client.js (Web half)
  • Tests parallel production coverage (TDD)

See Development Guidelines for best practices.


Built for DeepSeek Harness community · Part of native ecosystem

上一个 Prev raphael-loop 下一个 Next dsh-wps-plugings