Skip to content

Releases

v0.8.1 · 修掉番茄钟提醒把会话打死的写入

Choose a tag to compare

@modusensus modusensus released this 05 Nov 02:49
2f7b672

番茄钟走完的自动提醒会把整个会话打成跑不起来 —— 修掉那条写入。

症状

番茄钟时间走完的那一刻,起钟的那个会话忽然任何回复都发不出去,一直显示:

format v4 message requires a producer-owned source kind

会话历史是完整的、文件也没坏,但之后每一轮都撞同一堵墙。

根因

走完钟时插件用 agent.followup() 往起钟会话塞一条提醒,source 写成
{ kind: 'plugin', plugin: 'dsh-study-desk', … }。

宿主会话格式 v4 把「kind 一律写 plugin、只靠 plugin 字段认来源」判为退役语法,
准入时直接抛错;而 followup 的消息会原样落进 agent/inbox/spliced.data.inserted[],
于是整条事件被拒——写入侧永久失败。

改法

kind 改成生产者自己命名的 plugin:dsh-study-desk:

  • index.js 新增 MESSAGE_SOURCE_KIND 与 timerEndSource(at),提醒一律从工厂出,不再手写字面量
  • 新增 test/message-source.test.js(4 条):kind 取值、能过宿主同款准入、at 每次新对象、
    静态扫禁止裸 kind: 'plugin' 回潮(带注释遮罩,讲旧写法的注释不算违规)
  • apply-probe.mjs 端到端断言同步到新 kind
  • 单测 73 → 78

验证

  • node --test:78/78 通过
  • node apply-probe.mjs:端到端全通过
  • 变异自证三次:把 source 改回裸 kind: 'plugin',静态扫与端到端各自变红;还原后全绿
  • 实机确认:重启后插件 /api 返回 0.8.1,原会话可继续对话

v0.8.0 · 督促链路 + 每日计划表

Choose a tag to compare

@modusensus modusensus released this 05 Nov 00:43

v0.8.0

AI 把督促链路接上了:AI 起番茄钟必须先落卡、走完自动提醒开钟的那个会话;新增每日计划表,模型从系统提示里就知道「现在该做什么」。看板补上过卡模式、卡片截止日期与一批顺手的升级。

  • AI 起番茄钟走门禁:工具 focus 起钟必须挂一张「进行中」的卡,否则拒绝并教完整流程(add 建卡 → move 到 doing → focus 挂卡);客户端手动起钟不受限。
  • 番茄钟走完,提醒发回起钟的会话:agents.get(sessionId).followup 唤醒那个会话,空闲就开新一轮、跑着就排下一轮;手动停钟永不提醒;设置页可关(默认开)。
  • 每日计划表:HH:MM~HH:MM 事情 【科目】 每日模板——主面板分区(当前时段高亮 + 剩余分钟)、系统提示注入「现在按计划该做什么 / 下一场」、可悬浮在桌面(坑位规矩照抄迷你条)。「启用」与「悬浮」各自独立开关。
  • 过卡模式:全屏单卡复习,空格翻备注、1/2/3 打分、→ 跳过;行级「缓一天」;队列键直评队首。
  • 卡片截止日期:@YYYY-MM-DD 语法、⏰ 徽章、工具参数、Markdown ddl 字段往返。
  • 热力图点格子看当天明细 · 复制周报(weekly.text op)· 复盘 2 秒自动落盘 · 科目编辑器 · 快捷键(/ 搜索、n 新建)· 视觉与图标一批(绿族投入条、饼图 8 色宿主色板、品牌番茄 icon、侧栏两枚重画)。

发布走 Trusted Publisher(OIDC),provenance 已进 transparency log:sigstore 链接。

v0.7.0:修三个会静默报错数的坑,界面重排,番茄钟可自由设时长

Choose a tag to compare

@modusensus modusensus released this 20 Oct 19:06

这一版修的是三个「数字看着正常、其实是错的」,另外把界面按番茄ToDo 的调性重排了一遍。

修复

  • 悬浮迷你条拖不动、也点不动:Windows 宿主在窗口顶部画了一条满宽 40px 的
    -webkit-app-region: drag 带。这条带上的鼠标按下被拿去做窗口拖拽,DOM 收不到事件;
    而 app-region 让洞不看层叠顺序,z-index:900 救不了它。偏偏唯一能逃出来的两个手势
    (拖走、双击回右下角)本身也需要点击,落点又存在 localStorage —— 重载也还是坏的,
    看着像代码坏了。现在两个浮层都声明 no-drag,并且落点被钳制在那条带之下。
  • 单词打卡的今日 / 累计时长偏小:本地那份数据躺在 Androws 虚拟磁盘里、攒一会儿才刷盘,
    实测滞后过好几天(原先的取舍是「有本地就用本地」,落后的本地数每次都赢)。改成两边取较新的:
    累计只增不减,取较大即取较新;「今日」每天归零、不能取大(过零点时本地和云端都还挂着前一天的数),
    有云端那一行就用云端。分与秒改为同源,因为它们会被拼进注入给模型的摘要里。
    连不上服务端时,面板会直接标出「本地只刷到某一天」。
  • 图表不再掉成一片灰:--dsw-alias-brand-primary 在默认主题里其实是近黑,拿语义色当饼图色板
    会得到「五个 tone 里三个是灰的」。饼图换成八色 --dsw-static-* 分类色板 + color-mix 补齐,
    扇区之间留一条与卡底同色的缺口;热力图 / 周报 / 顶部今日进度走绿色阶(已经投入的分钟数),
    「未来 7 天到期」走琥珀、今天那一根转红(欠着的债)。计时器那条进度条语义不同,保持品牌色。

新增

  • 番茄钟可以自由设定 1–240 分钟(原来只有 25 / 45 / 60 三个预设)。闲置时字面直接显示这一段多长
    —— 自由值否则没有任何反馈途径,分不清到底写进去没有。

界面排版

十几个散档字号(含 9.5 / 10.5 / 11.5 / 12.5 四个半像素,会有亚像素模糊)收进一条八档阶梯;
标题从衬线换成宿主默认 sans,大数字走品牌字体、倒计时仍用等宽;卡片圆角与阴影分成两档;
间距统一到 4 的倍数;分区标题和看板列头不再画分隔线。

一处刻意取舍

图表分类色不随明暗主题翻转(宿主浅深两套主题给的是同一份色值)。分类色要稳定才有诊断价值,
看板其余部分仍然完全跟着主题走。

工程

node --test 从 48 条涨到 58 条,其中六条是新加的视觉层守卫:CSS 里 hex 必须为 0、
不许出现零点几像素的字号、饼图不许退回语义色、字阶必须挂在各个根上(迷你条是 portal 到 body 的,
漏挂会静默丢字号)。另外换行用 .gitattributes 锁成 LF,AGENTS.md 补了三条踩出来的坑。

v0.6.1 — 迷你条去掉吸附,番茄饼图与单词打卡

Choose a tag to compare

@modusensus modusensus released this 18 Oct 02:30

番茄钟从「只知道今天学了几分钟」变成「知道时间花去哪了」,迷你条也终于能停在你想放的地方。

高亮

  • 迷你条不再吸附:以前松手必然被拍成左右边距,中间值不可能存在;现在拖到哪就停在哪,只做视口钳制(防拖出屏幕丢钟),落点照常记忆。顺带补了指针被弹窗抢走时的脏拖拽态兜底。
  • 番茄分布饼图:按番茄的名字聚合专注时长,可切「今天 / 近 30 天」。起钟要报名字(手写名 > 挂的卡片标题 > 兜底),名字就是饼图的图例。
  • 单词打卡面板:把不背单词的打卡记录接进侧栏第二个面板——连续签到、累计天数与时长、累计词数、逐月日历、正在学的词书。数据从本机 App 的 shared_prefs 读,不登录网页端、不回写 App,凭据只留前 10 位。
  • 复习不再被一刀切:卡片可内联编辑(标题 / 科目 / 预计分钟 / 备注);复习开关不再清空难度、遍数、遗忘次数。
  • 「结束这一段」真的记账:以前发 timer.reset,专注 20 分钟点结束记 0 分钟;现在按实际时长落一条 session(「放弃」仍不记账)。

v0.4.0 遗忘曲线与复习调度

  • 每张到期卡带一条迷你记忆曲线 + 「记忆 N%」(R(t) = e^(-t/S),曲线在排期那天正好落到 90%),横轴固定 30 天,稳的卡近乎水平、刚忘过的卡往下掉,一眼挑出最脆的那张。
  • 未来 7 天到期预报,把复习量摊平。
  • 今日建议:在到期队列之上再排一次顺序,写明理由(逾期几天 / 忘过几次 / 难度偏高 / 新卡),并按科目轮换避免连着三张同科;量超过一轮的 1.5 倍时直接劝你顺延。

修复

  • 复习开关清空 SM-2 历史(reps / ease / lapses 被 emptyReview() 抹掉)。
  • CI 的 total files 断言改成按 package.json 的 files 白名单逐个核对,不再因为多一个源文件就红。

测试

48 个单测(数据层、番茄钟状态机、复习排期、遗忘曲线/预报/建议、Markdown 往返、不背单词 prefs 解析)+ 离线冒烟 apply-probe.mjs,全绿。运行时零依赖,不需要构建,不需要联网。

安装:在 DSH profile 目录执行 dsh plugin add dsh-study-desk,再把包名加进该 profile package.json 的 dsh.profile.bundles 数组。装完新开一个会话。

npm 上已可安装:npm i dsh-study-desk@0.6.1

v0.2.0 · 复习队列 + 标签过滤 + 周报 + 每日复盘 + Markdown

Choose a tag to compare

@modusensus modusensus released this 08 Oct 19:09

v0.2.0

面向备考与学术人群补齐了「复习」这条主线,并把数据接进了 Markdown 生态。

  • 间隔重复复习队列:卡片带 review{due, intervalDays, ease, reps, lapses},
    用「忘了 / 记得 / 很简单」三档打分推进排期(简化版 SM-2)。已完成的卡照样会到期。
    工作台顶部有今日队列,卡片右下角 ↻ 拉进或移出,设置页可调每次摆几张。
  • 标签与过滤:卡片带 tags[],新建时写 #名词解释 就地打标;看板顶部可搜、
    按科目、按标签、只看到期,列头显示「符合/总数」。
  • 周报:按周(周一起)统计时长、活跃天数、复习次数与环比,配本周科目分布。
  • 每日复盘:journal{} 按天存一条短记录,会随摘要进系统提示。
  • Markdown 导出 / 读回:生成 Obsidian 友好的 desk.md(科目分节 + 复选框 +
    行尾 HTML 注释存机器字段),读回按 id 合并而不是覆盖。
  • study_desk 工具从 7 个 action 扩到 10 个(新增 review / journal / report),
    add/update 认 tags 与 review。
  • 修:工作台面板自己出滚动容器(宿主中心列是 overflow:hidden 的 flex 列,
    原先下半截永远看不见);常驻迷你条 portal 到 document.body(宿主 shell.overlay
    是 z-index:20 的独立层叠上下文,原先被页面级浮层盖住导致点不动、拖不动)。
  • 老 desk.json 无需迁移,读入时自动补齐新字段。
  • CI:GitHub Actions 跑单测与离线冒烟(Node 22 / 24),外加一条
    「cordis.patch.yml 必须是裸包名、代码里不许有本机路径」的可移植性检查。
  • npm 发布改成手动触发的 workflow(发出去的版本删不掉,不跟 tag 自动联动)。

npm 上已可安装:npm i dsh-study-desk(v0.2.0 已发布,latest 指向它)。
装进 DSH:dsh plugin add dsh-study-desk,或在本仓库跑 node install.mjs --profile <profile 目录>。