会话内悬浮待办面板,支持服务器端跨设备持久化及会话列表未完成任务图标。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:seeingrain/dsh-session-todos
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
🇬🇧 English: README.en.md
面向 DeepSeek Harness(DSH)的会话内待办事项插件。 在聊天窗口右上角加一个悬浮待办面板,把待办列表存储在服务器端(跨设备同步), 并在左侧会话列表中给还有未完成任务的会话打上一个 🎯 徽章。
尤其适合:一个会话里同时推进好几件事、需要把「还没做完的事」一直摆在聊天旁边的 DSH 用户。
纯插件 —— 不改 DSH 任何源码。

功能特性
- 右上角悬浮待办面板:展开时浮在对话区右上角,可收起成一个 🎯 图标,带滑入/滑出动画。
- 任务行
- 勾选框 —— 勾选/取消即时保存
- 多行文字 —— 长任务自动折行;双击原地编辑(自动增高的多行
<textarea>);Enter提交,Shift+Enter换行 - 推送到发送框 —— 把任务文本追加到消息输入框
- 删除 —— 带确认弹窗
- 长按拖动排序 —— 被拖行跟手移动、实时预览落点
- 标题栏:🎯 图标 +
done/total计数(如2/4)。 - 移动端友好 / 全平台自动收起 —— 点面板外任意处即自动收起;点标题栏 📌 钉住后不再自动收起。
- 推完自动收起 —— 点任务行的 ⏎ 发送(推到消息发送框)后,任务文字变绿,面板随即自动消失让位给消息框;钉住中则先自动取消钉住再收起。
- 服务器端跨端存储 —— 每会话一个 JSON 文件,位于
~/.dsh/dsh-session-todos/, 任意设备登录同一 DSH 都能读到同一份列表。 - 会话列表徽章 —— 有未完成待办的会话在侧边栏左侧显示 🎯,随勾选即时出现/消失。
要求
- DeepSeek Harness(DSH)Web 端 —— 本插件为 bundle 插件(host + client 两半)。
安装
# 本地路径(你 clone/放置该仓库的位置)
dshpm install /绝对路径/to/dsh-session-todos --profile web
# 或从 git 地址安装:
# dshpm install https://github.com/seeingrain/dsh-session-todos.git --profile web
安装后重启 dsh-web,或强刷浏览器(Ctrl+Shift+R)。
使用
打开一个会话,点击聊天窗口右上角的 🎯 展开面板。
- 底部 + 新建任务。
- 双击任务文字进入编辑(出现多行 textarea,随内容增高);
Enter保存、Esc取消、Shift+Enter换行。 - 勾选框标记完成(文字置灰、按钮禁用)。
- ↗ 把任务文本追加到消息发送框。
- 🗑 删除(有确认弹窗)。
- 长按任务文字后上下拖动排序,松手提交。
- 📌 钉住 / 取消钉住:钉住时面板不因"点面板外"收起,一直保持展开(刷新/切会话也保持); 但点任务行 ⏎ 推送(成功、文字变绿)时仍会自动取消钉住并收起。
- 未钉住时:点面板外任意处自动收起(鼠标、触屏都一样)。
- 电脑端
Esc收起:面板展开时按Esc即收起(钉住中会先自动取消钉住)。 调色板开着时第一下Esc只关调色板、第二下才收起面板;焦点在输入框里时 (编辑任务 / 发送框打字)Esc不接管,编辑框里先Esc取消编辑、再按一次才收起。 - 推完自动收起:点任务行 ⏎ 发送 把任务推进消息框成功后,面板自动收起, 让你直接看到输入框里的任务文字、顺手发送。
- 触屏设备还可以向右滑动手势收起面板。
实现原理
插件分 host 与 client 两半,均为独立自包含。
Host 半边(lib/index.js)
在 DSH 的 webServer 上注册路由,并把待办持久化为 JSON 文件:
POST /dsh-session-todos/api/get——{ sessionId }→{ tasks }POST /dsh-session-todos/api/save——{ sessionId, tasks }→ 保存并返回规范化列表POST /dsh-session-todos/api/summary—— 返回{ sessions: [{ sessionId, hasUnfinished }] }
存储目录:~/.dsh/dsh-session-todos/<sessionId>.json(首次写入时创建)。
Client 半边(lib/client.js)
- 悬浮面板挂在
shell.overlay插槽,锚定聊天区[data-conversation-scroll]。 - 推送任务到发送框使用官方输入门面(
conversation.input→setDraft),追加到已有草稿。 - 会话列表徽章不改 DSH 源码:用
[role="treeitem"]定位会话行,从 React 18 fiber 读取每个会话的 id,再按待办状态注入/移除 🎯 徽章。若 fiber 结构未来改变,会优雅降级 (徽章不渲染,其余功能不受影响)。
存储结构
{
"version": 1,
"sessionId": "session-…",
"updatedAt": 1787992050268,
"tasks": [
{ "id": "t-…", "text": "…", "done": false, "createdAt": 1787992050268, "updatedAt": 1787992050268 }
]
}
说明与限制
- 面板收起/展开状态存
localStorage(按会话各一条);📌 钉住状态存localStorage(全局一条;推完自动收起时会写回"未钉住")。 两者都只存在浏览器本地,不同步到其它设备。 - 会话行徽章依赖 React 18 内部 fiber;未来 React/DSH 大版本升级后可能需要重新验证 (只会优雅降级,不会报错)。
- 存储路径位于 DSH 主目录(
~/.dsh)。
许可证
链接
同类插件
Minglink/dsh-infinite-gen-4★ 3055
DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
ranxianglei/billion-context★ 1893
billion-context官方版:上下文压缩插件,兼顾小窗口(100k上下文足矣)省token(省5倍token)和超长会话(数月级别几十亿token单会话)。
liangmianya/dsh-synapse★ 538
DeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
Nwflower/dsh-chat-import★ 238
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。
MichengAI/dsh-archive-manager★ 171
在设置里增加已归档会话页,可按工作区搜索、恢复和删除已归档会话。
Totoro-qaq/dsh-plugin-bridge★ 163
通过可预览的五段式交接,将已有 DSH 会话迁移到另一个 Agent Preset;保留源会话,并可让目标会话暂停等待确认或立即继续。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。