5db407c3dc
Project CI / AI game creator shell Rust shard 3/4 (push) Successful in 7m12s
Project CI / AI game creator shell Rust shard 2/4 (push) Successful in 7m18s
Project CI / AI game creator shell Rust shard 1/4 (push) Successful in 7m25s
Project CI / AI game creator shell Rust shard 4/4 (push) Successful in 7m22s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m49s
Project CI / AI game creator shell Rust crates (push) Successful in 2m36s
Project CI / Repository checks (push) Failing after 1m11s
Project CI / Frontend tests (push) Failing after 4m37s
Project CI / AI game creator shell web tests (push) Failing after 4m6s
Project CI / Native shell tests (push) Successful in 9m39s
Project CI / Backend tests (push) Successful in 10m12s
## 交付范围 - OSS `agc-dev` bucket 的 `templates/` 前缀作为 AGC 游戏模板库(**去掉 `agc/` 这一层**;`agc/` 继续只放客户端安装包与更新清单)。 - 模板正文改为 zip(zip 根 == AGC 项目根,如 `game/index.html`);清单补齐 `tags`、封面字段与包大小/摘要,`templateVersion` 用于判断是否需要重下。 - 客户端:Rust 模板库模块、模板库全屏页、首页模板推荐位、左侧导航入口。 ## 客户端行为 - `fetch_game_template_library`:读取并校验清单(≤4 MiB),缓存到 `<app_data>/templates/index.json`;网络失败回退本机缓存并标注 `source=cache`。 - `download_game_template`:按清单下载 zip(≤512 MiB),校验字节数与 SHA-256 后解压到 `<app_data>/templates/installed/<id>/<version>/`,最后写 `installed.json` 作为安装完成标记。 - `create_automatic_local_game_project_from_template`:先把模板文件铺进新项目目录,再走既有 `init_local_game_project_at` 补 `.agent` 清单与标准目录;失败删除半成品目录。 - 解压只接受普通文件与目录(拒绝绝对路径、`..`、盘符、符号链接),安装目录名由标识符白名单拼出;远端只信「受信任 OSS 主机 + 对象键」,清单里的地址字段不参与请求。 - UI:搜索(空白分隔多关键词「与」)、标签/运行时筛选、仅看已下载、封面卡片与已下载徽标;「使用模板」在版本落后时先重下再建项。 ## 文档与脚本 - 主规范 `docs/technical/【技术方案】AGC模板库与模板建项-2026-09-17.md`;里程碑与实施计划见 `docs/project-memory/plans/`;`decision-log.md` 记录库路径、清单 schema、安装缓存目录与 CSP 约定。 - 发布脚本 `scripts/agc-template-library-publish.mjs`(`--dry-run` 校验 → 上传 → 回读校验)。 - 首页「灵感推荐」替换为模板库推荐位,删除本机灵感图目录与 `InspirationGallery.tsx`;`tauri.conf.json` 的 `img-src` 放行受信任 OSS 主机用于加载封面。 ## 验证 - `cargo test --bin genarrative-ai-game-creator-shell template_library`:9 passed;`--ignored` 真连检查 `fetches_the_live_template_library_index` 通过。 - `npx vitest run src/features/template-library`:9 passed。 - `npm run typecheck`、`cargo fmt --check`、`npm run check:encoding`、`node scripts/check-doc-index.mjs`、`git diff --check` 均通过。 - OSS 侧匿名复核:`templates/index.json`、各 `cover.png` 与 `template.zip` 均返回 200。 ## 未做 / 待确认 - 本轮未做客户端点击级人工验收(下一步单独验证并把结果补进此 PR)。 - 模板封面目前是占位标题卡,正式封面由后续模板包提供。 --------- Co-authored-by: kdletters <61648117+kdletters@users.noreply.github.com> Reviewed-on: http://192.168.35.82/git/GenarrativeAI/Genarrative/pulls/396
99 lines
3.6 KiB
TOML
99 lines
3.6 KiB
TOML
[package]
|
|
name = "genarrative-ai-game-creator-shell"
|
|
version = "0.1.47"
|
|
edition = "2021"
|
|
publish = false
|
|
|
|
[features]
|
|
default = []
|
|
# 模板库假数据注入(仅本地页面压测/演示用):只有显式开启该 feature 才会编译并在读取清单后
|
|
# 把条目循环补齐成假数据;计数由 AGC_TEMPLATE_LIBRARY_SYNTHETIC_COUNT 控制(默认 1000)。
|
|
template-library-fixtures = []
|
|
cocos-editor = ["cocos-editor-bridge/process-discovery"]
|
|
cocos-editor-execute = ["cocos-editor", "cocos-editor-bridge/windows-bootstrap"]
|
|
cocos-editor-injection = ["cocos-editor-execute", "cocos-editor-bridge/windows-injection"]
|
|
|
|
[build-dependencies]
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
sha2 = "0.10"
|
|
shared-contracts = { path = "../../../server-rs/crates/shared-contracts", default-features = false }
|
|
tauri-build = { version = "2.6.2", features = [] }
|
|
|
|
[dependencies]
|
|
ts-rs = "12.0.1"
|
|
typed_floats = { version = "1.0.7", features = ["serde"] }
|
|
nalgebra = { version = "0.35.0", features = ["serde-serialize"] }
|
|
agent-runtime-core = { path = "../../../server-rs/crates/agent-runtime-core" }
|
|
cocos-editor-bridge = { path = "../../../plugins/agc-cocos-editor/native/cocos-editor-bridge", default-features = false }
|
|
editor-adapter-api = { path = "../../../server-rs/crates/editor-adapter-api" }
|
|
base64 = "0.22"
|
|
axum = "0.8"
|
|
chromiumoxide = "0.9.1"
|
|
futures = "0.3"
|
|
getrandom = "0.3"
|
|
http = "1"
|
|
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp"] }
|
|
jsonschema = { version = "0.49.3", default-features = false }
|
|
oxc_allocator = "0.143.0"
|
|
oxc_ast = "0.143.0"
|
|
oxc_ast_visit = "0.143.0"
|
|
oxc_parser = "0.143.0"
|
|
oxc_semantic = "0.143.0"
|
|
oxc_span = "0.143.0"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
serde_yaml = "0.9"
|
|
schemars = "1.2.1"
|
|
sha2 = "0.10"
|
|
similar = "2.7"
|
|
platform-llm = { path = "../../../server-rs/crates/platform-llm" }
|
|
platform-agent = { path = "../../../server-rs/crates/platform-agent" }
|
|
portable-pty = "0.9"
|
|
percent-encoding = "2"
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "multipart", "native-tls", "stream"] }
|
|
regex = "1"
|
|
shared-contracts = { path = "../../../server-rs/crates/shared-contracts", default-features = false }
|
|
tauri = { version = "2.11.2", features = [] }
|
|
tauri-plugin-dialog = "2.7.1"
|
|
tauri-plugin-http = { version = "2.5.9", default-features = false, features = ["charset", "cookies", "http2", "rustls-tls"] }
|
|
tauri-plugin-opener = "2"
|
|
tempfile = "3"
|
|
toml = "0.8"
|
|
ttf-parser = "0.25.1"
|
|
tokio = { version = "1", features = ["io-util", "macros", "process", "rt-multi-thread", "signal", "sync", "time"] }
|
|
url = "2"
|
|
unicode-normalization = "0.1"
|
|
uuid = { version = "1", features = ["v4"] }
|
|
zip = { version = "2", default-features = false, features = ["deflate"] }
|
|
tauri-plugin-clipboard-manager = "2.3.2"
|
|
maud = "0.27.0"
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
libc = "0.2"
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
windows-sys = { version = "0.61", features = ["Wdk_Storage_FileSystem", "Win32_Foundation", "Win32_Storage_FileSystem", "Win32_System_Diagnostics_ToolHelp", "Win32_System_IO", "Win32_System_JobObjects", "Win32_System_Threading", "Win32_UI_WindowsAndMessaging"] }
|
|
|
|
[profile.dev]
|
|
opt-level = 0
|
|
debug = 1
|
|
codegen-units = 256
|
|
lto = "off"
|
|
incremental = true
|
|
|
|
# Runner 启动阶段会对当前 Debug 可执行文件计算 SHA-256。仅优化密码学依赖,
|
|
# 保持业务代码的 Debug 编译速度,同时避免整份 Debug 构建因未优化 hash 热点而阻塞启动。
|
|
[profile.dev.package.sha2]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.digest]
|
|
opt-level = 3
|
|
|
|
[profile.test]
|
|
opt-level = 0
|
|
debug = 1
|
|
codegen-units = 256
|
|
lto = "off"
|
|
incremental = false
|