- Home
- Plugins
- Just for Fun
- dsh-red-alert
dsh-red-alert
vibeinging/dsh-red-alert
Real Red Alert 2 AI battlefield for DeepSeek Harness with fog-safe control and post-match learning
Install
dsh plugin --profile web add github:vibeinging/dsh-red-alertREADME
DSH Red Alert
真实 AI 战场。让 DeepSeek 在一局真正的红警 2 里建基地、调兵、交战、失败、复盘,然后带着经验进入下一局。
这不是截图识别,不是 Canvas 战术图,也不是藏在后台的 headless 模拟。中间是 DSH 原生 Chat,模型的判断、工具调用和战报持续可见;右边是同一浏览器实例、同一座战场、同一个 AI 席位正在运行的真实红警 2 兼容客户端。用户随时可以在 Chat 里插入命令,改变下一步指挥。
如果你想看 Agent 不只“回答问题”,而是在真实规则、战争迷雾和失败代价下持续行动,这可能是 DSH 里最直观、最好玩的演示之一。

上图是完整 DSH 页面:左侧 session,中间模型判断,右侧真实游戏画面。截图来自使用者自行提供本地 RA2 资源的实战;仓库不包含游戏素材。
它为什么好玩
- 看得到思考:模型每轮的态势判断、生产计划、批量命令和工具回执都留在 Chat。
- 能直接干预:输入“先守住第一波”“保持两个矿车”或“暂停扩张,出三辆坦克”,用户命令会进入后续指挥上下文。
- 输赢都是真的:经济、电力、建造队列、寻路、交火、战争迷雾和结算都来自右侧真实客户端。
- 不是一次一条慢慢点:一个工具调用可以批量下达多单位命令,精确回执同时带回最新战场摘要,减少重复观察。
- 会把失败变成规则:自然终局后生成结构化 episode,模型采用或拒绝候选经验;下一局按地图、阵营和对手取回短策略。
- 公平但不迟钝:模型只看本方、当前视野敌人和冻结的最后发现记录,不读隐藏敌军,却可以比人更稳定地检查队列和并行安排动作。

一分钟开始
需要 Node.js 22.19 以上、pnpm 11、Bun 和 Git。本插件只适配当前最新版 @deepseek-ai/dsh@0.1.1-rc.2,不兼容旧版 DSH。
mkdir dsh-red-alert-play
cd dsh-red-alert-play
pnpm init
pnpm add @vibeinging/dsh-red-alert@0.1.1 @deepseek-ai/dsh@0.1.1-rc.2
pnpm exec dsh-red-alert-setup --profile web
pnpm exec dsh-red-alert
dsh-red-alert-setup 会检查环境、准备锁定的兼容客户端、把已发布插件挂载到 DSH Web Profile,并验证最终配置。它还会保存一个稳定的本地 renderer 端口,让第一次导入的浏览器游戏资源在重启后继续可用。以后只需运行 pnpm exec dsh-red-alert。它不会修改 DSH 源码 checkout,也不会下载红警 2 美术或声音素材。
第一次打开战场时,选择你自己有权使用的 RA2 资源归档。公开 NPM 包和兼容客户端都不包含游戏美术、声音或地图素材。
从源码安装
git clone https://github.com/vibeinging/dsh-red-alert.git
cd dsh-red-alert
pnpm run setup -- --profile web
pnpm run dsh
源码模式会额外安装依赖并构建插件;NPM 模式直接使用包内已经发布的 Host、浏览器和类型产物,不会尝试在 node_modules 中重新构建。
第一次打开战场时,在页面中选择你自己有权使用的 RA2 资源归档。已验证的最小归档只需要:
RA2.MIXLANGUAGE.MIXMULTI.MIX
音乐、Taunts、电影、exe 和 dll 不需要进入最小归档。导入发生在浏览器本地,插件不把素材写入 DSH 安装目录,也不随仓库或包分发素材。
第一次建局会打开兼容客户端的本地文件选择器。选择完成前,模型的建局命令会显示为可恢复失败;导入后可在同一个 Chat 直接重试。安装器保存的稳定本地端口保证后续启动复用同一个浏览器资源空间。若该端口被别的程序占用,请重新运行 setup,或用 --renderer-port <空闲端口> 明确选择。
源码更新后重新运行同一条准备命令即可复核构建和挂载:
git pull --ff-only
pnpm run setup -- --profile web
直接这样指挥
在 DSH Chat 中使用自然语言即可,例如:
创建一局苏军对普通 AI,速度 2,自动打完并复盘。
先守住第一波,保持两个矿车,再转三辆犀牛坦克。
敌人进视野后集中攻击威胁最高的目标,不要追进战争迷雾。
失败后总结本局,只采用有明确证据的规则,并带到下一局。
模型会先按需加载开局或学习工具,再随着阶段进入观察、生产、建设和战斗工具。未加载的工具 schema 不进入模型上下文。
赛后不是一句“下次努力”

自动学习不训练或修改模型权重,也不保存自由文本提示。插件只从公平战场数据和已经准入的命令结果中计算封闭候选规则,记录证据,再由模型选择采用或拒绝。后续对局只取回少量、匹配当前地图和阵营的规则,避免经验无限堆进上下文。
速度 2 的三局连续实战已经证明经验能跨局保存并被下一局读取;该样本中前两局失败,第三局在 tick 24090 时仍存活并完成更完整的防御与装甲生产。它证明学习链路在工作,不证明当前策略已经达到稳定胜率。完整过程见自动增强与连续对战报告。
内置战场手册,不再瞎猜代号
strategy/learning 组新增 red_alert_field_manual。模型可以在开局前只读取一个需要的主题:建筑、步兵、载具与空军、开局或交战;还可以按苏军、盟军或通用内容过滤。建筑和单位的代号、价格、前置条件来自 Red Alert 2 rules.ini,开局和交战规则来自公开战术资料与本插件的公平对局复盘。
手册明确区分 NAWEAP/GAWEAP 陆军战车工厂和 NAYARD/GAYARD 船厂,并给出基础兵种用途、三辆核心坦克、首轮反步兵防御、编队掩护、当前视野侦察与 last-seen 使用边界。每次查询的完整页面都会写入 session 日志;它只提供公开静态知识,不会带入敌方隐藏位置、经济或单位。
真实战场,不作弊
Chat、工具、bridge、引擎和画面持续绑定同一个 sessionId、matchId、AI seat 和 tick。
模型可见敌情只有三类:
visibleEnemies:当前真实视野内的敌人。lastSeenEnemies:敌人离开视野前最后一次合法观察;位置、生命值和observedAtTick在隐藏期间冻结。visibleNeutralObjects:当前真实视野内的中立对象。
模型不能访问敌方隐藏出生点、敌方经济、全图对象、debug state、观察者视角、Canvas 像素或未过滤的引擎对象。renderer 和模型 bridge 共用当前 LOS 规则;建筑放置也只在当前视野内搜索合法地基。
一套游戏能力,按阶段加载
引擎的 85 个公开声明全部进入 METHOD_POLICY。允许能力和插件自有学习能力由 22 个精确 manifest 项覆盖;危险方法保持不可见。初始只注册两个 bootstrap 工具:
| 组 | 主要能力 |
|---|---|
bootstrap/capability | 发现能力、加载精确工具组 |
strategy/learning | 按需战场手册、读取短策略、复盘和采用候选规则 |
lobby/setup | 选地图、配置玩家、创建并开始对局 |
observation | 公平观察、状态、地图、资源和规则 |
units/combat | 单位移动、攻击、部署和批量命令 |
production/economy | 目录、队列、生产、暂停和取消 |
construction | 建筑目录、合法放置、维修和出售 |
diplomacy/comms | 外交和通讯 |
superweapon | 超级武器 |
lifecycle/replay | 停止和结束对局 |
每个真实 renderer 精确工具都会返回 commandView:当前 tick、经济、电力、己方单位、当前可见敌人和冻结 last-seen。模型能基于同一回执继续下令,不必每个动作前再读取一次全量状态。
red_alert_start.gameSpeed 可选 0 到 6。插件默认速度 2,即原始 15 tick/s;速度同时作用于双方和画面,不改变模型权限。Profile 可以通过 defaultGameSpeed 调整。
安装器做什么,不做什么
pnpm exec dsh-red-alert-setup
-> 检查 Git、pnpm、Bun 和 dsh 0.1.1-rc.2
-> 验证已有 DSH Web Profile
-> 直接使用 NPM 包内的构建产物
-> 准备锁定版本的 GPLv3 兼容客户端和 adapter
-> 通过官方 dsh plugin 命令挂载外部插件
-> 用最终 Profile 配置验证挂载结果
-> 保存启动配置到 $DSH_HOME/red-alert/install.json
安装器失败时会停在真实失败点。若活动命令不是 dsh 0.1.1-rc.2,它会在改动 Profile 前退出。若你还没有可运行的 DSH Web Profile,最新版 DSH 会在第一次检查时创建默认 web Profile。
需要自定义 renderer 目录时:
pnpm exec dsh-red-alert-setup --profile web --renderer-dir /absolute/new/red-alert-renderer
需要指定稳定 renderer 端口时:
pnpm exec dsh-red-alert-setup --profile web --renderer-port 4317
只预览将执行的命令,不改文件或 Profile:
pnpm exec dsh-red-alert-setup --profile web --dry-run
兼容客户端的锁定来源、提交、补丁内容和 GPLv3 边界见 renderer adapter 说明。
手动挂载
需要完全手动控制时:
pnpm install --frozen-lockfile
pnpm run build
pnpm prepare:renderer -- /absolute/new/red-alert-renderer
RA_RENDERER_DIST_DIR=/absolute/new/red-alert-renderer/dist \
dsh plugin --profile web add -w file:/absolute/path/to/dsh-red-alert --save-exact --ignore-scripts
RA_RENDERER_DIST_DIR=/absolute/new/red-alert-renderer/dist \
dsh --profile web --dump-config
卸载只移除外部插件,不触碰 DSH 源码:
dsh plugin --profile web remove -w @vibeinging/dsh-red-alert
验收结果
RA_READY = min(PROFILE, FOG, VISUAL, TOOL_COVERAGE,
LAZY_LOAD, SAME_MATCH, DSH_CONTRACT, REGRESSION)
= 1
| 指标 | 结果 | 证据摘要 |
|---|---|---|
PROFILE | 1 | 外部 bundle 通过真实 DSH Profile 挂载,DSH checkout 零写入 |
FOG | 1 | 离线审计无泄漏;真实浏览器 current LOS、last-seen 冻结和边界失败关闭通过 |
VISUAL | 1 | DSH 右栏显示真实地图、HUD、小地图、迷雾、单位和建筑,中间 Chat 同屏 |
TOOL_COVERAGE | 1 | 85 个公开声明分类,允许方法有精确 wrapper,危险方法不可见 |
LAZY_LOAD | 1 | 初始仅 bootstrap;持久选择后才发布组 schema |
SAME_MATCH | 1 | Chat 命令、bridge、引擎和 iframe 绑定同一局 |
DSH_CONTRACT | 1 | 官方 SDK、Profile、client handoff、transport 和 projection 通过 |
REGRESSION | 1 | 插件检查、adapter 测试、构建、包检查和公平审计通过 |
验证
pnpm run check
pnpm run setup -- --profile web --dry-run
pnpm run check 包含仓库规则、方法策略、renderer adapter、lint、Host/client 类型检查、构建、插件测试、game-host 测试、公平审计和 publint。
项目边界
- 这是专为 DeepSeek Harness(DSH)打造的独立外部插件,通过官方 NPM SDK、
cordis.patch.yml和 Profile 机制即插即用,全程不修改 DSH 源码。 - 浏览器或 Host 进程崩溃后的 pending command 不承诺跨进程 exactly-once;恢复时失败关闭,不猜测命令是否执行。
- 未包含电影时,兼容客户端可能记录非阻断的视频解码警告;最小资源导入和实际对局不受影响。
- 兼容客户端源码开源不等于 EA 美术、声音和地图素材自动进入公有领域。用户必须自行确认资源来源和使用权。
- 插件源码和 NPM 包采用
GPL-3.0-only;兼容 renderer adapter 同样遵循上游 GPLv3。许可证不授予任何 EA 游戏素材权利。 - NPM 包不分发游戏素材,用户必须自行确认素材来源和使用权。