zhouwei713/dsh-daily-kit--packages-watcher0

dsh-daily-watcher

dsh plugin: content-aware monitoring (RSS/Atom, webpage main text, folder new files) for the DeepSeek Harness (developer preview)

包名
dsh-daily-watcher
版本
0.1.0
许可证
MIT
最近更新
2026年8月16日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:zhouwei713/dsh-daily-kit#03d93caab5b846c990da8bb201d52881756ed483&path:packages/watcher

安装与配置


# dsh 配置示例
- id: watcher
  name: dsh-daily-watcher
  config:
    enabled: true
    dataFile: watcher-store.json      # 账本与历史的 JSON 存储(原子写)
    defaultIntervalSeconds: 1800      # watch_add 缺省间隔
    minIntervalSeconds: 60            # 间隔下限
    maxBackoffSeconds: 21600          # 失败退避上限
    fetchTimeoutSeconds: 20
    userAgent: 'dsh-daily-watcher/0.1 (content-watch; +https://github.com/deepseek-ai)'
    maxItemsPerDelivery: 10           # 单次投递最多列出的条目数
    maxExcerptChars: 2000             # 网页正文摘录长度上限
    folderPreviewLines: 30            # 新文本文件注入的行数
    seenKeysMax: 500                  # 每个订阅源的已见 GUID 账本上界
    summarize: false                  # 摘要方案,见下
    deliverTimeoutSeconds: 600

摘要方案的取舍

summarize: false(默认)时,投递消息里是模板摘要:变化标题 + 条目列表(数量与长度可配截断),零模型调用、行为确定。

summarize: true 时,本插件不自己注册或调用任何模型,而是在投递消息末尾附加一条指令,请目标会话的 agent 用自己的话总结变化要点。选择这个低耦合方案的原因:

  • 不需要额外的模型配置/API key,摘要能力复用投递目标会话已有的模型;
  • 摘要本来就要被那个会话消费,让它自己生成省去一次中转;
  • 代价是摘要质量取决于目标会话的模型,且每次变化多消耗一轮会话 token——所以默认关闭。

权限透明

本插件对宿主环境的影响面,逐条交代清楚:

  • 读写位置:读写 dataFile 指定的 JSON 账本(默认 ./watcher-store.json,原子写:临时文件 + rename);folder 类型监控只读取用户配置的目标目录及其文件头部(≤8KB 用于文本预览)。
  • 网络域名:只访问用户在 watch_add 中显式配置的 http(s) URL,带可配置的 User-Agent、超时与 etag/last-modified 条件请求头;不访问任何其他域名。
  • 凭证:不持有任何凭证。遇到需要登录的源会暂停并说明,而不是尝试绕过。
  • 确认点:无 ask 拦截;所有监控由用户通过 watch_add 显式创建。
  • 日志内容:插件日志只记录加载信息、自动暂停原因与持久化失败;变化内容(条目标题、正文摘录、文件预览)只进入投递目标会话,按其既有规则留痕,未额外脱敏。

已知限制

  • 正文提取是自研轻量启发式(去 script/style/nav/header/footer/aside,优先 /),不是完整的 Readability 算法;对高度动态或模板复杂的页面可能提取到噪声。这是有意取舍:零额外依赖、可单测。评估后未引入现成包——生态里零依赖且维护活跃的正文提取包(如 @mozilla/readability)都面向 DOM 而非字符串,引入它需要再带一个 DOM 实现,代价不成比例。
  • 不支持 JS 渲染页面(SPA、无限滚动):只抓取静态 HTML。
  • 文件夹监控只看顶层新增文件(非递归),文件内容修改不触发(那是 sentinel 的领域)。
  • 正文 hash 对"重新排版但文字不变"免疫,但对"同一段落改动一个字"敏感——没有相似度阈值。

手动验证

本仓库的 CI 只覆盖类型检查与纯函数单测。接入真实 dsh 后请手动验证:

  1. 在 dsh 配置中启用本插件,确认启动日志出现 watcher: loaded
  2. watch_add 一个 rss 监控(任选一个公开订阅源,间隔 60s),随后 watch_check 立即检查一次:首次应返回 unchanged(建立基线)。
  3. 等订阅源更新(或换一个会变化的网页做 webpage 监控),下一次轮询应在目标隔离会话中收到投递消息,watch_history 出现 changeddelivered=true
  4. watch_add 一个 folder 监控指向某个测试目录,向其中放入一个 .md 文件,下一轮应投递文件名 + 前若干行预览;放入二进制文件应标注"跳过预览"。
  5. 配置一个需要登录的 URL,下一轮应自动暂停,watch_list 显示暂停原因;watch_pause 恢复后重新轮询。
  6. 重启 dsh,确认 watch_list 中的监控与账本从 dataFile 恢复,不重复推送旧条目。

许可

MIT