dsh-wikilink
by zhaoscsc
DeepSeek Harness Web GUI 的 Obsidian 风格 [[wikilink]] 提及:编辑器输入 [[ 即浮出笔记标题选择器,边输入边模糊搜索工作区笔记
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…
安装
dsh plugin --profile web add github:zhaoscsc/dsh-wikilinkGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
目录
中文版 README:README.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
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
.mdis 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.
License
MIT
原始 README: https://github.com/zhaoscsc/dsh-wikilink/blob/main/README.md ↗
同类插件
查看全部 →
mnemon
LLM监督持久内存插件 — 基于图的召回,跨会话知识,单二进制。与DeepSeek Harness、Claude Code、OpenClaw及任何代理运行时兼容。

memtrace-public
面向 AI 编码 agent 的结构化记忆:双时态图谱、MCP 原生、零 LLM 调用;支持 Cursor · Claude Code · Codex · DeepSeek Harness · Hermes · VS Code · Windsurf

dsh-flowix-memory
将本地 flowix-cli 注册为 MCP 服务,让 agent 可以搜索、读取、创建和编辑 Flowix 备忘与思维导图产物。

flowix
笔记助你,记忆助你的代理。

engramory
AI代理的便携式内存协议 — 以静态规则加载;整理学科 + 参考规范 + 可选的钩子API

dsh-memory-evolve
为 DeepSeek Harness 提供纯插件实现的跨会话长期记忆与后台自我进化能力:五轨记忆、Git 分支感知、回合内自我审查、技能自我进化与技能管理器、四轨待办、COI 调度、会话广播、会话搜索、提示词管理器和临时信息便签;零核心修改、零运行时依赖,安装即用,卸载即净。