Vai al contenuto principale
Z

dsh-matrix-todo

zhang-eli/dsh-matrix-todo

An Eisenhower-matrix to-do panel for the DSH sidebar: importance × urgency quadrants that fill the panel, inline quick-add with a hand-drawn due-date calendar, drag to reorder or move between quadrants, a draggable center handle for quadrant proportions, one-click switch to the completed view, and random encouragement toasts that tell praised on-time finishes apart from overdue ones. Minimal styling uses only DSH theme tokens; bilingual UI.

Installazione

dsh plugin --profile web add github:zhang-eli/dsh-matrix-todo

README

四象限待办 · dsh-matrix-todo

DeepSeek Harness 的侧栏待办插件:主界面是艾森豪威尔矩阵(重要 × 紧急四个象限),可一键切换到「已完成」;数据与界面设置写入本机 profile 下的一个 JSON 文件。

  • 侧边栏新增入口「四象限待办」,排在自带「待办」之后
  • 首次打开且清单为空时,自动写入一组本地化引导条目(覆盖四个象限、逾期变色与日期面板);删掉后不会再出现
  • 矩阵视图:立即做 / 计划做 / 委托做 / 别做,四个象限自动撑满面板、各自计数
  • 拖动四象限中心的圆点即可调整行/列比例,双击圆点恢复均分
  • 每个象限都能直接点击空白处或底部「+ 添加」就地新增,可为该条设置截止日期
  • 到期日临期/逾期会在行内变色标识,逾期标题转为警示色
  • 拖动任意待办可在象限内上下排序,或直接拖到另一个象限
  • 双击待办文字即可就地重写标题,回车保存、Esc 取消
  • 完成一项时在插件面板正中(不含左侧边栏)弹出随机鼓励浮窗(中英各 8 条,避免连续重复)
  • 顶部一键切换「四象限 ↔ 已完成」,已完成项可恢复或删除,清空需二次确认
  • 齿轮设置:紧急列在左 / 在右、边框风格(卡片 / 田字格 / 十字线)、象限底色(纯色 / 淡彩)、圆角幅度、待办字号、文字显示、日期显示、侧栏名称、恢复默认
  • 设置面板底部有一条链接行:左侧「反馈问题」,右侧是带头像的「Developed by Zhang-Eli」(都在系统浏览器中打开)
  • 极简风:界面颜色只用 --dsw-alias-* 主题 token(淡彩底色由 token 混出),跟随明暗外观与配色风格
  • 界面文案中英双语,跟随 Harness 语言设置

安装

从 npm 安装(推荐):

dsh plugin --profile desktop add dsh-matrix-todo

或在 Harness 里用插件管理工具安装:

plugin_manager install_bundle  target: dsh-matrix-todo

从本仓库目录安装(开发用,改 client.js 由 HMR 即时生效):

plugin_manager install_bundle  target: <本目录绝对路径>

安装后侧边栏出现「四象限待办」,点击即打开矩阵面板。

使用

新增

  • 点击象限空白处,或点象限底部「+ 添加」,输入标题后回车;连续回车可连续添加,Esc 退出。
  • 新增项直接使用该象限的重要/紧急标记,不需要先选分类。
  • 新增区右侧的日历按钮打开日期面板:
    • 单击某天只预览/改选,面板保持打开,可以反复点选;
    • 双击某天即确定截止日期,面板关闭并自动把这条待办加入该象限;
    • 面板里还能切换月份、选「今天」、或「清除」已选日期。
  • 也可以只单击选好日期后按回车提交,效果相同(带上该日期)。

到期标识

  • 到期日 = 今天的待办,日期文字用警示色加粗;已过期则日期变红、标题也转红。
  • 日期固定在每行最右侧,两种显示方式可在设置里切换:日期(如 11-11)或倒计时(如 7d、0d、-3d)。
  • 点日期本身会打开同一个自绘日历:单击预览、双击确认保存;「清除」可去掉日期。还没设日期的行,悬浮工具条里会出现日历按钮作为入口。

拖拽排序 / 跨象限

  • 按住任意待办行上下拖动,出现蓝色插入线时松手即完成排序。
  • 拖到另一个象限的列表里松手,该条会连同「重要 / 紧急」标记一起移过去,并落在外框高亮的目标象限。
  • 顺序会持久保存;一旦手动排过序,之后新增的待办仍排在该象限最前面。

完成反馈

完成一项时会在插件面板正中(右侧主面板区域,不含左侧边栏)弹出一个小浮窗,按是否按期分成两类语气:

情况弹窗内容图标
按期完成(当天或提前完成,或未设日期)表扬,「Well done! 按期完成」「漂亮,正好赶上」等成功色对勾
逾期完成(完成时截止日期已过)勉励,「完成了就好,下次早点开始」「逾期也完成了,值得肯定」等品牌色箭头

中英各 8 条,同类内随机且不会连续重复;约 2.6 秒后自动消失,不拦截鼠标操作。取消完成/恢复不会触发。

双击编辑

  • 双击任意待办的文字即进入就地编辑,输入框带下划线提示。
  • 回车或点击别处保存,Esc 取消;标题去空白后为空(或没有改动)则视为放弃修改。

整理

  • 勾选复选框 → 完成,移入「已完成」;「已完成」里的复选框可恢复。
  • 行内悬浮(或键盘聚焦)出现小按钮:改「重要」、改「紧急」、设日期、删除;改标记会即时在象限间移动。
  • 「清空已完成」点一次变成「确认清空」,再点一次才真正清除(3 秒后自动退回)。

设置

点右上角齿轮展开设置,修改即时生效并自动保存:

设置项取值说明
紧急方向在左 / 在右「紧急」列放在矩阵左侧或右侧;默认在右
边框风格卡片 / 田字格 / 十字线卡片=四个圆角框;田字格=外框 + 中间十字线;十字线=只有中间十字、无外框;默认十字线
象限底色纯色 / 淡彩淡彩用低饱和主题色给四个象限分别铺一层很淡的底色;默认纯色
圆角幅度0–24px(步长 2)卡片风格作用于每个象限框,田字格/十字线风格作用于外框;默认 10px
字号11–17px(步长 1)待办标题与象限内输入框的字号;默认 14px
文字显示完整换行 / 单行截断完整换行时内容全部展示;单行截断时超长内容以省略号收尾;默认完整换行
侧边栏名称0–24 字自定义左侧入口显示的文字,留空则用默认的「四象限待办」
日期显示日期 / 倒计时日期显示 11-11;倒计时显示距今天数 7d、0d、逾期 -3d;默认倒计时
恢复默认按钮立即回到 紧急在右 / 十字线 / 纯色 / 10px / 14px / 完整换行 / 倒计时 / 均分

象限大小

鼠标移动到矩阵中心附近(约 56px 内)才会浮出一个小圆点,避免平时干扰视线。按住圆点拖动即可实时调整四象限的行列比例(左右各 20%–80%),松手自动保存。

拖动过程中会出现一个默认等分参考标记——正中央一段两端渐隐的短十字线与一个实心圆点;把圆点拖到它附近会自动吸附回正中间(吸附时参考标记与圆点都会高亮),方便一键恢复等分。双击圆点也能直接复位。

十字线风格下中间的实际十字线会跟着比例移动。

关于与链接

设置面板最下方有一条链接行,都会用系统默认浏览器打开:

位置内容地址说明
最左反馈问题https://github.com/Zhang-Eli/dsh-matrix-todo/issues提 issue、报告 bug
最右Developed by + 头像 + Zhang-Elihttps://github.com/Zhang-Eli顺序为斜体的「Developed by」、16px 圆形 GitHub 头像、用户名;只有用户名是可点击链接,跳转 GitHub

数据文件

默认 %DSH_PROFILE_DIR%\data\dsh-matrix-todo\todos.json(无 DSH_PROFILE_DIR 时退化为进程工作目录下的同名相对路径)。

{
  "version": 1,
  "todos": [
    {
      "id": "e_m3k2_ab12",
      "title": "交周报",
      "important": true,
      "urgent": false,
      "done": false,
      "dueDate": "2026-11-15",
      "createdAt": "2026-11-09T10:00:00.000Z",
      "updatedAt": "2026-11-09T10:00:00.000Z",
      "completedAt": null
    }
  ],
  "settings": {
    "urgentSide": "right",
    "frame": "cross",
    "radius": 10,
    "tint": "plain",
    "fontSize": 14,
    "dueFormat": "countdown",
    "titleStyle": "wrap",
    "colRatio": 0.5,
    "rowRatio": 0.5,
    "navLabel": ""
  },
  "reordered": false,
  "seeded": true
}

todos 的数组顺序就是同象限内的显示顺序。reordered 为 false 时顺序按创建时间倒序派生(新条目在前);一旦手动拖拽排序,它就变成 true,此后数组顺序即你的顺序。dueDate 为 YYYY-MM-DD 或 null。

seeded 表示首次使用引导只写过一次:面板首次打开且清单为空时,会按当前界面语言向 Host 提交 7 条引导待办,Host 写入后把 seeded 置为 true。之后即使把引导全部删掉,也不会再自动生成。

写盘是「临时文件 + rename」的原子替换,写操作串行排队;文件损坏时会先备份为 todos.corrupt-<时间戳>.json,再以空清单 + 默认设置启动。手改文件里的 settings 非法值会被忽略并回落到默认值。

可在 cordis.patch.yml 的插件行里覆盖路径:

- id: matrix-todo
  config:
    dataPath: 'D:\notes\todos.json'

HTTP 接口(面板自用)

Host 半在 /matrix-todo/api 注册 prefix 路由,只接受 POST,并做同源/回环校验:

方法body说明
list{}取全部待办与设置
seed{ items: [{ title, important, urgent, dueDate? }] }首次使用引导:仅在 seeded 为 false 时写入,幂等
create{ title, important, urgent, dueDate? }新建
update{ id, title?, important?, urgent?, dueDate? }改字段(含象限标记、截止日期;dueDate: null 清除)
toggle{ id }完成 / 恢复
reorder{ id, important?, urgent?, beforeId }拖动结果:移到目标象限并插到 beforeId 之前(null = 末尾)
remove{ id }删除
clearCompleted{}清空已完成
saveSettings{ urgentSide?, frame?, radius?, tint?, fontSize?, dueFormat?, titleStyle?, colRatio?, rowRatio?, navLabel? }合并保存界面设置

成功返回 { ok: true, result: { todos, settings, seeded } };失败返回 { ok: false, error: { code, message } },状态码 invalid-input 400 / not-found 404 / io-error 500。标题去空白后 1–200 字符,清单上限 500 条,圆角 0–24 整数,字号 11–17 整数,dueDate 必须是真实存在的 YYYY-MM-DD 日期。

文件结构

文件作用
package.json包清单:dsh.bundle.patch + dsh.client(web、immediately、locale/sidebar 依赖)
cordis.patch.yml插入插件行 matrix-todo
index.jsHost 半:注册 HTTP 路由,管理 store 生命周期
lib/store.js文件型 store:待办与设置、校验、原子写、备份损坏文件
client.jsClient 半:侧栏入口、矩阵与已完成两个视图、设置面板、全部样式
locale/en.json、locale/zh.json插件管理器的标题/描述
icon.svg插件图标(2×2 矩阵)

已知边界

  • 不提供 agent 工具;待办数据只由面板读写(Harness 已自带 personal_todo 工具,避免重复暴露两套语义)。
  • 没有多选与批量操作;一次拖拽只移动一条,删除也只针对单条。
  • 淡彩底色用 CSS color-mix() 从主题 token 混出;很旧的 Chromium 不支持时自动回落到单色背景。
  • 侧栏图标与面板的视觉细节无法在无浏览器控制的环境里截图验证;本次通过实时插槽注册、接口契约、存储测试与语法/资源检查验证。
  • 改 client.js 由 HMR 自动拾取;改 index.js / lib/store.js(Host 半)需要重启该插件行或重启 Harness。

Plugin correlati