بنقرة واحدة
game-ai-adaptation
BoardGame 游戏 AI 接入入口。用于 AI/机器人/自动玩家、ai.ts、自动响应、watchdog、强制跳过、卡死兜底和响应窗口门禁。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
BoardGame 游戏 AI 接入入口。用于 AI/机器人/自动玩家、ai.ts、自动响应、watchdog、强制跳过、卡死兜底和响应窗口门禁。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
BoardGame 项目内参考图生成 Three.js 程序化模型流程。用于 img2threejs、图生模型、参考图重建、Three.js 游戏资产原型、书本/棋盘/卡牌/道具 3D 模型任务;在动手写模型前先拆参考图结构并建立“参考图区域到模型部件/材质”的追踪表,禁止把参考图当整面贴图贴皮,也禁止脱离参考图生成泛主题模型。
BoardGame 线上反馈批量收口流程。用于未关闭反馈、排重、真假 bug 分诊、并行修复、状态回写、关闭误报/重复反馈。
BoardGame 规则 bug 修复流程。用于卡牌、技能、Token、状态、阶段、伤害、资源、升级/基础差异、结算顺序和审计漏审。
BoardGame Git 操作入口。用于提交、推送、同步主分支、pre-push 阻塞、PR、worktree、fork、merge 等协作场景。
BoardGame 新游戏创建或资源/data intake 流程。用于新增游戏、只给图片/位置先开工;按现有游戏模式分阶段推进并验收。
BoardGame 截图交付流程。用于打开图、给我看图、看截图、图呢、端到端截图;最终验收图默认走图片预览站。
| name | game-ai-adaptation |
| description | BoardGame 游戏 AI 接入入口。用于 AI/机器人/自动玩家、ai.ts、自动响应、watchdog、强制跳过、卡死兜底和响应窗口门禁。 |
出现下列任一情况就触发本技能:
src/games/<gameId>/ai.tsAI 接入、AI 适配、AI 卡死、自动跳过、强制推进、watchdog、response-window、无解交互若用户关注的是“AI 蠢 / 打法优化 / 策略设计 / 对比大杀四方 / 英雄或卡组画像 / 评分模型重构”,先读项目 skill:.codex/skill/game-ai-strategy-design/SKILL.md。本技能只负责 AI 合法动作、交互闭环、卡死和兜底。
docs/ai-rules/engine-systems.mddocs/ai-rules/testing-audit.mdreferences/checklist.mdreferences/response-window-watchdog.mdreferences/vitest-templates.mdevidence/engine/online-ai-watchdog-strong-audit-2026-04-12.mdevidence/engine/ai-stall-loop-full-chain-audit-2026-04-12.mdevidence/dicethrone/dicethrone-ai-interaction-audit-2026-04-11.mdevidence/dicethrone/dicethrone-ai-interaction-audit-2026-04-12.mdevidence/dicethrone/dicethrone-response-window-retrigger-audit-2026-04-12.mdevidence/dicethrone/dicethrone-discard-undo-loop-audit-2026-04-11.mddomain/execute.ts / domain/systems.ts 中创建交互InteractionSystem 负责:
sys.interaction.current / queuecreateSimpleChoice() / createMultistepChoice()resolveInteraction()playerView() 对非当前玩家隐藏交互详情,并只暴露 isBlocked关键事实:
createSimpleChoice() 若传入空选项,会直接打印错误:这是卡死前兆,不是可接受状态playerView 中看不到 current,只会看到 isBlocked=trueResponseWindowSystem 负责:
RESPONSE_WINDOW_EVENTS.OPENED / CLOSEDRESPONSE_PASSSYS_RESPONSE_WINDOW_FORCE_CLOSEallowedCommandsresponderExemptCommandsallowNonResponderCommand关键事实:
RESPONSE_PASSpendingInteractionId / stale queue / reopen 事件再次卡住SYS_RESPONSE_WINDOW_FORCE_CLOSE,再继续把 AI 阶段收口src/engine/transport/server.tssrc/engine/transport/onlineAiRecovery.ts
resolveForceSkippableHiddenAiInteraction()resolveForceEndTurnForStalledAi()resolveForceAdvancePhaseAfterRecovery()resolveUnsatisfiableReasonFromInteraction()buildOnlineAiRecoveryStateSnapshot()buildUnsatisfiableInteractionStateSnapshot()关键事实:
applyPlayerView(match, playerId) 生成 seat view 才能诊断interaction.current == null && isBlocked == true,要优先怀疑隐藏交互currentResponderId === human 简化成“一律返回 null”。正确判断是:
nullSYS_RESPONSE_WINDOW_FORCE_CLOSE禁止:
validate() 会拒绝的命令留给 AIdisabled=true 选项当成可行动作removable=false 的状态/标记当成可移除目标rollConfirmed=true 之后继续生成重掷动作必须:
至少要有一个:
SYS_INTERACTION_RESPONDSYS_INTERACTION_CANCELRESPONSE_PASSADVANCE_PHASEEND_PHASE)没有收口命令的交互 = 设计缺陷,不是“AI 之后再补”
允许:
RESPONSE_PASSSYS_RESPONSE_WINDOW_FORCE_CLOSE,再做 follow-up advance禁止:
RESPONSE_PASS / 选项选择watchdog 是最后兜底,不是第一修法。
优先级必须是:
默认口径(当前仓库):
minimumActionDelayMs 只决定“延迟时长”,不决定“哪些动作延迟”LocalGameProvider 的动作类型门控决定只要本轮要改 AI、自动回合、watchdog、自动跳过、自动确认、自动推进、ai.ts 或 AI 相关 UI,就必须先把当前链路里的动作分成两类:
最低清单必须至少点名:
没写出这份清单前,不得实施。
当用户明确说“不要改延迟”时,仍必须主动检查并补齐以下项目,而不是把问题简化成“那就不动 AI 了”:
实现落点(必须同步 src 与 e2e/src):
src/engine/transport/react.tsxe2e/src/engine/transport/react.tsxFAST_AI_COMMAND_TYPES(本步快速放行)NO_FOLLOW_UP_DELAY_ACTION_KINDS(本步执行后不应给下一步上 gate)shouldSkipFollowUpActionDelay()收口判定(必须带日志证据):
[LOCAL_AI_PERF] scheduled/dispatched/command-progress 验证:
gateDelayMs=0gateDelayMs≈minimumActionDelayMs默认应判为可见动作的包括:
默认应判为静默动作的包括:
advance phase如果某一步介于两者之间,按用户体感归类:用户会不会把它当作“这一步已经发生了”。会,就按可见动作处理;不会,就按静默动作处理。
表现:
empty-options根因常见点:
createSimpleChoice() 传入空 optionsoptionsGenerator 失效后没刷新multi.min > enabledOptions.length避免方式:
autoRefresh / optionsGeneratormin=0 时提供 done 或空提交闭环autoCancelOption / skip / doneguard:
SYS_INTERACTION_CANCELresolveForceSkippableHiddenAiInteraction()empty-options / all-options-disabled / min-selection-unreachable表现:
interaction.currentisBlocked=true根因常见点:
playerView 可见避免方式:
applyPlayerView(match, playerId) 结果resolveForceEndTurnForStalledAi()guard:
SYS_INTERACTION_RESPOND表现:
RESPONSE_WINDOW_OPENED 音效不断响根因常见点:
避免方式:
sourceId / interactionId / 已确认标记 做一次性 guardguard:
SYS_RESPONSE_WINDOW_FORCE_CLOSE,不是傻发 ADVANCE_PHASERESPONSE_PASS表现:
根因常见点:
避免方式:
interactionId / sourceId 上,AI 不要无限重试同一失败动作guard:
onlineAiRecovery.ts 的 loop 检测只当最终兜底ai.ts 本地先断掉循环表现:
根因常见点:
避免方式:
currentPlayerIdcurrentResponderIdseatControllers红线:
先确认这次动的是哪一层:
src/games/<gameId>/ai.tssrc/games/<gameId>/domain/**src/engine/systems/InteractionSystem.ts / ResponseWindowSystem.tssrc/engine/transport/server.ts / onlineAiRecovery.ts必须写清:
没有这四条,先别改代码。
对每个交互类型都问四个问题:
优先顺序:
至少要有:
优先放:
src/engine/transport/__tests__/server.test.ts适合测:
SYS_RESPONSE_WINDOW_FORCE_CLOSE 再收口RESPONSE_PASS优先放:
src/games/dicethrone/__tests__/basic-commands-coverage.test.tssrc/games/dicethrone/__tests__/flow.test.tssrc/games/dicethrone/__tests__/response-window-interaction-lock.test.tssrc/games/dicethrone/__tests__/token-response-window.test.ts适合测:
优先放:
src/games/smashup/__tests__/promptSystem.test.tssrc/games/smashup/__tests__/beforeScoring-window-stuck.test.tssrc/games/smashup/__tests__/duplicateInteractionRespond.test.tssrc/games/smashup/__tests__/afterscoring-window-skip-base-clear.test.ts适合测:
优先放:
src/games/summonerwars/__tests__/basic-commands-coverage.test.tssrc/games/summonerwars/__tests__/interaction-chain-comprehensive.test.tssrc/games/summonerwars/__tests__/flow.test.ts适合测:
evidence/engine/...evidence/<gameId>/...interactionId / sourceIdcurrentResponderId / responderQueue(若涉及 response-window)playerView / isBlocked(若涉及 hidden interaction)legalActions / unsatisfiable reasonAI seat only / human guard__tests__playerViewFORCE_CLOSE + follow-up,不是无效 ADVANCE_PHASEnpx eslint <改动文件> 已通过references/checklist.mdreferences/vitest-templates.md