Skip to content
dsh.fish
Bundle

dsh-web-search-nokey

Keyless web search for DeepSeek Harness. Fixes web_search 401 on Trae/WorkBuddy credits setups — no API key needed.

Source
a1435473620
stars
1 stars
License
MIT
Updated
Updated 23 hours ago

Readme

# dsh-web-search-nokey

给 dsh 一个不用 API key 的搜索。

用 Trae 积分 / WorkBuddy 积分把模型接进 dsh 的人,大概率撞过这个:

```
DeepSeek API error (HTTP 401): Authentication Fails, Your api key: ****1b24 is invalid
```

聊天是好的,`web_search` 一直 401。装完这个插件就好了,不需要任何 key。

[中文](#中文) · [English](#english)

## 中文

### 它修的是什么

dsh 里聊天和搜索不是一条路。聊天走你配置的连接器,搜索是另一个内置模块,只认 `DEEPSEEK_API_KEY`。你用积分跑模型,手里没有那把 key,搜索就永远是死的。

这个插件往 `ctx.web` 注册一个不用凭据的 `WebSearchProvider`,查询直接打公开搜索页,结果按 seam 的 source 格式交回去。

`web_fetch` 本来就没事。它是匿名抓取,压根没有凭据环节。

### 装

```
dsh plugin --profile web add github:a1435473620/dsh-web-search-nokey
```

发到 npm 之后也可以写短名:

```
dsh plugin --profile web add dsh-web-search-nokey
```

装完就生效,不用改配置,也不用重启。不是 `npm install -g` —— 这是 dsh 插件,要装进 profile。

卸载:

```
dsh plugin --profile web remove dsh-web-search-nokey
```

### 包里那个 patch 别删

dsh 的搜索后端同一时间只能选一个。不显式指定,它会去数有几个能用的;内置那个后端永远说自己能用,两个一撞就是 `WEB_PROVIDER_AMBIGUOUS`,搜索反而彻底挂掉。

所以包里带了 `cordis.patch.yml`,把 `web.searchProvider` 写死成这个插件。删了它,插件本身还在,选择逻辑就乱了。

### 怎么用

直接用。`web_search` 会路由到这里。

三个后端按顺序兜底,条数够了就停:Bing RSS → Bing 网页 → 360。直连大约 200ms,返回 8 条带摘要的结果。

### 配置

一般不用碰。要改就改 profile 里的 `cordis.patch.yml`。

| 字段 | 默认 | 说明 |
| --- | --- | --- |
| `engines` | `bing-rss, bing-html, so360` | 顺序即兜底顺序 |
| `maxResults` | `8` | 单次上限 |
| `timeoutMs` | `12000` | 单个上游请求超时 |
| `proxy` | 空 | 需要代理时填,例如 `http://127.0.0.1:7897` |
| `userAgent` | 桌面 Chrome | 这些搜索页会拦裸客户端 |

环境变量同样这几项,前缀 `DSH_WEB_SEARCH_NOKEY_`。`HTTPS_PROXY` / `HTTP_PROXY` 也认。

### 已知问题

- 多数结果没有日期。Bing RSS 给的是抓取时间不是发布时间,填进去会让旧页面显得很新,所以故意不填。
- Bing RSS 一般只回 9 条,所以才需要第二个后端补。
- 360 的链接是跳转壳,点一下才到真实页面。它只是兜底。
- 走的是公开搜索页,不是官方接口。调太猛可能被限流;日志里会记 `engine=xxx failed`,然后自动换下一个后端。
- 搜不到就是空列表,不报错。

### 和 dsh-free-search 怎么选

[DDDMUC/dsh-free-search](https://github.com/DDDMUC/dsh-free-search) 是功能更全的那类:多引擎、设置页、时间过滤、平台搜索。你要的是可配置搜索中枢,去那边。

这个仓库只做一件事:积分用户搜不了 → 装上就能搜。没有 UI,没有账号,没有额外工具,依赖为零。

### 兼容性

dsh 0.1.5-rc.2、`web` profile、Windows 上实测过。Node 22 和 24 都跑过。

## English

### What it fixes

Chat and search take different paths in dsh. Chat goes through whatever connector you configured. Search is a separate built-in module that only accepts `DEEPSEEK_API_KEY`. On credits-based setups (Trae, WorkBuddy) that key never exists, so `web_search` returns 401 forever while chat keeps working:

```
DeepSeek API error (HTTP 401): Authentication Fails, Your api key: ****1b24 is invalid
```

This plugin registers a credential-free `WebSearchProvider` on `ctx.web`. Queries hit public result pages and come back in the seam's own source shape.

`web_fetch` was never broken — anonymous fetcher, no credential step.

### Install

```
dsh plugin --profile web add github:a1435473620/dsh-web-search-nokey
```

After it's on npm, the short name works too:

```
dsh plugin --profile web add dsh-web-search-nokey
```

Takes effect immediately. Not `npm install -g`: this is a dsh plugin and belongs in the profile.

Remove:

```
dsh plugin --profile web remove dsh-web-search-nokey
```

### Don't delete the patch

dsh allows exactly one search backend at a time. If you don't name one, it counts usable candidates — and the built-in provider always claims it is. Two candidates means `WEB_PROVIDER_AMBIGUOUS`, and search stops working entirely.

`cordis.patch.yml` pins `web.searchProvider` to this plugin. That file is load-bearing.

### Usage

Just use it. `web_search` routes here.

Three backends in fallback order, stopping once there are enough results: Bing RSS → Bing HTML → 360. Roughly 200ms per query, eight results with snippets.

### Configuration

Edit the profile's `cordis.patch.yml` if you need to. Most people won't.

| Field | Default | Notes |
| --- | --- | --- |
| `engines` | `bing-rss, bing-html, so360` | Order is fallback order |
| `maxResults` | `8` | Per-query cap |
| `timeoutMs` | `12000` | Per upstream request |
| `proxy` | empty | e.g. `http://127.0.0.1:7897` |
| `userAgent` | desktop Chrome | These pages turn away bare clients |

Environment variables override the same fields with the `DSH_WEB_SEARCH_NOKEY_` prefix. `HTTPS_PROXY` / `HTTP_PROXY` are honoured too.

### Known issues

- Most results have no date. Bing's RSS carries crawl time, not publish time; writing that through would make stale pages look fresh, so it's left out.
- Bing RSS returns about nine items, which is why the second backend exists.
- The 360 backend returns redirect links that only resolve on click. It's a fallback.
- Public result pages, not an official API. Heavy use may get rate-limited; failures log as `engine=xxx failed` and the next backend is tried.
- An empty result set is an empty list, not an error.

### Versus dsh-free-search

[dsh-free-search](https://github.com/DDDMUC/dsh-free-search) is the bigger plugin: multi-engine UI, time filters, platform search. Use that if you want a configurable search hub.

This one only solves one problem: credits-based setups cannot search → install and they can. No UI, no accounts, no extra tools, zero dependencies.

### Compatibility

Tested on dsh 0.1.5-rc.2, `web` profile, Windows, Node 24 and 22.

## License

MIT

如果这个插件帮你把搜索救回来了,顺手点个 star:https://github.com/a1435473620/dsh-web-search-nokey

Install

dsh plugin --profile web add github:a1435473620/dsh-web-search-nokey

Profile: web

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