diff --git a/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/executor/AigcTemplateConstants.java b/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/executor/AigcTemplateConstants.java index 33f92146..e37752f6 100644 --- a/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/executor/AigcTemplateConstants.java +++ b/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/executor/AigcTemplateConstants.java @@ -27,10 +27,10 @@ public final class AigcTemplateConstants { /** * 玩法模板白名单(唯一同源)。 - * M-c 批① = clicker + merge 两模板;批② 扩 idle/tycoon 在此加列表项。 + * M-c 批① = clicker + merge 两模板;批②(HJ-MC-TPL-EXEC-002 §6.3)已扩 idle/tycoon,四模板全收口。 * 取值须与 PromptResourceLoader 资源 Map 的键、contracts/templates/<id>.schema.json 一一对应。 */ - public static final List SUPPORTED_TEMPLATE_IDS = List.of("clicker", "merge"); + public static final List SUPPORTED_TEMPLATE_IDS = List.of("clicker", "merge", "idle", "tycoon"); private AigcTemplateConstants() { // 纯常量持有类,禁止实例化 diff --git a/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/executor/PromptResourceLoader.java b/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/executor/PromptResourceLoader.java index c101f84c..4db76081 100644 --- a/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/executor/PromptResourceLoader.java +++ b/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/executor/PromptResourceLoader.java @@ -25,8 +25,9 @@ import java.util.regex.Pattern; * * 【单模板 → 多模板(HJ-MC-TPL-EXEC-001 §6.2)】以 templateId 为键缓存每模板一份 * {@code (promptVersion, promptBody, schemaText)}({@link TemplateResource})。资源映射 = {@link #TEMPLATE_RESOURCES}: - * clicker → clicker-designer.md + clicker.schema.json;merge → merge-designer.md + merge.schema.json - * (批② 扩 idle/tycoon 在此映射加行即开新模板——兑现「加文件即开模板」承诺)。 + * clicker → clicker-designer.md + clicker.schema.json;merge → merge-designer.md + merge.schema.json; + * 批②(HJ-MC-TPL-EXEC-002 §6.3)已扩 idle/tycoon(idle-designer.md+idle.schema.json / tycoon-designer.md+tycoon.schema.json) + * ——在此映射加行即开新模板,兑现「加文件即开模板」承诺,四模板全收口。 * 【ready 全局语义(§6.2 拍板)】{@link #isReady()} 保留全局语义 = 所有模板均就绪;任一模板资源缺失/形态 * 非法 → 整体自禁用,{@link #getNotReadyReason()} 含模板名 + 缺失路径(沿现有自禁用范式,不暴露半成品)。 * @@ -67,6 +68,14 @@ public class PromptResourceLoader { m.put("merge", new String[]{ "wanxiang-contracts/prompts/04-config/merge-designer.md", "wanxiang-contracts/templates/merge.schema.json"}); + // 批②(HJ-MC-TPL-EXEC-002 §6.3)扩 idle/tycoon:资源路径按 clicker/merge 现有范式 + // (04-config/-designer.md + templates/.schema.json);pom 通配已自动复制进 classpath,零 pom 改动。 + m.put("idle", new String[]{ + "wanxiang-contracts/prompts/04-config/idle-designer.md", + "wanxiang-contracts/templates/idle.schema.json"}); + m.put("tycoon", new String[]{ + "wanxiang-contracts/prompts/04-config/tycoon-designer.md", + "wanxiang-contracts/templates/tycoon.schema.json"}); TEMPLATE_RESOURCES = Collections.unmodifiableMap(m); } diff --git a/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/task/AigcTaskServiceImpl.java b/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/task/AigcTaskServiceImpl.java index 6ddb1f0c..556dc314 100644 --- a/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/task/AigcTaskServiceImpl.java +++ b/game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/task/AigcTaskServiceImpl.java @@ -56,7 +56,7 @@ public class AigcTaskServiceImpl implements AigcTaskService { @Override public List getTemplateList() { // T-AGC-03 模板注册表的 MVP 最小形态(HJ-AGENT-LOOP-EXEC-002 §8.4 T6,主 agent 裁决 #1 纳入): - // 返回硬编码 2 条(clicker+merge,HJ-MC-TPL-EXEC-001 §6.5 批① 扩 merge;批② 扩 idle/tycoon), + // 返回硬编码 4 条(clicker+merge+idle+tycoon——M-c 模板波两批全收口;HJ-MC-TPL-EXEC-002 §6.4 批② 扩 idle/tycoon), // 使 Create 页 canSubmit 依赖的模板列表非空(真实用户 UI 链路活)。 // 注册表选型(DB 表 / Nacos 配置 / Dify 侧)落地后替换。 TemplateRespVO clicker = new TemplateRespVO(); @@ -70,7 +70,19 @@ public class AigcTaskServiceImpl implements AigcTaskService { merge.setName("合成升级"); merge.setDescription("拖拽两个同级物件合成更高一级,合成到目标等级即通关"); merge.setExamplePrompt("做一个把多肉植物合成升级的小游戏"); - return List.of(clicker, merge); + // 批②(HJ-MC-TPL-EXEC-002 §6.4)扩 idle(放置挂机):点击+挂机产出资源,含离线收益 + TemplateRespVO idle = new TemplateRespVO(); + idle.setTemplateId("idle"); + idle.setName("放置挂机"); + idle.setDescription("点击和挂机自动产出资源,攒够目标即通关,离开再回来还能领离线收益"); + idle.setExamplePrompt("做一个挂机种树攒果实的小游戏"); + // 批②(HJ-MC-TPL-EXEC-002 §6.4)扩 tycoon(模拟经营):进货卖货赚差价 + TemplateRespVO tycoon = new TemplateRespVO(); + tycoon.setTemplateId("tycoon"); + tycoon.setName("模拟经营"); + tycoon.setDescription("进货卖货赚差价,金币攒到目标就通关"); + tycoon.setExamplePrompt("做一个开奶茶店进货卖货赚钱的小游戏"); + return List.of(clicker, merge, idle, tycoon); } @Override