games-development-ai/.agents/skills/runtime-and-multichannel.md
lili a207cb8d65
Some checks failed
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
docs(agents): skill 规范化双层收口 + 席位context skill 新增 + W-NSTAR/W-TPL/W-GENLOG 设计波落档
- .agents/skills 25 件全量 frontmatter 规范化与评审修入(含 prompt-governance 大修);.claude/skills 7 件薄壳按双层方案①落位
- 新增 skill:agentic-seat-context-design(agentic 席位与 context 工程设计基线,2026-07-05 探索蒸馏)
- 设计波三件落档:复杂游戏北极星件(W-NSTAR 终审稿待拍)/黄金模板规格件(W-TPL 定稿待批)/生成侧过程蒸馏回路(W-GENLOG 骨架)
- protocol/在飞板/作战清单/数据飞轮 SoT/契约 prompts 索引同步;breakout 九门证据刷新
- .gitignore 补 /localagents.md 真实忽略行(该文件自声明绝不提交,此前声明未被机器执行)
- 刻意不入库:nacos-data/ 与 _tier2-gen、c2v-*、amgen-* 生成产物(可重生成,忽略行格式待拍)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 05:32:56 -07:00

12 KiB
Raw Blame History

name, description
name description
runtime-and-multichannel 当开发/调试 runtime 编译与包版本化交付、WanxiangGameSDK 注入与降级、iframe 沙箱三容器预加载、或微信/抖音/快手多渠道导出时使用:渲染层 LittleJS 增强发行版、SDK 两层、沙箱安全边界与微信格式导出枢纽。

运行时、Game SDK 与多渠道导出手册runtime-and-multichannel

蒸馏来源:docs/architecture/架构/README.md§3.4 Game SDK / §4.2 运行时三容器 / §6.6 运行时与导出选型)、docs/architecture/架构/13模块.mdruntime 模块 T-RT-* 技术功能)、docs/architecture/架构/README.md§2 模块地图 / §10.4 LayaAir CLI。 适用:开发/调试 runtime 模块、WanxiangGameSDK、多渠道微信/抖音/快手)小游戏导出。 配套SDK 降级铁律与沙箱安全红线见 ../rules/security-and-reliability.md;工程规范见 ../rules/engineering-conventions.md;架构全景见 ../knowledge/product-and-architecture.md;上游生成见 ./agentic-amodel-generation.md;契约见 ./contract-first-development.md⚠️ 状态升级2026-06-12 终裁,取代 2026-06-11 待 spike 表述):本手册「自研 Canvas Runtime(<15KB)」相关段落=1.x 历史口径,渲染层已改判。现行裁决:

  • Tier1 渲染层 = LittleJS 增强发行版 + Runner v22026-06-12 创始人终裁spike 85/82Phaser 竞标落选);「自研轻量 Canvas Runtime / <15KB 体积门」废除15KB 系 srcdoc 内联架构衍生约束前提已失效改三层约束框架SLO@千元机+4G P75 / B1 gz≤350KB·raw≤1.5MB / 工程增强层)。
  • 模板 = LittleJS 能力插件/二次开发件(玩法模板层废除);粒子/物理/后处理三插件=引擎能力包装层裁决①2026-06-12collision/手感=引擎缺件维持自研。
  • 沙箱 / SDK Core 注入 / 三容器预加载 / 多渠道导出枢纽章节不受影响,仍现行有效。 单一事实源:../knowledge/tech-decisions.md §1.1 + git show 6d2f8789^:docs/agent-specs/_archive/2026-06-11-T1引擎终裁包.md(已随 _archive 清理删除、git 定位)。下文凡「自研 Canvas<15KB / OpenGame 生成」字样均按本横幅改读。 ⚠️ 纠偏2026-07-05:① 编译输入口径改真——runtime 编译输入 = 上游 src/ 多文件源工程,产出 engineBundleiife、全局 __GameBundle 承重)gameConfig 降为模板玩法参数占位(contracts/game-package.schema.json 可核)。② runtime service 真目录 = service/build/ service/pkg/ service/session/(旧稿 service/compiler/service/package/ 已不存在)。③ §6 多渠道代码件系(service/conversion/WechatAdapter/DouyinAdapter/KuaishouAdapter.java规划中·未实现——全仓无此源文件,微信格式枢纽策略叙述仍有效。

目标

把上游 src/ 多文件源工程编译为可运行 Web 包engineBundle iife 承重、gameConfig 降为模板玩法参数占位)并版本化交付,注入 WanxiangGameSDK在 iframe 沙箱中安全运行(三容器预加载),并支持向微信/抖音/快手等小游戏渠道静态导出产出后游戏流可即点即玩、可分发到外部渠道。

前置

  • OSS本地 MinIO+ CDN 可用。Cocos仅留 3D / 渠道导出、人在环、非分档轴官方一键导出微信包LittleJS 线(自研 Canvas)渠道 adapter 走 W-CH-α 对比竞标LittleJS+自研 adapter vs Cocos 导出HJ-CH-001../knowledge/tech-decisions.md §1.1)。
  • SDK Core 体积达标(< 8KB 压缩);上游 aigc 产出的 GamePackage 符合 game-package.schema.json 契约。

1. runtime 模块职责

职责 说明
src/ 源工程 → 可运行 Web 包编译 service/build/src/ 源工程 + assets → engineBundleiife 承重web bundle
Manifest 生成 runtimeVersion / configUrl / assetList / hash / preloadPolicy / bundleSize
包存储版本化 service/pkg/checksum(sha256) + CDN路径 /games/{gameId}/versions/{versionId}/
预览交付端点 controller/app/runtime/:按版本返回 manifest + 资源 URL真路径 GET /app-api/runtime/package/{versionId}?scene=preview;预览为 scene 参数、无独立 /preview 路径)
多渠道转换 service/conversion/规划中·未实现):以导出微信小游戏格式包为枢纽 → 抖音(自有接口)/快手(微信格式兼容转换);渠道 adapter 走 W-CH-α 竞标Cocos 仅留 3D / 渠道导出、人在环,见 §6 与顶部横幅)

渲染层:自研轻量 Canvas Runtime< 15KBLittleJS 增强发行版 + Runner v22026-06-12 终裁见顶部横幅15KB 红线废除iframe sandbox + SDK Core 注入,平台完全控制沙箱(沙箱/SDK 注入语义不变;技术决策版 §6.6 的"自研薄壳"结论已被引擎选型取代)。

本手册聚焦 Tier1极轻量 2D游戏流。分层运行时见 ../knowledge/tech-decisions.md §1.1正交两轴AI 参与深度 Tier0/1/2 与引擎按表现复杂度选 LittleJS/Phaser 是两根正交轴、引擎不是分档轴Cocos 仅留 3D / 渠道导出轴、编辑器 + 人在环,进不了自治生成轨)。


2. 三容器预加载策略

参考抖音短视频预加载,只保留前/当/后三个容器(技术决策版 §4.2,详见 Doc B runtime 模块):

[Container N-1]   [Container N]   [Container N+1]
   (销毁中)         (当前播放)      (预加载完成)
  • 当前游戏播放时,预加载下一款 manifest + 关键资源。
  • 加载超时则自动跳过下一款 + 记录 game_load_failed + 错误上报降权(详见 Doc B runtime 模块)。
  • 上滑切换:销毁 N-1N+1 转为当前,再预加载新的 N+1。

3. 安全边界

配置 出处
iframe sandbox sandbox="allow-scripts allow-same-origin" 技术决策版 §4.2
CSP script-src 'self'; connect-src 'none'(游戏内无网络请求 技术决策版 §4.2
postMessage 校验 来源origin 白名单)+ schema 双校验,防伪造 技术决策版 §4.2Doc B runtime 模块
资源大小 总资源 ≤ 10MB首屏 ≤ 2MB超限编译失败 技术决策版 §4.2Doc B runtime 模块

游戏 iframe 禁止网络,所以广告/支付/社交都在宿主侧 iframe 外渲染(见第 4 节)。沙箱逃逸是极高危风险,检测到异常立即销毁 iframe技术决策版 §8 风险 3。详细红线见 ../rules/security-and-reliability.md


4. WanxiangGameSDK

SDK 是平台能力注入游戏的唯一通道——没有 SDK平台就是静态文件托管技术决策版 §3.4)。分两层:

Core内联 < 8KB游戏启动时加载异步不阻塞
├── Lifecycle    ready/started/paused/resumed/completed/error + onPause/onResume
├── EventBus     SDK ↔ 宿主 postMessage 通信
├── Telemetry    事件批量上报10 条 / 5s flushsendBeacon 兜底)
└── ErrorTrack   onerror + unhandledrejection 捕获、去重、不中断游戏

Plugin按需懒加载首次调用对应 API 时加载,不影响首屏)
├── Ad           激励视频 / 插屏 / Banner宿主侧渲染
├── Pay          内购 / 打赏触发(宿主侧弹支付 UI
├── Social       排行榜 / 好友 / 邀请 / 分享(宿主代理请求)
└── Storage      云存档 / 进度(失败回退 localStorage

SDK ↔ 宿主 postMessage 协议(消息 typeinit / lifecycle / telemetry / ad / pay / social / storage

关键决策(技术决策版 §3.4

  • 广告与支付在宿主侧iframe 外)渲染——因为它们要网络权限,而游戏沙箱无网络。
  • 事件 SDK 内缓冲 10 条 / 5s flush减少 postMessage 频率、不影响帧率。
  • 降级铁律Plugin 层全部 try-catch 包裹异常不向上抛游戏主循环requestAnimationFrame永不被 SDK 阻塞。完整降级表见 ../rules/security-and-reliability.md

5. SDK 与 runtime 的关系

runtime 编译 GamePackage 时:
1. 把 SDK Core 代码内联进游戏 entry.js 头部
2. 源工程声明所需 Pluginad / pay / social / storagegameConfig 降为模板玩法参数占位
3. manifest.json 记录 SDK 版本号
4. 宿主据 manifest 决定加载哪些 Plugin chunk

游戏代码不直接引用广告联盟/支付 SDK——只通过 sdk.ad.showRewarded() 等抽象 API 触发,具体实现对游戏透明、由宿主在 iframe 外管理(技术决策版 §3.4)。


6. 多渠道导出(构建期静态转换)

构建期静态转换(非运行时动态适配),导出可异步离线进行、不影响实时预览(技术决策版 §6.6)。

导出枢纽 = 微信小游戏格式包

渠道 导出路径
微信 引擎/壳导出微信小游戏包(官方格式)
抖音 抖音自有导出接口
快手 无专用导出接口 → 快手开发者工具"微信格式兼容转换"(基础 API 与微信一致,开放 API 需快手专属代码)

快手导出渠道清单不含 LayaAir CLI 路线LayaAir 官方平台清单无快手,快手统一走"微信格式包兼容转换"。"统一工具链"实质 = 统一产出微信格式包,再分发抖音/快手。详见 ../knowledge/tech-decisions.md §1.1。

导出工具Cocos仅留 3D / 渠道导出、人在环)官方一键导出微信包LittleJS 线(自研 Canvas)渠道 adapter 走 W-CH-α 竞标见顶部横幅。Javaruntime service/conversion/规划中·未实现)设计上统一以 ProcessBuilder 调用对应工具 → 异步等待进程 → 产物上传 OSS。

渠道适配器(规划中·未实现;开发团队版 §2.1 设计,下列 Java 文件全仓尚不存在)各自处理尺寸 / 资质 / 文案 / 违禁词

  • WechatAdapter.java(规划中) — 微信小游戏适配规则
  • DouyinAdapter.java(规划中) — 抖音小游戏适配规则
  • KuaishouAdapter.java(规划中) — 快手适配(微信格式 → 快手兼容转换)

外部进程调用要按 ../rules/security-and-reliability.md 处理超时/失败/重试/产物校验。


7. 资源优化

手段 说明 出处
hash 命名长期缓存 hash 文件名启用 CDN 永久缓存 Doc B runtime 模块
WebP/AVIF 转换 素材压缩 + 尺寸裁剪降首屏 Doc B runtime 模块
CDN 发布刷新 发布时刷新需更新的 HTML/Manifest CDN 缓存 Doc B runtime 模块
低端设备降级 限制粒子/音频预加载,帧率锁 30fps Doc B runtime 模块

8. 常见坑

排查 / 应对
postMessage 收不到 查 iframe origin 白名单是否放行 + Console 报错(开发团队版 §9确认 schema 校验未误拦
DevTool import 导出包看着对 渠道包仍需真机验证(开发者工具 import 不等于真机通过)
小游戏导出拖慢预览 导出可异步离线进行,与实时预览解耦,不影响游戏流加载(技术决策版 §6.6
首屏超 2MB / 总包超 10MB 编译门禁直接阻断 + 给优化建议;走 WebP/AVIF + 音频懒加载
三容器内存涨 严格只保留前/当/后三容器,及时销毁 N-1技术决策版 §4.2
加载卡死无兜底 加载超时 5s 自动跳过 + 错误记录 + 降权(技术决策版 §7.2