🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

游戏助手套件 yuanstarstar/dsh-game-stack

DeepSeek Harness
yuanstarstar5 天前有提交已提供中文文档扫描:含敏感能力

装好即用的游戏感知、学习与直播插件合集

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yuanstarstar/dsh-game-stack
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · vision
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 73 处,展示前 53 条)
  • 读取本地文件
    01-coach-perceive/bundle/host.js:122
    if (!existsSync(base)) return undefined
  • 读取本地文件
    01-coach-perceive/bundle/host.js:125
    dirs = readdirSync(base)
  • 读取本地文件
    01-coach-perceive/bundle/host.js:131
    if (existsSync(p)) return p
  • 读取本地文件
    01-coach-perceive/bundle/host.js:171
    if (!existsSync(SIDECAR)) throw new Error(`sidecar 脚本不存在:${SIDECAR}`)
  • 执行外部命令来自配置/变量
    01-coach-perceive/bundle/host.js:182
    const proc = spawn(this.python, args, {
  • 发起网络请求
    01-coach-perceive/bundle/host.js:231
    res = await fetch(this.base + path, { ...init, signal: AbortSignal.timeout(timeoutMs) })
  • 写入本地文件
    01-coach-perceive/bundle/host.js:508
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    01-coach-perceive/bundle/host.js:510
    writeFileSync(file, JSON.stringify({ ...facts, __savedAt: new Date().toISOString() }, null, 2), 'utf8')
  • 读取本地文件
    01-coach-perceive/bundle/host.js:539
    const bytes = readFileSync(data.path)
  • 发起网络请求
    02-game-learn/bundle/client.js:186
    const response = await fetch(`${base}${path}`, { credentials: 'same-origin' })
  • 发起网络请求
    02-game-learn/bundle/client.js:193
    const response = await fetch(url, {
  • 读取本地文件
    02-game-learn/bundle/lib/coach.js:80
    cache = normalizeLibrary(JSON.parse(await readFile(file, 'utf8')))
  • 写入本地文件
    02-game-learn/bundle/lib/coach.js:88
    await mkdir(dirname(file), { recursive: true })
  • 写入本地文件
    02-game-learn/bundle/lib/coach.js:90
    await writeFile(tmp, `${JSON.stringify(cache, null, 2)}\n`, 'utf8')
  • 写入本地文件
    02-game-learn/bundle/lib/coach.js:91
    await rename(tmp, file)
  • 写入本地文件
    02-game-learn/bundle/lib/coach.js:648
    await appendFile('D:\\插件\\game-stack\\diag-theme.json', `${JSON.stringify({ at: now(), body })}\n`, 'utf8')
  • 写入本地文件
    02-game-learn/bundle/lib/guard.js:381
    mkdirSync(this.root, { recursive: true })
  • 写入本地文件
    02-game-learn/bundle/lib/guard.js:386
    mkdirSync(d, { recursive: true })
  • 读取本地文件
    02-game-learn/bundle/lib/guard.js:396
    if (!existsSync(path)) return fallback
  • 读取本地文件
    02-game-learn/bundle/lib/guard.js:397
    return JSON.parse(readFileSync(path, 'utf8'))
  • 写入本地文件
    02-game-learn/bundle/lib/guard.js:405
    writeFileSync(tmp, JSON.stringify(payload, null, 2), 'utf8')
  • 写入本地文件
    02-game-learn/bundle/lib/guard.js:406
    renameSync(tmp, path)
  • 写入本地文件
    02-game-learn/bundle/lib/guard.js:437
    appendFileSync(file, `${JSON.stringify(entry)}\n`, 'utf8')
  • 读取本地文件
    02-game-learn/bundle/lib/guard.js:439
    const text = readFileSync(file, 'utf8')
  • 写入本地文件
    02-game-learn/bundle/lib/guard.js:442
    writeFileSync(file, `${lines.slice(-MAX_LEDGER_LINES).join('\n')}\n`, 'utf8')
  • 读取本地文件
    02-game-learn/bundle/lib/guard.js:452
    if (!existsSync(file)) return []
  • 读取本地文件
    02-game-learn/bundle/lib/guard.js:453
    const lines = readFileSync(file, 'utf8').split('\n').filter(Boolean)
  • 读取本地文件
    02-game-learn/bundle/lib/guard.js:472
    return readdirSync(this.root, { withFileTypes: true })
  • 读取本地文件
    02-game-learn/bundle/lib/rules.js:69
    if (!existsSync(file)) throw new Error(`facts 文件不存在:${file}(先让感知层调 coach_facts 落盘)`)
  • 读取本地文件
    02-game-learn/bundle/lib/rules.js:70
    const raw = readFileSync(file, 'utf8')
  • 读取本地文件
    02-game-learn/bundle/lib/rules.js:374
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
  • 写入本地文件
    02-game-learn/bundle/lib/rules.js:374
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
  • 读取本地文件
    02-game-learn/bundle/lib/rules.js:380
    if (!existsSync(file)) return fallback
  • 读取本地文件
    02-game-learn/bundle/lib/rules.js:381
    const raw = readFileSync(file, 'utf8').replace(/^ FEFF/, '')
  • 读取本地文件
    02-game-learn/bundle/lib/rules.js:391
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
  • 写入本地文件
    02-game-learn/bundle/lib/rules.js:391
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
  • 写入本地文件
    02-game-learn/bundle/lib/rules.js:393
    writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf8')
  • 写入本地文件
    02-game-learn/bundle/lib/rules.js:394
    renameSync(tmp, file)
  • 写入本地文件
    02-game-learn/bundle/lib/rules.js:439
    writeFileSync(file, `${keep.join('\n')}\n`, 'utf8')
  • 写入本地文件
    02-game-learn/bundle/lib/rules.js:482
    writeFileSync(file, `${lines.slice(-MAX_DECISIONS).join('\n')}\n`, 'utf8')
  • 读取本地文件
    03-cv-recall/bundle/host.js:69
    if (!existsSync(base)) return undefined
  • 读取本地文件
    03-cv-recall/bundle/host.js:72
    dirs = readdirSync(base)
  • 读取本地文件
    03-cv-recall/bundle/host.js:78
    if (existsSync(p)) return p
  • 读取本地文件
    03-cv-recall/bundle/host.js:118
    if (!existsSync(SIDECAR)) throw new Error(`sidecar 脚本不存在:${SIDECAR}`)
  • 执行外部命令来自配置/变量
    03-cv-recall/bundle/host.js:125
    const proc = spawn(this.python, args, {
  • 发起网络请求
    03-cv-recall/bundle/host.js:176
    res = await fetch(this.base + path, { ...init, signal: AbortSignal.timeout(timeoutMs) })
  • 读取本地文件
    03-cv-recall/bundle/host.js:490
    if (attachments?.saveImage && d.frame?.path && existsSync(d.frame.path)) {
  • 读取本地文件
    03-cv-recall/bundle/host.js:492
    data: new Uint8Array(readFileSync(d.frame.path)),
  • 发起网络请求
    04-live-bridge/bundle/client.js:41
    response = await fetch(`${API}${path}`, init)
  • 发起网络请求
    04-live-bridge/bundle/lib/tts.js:111
    const response = await fetch(URL, {
  • 执行外部命令固定命令
    04-live-bridge/bundle/lib/tts.js:159
    const child = spawn('powershell', ['-NoProfile', '-NonInteractive', '-Command', script], {
  • 发起网络请求
    04-live-bridge/bundle/lib/util.js:20
    const response = await fetch(url, { ...init, signal: controller.signal })
  • 发起网络请求
    05-launcher/bundle/client.js:927
    const response = await fetch(API + path, init);
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DSH 打游戏插件合集:游戏感知 / 视觉实体 / 游戏学习(规则+流程+闸门+知识库)/ 直播桥 / 启动器,5 个可安装 bundle 一键安装

README

由 DeepSeek 最新模型翻译生成
DSH 打游戏插件合集(2026-10-29) 对应 docs/DSH通用打游戏-插件经验报告.md 的七个章节,收成 5 个可安装 bundle。 报告里 §2.3/§2.4/§2.5 是三条腿,本次已合并进一个包(02-game-learn),侧边栏只算一个入口。 | 报告章节 | 目录 | 包名 | 这一腿负责什么 | 运行时依赖 | | §2.1 coach_ | 01-coach-perceive/ | @local/dsh-coach-perceive-v3 0.2.0 | 眼睛和手:抓帧、OCR、点击、按键、驱动推剧情、OBS 锚定 | Python 3.10+ / numpy / Pillow | | §2.2 cv_ | 03-cv-recall/ | @local/dsh-cv-recall 0.1.0 | 把画面编译成实体包,之后零视觉 token 读盘面 | Python 3.10+ / numpy / Pillow | | §2.3+§2.4+§2.5 | 02-game-learn/ | @local/dsh-game-learn-v2 0.2.1 | 规则引擎 + 流程状态机 + 四道闸门 + 知识库(合一) | 纯 JS,无依赖 |
展开完整文档(README 剩余 1 节)
DSH 打游戏插件合集(2026-10-29)

对应 docs/DSH通用打游戏-插件经验报告.md 的七个章节,收成 5 个可安装 bundle。
报告里 §2.3/§2.4/§2.5 是三条腿,本次已合并进一个包(02-game-learn),侧边栏只算一个入口。

| 报告章节 | 目录 | 包名 | 这一腿负责什么 | 运行时依赖 |
| §2.1 coach_ | 01-coach-perceive/ | @local/dsh-coach-perceive-v3 0.2.0 | 眼睛和手:抓帧、OCR、点击、按键、驱动推剧情、OBS 锚定 | Python 3.10+ / numpy / Pillow |
| §2.2 cv_ | 03-cv-recall/ | @local/dsh-cv-recall 0.1.0 | 把画面编译成实体包,之后零视觉 token 读盘面 | Python 3.10+ / numpy / Pillow |
| §2.3+§2.4+§2.5 | 02-game-learn/ | @local/dsh-game-learn-v2 0.2.1 | 规则引擎 + 流程状态机 + 四道闸门 + 知识库(合一) | 纯 JS,无依赖 |
| §2.6 live_ | 04-live-bridge/ | @local/dsh-live-bridge 0.1.0 | 读弹幕、语音说话 | 需自己扫码登录 / 填 TTS key |
| §2.7 launcher_ | 05-launcher/ | @local/dsh-launcher 3.3.2 | 装游戏、管实例、查版本 | 纯 JS |

体积:约 2.0 MB / 145 个文件。安装见 INSTALL.md,一键脚本 install-all.ps1。

工具命名(装好后应该出现这些)

- coach_(约 25 个):coach_windows coach_anchor coach_now coach_diff coach_snapshot coach_frame coach_click coach_click_text coach_key coach_key_probe coach_drive coach_select_page coach_target_enemy coach_execute coach_state_json coach_ui_dump coach_dismiss coach_cancel coach_wait_stable coach_scene_define coach_scene_list coach_facts coach_click_log
- cv_:cv_learn cv_recall cv_act
- game_coach_:game_coach_game game_coach_research game_coach_strategy game_coach_turn
- rules_:rules_doc rules_list rules_save rules_run rules_replay rules_results rules_outcome rules_stats rules_toggle rules_delete
- flow_ / turn_card:flow_get flow_learn flow_save turn_card
- guard_:guard_doc guard_schema guard_calc guard_check guard_reconcile guard_stats
- live_:live_danmaku_read live_speak
- launcher_:launcher_status launcher_list_games launcher_list_versions launcher_install_game launcher_launch_game 等

侧边栏入口:游戏学习(四页签:概览 / 游戏与策略 / 规则与流程 / 闸门)、游戏感知、视觉实体、直播桥、启动器。

数据落在哪(升级/重装都不丢)

| 插件 | 目录 |
| 感知输入 | %USERPROFILE%\.dsh\coach-perceive\(last-facts.json、input-log.jsonl)+ %TEMP%\coachd-frames\ |
| 视觉实体 | %USERPROFILE%\.dsh\cv-recall\(packs/)+ %TEMP%\cv-recall-frames\ |
| 游戏学习 | %USERPROFILE%\.dsh\game-coach\library.json、.dsh\game-guard\、.dsh\rule-workbench\(规则/流程/台账/sessions.jsonl) |
| 直播桥 | <插件目录>\data\config.json、bili_credentials.json、voice_credentials.json |
| 启动器 | %USERPROFILE%\.dsh-launcher\data\(游戏素材/实例记录,可能 GB 级) |

合并版刻意沿用旧目录名(game-coach / game-guard / rule-workbench),之前积累的策略、规则、台账可直接复用。

包里刻意没有的东西

- ❌ 任何登录凭证与 API key:B 站 cookie、TTS key、OBS 密码都不进包。直播桥的 data\ 目录(bili_credentials.json / voice_credentials.json / config.json)已排除,首次运行自己生成、自己扫码/填 key。OBS 密码只在工具入参或环境变量 COACH_OBS_PASSWORD 里。
- ❌ node_modules、__pycache__、.git、测试截图、tools/ui/.png、.tmp- 调试文件。
- ❌ 启动器的 1.2 GB 游戏素材(data/game-data)。
- ⚠️ 各包的 SOURCE.json 记录了本机原始路径,分发前可删。

已知边界(来自实战报告)

1. cv_ 实体包按分辨率写死,换窗口尺寸要重编。
2. flow_ 要等场景识别稳定后再 flow_learn,否则会反推出一套错的阶段机。
3. coach_ 依赖 Python 侧车;缺 numpy/Pillow 会在工具回执里直说。
4. live_ 的发弹幕/说话需要真凭据,属「你自己填」的部分。
预览分享卡片长什么样 ↓yuanstarstar/dsh-game-stack
分享 · DeepSeek Harness Hub
yuanstarstar/dsh-game-stack

装好即用的游戏感知、学习与直播插件合集

这是你的仓库?认领条目

回到顶部