网页聚焦阅读 shutongcao1-design/dsh_WebFocus
DeepSeek 客户端按关键词筛出网页相关句子,省下大量 token
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/shutongcao1-design/dsh_WebFocus.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
- 读取本地文件lib/rawstore.js:48
const text = await readFile(path, 'utf8') - 读取本地文件lib/rawstore.js:60
names = await readdir(root) - 读取本地文件lib/rawstore.js:69
const info = await stat(full).catch(() => null) - 删除本地文件lib/rawstore.js:94
await rm(entry.path, { force: true }).catch(() => {}) - 发起网络请求lib/web-focus.js:243
result = await spec.web.fetch({ url: parsed.url }, exec.signal) - 写入本地文件lib/vendor/atomic.js:81
await rename(src, dst) - 写入本地文件lib/vendor/atomic.js:116
if (options.mkdirp !== false) await mkdir(dirname(dst), { recursive: true }) - 删除本地文件lib/vendor/atomic.js:131
await rm(tmp, { force: true }).catch(() => {}) - 读取本地文件lib/vendor/atomic.js:157
const buf = await readFile(path, { signal: options.signal }) - 写入本地文件lib/vendor/atomic.js:203
await writeFile(target, text, { encoding: 'utf8', flag: 'wx' })
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 插件:web_focus 工具按关键词对抓取页面做相关度筛选,压缩链接、过滤导航、保留可回取的原文并缓存,让 web_fetch 不再一次性消耗大量token。
README
由 DeepSeek 最新模型翻译生成dsh-plugin-web-focus
为 DSH(DeepSeek Harness)提供聚焦阅读: web_focus 只抓取一个 URL,注入回答你所写 focus 的那些句子,而不是整页内容。
内置的 web_fetch 会原样注入页面的 markdown(受宿主输出上限约束)。本插件注册了另一个工具 web_focus:它按句子与 focus 的 token 重叠度排序,保证覆盖查询中的稀有词,剔除导航杂项并压缩链接,把未压缩的原文留在磁盘上,并标注清楚省略了多少内容。
0.2.0 不注册任何抓取服务商。 web_fetch 保持原有行为;插件只通过公开的 ctx.web.fetch() API 访问网络。没有 fetchProvider 补丁,禁用本插件包也不会破坏 web_fetch。
0.2.2 的变化(2026-10-18)
- 聚焦摘要只接纳包含 focus 词的标题(最多 8 个);不匹配的标题在强制集合和分数填充中都会被跳过。零匹配回退仍会返回页面大纲。在 San Francisco 的检查中,这去掉了 19 行标题;摘要现在是 17 行非省略内容,0 个标题(还剩 2 个导航链接和 4 行引用/页脚)。
展开完整文档(README 剩余 1 节)
dsh-plugin-web-focus 为 DSH(DeepSeek Harness)提供聚焦阅读: web_focus 只抓取一个 URL,注入回答你所写 focus 的那些句子,而不是整页内容。 内置的 web_fetch 会原样注入页面的 markdown(受宿主输出上限约束)。本插件注册了另一个工具 web_focus:它按句子与 focus 的 token 重叠度排序,保证覆盖查询中的稀有词,剔除导航杂项并压缩链接,把未压缩的原文留在磁盘上,并标注清楚省略了多少内容。 0.2.0 不注册任何抓取服务商。 web_fetch 保持原有行为;插件只通过公开的 ctx.web.fetch() API 访问网络。没有 fetchProvider 补丁,禁用本插件包也不会破坏 web_fetch。 0.2.2 的变化(2026-10-18) - 聚焦摘要只接纳包含 focus 词的标题(最多 8 个);不匹配的标题在强制集合和分数填充中都会被跳过。零匹配回退仍会返回页面大纲。在 San Francisco 的检查中,这去掉了 19 行标题;摘要现在是 17 行非省略内容,0 个标题(还剩 2 个导航链接和 4 行引用/页脚)。 - SANITIZE_CALL_SITES 指向 assemble.js 的 compressStage;删除了过时的 provider.js 引用。 0.2.1 的变化(2026-10-18) - 每个承载内容的 focus 词现在都保留其最佳句子,不再只保留稀有度低于阈值的词。population 不会再输给更稀有的词。 - 最强的、包含查询词的正文句子受到保护,不参与覆盖与协调;长页面最多强制保留 20 个标题(0.2.2 将其收窄为与 focus 匹配的标题)。 - founding / foundation 现在与 founded / established / incorporated 一样触发成立日期处理。 - 下面的实时页面检查写明了所用的确切 focus。 0.2.0 的变化(2026-10-18) 未发布的 0.1.0 原型接管了抓取路径,当摘要保留的句子不足页面的 40% 时,改为注入整页压缩内容。受控基准测试(见下)测出了这样做的后果: | 页面大小 | 0.1.0:注入量 | 0.2.x:注入量 | 0.1.0:保留的关键句 | 0.2.x | | 10k 字符 | 6.9k | 2.9k | 76% | 100% | | 25k | 15.5k | 2.4k | 94% | 100% | | 50k | 62k(全文) | 4.0k | 100%(碰巧) | 100% | | 100k | 79.8k(截断全文) | 4.3k | 61% | 100% | | 200k | 79.8k(截断全文) | 4.4k | 56% | 100% | | 无匹配内容 | 30k / 80k | 644 / 1.7k | — | — | 实时页面检查,同一代码路径(开发期间测得): - en.wikipedia.org/wiki/San_Francisco:原始 459,687 字符 → 正文 3,765 字符(占原始页面的 0.8%),focus 为 population mayor mission founding date。人口 873,965、市长 Daniel Lurie 和 June 29, 1776 均 - zh.wikipedia.org/wiki/Xiamen:原始 335,038 字符 → 正文 3,946 字符(占原始页面的 1.2%)。思明区和湖滨北路 61 号都在。 四处改动带来了这个结果: 1. 查询词覆盖。 每个承载内容的焦点词都保留得分最高的句子,不再只保留通过稀有度阈值的词;稀有词保留每次出现,或保留最好的两句。覆盖在分数填充之后运行,可以挤掉普通填充句,但绝不会挤掉受保护的答案。两轮角色/日期事实扫描覆盖不共享查询 token 的形态:| Mayor | Daniel Lurie | 行(角色 + 人名)和 | Mission | June 29, 1776 | 行(最早的建城/建制日期行)。日期扫描识别 founded、founding、foundation、established 和 incorporated。 2. 稀疏摘要取代全文截断器。 保留率低时,现在产出小摘要,并附一条明确的 ⚠️ [digest: sparse match …] 提示。要读全部内容,仍用 full=true(或保留的原始文本)。零匹配页面现在返回标题和首尾句——不再是 80k 字符的无关文本。 3. 按焦点规模自适应预算。 旧的 clamp(50%, 4k, 24k) 页面预算换成了随承载内容的焦点 token 数量缩放的上限(4k–12k);低于最佳选中分数 22% 的句子会被丢弃,除非被强制保留、块内聚或覆盖保护。整块低分块一起丢弃,列表项因此保持完整。 4. 答案保护与标题上限。 含查询词的正文顶部句子受保护,不受覆盖与预算协调影响;只有包含焦点词的标题能进入摘要(最多 8 个);未匹配的标题在强制集和分数填充中都会被跳过。这样多属性答案能留在摘要里,目录也不会吃掉预算。 还修了两个实测到的选择 bug:预算协调环节过去会牺牲一条排名第 2 的答案句(分数 44.7),去保留低分的「粘性」填充句;分数填充可能超出预算,因为覆盖新增的句子没被计入。MediaWiki Parsoid JSON(旧金山页面里信息框模板泄漏成一行 18.6k)会被丢弃,markdown 表格行会保留,不再被误判为菜单行。 选择如何工作 raw text → strip invisible chars → compress links / drop nav → split sentences → forced: first 2 + last 2 + query-matched headings (at most 8) → score fill: focus-sized budget 4k–12k → protect the top query-bearing answer sentences → query-term/role/date coverage (displaces ordinary filler) → block cohesion (groups of ≤4 sentences) → adaptive trim (<22% of best score) → budget reconciliation (answers and forced sentences survive) → coverage header + sparse-match note 打分用的是页内 IDF × 查询 token 重叠度,再加上位置、数字、标题的小幅先验。focus 是关键词查询,不是摘要指令:写你预期答案里会出现的词。 已知边界:改写 token 重叠选择找不到与 focus 没有任何词汇重合的事实。基准测试里的改写用例(页面写「closed a $42 million financing round」,focus 写「how much outside money did it take」)保留了 3 个关键句中的 2 个;漏掉的那句得分 0.8(只有数字先验)。这是词法检索的局限,不是调参 bug。缓解办法:用页面里可能出现的词写 focus,对改写多的页面用 full=true,或者直接读保留的原始文本。其他对抗用例——多句答案、表格、中文页面、某个罕见词出现在七个句子里、关键内容超出 80k 上限——都保留了 100% 的关键句。 要求 - DSH,带内置 web 服务(@deepseek-ai/dsh-web-app)。 - Node.js ≥ 18。 - @deepseek-ai/schemastery(peer 依赖;DSH 自带)。 宿主抓取上限(长页面尤其重要) 宿主的 http fetcher 默认把解码后的响应体截断在 100,000 字符。在大篇 Wikipedia 页面上,这个截断点落在信息框里,还没到正文:插件只拿到导航部分,在 8k 选择触发阈值下压缩它,而没送到的内容根本选不出来。现在 truncated: true 时插件会明确警告,但真正的修法在宿主那一行: - id: web-fetch-http config: maxBodyChars: 2000000 这是测试所用配置档里的值(2M = 插件自身的 HTML 输入上限,宿主不再是瓶颈)。改完要重启宿主。maxTextLength(80k)仍是独立的上下文预算旋钮。 安装 包没有发布到 npm。克隆这个仓库,从检出目录安装 bundle: git clone https://github.com/shutongcao1-design/dsh_WebFocus.git plugin_manager action: install_bundle target: <absolute path to the checkout> bundle 补丁只插入插件行,不碰 web 行。如果装过旧的基于 provider 的副本,先卸掉那个 bundle,再更新任何引用了它 provider id 的配置档补丁。 配置 | 选项 | 默认值 | 含义 | | rawDir | <package>/data/raw | 未压缩原始文本的写入位置(锚定到模块位置,不是 cwd) | | rawMaxChars | 4194304 | 单文件上限;超出后文件被截断,头部会注明 | | rawCleanupDays | 30 | 启动时删除超过这个天数的原始文本(0 关闭);跳过符号链接 | | pageCacheTtlSeconds | 1800 | 页面缓存 TTL | | negativeCacheTtlSeconds | 240 | 失败缓存 TTL,故意设得更短 | | maxTextLength | 80000 | 注入页面文本的硬上限;头部和标记也计入 | | sourcesMax | 30 | 保留的来源脚注条目上限 | | enableFocusTool | true | 注册 web_focus | | exposeInternals | false | 在 ctx.__webFocus 上暴露 cache/rawStore/web,供探测使用 | 这些行为可能会让你意外 - 命中失败缓存会抛错。 某个 URL 在 4 分钟内失败过,web_focus 会直接抛错,不再重新抓取。refresh: true 会同时清掉两个缓存。 - 命中页面缓存会重新筛选,而不是重放:同一个 URL 换一个 focus,产出的摘要就不同。 - 非 2xx 响应算结果,不算错误。 它会带着一条提示返回,并写入失败缓存。 - web_focus 只渲染 notice + content。 结构化字段(kept、total、fallback、fromCache、rawPath)留给工具使用。 - 原始文本默认放在包目录里。 重装 bundle 可能把它清掉;如果你依赖它,把 rawDir 设到持久位置。 - 原始页面可能含个人数据。 默认保留 30 天(rawCleanupDays)。处理敏感页面时,选一个私有的 rawDir、调低保留天数,或者直接删掉目录。页面缓存放在内存里,重启即丢。 安全立场 - 它自己不抓取任何东西。 每个请求都走 ctx.web.fetch,所以 URL 校验、SSRF 拦截、重定向策略、大小上限和字符集规则仍由宿主负责。 - 安全拦截绝不伪装成成功。 宿主错误原样向上传递;只有本插件自己的后处理失败,才回退到未处理的页面(有上限)。 - 抓回来的页面是不可信数据。 注入前会先做净化,绝不当作指令处理。上报流程见 SECURITY.md。 开发 node --test # 31 tests; integration tests skip when the host peer is absent 包是自包含的:共享辅助函数以 vendored 形式放在 lib/vendor/ 下,test/package.test.js 会强制检查没有任何 import 越出包根目录。 上面这些数字用的基准测试工具是另一个仅用于开发的项目,不随本包发布。它会生成填充页面,在五个长度区间(10k–200k)注入已知关键句,并跑对抗用例;它把本包和同一套筛选代码的早期冻结快照做对比,输出 JSON 证据。 参与贡献 欢迎提 issue 和 pull request。提交改动前先跑 npm test。本包刻意不带运行时依赖;宿主集成请走公开的 ctx.web.fetch() API,共享辅助函数以 vendored 形式放到 lib/vendor 下。 许可证 MIT —— 见 LICENSE。 这是独立的社区插件,与 DeepSeek 无隶属关系,也未获其背书。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
shutongcao1-design/dsh_WebFocus
按关键词筛出网页相关句子,省下大量 token
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 21,780未汉化DSH
73.5
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 1,947已汉化MCP
72.7
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,347已汉化DSH
71.9
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13917 个插件含 PR 收录与…
★ 343已汉化DSH
71.6