deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
tallahandsome-ux/dsh-fetch-third-party
Safe third-party web fetch for DSH — delegates page crawling to user-configured services with no direct URL access (no SSRF), API keys in the managed credentials store, per-session budget, and an auto-managed local web scraping service stack.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:tallahandsome-ux/dsh-fetch-third-party
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
English | 中文
安全的第三方网页抓取插件(DSH / DeepSeek Harness)——让 AI 在「搜索摘要不够」时,能自主抓取网页全文来回答问题。
本插件为 DeepSeek Harness(dsh)提供安全的网页抓取能力:抓取委托给用户自选/自建的第三方服务(Tavily / Jina Reader / Firecrawl / 自定义契约服务),本机从不直接连接目标网址,因此没有 SSRF 攻击面。
核心能力:
web_search 搜索,当摘要不足以回答问题时,会自动调用 web_fetch_url 抓取目标网页全文,无需用户提示。web_fetch_url 除正文外返回标题/标题大纲/链接/字数/预计阅读时长,方便模型引用与核对。用户提问
→ 模型调用 web_search(官方搜索)
→ 摘要足够? → 是 → 直接回答
→ 否 → 模型自主调用 web_fetch_url({ url })
→ ctx.web.fetch → third-party provider
→ 第三方服务(Tavily / Jina / Firecrawl / 自定义)抓取目标网页
→ 返回正文 → 模型基于全文回答
fetch/
├── package.json # dsh.bundle + dsh.client 清单
├── cordis.patch.yml # 补丁层
├── docs/ # 契约 v1 / 自建爬虫调研
├── scripts/ # 验证脚本 + 契约 v1 包装 + 启动脚本
├── tests/ # vitest 单测
└── src/ # 源码(Host + Client 两半区)
前置:已安装 DeepSeek Harness(dsh)与 pnpm。
dsh plugin --profile web add https://github.com/tallahandsome-ux/dsh-fetch-third-party.git
pnpm v11 首次安装提示:pnpm v11 默认拦截 git 依赖的构建脚本,首次执行可能报
ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED。报错信息会给出需要放行的 key,把它加入 web profile 的pnpm-workspace.yaml后重新执行即可,例如:# %USERPROFILE%\.dsh\profiles\web\pnpm-workspace.yaml allowBuilds: "dsh-fetch-third-party@git+https://github.com/tallahandsome-ux/dsh-fetch-third-party.git#<commit>": true
安装完成后重启 dsh web;在 设置 → 插件 → 插件配置 中出现「网页抓取(第三方)」卡片即安装成功。
适用于已有本地副本(如 git clone 下来自行修改)的情况。
关键:file: 后面要填克隆目录的完整绝对路径——也就是能直接看到 package.json 的那个文件夹。 不是仓库名,不是某个文件,也不是父目录。
git clone https://github.com/tallahandsome-ux/dsh-fetch-third-party.git
cd dsh-fetch-third-party
pnpm install
pnpm build
dsh plugin --profile web add file:D:\你的目录\dsh-fetch-third-party
把 D:\你的目录\dsh-fetch-third-party 换成你机器上实际克隆到的目录。例如克隆到了 D:\plugins 下,就填:
dsh plugin --profile web add file:D:\plugins\dsh-fetch-third-party
判断标准:该路径下应直接看到 package.json、src/、tsdown.config.ts、scripts/ 等文件;Test-Path 能通过且能看到 package.json 即正确。若路径填错(不存在/填成文件),dsh plugin add 会失败或装不上。
若此前装过旧版本,安装后重启
dsh web生效;万一卡片未刷新,可在 profile 目录(%USERPROFILE%\.dsh\profiles\web)执行pnpm install同步依赖后再重启。
dsh web,浏览器 Ctrl+F5 强制刷新。web_fetch_url 工具抓取网页全文。设置 → 插件 → 插件配置 → 网页抓取(第三方) 卡片:
Tavily / Jina Reader / Firecrawl / 自定义服务商部分网络环境会阻断第三方服务直连(如 r.jina.ai 被 DNS 污染),需走本地 HTTP 代理。在卡片「本地代理」填入你的代理地址(示例端口,请填你本机实际代理端口):
http://127.0.0.1:27822
ProxyAgent 的 dispatcher),不影响其他网络流量toolName,不进卡片):web_fetch_url(默认)/ web_fetch / auto。选择官方名 web_fetch 时若已被占用会自动回退到 web_fetch_url。web_fetch_url 返回 { url, statusCode, content, title?, headings[], links[], wordCount, readingTimeSec }。不想依赖商业服务商时,可用自建 Crawl4AI(Docker)+ 契约 v1 包装,接入自定义服务商——无需 API key,本机仍是“快递员模式”。
自动管理(插件内置,无需命令):启动 dsh web 后,只要「默认服务商」或「兜底服务商」是 loopback 地址的自定义服务商(如 crawl4ai → http://127.0.0.1:8787),插件会自动拉起包装进程,并尽力确保 Crawl4AI 容器在运行。前提:Docker Desktop 已启动(建议设为开机自启)且镜像已拉取。
手动兜底 / 首次拉取镜像:
powershell -ExecutionPolicy Bypass -File scripts/start-crawl4ai.ps1
卡片注册:自定义服务商 → 名称 crawl4ai / 类型 custom(契约 v1) / 接口地址 http://127.0.0.1:8787 → 保存 → 「默认服务商」下拉选它。
契约 v1 对接标准见 docs/contract.md;选型与验证记录见 docs/custom-crawler-research.md。
node scripts/verify-tavily.mjs # 需 TAVILY_API_KEY
node scripts/verify-jina.mjs # 匿名即可;带 key 传参或设 JINA_API_KEY
node scripts/verify-firecrawl.mjs # 需 FIRECRAWL_API_KEY
git clone https://github.com/tallahandsome-ux/dsh-fetch-third-party.git
cd dsh-fetch-third-party
pnpm install # 安装构建工具 + 类型依赖(@deepseek-ai/* 以 peer/dev 声明,均来自 npm)
pnpm build # tsdown 双产物 → lib/index.js(Host)+ lib/client.js(浏览器卡片)
pnpm typecheck # tsc --noEmit
pnpm test # vitest(settings 解析 / budget 预算 / B1 回归)
@deepseek-ai/* 由 dsh 宿主提供(插件安装进 dsh profile 后从宿主 node_modules 解析),构建时按 external 处理,插件自身只声明 undici 为真实运行时依赖。src/ 后 pnpm build 重建 lib/,重启 dsh web 生效。dsh-fetch-third-party 插件本体:提供方注册、主+兜底路由、会话预算、设置桥接、GUI 卡片、契约 v1 自定义服务适配器、本地栈自动管理(local-stack + watchdog)| 项目 | 用途 | 协议 |
|---|---|---|
| DeepSeek Harness(@deepseek-ai/dsh-*) | 宿主平台:cordis 插件机制、settings / credentials / tools / web 服务 | MIT |
| undici | Node HTTP 客户端(按请求代理) | MIT |
| Crawl4AI | 可选:自建抓取栈(用户自行 Docker 部署,插件经契约 v1 包装对接) | Apache-2.0 |
| Jina Reader | Jina 服务商(公共 API 或自托管) | Apache-2.0 |
| Tavily / Firecrawl | 第三方 SaaS 抓取服务(插件仅调用其公开 API,不打包) | 各服务商服务条款 |
| react / tsdown / typescript / vitest | 构建与测试工具链 | MIT 系 |
%USERPROFILE%\.dsh\.credentials.yaml,0600)按引用名读取 key——仓库、代码、文档中不含任何密钥,从 GitHub 克隆也不会携带或泄露任何 key。MIT License — 见 LICENSE
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。