DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-wikilink

z

dsh-wikilink

Manifest valid3

Obsidian-style [[wikilink]] mentions for the DeepSeek Harness web GUI: fuzzy-search note titles and attach their contents to the prompt

UI (client)hasBundlePatch

dsh-wikilink

中文版 READMEREADME.zh.md · 简体中文文档入口

Obsidian-style [[wikilink]] mentions for the DeepSeek Harness web GUI. Type [[ in the composer and a note-title picker floats up: fuzzy search your workspace notes as you type — including out-of-order (subsequence) matches (「曼食」 finds 曼谷街头美食文化观察) and space-separated multi-term matches (「曼谷 美食」 finds 曼谷街头美食文化观察 / 曼谷笔记:美食 / 曼谷朱拉隆功夜市美食探索). Press Enter to attach, and the referenced note content ships to the model when the message is sent.

composer:  summarize  [[曼谷 美.    ← picker over the open token
            ┌────────────────────────────────────────────────────────┐
            │ 📄 曼谷街头美食文化观察:鱼鳔老太太摊位的夜间消费场景          │
            │ 📄 曼谷笔记:美食                                     │
            │ 📄 曼谷朱拉隆功夜市美食探索:KINNKUNG海鲜馆的惊喜体验         │
            └────────────────────────────────────────────────────────┘
draft:     summarize  [[曼谷笔记:美食]]   ← readable plain-text token
model:     <note path="5-存档/06-专题档案/数字游民/曼谷笔记:美食.md" title="曼谷笔记:美食">…content…</note>  ← injected at send time

Type [[query and the picker opens exactly on the double bracket; Enter replaces the token with [[title]] and the caret lands after ]] (Obsidian-style). A single [ in prose never triggers it.

No harness patches needed

Earlier versions patched the installed @deepseek-ai client bundles to make the [[ trigger work (the harness input pipeline only recognizes / and @). Since v0.2 the picker is fully self-drawn: the plugin watches the draft itself, renders its own floating menu on the public conversation.input.overlay slot, and writes the closed [[title]] back through the public input actions. No patches, no re-apply step — install, restart, done.

Install

Compatibility: v0.2.1+ requires dsh ≥ 0.1.2-rc.1. dsh 0.1.2-rc.1 removed the settingsNamespace() factory from @deepseek-ai/dsh-settings; the plugin registers its wikilink namespace as a plain string literal since v0.2.1 (it still runs on older dsh releases — the string form was always the underlying wire format).

dsh plugin --profile web add https://github.com/zhaoscsc/dsh-wikilink/archive/refs/heads/main.tar.gz

Restart the web server so the host half and the served client bundle pick up the plugin. The enable switch lives in Settings → Wikilinks.

Configuration

Host-side tunables on the plugin row in the profile patch layer:

- id: dsh-wikilink
  config:
    maxIndexedFiles: 100000   # hard cap on indexed entries (large vaults need this)
    maxFileBytes: 262144      # hard cap on one attached note; larger files are refused
    ignoreDirs: ['.git', 'node_modules']   # directory basenames the walk skips

The index is cached per session for 30 seconds; an index-status strip above the composer reports indexing in progress / done (with the note count) / failed.

Model experience

| Aspect | Effect | | --- | --- | | Token cost | One attached note adds its complete content (up to maxFileBytes) to the request. | | Tool calls | None — the content is already in the prompt. | | Message format | Each note serializes as <note path="…" title="…">…</note>, injected as a user-role message with source wikilink-mention. | | Resolution | [[dir/title]] resolves by exact path; [[title]] resolves only when the title is unique; unresolvable or ambiguous tokens stay plain prose. |

Matching

Four tiers over the note title (then the relative path): contiguous substring > subsequence (out-of-order) > path substring > path subsequence. Queries split on whitespace must all match (AND). Both query and titles are NFC-normalized.

Real examples from a travel-note vault:

| Query | Result | | --- | --- | | [[曼谷 美食]] | 曼谷街头美食文化观察:鱼鳔老太太摊位的夜间消费场景 · 曼谷笔记:美食 · 曼谷朱拉隆功夜市美食探索 | | [[曼食]] (out-of-order) | 曼谷头美文化观察(matches across skipped characters) | | [[鱼鳔]] | 曼谷街头美食文化观察:鱼鳔老太太摊位的夜间消费场景 |

Known limitations

  • The picker triggers on the last unclosed [[/【【 anywhere in the draft, with the query running to the draft end — the public input state carries no caret info, so caret-not-at-end doesn't trigger.
  • The self-drawn menu is styled and key-handled by the plugin itself, so it evolves independently from the / and @ pipeline menus.
  • The workspace index is cached per session for 30 seconds; files created later appear on the next menu open after that window.
  • A note literally named .md is skipped (its empty title would fail the wire schema).
  • IME caveat: some Chinese input methods (Sogou, WeChat, Baidu, system Pinyin, …) have a symbol auto-completion feature (smart punctuation / bracket auto-pairing) that auto-inserts a closing bracket when you type [ or ([[], 【】). That breaks the double-open detection and the picker never opens. Disable symbol auto-completion in the input method settings (it may be called smart punctuation / bracket auto-pairing / symbol suggestion).

Development

node build.mjs        # esbuild is vendored under ./node_modules; zod is inlined into the client bundle

See DEV.md for the architecture (self-drawn picker — no harness patches) and the build/dev loop.

Changelog

  • v0.2.1 — Adapt to dsh 0.1.2-rc.1: @deepseek-ai/dsh-settings dropped the settingsNamespace() factory, so the plugin now registers the wikilink namespace as a plain string literal.
  • v0.2.0 — Zero-patch self-drawn picker (no harness patches needed); fuzzy and subsequence title matching; fullwidth 【【 trigger support.

License

MIT

Compatibility

DSH 0.1.5-rc.2: errorDSH 0.1.6-alpha.1: errorDSH 0.1.5-rc.1: errorDSH 0.1.5-alpha.2: errorDSH 0.1.5-alpha.1: errorDSH 0.1.3-alpha.2: errorDSH 0.1.2-rc.1: errorDSH 0.1.2-alpha.5: errorDSH 0.1.2-alpha.4: errorDSH 0.1.2-alpha.3: errorDSH 0.1.2-alpha.2: error

Versions

Latest versionPublishedSize
0.2.1

Similar plugins

dsh-obsidian

by mingzeng21

Connect DeepSeek Harness (dsh) to a local Obsidian vault: search, read, write, move, and trash notes.

Memory & ContextManifest valid

15

292/wk

MIT

TypeScript

Sep 12, 2026

dsh plugin --profile web add dsh-obsidian

by Luaphes

Attention reminders for the DeepSeek Harness Web UI: frame badge, (N) tab title and whale-favicon recolor for sessions waiting for input or finished unopened.

UI & ExperienceManifest valid

6

MIT

JavaScript

Sep 9, 2026

dsh plugin --profile web add dsh-web-attention-badge

by ch1bug

Codex-style fuzzy skill search for the DeepSeek Harness Web GUI: /bug, /diag, /regression all find diagnosing-bugs in the / skill menu.

Manifest valid

0

MIT

JavaScript

Aug 15, 2026

dsh plugin --profile web add dsh-skill-fuzzy

by kikulmj

Provide notebook‑style workbench and local shell for DeepSeek Harness Web GUI

Manifest valid

6

JavaScript

Aug 18, 2026

dsh plugin --profile web add @dsh-local/dsh-jupyter

by SipengXie2024

User-attention notifications for DeepSeek Harness (dsh) web: turn end, approval requests, and model questions — in-page toast + OS-level browser notification

Manifest valid

0

MIT

TypeScript

Aug 17, 2026

dsh plugin --profile web add dsh-turn-reminder

by Zenjibad

dsh bundle: attach any file type in the DeepSeek Harness Web UI — text-likes inline, binaries as workspace path references, rasters via the built-in pipeline

UI & ExperienceManifest valid

3

MIT

JavaScript

Aug 14, 2026

dsh plugin --profile web add dsh-any-attachment