Skip to content
dsh.fish
Bundle

dsh-todo-panel

A persistent to-do panel for DeepSeek Harness: a header toggle opens a floating task panel fed by the todos projection, alongside the stock composer strip

Source
1479650473
License
Apache-2.0
Updated
Updated 17 hours ago

Readme

# dsh-todo-panel

A persistent, toggleable to-do panel for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness): a conversation-header toggle opens a floating task panel fed by the `todos` projection, alongside the stock composer strip.

The stock `conversation.input.dock` to-do strip (mounted by `@deepseek-ai/dsh-client-ui-conversation`) is left untouched — this plugin only adds the persistent floating view, so both surfaces stay in sync off the same projection.

## Features

- **Header toggle** — a checklist button in the conversation header (`conversation.session.header.actions`) flips the panel; its pressed state mirrors the panel.
- **Floating panel** — a fixed-position card over the frame-wide `shell.overlay` slot, with the to-do list, status glyphs, and an open-item count.
- **Same data, no duplication** — the panel reads the `todos` projection from the current session summary; hidden while closed or while the session carries no to-dos.
- **Bilingual** — `zh` / `en` dictionaries on its own `todo-panel` locale namespace.

## Requirements

- DeepSeek Harness `>= 0.1.0-rc.6`, with the to-do capability mounted (`@deepseek-ai/dsh-tool-todo` registers the `todos` projection). To-dos are cleared at the start of each turn, per the stock projection semantics.

## Installation

```sh
dsh plugin add dsh-todo-panel
```

The `dsh.bundle` manifest (`cordis.patch.yml`) mounts the server-side plugin entry and the `dsh.client` declaration injects the browser half immediately (`platform: web`), so a profile restart is enough to enable it.

## Screenshots

(TBD — added after the first tagged release.)

## Development

```sh
npm install        # or pnpm install
npm run typecheck  # tsc --noEmit
npm run test       # vitest (jsdom per-file, __ModuleLoader__ harness)
npm run build      # tsc declarations + esbuild browser bundle → lib/
```

### Architecture

- `src/client/index.ts` — client plugin body: registers the `todo-panel` dictionaries and injects the toggle and the floating panel into their slots.
- `src/client/TodoToggle.tsx` — the header toggle (`conversation.session.header.actions`).
- `src/client/TodoFloatingPanel.tsx` — the floating panel (`shell.overlay`); reads the current session's `projectionValues.todos` because root-scoped entries receive no session framework hooks.
- `src/client/TodoGlyphs.tsx` — status glyphs for the three todo states.
- `src/client/panel-store.ts` — the cross-slot visibility store shared by toggle and panel.
- `src/client/locales.ts` — `zh` / `en` dictionaries.
- `scripts/build.mjs` — esbuild bundle with the harness's `window.__ModuleLoader__.load` wrapper and CSS Modules compiled to an injected `<style>` tag.

## License

Apache-2.0 — see [LICENSE](LICENSE).

Install

dsh plugin --profile web add github:1479650473/dsh-todo-panel

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source