dsh-tsinghua-course-sync:在 DSH 中增量同步清华网络学堂课程资料

前言

在 DeepSeek Harness(DSH)里做课程相关的自动化时,常见做法是手写脚本抓页面或手动下载附件,既难维护,也很难在「文件是否已更新」上做到稳定判断。清华网络学堂依赖浏览器登录,验证码、扫码和会话状态又不好塞进纯命令行工具。

下面介绍的 dsh-tsinghua-course-sync 由维护者 ZhiX-Wang 发布,归类为联网工具。它在系统默认浏览器(或指定的 Chrome、Edge、Firefox)中复用你已登录的学堂会话,按当前学期课程列表把资料落到本机,并在再次同步时用学堂侧标识、更新时间与大小,以及本地 SHA-256 校验做增量跳过或更新。每轮运行会写 JSONL 日志,便于在 DSH 里用自然语言查「上次新增了哪些、有没有失败」。

插件当前为 0.1.0 预览版,适配 DSH 0.2.1-rc.2 至 0.2.1 系列(package.json 中 engines.dsh 为 >=0.2.1-rc.2 <0.2.2-0)。DSH 工具与配套浏览器扩展需同时安装,缺一不可。

这是什么

一句话:在自己浏览器里登录清华网络学堂后,把当前学期各科目课程资料按目录归档到本机,后续调用只拉有变化的文件,并保留去重与逐项日志。

社区插件目录(如 SkillHub)与 DeepSeek / 幻方无官方从属关系;安装前建议自行查看源码与许可证。插件以当前 DSH 进程权限读写本机目录并与浏览器扩展通信,使用前请确认路径与隐私边界可接受。

核心功能

同步范围

README 中写明的范围包括:

  • 登录用户当前学期课程列表中的课程文件与全部分类。
  • 课程公告附件与原文说明。
  • 本人未提交、已提交未批改和已批改作业中的附件与原文说明。

课程列表在每次登录后从页面动态获取;新课程、新分类和新附件在下次调用时发现。

本地目录结构

默认保存目录为当前 OS 用户的 Documents/清华网络学堂/课程。用户可在对话中指定其他绝对路径,后续更新继续使用同一目录。

每个课程文件夹采用学堂显示的课程名和课程编号,并保留原文件分类;公告与作业分别放在「课程公告」「课程作业」子文件夹。

增量与去重

保存目录下的 .学堂同步/manifest.json 记录文件标识、元数据指纹、相对路径、大小、校验值与保存时间。.学堂同步/logs/ 下每次运行生成一个 JSONL 日志,逐行记录操作结果。

日志动作 含义
saved 首次保存
updated 文件发生变化,保存新版本
skipped 远程元数据和本地校验均未变化,跳过下载
deduplicated 取得内容后发现与已有文件一致,复用原文件
failed 当前项目失败,成功项目已保留,可再次同步补齐
recovered 从之前中断的保存日志恢复索引
run_finished 本轮最终状态与统计

同名文件内容变化时,新版本文件名带校验值后缀,旧版本保留。更新判断依赖学堂公开的文件标识、更新时间和大小;公告或作业正文还会核对原文内容。README 注明:若学堂在保留相同标识、时间和大小的同时替换附件,当前版本无法仅从列表元数据识别该变化。

DSH 注册工具

在 DSH 0.2.1-rc.2 的 ToolRuntime 中注册 4 个工具(README「工具」一节):

工具 用途
tsinghua_courses_sync 开始增量同步,可指定 root 与 browser
tsinghua_courses_status 查看运行状态,可等待最多 25 秒
tsinghua_courses_history 查看最近同步日志
tsinghua_courses_cancel 取消当前任务并保留已完成文件

browser 可选 default、chrome、edge 或 firefox。任务返回 waiting_for_browser 或 waiting_for_login 时,按页面提示完成操作后会自动继续。

安装与启用

在 GitHub Release v0.1.0 可下载 DSH 安装包与配套浏览器扩展。DSH 部分也可直接用发布地址安装:

dsh plugin --profile desktop add https://github.com/ZhiX-Wang/dsh-tsinghua-course-sync/releases/download/v0.1.0/dsh-tsinghua-course-sync-0.1.0.tgz

若已下载 dsh-tsinghua-course-sync-0.1.0.tgz 到本机某文件夹,可在该目录执行:

dsh plugin --profile desktop add ./dsh-tsinghua-course-sync-0.1.0.tgz

然后重新启动 DSH。非 desktop profile 的用户将命令中的 desktop 换成自己的 profile 名。

浏览器扩展安装步骤(摘自 README):

  1. 解压 Release 中的配套浏览器扩展 ZIP,保留解压后的文件夹。
  2. Chrome:打开 chrome://extensions;Edge:打开 edge://extensions。启用开发者模式,「加载已解压的扩展程序」,选择包内 chromium 文件夹。
  3. Firefox:使用 firefox 文件夹;预览可在 about:debugging#/runtime/this-firefox 临时载入 manifest.json(重启后失效;长期安装需 Firefox 签名)。

DSH 启动器若未加入 PATH,可使用安装目录中的 dsh;macOS 应用版常见路径为 /Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh。

Safari:默认浏览器为 Safari 时,预览版会提示选用已安装的 Chrome、Edge 或 Firefox(例如在 DSH 中说「这次用 Chrome 同步」)。Safari 扩展需另行生成应用包并签名。

验证状态:README 写明 Windows、Linux、Firefox 和 Safari 的完整使用流程尚未实机验证;Chrome/Edge 商店分发与 Firefox 签名尚未完成,当前通过加载源码文件夹预览。

典型用法

在 DSH 对话中输入 README 给出的任一句即可触发(模型会调用插件工具):

帮我同步清华网络学堂当前学期的课程资料。

把课程资料保存到我指定的绝对路径,之后继续同步这个目录。

看看上次课程同步新增了哪些文件,有没有失败。

流程概要:

  1. 插件打开系统默认浏览器中的连接页,点击「允许本次课程同步」。
  2. 学堂在同一浏览器新标签页打开;已有登录会话会直接使用。浏览器自动填入账号密码后,插件会尝试点击一次登录;验证码、扫码、二次验证或失效密码需在学堂页面手动完成。
  3. 同步期间保留连接页与学堂标签页。完成后 DSH 显示结果与日志位置,连接页也会显示完成状态。

扩展仅访问清华网络学堂、清华身份认证页面和本机回环连接;用户每次点击允许后才接收该轮同步。账号密码由浏览器管理,扩展检查自动填充状态以触发登录;课程原文与附件在本机处理,聊天记录的处理方式由用户自己的 DSH 模型与会话配置决定。

适用场景与注意

适合:已在 Chromium 系浏览器(或 README 支持的 Firefox 预览流程)中维护学堂登录习惯、希望把当前学期资料定期归档到本机、并需要可重复的增量日志与失败补齐的 DSH 用户。

注意:

  • 运行环境:package.json 要求 Node >=22.19.0,DSH 版本需在 0.2.1-rc.2~0.2.1 区间内。
  • 权限与安全:插件以 DSH 进程权限写盘;扩展权限范围见 README「浏览器权限」一节。安装前请阅读仓库源码与 MIT 许可证。
  • 局限:元数据未变但附件被替换的场景,当前版本可能无法识别;Safari 与部分平台的完整流程尚未在 README 中标记为已实机验证。

结尾

dsh-tsinghua-course-sync 把「浏览器登录 + 当前学期课程列表 + 本地增量索引」串成一条可在 DSH 里用自然语言驱动的同步链路,适合需要稳定归档学堂资料、又不想每次全量下载的开发者或学生用户。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye