Bundle
@xjwwjx/dsh-conversation-quote
Quote-to-composer UI plugin for DeepSeek Harness Web: select conversation text in the chat and send it together with your next question
- Source
- xjwwjx
- License
- MIT
- Updated
- Updated yesterday
Readme
# dsh-conversation-quote English | [中文](README.zh.md) Quote-to-composer UI plugin: **select conversation text you want to cite — each selection becomes a compact tab above the input, and all of them join your next question when you send.** No model tool, no slash command — a pure browser-side extension of the chat surface. ## What it does 1. Select any text inside a chat message (user, assistant, tool, or injected context) with the mouse. 2. A small **引用 / Quote** pill floats above the selection. 3. Click it: a compact quote tab appears **above the composer card, left-aligned** — `[引用·谁]` plus the first quoted line, fixed size. **Hover a tab to expand the full content** in a popover; the **× in the tab's top-right corner** removes that one quote. Stage as many quotes as you like — each selection adds another tab. The input box itself stays clean for your question: ```text ┌ [引用·用户] > 这段内容需要被引用… ──×─┐ ┌ [引用·模型] > First line… ──×─┐ │ (compact tabs above the input, not in it) │ └──────────────────────────────────────────┘ ``` 4. Type your question in the input and press Enter (or click send): **all staged quotes** join the message as citable blocks, in staging order, attributed to each speaker: ```text [引用·用户] > 这段内容需要被引用 [引用·模型] > First line > Second line ``` The merge happens in the capture phase of the submit gesture — the input never shows the quoted text while you type, and the tabs clear after sending. Shift+Enter (newline) and IME composition pass through untouched. Selection attribution comes from the chat transcript's own DOM markers (`data-chat-flow-kind`), the same ones scroll anchoring uses, so no message renderer is replaced. The floater hides on scroll, empty selection, or a selection made outside chat nodes. ## Mounting The plugin ships in the web profile's browser roster (`dsh.client` row `ui-conversation-quote`). It needs only the slot registry and the locale service, and contributes one list entry to the `conversation.input.dock` seat. Removing the row from `cordis.patch.yml` unmounts it. ## Configuration None — the surface is feature-complete at ship. ## Model Experience None, as the quote floater is pure browser chrome: the quote block becomes ordinary draft text the user types, so it enters model context only as part of a normal user message, with no schema, prompt-section, or request-header change. #### KV Cache effect None; no plugin state touches the history tail or the request prefix. ## Known Limitations and Deferred Work - All staged quotes merge into the draft only at submit. If the send is refused, the merged text remains in the draft as ordinary editable text. - The send-button merge detects the primary button by its aria-label in the two shipped locales; a third locale the harness adds later would need the label added to the match list. - Attribution is by chat node kind (user / assistant / tool / context / chat), not by a stable message id; a quoted line cannot be traced back to a log `seq` from the UI. - The floater targets mouse selection; touch long-press selection is not handled specially.
Install
dsh plugin --profile web add github:xjwwjx/dsh-conversation-quote#3e9f426bfb4ca6ff88ee7cb1881dcb57f52ff152
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install xjwwjx-dsh-conversation-quote from the hub
- 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.