DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Xwide Annotation — DSH Plugin for DeepSeek Harness
← Plugins

dsh-xwide-annotation

Xwide Annotation

DSH Web selection-annotation plugin: select assistant text, annotate (optional), and press Enter to send the annotation block with your message — the model replies to each annotation by number, with hoverable chips in the reply. X-WIDE fork adds a color studio and an annotation outline.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add dsh-xwide-annotation@1.5.6
READMECompatibilityVersions
Plugin screenshotPlugin screenshot
Plugin screenshot
Plugin screenshot

Compatibility and provenance

Xwide Annotation is published as dsh-xwide-annotation and currently resolves to version 1.5.6. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
10/18/2026

Versions

1.5.6stable
10/18/2026
1.5.5stable
10/18/2026
1.5.3stable
10/18/2026

Related plugins

Loading related plugins…

Latest
1.5.6
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
1.1 MB
Files
23
Surface
web
License
MIT
Source
npm
GitHub
★ 0
Weekly downloads
0
Last push
10/18/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

Related plugins

More verified plugins in ui-customization.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profileExperimental Web profile layer for Agent Teams Remote and UI pluginsWhale Widgetdsh-whale-widgetDeepSeek balance whale widget in the bottom-right corner of the DSH Web interface: balance/today’s usage/peak-off-peak pricing, customizable bubble click sequence (text/balance/today/peak-off-peak/image/random phrases and parallel weighted selection), per-line styles and fonts, floating quick editinAb Chartdsh-ab-chartChart rendering tool with the browser card that draws its calls, in one publishable plugin package

README

dsh-xwide-annotation

X-WIDE fork — dsh-xwide-annotation is a derivative of @changfenhuang/dsh-annotation v1.4.11 (by omdsh-dev, MIT), adding the color studio and the annotation outline. Upstream notice and MIT terms are retained verbatim in LICENSE.

📖 Usage guide (with screenshots): docs/USAGE.md · 简体中文:docs/USAGE.zh-CN.md — quick start, outline panel, color studio, self-check pill, FAQ.

English · 简体中文

Selection-annotation plugin for DSH Web: select text → annotate → press Enter to send it along with your message; the model replies to each annotation by number.

🌐 Live Product Site — Explore dsh-annotation in DSH

Current UI (v1.5.6)

Two floating pills: color studio 🎨 and annotation outline 📋

Annotation outline strip — numbered entries per chat

Color studio panel: swatches, custom colors, self-test switch

Self-test badge: pill with live event counter

Self-test details: mount / style / contrast / hit-area numbers

image image image image

Select any text in an assistant reply to annotate it (the annotation body may be left empty = just mark the passage). Annotations accumulate across messages and turns. An Annotations ×N chip appears next to the input box — hover to view all annotations, remove them one by one. Press Enter and the annotation block goes to the model together with whatever question is in the input box. The annotation block never shows up as text in your own message bubble — only the question plus the chip (content visible on hover; hidden before paint, zero flicker). The model replies with Annotation 1: … … Annotation N: …, one per annotation, and every Annotation label in the reply is a hoverable chip showing the annotated passage and your note.

Form: official bundle plugin (dsh.bundle + a dsh.client declaration in package.json, injected into the browser via client-modules; the Node half is an empty implementation). Zero core changes — no DSH files are touched; cordis.patch.yml only inserts its own id once, and the profile patch stays [].

Features

Sidebar file annotations (DSH 0.1.6-alpha.1): select plain text, Markdown, or code in a workspace file preview and use the same annotate, save, and Enter-to-send flow. The editor and model-facing quote include the file path. After reloading and reopening the original file, its markers are restored; identical passages in different files remain separate. PDF, images, and HTML inside iframes are not covered.

FeatureDescription
Select-to-annotateSelect assistant text → toolbar "Annotate" → write your note (may be empty); dismiss by clicking elsewhere or pressing Esc
Numbered marker + highlightA blue numbered marker + highlight anchored to the passage, viewport-anchored with collision avoidance, never lost when scrolled out of view
Cross-turn collectionAny number of annotations accumulate across messages/turns, numbered from 1
"Annotations ×N" chipSmall chip beside the input box; hover shows every annotation, deletable individually
Enter sends with your messageAnnotation block + the question in the input box are sent to the model together (the model receives the full content)
Hidden in your bubbleThe annotation block is removed from your bubble's DOM the moment you send (before the browser paints), leaving only the question + the chip (hover to view); historical messages self-heal after a refresh
Numbered reply correspondenceA format instruction is injected into the message so the model replies Annotation 1: … … Annotation N: … one by one
Reply annotation chipsAnnotation N: in the reply renders as hoverable chips showing the passage + your note

Interaction flow

Select assistant text ──▶ Toolbar "Annotate" ──▶ Write note / save empty ──▶ Blue numbered marker + highlight
        ▲                                                        │
        └────────────── any number, accumulate across turns ◀────┘
                                │
                                ▼
              "Annotations ×N" chip beside the input (hover to view / delete)
                                │
                            Press Enter
                                ▼
    Model receives: annotation block (number + passage + note) + your question
    Your bubble: question only + "Annotations ×N" chip (zero flicker)
    Model reply: Annotation 1: … Annotation 2: … (hoverable chips)

Install (official bundle path · the only one)

# Public npm package (works without an npm account)
dsh plugin --profile web add dsh-xwide-annotation
# Or install directly from the public GitHub source
dsh plugin --profile web add git+https://github.com/XWIDE/dsh-xwide-annotation.git
# local path install (development / debugging)
cd /path/to/dsh-annotation
dsh plugin --profile web add .
# restart the web service — see "Restarting the web service" below

To add it only as a Node dependency in an existing project:

npm install dsh-xwide-annotation

npm install only adds the dependency; it does not register the plugin with DSH. Use dsh plugin add above when installing it into DSH.

Migrating from the old @omdsh-dev package name

If you installed the plugin before v1.4.2, remove the old dependency before installing the renamed package:

dsh plugin --profile web remove @omdsh-dev/dsh-annotation
dsh plugin --profile web add dsh-xwide-annotation

If dsh web still fails and mentions @omdsh-dev/dsh-annotation, remove only the stale dsh-annotation entry that uses that old name from ~/.dsh/profiles/web/cordis.patch.yml. The plugin now supplies the dsh-xwide-annotation entry itself.

DoDon't
Only dsh plugin add / only write bundlesNever insert the same id again in the profile/home cordis.patch.yml

Self-check:

dsh --profile web --dump-config | rg "id: dsh-xwide-annotation"   # must be exactly 1 line
dsh web --no-open   # open the printed one-time token URL in a browser

In the browser console, window.__DSH_BOOT__.entries.find(({ id }) => id === 'dsh-xwide-annotation') must return an entry with a url. dsh 0.1.2 no longer exposes the old bare per-plugin URL.

Restarting the web service

Pick the command for your platform:

# macOS (launchd)
launchctl kickstart -k "gui/$(id -u)/com.dsh.web"

# WSL / Linux with systemd user services
# The unit name may differ by install method; check with:
#   systemctl --user list-units | rg dsh
systemctl --user restart dsh-web

Environments without a service manager (e.g. some containers) often need no restart at all: client.js is served per request with no caching, so a hard refresh (Cmd/Ctrl+Shift+R) picks up plugin changes. The self-check commands above are platform-neutral.

Architecture notes

  • Pure browser-side: everything lives in client.js (a hand-written CJS bundle, no build step, served no-cache per request)

  • Message format (the literal protocol block sent to the model; follows the DSH locale preference — zh or en):

    zh: 我批注了以下 N 处内容…\n\n1. 原文\n   批注:…\n\n请用「Annotation 1:…」…\n\n提问:
    en: I annotated the following N passage(s)…\n\n1. quote\n   Note: …\n\nPlease respond… "Annotation 1: …"…\n\nAsk:
    

    The zh delimiter is 「提问:」(ask:) rather than 「问题:」(question:) — the heading line "回答我的问题:" also contains the latter, and the bubble-hiding surgery would misfire on it; the en delimiter is Ask:. Hiding and reverse-parsing accept both languages plus the legacy 「问题:」 marker.

  • Bubble hiding: user bubbles are plain-text rendered (a single MessageText node, not markdown); a MutationObserver in the microtask phase (before paint) splits at the last \n提问:, cuts the annotation block, and attaches the chip; a 1 s polling fallback plus historical-message repair after refresh

  • Reply chips: after streaming settles (data-streaming removed), each Annotation N: is replaced with a hoverable chip; item data is stored on the most recent user message carrying the annotation tag (tag.__annotationItems) and rebuilt after refresh; snapshot the text nodes collected by the TreeWalker before touching the DOM, then replace one by one — replacing a child mid-walk invalidates the walker pointer and only the first node gets processed

  • Locale-aware: UI copy and the protocol block follow DSH's locale service (zh/en, live switch); historical bubbles stay parseable across languages; missing locale service falls back to zh

  • IME-safe: the Enter interception carries isComposing / keyCode 229 guards; never hard-edits the composer textarea's DOM; setDraft only assembles the annotation block at the last moment before submit and never clobbers the user's draft

  • No reliance on send-completion event chains: bubble decoration uses MutationObserver + polling (watchInputDraft can be ineffective before the session is loaded at init; it is only a staging entry)

  • Focus-chat compatible: works inside the focus conversation view of dsh-focus-chat — assistant rows there are containers with a CSS-Modules class (plus while running); selection, annotation, reply chips, and re-anchoring all work in the focus tab alongside the main chat view

Developer testing

CI and DSH host testing

Version history

VersionHighlights
v1.5.x — this fork, current release v1.5.5Color studio + annotation outline; @ quote picker; self-check badge interactions; high-contrast dialog text; markers drawn on the assistant source row
v1.4.xLocale-aware: zh/en UI copy and annotation protocol block, live switch via DSH locale service
v1.3.xNumbered reply correspondence: format-instruction injection + hoverable Annotation N: chips (TreeWalker snapshot fix)
v1.2.xHidden annotation block in bubble: MutationObserver microtask zero-flicker + polling fallback + historical-message repair
v1.xSelf-contained annotation flow (replaces the v0.9 chip design): capture-Enter assembles the block and sends it with the message
v0.9.xEarly chip design (insertReference + slash codec), superseded by v1.x

Friendly links

  • Linux.do

License

MIT


Local upgrade (derivative work)

dsh-xwide-annotation v1.5.0 (2026-10-16; current release v1.5.5, 2026-10-18) — a derivative work based on @changfenhuang/dsh-annotation v1.4.11 (by omdsh-dev, MIT). The upstream notice and MIT terms are retained verbatim (see LICENSE). This upgrade adds:

  • Color studio: pick a color from a floating button, 4 neon presets, a custom color picker, Alt+Shift+C cycling, draggable button with a remembered position.
  • Annotation outline: lists every annotation of the current conversation, colour-codes the index (1 yellow / 2 red / 3 green …), and jumps to the original sentence on click.
  • @ quote reference: press @ in the composer and a panel opens above it listing every annotation of the current conversation (N. quote (note: …)); ↑/↓ moves the selection, Enter or a click inserts it, Esc closes the panel. The inserted text reads 引文:「quote」(批注:…) and goes through the official draft channel, so it ships with your question. With no annotations the panel shows 「暂无批注可引用」.

X-WIDE — GitHub @XWIDE · bilibili 374064919 · xiupk@sina.com.cn

[data-focus-flow]
*_assistant
data-streaming