zhouwei713/dsh-daily-kit--packages-watcher ↗★ 0
dsh-daily-watcher
dsh plugin: content-aware monitoring (RSS/Atom, webpage main text, folder new files) for the DeepSeek Harness (developer preview)
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:zhouwei713/dsh-daily-kit#03d93caab5b846c990da8bb201d52881756ed483&path:packages/watcher说明文档
阅读完整 README ↗安装与配置
# 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 后请手动验证:
- 在 dsh 配置中启用本插件,确认启动日志出现
watcher: loaded。 watch_add一个rss监控(任选一个公开订阅源,间隔 60s),随后watch_check立即检查一次:首次应返回unchanged(建立基线)。- 等订阅源更新(或换一个会变化的网页做
webpage监控),下一次轮询应在目标隔离会话中收到投递消息,watch_history出现changed且delivered=true。 watch_add一个folder监控指向某个测试目录,向其中放入一个.md文件,下一轮应投递文件名 + 前若干行预览;放入二进制文件应标注"跳过预览"。- 配置一个需要登录的 URL,下一轮应自动暂停,
watch_list显示暂停原因;watch_pause恢复后重新轮询。 - 重启 dsh,确认
watch_list中的监控与账本从dataFile恢复,不重复推送旧条目。
许可
MIT