DeepSeek Harness Plugin

g-yixuan/dsh-sidenote

Stars ★ 12 Downloads (30d) 3,391 Category UI Enhancements Added 2026-08-29 npm dsh-sidenote

Codex-style side chat + selection annotations for DSH web.

Install

# from npm (prebuilt)

dsh plugin --profile web add dsh-sidenote

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

dsh plugin --profile web add github:g-yixuan/dsh-sidenote

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

Demo: annotate a selection → dig in the side chat → reflow the answer home

Install

dsh plugin --profile web add dsh-sidenote

One step, no prerequisites. Then click "Side" in the session header, or just select any reply text.

For local development, mount with dsh plugin --profile web add link:<repo path> (client changes hot-reload; host changes need a dsh web restart).

Side chat — side questions never derail the main thread

Fork the current session (full history snapshot, no compression) into an independent side session living in the right-hand panel:

  • Three entries — the header "Side" button, the right-sidebar guide, and the /side slash command;
  • The same rendering material as the main chat: tool cards, thinking previews, task cards, model/permission switching, @ references, image attachments;
  • Answer approvals and questions right inside the panel — no jumping back to the main view; a toast lets you know when a reply lands;
  • Inherited history folds into a summary card; fold and scroll state survive reloads; Alt+J hops focus between main and side.

The side chat panel: forked history + native-grade tool cards + a full-capability composer

Selection annotations — turn "this bit is off" into model context

  • Select text in an assistant reply → popover → note editor, with numbered badges anchored at the right gutter;
  • Adding to the main conversation or a side chat saves the same controlled annotation object, with shared chip previews, individual removal and clear-all. Quotes and notes stay complete, with zero draft pollution; quote-only messages are supported;
  • Click outside a new note editor or press Enter to save; Escape cancels. Main-to-side waits for the chosen tab’s actual child session. Escape cancels that wait; a failed handoff keeps the note open for retry;
  • Submissions use the host’s native input, retaining @ references, image attachments and queue/steer arbitration. Only a durable message or authoritative queue occurrence in the target session marks that batch as sent and produces the annotated trace label;
  • Saved annotations are isolated by target session. A storage warning explains memory-only operation when persistence is unavailable. Failures retain quotes and body; additions or edits during admission stay active for the next message.
  • Side assistant bodies support local selections, paragraphs, lists and code. Their single action adds to that side chat, including selections in inherited history. Streaming replies, cross-message selections, reasoning and controls are excluded. Badges and highlights stay within the source transcript; folding the source keeps its quotes in the chip.
  • Saved annotations survive reload. When the host restores a native tab, it rebinds the original child. If the sidebar is not restored, use Reopen in /side to recover that child and its annotations. A new fork has its own independent annotation list.
Selection popover Annotation editor
Selection popover Annotation editor

Reflow — side-lane findings come home

  • One click sends a side-chat conclusion back to the main session as a Q&A pair (the answer and the question it answers) — a controlled chip above the main composer that rides along with your next message; @-mentioning a side chat works too;
  • "Save as session" promotes a side chat into the session list; recently closed ones reopen from the /side popup.

Reflow chip: a side-chat finding parked above the main composer

Collapsed state (inherited-history card + action row) Side slash menu
Collapsed state Slash menu
Badge + annotation chip Sent-message trace
Badge and chip Sent trace

Compatibility

Exact combinations are listed in the compatibility policy: 0.1.7 is maintained, 0.1.5 has extended maintenance, three 0.1.1/0.1.2 legacy combinations are frozen with required validation, and the exact 0.2.0-rc.2 release has been admitted to maintained support. Unlisted combinations are unverified; engine ranges do not imply that every version inside them is supported.

The header's Compatibility status can inspect, recheck and export current integration state. Waiting services do not mean incompatibility. Restricted operations retain body, attachments and quotes. Unreadable host versions stay unknown; exports exclude user text, credentials and local paths.

Native hosting needs no BS; legacy hosts need their listed BS combination. Native page kinds allow one tab per pane, with multiple panes through splitting. Normal entries focus an existing tab; after closing, /side reopens the original child. Other BS coexistence combinations and future multiple behavior require independent validation.

Design notes

  • A real fork, not a summary: the side session is a genuine DSH session (full history snapshot) with the same capabilities as the main one — not a one-shot Q&A.
  • List hygiene: side sessions are archived out of the session list; your list stays clean.
  • An accumulative annotation workflow: select repeatedly, stack notes, edit, remove, send them together — not a one-off quote.

Development

Command What it does
pnpm typecheck tsc --noEmit
pnpm test vitest unit tests (run build first)
pnpm build type declarations + tsdown (host ESM + client CJS bundle, purity gates)
pnpm test:mount real dsh web + seeded session + Playwright mounting and interaction checks (BS_VERSION/DSH_CMD version matrix)

Contributing

Bug reports, feature ideas, reproductions, documentation, and code are welcome. Start with the issue chooser or contributing guide. English and Chinese are both welcome.

Maintainers: see repository maintenance and the release guide.

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.