<div align="center">
  <a href="https://anysearch.com"><img src="docs/assets/anysearch-logo.svg" alt="AnySearch Logo" width="96" height="96"></a>
  <h1>@anysearch/anysearch-dsh</h1>
  <p>由 AnySearch 驱动，为 DeepSeek Harness 提供实时网页搜索与垂直领域搜索能力。</p>
  <p><a href="https://anysearch.com"><img src="https://img.shields.io/badge/AnySearch-AI_Search-485DC9.svg?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzQ4NzZfNzgwKSI+CjxwYXRoIGQ9Ik02IDguNUgzLjVWMy41SDguNVY2SDExVjFIMVYxMUg2VjguNVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMSA4LjVIOC41VjExSDExVjguNVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik02IDguNUgzLjVWMTFINlY4LjVaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMy41IDFIMVYzLjVIMy41VjFaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNOC41IDFIMy41VjMuNUg4LjVWMVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMSAxSDguNVYzLjVIMTFWMVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMSAzLjVIOC41VjZIMTFWMy41WiIgZmlsbD0id2hpdGUiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF80ODc2Xzc4MCI+CjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMSkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K" alt="AnySearch AI Search"></a> <a href="https://www.npmjs.com/package/@anysearch/anysearch-dsh"><img src="https://img.shields.io/npm/v/%40anysearch%2Fanysearch-dsh?logo=npm" alt="npm 版本"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT 许可证"></a> <a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/DeepSeek-Harness-4F46E5" alt="DeepSeek Harness 插件"></a></p>
  <p><a href="README.md">English</a> | <strong>简体中文</strong></p>
</div>

`@anysearch/anysearch-dsh` 将 [AnySearch](https://anysearch.com) 作为插件接入 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)。无需改变 Harness 使用方式，即可通过原生 `web_search` 和 `web_fetch` 获得实时网页搜索、URL 清洗正文、垂直领域搜索和批量搜索能力。

AnySearch 是面向 AI Agent 的搜索基础设施，覆盖公开网页，以及代码、金融、学术、法律、安全等专业数据源。

## 快速开始

### 面向 AI Agent

```sh
# 获取完整安装指南，通读全文，然后严格按步骤执行：
curl -fsSL https://raw.githubusercontent.com/anysearch-team/anysearch-dsh/refs/heads/main/docs/agent-installation.md
```

### 面向人类

将插件安装到 `web` profile：

```sh
npx -y @deepseek-ai/dsh plugin --profile web add @anysearch/anysearch-dsh
```

启动 DeepSeek Harness：

```sh
npx -y @deepseek-ai/dsh web
```

快速体验不需要 API Key。未配置时，请求使用 AnySearch 匿名额度。

## 提供什么

- 通过 Harness 内置的 `web_search` 返回 AnySearch 搜索结果，来源包含标题、摘要和 URL，便于引用。
- 通过 Harness 内置的 `web_fetch` 调用 AnySearch Extract，抓取并清洗指定公开 HTTP(S) URL 的正文。
- 实时发现可搜索领域、垂直分类和支持的参数，再用标签、地区、语言和结构化参数执行高级搜索。
- 一次并发执行一至五个搜索，单项失败不影响其他结果。
- 高级搜索会保留没有来源 URL 的有效结构化结果；对于带网页来源的结果，可按需返回清洗正文。

## 可选 API Key

无需 API Key 即可体验。

注册 AnySearch 账号并配置 API Key 后，可获得每天 1000 次免费搜索调用额度。

访问 [anysearch.com](https://anysearch.com) 注册并登录，然后前往 [API Keys](https://www.anysearch.com/console/api-keys) 获取。获取后，将凭据写入 `$DSH_HOME/.credentials.yaml`，默认位置是 `~/.dsh/.credentials.yaml`：

```yaml
ANYSEARCH_API_KEY: "as_sk_your_key"
```

插件会在每次操作时解析受管凭据，因此轮换凭据后，下一次请求即可使用新值，无需重启 DSH。启动进程的 `ANYSEARCH_API_KEY` 环境变量具有更高优先级。

可以检查最终组合配置，输出中不会出现真实凭据值：

```sh
npx -y @deepseek-ai/dsh --profile web --dump-config
```

## 工具

| 使用场景 | Harness 工具 |
|---|---|
| 普通网页搜索 | `web_search` |
| 抓取并清洗指定 URL | `web_fetch` |
| 查看可用领域和标签 | `anysearch_capabilities` |
| 垂直或参数化搜索 | `anysearch_search` |
| 一次执行一至五个搜索 | `anysearch_batch_search` |

对于普通提示词，让 Harness 自动选择工具即可。模型可以先读取实时领域和参数定义，再执行专门搜索。

## 环境依赖

需要 Node.js 22.19 或 Node.js 24+、pnpm 11.7 和 DeepSeek Harness。DSH 插件命令使用 pnpm 管理 profile 依赖，因此 `pnpm` 必须位于 `PATH` 中。

Windows、Linux 和 macOS 使用相同的安装命令。安装前请确保 Node.js、`npx` 和 `pnpm` 均可从 `PATH` 直接运行。

## 配置

随包提供的 profile 层会自动将 AnySearch 设为现有 `ctx.web` 的搜索与抓取 Provider、启用 `web_fetch`，并挂载高级工具，默认无需修改。

如需自定义，请让 AI 助手（或手工）把下面的完整条目加入目标 DSH profile 的用户配置层，以覆盖随包提供的 `id: web-search-anysearch` 配置。保持 `id` 不变，完整替换 `config`，不要使用不同 ID 新增第二个 AnySearch Provider：

```yaml
- id: web-search-anysearch
  config:
    apiKeyEnv: ANYSEARCH_API_KEY
    baseURL: https://api.anysearch.com
    maxRenderedContentChars: 12000
```

| 字段 | 默认值 | 用途 |
|---|---|---|
| `apiKeyEnv` | `ANYSEARCH_API_KEY` | DSH 凭据引用；缺失时使用匿名访问 |
| `baseURL` | `https://api.anysearch.com` | AnySearch API 基础地址 |
| `maxRenderedContentChars` | `12000` | 单次高级工具调用向模型展示的结果正文字符上限 |

## 管理插件

更新：

```sh
npx -y @deepseek-ai/dsh plugin --profile web update @anysearch/anysearch-dsh
```

移除：

```sh
npx -y @deepseek-ai/dsh plugin --profile web remove @anysearch/anysearch-dsh
```

## 兼容性与限制

- DeepSeek Harness 仍处于开发预览阶段，可能发布不兼容变更。
- 当前源码覆盖从 `0.0.1-rc.5` 到 `0.1.6-alpha.2` 的 20 个已发布 DSH 版本，包括 `0.1.5-rc.2`。具体版本、验证范围和 npm 发布状态见[兼容性说明](docs/dsh-compatibility.md)。
- 网页提取通过 Harness 原生 `web_fetch` 暴露；插件不会再增加一个重复的 `anysearch_extract` 工具。
- 请通过 DSH 管理的凭据文件或环境变量配置 API Key；DSH 设置页当前不提供第三方 Provider 凭据输入项。

## 文档

- [详细使用指南](docs/user-guide.zh-CN.md)
- [DSH 插件与 Skill、MCP、HTTP 接入方式对比](docs/integration-options.zh-CN.md)

## 社群与支持

欢迎加入 AnySearch 社群，交流使用体验、反馈问题并获取技术支持。

- [GitHub Issues](https://github.com/anysearch-team/anysearch-dsh/issues)：提交问题报告和使用反馈。
- 微信群：扫描下方二维码填写入群问卷，工作人员审核后会邀请你加入。
- [Discord 社群](https://discord.gg/3WAmxyuBSc)：扫描二维码或点击链接直接加入。

<div align="center">
  <table>
    <tr>
      <td align="center"><strong>微信群入群问卷</strong><br><img src="docs/assets/discord-community-qr.png" alt="微信群入群问卷二维码" width="180"></td>
      <td align="center"><strong>Discord 邀请</strong><br><img src="docs/assets/wechat-community-qr.jpg" alt="Discord 邀请二维码" width="180"></td>
    </tr>
  </table>
</div>

## 开发

```sh
git clone https://github.com/anysearch-team/anysearch-dsh.git
cd anysearch-dsh
pnpm install
pnpm run check
```

真实 AnySearch E2E 测试需要显式开启。匿名模式不会读取环境中的凭据：

```sh
ANYSEARCH_E2E=1 ANYSEARCH_E2E_ANONYMOUS=1 pnpm run test:e2e
```

## 许可证

[MIT](LICENSE)
