メインコンテンツへスキップ
S

dsh-session-todos

seeingrain/dsh-session-todos

Floating todo panel for DSH sessions with server-side cross-device persistence and pending-task badges in the session list.

インストール

dsh plugin --profile web add github:seeingrain/dsh-session-todos

README

dsh-session-todos

🇬🇧 English: README.en.md

面向 DeepSeek Harness(DSH)的会话内待办事项插件。 在聊天窗口右上角加一个悬浮待办面板,把待办列表存储在服务器端(跨设备同步), 并在左侧会话列表中给还有未完成任务的会话打上一个 🎯 徽章

尤其适合:一个会话里同时推进好几件事、需要把「还没做完的事」一直摆在聊天旁边的 DSH 用户。

纯插件 —— 不改 DSH 任何源码

dsh-session-todos 面板

功能特性

  • 右上角悬浮待办面板:展开时浮在对话区右上角,可收起成一个 🎯 图标,带滑入/滑出动画。
  • 任务行
    • 勾选框 —— 勾选/取消即时保存
    • 多行文字 —— 长任务自动折行;双击原地编辑(自动增高的多行 <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 换行。
  • 勾选框标记完成(文字置灰、按钮禁用)。
  • 把任务文本追加到消息发送框。
  • 🗑 删除(有确认弹窗)。
  • 长按任务文字后上下拖动排序,松手提交。
  • 📌 钉住 / 取消钉住:钉住时面板不自动收起,一直保持展开(刷新/切会话也保持)。
  • 未钉住时:点面板外任意处自动收起(鼠标、触屏都一样)。
  • 触屏设备还可以向右滑动手势收起面板。

实现原理

插件分 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.inputsetDraft),追加到已有草稿。
  • 会话列表徽章不改 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)。

许可证

MIT

関連プラグイン