# DSH Red Alert [简体中文](README.md) | [English](README.en.md) 真实 AI 战场。让 DeepSeek 在一局真正的红警 2 里建基地、调兵、交战、失败、复盘,然后带着经验进入下一局。 这不是截图识别,不是 Canvas 战术图,也不是藏在后台的 headless 模拟。中间是 DSH 原生 Chat,模型的判断、工具调用和战报持续可见;右边是同一浏览器实例、同一座战场、同一个 AI 席位正在运行的真实红警 2 兼容客户端。用户随时可以在 Chat 里插入命令,改变下一步指挥。 如果你想看 Agent 不只“回答问题”,而是在真实规则、战争迷雾和失败代价下持续行动,这可能是 DSH 里最直观、最好玩的演示之一。 ![DeepSeek 在 DSH Chat 中指挥右侧真实红警 2 战场](docs/readme-media/real-ai-battlefield.webp) 上图是完整 DSH 页面:左侧 session,中间模型判断,右侧真实游戏画面。截图来自使用者自行提供本地 RA2 资源的实战;仓库不包含游戏素材。 ## 它为什么好玩 - 看得到思考:模型每轮的态势判断、生产计划、批量命令和工具回执都留在 Chat。 - 能直接干预:输入“先守住第一波”“保持两个矿车”或“暂停扩张,出三辆坦克”,用户命令会进入后续指挥上下文。 - 输赢都是真的:经济、电力、建造队列、寻路、交火、战争迷雾和结算都来自右侧真实客户端。 - 不是一次一条慢慢点:一个工具调用可以批量下达多单位命令,精确回执同时带回最新战场摘要,减少重复观察。 - 会把失败变成规则:自然终局后生成结构化 episode,模型采用或拒绝候选经验;下一局按地图、阵营和对手取回短策略。 - 公平但不迟钝:模型只看本方、当前视野敌人和冻结的最后发现记录,不读隐藏敌军,却可以比人更稳定地检查队列和并行安排动作。 ![模型在 Chat 中持续判断,右侧战场同步执行](docs/readme-media/live-command.webp) ## 一分钟开始 需要 Node.js 22.19 以上、pnpm 11、Bun、Git,以及一个已经能够正常启动的 DSH Web Profile。当前 DSH 官方 SDK 是受限 NPM 包,你的 NPM 账号必须具备 `@deepseek-ai/*` 包访问权。 ```sh git clone https://github.com/vibeinging/dsh-red-alert.git cd dsh-red-alert pnpm run setup -- --profile web ``` `setup` 会按顺序完成依赖检查、插件构建、锁定兼容客户端准备、DSH Profile 挂载和最终配置验证。它不会修改 DSH 源码 checkout,也不会下载红警 2 美术或声音素材。 准备完成后,以后只需: ```sh pnpm run dsh ``` 第一次打开战场时,在页面中选择你自己有权使用的 RA2 资源归档。已验证的最小归档只需要: - `RA2.MIX` - `LANGUAGE.MIX` - `MULTI.MIX` 音乐、Taunts、电影、`exe` 和 `dll` 不需要进入最小归档。导入发生在浏览器本地,插件不把素材写入 DSH 安装目录,也不随仓库或包分发素材。 更新后重新运行同一条准备命令即可复核构建和挂载: ```sh git pull --ff-only pnpm run setup -- --profile web ``` ## 直接这样指挥 在 DSH Chat 中使用自然语言即可,例如: ```text 创建一局苏军对普通 AI,速度 2,自动打完并复盘。 先守住第一波,保持两个矿车,再转三辆犀牛坦克。 敌人进视野后集中攻击威胁最高的目标,不要追进战争迷雾。 失败后总结本局,只采用有明确证据的规则,并带到下一局。 ``` 模型会先按需加载开局或学习工具,再随着阶段进入观察、生产、建设和战斗工具。未加载的工具 schema 不进入模型上下文。 ## 赛后不是一句“下次努力” ![真实结算页与模型复盘、规则采纳同屏](docs/readme-media/post-match-learning.webp) 自动学习不训练或修改模型权重,也不保存自由文本提示。插件只从公平战场数据和已经准入的命令结果中计算封闭候选规则,记录证据,再由模型选择采用或拒绝。后续对局只取回少量、匹配当前地图和阵营的规则,避免经验无限堆进上下文。 速度 2 的三局连续实战已经证明经验能跨局保存并被下一局读取;该样本中前两局失败,第三局在 tick 24090 时仍存活并完成更完整的防御与装甲生产。它证明学习链路在工作,不证明当前策略已经达到稳定胜率。完整过程见[自动增强与连续对战报告](docs/reports/2026-08-23_auto-learning-speed2-and-command-cycle.md)。 ## 真实战场,不作弊 Chat、工具、bridge、引擎和画面持续绑定同一个 `sessionId`、`matchId`、AI seat 和 tick。 模型可见敌情只有三类: - `visibleEnemies`:当前真实视野内的敌人。 - `lastSeenEnemies`:敌人离开视野前最后一次合法观察;位置、生命值和 `observedAtTick` 在隐藏期间冻结。 - `visibleNeutralObjects`:当前真实视野内的中立对象。 模型不能访问敌方隐藏出生点、敌方经济、全图对象、debug state、观察者视角、Canvas 像素或未过滤的引擎对象。renderer 和模型 bridge 共用当前 LOS 规则;建筑放置也只在当前视野内搜索合法地基。 ## 一套游戏能力,按阶段加载 引擎的 85 个公开声明全部进入 `METHOD_POLICY`。允许能力和插件自有学习能力由 21 个精确 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` 调整。 ## 安装器做什么,不做什么 ```text pnpm run setup -> 检查 Git、pnpm、Bun、dsh -> 验证已有 DSH Web Profile -> 安装依赖并构建插件 -> 准备锁定版本的 GPLv3 兼容客户端和 adapter -> 通过官方 dsh plugin 命令挂载外部插件 -> 用最终 Profile 配置验证挂载结果 -> 保存本地启动配置到被忽略的 .runtime/ ``` 安装器失败时会停在真实失败点。若看到 `@deepseek-ai` 404,表示当前 NPM 账号没有官方 SDK 包权限;它不会绕过权限,也不会把缺包误报为安装成功。若你还没有可运行的 DSH Web Profile,需要先按 DSH 官方流程创建并验证它。 需要自定义 renderer 目录时: ```sh pnpm run setup -- --profile web --renderer-dir /absolute/new/red-alert-renderer ``` 只预览将执行的命令,不改文件或 Profile: ```sh pnpm run setup -- --profile web --dry-run ``` 兼容客户端的锁定来源、提交、补丁内容和 GPLv3 边界见 [renderer adapter 说明](renderer-adapter/README.md)。 ### 手动挂载 需要完全手动控制时: ```sh 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 源码: ```sh dsh plugin --profile web remove -w @deepseek-ai/dsh-red-alert ``` ## 验收结果 ```text 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 测试、构建、包检查和公平审计通过 | 详细证据见[最终验收报告](docs/reports/2026-08-22_dsh-real-client-final-acceptance.md)、[宽栏防守复赛报告](docs/reports/2026-08-23_dsh-wide-panel-defense-rematch.md)和[自动增强报告](docs/reports/2026-08-23_auto-learning-speed2-and-command-cycle.md)。 ## 验证 ```sh 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 美术、声音和地图素材自动进入公有领域。用户必须自行确认资源来源和使用权。 - 本仓库当前是私有未发布包,顶层 `license` 为 `UNLICENSED`。公开发布前仍需确定顶层许可和发布范围。 - 未经单独授权,不发布 NPM 包,也不分发游戏素材。