DeepSeek Harness Plugin

penguin-oo/dsh-bookmarks

Stars ★ 1 Category Sessions & Messages Added 2026-08-14

Bookmark assistant replies with notes and tags; browse every bookmark in one cross-session center and export to Markdown.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:penguin-oo/dsh-bookmarks

GitHub-sourced plugins run build scripts on your machine at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).

README

Bookmark assistant replies in DeepSeek Harness (DSH) Web UI: bookmark any finalized assistant reply with a note and tags, browse every bookmark from every session in one center panel, and export them to Markdown in one click.

中文说明

Features

  • Per-message bookmark — an archive button on each finalized assistant reply (right next to the 👍/👎 feedback buttons), with an inline editor for a note and comma-separated tags.
  • Server-derived snippet — the bookmark stores a text preview of the actual reply, so the center stays useful even without a note.
  • Cross-session center — one panel listing bookmarks from all sessions and workspaces, with full-text search, tag filter, inline editing and deletion.
  • Jump back — every entry opens its session in one click.
  • Markdown export — one click downloads all bookmarks as dsh-bookmarks.md.
  • KeyboardAlt+B toggles the center from anywhere.
  • Safe writes — per-item compare-and-set versions (multi-tab safe), server-side validation, and durable storage via the DSH storage domain.

Install

dsh plugin --profile web add dsh-bookmarks

Then restart DSH (dsh web). The plugin appends itself to the profile bundle layer automatically; nothing else to configure.

For a local checkout:

# from the plugin repo
dsh plugin --profile web add file:./        # relative file spec, anchored to your cwd

Config

The bundle row exposes three limits (all optional):

Key Default Meaning
maxNoteBytes 4096 Max UTF-8 bytes of one note ("" clears a note; omitting the field keeps it).
maxSnippetChars 300 Max characters of the server-derived reply snippet.
maxTags 8 Max tags per bookmark; each tag ≤ 32 chars, trimmed and deduplicated.

Override them in the profile patch layer ($DSH_HOME/profiles/web/cordis.patch.yml):

- id: bookmarks
  config:
    maxNoteBytes: 2048
    maxSnippetChars: 200
    maxTags: 5

How it works

One npm package hosts both halves of the plugin:

  • Host half (lib/index.js) — the bookmarks Remote service (Typert), backed by a storage-domain table ($DSH_HOME/storages/bookmarks.json). put inspects the persisted session log to validate the target reply and derive its snippet, mirrors the official message-feedback durability barrier, and serializes mutations with per-item version tokens.
  • Browser half (src/client, bundled to lib/client.js) — mounts the Remote contribution through ctx.remote.$mount, then registers two UI slots: conversation.chat.assistant-actions (the per-message button) and sidebar.footer.action (the center toggle).

Development

npm install            # zod + esbuild (dev only)
npm run build          # bundles src/client into lib/client.js

lib/client.js is committed and shipped; no build step runs on install.

Limitations

  • Bookmarks are stored in one global row: fine for personal use, not a shared multi-user store.
  • The center panel jumps to the bookmarked session; it does not auto-scroll to the exact message yet.
  • The panel toggle lives in the sidebar footer; use Alt+B when the sidebar is collapsed.

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →