deepseek-harness
tiwe0/GeoChat会话隔离的 GeoGebra 画布,提供 20 个原生工具用于作图、场景读回、文字排版检查与动画采样,并内置 55 个数学技能和离线 Applet 资源。
面向 agent 的统一搜索与证据核验:120+ 引擎多语言路由,垂直域与结构化模态卡,10 个 MCP 工具与 wide_research 编排,fetch 核验回填证据分的证据闭环。
DeepSeek Harness 插件:一行同时挂上 Argo 搜索 MCP 和 wide_research 并行研究编排。
dsh plugin --profile web add @taxueseek/argo-dsh # npm 发布版,已支持,当前 2.9.8
dsh plugin --profile web add "github:taxueseek/argo#main&path:packages/dsh-plugin" # GitHub main重启 dsh web 后生效。
profile 里的依赖是 file: / github:,pnpm 安装时复制进 node_modules/@taxueseek/argo-dsh,不是软链。只改本仓源码、不跑同步, DSH 设置页读到的仍是旧 bundle(2026-10-22 实测:缓存开关与付费额度已改, 面板仍显示旧版)。
packages/dsh-plugin/scripts/sync-local.sh --check # 比对源码与已安装 bundle
packages/dsh-plugin/scripts/sync-local.sh # 同步 web/desktop
packages/dsh-plugin/scripts/sync-local.sh --restart # 同步并重启 dsh web同步会先备份到 ~/.dsh/backups/argo-dsh-sync--;浏览器如仍显示 旧面板,做一次硬刷新(Cmd+Shift+R)。
本 bundle 提供 三形态接入——同一套 argo 检索能力(同引擎、同压缩、同守卫),三种调用通道互为冗余,按宿主能力自动降级:
argo_search / argo_fetch(ctx.tools.register),走 CLI 单发(--call)复用 MCP 同一套引擎与守卫,不依赖 MCP 连接、零常驻 token 开销;nativeTools: [] 关闭argo 搜索与抓取两个 provider,宿主内置 web_search 路由到 argo 引擎链、web_fetch 走 argo 抓取链(HTTP 优先,遇 Cloudflare/JS 渲染自动升级反检测浏览器);searchProviderEnabled: false / fetchProviderEnabled: false 时对应 provider 注册但不可选mcp__argo__* 完整工具面(argo_search / argo_local_search / argo_local_read / argo_recompute / argo_research / argo_evidence / argo_clarify / argo_fetch / argo_crawl / argo_screenshot / argo_pdf / argo_social_search / argo_article / argo_job / argo_extract / argo_preflight / argo_answer / argo_watch / argo_cite,与 CLI 能力面对齐)。工具定义每轮注入上下文且压缩清不掉(实测 19 工具 ≈3.7K token/轮),而搜索/抓取高频路径已由原生工具与 web seam 覆盖,故默认不挂载;需要长尾取证能力(screenshot / pdf / social / article / job / evidence / clarify / crawl / local_*)时在 profile patch 中取消 mcp-argo 行注释另有 1 个 wide_research:规划互补轨道(depends_on 依赖分阶段,默认并行)→ 有界并发子代理取证 → 来源账本(仅 http(s) URL 入账)→ 综合报告;输出自带 quality_gate_results(conclusion_cap:low/medium/high),passed=false 时降级表述、先核验账本来源再下结论。worker 取证工具白名单默认双写 MCP 与原生工具名(allow 语义)——MCP 挂载与否两态自洽:MCP 在时用全量面,缺席时自动落到 argo_search / argo_fetch 与宿主 web_search / web_fetch。
日常一问用 argo_search;单代理取证用 argo_research;多视角对比、要引用账本用 wide_research。worker 默认只能调 argo 取证工具,不会再调 argo_research(硬保护,用户层放行也无效)。
插件自带浏览器端设置页,两个入口:
六个分区:
web_search / web_fetch seam 开关;引擎入口命令与参数(npx 或本机 mcp_server.py);搜索/抓取超时、正文上限、连接空闲回收、并发连接数argo_search / argo_fetch);单次调用超时与返回文本上限keyRefs保存即生效(全部为 volatile 配置):原生工具集合按勾选增删注册,超时、并发、研究上限在下一次调用时读取;引擎开关写成 argoEnv(一行一个 KEY=VALUE)随 argo 子进程 env 进入,对下一次新建连接生效(池内旧连接按 searchIdleMs 回收,默认 60s)。结构性字段(toolName、provider、searchProviderId、fetchProviderId)不在设置页,仍走 profile patch,改后需重启。
密钥写入 DSH 凭证库(与 Models 页同一处),不写进插件配置、不打日志。凭证服务优先级为存储文件层 > 启动环境 > 项目 .env > 家目录 .env:在面板(或 Models 页)保存即覆盖启动环境里的旧值,argo 子进程下一跳新连接用新 key;「清除」只删凭证库里的值,环境变量或 .env 提供的 key 会重新露出。设置页只是凭证域的写入口,读取仍由宿主在每次调用时完成。
宿主 dsh-web 的 provider 选择规则:配置 id 优先;都没有且恰好一个可用则选它;多个可用直接报 `WEB_PROVIDER_AMBIGUOUS`。web profile 默认挂着官方 http fetch provider(免 key、永远可用),本 bundle 再注册一个就是两个可用——不 pin 的话 `web_fetch` 整个挂掉(web_search 同理,若 profile 里另有搜索 provider)。故启用 web seam 的 profile 必须在 web 服务行显式指定:
- id: web
config:
searchProvider: argo # 已默认启用搜索 seam 时必配
fetchProvider: argo # 已默认启用抓取 seam 时必配用户层 cordis.patch.yml 同 id 覆盖(同 id + name 匹配才是替换)。searchProviderEnabled: false / fetchProviderEnabled: false 可整体关掉对应 seam(provider 仍注册但不可选,不影响另一个)。
搜索引擎侧,Firecrawl 等匿名可用引擎 keyless 免配置即用(免费层额度),配置了密钥的引擎自动升级为认证请求;缺密钥不阻断路由。
argo 的 deepseek_search 引擎(官方 api.deepseek.com/v1/tools/search,结果自带 authority 权威分级 / rerank_score 排序分 / 发布时间)与 DSH 官方搜索后端共用同一把 key。插件经 DSH 原生凭证 seam 取用,不需要任何手工配置:
- id: wide-research
name: '@taxueseek/argo-dsh'
config:
# 默认即 ['DEEPSEEK_API_KEY'],一般无需写这一行
keyRefs: ['DEEPSEEK_API_KEY']ctx.get('credentials').resolve('DEEPSEEK_API_KEY'),逐次解析——在 web Models 页轮换 key 后,下一跳新连接即生效,无需重启插件(池内连接最长存活 searchIdleMs,默认 60s)keyRefs: [] 可整体关闭转发;后续要转发别的宿主凭证(如 ARGO_EXA_API_KEY),把引用名加进数组即可,entry 必须是 POSIX 标识符(apply 期 loud fail)argoEnv(设置页「引擎」分区写入):argo 行为开关,一行一个 KEY=VALUE,名字限 curated 白名单(index.js 的 ARGO_ENV_SPECS,35 个;白名单外 apply 期 loud fail,防拼错静默失效);授权位与路径 / 状态类变量刻意不收。与 keyRefs 的分工:keyRefs 管密钥(凭证库),argoEnv 管行为开关(插件配置),两者都不落明文pip install pyyamloutputSchema、depthLimit(标准 spawn 即可);toolFilter 在 alpha.x 上可选,rc.2 已移除该启动期字段,改由插件内的 tool guard 阻止 worker 嵌套调用 wide_researchwide_research(planner → 2 worker → synthesis,passed=true / 14 sources)与原生 argo_search(count=3)均真跑通;dsh web 启动无 argo 报错。web seam 的 provider 注册随启动通过,headless 无 web 服务,未做实际调用。旧宿主 alpha.x 的 start 分支由单测覆盖argo-dsh · DSH Harness · 说明 2.9.8(当前) · 0.2.1-rc.2(当前,运行中) · 自带设置页(接入 / 工具 / API 密钥 / 研究 / 高级);双栈入口 startActivation({provider, label, request, signal, delivery});rc.2 移除 toolFilter 启动期字段后由插件内 tool guard 阻止 worker 嵌套调用 wide_research;wide_research 端到端实测通过(planner → 2 worker → synthesis,passed=true / 14 sources) 2.9.7(上一版,兼容) · 0.2.1-alpha.1(实测,兼容) · 旧宿主走 start(provider, request) 分支,toolFilter 启动期字段仍认;该分支由插件单测覆盖,未在 alpha.x 上重跑端到端 2.9.2 · 0.2.1-alpha.1(实测) · 上一轮适配验证基线;rc.2 的新入口与 tool guard 自 2.9.4 起进入
低于 0.2.1 的 Harness 未做验证,不保证可用。
两行配置 id 分别为 mcp-argo 和 wide-research。用户层 cordis.patch.yml 同 id + name 才是替换:
- id: mcp-argo
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: argo
transport: stdio
command: /usr/bin/python3
args:
- /path/to/argo/scripts/mcp_server.py
- id: wide-research
name: '@taxueseek/argo-dsh'
config:
defaultWorkers: 6
maxWorkers: 9
maxTracks: 9
# 原生一等工具(可选调整):默认只注册 argo_search / argo_fetch(高频路径,
# 零常驻 token 开销)。全部长尾工具(article / job / social_search / pdf /
# crawl / extract / evidence / clarify / screenshot / preflight / answer /
# watch / cite / local_search / local_read / recompute,共 16 个,schema
# 自动派生自 MCP 真源)都可按需追加,例如:
# nativeTools: ['argo_search', 'argo_fetch', 'argo_pdf', 'argo_article']
# nativeTools: [] # 空数组关闭
# nativeTimeoutMs: 60000 # 单次进程超时(ms)
# nativeMaxChars: 24000 # 返回文本上限(字符)
# searchProviderEnabled: false # 关闭原生 web seam
childToolAllow:
- mcp__argo__argo_search
- mcp__argo__argo_evidence
- mcp__argo__argo_fetch
- web_search
- web_fetch注意:argo_research不提供原生单发形态——它是分钟级编排,默认 60s 进程超时会中断研究;深度研究请用wide_research(本 bundle 已注册)或挂载 MCP 形态。
在 DSH 的 Settings → Plugins 管理面板中移除本 bundle,或从 profile package.json 的 dsh.profile.bundles 中删除 @taxueseek/argo-dsh 后重启。