dsh-fc-games:DSH Web 右侧栏 FC/NES 游戏库与模拟器

前言

在 DeepSeek Harness(DSH)里长时间挂着 Session 时,右侧栏往往只有工作区、对话等面板。若想在同一会话里直接搜 ROM、试玩、存档,而不另开浏览器标签或本地模拟器,就需要一个挂在 Web 客户端上的游戏库插件。社区插件 dsh-fc-games(维护者 flyingfishzxf)把 FC/NES 资源检索、下载缓存和基于 jsnes 的游玩界面集成进 DSH Web 右侧栏,并辅以红白机风格的界面与本地存档。下面介绍它的定位、能力与用法。

这是什么

dsh-fc-games 是 DSH 的 Web 客户端插件(package.json 中 dsh.client.platform 为 web)。安装后,左侧全局面板的列表里会出现 FC games 一行(位于 Workspaces 区块上方);点击后在当前 Session 的 右侧 Sidebar 打开游戏库标签页,再次点击会聚焦已有标签而非重复创建。若当前没有选中 Session(英雄页),库会回退到中央面板显示。

右侧栏标签页提供:多来源搜索、最近游玩架、原生模拟器页面、本地 .nes 导入等。插件当前版本为 0.1.1,许可证 MIT,运行时要求 Node.js >= 22,并依赖 DSH Cordis ~4.1.0 与若干 @deepseek-ai/dsh-client-* 对等依赖。

核心功能

游戏库与搜索

  • 多来源并行搜索:可在搜索框下方用 Source 选择 All sources(并行查询 Internet Archive 与内置 GitHub FC 合集后合并去重)、单独选 Archive 或 GitHub 合集,或用户自定义 JSON 源。
  • 中文别名:搜索支持如「魂斗罗」「超级马里奥」「坦克大战」等标题别名。
  • 最近游玩:带封面、游玩次数与相对时间的最近游玩架。
  • All / Downloaded:在最近游玩架上方切换全部列表与仅已下载视图,并显示已缓存数量。

卡片与下载

  • 未缓存:View 打开确认面板(封面、说明、可玩文件列表,不自动下 ROM);Download 仅在用户确认后下载并开始。
  • 已缓存:显示 Continue(恢复自动存档)与 Restart(用缓存 ROM 从头开始,不恢复自动存档状态)。
  • 点击封面或标题只打开详情,不会单独触发下载。
  • 已缓存卡片带删除按钮;确认后会移除缓存 ROM、该游戏全部存档/自动存档、以及最近游玩记录,源项仍可再次下载。

模拟器(jsnes)

右侧栏内嵌原生游戏页,基于捆绑的 jsnes(Apache-2.0)。能力包括:键盘与手柄、双人、存档位读写、自动存档/继续、快进、倒带、全屏、音量/静音、截图、FPS/速度显示、Game Genie 金手指等。

长时间游玩相关设定(README 原文):倒带快照约每 3 秒采样(6 个槽位);空闲时自动存档;音频批处理;页面或右侧栏标签隐藏时模拟器暂停。

自定义源与添加链接

Manage sources 可添加自定义 JSON 端点,URL 中可使用 {query}、{page} 占位符,例如:

https://example.com/search?q={query}&page={page}

响应可为数组,或 { "items": [...] } / { "results": [...] },条目形状示例:

{
  "items": [
    {
      "title": "Contra",
      "url": "https://example.com/roms/contra.nes",
      "year": 1987,
      "cover": "https://example.com/covers/contra.jpg",
      "page": "https://example.com/games/contra"
    }
  ]
}

无 {query} 的 URL 视为静态索引并在本地过滤。接受直接 .nes 与含 .nes 的 ZIP(Host 解压 ZIP 内第一个可玩 ROM)。自定义源定义保存在当前浏览器的 localStorage。

Add link 可粘贴游戏页或直连 .nes/.zip URL;Host 经代理抓取页面(上限 2 MB),解析 Open Graph/标题/描述与封面,并取页面上第一个直连 .nes 或 .zip 链接。解析结果存入 localStorage 的 Linked games,行为与其他卡片一致。仅接受公开 HTTPS;无直连 ROM 的页面会报错。

画面比例与操作

游戏画面提供三种比例(保存在当前浏览器):4:3 TV(默认)、16:9 widescreen、16:15 pixel。工具栏 ▭ Aspect ratio 或 Controls → Aspect ratio 中切换。

默认玩家 1 键盘:方向键为十字键,A=X,B=Z,Turbo A=S,Turbo B=A,Start=Enter,Select=Right Shift;玩家 2 用小键盘 8/2/4/6 等。手柄为标准映射,可在 Controls 中重映射。P 在游戏区有焦点时暂停;连发在 Controls 中按 Auto-fire A/B 独立配置。

界面为 Famicom 风格深色 CRT:红金面板、像素边框、卡带式卡片与扫描线等;内容列最大宽度 1200px。

Host 与数据

安装后 Host 注册受 token 保护的路由 /fc-games-api;浏览器通过单次 Typert Remote fcGames.bootstrap 获得随机 token,且不写入持久化存储。

ROM 下载经 Host 代理(archive.org 下载端无 CORS);Host 仅请求 archive.org 主机并在返回前校验 iNES 头。ROM、存档、截图、自动存档留在浏览器 IndexedDB/localStorage,无服务端存档库。插件本身不附带 ROM 或封面图。README 要求:仅游玩你有权游玩的游戏。

安装与启用

推荐从 GitHub 直接安装:

dsh plugin --profile web add github:flyingfishzxf/dsh-fc-games

本地开发时,可用 DSH Web Plugin Manager 安装目录(README 示例路径为 C:\fish\Personal_Apps\dsh-fc-games),或在 agent session 中对 plugin_manager 调用 action: "install_bundle" 并传入该绝对路径。

安装完成后刷新浏览器以加载新的客户端 bundle。

典型用法

  1. 在 DSH Web 左侧全局面板点击 FC games,于当前 Session 右侧栏打开库。
  2. 在搜索框输入英文名或中文别名,用 Source 选择 All sources 或单一来源;需要时通过 Manage sources 添加 JSON 源。
  3. 对未缓存游戏点 View 预览,再点 Download 下载并游玩;已缓存则 Continue 或 Restart。
  4. 仅有网页或直链时,用 Add link 粘贴 URL,在 Linked games 中管理。
  5. 库内无法在线获取时,使用本地 .nes 导入(README 所列能力)。
  6. 游玩中在 Controls 配置键位、连发与画面比例;需要时在 All / Downloaded 中清理缓存。

适用场景与注意

适合在 DSH Web 会话内快速检索、试玩 NES ROM,并希望存档与最近记录留在本机浏览器的用户。不适合需要非 NES 格式或脱离 DSH 独立运行的场景(插件明确 NES only:.nes 且 iNES / NES 2.0 头)。

插件以当前 dsh 进程权限运行,并会代理解析/下载外部 URL;安装前请自行查看 GitHub 仓库 源码与 MIT 许可证。社区目录 SkillHub 插件页 为独立生态索引,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-fc-games 把多来源 FC 库、链接解析、缓存管理与 jsnes 模拟器收进 DSH Web 右侧栏,适合在同一会话里间断式怀旧试玩。进一步了解可访问目录页 https://www.skillhub.cn/plugins/flyingfishzxf/dsh-fc-games 与源码 https://github.com/flyingfishzxf/dsh-fc-games。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye