Notifications & Integrations
dsh-qq-panel
Beeasy-L/dsh-qq-panel · ★ 0
给 DeepSeek Harness 上的 QQ 桥接(qq-bridge / OneBot v11)做的设置面板:人格卡编辑与热切换、表情包与备注管理、主动发言参数、运行状态与日志。也可脱离 DSH 独立运行。
Manifest details
安装
dsh plugin --profile web add 'github:Beeasy-L/dsh-qq-panel#50a9fa0ec2a1f616078a2e27a07cbd391de36fe3'GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
For install and environment setup, plus plugin development tutorials, see DSH community docs ↗
README
Table of contents
A settings panel for QQ bridges on DeepSeek Harness: edit persona cards, manage a sticker library, tune proactive messaging and other behaviour, and watch runtime status — right inside DSH's settings page.
It targets the repository layout of qq-bridge (QQ ↔ DSH bridge) and only reads and writes files: it never starts/stops SnowLuma, never touches the QQ client, never sends a message.
Also works without DSH as a local web page:
node server.mjs→ http://127.0.0.1:3101. Both modes share the same read/write code.
Features
| Tab | What it does |
|---|---|
| Persona | Lists roles/*.md; edits them in a monospace editor; backs up before saving to 人格卡/<role>/版本/ (keeps the last 30); switches the active persona (hot — injected per message); shows character count and lint hints |
| Stickers | Lists sticker assets with title/size/uploaded state; edits the per-sticker note the model uses when picking an image; uploads a sticker into QQ favourites via OneBot add_custom_face |
| Behaviour | Owner QQ, private/group allow-lists, proactive messaging (on/off, idle threshold, check interval, probability), wake mode, whether the model may set its own dive timer, reasoning effort; writes config.json (takes effect after the bridge restarts) |
| Status / logs | Bridge reachability, mode, SnowLuma connection, active persona; tail of state/bridge.log |
Install
Requires Node ≥ 22.13 and an existing DSH profile under ~/.dsh/profiles/<profile>/.
git clone https://github.com/<you>/dsh-qq-panel.git
cd dsh-qq-panel
node scripts/install.mjs # --dry-run to preview, --profile=web for another profile
Then restart Harness (the client bundle and the plugin row load at boot). Entry point: Settings → Plugins → dsh-qq-panel.
Uninstall / emergency recovery:
node scripts/uninstall.mjs # remove registration + link
node scripts/uninstall.mjs --restore-backup # also restore the newest package.json backup
Standalone mode
node server.mjs # http://127.0.0.1:3101
QQ_BRIDGE_DIR=/path/to/qq-bridge node server.mjs 3102
No DSH plugin is loaded, so it cannot affect Harness startup.
Finding the bridge folder
QQ_BRIDGE_DIRenvironment variablebridgeDirin~/.dsh/qq-panel.json(saved from the panel)- a sibling
qq-bridge/next to this repo - a nested
qq-bridge/inside this repo
Development
node --test tests/*.test.mjs
node server.mjs
lib/index.js— host half (cordis plugin) registering/api/qq-panel/*lib/client.js— client half, hand-written lazy-CJS, registered intoplugins.bundle.configtests/host.test.mjs— mounts the host with a fake ctx and calls every routetests/client.test.mjs— fakeswindow.__ModuleLoader__and asserts the plugin contract
Two traps worth knowing (both cost a reinstall once)
- A client plugin must export
inject: ['slots']. Without itctx.slotsisundefined,applythrows, the entry becomesfailed, and DSH refuses to boot withweb boot: 1 entry did not activate. - Do not put
configon the profile row unless the plugin exports a matchingConfigschema — that can also leave the entry unactivated, with the same symptom.
License
MIT. Not affiliated with DeepSeek or Tencent/QQ.