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

网课代学 LeuJasYoh/dsh-xuexi

DeepSeek Harness
LeuJasYoh26 天前有提交已提供中文文档扫描:含敏感能力

接管浏览器,按真实学习节奏自动完成网课任务

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/9 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add LeuJasYoh/dsh-xuexi
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
  • 读取本地文件
    index.js:12
    return JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8')).version
  • 读取本地文件
    index.js:20
    return readFileSync(new URL('./prompts/study-mode.md', import.meta.url), 'utf8')
  • 发起网络请求
    lib/cdp/session.mjs:70
    response = await fetch(this.endpoint + '/json/list', { signal: AbortSignal.timeout(5000) })
  • 读取本地文件
    lib/notes/store.mjs:63
    return { note: JSON.parse(await readFile(file, 'utf8')), file, workspaceRoot }
  • 写入本地文件
    lib/notes/store.mjs:73
    await mkdir(notesRoot(workspaceRoot), { recursive: true })
  • 写入本地文件
    lib/notes/store.mjs:75
    await writeFile(temp, JSON.stringify(note, null, 2) + '\n', 'utf8')
  • 写入本地文件
    lib/notes/store.mjs:77
    await rename(temp, file)
  • 删除本地文件
    lib/notes/store.mjs:79
    await rm(file, { force: true })
  • 写入本地文件
    lib/notes/store.mjs:80
    await rename(temp, file)
  • 写入本地文件
    lib/notes/store.mjs:88
    await mkdir(root, { recursive: true })
  • 读取本地文件
    lib/notes/store.mjs:89
    const names = await readdir(root)
  • 读取本地文件
    lib/cxsecret/decode.mjs:5
    const TABLE = JSON.parse(readFileSync(new URL('./table.json', import.meta.url), 'utf8'))
  • 发起网络请求
    lib/vendor/typr-bundle.mjs:2329
    fetch(hurl)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 接管浏览器自动完成网课
  • 按真实学习节奏执行
  • 运行时自适应动态网站

把大模型当司令、脚本当手的 DSH Agent 预设:工具里零业务判断,让模型在运行时自适应动态结构的网站

README

由 DeepSeek 最新模型翻译生成
dsh-xuexi · 网课模式 工具只当手和眼,判断全归大模型。 一个 DeepSeek Harness 插件 + Agent 预设:接管你正在用的浏览器,按真实学习的方式把网课任务做完。 这是什么,为什么这么做 大部分「网页自动化脚本」的思路是:把页面结构写死进代码。 页面一变就崩,于是不断加 if,最后没人敢改。 这个插件走的是相反的路: 大模型 = 大脑:看、判断、决定、应对没见过的情况 15 个工具 = 手和眼:点、写、滚、截图、取事实 —— 不认识任何网站 这是被一次真实事故逼出来的 旧版本把「某个网站长什么样」写死在工具里,又把「按什么顺序调工具」写进提示词。 用户换了一个学校的账号 —— 页面结构不一样: - 专用工具报「课程不存在」(其实是它自己那个读法没读到) - 想换回用户翻好的那一页,却根本没有「换标签页」这个工具 - 想直接点课程卡片,可通用眼睛那次没看见内嵌窗口里的东西 - 结果:原地打转十分钟,最后要用户手动帮它打开页面 根因不是模型笨,是它的退路被堵死了。
展开完整文档(README 剩余 1 节)
dsh-xuexi · 网课模式

工具只当手和眼,判断全归大模型。

一个 DeepSeek Harness 插件 + Agent 预设:接管你正在用的浏览器,按真实学习的方式把网课任务做完。

这是什么,为什么这么做

大部分「网页自动化脚本」的思路是:把页面结构写死进代码。
页面一变就崩,于是不断加 if,最后没人敢改。

这个插件走的是相反的路:

大模型 = 大脑:看、判断、决定、应对没见过的情况 15 个工具 = 手和眼:点、写、滚、截图、取事实 —— 不认识任何网站

这是被一次真实事故逼出来的

旧版本把「某个网站长什么样」写死在工具里,又把「按什么顺序调工具」写进提示词。
用户换了一个学校的账号 —— 页面结构不一样:

- 专用工具报「课程不存在」(其实是它自己那个读法没读到)
- 想换回用户翻好的那一页,却根本没有「换标签页」这个工具
- 想直接点课程卡片,可通用眼睛那次没看见内嵌窗口里的东西
- 结果:原地打转十分钟,最后要用户手动帮它打开页面

根因不是模型笨,是它的退路被堵死了。

所以 v2 只做三件事:

| # | 原则 | 落地方式 |
| ① | 工具只认识屏幕 | 编号、对账清单、票据指纹 —— 全部从屏幕上现读,代码里没有业务概念 |
| ② | 格式错在动手之前拦住 | 每个工具第一步是纯计算校验;ARG/USAGE 失败 = 页面一下都没被碰过 |
| ③ | 大脑永远有退路 | 截图 → 列出能点的 → 点一个看变化。这三件永远不会失效 |

15 个工具

眼(5)—— 只报事实

| 工具 | 干什么 |
| eye_open | 接管浏览器,报现在开着哪几个标签页、我接的是哪个、登录没有、以前的笔记 |
| eye_see | 这一页有几处要处理、每处是挑还是写、有几个选项、有没有「已完成」标记 |
| eye_list | 所有能点能填的东西(含内嵌窗口),每个一个编号 |
| eye_shot | 截图 —— 图直接放在返回里,模型真的能看到 |
| eye_check | 交之前复核,七条全过才发票据 |

手(6)—— 只做一个动作

| 工具 | 干什么 |
| hand_click | 点(编号 / 文字 / 坐标) |
| hand_pick | 从页面给出的选项里挑 —— 单选 / 多选 / 判断 / 下拉对它都是同一件事 |
| hand_write | 在指定的可写区里写字,写完回读实际内容 |
| hand_scroll | 滚 |
| hand_goto | 唯一的导航:跳网址 / 后退 / 刷新。工具绝不自作主张跳页 |
| hand_tab | 换浏览器标签页 |

必要(4)—— 只有两类动作需要代码兜住

| 工具 | 为什么必须由代码守 |
| hand_play | 铁律:原速 1x、永不拖进度条、永不伪造心跳、严格串行。参数里故意没有倍速/跳转/心跳 |
| hand_submit | 做错回不了头:不接受任何答案,只读页面 + 两份复核登记,自己再核一遍才点 |
| hand_note | 笔记本 + 待办清单(下次 eye_open 带回来) |
| hand_verdict | 复核员专用(唯一对子智能体开放的工具) |

做题怎么写:三方独立复核

答题是全站唯一做错回不了头的动作(一般不给重做),所以交之前要三方独立:

① 主脑自己看图定一份,用 hand_pick / hand_write 弄在页面上 ★ 先弄完,再派人。别把自己那份告诉任何人。

② 派两个常驻复核员,给同一张截图 + 一份无答案编号清单

③ 它们各自 hand_verdict 登记(值写图上看得见的标签:"B" / "对")

④ eye_check 三方比对 → 通过才发票据 → hand_submit

为什么主脑的答案必须落在页面上:旧版主脑把复核员的 JSON 原样转发, 6 次提交和复核员给的 6 份一字不差 —— 实质只有一份判断,一个错就没人兜住。
现在工具直接读页面上的 filled,想报一个假答案,它做不到。

没有 afterReview 后门:不一致时永远不发票据。
放行只有一条路 —— 复核员拿到特写后重新登记、且新结论一致。
登记是「每人一份当前结论、整体覆盖」,身份由 ctx.agents 判定,不靠自报。

边界

只有四种情况会当场打断你:图形验证码 / 未登录 / 熔断或额度 / 人脸抓拍。
其余(听力题、看视频才能答的题、讨论帖)一律 hand_note({ tag:"pending" }) 记账,做完一次性汇报。

铁律六条(代码会拦):

原速 1x | 永不拖进度条 | 永不伪造心跳 | 严格串行 | 不破解验证 | 不代填账号密码

人脸识别 / 抓拍直接拒绝 —— 它要求摄像头前坐着真人,原理上做不到。

安装

1. 装进 DSH 桌面配置档 .\install.ps1

2. 重启 DSH
3. 设置 → Agent 预设 → 选「网课模式」

需要一个开了调试端口的浏览器(默认 9222):

chrome.exe --remote-debugging-port=9222 --user-data-dir="$env:USERPROFILE\.dsh\xuexi\browser-profile"

测试

npm test

断言分五组:参数校验(含零副作用的结构保证)、复核闸门(七条 + 票据 + 登记覆盖)、工具表面(15 个、前缀、并发标志、铁律参数里不许有倍速)、痕迹检查(代码里不许有平台字样和写死的网址)、预设自检。

仓库结构

index.js 15 个工具 + 统一外壳 + 前置校验 + 角色闸门 lib/ args.mjs ★ 参数校验(纯函数,零副作用) gate.mjs ★ 复核七条 + 票据指纹 + 登记簿(纯函数,可测) browser.mjs CDP:标签页 / 截图 / 跨窗口 / 自愈重连 see.mjs 看:四类区域 + 编号清单 hand.mjs 手:点 / 挑 / 写 / 滚 / 播 note.mjs 笔记本 + 过程文件 prompts/xuexi-mode.md 模式提示词 facts/平台事实.md 经验种子(不是规则,用完让位给真实观察)

过程文件落在哪:<工作区>/.xuexi/(截图、笔记、记账)—— 跟对话在一起,好清理。
机器状态:~/.dsh/xuexi/browser-profile(登录态,跨会话共用)。

一句

你看到的是屏幕,不是数据库。 看不清就截图;不确定就记下来;拿不准就别猜。

License

MIT
预览分享卡片长什么样 ↓LeuJasYoh/dsh-xuexi
分享 · DeepSeek Harness Hub
LeuJasYoh/dsh-xuexi

接管浏览器,按真实学习节奏自动完成网课任务

这是你的仓库?认领条目

回到顶部