🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

网页聚焦阅读 shutongcao1-design/dsh_WebFocus

DeepSeek 客户端
shutongcao1-design14 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

按关键词筛出网页相关句子,省下大量 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 安装
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
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 无隶属关系,也未获其背书。
预览分享卡片长什么样 ↓shutongcao1-design/dsh_WebFocus
分享 · DeepSeek Harness Hub
shutongcao1-design/dsh_WebFocus

按关键词筛出网页相关句子,省下大量 token

回到顶部