DeepSeek Harness 的 QQ 渠道插件(OneBot v11 / SnowLuma):工具面、长期记忆、知识库、主动行为与管理后台
39.2/100
综合分
6
GitHub 星标
1,331
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-channel-qqnpm 源 · dsh-channel-qq 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-channel-qq @ 0.1.0
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 03:44:56
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 83 处,展示前 83 条)
- 读取本地文件build/lib/config.js:20
const raw = readFileSync(adminOverridePath(dshHome), 'utf-8'); - 发起网络请求build/lib/adapters/dsh-host/providers.js:216
const response = await systemHttp.request(url, { - 读取本地文件build/lib/adapters/dsh-host/model-catalog.js:15
const parsed = JSON.parse(readFileSync(path.join(root, 'assets', 'model-context.json'), 'utf8')); - 发起网络请求build/lib/adapters/dsh-host/provider-probes.js:110
const res = await systemHttp.request(probeUrl(target.baseURL, target.protocol), { - 读取本地文件build/lib/adapters/persona/fs-pack.js:30
if (existsSync(path.join(dir, 'assets', 'persona'))) - 读取本地文件build/lib/adapters/persona/fs-pack.js:61
mtimeMs = statSync(file).mtimeMs; - 读取本地文件build/lib/adapters/persona/fs-pack.js:69
const raw = readFileSync(file, 'utf8'); - 读取本地文件build/lib/adapters/persona/fs-pack.js:87
entries = readdirSync(abs); - 读取本地文件build/lib/adapters/persona/fs-pack.js:94
if (statSync(path.join(this.dir, next)).isDirectory()) - 发起网络请求build/lib/features/group-files/tools.js:74
const res = await systemHttp.request(urlData.url, { limit: MAX_DOWNLOAD_BYTES, allowPrivateHosts: true }); - 发起网络请求build/lib/features/files/tools.js:57
const res = await systemHttp.request(urlData.url, { limit: MAX_DOWNLOAD_BYTES, allowPrivateHosts: true }); - 发起网络请求build/lib/features/music/tools.js:171
const res = await systemHttp.request(lrcUrl); - 发起网络请求build/lib/adapters/http/ssrf-guard.js:263
const response = await fetch(current, { ...init, redirect: 'manual' }); - 发起网络请求build/lib/app/inbound/attachments.js:53
const res = await deps.http.request(url, { limit: MAX_INBOUND_FILE_BYTES }).catch(() => null); - 发起网络请求build/lib/app/inbound/attachments.js:133
const res = await deps.http.request(file.url, { limit: MAX_INBOUND_FILE_BYTES }).catch(() => null); - 发起网络请求build/lib/app/inbound/attachments.js:144
const res = await deps.http.request(via.url, { limit: MAX_INBOUND_FILE_BYTES }).catch(() => null); - 发起网络请求build/lib/app/inbound/attachments.js:156
const res = await deps.http.request(data.file, { limit: MAX_INBOUND_FILE_BYTES, allowPrivateHosts: true }); - 发起网络请求build/lib/app/inbound/attachments.js:161
const res = await deps.http.request(data.url, { limit: MAX_INBOUND_FILE_BYTES, allowPrivateHosts: true }); - 发起网络请求build/lib/adapters/providers/stt.js:49
const res = await systemHttp.request(`${stt.baseUrl}/audio/transcriptions`, { - 执行外部命令来自配置/变量build/lib/adapters/providers/stt.js:66
execFile(CURL, args, { encoding: 'utf8', windowsHide: true, maxBuffer: 10 * 1024 * 1024 }, (err, stdout) => { - 发起网络请求build/lib/adapters/providers/stt.js:109
const res = await systemHttp.request(url, { limit: MAX_VOICE_BYTES, allowPrivateHosts: true }); - 请求外部主机music.163.combuild/lib/adapters/providers/music-netease.js:30
const res = await systemHttp.request(`https://music.163.com${path}`, { - 发起网络请求build/lib/adapters/providers/music-netease.js:30
const res = await systemHttp.request(`https://music.163.com${path}`, { - 请求外部主机music.163.combuild/lib/adapters/providers/music-netease.js:101
const res = await systemHttp.request('https://music.163.com/api/login/qrcode/client/login', { - 发起网络请求build/lib/adapters/providers/music-netease.js:101
const res = await systemHttp.request('https://music.163.com/api/login/qrcode/client/login', { - 发起网络请求build/lib/adapters/providers/music-kugou.js:53
return await systemHttp.request(url, options); - 发起网络请求build/lib/features/music/delivery.js:31
const audio = await systemHttp.request(url, { limit: MAX_DOWNLOAD_BYTES }); - 读取本地文件build/lib/admin.js:410
const raw = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8')); - 读取本地文件build/lib/affection.js:104
const content = await fsp.readFile(path.join(dir, `${safe}.md`), 'utf-8'); - 读取本地文件build/lib/affection.js:110
for (const f of await fsp.readdir(dir)) { - 读取本地文件build/lib/affection.js:113
const st = await fsp.stat(path.join(dir, f)); - 读取本地文件build/lib/affection.js:129
const names = await fsp.readdir(sentFile).catch(() => []); - 读取本地文件build/lib/affection.js:136
const entries = JSON.parse(await fsp.readFile(path.join(sentFile, n), 'utf-8')); - 读取本地文件build/lib/affection.js:215
custom = readFileSync(this.customHtmlPath, 'utf-8'); - 发起网络请求build/lib/features/access/service.js:35
void this.request('user', id, this.nameOf(event, false), event); - 发起网络请求build/lib/features/access/service.js:77
void this.request('group', id, `群 ${id}`, event); - 发起网络请求build/lib/features/access/service.js:149
const { isNew } = await this.deps.store.request(kind, id, display, now); - 发起网络请求build/lib/knowledge.js:185
const res = await systemHttp.request(`${route.baseUrl}/chat/completions`, { - 读取本地文件build/lib/features/memory/migrate.js:62
if (!existsSync(backup)) - 发起网络请求build/lib/features/observers/inbound.js:103
const res = await this.deps.http.request(url, { limit: MAX_STEAL_BYTES }).catch(() => null); - 写入本地文件build/lib/features/proactive/executor.js:280
mkdirSync(path.dirname(file), { recursive: true }); - 写入本地文件build/lib/features/proactive/executor.js:283
writeFileSync(tmp, `${JSON.stringify(payload, null, 2)}\n`, 'utf-8'); - 写入本地文件build/lib/features/proactive/executor.js:284
renameSync(tmp, file); - 删除本地文件build/lib/features/proactive/executor.js:290
rmSync(`${file}.tmp`, { force: true }); - 发起网络请求build/lib/features/rss/feed.js:153
response = await systemHttp.request(url, { - 发起网络请求build/lib/features/skills/resource.js:87
const response = await systemHttp.request(api, { - 发起网络请求build/lib/features/skills/resource.js:104
const file = await systemHttp.request(entry.download_url, { timeoutMs: 20_000, limit: deps.config().maxImportBytes }); - 发起网络请求build/lib/features/skills/resource.js:132
const response = await systemHttp.request(rawUrlOf(url), { - 发起网络请求build/lib/adapters/providers/embed.js:81
const response = await http.request(endpoint, { - 发起网络请求build/lib/features/kb/url-ingest.js:27
const res = await http.request(url.toString(), { - 发起网络请求build/lib/emoji.js:57
const res = await this.http.request(url, { limit: MAX_STICKER_BYTES }); - 读取本地文件build/lib/adapters/providers/silk.js:35
if (!fs.existsSync(inputPath)) { - 读取本地文件build/lib/adapters/providers/silk.js:38
const fileBuf = fs.readFileSync(inputPath); - 读取本地文件build/lib/adapters/providers/silk.js:48
if (!fs.existsSync(dir)) { - 写入本地文件build/lib/adapters/providers/silk.js:49
fs.mkdirSync(dir, { recursive: true }); - 写入本地文件build/lib/adapters/providers/silk.js:53
fs.writeFileSync(wavPath, wavBuffer); - 读取密钥环境变量build/lib/adapters/fs-store/secrets.js:30
const fromEnv = process.env.CHANNEL_QQ_SECRETS_DIR; - 发起网络请求build/lib/adapters/lx-source/runtime.js:83
void http.request(target, { - 发起网络请求build/lib/adapters/lx-source/runtime.js:195
const response = await http.request(key, { timeoutMs: 20_000, limit: MAX_SCRIPT_BYTES }); - 发起网络请求build/lib/adapters/providers/imagegen.js:98
const response = await systemHttp.request(url, { - 发起网络请求build/lib/adapters/providers/imagegen.js:140
response = await systemHttp.request(url, { - 发起网络请求build/lib/adapters/providers/imagegen.js:163
response = await systemHttp.request(`${baseUrl}/images/generations`, { - 发起网络请求build/lib/adapters/providers/links/index.js:128
const head = await systemHttp.request(coverUrl, { - 发起网络请求build/lib/adapters/providers/links/index.js:145
const response = await systemHttp.request(coverUrl, { - 执行外部命令来自配置/变量build/lib/features/meme/render.js:68
const child = spawn(bin, args, { windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] }); - 读取本地文件build/lib/scheduler-state.js:62
const parsed = JSON.parse(readFileSync(this.file, 'utf-8')); - 写入本地文件build/lib/scheduler-state.js:102
mkdirSync(path.dirname(this.file), { recursive: true }); - 写入本地文件build/lib/scheduler-state.js:107
writeFileSync(tmp, `${JSON.stringify(payload, null, 2)}\n`, 'utf-8'); - 写入本地文件build/lib/scheduler-state.js:108
renameSync(tmp, this.file); - 删除本地文件build/lib/scheduler-state.js:115
rmSync(`${this.file}.tmp`, { force: true }); - 执行外部命令来自配置/变量build/lib/cruise-run.js:109
const child = spawn(plan.command, plan.args, { - 发起网络请求build/lib/features/proactive/materials.js:73
const res = await systemHttp.request(url, { timeoutMs: 10_000 }); - 执行外部命令来自配置/变量build/lib/features/proactive/script-run.js:64
child = spawn(plan.command, plan.args, { - 读取本地文件build/lib/features/proactive/state.js:40
const parsed = JSON.parse(readFileSync(this.file, 'utf-8')); - 发起网络请求build/lib/features/kb/parse.js:81
response = await systemHttp.request(url, { - 发起网络请求build/lib/adapters/providers/links/parse.js:146
const res = await systemHttp.request(url, { headers: { 'User-Agent': UA }, limit: 1024 }); - 发起网络请求build/lib/adapters/providers/links/resolvers.js:13
const res = await systemHttp.request(api, { headers, timeoutMs: 10_000 }); - 发起网络请求build/lib/adapters/providers/links/resolvers.js:43
const res = await systemHttp.request(api, { headers, timeoutMs: 10_000 }); - 请求外部主机music.163.combuild/lib/adapters/providers/links/resolvers.js:188
const res = await systemHttp.request(`https://music.163.com/api/song/detail?ids=[${songId}]`, { - 发起网络请求build/lib/adapters/providers/links/resolvers.js:188
const res = await systemHttp.request(`https://music.163.com/api/song/detail?ids=[${songId}]`, { - 请求外部主机api.github.combuild/lib/adapters/providers/links/resolvers.js:235
const res = await systemHttp.request(`https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`, { - 发起网络请求build/lib/adapters/providers/links/resolvers.js:235
const res = await systemHttp.request(`https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`, { - 发起网络请求build/lib/adapters/providers/links/resolvers.js:278
const response = await systemHttp.request(url, {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:music.163.com、api.github.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-attachment@deepseek-ai/dsh-llm给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-channel-qq
把 QQ 接入 DeepSeek Harness 的渠道插件。
通过 OneBot v11 收发消息(协议端默认用 SnowLuma, NapCat 仍可作回滚方案),以 cordis Service 形式挂进 dsh,提供工具面、长期记忆、主动行为与管理后台。
来源与致谢|Origin & Credits
本项目源自 DandanLLab/dsh-channel-qq 的早期版本:OneBot v11 传输(含半开连接看门狗与双栈绑定)、表情包库、好感度面板、音乐点歌与主动行为调度这些地基,都是从那个仓库长出来的。
感谢原作者的开源工作。 本仓库在其基础上继续演进(分层重构、长期记忆与知识库、审批网关、技能包、管理后台等),如与上游有出入,以本仓库的实现与文档为准。
非官方项目,与腾讯 / QQ 无隶属关系。协议端属于非官方实现,账号风控、掉线、要求重新验证都是常态——请自行遵守 QQ 用户协议与当地法律。
特性
- 消息:群聊 / 私聊、图片、语音、文件、引用回复、戳一戳,自动分句发送
- 工具面:90 个细粒度工具;tools.v2 下合并为 18 个动作组(qq_message、qq_lookup…
展开完整文档(README 剩余 1 节)
dsh-channel-qq
把 QQ 接入 DeepSeek Harness 的渠道插件。
通过 OneBot v11 收发消息(协议端默认用 SnowLuma, NapCat 仍可作回滚方案),以 cordis Service 形式挂进 dsh,提供工具面、长期记忆、主动行为与管理后台。
来源与致谢|Origin & Credits
本项目源自 DandanLLab/dsh-channel-qq 的早期版本:OneBot v11 传输(含半开连接看门狗与双栈绑定)、表情包库、好感度面板、音乐点歌与主动行为调度这些地基,都是从那个仓库长出来的。
感谢原作者的开源工作。 本仓库在其基础上继续演进(分层重构、长期记忆与知识库、审批网关、技能包、管理后台等),如与上游有出入,以本仓库的实现与文档为准。
非官方项目,与腾讯 / QQ 无隶属关系。协议端属于非官方实现,账号风控、掉线、要求重新验证都是常态——请自行遵守 QQ 用户协议与当地法律。
特性
- 消息:群聊 / 私聊、图片、语音、文件、引用回复、戳一戳,自动分句发送
- 工具面:90 个细粒度工具;tools.v2 下合并为 18 个动作组(qq_message、qq_lookup…)
- 群聊准入:进 agent 之前先判"要不要说话";非 @ 消息不进队列,省上下文与模型调用
- 长期记忆:日记 → 结构化记录 → 检索;夜间九个任务(分块 / 抽取 / 反思 / 遗忘 / 摘要 / 向量重建)
- 每回合自动注入 3–8 条证据(≤600 字);qq_memory_search 深召回原文块(带文件行号)
- 可选向量检索:本机 embed 服务(deploy/embed-server/),不开就退回关键词
- 主动行为:事件书驱动巡逻、早报、主动私聊——时间表是数据,不是代码
- 技能:磁盘上的 Agent Skills 目录包(SKILL.md),按房间定可见范围(全部 / 仅私聊 / 指定群 / 指定房间 / 仅管理员),模型自动发现 + /名字 直接触发;后台可增删改、从 URL 或粘贴导入(先落待审区)
- 管理后台:27 个页面,配置热生效、审计、会话重建、模型供应商管理
- 发送侧探针:/api/healthz 用一次 get_status 往返判断"消息发不发得出去",不产生消息、只接受本机请求
- 曲库账号:后台「音乐」页扫码登录网易云 / 酷狗(二维码在浏览器本地生成),可看登录态、清除登录、先搜一首歌自检,不必等群里点歌才发现没登录
- 审批网关:高危命令 L0–L3 分级 + 一次性令牌;管理员在 QQ 私聊回一句「批准」即可执行(待批 / 申请 / 批准 / 拒绝,全程不经模型)
- 交互提示(可选,默认关):私聊回合显示「正在输入」,群里给触发消息贴一个表情回应
- 合并转发(可选,默认关):长清单/日志/总结改发一张聊天记录卡片,失败自动回退逐条
- 指标(可选,默认关):回合耗时 p50/p90、token 四个桶、发送/工具失败,后台按房间与天看
- 原话簿(可选,默认关):按群按日保存原始消息流水(<工作区>/chatlog,默认保留 14 天), qq_group_digest 可按日期翻某群聊了什么
- 人物档(可选,默认关):qq_person_note 手动记录「谁爱用什么说法、忌讳什么」,按群分开存,与自动侧写互补
- 渠道健康告警(可选,默认关):消息链路失联超过阈值私聊管理员,恢复后再报,同场故障限频
- 访问门控(默认开):陌生人私聊 / 未批准的群只回一句「待主人批准」,不进 agent;后台「安全」页批准后才放行(也可切白名单或全放行)
与其它 QQ 接入方案的分工
dsh 生态里已经有几种 QQ 接入,定位不同:
| 方案 | 接入 | 适合 |
| 官方 dsh-qqbot | QQ Bot API v2 | 官方机器人身份、扫码、流式回复;不接个人号 |
| dsh-im | 13 个 IM 渠道 | 一个插件同时接多种平台,广而薄 |
| 本项目 | OneBot v11(SnowLuma) | 个人 QQ 号 + 完整群能力:长期记忆、知识库、主动行为、审批、技能包、群运营 |
选型建议:要官方身份与流式,用官方插件;要一次接多个平台,用 dsh-im;要一个「住在群里」的长期陪伴/群运营机器人,用本项目。
快速开始
需要 Node.js 22+、一个 dsh 宿主、一个 OneBot v11 协议端。
npm install
npm run build # 生成后台前端 + 编译 TypeScript
npm run verify # 类型 + 测试 + 分层 + 体积,全绿再继续
挂载(<dshHome>/profiles/<profile>/cordis.patch.yml):
- id: channel-qq
config:
connection: { mode: forward, url: ws://127.0.0.1:3001 }
accessToken: <OneBot access token>
selfId: <机器人 QQ 号>
admins: [<管理员 QQ 号>]
primaryGroup: <主群号> workspacePath: /path/to/agent-workspace
部署与运维细节见 docs/deployment.md。
文档
| 文档 | 内容 |
| docs/architecture.md | 分层、消息旅程、关键决定、往哪里加东西 |
| docs/configuration.md | 配置三层覆盖、生效方式、环境变量 |
| docs/deployment.md | 部署、发布、回滚、故障排查 |
| docs/memory.md | 记忆系统:夜间任务、embed 服务、评测与限制 |
| docs/memory-standalone.md | 记忆库插件化:脱离 cordis 独立使用 |
| SECURITY.md | 威胁模型与部署清单 |
| CONTRIBUTING.md | 门禁、硬规则、提交信息 |
开发
npm run verify # 门禁
npm run eval # 行为评测(红队 7 + 场景 15 + 人格 30 + 转录 8 + 记忆基准)
npm run audit # 静态审计
npm run probe:admin # 后台浏览器回归(headless Chrome)
- test/golden/ 是逐字节快照:改动输出必须先解释差异,不能静默更新。
- 每个改变行为的升级都必须带独立开关、默认关——关着时与旧版逐字节一致。
目录
src/
core/ 纯逻辑(可重放) app/ 入站流水线、组包、回合 features/ 子插件(工具、记忆、主动行为、后台、审批…)
adapters/ 宿主与外部世界 config/ 配置 schema 与页面清单 assets/persona/ 人格与提示词(纯文本) deploy/ 发布、备份、审批执行器 eval/ 行为评测 scripts/ 构建与门禁
安全
管理后台是远程控制面:默认只监听 127.0.0.1,请通过 SSH 隧道访问;口令只从环境变量读取。详见 SECURITY.md。
访问门控:默认 access.mode = pairing——陌生 QQ 的私聊、以及尚未批准的群里的消息,只会收到一句「待主人批准」,不会进入智能体;主人在后台「安全」页批准后放行。
管理员始终允许。需要预先授权时可把模式改成 allowlist,用 access.allowUsers / access.allowGroups 指定名单;open 是旧的全放行行为,不建议在公网使用。
管理员也可以直接私聊机器人处理,不必开后台:
| 私聊命令 | 作用 |
| 待批访问 / 访问请求 | 列出待批的人/群,并给出可复制的放行命令 |
| 放行 999 | 批准某个 QQ 的私聊 |
| 放行群 107 | 批准某个群 |
| 拒绝访问 999 / 拒绝访问群 107 | 拒绝 |
这些命令只认管理员私聊,且在高危命令审批网关之前处理(动词刻意用「放行」,不与网关的「批准/拒绝」冲突)。
群策略 access.groupPolicy:
| 值 | 行为 |
| member(推荐) | 机器人已经在的群直接放行——加群本身就是主人操作,不用逐群批准 |
| pairing(默认) | 未批准的群先申请,和私聊一样待主人批准 |
| allowlist | 群只认 allowGroups 与后台已批准列表 |
私聊始终按 mode 走配对/白名单。群消息仍然受 groupEnabled、requireMention 与「群聊与房间」里的按群覆盖约束——那两处管的是“怎么回”,访问门控管的是“能不能触发”。
未批准的群默认完全安静:只有真正 @ 或命中关键词的消息才会生成一条请求并私聊通知主人,群里不回「待主人批准」(access.replyPendingInGroups 可打开,且每个请求只回一次)。
没人叫机器人的闲聊不会触发配对,也不会刷屏。
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Aegink/dsh-channel-qq
DeepSeek Harness 的 QQ 渠道插件(OneBot v11 / SnowLuma):工具面、长期记忆、知识库、主动行为与管理后台
相关插件 · 平台集成
智能体工程课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