Repository navigation
OpenAI 兼容来源与指挥官决策方式、战役目标(摧毁 / 占领 / 保护)与自卫打法修复、接口需求文档 - #2
Merged
Merged
Conversation
保存时原先先弹站点访问授权,弹窗一失焦就关闭,授权没通过还得重新粘贴密钥。现在先把设置存好,再申请授权。版本 0.4.5。 界面/体验 - 点「保存设置」立即保存,随后才弹授权;授权被拒时提示「设置已保存,但还没有授权访问…」,输入框内容保留 - 顶部新增「授权访问」横幅,一键补授权,成功后自动消失并提示 - 开启托管、测试连接缺授权时提示点「授权访问」,不再要求重新保存 规则/校验 - 保存不再以授权为前提;开启托管和发请求仍要求已授权 - 授权类错误不再落到地址输入框,而是走横幅 测试 - 新增 1 项:未授权也能保存并存下令牌、开启 / 测试提示授权、授权后直接可用;npm test 59 项全部通过 - 预览页模拟拒绝授权走通整条流程 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
三项:游戏内状态窗补上双方人员 / 建筑损失;托管结束自动把战绩和该场日志存到下载目录;进攻失利或停滞时自动升级打法而不是单兵添油。版本 0.4.6。 入口 - 悬浮状态窗新增一行:我方人员损失、击毁敌方人员、我方建筑损失、击毁敌方建筑 - 设置页新增「对局结束后自动保存战报」开关(默认开),立即生效 - 战绩详情显示战报文件名 规则/校验 - 战报保存到 下载/jev-reports/jev-report-<时间>.json,静默、同名自动编号,内容含战绩、曲线、该场全部决策日志和统计,不含密钥;下载失败不影响战绩记录 - 每次决策评估最近 1800 拍交换比与进攻停滞:损失 ≥ 4 且击毁不到一半,或同一目标进攻超过 2700 拍无进展,则升级(最高 3 级):放弃当前进攻、出击门槛 8 → 12 → 16 → 20、生产目标每级 +4 - 升级时把可用手段列给模型:有弹药的飞机、军舰、目标 14 格内可驻守空民房(驻守候选扩展到前沿)、工程师、可建前沿防御;空军 / 海军 / 驻守 / 工程 / 运输组附带提示 - 交换比转好或安静三个窗口后等级回落;升级期间「部队停滞」不再立刻放行进攻 - 决策日志状态摘要记录升级等级、近期损失与击毁 测试 - 新增 3 项(悬浮损失与自动战报、交换比升级与回落、停滞升级与前沿驻守),npm test 62 项全部通过 - 预览页加载真实内容脚本确认悬浮窗显示 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
原策略写死 3 辆矿车、2 座精炼厂,资金堆着也继续买矿车。现在按最近一段时间的实际收入、资金是涨是跌、矿车是否闲置来定目标。版本 0.4.7。 规则/校验 - 收入 = 窗口内资金变化 + 已花费,按每 1000 拍折算 - 资金 ≥ 4000 且未下降:矿车、精炼厂维持现状 - 有矿车找不到矿闲置:目标停在现有数量 - 资金 < 1500 且下降:向每座精炼厂 2 辆、最多 3 辆扩张,2 辆矿车时优先第二座精炼厂 - 其他:每座精炼厂 2 辆维持,上限 3;无精炼厂先建精炼厂 - 第二座车厂只在资金富余且车厂队列排满时考虑 - 「先有 2 辆矿车才出战斗单位」等门槛改为不超过当前目标;目标与理由写进 state.economy 和建筑 / 车辆组说明 测试 - 新增经济测试 4 项,调整既有「两矿车扩矿」场景为两座精炼厂且矿车在工作;npm test 66 项全部通过 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
对局历史存在浏览器里并可全部导出;新增完整网页「数据面板」查看历史与单场详情;开局采集对局元信息。版本 0.5.0。 入口 - 弹窗右上角「数据面板 ↗」打开 dashboard.html - 弹窗移除战绩与日志面板,保留战场 / 趋势 / 设置 界面/体验 - 面板总览:场次、胜负、总决策、总时长;战绩表可点开详情 - 详情:元信息(页面标题与地址、玩家列表、人数、地图尺寸、开始时间)、标签与备注编辑、结果标记、四张曲线、各组等待率、关键事件、逐条决策记录 - 导出这场(含日志)、删除这场、导出全部、清空全部;全局决策日志汇总 / 导出 / 清空 数据/逻辑 - 每场战绩附带独立的完整日志(matchlog:<id>),最多 100 场,最旧的连同日志淘汰;申请 unlimitedStorage - 开局由页面脚本采集元信息并作为事件上报,后台脱敏后写入战绩与日志 - 新增消息:MATCH_LOG_GET、MATCH_UPDATE、MATCH_DELETE;清空同时删除所有日志;战绩 id 加入会话令牌避免同毫秒冲突 测试 - 新增后台 2 项、打包检查更新;npm test 68 项全部通过 - 预览页用真实面板脚本走通列表、详情、曲线、标签保存 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
采样缓冲满 300 点后隔点抽稀并把间隔翻倍,长对局的资金 / 兵力 / 战损曲线覆盖全程;图表只在间隔超过实际采样间隔 4 倍(且至少 10 秒)时断线。 测试 - 采样测试改为断言覆盖首尾、点数有界、间隔增长;图表几何新增自适应断线断言;npm test 68 项全部通过 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
跨机器使用本地模型时,地址不由扩展预设:本机、局域网、Tailscale 等私有网络地址与所有 https 地址默认可用;其他 IP / 域名走明文 http 时,在设置的「允许的外部地址」里允许后即可使用。版本 0.5.1。 入口 - 设置页新增「允许的外部地址」折叠区:输入 IP 或域名点「允许」,以标签展示,可随时移除 - 本地服务启动时列出本机全部地址并标明 loopback / LAN / Tailscale 规则/校验 - 保存、开始托管、每次请求都校验:http 公网地址必须在允许列表中,https 与私有网络地址无需允许;移除后正在进行的托管立即拒绝该地址 - 允许时申请该地址的精确访问权;清单可选权限改为 http://*/*、https://*/*(原来的 IP 通配写法 Chrome 不认) - 主机名严格校验:只接受真实主机名、IPv4、IPv6,浏览器自动编码出的假地址一律拒绝;最多 32 条 - 已允许的公网地址走明文 http 时输入框下方橙色提醒,不拦截 测试 - 新增 shared / background 用例:允许前拒绝、允许后可用、移除后立即失效、地址归一化与非法输入;npm test 69 项全部通过 - 预览页走通:填公网地址保存被拦并自动展开允许区、添加后标签出现、再保存成功、私有地址不提醒 - 文档「用哪个地址」「分发给别人用」更新;仅本地提交,未推送、未发版 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
按两份战报分析:策略里只有修桥没有占领,训练工程师被模型反复拒绝;打不动时模型会一直重复同一选择。版本 0.5.2。 规则/校验 - 工程组新增占领候选:中立科技建筑优先,九格内无武装敌人的敌方经济 / 生产建筑次之;围墙、防御、修桥小屋、可驻守民房不选;工程师空闲即重发,建筑易手完成,阵亡或超时放弃 - 有占领目标而无工程师时,步兵组以 OBJECTIVE 名义提供训练,资金充裕(成本 + 1500)时可自动执行 - 通用自动兜底:候选带 auto:N,模型连续 N 次选等待后由扩展执行并记为 auto_<组>(探索 3 次、占领中立 2 次、占领敌方 3 次、训练工程师 3 次) - 每组记住最近 8 次答案及当时损失 / 击毁;升级 ≥ 1 或同一选项连选 4 次无击毁时写进题面;无效选项加 STALE 标记,升级 2 级撤下一轮,保卫基地永不撤 - 日志状态摘要记录提示;分析脚本统计自动动作与带提示的决策 测试 - 新增 5 项,npm test 74 项全部通过 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
想试真实大模型托管对局,并在对局记录里留下用的哪个模型、请求到哪里、花了多少 Token,便于后续分析。 入口 - 扩展设置「模型来源」新增第三个按钮「OpenAI 兼容」 - 数据面板战绩表、总览与单场详情 界面/体验 - OpenAI 兼容:API 地址、API 密钥(可显示隐藏)、模型下拉 +「获取模型列表」按钮;更多设置里选调用方式(函数调用 / JSON 输出) - 模型不再手输:点获取后调用服务 /models,列出后下拉选择,列表随地址记住 - 数据面板:战绩表新增 Token 列,来源列显示云端 / 本地 · 来源 · 模型;总览加总 Token;单场详情新增模型、请求地址、Token(输入 / 输出 / 合计 / 每次决策平均);逐条决策显示模型给出的理由,回退的选择标 * 规则/校验 - 模型只能从给出的候选里选;某组选错或缺失时按「等待」处理并标记,全部无效才拒绝整次回答 - 已保存的密钥不会发往另一个服务:换地址获取列表或保存时必须重新输入密钥;换地址后记住的模型列表清空 - 本机 / 局域网地址可不填密钥;未选模型时测试和开启托管都会提示先获取列表 - 真实模型回答慢:该来源单次最多等 30 秒(页面等 35 秒),过期容忍放宽到 900 拍;Jev 和本地 Laya 不变 - 服务返回的错误原因(如密钥错误、模型不支持)附在提示后面;密钥错误显示在密钥框下 数据/逻辑 - 新增 src/openai.mjs:构建函数调用 / JSON 请求、战况超长时裁剪、解析回答与 Token 用量、解析模型列表 - 请求地址、调用方式、配置模型写入会话;战绩新增 providerKind(云端 / 本地)、endpoint、configuredModel、callMode、outputTokens、totalTokens;Jev 与本地 Laya 同样记录 - 决策日志每条带输出 Token、理由和回退标记;日志汇总统计 Token 与回退次数 顺带修 - 界面预览模拟数据支持第三种来源、模型列表与新的战绩字段 测试 - 新增 test/openai.test.mjs 13 项;node --test 81 项通过,打包检查 1 项需先构建(按要求未构建项目 dist/),已在临时目录构建确认游戏页脚本不含模型地址 - 界面预览走通:切换来源、获取模型列表、选择、保存、测试连接、密钥错误提示、中英文、数据面板新字段 - 用真实 OpenAI 格式中转走完整后台流程:获取 18 个模型,gpt-5.6 函数调用 3 个真实回合全部成功(6–25 s),JSON 模式可用但更慢;战绩与日志不含密钥 - 仅本地提交,未推送、未发版、未改版本号 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
面板提示「此操作只允许在插件窗口中执行」且列表为空。原可信判断要求发消息者不在标签页,只有弹窗通过;现改为扩展 ID 一致、地址为扩展自身页面、主框架。游戏页脚本、其他扩展、子框架、伪造地址仍拒绝。 测试 - 新增面板来源与四种冒充来源的用例,npm test 75 项全部通过 - 已记录的战绩无需重打即可显示;仅本地提交,未推送、未发版 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
主分支同期改了策略和数据面板,与 OpenAI 兼容来源分支合并;只有说明文档冲突,代码自动合并。 数据/逻辑 - README:功能详解先放 0.5.2 工程师占领一节,再放 OpenAI 兼容一节;更新记录按「下一版、0.5.3、0.5.2」排列 - VALIDATION:下一版记录在前,0.5.3、0.5.2 记录保留 测试 - 合并后 node --test 87 项通过;打包检查 1 项需先构建,按要求未构建 - 确认页面脚本的等待时间参数、后台对扩展自身页面的新可信判断与模型列表接口共存无冲突 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
为在浏览器里实测 OpenAI 兼容来源,给分支定版本号并本地构建。 数据/逻辑 - package.json、manifest.json、弹窗版本标记、页面脚本版本统一为 0.5.4(页面脚本版本变化会让已注入的旧脚本被替换) - README 当前版本、功能一览、功能详解标题与更新记录由「下一版」改为 0.5.4;VALIDATION 同步 测试 - npm test(含构建)88 项全部通过,打包检查也通过 - 构建输出在本工作区 dist/,manifest 版本 0.5.4 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
用户配置 DeepSeek 后测试连接报「OpenAI 请求失败(HTTP 400)。Thinking mode does not support this tool_choice」。 规则/校验 - 服务因 tool_choice 返回 400 时,改用 tool_choice: auto 并在提示里要求调用函数,自动重发一次;按「请求地址 + 模型」记住,之后直接用 auto,不计为失败 - JSON 输出方式不受影响 - 只填域名(如 https://api.deepseek.com)时请求地址不再变成 //chat/completions 或 //systemone;Jev / 本地来源同样修正 界面/体验 - 模型下拉下方提示选回答快的模型,并给出 DeepSeek 两个模型的实测耗时 测试 - 新增 1 项:被拒后重发一次、之后直接用 auto、不计失败;补域名地址用例;npm test 89 项通过 - 用用户提供的 DeepSeek 密钥走完整后台流程:deepseek-flash 连接 0.7 s,3 个真实回合 2.9–3.5 s 全部成功;deepseek-v4-pro 21–75 s,有一次超时 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
上一次修复没有升版本号,浏览器里仍显示 0.5.4。 数据/逻辑 - package.json、manifest.json、弹窗版本标记、页面脚本版本统一为 0.5.5 - README 当前版本与更新记录新增 0.5.5;VALIDATION 把 DeepSeek 相关记录单列为 0.5.5 测试 - npm test(含构建)通过,manifest 版本 0.5.5 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
三份实测战报(Jev / 本地 Laya / DeepSeek)都卡在断桥前:部队反复进攻对岸的敌方国旗,工程师被派去占领路灯和管道堆无限重发,修桥选项从未被选中;本地 Laya 那局连续 480 次拒绝重建精炼厂。版本 0.5.6。 规则/校验 - 新增装饰物判定(旗帜、路灯、管道、围栏、路牌等且无发电 / 精炼 / 生产 / 武器 / 驻守功能):不再作为进攻选项,也不记入已知敌方建筑 - 中立建筑只有科技建筑(油井、医院、机械厂、机场、前哨、科技电厂、实验室等)或有实际功能的才作为占领目标 - 工程师到目标旁反复被拒(重发 3 次)或超时即放弃,并记住该目标不再提供 - 同一进攻目标 2700 拍未拿下(重复下令不重置计时)或可见受损桥段时,修桥选项写明「进攻卡住,很可能是桥断了」,排在占领前,带自动兜底(连续两次不选即执行);无工程师时训练工程师的选项写明修桥并可自动 - 重建精炼厂 / 基地车等生存性建造带自动兜底(连续两次选等待即执行) 测试 - 新增 test/player-bridge.test.mjs 7 项,策略测试补生存性兜底断言;npm test 96 项全部通过 - 真实数据重放:第 1、3 局 13 个有工程组的回合,旧题目 gpt-5.6 选修桥 0/13、本地 Laya 10/13;新题目两者都是 13/13,gpt-5.6 进攻从国旗改为迎击可见敌军。第 2 局无法用日志重放复现,靠自动兜底保证 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
四份实测战报:路两边的碉堡只打一边,步兵不进民房攻坚、反而进自家门口的民房;最后一两个兵往上送;「参考过往选择」几乎不触发;DeepSeek 偶尔不调用函数导致连续错误停止。版本 0.5.7。 规则/校验 - 据楼攻坚:每个可见敌方防御单独找 8 格内的空民房,给出派步兵进楼攻打的选项,路两侧各一个;进攻失利时标为优先并自动兜底(连续两次不选即执行) - 基地附近的守楼选项只在基地受威胁或闲置步兵至少 8 个时给出 - 进攻选项在两个主目标之外,另列离部队最近的最多 3 个敌方防御 - 可生产时可调动兵力少于 4 个不进攻、改为集结;部队停滞后的「现有兵力进攻」也要求至少 4 个 - 历史参考:同一选项连续 4 次且「0 击杀或损失多于击杀」即标记 STALE 并写出最近选择与战损;连续 6 次撤下一轮(保卫基地除外) - OpenAI 兼容来源:函数调用请求收到看不懂的文字回答时,改用 JSON 输出重发一次,再失败才计失败 测试 - 新增 test/player-siege.test.mjs 6 项、openai 测试 1 项;旧的「停滞 2 辆坦克照样进攻」测试按新规则改写;npm test 103 项全部通过 - 真实数据重放:历史提示下 gpt-5.6 从 4/4 重复进攻建造厂变为 4/4 换目标;本地 Laya 不理会提示,靠撤选项兜底 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
频繁进出建筑浪费兵力,而一直待在楼里等于少了这些兵:清理完目标就应当出来归队。版本 0.5.8。 规则/校验 - 进楼动作记下原因(据楼攻坚 / 前沿据点 / 守自家门口)与攻坚目标 - 攻坚目标没了且楼 10 格内无武装敌人稳定 150 拍、前沿 900 拍、家门口 2700 拍后自动撤出 - 附近有武装敌人或攻坚目标仍在时绝不撤,计时重置 - 撤出后 1800 拍内该楼不再出现在进楼选项;撤出由扩展执行,不额外问模型;进楼题面说明会自动撤出 测试 - 新增 3 项:攻坚楼的撤出时机与禁止条件、前沿与家门口的先后、撤出冷却;npm test 106 项全部通过 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
一局 Jev 实测从第 13 分钟到第 78 分钟一动不动:只有 4 个动员兵、兵营在、钱涨到 7.2 万却不造兵,每轮都判「兵不足 4 个先集结」,用掉 1400 多万 Token。版本 0.5.9。 规则/校验 - 可生产列表里没有能打仗的战车时,步兵上限放宽到 16、不再按角色限 3 个;资金至少 3000 且步兵不够出击时,造兵选项带自动兜底(连续两次不选即执行) - 部队 2700 拍未增长且未就绪时,据楼攻坚写明原因并自动执行 - 据楼攻坚只针对能打地面的防御,只对空的(如爱国者导弹)不再作为目标 - 连续 5 轮全等待、无任何受理动作且基地未被攻击时,提问间隔放慢到约 3 秒;有动作或基地被攻击即恢复 测试 - 新增 3 项:无车辆生产时步兵无辅助上限并自动补兵(有车辆时保持上限)、对空防御不作攻坚目标与死锁自动攻坚、全等待后放慢并可恢复;角色测试场景补上坦克生产;npm test 109 项全部通过 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
依据两份 0.5.9 本地 Laya 战报:设了「摧毁五角大楼」却从没出现对应选项、爱国者占满进攻名单、部队挨打不还手、每隔几秒换目标整队掉头、最后反复回家集结。 规则/校验 - 本局目标中英对照匹配画面建筑(也支持直接写英文),作战题第一项 objective_<id>,不受兵力门槛限制,连续两次等待或回家集结后自动执行;基地受威胁时排在守家之后且不自动;写「保护 / 占领」的目标不进攻 - 进攻名单只列能打地面的防御,其余建筑按建造厂 > 工厂 > 矿场 > 电厂排序,最多 6 个 - 被射程外敌人打时:能伤到就和附近同伴抵近还击,伤不到就退出对方射程,同一单位 60 拍冷却 - 接受进攻后 450 拍内不接受换目标或回家集结(mission_locked),目标已毁、守家、本局目标、撤退可打断 - 就绪后兵力跌破门槛 75% 才转未就绪;集结点固定 1800 拍;engage_visible 只给 15 格内敌人并写坐标 - 无基地威胁时不出防御组;修桥只在进攻卡住或可见受损时提供 数据/逻辑 - 新增 werhd-jev-objective.mjs:目标解析、记忆坐标、摧毁判定,结果写入 state.objectiveTarget - 同一目标反复下令不再重置 mission.since,进攻停滞能正常触发升级;侦察兵的探图任务不覆盖部队任务 - forceReadiness 只认车辆 / 步兵队列(哨戒炮不再算能造战车);自动补兵按当前门槛;失败后「停止增长就出击」只等一个观察窗口 - 作战题把本局目标和就绪状态放最前,进攻失利说明压缩成一句放最后 - 版本升到 0.6.0,README 与 VALIDATION 补记录 测试 - 新增 test/player-objective.test.mjs 12 项,覆盖目标选项、迷雾记忆、摧毁、防空塔排除、哨戒炮、按门槛补兵、就绪缓冲、任务锁与计时、决策循环、射程外受击回应、engage 限距、防御组 - 按新规则改写:player-bridge 无损坏时不再提供修桥;player-special 桥改为受损状态;player-range-defense 迎击场景部队移到 15 格内;player-roles-traffic 和平时不再问防御组(围墙选项随之移除,改测选址保通道);player-strategy 否定断言改为可选链 - Laya 分词器按 256 Token 重算作战题,目标、就绪和目标选项均可见 - npm test 121 项全部通过;未在真实对局中验证 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
复查 0.6.0 提交发现:目标选项在任何兵力下都自动派兵、选集结也算拒绝,小股部队被一波波送上去;敌方只剩爱国者时没有进攻选项;受击回应在大规模战斗中过慢。 规则/校验 - 目标选项只有部队就绪(或兵力停滞规则成立)时才带自动执行;兵少时只列不派;选集结不再算拒绝 - 已在进攻同一目标时自动兜底不重派、同目标重复下令不延长任务锁 - 「已在进攻」需兵力不低于门槛 75%,残兵不能绕过出击门槛 - 只对空的防御不占防御名额,排在普通建筑末尾,只剩它们时照样列出 - 进攻失利放弃任务时同时清除任务锁;本局目标 10 格内能打地面的防御不受任务锁限制 - 目标按分句解析,保护 / 占领分句里的建筑剔除;英文按整词匹配;目标被我方占领记为已占领、不再进攻 - 有本局目标时进攻选项最多 4 个;作战题等待说明缩成一句 数据/逻辑 - respondToThreats:每个敌人的对地射程只算一次,按直线距离粗筛,每轮最多检查 32 个单位、每单位最多看最近 6 个敌人,轮转处理 - 还击 / 后撤播报每轮合并为一条,每 150 拍最多一条;后撤单位 450 拍内不被任务派回 - 版本号保持 0.6.0,README / VALIDATION 补充说明 测试 - player-objective 新增 7 项:兵少不自动、选集结不锁不派、不重派不续锁、75% 才算已在进攻、只剩防空塔可打、失利清锁与目标附近碉堡放行、分句 / 整词 / 占领、有目标时 4 个进攻选项、150 对 150 时射程查询有上限且播报合并、后撤不被派回 - 原受击测试按合并播报格式更新;player-strategy 中防御组不存在时必然通过的断言改为直接断言无威胁时不问防御组 - 复现脚本复跑:150 对 150 受击回应约 40 ms 降到约 1.5 ms;Laya 256 Token 截断下目标、就绪信息和目标选项完整可见 - npm test 128 项全部通过;未在真实对局中验证 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
二次复查:「摧毁五角大楼并保护白宫」「摧毁五角大楼但不要打白宫」会把白宫也当目标;目标附近碉堡按离部队远近排序,紧贴目标的碉堡可能落选。 规则/校验 - 分句加入「并 / 并且 / 同时 / 但 / 但是 / but / while」;「不要 / 别 / 不许 / 不能 / do not / never / avoid」等否定分句视为保护,其中的建筑不进攻 - 「摧毁五角大楼和白宫」仍解析为两个目标 - 有本局目标时,目标 10 格内的地面防御按离目标远近排序,其余防御仍按离部队远近 测试 - player-objective 新增 1 项(五种并 / 但 / 不要 / but 写法只打五角大楼,「和」仍两个目标,近处白宫不被选中);有目标时的防御名额断言改为必须是最贴近目标的两座 - npm test 129 项全部通过;版本仍为 0.6.0,README / VALIDATION 补充说明 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
0.6.0 实测中游戏第 756–948 秒约 3 分钟损失 92 个单位:整支部队每 2–3 秒被重新派去打兵营,正在还手的兵被拉走;射程外受击时动员兵去冲碉堡;自家门口一栋民房被反复进出上百次。版本 0.6.1。 规则/校验 - 同一进攻目标再次下令时,只发给新加入或空闲的单位;全部在忙时不重发(不再按 180 拍刷新整支部队),任务仍记着全部单位 - 射程外被固定防御攻击:附近不足 8 人时后撤出其射程,并把该防御标为据楼攻坚优先(排第一、模型一轮不选即自动);8 人以上才一起强攻;对步兵、载具的还击 / 后撤不变 - 家门口守楼只在基地受攻击时提供;派去进楼的兵重发 3 次仍进不去即放弃 测试 - 新增 3 项:重复目标只发给新来 / 空闲单位、被碉堡逼退后攻坚优先、进楼 3 次放弃;改写 3 项旧断言(冲碉堡 → 后撤并标记、闲置步兵多给家门口守楼 → 只在受攻击时给、特殊能力场景补上基地受威胁);测试接口改为下令后单位不再空闲 - npm test 132 项全部通过 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
0.6.0 实测设了「摧毁五角大楼」,全场题面都是「Target not found yet」,没有一次匹配;日志里没有建筑名称,查不出它在游戏里叫什么。版本仍为 0.6.1。 数据/逻辑 - 目标未匹配时,state.objectiveTarget 增加 seen:视野内敌方 / 中立建筑的「名称/代号」,最多 30 个 - 决策日志的状态摘要带上 objective(匹配到时为目标编号和名称,未匹配时为 seen 列表) 测试 - 新增 1 项,改写 1 项等值断言为逐字段断言;npm test 133 项全部通过 - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
依据 docs/commander-design.md:不再由规则挑候选让模型做选择题,改为把规则和态势讲清楚、让大模型自己定打法。本提交只加入简报与请求 / 校验,不接入托管流程。 数据/逻辑 - 新增 src/player/werhd-jev-commander.mjs:单位能力卡(从对局规则自动生成:射程、对空射程、对步兵 / 装甲 / 建筑 / 飞机的每秒伤害、最大血量、能进楼 / 只能对空 / 工程师等标签);小队自动分组且编号跨回合稳定;敌方部队聚群;谁的射程压着哪支小队;每座敌方防御附近的空民房;受损桥与修桥小屋;可生产项;上一轮计划结果;合法编号清单 - src/openai.mjs 新增指挥请求(基础规则说明 + issue_orders 函数:小队动作 attack / attack_move / move / hold / garrison / defend_base / retreat / scout、生产、工程师)与逐条校验(不存在的小队、目标、民房、单位代号一律拒收并说明原因,其余照常) - 新增设计文档 docs/commander-design.md 测试 - 用仿照 0.6.0 实战的场景(路两侧碉堡、爱国者、五角大楼、断桥)生成简报约 1,600–2,700 token;gpt-5.6 与 deepseek-flash 实测都选择「主力进碉堡旁民房、从掩护中打碉堡」并补兵,DeepSeek 还识别出爱国者只对空;两者单次约 30–50 秒 - npm test 133 项全部通过(本步单元测试随第二步补上) - 仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
按 docs/commander-design.md 第二步,把第一步写好的态势简报与指挥请求接入托管流程,OpenAI 兼容来源可在设置里切到「指挥官」。
入口
- 设置 → 模型来源「OpenAI 兼容」→ 新增「决策方式:选择题 / 指挥官(大模型自行决定打法)」下拉和中英说明
- Jev 云端、本地 Laya 一律按选择题;修改决策方式和改模型一样会停止正在进行的托管
界面/体验
- 弹窗「最近执行记录」显示每轮指挥:各条命令 ✓ / ✗ 原因 + 模型的总体说明
- 数据面板关键事件时间线显示指挥事件,决策记录表显示模型的命令与理由,单场详情写明决策方式,日志统计显示指挥轮数、平均耗时、被拒 / 执行 / 未执行命令数、自动回防次数
规则/校验
- 节奏:首轮立即;之后距上次 ≥180 拍(约 12 游戏秒)且上一请求已返回;基地刚受攻击、小队本轮折损过半(进楼 / 上车不算)、进攻目标被摧毁、首次看到敌方建筑或本局目标时立即;请求进行中不重发
- 后台只接受 OpenAI 来源的指挥请求;简报须为对象且 ≤200,000 字符;请求 90 秒超时、页面等 95 秒
- 命令编号不合法的由第一步的校验拒收,原因写进下一轮简报;执行时小队已不存在、钱不够、队列满、没有空闲工程师等也记为未执行并说明原因
- 指挥模式不使用选择题的候选、自动兜底、任务锁和出击门槛
数据/逻辑
- src/player/werhd-jev-player.mjs:指挥循环 command();applyOrders / orderSquad / maintainCommand 维持意图(attack 看不见目标时按记忆坐标边走边打、attack_move、move、hold 到点不再补令、retreat、scout 派最快的一个、defend_base 复用守家执行、garrison 只派能进楼的步兵且不超过空位,其余原地停下,靠近敌方防御记为攻坚以便碉堡没了自动撤出);同一意图重复下达只给新加入或空闲的成员补令;refreshSquads 让意图随小队分出 / 消失转移或清除;基地受攻击 450 拍无回防时最近的小队自动回防并写进 lastPlanReport;executeProduction(兵按数量入队、建筑由扩展选址)/ executeEngineer(占领、修桥,沿用特殊任务跟进);refreshPlanReport 给下一轮补上小队剩余人数、目标血量、期间损失 / 击杀
- 本能层照常(还手 / 后撤、集火、舰船自卫、撤楼),撤退和回防的小队不被本能层拉走,移动 / 撤退途中不停下交火
- 抽出 rememberEnemyBuildings、objectiveState(player)和 refreshInfrastructure(special),两种模式共用
- src/background-core.mjs:指挥请求沿用超时、拒绝重定向、HTTP 错误带服务原因、tool_choice 被拒改 auto、看不懂改 JSON 重发;会话计数与 Token 照旧;每轮写 command 日志(不含密钥);会话与战绩记 strategyMode
- src/openai.mjs:指挥请求支持 JSON 调用方式;解析容忍 {"issue_orders": {...}} 之类的包装
- src/logbook.mjs:commandEntry、command 事件(总体说明 ≤400 字、每条原因 ≤200 字、最多 20 条)、logStats.commands
- src/shared.mjs:strategyMode 设置、activeProvider.strategy、prepareBrief
- 版本 0.7.0;README 新增指挥模式一节与更新记录;VALIDATION 加 0.7.0 记录
测试
- 新增 test/commander.test.mjs 17 项:简报(卡片字段、小队编号跨回合稳定、合法清单、碉堡旁民房、血量字段、中立建筑筛选);请求与校验(schema 枚举、非法小队 / 目标 / 民房 / 代号 / 缺坐标被拒、JSON 形状与包装);后台(OpenAI 端点、90 秒、日志不含密钥、战绩与弹窗事件、auto 重发、JSON 重发、非 OpenAI 拒绝、设置切换停托管);日志体积与统计;玩家(节奏与触发、请求中不重发、进楼人数与其余不冲、记忆坐标、只补新来 / 空闲、各意图、自动回防、生产 / 工程师与失败原因、上一轮结果、小队消失与分出)
- 旧测试未改动;npm test 150 项全部通过
- 用仿 0.6.0 实战的场景跑完整循环 800 拍无异常;用模拟数据在浏览器里检查了弹窗与数据面板的显示
- 未在真实对局中验证;仅本地提交,未推送、未发版
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
依据检查 agent 对 0.7.0(8a3d9d4)的审查和复现脚本 c1–c7 修正,版本仍为 0.7.0。 规则/校验 - 分组时只有意图相同的单位才合成一队,没有意图的新兵并入 8 格内最近的小队(原来路过的进攻纵队会被并进守家小队、拉回守点) - 进楼小队留在外面的成员对固定防御只后撤、不强攻(原来 13 人会被本能层派去冲碉堡) - 越界坐标按简报里的地图尺寸拒收;被拒项字段截断到 40 字;「上一轮结果」有条数和 8000 字符上限 - 紧急重问距上次决策至少 90 拍(基地刚被攻击除外) - 受攻击按「一次攻击」计时(300 拍无威胁才结束),自动回防按累计 450 拍触发、每次攻击只一次,攻击期间锁定回防小队(模型其他命令记 auto_defense_active),报告写明「基地仍受攻击,自动回防中」 - 回答对应局面超过 900 拍:只执行生产 / 工程师,小队意图不执行并在报告里写明 - hold 到点后被带离超过 4 格且空闲时补令回守点 - 简报每个敌军群给最多 3 个单位编号可供 attack;系统提示说明打整群用 attack_move 数据/逻辑 - 维持意图时出错只丢弃这条意图并记错误事件;执行模型回答出错只记错误、不计入连续失败,均不停托管 - 测试用模拟环境抽到 test/commander-world.mjs 测试 - 新增 test/commander-review.test.mjs 9 项,每条修正一项 - npm test 159 项全部通过;未在真实对局中验证;仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
依据检查 agent 对 5f984bb 的复查和复现脚本 d1、d3b、d3c、d5b 修正,版本仍为 0.7.0。 规则/校验 - 基地附近静止的敌方防御建筑不再算「基地受攻击」,交给模型作为敌方建筑处理;自动回防只打移动的入侵者,对防御建筑只后撤(原来坦克停在附近或碉堡离建筑 14 格时,小队被锁 6000 拍、反复冲碉堡) - 自动回防锁定最长 600 拍,到期交还模型并写进「上一轮结果」;锁定说明告诉模型「现在下 defend_base,或等到第 N 拍」 - 受攻击状态只在维持环节更新:决策轮先看到第二波攻击时不再漏掉自动回防 - 「意图相同」统一为同动作、同目标、坐标 5 格内(分组与重复下达同一标准),重复下达时更新坐标 - 回答过期需同时超过 900 拍和实际等待 60 秒,游戏加速时不误判 数据/逻辑 - 回防小队不再整体跳过本能层,改为只禁止强攻固定防御;test/commander.test.mjs 中「回防小队被本能层跳过」的断言按此改写为「回防小队不跳过、但不强攻固定防御」 测试 - test/commander-review.test.mjs 新增 4 项(防御建筑不触发 / 锁定上限与到期说明 / 防守不打碉堡;第二波攻击再次自动回防;同地点重复下令不碎片化且坐标跟随;过期按拍数与实际时间取较宽) - npm test 163 项全部通过;未在真实对局中验证;仅本地提交,未推送、未发版 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
按 0.7.0 实战报告(本地 Laya,目标「摧毁五角大厦」)修复:整局目标都显示没找到,五角大楼只倒了一半。 入口 - 设置里的「本局目标」填「摧毁五角大楼 / 五角大厦 / Destroy the Pentagon」 规则/校验 - 这张华盛顿地图的五角大楼是四座建筑「RA2 Wash Pent A–D」,没有一座叫 Pentagon,所以从没被认出;倒掉的两块是打附近敌人时顺带打的 - 五角大楼的关键词加上「wash pent」;同一组名字里任意一个被提到(中文或英文),整组都算 - 目标由几块组成时,打掉一块后接着找离它最近的下一块,全部倒下才算完成 - 用报告里出现过的 38 种建筑名核对,只有这四块被认作目标 测试 - 新增一项:中英三种写法都能认出四块、普通民房不算、「保护白宫」分句不受影响、四轮依次打完才算完成 - 原有关键词断言加上「wash pent」 - npm test 164 项全部通过;版本 0.7.1 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
按 0.7.1 实战报告修复:五角大楼四块都认出并打掉、任务完成,但第一块打了约 10 分钟——这关造不了战车,步兵上限 16,动员兵停在 20 人左右,资金涨到 8,900 没花;任务送来天启坦克后剩下三块 30 秒全倒。 规则/校验 - 纯步兵部队资金 ≥ 3,000 时步兵上限从 16 提到 40 - 资金 ≥ 5,000 且没到上限时,补兵自动执行,不再等模型选 - 资金不足 3,000 仍按 16 人上限;能造战车的对局不受影响 测试 - 新增一项:9,000 资金自动补兵、3,500 给出不强制、1,500 仍受上限、40 人封顶 - 原「正常门槛不强制训练」断言改用 3,500 资金(25,000 时按新规则应当强制) - npm test 165 项全部通过;版本 0.7.2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
按 0.7.2 实战报告(新关卡「使用工程师占领盟军战略实验室」,战败)修复。 入口 - 设置里的「本局目标」写「占领 / 夺取 / capture …」 规则/校验 - 「占领」不再被当成「保护」:认出目标后标成「工程师占领、绝不攻击」,任何进攻选项和指挥模式的合法攻击目标里都没有它 - 守着占领目标的碉堡排在进攻选项最前 - 工程师组把占领目标排第一,有守卫也给;无守卫拒绝一次、有守卫拒绝三次后自动派;没有工程师就先训练(钱少也训),有守卫时多备一个 - 目标被我方占下算完成,被摧毁写明占领失败 - 「保护」的建筑也不再进进攻选项 - 资金 ≥ 5,000 且部队不足 40 时,模型连续两次不造兵就自动造一个作战单位(不是矿车或工程师) 测试 - 新增 capture-objective.test.mjs 7 项;用报告里 32 种建筑名核对,只有盟军作战实验室被认作占领目标 - npm test 172 项全部通过;版本 0.7.3 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
按 0.7.3 实战报告(占领盟军作战实验室,再次战败)修复:约 15 个工程师都是单独穿过碉堡去的,没有一个到达;大部队一直在家集结。两局实验室都在约 32 分半消失并判负,这关有时间限制。 规则/校验 - 占领任务:有 6 个作战单位就向目标旁 4 格推进(边走边打,不打目标本身),模型两次不选自动执行,不再给「集结」 - 有守军时工程师跟在推进部队后面,部队到目标 8 格内或守军清完才进去占领;没有推进部队时原地等 - 集火和舰船自卫不打要占领或要保护的建筑 - 正在执行任务的工程师不会被另派 测试 - 新增 4 项;「集火不打占领目标」去掉修复时会失败,已确认 - 完整托管循环模拟:自动推进、工程师跟随、到位后占领,全程没打实验室 - npm test 176 项全部通过;版本 0.7.4 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
依据 0.7.4 实战报告:部队推进、工程师护送生效,作战实验室第一次被占下;但约 6 秒后它从我方建筑里消失,再过约 5 秒游戏判定战败,日志分不清原因。 数据/逻辑 - 占领后继续跟踪目标:每轮记血量;离开我方后记「转手 / 消失 / 看不见」和最后血量 - 结局事件记下各势力是否战败、目标最后状态、我方建筑数 - 日志字段同步放行;本版不改打法 测试 - 新增 1 项(占领后血量、转手与消失、日志与结局字段) - npm test 177 项全部通过;版本 0.7.5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
依据 0.5.2–0.7.5 的代码和 25 局实战报告,从生命周期、战役目标与提示、命令回执、观察数据四个方向调研后合并。 入口 - docs/game-api-requests.md,docs/README.md 加了链接 内容 - 最想要的十项(P0)及实战证据 - 公平原则:只开放玩家屏幕、EVA、雷达、侧栏能看到的信息 - 通用设计:常驻入口、可回看的事件队列、版本与能力清单、结构化错误、频率说明 - 各项接口草案(TypeScript 风格)与优先级 - 最小方案、第二步,以及扩展现在靠猜的地方节选 测试 - 仅文档,未改代码 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
此项合入是否依赖游戏暴露新api? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
这次合并的是上一个 PR 之后在我们仓库里继续做的改动:新增 OpenAI 兼容模型来源、新增「指挥官」决策方式、战役目标与自卫打法的一系列修复、数据面板与战报,以及一份希望游戏开放的接口需求文档。
模型来源
/models列表里选模型,默认用函数调用(tool call)回答,也可改用 JSON。两种决策方式
docs/commander-design.md。战役目标
打法与自卫
数据面板与战报
文档
docs/game-api-requests.md:希望游戏开放的接口需求草案。依据 25 局实战报告整理,覆盖生命周期、战役目标与屏幕提示、事件流、命令回执、观察数据,并写明了只开放「玩家屏幕上本来能看到的信息」这一公平原则。会另外在游戏仓库提 issue 讨论。docs/commander-design.md:指挥模式设计。验证
npm test177 项全部通过(包含用模拟游戏环境跑完整托管循环的测试)。🤖 Generated with Claude Code