Skip to content
dsh.fish
Bundle

sousuo

DSH desktop plugin: AnySearch provider with rotating API keys on HTTP 402.

Source
yueyexiayu
License
MIT
Updated
Updated 5 days ago

Readme

# sousuo

当前项目是深度适配个人使用,项目只是给大家提供思路和借鉴,尽量不要直接照搬。

DeepSeek Harness 官方桌面端的搜索 Provider。`web_search` / `web_fetch` 仍走 AnySearch HTTP API;本地用多把 API Key,遇到 HTTP 402 时立刻换下一把并重试同一请求。一次请求最多转一圈,然后失败。401 / 403 / 429 不换号。连不上 API 的 `TypeError: fetch failed` 会先按系统 DNS 再试一次,仍失败则用公共 DNS/DoH 解析到的 IPv4 直连(SNI 仍是 `api.anysearch.com`),避免本机缓存到失效 GTM 节点时整次搜索直接失败。

默认**不**向模型暴露 `anysearch_capabilities` / `anysearch_search` / `anysearch_batch_search`。Grok 等高推理模型看见这组工具后,容易先做能力发现、搜完只在思考里说「再搜一次」然后 `stop`,界面就像调用网络时自动停了。普通问题走 `web_search` 即可,后端已经是 sousuo。若确实需要垂直 tag,在 desktop patch 里给本插件加 `advancedTools: true`。

面向 **官方桌面**。不要把 Key 写进 patch、README、Git 或对话。

## 安装

1. 复制本仓库到 `$DSH_HOME/plugins/sousuo`(默认 `$DSH_HOME` 为 `~/.dsh`)。
2. 再复制一份到 `$DSH_HOME/profiles/desktop/node_modules/sousuo`(桌面端要从 profile 内加载,才能解析 DSH 的 `@deepseek-ai/*` 包)。
3. 在 `$DSH_HOME/profiles/desktop/cordis.patch.yml` 写入:

```yaml
- insert:
    - id: sousuo
      name: ./node_modules/sousuo/lib/index.js
      config:
        baseURL: https://api.anysearch.com
        # advancedTools: true   # 可选:重新暴露 anysearch_* 垂直搜索工具

- id: web
  config:
    searchProvider: sousuo
    fetchProvider: sousuo
```

`- id: web` 会整段替换 `web` 的 config。完全退出 DeepSeek Harness(macOS:⌘Q)再打开。

## Key 文件

只存在本机,不进 Git。路径:`$DSH_HOME/plugins/sousuo/keys`

```
# 一行一把,# 开头为注释
```

```bash
cp keys.example keys
chmod 600 keys
```

用编辑器把真实 Key 写进 `keys`,不要贴到聊天里。当前序号记在同目录 `state.json`(同样不进 Git)。

## 说明

- 仓库不含本机 patch、账号、Key 或 `state.json`
- 后端是 AnySearch;本插件只做 Provider 适配、402 轮换,以及搜完必须作答的系统提示
- `advancedTools` 默认关闭;打开后才会注册 `anysearch_*` 工具
- 测试里的 `k1` / `k2` 是假值,不是真实凭据

## 开发

```bash
node --check lib/config.js lib/followthrough.js lib/client.js lib/keys.js lib/provider.js
node --test
```

Install

dsh plugin --profile web add github:yueyexiayu/dsh-sousuo

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source