接管网页搜索抓取,自动路由并省额度
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xyonium/dsh-web-firecrawl该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · search
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 3 处,展示前 3 条)
- 发起网络请求src/index.mjs:308
const response = await fetch(`${baseURL}/v2/team/credit-usage`, { - 发起网络请求src/index.mjs:482
response = await fetch(endpoint, { - 发起网络请求src/index.mjs:840
async fetch(request, signal) {
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 网页搜索抓取接管
- 查询路由与按需增强
- 额度预算与失败记忆
Firecrawl 作为 DeepSeek Harness 的网页后端:为 web_search/web_fetch 提供查询路由、按需增强、额度预算和失败记忆。零 dsh 同级依赖,dsh 升级也不受影响。
README
由 DeepSeek 最新模型翻译生成dsh-web-firecrawl
把 Firecrawl 接成 DeepSeek Harness 的 web 后端。 它不新增任何工具 —— 模型照旧调 web_search / web_fetch,由本插件决定怎么问 Firecrawl。
dsh plugin --profile web add dsh-web-firecrawl
为什么需要它
官方 @firecrawl/dsh-firecrawl 把 peer 钉死在 @deepseek-ai/dsh-web@0.1.0-rc.6。DSH 0.2.0 起新增了兼容性闸门:只要插件的 @deepseek-ai/dsh peer 不匹配运行时版本,整包被跳过,它自带的 patch 层被丢弃, web_search 就静默回落到别的后端。
本包不声明任何 @deepseek-ai/ peer 依赖(代码也零 import),而闸门只读 peerDependencies —— 没有东西可拒,所以 dsh 升级后它依然能用。
展开完整文档(README 剩余 1 节)
dsh-web-firecrawl
把 Firecrawl 接成 DeepSeek Harness 的 web 后端。 它不新增任何工具 —— 模型照旧调 web_search / web_fetch,由本插件决定怎么问 Firecrawl。
dsh plugin --profile web add dsh-web-firecrawl
为什么需要它
官方 @firecrawl/dsh-firecrawl 把 peer 钉死在 @deepseek-ai/dsh-web@0.1.0-rc.6。DSH 0.2.0 起新增了兼容性闸门:只要插件的 @deepseek-ai/dsh peer 不匹配运行时版本,整包被跳过,它自带的 patch 层被丢弃, web_search 就静默回落到别的后端。
本包不声明任何 @deepseek-ai/ peer 依赖(代码也零 import),而闸门只读 peerDependencies —— 没有东西可拒,所以 dsh 升级后它依然能用。
而且它不只是把 query 转发了事:
| | 官方 0.1.0 | 本包 |
| dsh 0.2.x 能否加载 | ❌ 被闸门拒绝 | ✅ 零 dsh peer |
| categories(research / developer / pdf) | ❌ 参数面里没有 | ✅ 按 query 意图自动选,免费 |
| site: / -site: | ❌ 当普通文本传下去 | ✅ 转成硬过滤 includeDomains / excludeDomains |
| 结果信息量 | 只取 description(~200 字符) | ✅ 只对 top-K 定点升级 summary(+1 credit,4–7 倍文本);question 拿生成式答案填进 seam 的 content |
| 重复 query / URL | 每次都重新计费 | ✅ 进程内缓存,10 分钟内 0 请求 |
| 死路 URL | 模型会反复重试 | ✅ 失败记忆直接拒绝重抓 |
| 额度安全 | 无 | ✅ 按真实 creditsUsed 记账,自动区分计费 / 自建 |
| 工具路由 | 无 | ✅ 系统提示里带一张「何时用哪个 Firecrawl MCP 工具」的表 |
安装
dsh plugin --profile web add dsh-web-firecrawl
dsh plugin 会在 profile 里跑 pnpm,并自动把本包登记进 dsh.profile.bundles。
之后重启 dsh(profile 在启动时组合)。
端点通过环境变量给(项目 .env 或启动环境):
自建 Firecrawl —— 不需要任何 key
FIRECRAWL_BASE_URL=https://firecrawl.example.com
或者公网 API
FIRECRAWL_API_KEY=fc-your-key
验证:
dsh --profile web --dump-config | grep -A3 '^- id: web$'
期望:searchProvider: firecrawl / fetchProvider: firecrawl
不设 FIRECRAWL_BASE_URL 就会指向公网计费的 https://api.firecrawl.dev。
插件会探测出来、启用额度上限并打一条警告 —— 但那已经是可能花钱之后了。请显式设置端点。
为什么端点不写进包里的配置
cordis patch 的 config 是整体替换(target[key] = value),不是按键合并。
如果包里发布了 baseURL,任何人在自己那层写 config: 都会把它静默抹掉、回落到公网计费 API。
所以端点和凭据一律走环境变量(DSH 通过 launch environment 快照解析)。
一次查询发生了什么
1. 先做免费的过滤:意图 → categories(research / developer / pdf);site: / -site: → includeDomains / excludeDomains 并从 query 剥离;limit 向上取整到 10 的倍数(搜索按 2 credits / 10 条计费,同一档内多要几条是免费的)。
2. 按需定点升级,而不是整批抓:scrapeOptions 是按结果条数计费的,全抓很浪费。
插件只抓 top-K(enrichTopK,默认 1),且只在免费片段看起来太薄时才抓(enrichMode: adaptive)。
summary 花 +1 credit 换 4–7 倍文本;question 花 +4 拿生成式答案。
3. 额度守卫贴合实际:用 /v2/team/credit-usage 判断这个后端到底计不计费 —— 公网和代付费代理会返回余额数据;自建实例返回 500 UNKNOWN_ERROR,甚至连假 key 都接受。计费后端启用额度上限,自建只用调用量的防跑飞上限。
4. 失败记忆:站点不可达、404、付费墙、空页会被记住,重复抓取直接拒绝并提示换来源;网络抖动 / 429 / 5xx 从不入记忆 —— 那些重试是有意义的。
配置
全部可选,写在 profile 的 cordis.patch.yml 里。注意 config: 会整体替换,所以要保留的键都得重写一遍:
- id: web-firecrawl
config:
enrichTopK: 1 # 升级前 K 条;0 = 只裸搜(最省) enrichFormat: summary # summary(+1) | markdown(+1) | question(+4) enrichMode: adaptive # 或 always budgetWindowCredits: 60 # 仅计费后端:每 10 分钟额度 budgetWindowCalls: 120 # 两种后端都生效:防跑飞 minRemainingCredits: 0 # 仅计费后端:余额低于此值停手 failureTtlMs: 600000 # 失败记忆 TTL;0 = 关闭,负数 = 直到重启 billingMode: auto # auto | metered | unmetered routingPrompt: true # 在系统提示里发布工具选择表
完整的 33 个参数见英文 README 的 “All options” 折叠表。
让升级稳定落地
一次 summary 抓取可能要 6–33 秒,而 dsh-tool-web 的 searchTimeoutMs 默认 30 秒就会掐断整次调用。
所以插件的 searchBudgetMs 压在 30 秒以下,并且宁可跳过升级也不中途 abort(abort 照样计费)。
想每次都拿到升级结果,两边一起调:
- id: tool-web
config:
searchTimeoutMs: 60000
- id: web-firecrawl
config:
searchBudgetMs: 50000
enrichTimeoutMs: 45000
车队部署
每人一条命令,bundles 自动登记:
dsh plugin --profile web add dsh-web-firecrawl # npm
dsh plugin --profile web add git+ssh://git@host/org/repo.git#v0.1.0 # git tag
dsh plugin --profile web add /srv/pkgs/dsh-web-firecrawl # 共享目录
dsh plugin --profile web remove dsh-web-firecrawl # 回滚
端点是部署级的,统一通过环境变量(项目 .env 里的 FIRECRAWL_BASE_URL)下发,不要走个人 patch。
车队体检:
dsh --profile web --dump-config | grep -A3 '^- id: web$'
测试
npm test # 打桩套件,不联网
npm run test:live # 打真实端点:FIRECRAWL_TEST_BASE_URL=...
npm run test:seam # 打真实 dsh 包:DSH_PACKAGES_DIR=...
兼容性
刻意不 import 任何 @deepseek-ai/*、也不声明它们的 peer。唯一契约就是 web seam 本身:
{ id, available(), search(request, signal) } // -> { sources[], content?, truncated }
{ id, available(), fetch(request, signal) } // -> { url, statusCode, body, truncated }
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xyonium/dsh-web-firecrawl
接管网页搜索抓取,自动路由并省额度
相关插件 · 搜索 / 抓取
LLM 知识平台Tencent/WeKnora
概览 ·快速开始 ·新特性 ·功能 ·客户端 ·文档 ·开发
★ 36,161已汉化DSH
72.1
智能体记忆系统MemTensor/MemOS
MemOS 2.0 Stardust星尘
★ 12,195已汉化DSH
71.2
跨代理记忆库zilliztech/memsearch
跨平台语义记忆,专为 AI 编程智能体打造。
★ 2,799已汉化DSH
70.9
技能语料库EverMind-AI/SkillCorpus
SkillCorpus 能给你什么
★ 694已汉化DSH
69.7
代码图谱记忆syncable-dev/memtrace-public
你的智能体值得拥有结构化记忆。
★ 509已汉化MCP
67.9
AnySearch 搜索插件anysearch-team/anysearch-dsh
AnySearch 网页搜索服务商,为 DeepSeek Harness(DSH)提供高级搜索工具
★ 457已汉化DSH
66.6