DeepSeek Harness × NapCat QQ 接入插件
32.9/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Jiangsubei/dsh-napcat-bridge该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(runtime_smoke_failed · 2026/10/29) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 69 处,展示前 46 条)
- 读取本地文件src/boot.ts:79
if (!fs.existsSync(rootConfig)) { - 读取本地文件src/boot.ts:84
if (!fs.existsSync(profilePackageJson)) { - 读取本地文件src/boot.ts:99
if (!fs.existsSync(pluginLink)) { - 读取本地文件src/config/heal.ts:205
if (!fs.existsSync(patchFile)) { - 读取本地文件src/config/heal.ts:210
const content = fs.readFileSync(patchFile, 'utf8'); - 写入本地文件src/config/heal.ts:292
fs.writeFileSync(patchFile, cleaned.newContent, 'utf8'); - 读取本地文件src/config/migrate.ts:78
if (fs.existsSync(file)) { - 读取本地文件src/config/migrate.ts:80
const content = fs.readFileSync(file, 'utf8'); - 读取本地文件src/gateway/inbound-media.ts:128
if (fs.existsSync(root)) { - 读取本地文件src/gateway/inbound-media.ts:139
if (fs.existsSync(trimmed)) return trimmed; - 读取本地文件src/gateway/inbound-media.ts:145
if (fs.existsSync(learnedNtqqDir)) return learnedNtqqDir; - 读取本地文件src/gateway/inbound-media.ts:152
if (fs.existsSync(envDir)) return envDir; - 读取本地文件src/gateway/inbound-media.ts:166
if (fs.existsSync(iniPath)) { - 读取本地文件src/gateway/inbound-media.ts:167
const content = fs.readFileSync(iniPath, 'utf8'); - 读取本地文件src/memory/storage.ts:241
const content = fsSync.readFileSync(filePath, 'utf-8'); - 读取本地文件src/memory/storage.ts:263
const content = fsSync.readFileSync(filePath, 'utf-8'); - 读取本地文件src/memory/storage.ts:272
const defaultContent = fsSync.readFileSync(this.getUserProfilePath('default'), 'utf-8'); - 写入本地文件src/server/face-routes.ts:100
fs.mkdirSync(storeDir, { recursive: true }); - 读取本地文件src/server/face-routes.ts:103
if (!fs.existsSync(targetFile)) { - 写入本地文件src/server/face-routes.ts:104
fs.writeFileSync(targetFile, fileBuf); - 读取本地文件src/server/face-routes.ts:268
if (!fs.existsSync(filePath)) { - 读取本地文件src/server/face-routes.ts:270
if (fs.existsSync(cand)) { - 读取本地文件src/server/face-routes.ts:285
const stat = fs.statSync(filePath); - 读取本地文件src/server/face-routes.ts:291
fs.createReadStream(filePath).pipe(res); - 读取本地文件src/storage/database.ts:189
if (dir && dir !== '.' && !fs.existsSync(dir)) { - 写入本地文件src/storage/database.ts:190
fs.mkdirSync(dir, { recursive: true }); - 写入本地文件src/storage/face-migration.ts:30
fs.mkdirSync(canonicalDir, { recursive: true }); - 读取本地文件src/storage/face-migration.ts:42
if (!fs.existsSync(canonicalPath)) { - 读取本地文件src/storage/face-migration.ts:53
if (cand && fs.existsSync(cand)) { - 写入本地文件src/storage/face-migration.ts:55
fs.copyFileSync(cand, canonicalPath); - 读取本地文件src/storage/face-migration.ts:64
if (fs.existsSync(canonicalPath) && face.file_path !== canonicalPath) { - 读取本地文件src/storage/media.ts:113
if (record?.local_path && fs.existsSync(record.local_path)) { - 读取本地文件src/storage/media.ts:129
if (record?.local_path && fs.existsSync(record.local_path)) { - 读取本地文件src/storage/media.ts:148
if (record?.local_path && fs.existsSync(record.local_path)) { - 读取本地文件src/storage/media.ts:232
if (record?.local_path && fs.existsSync(record.local_path)) { - 读取本地文件src/storage/media.ts:249
if (fs.existsSync(urlOrPath)) { - 发起网络请求src/storage/media.ts:256
const response = await fetch(urlOrPath); - 读取本地文件src/storage/media.ts:290
if (!fs.existsSync(downloadRoot)) { - 删除本地文件src/storage/media.ts:336
fs.unlinkSync(p); - 读取本地文件src/storage/slang-migration.ts:64
if (!fs.existsSync(targetPath)) { - 读取本地文件src/storage/slang-migration.ts:70
content = fs.readFileSync(targetPath, 'utf-8'); - 写入本地文件src/utils/atomic-write.ts:16
mkdirSync(dir, { recursive: true }); - 写入本地文件src/utils/atomic-write.ts:23
writeFileSync(tempPath, content, { encoding }); - 写入本地文件src/utils/atomic-write.ts:25
writeFileSync(tempPath, content); - 写入本地文件src/utils/atomic-write.ts:27
renameSync(tempPath, targetPath); - 删除本地文件src/utils/atomic-write.ts:30
unlinkSync(tempPath);
扫描于 2026/11/3(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh@deepseek-ai/dsh-agent@deepseek-ai/dsh-app-boot@deepseek-ai/dsh-base@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-commands@deepseek-ai/dsh-llm@deepseek-ai/dsh-permission-presets@deepseek-ai/dsh-session@deepseek-ai/dsh-settings@deepseek-ai/dsh-storage给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-napcat-bridge
DeepSeek Harness × NapCat QQ 接入插件 —— 既是随叫随到的专业助手,也是懂梗斗图、能学黑话、主动冒泡的灵魂群友。让 DSH 智能体在 QQ 群聊 / 私聊中开箱即用。
✨ 功能特性
- QQ 群聊 / 私聊全场景接入:基于 NapCat(OneBot 11 协议)反向 WebSocket 连接。
- QQ 会话专属预设(qq-session):构建期与运行时单一真相源(SSOT)自动同步,专属注入 QQ 工具集,彻底杜绝工具向 Web UI 常规会话泄露;深度补齐工作区、跨平台 Shell(Windows pwsh / Linux bash)、Web 搜索、交互提问与技能系统,并抑制多余快照。
- 用户侧静默出站体系:遵循「用户侧静默原则」,废除纯文本直接推流;文本出站统一由 send_qq_message 工具驱动,由模型根据入站标头 [消息ID: <id>] 与上下文逻辑自主决定是否引用原消息(reply_to)或艾特用户(at_user)。
- 工具与回合解耦(单智能体顺手维护):执行出站工具不强行终止回合,模型在回复用户后可在同一轮次中顺手调用记忆或表情管理工具,自然平稳终结。
展开完整文档(README 剩余 1 节)
dsh-napcat-bridge DeepSeek Harness × NapCat QQ 接入插件 —— 既是随叫随到的专业助手,也是懂梗斗图、能学黑话、主动冒泡的灵魂群友。让 DSH 智能体在 QQ 群聊 / 私聊中开箱即用。 ✨ 功能特性 - QQ 群聊 / 私聊全场景接入:基于 NapCat(OneBot 11 协议)反向 WebSocket 连接。 - QQ 会话专属预设(qq-session):构建期与运行时单一真相源(SSOT)自动同步,专属注入 QQ 工具集,彻底杜绝工具向 Web UI 常规会话泄露;深度补齐工作区、跨平台 Shell(Windows pwsh / Linux bash)、Web 搜索、交互提问与技能系统,并抑制多余快照。 - 用户侧静默出站体系:遵循「用户侧静默原则」,废除纯文本直接推流;文本出站统一由 send_qq_message 工具驱动,由模型根据入站标头 [消息ID: <id>] 与上下文逻辑自主决定是否引用原消息(reply_to)或艾特用户(at_user)。 - 工具与回合解耦(单智能体顺手维护):执行出站工具不强行终止回合,模型在回复用户后可在同一轮次中顺手调用记忆或表情管理工具,自然平稳终结。 - 两层记忆体系:群聊会话记忆 + 用户跨群互通画像,Markdown 文件存储,提供 read_memory、create_memory、edit_memory 三大工具;写入侧按“用户画像 / Session 规则 / 群聊画像总预算”三个独立字符预算硬拒绝超限落盘,注入侧保持文件内容原子;彻底摒弃独立后台回顾智能体。 - 表情包管理体系:受 face_enabled 配置门控,提供查表情(list_faces)、发表情(send_face)、收录好图(collect_face)与库容维护/LRU 淘汰(manage_faces)闭环工具链;另有群聊 react_message 贴表情轻量表态。 - 串行发送与多媒体交互:单对端串行出站队列,避免并发乱序;支持私聊文件入站自动落盘、群共享文件索引查询(list_group_files)、动态资源拉取(fetch_chat_resource)与合并转发展开(expand_forward_message)。 - 卡片消息通用提取器:自动提取 QQ 卡片(小程序、分享、音乐等)的标题与链接。 - 群聊主动回复策略:普通消息窗口期聚合轮询 + 潜水超时破冰 + 智能体繁忙丢弃 + 夜间免打扰,支持「仅回复文本内容」过滤并赋予智能体 [结束] 静默决策权。 - 纯两字中文斜杠命令:/新建、/会话、/用量、/停止、/模型、/权限、/思考、/状态、/帮助,内置严格的管理员白名单权限隔离与 per-session 状态管理。 - 发言黑名单与权限安全防线:支持私聊与群聊发言黑名单(入库留存审计但永不唤醒与回复,管理员亦不豁免);支持新建会话默认权限(私聊默认 workspace-write、群聊默认 read-only)及针对指定 QQ 号/群号的权限例外表;支持 Coding 工程工具组(bash/pwsh/read/write/edit)按私聊/群聊及例外表裁剪硬隔离(只读工具 read_image 与 working_directory 始终保留)。 - WebUI 设置面板:通过 DSH Web UI 配置所有插件参数,7 大 Tab 分组(连接设置、人格与准则、回复配置、权限与安全、记忆、表情包、黑话学习),全部 39 项参数支持 volatile 动态热更新。 📦 安装与启动 前置条件 - DeepSeek Harness (npm install -g @deepseek-ai/dsh) >= 0.2.0 - NapCat(QQ 机器人协议端) - Node.js >= 22.12.0(受 better-sqlite3 原生依赖约束,低于此版本无法加载) - pnpm >= 9.0.0(仅源码安装需要) 方式一:从 npm 安装(推荐) 安装到 DSH 的 web profile dsh plugin --profile web add dsh-napcat-bridge 或安装到全局默认环境 dsh plugin add dsh-napcat-bridge [!NOTE] Desktop 版没有 dsh 命令行,请在 DSH「插件 → 添加插件」里直接输入包名 dsh-napcat-bridge 安装。 npm 包已内置编译产物与 cordis.patch.yml,安装后重启 DSH 即生效,无需本地构建。better-sqlite3 自带 8 平台预编译二进制,常规安装不触发 node-gyp 编译。 方式二:从源码安装(开发 / 调试) [!IMPORTANT] DSH 通过 package.json 的 main -> dist/index.js 与 dsh.bundle.patch 加载插件。在执行 link 之前必须先运行 pnpm build 生成编译产物与预设同步补丁。 git clone https://github.com/Jiangsubei/dsh-napcat-bridge.git cd dsh-napcat-bridge 安装依赖并编译(内置 sync-patch 预设同步、tsc 编译与客户端面板构建) pnpm install pnpm build link 安装到 DSH 的 web profile dsh plugin --profile web add link:. 配置与运行 1. NapCat 添加反向 WebSocket 客户端:在 NapCat WebUI(默认 http://127.0.0.1:6099/webui)的网络配置中新增反向 WebSocket 客户端: - URL:ws://127.0.0.1:8080/(插件显式绑定本地环回地址 127.0.0.1,端口需与插件 ws_port 对齐) - Token:必填项,必须与插件 ws_token 保持一致(严禁留空;若未配置或两端不一致,网关握手将直接拒绝连接并返回 401 Unauthorized) - 心跳周期:30000 ms,重连间隔:3000 ms 2. 启动 DSH: dsh --profile web 3. DSH WebUI 配置核心参数:访问 DSH Web UI(默认 http://127.0.0.1:3080/),进入 dsh-napcat-bridge 设置卡片(标有 的为必填字段): - ws_token(核心必填项):NapCat 连接鉴权 Token。用于网关握手安全鉴权,留空时网关将直接拒绝连接并产生警告;WebUI 保存时服务端亦会强校验拦截空 Token(返回 400 Bad Request)。 - bot_qq(核心必填项):填写机器人的 QQ 号,用于过滤自身消息防死循环,并作为群聊识别 @机器人的基准。 - admins:填写管理员 QQ 号,授权执行斜杠命令。 - 其他可选参数(人设、主动回复、记忆预算、表情包开关等)按需调整,保存即时热更新生效。 ⚙️ 运行时配置 (39 项) 配置卡片在 WebUI 中分为 7 个 Tab: 1. 连接设置 (Connection) | 参数 | 类型 | 默认值 | 说明 | | ws_port | number | 8080 | WebSocket 监听端口(NapCat 连接目标,变更时服务热重启) | | ws_token | string | "" | 连接鉴权 Token(必填项,空着直接拒绝连接) | | bot_qq | string | "" | 机器人自身 QQ 号(核心必填项,自循环防护与识别锚点) | | admins | string[] | [] | 管理员 QQ 号白名单(斜杠命令授权) | | aliases | string[] | [] | 助手点名别名(群聊点名唤醒) | | image_ttl_days | number | 7 | 外来图片与多媒体缓存本地保留天数(过期定时清理) | 2. 人格与准则 (Persona & Behavior) | 参数 | 类型 | 默认值 | 说明 | | persona | string | (内置)* | 助手的人格设定(注入 System Prompt 动态段) | | behavior | string | (内置) | 行为约束准则(注入 System Prompt 动态段) | 3. 回复配置 (Proactive) | 参数 | 类型 | 默认值 | 说明 | | proactive_reply_enabled | boolean | false | 启用群聊主动回复功能总开关 | | proactive_interval_mins | number | 3 | 主动回复轮询窗口期(分钟,期间有新消息才唤醒) | | proactive_buffer_size | number | 10 | 主动回复滑动窗口消息保留条数 | | proactive_random_enabled | boolean | false | 启用群聊普通消息随机概率唤醒 | | proactive_random_probability | number | 0.05 | 普通消息随机唤醒概率(0~1,0.05 即 5%) | | proactive_cooldown_mins | number | 10 | 主动回复冷却时间(分钟,防止频繁插话) | | proactive_only_text | boolean | false | 仅回复纯文本内容(多模态媒体消息不主动触发) | | proactive_idle_enabled | boolean | false | 启用潜水超时主动唤醒(冷场破冰冒泡) | | proactive_idle_timeout_mins | number | 120 | 潜水超时阈值(分钟) | | proactive_night_dnd | boolean | true | 夜间免打扰 (每日 23:00~08:00 暂停主动回复) | 4. 权限与安全 (Security) | 参数 | 类型 | 默认值 | 说明 | | private_blacklist | BlacklistItem[] | [] | 私聊发言黑名单列表(命中则不唤醒、不回复,管理员亦不例外) | | group_blacklist | BlacklistItem[] | [] | 群聊发言黑名单列表(命中则不唤醒、不回复,管理员亦不例外) | | session_permission_private_default | string | "workspace-write" | 私聊新建会话初始权限模式(workspace-write / read-only / danger-full-access) | | session_permission_group_default | string | "read-only" | 群聊新建会话初始权限模式(read-only / workspace-write / danger-full-access) | | session_permission_overrides | SessionPermissionOverride[] | [] | 针对特定 QQ 号或群号的新建会话初始权限例外覆盖表 | | coding_tools_private_default | boolean | true | 私聊新建会话是否默认装载 Coding 编码工具组 | | coding_tools_group_default | boolean | false | 群聊新建会话是否默认装载 Coding 编码工具组(默认关闭,安全推荐) | | coding_tools_overrides | CodingToolsOverride[] | [] | 针对特定 QQ 号或群号的 Coding 工具组装载例外覆盖表 | 5. 记忆 (Memory) | 参数 | 类型 | 默认值 | 说明 | | memory_storage_dir | string | ".dsh/napcat/napcat_memory" | 记忆 Markdown 文件根存储目录 | | user_profile_budget_chars | number | 2200 | 单个用户画像文件的写入上限(跨群聊/私聊通用) | | session_memory_budget_chars | number | 2200 | 单个 Session 规则文件的写入上限(群聊/私聊统一) | | group_memory_total_budget_chars | number | 8000 | 群聊注入时所有活跃群友画像合计的字符预算;Session 规则不计入 | 6. 表情包 (Face) | 参数 | 类型 | 默认值 | 说明 | | face_enabled | boolean | false | 控制新建会话是否在预设中装载表情包工具集(保存对后续新会话生效) | | face_store_max | number | 100 | 本地表情库存储容量上限(张) | | face_store_dir | string | ".dsh/napcat/faces" | 本地表情库文件存储目录 | | face_sub_type | number | 1 | OneBot 11 发送表情使用的 sub_type 字段值 | | face_evict_policy | string | "evict_lru" | 库容满额淘汰策略 (reject 拒绝 / evict_lru 淘汰最久未用) | 7. 黑话学习 (Slang) | 参数 | 类型 | 默认值 | 说明 | | slang_enabled | boolean | true | 控制新建会话是否装载黑话工具集与注入黑话上下文(保存对后续新会话生效) | | slang_max_entries | number | 300 | 黑话知识库条数容量上限 (默认 300 条) | | slang_evict_policy | 'reject' \| 'evict_lru' | 'reject' | 黑话满额策略(reject: 拒绝新增, evict_lru: 淘汰模型查阅最少词条) | | slang_storage_path | string | ".dsh/napcat/slang/slang.md" | 存量旧版黑话 Markdown 迁移源路径 (仅启动时迁移,不删原文件) | 配置下线说明:群聊强制引用/艾特死配置(group_reply_quote、group_reply_at)及空回复行为面板已下线。出站回复遵循「用户侧静默原则」,是否引用与艾特统一由大模型通过 send_qq_message 工具参数(reply_to、at_user)自主决策。独立后台 Agent 参数也已清退下线。 🛠️ 开发与构建 git clone https://github.com/Jiangsubei/dsh-napcat-bridge.git cd dsh-napcat-bridge pnpm install pnpm typecheck pnpm test:quick # 快速单测 pnpm build # 同步预设、类型编译与构建 WebUI 产物 🧪 测试 本项目遵循严格的契约测试先行与真实装配验证规范,覆盖专属预设单一真相源同步、出站静默工具流、单 Agent 顺手提炼、表情包闭环、两层记忆体系与斜杠命令等场景(60 套件 500+ 测试用例)。 pnpm test # 完整测试(先执行 pnpm build 再执行测试) pnpm test:quick # 快速执行测试(跳过 build) 📚 文档索引 面向使用者的标准开源文档统一存放于 docs/ 目录: - 快速上手 (docs/getting-started.md):环境依赖、安装步骤、NapCat WS 配置与验证指南。 - 系统架构 (docs/architecture.md):模块总览、生命周期装配、用户侧静默出站体系、记忆与表情体系。 - 配置说明 (docs/configuration.md):WebUI 7 大 Tab 完整配置项、默认值与迁移说明。 - 工具与命令 (docs/tools-and-commands.md):send_qq_message 等 13 个 Agent 工具契约与 9 个纯两字中文斜杠命令。 - 故障排查 (docs/troubleshooting.md):出站静默未调用工具、预设隔离、连接异常等问题排查指引。 📄 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Jiangsubei/dsh-napcat-bridge
DeepSeek Harness × NapCat QQ 接入插件
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7