托管 NapCat 接入 QQ 私聊群聊与空间留言,可视化管人设权限
31.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Applepinea/dsh-qq-access该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(node_version · 2026/10/29) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 66 处,展示前 62 条)
- 发起网络请求lib/client.js:69
const res = await fetch(API + "/state", { credentials: "same-origin" }); - 发起网络请求lib/client.js:123
const res = await fetch(API + "/config", { - 发起网络请求lib/client.js:139
const res = await fetch(API + "/napcat/open", { method: "POST", credentials: "same-origin" }); - 发起网络请求lib/client.js:311
try { fetch(API + "/ping?stage=apply&slot=" + encodeURIComponent("boot")); } catch (e) {} - 读取本地文件cli.mjs:21
try { await access(configPath); throw new Error(`配置已存在:${configPath}。请直接编辑,setup 不会覆盖。`); } - 写入本地文件cli.mjs:43
await mkdir(dirname(configPath), { recursive: true, mode: 0o700 }); - 写入本地文件cli.mjs:44
await writeFile(configPath, JSON.stringify(config, null, 2) + '\n', { flag: 'wx', mode: 0o600 }); - 读取本地文件cli.mjs:98
const raw = JSON.parse(await readFile(configPath, 'utf8')); - 读取本地文件cli.mjs:102
await writeFile(configPath + `.before-managed-${Date.now()}.json`, await readFile(configPath), { flag: 'wx', mode: 0o600 }); - 写入本地文件cli.mjs:102
await writeFile(configPath + `.before-managed-${Date.now()}.json`, await readFile(configPath), { flag: 'wx', mode: 0o600 }); - 写入本地文件cli.mjs:103
await writeFile(configPath, JSON.stringify(raw, null, 2) + '\n', { mode: 0o600 }); - 读取密钥环境变量lib/config.mjs:16
const token = process.env.NAPCAT_TOKEN || raw.onebot?.token || ''; - 读取密钥环境变量lib/config.mjs:17
const eventSecret = process.env.NAPCAT_EVENT_SECRET || raw.events?.secret || ''; - 读取本地文件lib/config.mjs:113
try { raw = JSON.parse(await readFile(path, 'utf8')); } - 读取本地文件lib/runtime.mjs:195
try { return await readFileBytes(source.file); } catch { } - 读取本地文件lib/runtime.mjs:206
try { return await readFileBytes(location); } catch { return null; } - 发起网络请求lib/runtime.mjs:209
const response = await fetch(location, { signal: combinedSignal(signal, 15_000) }); - 写入本地文件lib/runtime.mjs:242
try { appendFileSync('C:/Users/csa/.dsh-qq-access/debug.log', new Date().toISOString() + ' image ' + stage + ' ' + extra + '\n'); } catch {} - 写入本地文件lib/runtime.mjs:417
await mkdir(join(this.config.dataDir, 'agent-workspaces', `${message.kind}-${message.peerId}`), { recursive: true, mode: 0o700 }); - 读取本地文件lib/runtime.mjs:567
const bytes = await readFileBytes(path); - 写入本地文件lib/napcat.mjs:18
await mkdir(directory, { recursive: true, mode: 0o700 }); - 读取本地文件lib/napcat.mjs:20
try { return JSON.parse(await readFile(join(directory, name), 'utf8')); } - 写入本地文件lib/napcat.mjs:34
await writeFile(join(directory, name), JSON.stringify({ ...previous, network: { ...network, httpServers: servers, httpClients: clients } }, null, 2), - 写入本地文件lib/napcat.mjs:35
await writeFile(join(directory, 'webui.json'), JSON.stringify({ - 写入本地文件lib/napcat.mjs:125
await mkdir(logDirectory, { recursive: true, mode: 0o700 }); - 写入本地文件lib/napcat.mjs:127
try { if ((await stat(this.logPath)).size > 10 * 1024 * 1024) await rename(this.logPath, join(logDirectory, 'console.previous.log')); } - 读取本地文件lib/napcat.mjs:127
try { if ((await stat(this.logPath)).size > 10 * 1024 * 1024) await rename(this.logPath, join(logDirectory, 'console.previous.log')); } - 写入本地文件lib/napcat.mjs:140
this.log = createWriteStream(this.logPath, { flags: 'a', mode: 0o600 }); - 写入本地文件lib/util.mjs:108
appendFileSync(join(dir, 'debug.log'), `${new Date().toISOString()} ${label} (${kind}) ${String(error?.stack ?? error?.message ?? error).slice(0, 4000 - 读取本地文件lib/ui.mjs:100
const loadRaw = async () => JSON.parse(await readFile(configPath, 'utf8')); - 写入本地文件lib/ui.mjs:134
await writeFile(configPath, JSON.stringify(persisted, null, 2) + '\n'); - 写入本地文件lib/ui.mjs:201
await appendFile('C:/Users/csa/.dsh-qq-access/debug.log', new Date().toISOString() + ' client ' + JSON.stringify(Object.fromEntries(url.searchParams)) - 写入本地文件lib/qzone.mjs:60
await mkdir(this.config.profileDir, { recursive: true, mode: 0o700 }); - 发起网络请求lib/qzone.mjs:263
return isQzoneUrl(url.href) && response.request().method() === 'POST' && /add_msgb|msgb_add|msgbadd|msgb.*add|add.*msgb/i.test(url.pathname); - 读取本地文件lib/napcat-install.mjs:12
const { name: PKG_NAME, version: PKG_VERSION } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')); - 读取本地文件lib/napcat-install.mjs:29
for await (const bytes of createReadStream(path, { signal })) hash.update(bytes); - 读取本地文件lib/napcat-install.mjs:35
assert((await stat(path)).size === spec.bytes, 'NapCat 下载大小不符,文件可能不完整'); - 写入本地文件lib/napcat-install.mjs:65
await pipeline(Readable.fromWeb(response.body), counter, createWriteStream(path, { flags: 'wx', mode: 0o600 }), { signal: timeout }); - 删除本地文件lib/napcat-install.mjs:67
} catch (error) { await rm(path, { force: true }); throw error; } - 写入本地文件lib/napcat-install.mjs:81
await mkdir(destination, { recursive: true, mode: 0o700 }); - 写入本地文件lib/napcat-install.mjs:105
if (entry.fileName.endsWith('/')) { await mkdir(output, { recursive: true, mode: 0o700 }); return; } - 写入本地文件lib/napcat-install.mjs:106
await mkdir(dirname(output), { recursive: true, mode: 0o700 }); - 写入本地文件lib/napcat-install.mjs:108
await pipeline(stream, createWriteStream(output, { flags: 'wx', mode: 0o600 }), { signal }); - 读取本地文件lib/napcat-install.mjs:121
const marker = JSON.parse(await readFile(join(directory, '.dsh-qq-install.json'), 'utf8')); - 读取本地文件lib/napcat-install.mjs:123
for (const file of requiredFiles) assert((await stat(join(directory, file))).isFile(), 'NapCat 安装缺少运行文件'); - 写入本地文件lib/napcat-install.mjs:140
await mkdir(downloads, { recursive: true, mode: 0o700 }); - 删除本地文件lib/napcat-install.mjs:147
catch (error) { checkSignal(signal); if (error.code !== 'ENOENT') await rm(source, { force: true }); } - 读取本地文件lib/napcat-install.mjs:158
for (const file of requiredFiles) assert((await stat(join(stage, file))).isFile(), `NapCat 运行包缺少 ${file}`); - 删除本地文件递归lib/napcat-install.mjs:165
if (stage) await rm(stage, { recursive: true, force: true }); - 写入本地文件lib/store.mjs:13
await mkdir(dataDir, { recursive: true, mode: 0o700 }); - 读取本地文件lib/store.mjs:21
try { owner = JSON.parse(await readFile(path, 'utf8')); } catch {} - 删除本地文件lib/store.mjs:23
await rm(path, { force: true }); - 读取本地文件lib/store.mjs:35
const current = JSON.parse(await readFile(path, 'utf8')); - 删除本地文件lib/store.mjs:36
if (current.token === token) await rm(path); - 写入本地文件lib/store.mjs:46
try { await rename(temp, path); } - 删除本地文件lib/store.mjs:47
finally { await rm(temp, { force: true }); } - 写入本地文件lib/store.mjs:71
await mkdir(this.dir, { recursive: true, mode: 0o700 }); - 写入本地文件lib/store.mjs:93
await appendFile(join(this.dir, `${date}.jsonl`), JSON.stringify(entry) + '\n', { mode: 0o600 }); - 读取本地文件lib/store.mjs:101
for (const name of await readdir(this.dir)) { - 删除本地文件lib/store.mjs:102
if (/^ {4}- {2}- {2} jsonl$/.test(name) && Date.parse(name.slice(0, 10)) + 86_400_000 < cutoff) await rm(join(this.dir, name)); - 读取本地文件lib/store.mjs:108
const names = (await readdir(this.dir)).filter(n => /^\d{4}-\d{2}-\d{2}\.jsonl$/.test(n)).sort().reverse(); - 读取本地文件lib/store.mjs:141
const entries = JSON.parse(await readFile(this.path, 'utf8'));
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-llm给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 接入个人 QQ插件,集成 NapCat 托管、私聊与群聊 AI 回复、QQ 空间读取和留言功能。带有左侧栏面板,可进行可视化人设与权限管理
README
由 DeepSeek 最新模型翻译生成dsh-qq-access · NapCat 托管 + 管理面板
为 DeepSeek Harness 接入个人 QQ 私聊、群聊和 QQ 空间留言板。Windows x64 已加入 NapCat 的安装、配置与进程管理:首次下载官方运行包,之后随 Harness 启动,连接配置自动写好,扫码页就绪后自动打开。
此包包含源码与可安装的 .tgz。NapCat 官方运行包在目标电脑下载,保留原始文件与许可证,以插件管理的独立子进程运行。你不需要另外安装、手工启动或填写 NapCat 网络配置。
功能
| 功能 | 行为 |
| 安装 | 固定官方 v4.18.41 Windows Node 运行包,校验大小与 SHA256 后解压 |
| 配置 | 自动生成 API token、事件签名、本机 API 和上报连接 |
| 登录 | 自动打开本机 NapCat WebUI,用户本人扫码;等待期间 Harness 正常打开 |
| 维护 | 可查看启动/待扫码/在线状态,崩溃后最多重启 2 次,退出时停止自有进程树 |
| QQ 聊天 | 接收可上报的全部入站消息,默认私聊自动回复、群聊被 @ 时回复 |
| 历史 | 本地归档、搜索,或调用 QQ 历史接口分页查询 |
展开完整文档(README 剩余 1 节)
dsh-qq-access · NapCat 托管 + 管理面板 为 DeepSeek Harness 接入个人 QQ 私聊、群聊和 QQ 空间留言板。Windows x64 已加入 NapCat 的安装、配置与进程管理:首次下载官方运行包,之后随 Harness 启动,连接配置自动写好,扫码页就绪后自动打开。 此包包含源码与可安装的 .tgz。NapCat 官方运行包在目标电脑下载,保留原始文件与许可证,以插件管理的独立子进程运行。你不需要另外安装、手工启动或填写 NapCat 网络配置。 功能 | 功能 | 行为 | | 安装 | 固定官方 v4.18.41 Windows Node 运行包,校验大小与 SHA256 后解压 | | 配置 | 自动生成 API token、事件签名、本机 API 和上报连接 | | 登录 | 自动打开本机 NapCat WebUI,用户本人扫码;等待期间 Harness 正常打开 | | 维护 | 可查看启动/待扫码/在线状态,崩溃后最多重启 2 次,退出时停止自有进程树 | | QQ 聊天 | 接收可上报的全部入站消息,默认私聊自动回复、群聊被 @ 时回复 | | 历史 | 本地归档、搜索,或调用 QQ 历史接口分页查询 | | 图片 | 私聊/群聊里的图片转成模型可见的 image content(PNG / JPEG / GIF / WEBP,单条最多 4 张,可关) | | 空间 | 独立浏览器登录,读取可见文字,在留言板发表纯文本留言 | | 面板 | 左侧栏「QQ 接入」:自动回复开关、批量窗口与轮询、回复范围白名单、NapCat 托管、人格编辑、在线状态 | 访问范围限登录账号的权限和 QQ 接口可提供的数据,不保证补全安装前全部历史。图片会转成模型可见的内容(reply.vision 可关);语音等其它媒体仍是类型占位文字。空间不含说说评论、发说说、相册导出和权限绕过。 Windows x64 新安装 准备 Node.js 22.14+(建议 24 LTS)、提供当前 Agent/工具接口的 Harness(参考 0.2.1-rc.4),以及 QQ 空间使用的 Edge 浏览器。 1. 解压后进入 dsh-qq-access,用 PowerShell 执行: npm ci node cli.mjs setup 输入接入的 QQ 号。管理员 QQ 号可留空,留空时只在电脑上的 Harness 管理。若填写,应使用另一个 QQ 号,登录号自身的出站消息不会触发自动回复。 Windows x64 的 setup 自动启用托管模式、生成密钥并下载运行包。压缩包约 118.3 MiB,首次需要联网,之后复用本机安装。下载失败可运行 node cli.mjs napcat-install 重试。默认配置在 %USERPROFILE%\.dsh-qq-access\config.json,不会覆盖已有文件。 2. 从 Releases 下载最新的 dsh-qq-access.tgz,在 Harness 桌面版插件管理中选中它(填完整路径)。或在 CLI / Web profile 执行: dsh plugin --profile web add C:/Plugins/dsh-qq-access.tgz dsh web 如果桌面版本没有本地包入口,请升级或使用 Web profile;profile 必须与实际启动环境一致。 插件自动启动 NapCat,扫码页就绪后打开浏览器。用步骤 1 的 QQ 号扫码后自动接通。无需手填 NapCat 的 API 地址、token 或上报设置。未弹出扫码页时可执行: node cli.mjs napcat-login 如果 Harness 已运行 NapCat,此命令只打开现有登录页;否则启动临时登录进程,扫码成功后关闭,再由 Harness 启动正式实例。默认等待 10 分钟,超时后重载插件重新尝试。 3. QQ 空间仍需独立登录: node cli.mjs qzone-login 在独立 Edge 窗口中登录同一个 QQ 号,回终端按回车。空间登录状态与 NapCat 分开;关闭登录窗口后再调用空间工具。空间页面结构、权限和验证码需要在目标机器验证,结果不明确时返回 uncertain,应先查看真实页面,不要直接重发。 从 0.1.0 升级 解压新源码、执行 npm ci,然后运行: node cli.mjs napcat-enable 此命令备份原配置,保留 QQ 号、访问范围、人设和消息密钥,再启用托管并准备运行包。随后在 Harness 安装新 .tgz 替换旧包并重载。 旧配置不会被静默切换:没有 napcat 段时仍为 external 模式。若旧的手动 NapCat 已运行且账号、密钥一致,插件复用它,不修改或停止这个外部进程;要完全切换为托管,先退出旧实例再重载插件。Linux、macOS、Windows ARM 当前使用外部模式。 离线准备 从官方固定版本 Release 下载 NapCat.Shell.Windows.Node.zip,在已启用托管的配置下执行: node cli.mjs napcat-install --archive C:/Downloads/NapCat.Shell.Windows.Node.zip 文件必须与固定版本及 SHA256 对应,不能用 Framework、普通 Shell 或 OneKey 包代替。本版不自动升级未来版本。 使用与设置 在 Harness 中可以说“查看 QQ 接入状态”“列出我的群”“读取好友 234567890 最近 30 条消息”“给 QQ 234567890 发:今晚八点见”或“在 QQ 234567890 的空间留言板留言:周末快乐”。 发送和留言使用唯一 request_id,重试相同操作必须复用标识。只有 status: sent 表示成功,pending 或 uncertain 需要先核对实际结果。 | 配置项 | 默认与用途 | | napcat.mode | 新 Windows x64 配置为 managed;外部接入为 external | | napcat.autoInstall | true,缺少运行包时自动安装 | | napcat.autoOpenLogin | true,自动打开本机登录页 | | napcat.webuiPort | 6099,不得与 API、事件接收端口重复 | | napcat.maxRestarts | 2,每次加载插件期间的重启预算 | | reply.private | true,私聊自动回复 | | reply.group | mention,可改为 off 仅归档或 all 每条回复 | | access.privateMode / access.groupMode | all,可改 allowlist 或 disabled | | access.privateIds / access.groupIds | 对应白名单,QQ 号/群号使用字符串 | | ownerIds | 管理员私聊账号列表,默认空 | | ownerHarnessTools | false,进一步开放管理员的宿主其他工具权限 | | persona | 自定义称呼、性格、语气、回复习惯 | | retentionDays | 30,本插件消息归档保留天数 | 修改后重载插件。普通联系人只允许本会话聊天和历史查询,不能操作文件、终端、其他私聊或空间。管理员权限只认传输层确认的私聊账号,在群内按普通群成员处理。 聊天内容在用于回复或主动查询时会进入 Harness 配置的模型服务。归档保留期不会删除 Harness 自己保存的会话、模型服务记录、QQ 或空间登录状态。 排查与验证 node cli.mjs doctor 只读检查安装与连接,不发送消息。尚未启动 Harness 或尚未扫码时,API 离线不代表安装失败。qq_status.napcat.state 可查看启动、待扫码、在线状态;状态工具不返回 API 或 WebUI 密钥。 API、上报接收和登录页只绑定本机。端口冲突时退出冲突程序或修改配置后重载。控制台日志位于配置对应的 data/napcat/logs/console.log,可能含二维码或登录页密钥,仅用于本机排查。异常退出留下锁文件时,先确认对应进程已退出,再删除提示的锁文件。 本版已在 Linux 做本地测试,并实际下载、校验、解压固定的官方运行包;未在 Windows 运行 QQ 原生组件、未登录真实 QQ,也未完成真实 QQ 空间验收。详见 验证说明。 npm run check # 清单字段、文件完整性、语法、客户端 bundle 自检 npm test # 冒烟测试:导出形状、补丁条目、配置校验,不需要宿主 npm run release # 自检 + 测试 + 升 patch + 打包到 dist/dsh-qq-access.tgz check 会校验 dsh.bundle.patch 指向的补丁、exports 与 files 里的每个路径是否真实存在,以及客户端 bundle 里 require() 的宿主模块是否都写进了 dsh.client.external。宿主接口契约测试(tools.guard、agents.create 等)需要真实 DSH 包,不在本仓库内。 发版只需一条命令,文档里不写版本号,版本只在 package.json 维护: npm run release # 0.5.0 → 0.5.1 npm run release minor # 0.5.0 → 0.6.0 产物固定叫 dist/dsh-qq-access.tgz,上传到 Release 时不用改名。 本项目自写代码按 MIT 发布;NapCat 与官方运行包各组成部分遵循上游许可,本插件的 MIT 许可不代替它们的许可。接口和运行包依据见 来源说明。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Applepinea/dsh-qq-access
托管 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