DeepSeek Harness(DSH)adopts a plugin architecture and is highly extensible. However, in actual use, if multiple tasks are being advanced simultaneously within a single session, it is easy to lose track of progress. dsh-session-todos addresses this scenario by providing an in-session todo plugin, helping users manage concurrent tasks within one conversation window.

Features

UI and Interaction
- Floating panel: A floating todo panel appears in the top-right corner of the chat window, supporting collapse and slide-in/slide-out animations.
- 📌 Pin: Click the 📌 icon in the panel title bar to pin the panel and prevent it from automatically collapsing.
- Mobile adaptation: Tapping any area outside the panel automatically collapses it, and gesture operation is supported.

Task Operations
- Check to save: Checking a task line immediately saves the state, and the text turns gray.
- Edit in place: Double-click the task text to enter multiline editing mode (textarea). Press Enter to save, Esc to cancel, and Shift+Enter to insert a newline.
- Drag to reorder: Long-press the task text and drag it up or down to change its order, with a real-time drop-position preview. Release to commit.
- Append to composer: Click the ↗ icon on a task line to append the task text to the message composer.
- Delete: Deleting tasks is supported, with a confirmation dialog.

Data and Synchronization
- Server-side storage: Task data is stored on the server, with files located at ~/.dsh/dsh-session-todos/<sessionId>.json. Logging into the same DSH environment from different devices can synchronize the data.
- Sidebar badge: In the session list on the left, sessions with unfinished tasks display a 🎯 badge.

Installation and Enablement

This plugin is a bundle plugin consisting of two parts, Host and Client, and requires a DSH Web environment.

dshpm install https://github.com/seeingrain/dsh-session-todos.git --profile web

After installation, restart dsh-web or force-refresh the browser (Ctrl+Shift+R).

Usage

  1. Open any session and click the 🎯 icon in the top-right corner of the chat window to expand the panel.
  2. Click the + button at the bottom to create a new task.
  3. Double-click the task text to edit it.
  4. Long-press the task text and drag it up or down to reorder it.
  5. Click 📌 to pin the panel, preventing it from automatically collapsing when clicking outside.

Implementation and Limitations

  • Architecture: The plugin consists of two parts, Host (lib/index.js) and Client (lib/client.js). Both are independent and self-contained, and do not modify the DSH source code.
  • Storage: The Host part registers routes in webServer and persists tasks as JSON files; the Client part mounts the panel into the shell.overlay slot.
  • Dependencies: The session-list badge depends on the React 18 fiber structure. If an upgrade to DSH or React changes the structure, the plugin degrades gracefully (the badge is not displayed).
  • Local state: The panel’s expanded/collapsed state and pin state are stored in the browser’s localStorage and are not synchronized to other devices with server-side data.

Summary

dsh-session-todos provides a lightweight solution for managing tasks within a session. It uses server-side storage to ensure data synchronization and provides intuitive progress feedback through the floating panel and sidebar badge. It is suitable for DSH users who need to manage multiple task flows in the same conversation.