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

考研学习工作台 slow-stack/dsh-study-desk

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

DSHDeepSeek Harness学习工作台插件:Notion 式待办墙 + 按复习时长点亮的学习热力图 +…

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · tool
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 48 处,展示前 31 条)
  • 读取本地文件
    index.js:177
    const pkg = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), 'package.json'), 'utf8'))
  • 写入本地文件
    index.js:292
    mkdirSync(deskDir(), { recursive: true })
  • 写入本地文件
    index.js:293
    writeFileSync(markdownFile(), text)
  • 读取本地文件
    index.js:330
    const parsed = JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    index.js:337
    mkdirSync(deskDir(), { recursive: true })
  • 写入本地文件
    index.js:338
    writeFileSync(file, JSON.stringify(report, null, 2))
  • 读取本地文件
    desk.js:339
    if (!existsSync(file)) return freshState()
  • 读取本地文件
    desk.js:340
    return normalize(JSON.parse(readFileSync(file, 'utf8')))
  • 写入本地文件
    desk.js:343
    try { renameSync(file, file + '.broken-' + Date.now()) } catch { }
  • 写入本地文件
    desk.js:350
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    desk.js:353
    writeFileSync(tmp, JSON.stringify(next, null, 2))
  • 写入本地文件
    desk.js:354
    renameSync(tmp, file)
  • 发起网络请求
    bbdc.js:194
    const res = await fetch(url, { headers: { 'user-agent': UA, referer: `${HOST}/` } })
  • 执行外部命令来自配置/变量
    bbdc.js:493
    execFileSync(sz, ['x', copy,
  • 删除本地文件递归
    apply-probe.mjs:15
    const cleanup = () => { try { rmSync(PROBE_HOME, { recursive: true, force: true }) } catch (e) { } }
  • 读取本地文件
    apply-probe.mjs:248
    const md = readFileSync(join(PROBE_HOME, 'study-desk', 'desk.md'), 'utf8')
  • 读取本地文件
    apply-probe.mjs:290
    const report = JSON.parse(readFileSync(file, 'utf8'))
  • 读取本地文件
    install.mjs:26
    const PKG = JSON.parse(readFileSync(join(HERE, 'package.json'), 'utf8'))
  • 读取本地文件
    install.mjs:54
    if (isAbsolute(given) || existsSync(given)) return resolve(given)
  • 读取本地文件
    install.mjs:87
    return JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    install.mjs:93
    copyFileSync(file, to)
  • 读取本地文件
    install.mjs:116
    if (!existsSync(explicit)) return null
  • 执行外部命令固定命令
    install.mjs:119
    const probe = spawnSync('pnpm', ['--version'], { shell: true, encoding: 'utf8' })
  • 执行外部命令来自配置/变量
    install.mjs:135
    const r = spawnSync(pnpm.cmd, [...pnpm.args, 'install'], {
  • 读取本地文件
    install.mjs:158
    if (existsSync(p)) ok(f + '(' + statSync(p).size + ' bytes)')
  • 读取本地文件
    install.mjs:158
    if (existsSync(p)) ok(f + '(' + statSync(p).size + ' bytes)')
  • 写入本地文件
    install.mjs:220
    copyFileSync(PATCH_FILE, backups(PATCH_FILE))
  • 写入本地文件
    install.mjs:221
    writeFileSync(PATCH_FILE, withEntryName(text, entryUrl(to)))
  • 写入本地文件
    install.mjs:245
    writeFileSync(pkgFile, JSON.stringify(pkg, null, 2) + '\n')
  • 写入本地文件
    install.mjs:249
    copyFileSync(PATCH_FILE, backups(PATCH_FILE))
  • 写入本地文件
    install.mjs:250
    writeFileSync(PATCH_FILE, withEntryName(readFileSync(PATCH_FILE, 'utf8'), NAME))
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 待办墙管理
  • 按复习时长点亮热力图
  • 跨面板存活番茄钟

README

由 DeepSeek 最新模型翻译生成
dsh-study-desk 一个学习工作台,跑在 DeepSeek Harness(DSH)里:待办墙、间隔重复复习、按实际复习时长点亮的热力图与周报、番茄钟、每日复盘,外加一个独立面板,把不背单词打卡记录接进来。数据是本机一个 JSON,可读、可改、可版本化,另可导成 Markdown 进 Obsidian。 适合任何需要长期投入 + 反复记忆 + 可核对的进度记录的人:考研考公备考、期末与考证、语言学习、论文与实验推进、组会文献跟踪。 为什么是这两块 热力图按复习分钟点亮,不按「有没有用 AI」。 市面上同类插件的格子是「当天有没有消耗 token / 有没有开过会话」——那是使用强度,不是学习量。开着窗口摸鱼一天也会亮,这样的图没有诊断价值。这里一格亮不亮,取决于你那天实际专注了多少分钟。 复习需要排期,不然永远只在做新题。 卡片可以拉进间隔重复队列,用「忘了 / 记得 / 很简单」三档打分,下次什么时候复习由算法推进(简化版 SM-2:忘了清零留在今晚,记得按难度倍乘,很简单再多拉 30%)。已完成的卡照样会到期——背过的东西才是复习的对象。排期之外还有三块:单卡记忆曲线、未来 7 天到期预报、今日建议(见图),所以「今天先过哪几张」不是凭感觉。
展开完整文档(README 剩余 1 节)
dsh-study-desk

一个学习工作台,跑在 DeepSeek Harness(DSH)里:待办墙、间隔重复复习、按实际复习时长点亮的热力图与周报、番茄钟、每日复盘,外加一个独立面板,把不背单词打卡记录接进来。数据是本机一个 JSON,可读、可改、可版本化,另可导成 Markdown 进 Obsidian。

适合任何需要长期投入 + 反复记忆 + 可核对的进度记录的人:考研考公备考、期末与考证、语言学习、论文与实验推进、组会文献跟踪。

为什么是这两块

热力图按复习分钟点亮,不按「有没有用 AI」。 市面上同类插件的格子是「当天有没有消耗 token / 有没有开过会话」——那是使用强度,不是学习量。开着窗口摸鱼一天也会亮,这样的图没有诊断价值。这里一格亮不亮,取决于你那天实际专注了多少分钟。

复习需要排期,不然永远只在做新题。 卡片可以拉进间隔重复队列,用「忘了 / 记得 / 很简单」三档打分,下次什么时候复习由算法推进(简化版 SM-2:忘了清零留在今晚,记得按难度倍乘,很简单再多拉 30%)。已完成的卡照样会到期——背过的东西才是复习的对象。排期之外还有三块:单卡记忆曲线、未来 7 天到期预报、今日建议(见图),所以「今天先过哪几张」不是凭感觉。

界面

| 模块 | 干什么 |
| 目标与节点 | 右上角一个倒计时(考试 / 答辩 / 投稿都行,名称与日期在设置页填,留空就不显示),下面一排节点 chip:进行中、还剩几天、日期是估的会标「约」 |
| 待办墙 | Notion 式三列(待办 / 进行中 / 已完成),卡片带科目、标签、预计与累计时长,可拖拽换列;顶部一条过滤栏:搜标题 / 备注 / 标签、按科目、按标签、只看到期 |
| 今日复习 | 到期队列摆在最上面,每张卡三个按钮打分;队列长度可调,逾期越久排越前 |
| 记忆曲线 | 每张到期卡带一条迷你曲线 + 「记忆 N%」(R(t) = e^(-t/S),S 由排期反推,曲线在排期那天正好落到 90%)。横轴固定 30 天,所以「稳的卡是近乎水平的线、刚忘过的卡往下掉」是可比的,一眼挑出最脆的那张 |
| 到期预报 | 未来 7 天每天要过几张(逾期并进今天),用来把复习量摊平,避免某天堆成一堵墙 |
| 今日建议 | 在到期队列之上再排一次顺序,写明理由(逾期几天 / 忘过几次 / 难度偏高 / 新卡),并按科目轮换避免连着三张同科。量超过一轮的 1.5 倍时直接劝你顺延,而不是硬扛 |
| 热力图 | GitHub 贡献图那种格子,亮度 = 当天专注分钟数相对每日目标的比例 |
| 周报 | 按周(周一起算)看时长、活跃天数、复习次数与环比,配本周科目分布 |
| 每日复盘 | 一天一条短记录:今天卡在哪、明天第一件事 |
| 番茄钟 | 专注 / 短休 / 长休自动轮换;换面板、刷新、关掉再打开都按绝对截止时间恢复。起钟要报名字(手写的名字优先,其次用挂的卡片标题)。时长除了 25 / 45 / 60 三个预设,还可以自由设定 1–240 分钟 |
| 番茄分布 | 环形饼图,按番茄的名字聚合时长,可切「今天 / 近 30 天」——一眼看出时间花去哪了(番茄ToDo 那张饼的思路)。扇区用 8 色分类色板,段与段之间留缺口 |
| 单词打卡 | 侧栏第二个面板:连续签到、累计天数与时长、累计词数、逐月打卡日历、正在学的词书与今日计划。数据从本机不背单词 App 的 shared_prefs 读,不登录网页端、不回写 App,凭据只留前 10 位 |
| 常驻迷你条 | 右下角一个小胶囊,在对话页也能看见剩余时间、今日进度和到期张数。能拖到任意位置并停在原地(松手不再贴边,只会被收回屏幕内),双击回右下角,也能收起成小圆点 |

界面只消费宿主的 --dsw-alias- / --dsw-static- 主题 token,不覆写任何 token、不写死任何颜色。换主题(含 catppuccin 之类的 remap)它跟着变,明暗两套都成立。

长什么样

工作台(亮色)

工作台(暗色)

两张图是用真实组件与示例数据在无头浏览器里渲染的(同一套代码的明暗两套主题),不是某次实际运行的截屏。

安装

装进某个 DSH profile:

node install.mjs --profile <profile 目录> # 本仓库自带,幂等,会先备份 profile 的 package.json

或者手工:在 profile 目录执行 dsh plugin add dsh-study-desk,再把包名 dsh-study-desk 加进该 profile package.json 的 dsh.profile.bundles 数组。

装完新开一个会话:DSH 的工具表是会话开始时的快照,新增的工具要新会话才会加载。

运行时零依赖,不需要构建,不需要联网。

数据

<DSH_HOME>/study-desk/desk.json —— 纯 JSON,可以直接打开看、手工改、丢进 git 或 Obsidian vault 做版本。

tasks[] 卡片:title / status / subject / note / estimateMin / pinned
+ tags[](标签)+ review{due, intervalDays, ease, reps, lapses}(复习排期)
sessions[] 专注记录:热力图与统计的唯一数据源
reviews[] 复习打分记录:复习完成率的唯一数据源
journal{} 按天(YYYY-MM-DD)的复盘文本
timer 当前番茄钟(绝对截止时间戳) settings 每日目标、专注与休息时长、打卡门槛、复习队列长度、科目表

写入走「临时文件 + rename」原子替换;文件坏了会改名留档,不会清空。

还可以一键导出成 desk.md:按科目分节、- [ ] 表状态、笔记是缩进列表,机器字段放在行尾 注释里(Obsidian 阅读模式不显示)。在 vault 里改完再点「从 Markdown 读回」,按 id 合并而不是覆盖。

让模型直接动手

插件给模型一个 study_desk 工具(11 个 action),所以你可以直接说「今天该复习什么」「这个我忘了」「把第 3 章拉进复习」「帮我记一下今天的复盘」「最近四周学得怎么样」。

| action | 作用 |
| board | 看板全貌:距目标日期、今日进度、进行中、待办、今天该复习什么 |
| add / update / move / remove | 卡片的增改排删(add 支持 tags 与 review) |
| review | 播报今日复习队列;带 grade=again\|good\|easy 打分;带 schedule / due 排期或移出 |
| focus | 起停番茄钟 |
| stats / report | 最近 N 天统计 / 最近 N 周周报 |
| journal | 读最近的复盘;带 text 写入某天 |
| bbdc | 不背单词打卡记录;refresh=true 重新采集,offline=true 只读本机缓存 |

另外每轮对话会往系统提示里注入一小段「距目标几天 / 今天专注多少 / 进行中是什么 / 今天该复习几张 / 昨天卡在哪」,让模型说话时知道你在哪。不想要就在设置页关掉(省一点上下文)。

开发

node --test # 58 个单测:数据层、番茄钟状态机、复习排期、Markdown 往返、打卡桥、迷你条落点、视觉层守卫
node apply-probe.mjs # 离线冒烟:用 stub ctx 把宿主与客户端两侧 apply() 真跑一遍
node install.mjs --check

没有构建步骤:宿主半边(index.js)与客户端半边(client.js)都是手写 ESM。
desk.js / markdown.js / timer.js 是纯函数层,不依赖 DSH 运行时,所以能独立单测。
改完怎么让跑着的 DSH 认、以及三个踩出来的坑与设计约束,都在 AGENTS.md 里。

CI(GitHub Actions)在每次 push / PR 跑单测与冒烟(Node 22、24),并检查 cordis.patch.yml 是可移植的裸包名、代码里没有本机绝对路径。npm 发布是手动触发的 workflow——发出去的版本删不掉,所以不跟 tag 自动联动。该 workflow 走 OIDC trusted publishing(仓库、文件名 release.yml、允许 publish,已在 npm 包设置里登记,认证实测可用);没登记时它会失败在 404 Not Found 上。仓库用 .gitattributes 把换行锁成 LF,保证本机与 CI 打出的包字节一致。细节见 AGENTS.md 的「发版」一节。更新记录见 CHANGELOG.md。

已知限制

- 顶部倒计时与节点(目标名称、日期、名称 起~止 约 的节点列表)在设置页里自己填,留空日期就不显示那一块。默认值是一份 2027 届考研初试的示例,不是硬编码。
- 间隔重复是简化版 SM-2,不是 Anki 的 FSRS;只有三档打分,没有图片 / 音频卡。
- 图表(饼图、热力图、到期预报柱)走宿主 --dsw-static-* 的固定色板,换主题时图表色不跟着翻。看板其余部分仍然完全融入主题;分类色本来就该稳定,但这是一处刻意的取舍。
- 单词打卡的时长有两个来源:App 本地 shared_prefs(躺在虚拟磁盘里,是攒一会儿才写盘的,可能滞后几小时到几天)和服务端实时统计接口。两者取较新的那个;服务端连不上时,面板会直接标出「本地只刷到某一天」。
- 单人单机:没有多设备同步,数据就是本机那一个文件(要同步请自己把这个目录交给 git / Syncthing / iCloud)。
- 只在 Windows 上的 DSH 桌面版实测过。宿主半边是纯 Node,客户端半边依赖 DSH 的槽位机制。

许可

MIT
预览分享卡片长什么样 ↓slow-stack/dsh-study-desk
分享 · DeepSeek Harness Hub
slow-stack/dsh-study-desk

DSHDeepSeek Harness学习工作台插件:Notion 式待办墙 + 按复习时长点亮的学习热力图 +…

这是你的仓库?认领条目

回到顶部