npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-selection-actions

v0.1.0

Published

DSH Web GUI plugin: add a selected conversation fragment to the current chat as a citation, or open it in a parallel side chat.

Downloads

440

Readme

dsh-selection-actions

npm license

A DeepSeek Harness Web GUI plugin: select any fragment of a conversation and turn it into a citation in the message you are about to send — or open it in a parallel chat.

English | Русский

What it does

  1. Selection toolbar. Select text in the conversation and a small toolbar appears next to the selection: Add to chat and Add in side chat.
  2. Add to chat stages the fragment in the current composer. The draft shows a compact N conversation selections strip with a remove control; hovering it slides out the staged citations. When you send, each fragment becomes a blockquote in the prompt — the model reads it as quoted context.
  3. Sent citations render as cards. The transcript replaces the raw > … block with a card (quote glyph, excerpt, “Quote from the conversation”), so neither you nor the model sees a wall of markdown.
  4. Add in side chat forks the current Session, opens the copy in the right Sidebar as a parallel chat and stages the same citation there, so follow-up questions do not pollute the main thread.

Install

The plugin is a bundle: the Host half is empty, everything lives in the Web client. Install it with the harness plugin manager, from this checkout or straight from GitHub:

# from npm
dsh plugin --profile <profile> add dsh-selection-actions

# from a local checkout
dsh plugin --profile <profile> add /path/to/dsh-selection-actions

# from this repository
dsh plugin --profile <profile> add https://github.com/ccclosed/dsh-selection-actions

Then reload the Web GUI page. It is a per-profile installation and survives restarts.

Install from the plugin market (no npm account, one URL)

The repository ships a format-1 market index, so the plugin installs from a pinned commit without npm. Add this URL under Settings → Plugins → Discover → index sources:

https://raw.githubusercontent.com/ccclosed/dsh-selection-actions/main/market.json

The version it lists installs as git+https://github.com/ccclosed/dsh-selection-actions.git#<commit>, so an install is always reproducible.

How it works

  • client.js — the whole plugin (Web client half, window.__ModuleLoader__ module):
    • shell.overlay — the floating toolbar next to a selection;
    • conversation.input.dock — the citation strip above the composer card;
    • conversation.input.overlay / host slots — not used; the strip lives in the dock seat because that seat renders reliably while the in-card overlay seat deactivated the entry;
    • ctx.inputTriggers.registerSource — a reference source whose codec.serialize turns a chip into the blockquote that reaches the model;
    • ctx.uiConversation.userText.register + conversation.user.text.node — the transcript card renderer.
  • index.js — empty Host half (apply() {}), so there is no Config and no Host-side settings.
  • locale/en.json, locale/ru.json — only meta (title and description for the plugins list). Button labels, counter forms and tooltips are registered by client.js itself for both languages.

Known limitations

  • The citation strip is attached to the composer card from the dock seat (see above) and overlaps its top edge by a few pixels rather than being a child of the card.
  • The remove control clears this plugin’s citations only when the draft holds no foreign reference chips.
  • Add in side chat reuses the shipped subagentchat Sidebar tab, so the tab title falls back to the fork’s Session id when the Session has no projected title yet.

License

MIT — see LICENSE.


Русский

Плагин для веб-GUI DeepSeek Harness: выделяешь фрагмент переписки и превращаешь его в цитату в отправляемом сообщении либо открываешь его в параллельном чате.

  • Add to chat — фрагмент попадает в композер текущего чата. Над полем появляется плашка N conversation selections: по наведению из неё выезжают добавленные цитаты, крестик убирает их. При отправке каждый фрагмент становится блокквотом в запросе — модель читает его как цитируемый контекст.
  • Отправленная цитата рисуется карточкой (кавычка, фрагмент, подпись «Цитата из переписки»), а не сырым > … текстом.
  • Add in side chat — форк текущей сессии открывается отдельной вкладкой в правой панели, туда же подставляется цитата; основная ветка не засоряется.

Установка: dsh plugin --profile <профиль> add /путь/к/dsh-selection-actions, затем перезагрузить страницу. Host-половина пустая, настроек нет; вся логика в client.js.