This commit is contained in:
2026-05-14 14:21:17 +08:00
parent 7a75f5d612
commit d33c937ebc
191 changed files with 1916 additions and 1549 deletions

View File

@@ -16,6 +16,14 @@
--- ---
## 2026-05-14 抓大鹅物品素材 sheet 改用 APIMart nanobanana
- 背景:抓大鹅 2D 五视角物品素材仍沿用 5x5 sheet、绿幕去背、切图、OSS 转存和 `generatedItemAssets` 持久化,但用户要求物品素材图片生成步骤改用 APIMart 已接好的 nanobanana / Gemini 图片模型。
- 决策:抓大鹅物品素材 sheet 生图固定走 APIMart `POST {APIMART_BASE_URL}/images/generations`,模型为 `gemini-3.1-flash-image-preview``size = 1:1``resolution = 1K``official_fallback = true`;响应优先读图片 URL 或 base64缺图片时按 `task_id` 轮询 `/tasks/{task_id}`。封面、9:16 纯背景图、1:1 容器 UI 图、音频、切图、OSS、扣费和运行态消费链路保持不变。
- 影响范围:`server-rs/crates/api-server/src/match3d.rs``server-rs/crates/api-server/src/config.rs``deploy/env/api-server.env.example`、抓大鹅素材生成技术文档。
- 验证方式:执行 `cargo test -p api-server match3d_material_sheet --manifest-path server-rs\Cargo.toml``cargo test -p api-server from_env_reads_non_public_models_and_urls --manifest-path server-rs\Cargo.toml``cargo check -p api-server --manifest-path server-rs\Cargo.toml``npm run check:encoding`
- 关联文档:`docs/technical/MATCH3D_DRAFT_ASSET_GENERATION_PIPELINE_2026-05-10.md`
## 2026-05-13 认证运行期同步直接导入正式认证表 ## 2026-05-13 认证运行期同步直接导入正式认证表
- 背景:`auth_store_snapshot` 是 Stage 1 整包快照过渡表,主键固定 `default`,会让所有用户状态集中在一条 `snapshot_json`Stage 2/3 已有 `user_account/auth_identity/refresh_session` 正式认证表,继续刷新 `default` 容易让运行时真相和表拆分目标混在一起。 - 背景:`auth_store_snapshot` 是 Stage 1 整包快照过渡表,主键固定 `default`,会让所有用户状态集中在一条 `snapshot_json`Stage 2/3 已有 `user_account/auth_identity/refresh_session` 正式认证表,继续刷新 `default` 容易让运行时真相和表拆分目标混在一起。
@@ -27,7 +35,7 @@
## 2026-05-13 微信小程序支付以后端通知为唯一入账事实 ## 2026-05-13 微信小程序支付以后端通知为唯一入账事实
- 背景:“我的”账户充值需要接入微信小程序支付,同时保留本地 / H5 mock 支付联调能力。 - 背景:“我的”账户充值需要接入微信小程序支付,同时保留本地 / H5 mock 支付联调能力。
- 决策:`paymentChannel = "mock"` 继续创建即 paid 订单并立即入账;`paymentChannel = "wechat_mp"` 先在 `profile_recharge_order` 写入 `pending` 订单,再由 `api-server` 调微信支付 JSAPI 下单并返回小程序 `wx.requestPayment` 参数。小程序或 H5 的支付成功回调只触发刷新,不直接发放点或会员;最终入账只由 `/api/profile/recharge/wechat/notify` 验签、解密并确认 `trade_state = SUCCESS` 后完成。`provider_transaction_id` 保存微信支付平台交易号,用于对账、查单、退款和客服排障。 - 决策:`paymentChannel = "mock"` 继续创建即 paid 订单并立即入账;`paymentChannel = "wechat_mp"` 先在 `profile_recharge_order` 写入 `pending` 订单,再由 `api-server` 调微信支付 JSAPI 下单并返回小程序 `wx.requestPayment` 参数。小程序或 H5 的支付成功回调只触发刷新,不直接发放点或会员;最终入账只由 `/api/profile/recharge/wechat/notify` 验签、解密并确认 `trade_state = SUCCESS` 后完成。`provider_transaction_id` 保存微信支付平台交易号,用于对账、查单、退款和客服排障。
- 影响范围:`profile_recharge_order` 表、SpacetimeDB 充值 procedure、`api-server` 微信支付客户端、小程序 native 支付页、H5 充值弹窗与共享 contract。 - 影响范围:`profile_recharge_order` 表、SpacetimeDB 充值 procedure、`api-server` 微信支付客户端、小程序 native 支付页、H5 充值弹窗与共享 contract。
- 验证方式:执行 `npm run typecheck``npm run test -- src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx``cargo test -p module-runtime recharge --manifest-path server-rs/Cargo.toml``cargo test -p api-server wechat_pay --manifest-path server-rs/Cargo.toml`,后端联调仍用 `npm run api-server``/healthz` - 验证方式:执行 `npm run typecheck``npm run test -- src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx``cargo test -p module-runtime recharge --manifest-path server-rs/Cargo.toml``cargo test -p api-server wechat_pay --manifest-path server-rs/Cargo.toml`,后端联调仍用 `npm run api-server``/healthz`
- 关联文档:`docs/technical/MY_TAB_ACCOUNT_RECHARGE_IMPLEMENTATION_2026-04-25.md``docs/technical/SPACETIMEDB_TABLE_CATALOG.md` - 关联文档:`docs/technical/MY_TAB_ACCOUNT_RECHARGE_IMPLEMENTATION_2026-04-25.md``docs/technical/SPACETIMEDB_TABLE_CATALOG.md`
@@ -59,7 +67,7 @@
## 2026-05-12 拼图与抓大鹅草稿背景音乐按纯音乐自动生成 ## 2026-05-12 拼图与抓大鹅草稿背景音乐按纯音乐自动生成
- 背景:拼图和抓大鹅需要在草稿生成阶段直接产出可试听、可重生成、可进入运行态循环播放的背景音乐。 - 背景:拼图和抓大鹅需要在草稿生成阶段直接产出可试听、可重生成、可进入运行态循环播放的背景音乐。
- 决策:复用通用 VectorEngine Suno 创作音频链路,不新增 SpacetimeDB 表;拼图音乐保存到首关 `PuzzleDraftLevel.backgroundMusic`,运行态通过 `PuzzleRuntimeLevelSnapshot.backgroundMusic` 下发;抓大鹅音乐保存到首个 `generatedItemAssets[].backgroundMusic`。两者草稿生成都使用 `title` 驱动、`prompt = ""``make_instrumental = true`,失败只降级记录 warning结果页允许重新生成 - 决策:复用通用 VectorEngine Suno 创作音频链路,不新增 SpacetimeDB 表;拼图音乐保存到首关 `PuzzleDraftLevel.backgroundMusic`,运行态通过 `PuzzleRuntimeLevelSnapshot.backgroundMusic` 下发;抓大鹅音乐保存到首个 `generatedItemAssets[].backgroundMusic`。两者草稿生成都使用 `title` 驱动、`prompt = ""``make_instrumental = true`;自动草稿阶段必须拿到可播放 `audioSrc` 才能返回成功,失败时停留在生成页并允许重试同一 session/profile。结果页内的手动重新生成继续作为已有草稿的补救入口
- 影响范围:`api-server` 音频生成、拼图草稿编译、抓大鹅草稿编译、Puzzle/Match3D 结果页和运行态音频播放。 - 影响范围:`api-server` 音频生成、拼图草稿编译、抓大鹅草稿编译、Puzzle/Match3D 结果页和运行态音频播放。
- 验证方式:检查草稿 response / work detail 中的 `backgroundMusic.audioSrc`,运行态开局后隐藏 audio 循环播放;执行音频相关后端 check、前端 typecheck 和编码检查。 - 验证方式:检查草稿 response / work detail 中的 `backgroundMusic.audioSrc`,运行态开局后隐藏 audio 循环播放;执行音频相关后端 check、前端 typecheck 和编码检查。
- 关联文档:`docs/technical/PUZZLE_MATCH3D_RESULT_AUDIO_TAB_2026-05-11.md``docs/technical/MATCH3D_DRAFT_ASSET_GENERATION_PIPELINE_2026-05-10.md` - 关联文档:`docs/technical/PUZZLE_MATCH3D_RESULT_AUDIO_TAB_2026-05-11.md``docs/technical/MATCH3D_DRAFT_ASSET_GENERATION_PIPELINE_2026-05-10.md`
@@ -67,7 +75,7 @@
## 2026-05-12 拼图 UI 背景图复用 levels_json 持久化 ## 2026-05-12 拼图 UI 背景图复用 levels_json 持久化
- 背景:拼图草稿结果页需要像抓大鹅一样支持 UI 背景生成,但首版只需要作品级/首关背景,不应为图片生成结果新增 SpacetimeDB 表结构。 - 背景:拼图草稿结果页需要像抓大鹅一样支持 UI 背景生成,但首版只需要作品级/首关背景,不应为图片生成结果新增 SpacetimeDB 表结构。
- 决策:拼图 UI 背景字段存入首关 `levels_json`,字段为 `uiBackgroundPrompt``uiBackgroundImageSrc``uiBackgroundImageObjectKey``compile_puzzle_draft` 草稿编译阶段在首图和背景音乐后自动生成首关 UI 背景,失败只记录 warning 并允许结果页重试;结果页新增 `UI` Tab可编辑提示词并触发 `generate_puzzle_ui_background``api-server` 读取 `public/ui-previews/puzzle-image-compact-ui-2026-05-08.png` 作为非拼图 UI 参考图,调用 VectorEngine `gpt-image-2-all` 生成 9:16 背景并要求中央正方形拼图区与外部 UI 背景边界清晰。SpacetimeDB 只保存结果,不做外部 I/O。 - 决策:拼图 UI 背景字段存入首关 `levels_json`,字段为 `uiBackgroundPrompt``uiBackgroundImageSrc``uiBackgroundImageObjectKey``compile_puzzle_draft` 草稿编译阶段在首图完成后自动生成首关 UI 背景,自动草稿阶段必须拿到 `uiBackgroundImageSrc``uiBackgroundImageObjectKey` 才能返回成功;结果页新增 `UI` Tab可编辑提示词并触发 `generate_puzzle_ui_background`,手动生成失败只展示在当前面板`api-server` 读取 `public/ui-previews/puzzle-image-compact-ui-2026-05-08.png` 作为非拼图 UI 参考图,调用 VectorEngine `gpt-image-2-all` 生成 9:16 背景并要求中央正方形拼图区与外部 UI 背景边界清晰。SpacetimeDB 只保存结果,不做外部 I/O。
- 影响范围:拼图结果页、拼图运行态背景渲染、拼图 agent action、`module-puzzle` / `spacetime-module` / `spacetime-client` 的拼图关卡 JSON 映射、拼图流程技术文档。 - 影响范围:拼图结果页、拼图运行态背景渲染、拼图 agent action、`module-puzzle` / `spacetime-module` / `spacetime-client` 的拼图关卡 JSON 映射、拼图流程技术文档。
- 验证方式:执行 `npm run test -- src/components/puzzle-result/PuzzleResultView.test.tsx``cargo test -p api-server puzzle_ui_background --manifest-path server-rs/Cargo.toml``cargo check -p api-server --manifest-path server-rs/Cargo.toml``npm run typecheck``npm run check:encoding` - 验证方式:执行 `npm run test -- src/components/puzzle-result/PuzzleResultView.test.tsx``cargo test -p api-server puzzle_ui_background --manifest-path server-rs/Cargo.toml``cargo check -p api-server --manifest-path server-rs/Cargo.toml``npm run typecheck``npm run check:encoding`
- 关联文档:`docs/technical/PUZZLE_FORM_CREATION_FLOW_2026-04-29.md` - 关联文档:`docs/technical/PUZZLE_FORM_CREATION_FLOW_2026-04-29.md`
@@ -210,10 +218,10 @@
- 验证方式:未登录首次访问应展示新手引导;生成后只进入 1 关本地拼图;通关后登录保存应在当前用户拼图作品架出现草稿作品;不应产生 SpacetimeDB schema 变更。 - 验证方式:未登录首次访问应展示新手引导;生成后只进入 1 关本地拼图;通关后登录保存应在当前用户拼图作品架出现草稿作品;不应产生 SpacetimeDB schema 变更。
- 关联文档:`docs/prd/FIRST_LAUNCH_PUZZLE_ONBOARDING_PRD_2026-05-05.md` - 关联文档:`docs/prd/FIRST_LAUNCH_PUZZLE_ONBOARDING_PRD_2026-05-05.md`
## 2026-05-05 text-game 作为百梦幕间文字游戏模板接入 ## 2026-05-05 text-game 作为陶泥儿幕间文字游戏模板接入
- 背景:团队希望参考 MOKU / 幕间类 AI 文游,设计可在百梦内落地的 AI 文字游戏模板,但不能把外部平台社区、支付、榜单、论坛、账号或私有存档迁入 Genarrative。 - 背景:团队希望参考 MOKU / 幕间类 AI 文游,设计可在陶泥儿内落地的 AI 文字游戏模板,但不能把外部平台社区、支付、榜单、论坛、账号或私有存档迁入 Genarrative。
- 决策:新增 `text-game` 作为百梦 AI 原生文字游戏模板口径,展示名可用“幕间”或“幕间文字”;它与 `visual-novel` 分离,重点是 AI GM、自由行动、状态后果、长期记忆、章节目标和轻量剧本模拟器入口、作品、发布、资产、钱包、埋点、存档和广场全部复用百梦平台接口;禁止新增 replay、外部社区、外部支付、外部榜单和私有存档系统。 - 决策:新增 `text-game` 作为陶泥儿 AI 原生文字游戏模板口径,展示名可用“幕间”或“幕间文字”;它与 `visual-novel` 分离,重点是 AI GM、自由行动、状态后果、长期记忆、章节目标和轻量剧本模拟器入口、作品、发布、资产、钱包、埋点、存档和广场全部复用陶泥儿平台接口;禁止新增 replay、外部社区、外部支付、外部榜单和私有存档系统。
- 影响范围:后续 `text-game` shared contracts、`module-text-game`、SpacetimeDB 表、`api-server` 路由、前端入口 / workspace / result / runtime、平台作品架和发现聚合。 - 影响范围:后续 `text-game` shared contracts、`module-text-game`、SpacetimeDB 表、`api-server` 路由、前端入口 / workspace / result / runtime、平台作品架和发现聚合。
- 验证方式:后续落地时确认路由使用 `/api/creation/text-game/*``/api/runtime/text-game/*`;确认正式业务真相在 Rust / SpacetimeDB 后端;确认没有 `replay` 能力和外部平台功能误入;确认 `text-game` 不复用 `visual-novel` step 契约作为运行态真相。 - 验证方式:后续落地时确认路由使用 `/api/creation/text-game/*``/api/runtime/text-game/*`;确认正式业务真相在 Rust / SpacetimeDB 后端;确认没有 `replay` 能力和外部平台功能误入;确认 `text-game` 不复用 `visual-novel` step 契约作为运行态真相。
- 关联文档:`docs/prd/AI_NATIVE_TEXT_GAME_TEMPLATE_MOKU_REFERENCE_PRD_2026-05-05.md` - 关联文档:`docs/prd/AI_NATIVE_TEXT_GAME_TEMPLATE_MOKU_REFERENCE_PRD_2026-05-05.md`

View File

@@ -67,6 +67,8 @@
- 验证:`npm run test -- src/services/apiClient.test.ts` 覆盖 `details.reason``cargo test -p api-server state --manifest-path server-rs/Cargo.toml` 覆盖半配置 OSS 不阻断启动;`npm run api-server` 后按实际 `GENARRATIVE_API_PORT` 请求 `/healthz`,不要默认打 `3100` - 验证:`npm run test -- src/services/apiClient.test.ts` 覆盖 `details.reason``cargo test -p api-server state --manifest-path server-rs/Cargo.toml` 覆盖半配置 OSS 不阻断启动;`npm run api-server` 后按实际 `GENARRATIVE_API_PORT` 请求 `/healthz`,不要默认打 `3100`
- 关联:`packages/shared/src/http.ts``server-rs/crates/api-server/src/state.rs``docs/technical/API_SERVER_EXTERNAL_SERVICE_ENV_CONFIG_2026-05-07.md``docs/technical/AUTH_SNAPSHOT_AND_MATCH3D_LOCAL_DEV_FIX_2026-05-01.md` - 关联:`packages/shared/src/http.ts``server-rs/crates/api-server/src/state.rs``docs/technical/API_SERVER_EXTERNAL_SERVICE_ENV_CONFIG_2026-05-07.md``docs/technical/AUTH_SNAPSHOT_AND_MATCH3D_LOCAL_DEV_FIX_2026-05-01.md`
2026-05-14 补充:抓大鹅“物品素材 sheet”已改用 APIMart `gemini-3.1-flash-image-preview`,真实生成还需要 `APIMART_BASE_URL``APIMART_API_KEY``APIMART_IMAGE_REQUEST_TIMEOUT_MS`;封面、背景图和容器 UI 仍继续使用 VectorEngine。排查时先按失败阶段区分缺 APIMart、VectorEngine 还是 OSS不能把物品素材缺 APIMart 误判成 VectorEngine 缺配置。
## `.hermes` 只放共享内容,不放个人 Hermes 配置 ## `.hermes` 只放共享内容,不放个人 Hermes 配置
- 现象:团队成员误把个人 Hermes 配置、会话或密钥复制进仓库。 - 现象:团队成员误把个人 Hermes 配置、会话或密钥复制进仓库。
@@ -164,6 +166,14 @@
- 验证:`npm run test -- src/components/puzzle-result/PuzzleResultView.test.tsx`,以及自动试玩入口测试 `npm run test -- src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx -t "puzzle draft generation auto starts trial"` - 验证:`npm run test -- src/components/puzzle-result/PuzzleResultView.test.tsx`,以及自动试玩入口测试 `npm run test -- src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx -t "puzzle draft generation auto starts trial"`
- 关联:`src/components/puzzle-result/PuzzleResultView.tsx``src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx``docs/technical/PUZZLE_MATCH3D_RESULT_AUDIO_TAB_2026-05-11.md` - 关联:`src/components/puzzle-result/PuzzleResultView.tsx``src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx``docs/technical/PUZZLE_MATCH3D_RESULT_AUDIO_TAB_2026-05-11.md`
## 自动草稿成功但缺音乐或 UI 先查后端吞错
- 现象:拼图或抓大鹅生成页提示完成,但草稿页仍显示“暂无音乐”,拼图 UI 仍是默认预览,试玩局内也没有生成音乐或 UI 背景。
- 原因:自动草稿阶段如果把 VectorEngine / Suno / OSS / 资产绑定错误记录为 warning 后继续返回成功,前端只能拿到缺关键资产的成功 draft随后保存和试玩都会消费这份空资产状态。
- 处理:自动草稿必须把必需生成资产当作后端完成条件:拼图首关需同时具备 `levels[0].backgroundMusic.audioSrc``levels[0].uiBackgroundImageSrc/uiBackgroundImageObjectKey`;抓大鹅需在 `generatedItemAssets[]` 中具备非空 `backgroundMusic.audioSrc`。缺失或上游失败时返回错误并停留在生成页,结果页手动重新生成只作为已有草稿补救入口。
- 验证:`cargo test -p api-server puzzle_initial_draft_assets_must_include_music_and_ui_background match3d_background_music_ready_requires_audio_src match3d_background_music_title_is_required_for_auto_draft --manifest-path server-rs\Cargo.toml`,并重启 `npm run api-server` 后检查 `/healthz`
- 关联:`server-rs/crates/api-server/src/puzzle.rs``server-rs/crates/api-server/src/match3d.rs``docs/technical/PUZZLE_FORM_CREATION_FLOW_2026-04-29.md``docs/technical/MATCH3D_DRAFT_ASSET_GENERATION_PIPELINE_2026-05-10.md`
## 拼图草稿生成 180 秒后 502/504 先查 VectorEngine 超时与前端重试 ## 拼图草稿生成 180 秒后 502/504 先查 VectorEngine 超时与前端重试
- 现象:点击“生成拼图游戏草稿”后,`POST /api/runtime/puzzle/agent/sessions/{sessionId}/actions` 等待约 180 秒返回 `502 Bad Gateway``504 Gateway Timeout`;钱包流水里同一 session 可能出现连续两组 `puzzle_initial_image` 扣费后退款。 - 现象:点击“生成拼图游戏草稿”后,`POST /api/runtime/puzzle/agent/sessions/{sessionId}/actions` 等待约 180 秒返回 `502 Bad Gateway``504 Gateway Timeout`;钱包流水里同一 session 可能出现连续两组 `puzzle_initial_image` 扣费后退款。
@@ -528,9 +538,9 @@
## 拼图发布 409 不一定是接口故障 ## 拼图发布 409 不一定是接口故障
- 现象:拼图结果页点击发布后,控制台出现 `POST /api/runtime/puzzle/agent/sessions/{sessionId}/actions 409 (Conflict)`,用户只看到发布失败。 - 现象:拼图结果页点击发布后,控制台出现 `POST /api/runtime/puzzle/agent/sessions/{sessionId}/actions 409 (Conflict)`,用户只看到发布失败。
- 原因:`publish_puzzle_work` 是资产操作发布入口,发布前会预扣 `1`点;余额不足时后端按业务冲突返回 `409 CONFLICT``details.message``点余额不足` - 原因:`publish_puzzle_work` 是资产操作发布入口,发布前会预扣 `1`点;余额不足时后端按业务冲突返回 `409 CONFLICT``details.message``点余额不足`
- 处理:前端发布弹窗在用户点击发布后必须保留并展示后端业务错误,不能只把错误写到弹窗背后的页面 banner。 - 处理:前端发布弹窗在用户点击发布后必须保留并展示后端业务错误,不能只把错误写到弹窗背后的页面 banner。
- 验证:`PuzzleResultView` 单测覆盖发布弹窗内展示 `点余额不足` - 验证:`PuzzleResultView` 单测覆盖发布弹窗内展示 `点余额不足`
- 关联:`src/components/puzzle-result/PuzzleResultView.tsx``docs/technical/PUZZLE_RESULT_AUTOSAVE_AND_TAG_GATE_FIX_2026-04-28.md``docs/technical/ASSET_GENERATION_POINTS_CONSUMPTION_2026-04-27.md` - 关联:`src/components/puzzle-result/PuzzleResultView.tsx``docs/technical/PUZZLE_RESULT_AUTOSAVE_AND_TAG_GATE_FIX_2026-04-28.md``docs/technical/ASSET_GENERATION_POINTS_CONSUMPTION_2026-04-27.md`
## WebGL 画布在高 DPR 移动端放大溢出 ## WebGL 画布在高 DPR 移动端放大溢出

View File

@@ -104,10 +104,10 @@ Rust 加密摘要依赖口径:新代码不再引入 `sha1`OSS V4 签名、
`docs/technical/PRODUCT_NAMING_BAIMENG_RENAME_2026-05-01.md` 为准: `docs/technical/PRODUCT_NAMING_BAIMENG_RENAME_2026-05-01.md` 为准:
- 产品展示名:百梦 - 产品展示名:陶泥儿
- 消费单位: - 消费单位:
- 公开账号标识:百梦 - 公开账号标识:陶泥
- 创作侧称谓:百梦 - 创作侧称谓:陶泥儿
个人任务与埋点系统首版边界: 个人任务与埋点系统首版边界:
@@ -117,7 +117,7 @@ Rust 加密摘要依赖口径:新代码不再引入 `sha1`OSS V4 签名、
- 任务进度写入 `profile_task_progress` - 任务进度写入 `profile_task_progress`
- 领奖记录写入 `profile_task_reward_claim` - 领奖记录写入 `profile_task_reward_claim`
- 钱包流水写入 `profile_wallet_ledger` - 钱包流水写入 `profile_wallet_ledger`
- “星光”奖励复用现有“点”钱包,不新增第二种货币 - “星光”奖励复用现有“点”钱包,不新增第二种货币
- 个人任务 scope 首版仅支持 `user` - 个人任务 scope 首版仅支持 `user`
## 关键文档入口 ## 关键文档入口

View File

@@ -1,23 +1,23 @@
--- ---
name: genarrative-admin-backoffice name: genarrative-admin-backoffice
short_description: 在 Genarrative/百梦后台新增或修改管理页、后台只读/写接口、导出能力时使用。 short_description: 在 Genarrative/陶泥儿后台新增或修改管理页、后台只读/写接口、导出能力时使用。
description: 在 Genarrative/百梦后台新增或修改管理页、后台 BFF 接口、shared-contracts/admin DTO、admin-web 路由导航、Excel/表格导出与验证发布时使用。 description: 在 Genarrative/陶泥儿后台新增或修改管理页、后台 BFF 接口、shared-contracts/admin DTO、admin-web 路由导航、Excel/表格导出与验证发布时使用。
version: 1.0.0 version: 1.0.0
author: Hermes Agent author: Hermes Agent
license: MIT license: MIT
metadata: metadata:
hermes: hermes:
tags: [Genarrative, 百梦后台, admin-web, 后台接口, Excel导出, Rust, Axum, SpacetimeDB] tags: [Genarrative, 陶泥儿后台, admin-web, 后台接口, Excel导出, Rust, Axum, SpacetimeDB]
related_skills: [genarrative-play-type-integration] related_skills: [genarrative-play-type-integration]
--- ---
# Genarrative / 百梦后台管理功能接入流程 # Genarrative / 陶泥儿后台管理功能接入流程
用于在 Genarrative 项目中新增或修改百梦后台管理端能力,包括后台页面、后台 API、管理端 DTO、导航路由、表格明细、导出、鉴权与验证。 用于在 Genarrative 项目中新增或修改陶泥儿后台管理端能力,包括后台页面、后台 API、管理端 DTO、导航路由、表格明细、导出、鉴权与验证。
## 适用场景 ## 适用场景
- 新增百梦后台页面或导航项,例如“埋点数据”“任务配置”“邀请码”。 - 新增陶泥儿后台页面或导航项,例如“埋点数据”“任务配置”“邀请码”。
- 新增 `/admin/api/*` 接口。 - 新增 `/admin/api/*` 接口。
- 修改 `apps/admin-web` 的后台页面、API client、路由、Shell 导航。 - 修改 `apps/admin-web` 的后台页面、API client、路由、Shell 导航。
- 在后台展示 SpacetimeDB 表明细或统计数据。 - 在后台展示 SpacetimeDB 表明细或统计数据。

View File

@@ -2,7 +2,7 @@
## 背景 ## 背景
本次在 Genarrative/百梦后台新增“埋点数据”页: 本次在 Genarrative/陶泥儿后台新增“埋点数据”页:
- 后端新增 `GET /admin/api/tracking/events` - 后端新增 `GET /admin/api/tracking/events`
- shared-contracts 新增 admin tracking query/list/entry DTO。 - shared-contracts 新增 admin tracking query/list/entry DTO。

View File

@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>百梦后台</title> <title>陶泥儿后台</title>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>

View File

@@ -50,7 +50,7 @@ export function AdminShell({
<ShieldCheck size={20} aria-hidden="true" /> <ShieldCheck size={20} aria-hidden="true" />
</div> </div>
<div> <div>
<strong></strong> <strong></strong>
<span>Admin</span> <span>Admin</span>
</div> </div>
</div> </div>

View File

@@ -86,7 +86,7 @@ export const adminTrackingEventDefinitions: AdminTrackingEventDefinition[] = [
key: 'wallet_ledger_view', key: 'wallet_ledger_view',
title: '钱包流水查看', title: '钱包流水查看',
scopeKind: 'user', scopeKind: 'user',
remark: '读取点钱包流水成功后记录。', remark: '读取点钱包流水成功后记录。',
}, },
{ {
key: 'recharge_center_view', key: 'recharge_center_view',

View File

@@ -742,9 +742,9 @@ const databaseTableColumnLabelMap: Record<string, string> = {
theme_tags_json: '主题标签JSON', theme_tags_json: '主题标签JSON',
cover_image_src: '封面图', cover_image_src: '封面图',
cover_asset_id: '封面资产ID', cover_asset_id: '封面资产ID',
public_user_code: '百梦号', public_user_code: '陶泥号',
public_work_code: '公开作品号', public_work_code: '公开作品号',
author_public_user_code: '作者百梦号', author_public_user_code: '作者陶泥号',
author_display_name: '作者昵称', author_display_name: '作者昵称',
display_name: '显示名', display_name: '显示名',
avatar_url: '头像地址', avatar_url: '头像地址',
@@ -874,9 +874,9 @@ const databaseTableColumnDescriptionMap: Record<string, string> = {
theme_tags_json: '主题标签列表 JSON', theme_tags_json: '主题标签列表 JSON',
cover_image_src: '封面图片地址或平台资产引用', cover_image_src: '封面图片地址或平台资产引用',
cover_asset_id: '封面对应的平台资产 ID', cover_asset_id: '封面对应的平台资产 ID',
public_user_code: '用户对外展示的百梦号', public_user_code: '用户对外展示的陶泥号',
public_work_code: '作品公开后对外展示的作品号', public_work_code: '作品公开后对外展示的作品号',
author_public_user_code: '作者对外展示的百梦号', author_public_user_code: '作者对外展示的陶泥号',
author_display_name: '作者展示昵称', author_display_name: '作者展示昵称',
display_name: '用户展示名称', display_name: '用户展示名称',
avatar_url: '用户头像地址', avatar_url: '用户头像地址',

View File

@@ -39,7 +39,7 @@ export function AdminLoginPage({notice, onLogin}: AdminLoginPageProps) {
<ShieldCheck size={26} aria-hidden="true" /> <ShieldCheck size={26} aria-hidden="true" />
</div> </div>
<div> <div>
<h1></h1> <h1></h1>
<span>Admin Console</span> <span>Admin Console</span>
</div> </div>
</div> </div>

View File

@@ -253,7 +253,7 @@ export function AdminRedeemCodePage({
/> />
</label> </label>
<label className="admin-field"> <label className="admin-field">
<span></span> <span></span>
<textarea <textarea
rows={6} rows={6}
value={allowedPublicUserCodes} value={allowedPublicUserCodes}

View File

@@ -373,7 +373,7 @@ export function AdminTaskConfigPage({
/> />
</label> </label>
<label className="admin-field"> <label className="admin-field">
<span></span> <span></span>
<input <input
min={1} min={1}
step={1} step={1}

View File

@@ -13,7 +13,7 @@
重点补充RPG 创作与运行时脚本职责地图见 [RPG_CREATION_AND_RUNTIME_SCRIPT_RESPONSIBILITY_MAP_2026-04-28.md](./reference/RPG_CREATION_AND_RUNTIME_SCRIPT_RESPONSIBILITY_MAP_2026-04-28.md)。 重点补充RPG 创作与运行时脚本职责地图见 [RPG_CREATION_AND_RUNTIME_SCRIPT_RESPONSIBILITY_MAP_2026-04-28.md](./reference/RPG_CREATION_AND_RUNTIME_SCRIPT_RESPONSIBILITY_MAP_2026-04-28.md)。
- [埋点查询](./tracking/README.md):埋点原始事件与聚合投影的本地 SQL 查询。 - [埋点查询](./tracking/README.md):埋点原始事件与聚合投影的本地 SQL 查询。
- [运营查询](./operations/README.md):任务、领奖、钱包对账等后台核查查询。 - [运营查询](./operations/README.md):任务、领奖、钱包对账等后台核查查询。
- [PRD](./prd/README.md):产品需求与阶段计划;参考 MOKU / 幕间类 AI 文游的百梦 `text-game` 模板口径见 [AI_NATIVE_TEXT_GAME_TEMPLATE_MOKU_REFERENCE_PRD_2026-05-05.md](./prd/AI_NATIVE_TEXT_GAME_TEMPLATE_MOKU_REFERENCE_PRD_2026-05-05.md),视觉小说模板 TXT 玩法平台化接入口径见 [AI_NATIVE_VISUAL_NOVEL_TEMPLATE_PRD_2026-05-05.md](./prd/AI_NATIVE_VISUAL_NOVEL_TEMPLATE_PRD_2026-05-05.md),创意互动内容 Agent Phase 1 的 LangChain-Rust PoC、拼图闭环和并行任务拆分见 [CREATIVE_INTERACTIVE_AGENT_PHASE1_LANGCHAIN_RUST_PUZZLE_LOOP_PRD_2026-05-05.md](./prd/CREATIVE_INTERACTIVE_AGENT_PHASE1_LANGCHAIN_RUST_PUZZLE_LOOP_PRD_2026-05-05.md),幸存者类模板闭环见 [AI_NATIVE_SURVIVOR_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-05.md](./prd/AI_NATIVE_SURVIVOR_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-05.md),后台管理独立前端工程见 [ADMIN_WEB_CONSOLE_PRD_2026-04-30.md](./prd/ADMIN_WEB_CONSOLE_PRD_2026-04-30.md),新增 RPG 开场动画方案见 [AI_NATIVE_RPG_OPENING_ANIMATION_PRD_2026-04-25.md](./prd/AI_NATIVE_RPG_OPENING_ANIMATION_PRD_2026-04-25.md),新增抓大鹅 Match3D 玩法方案见 [AI_NATIVE_MATCH3D_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-04-30.md](./prd/AI_NATIVE_MATCH3D_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-04-30.md),方洞挑战创作、发布与试玩闭环见 [AI_NATIVE_SQUARE_HOLE_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-04.md](./prd/AI_NATIVE_SQUARE_HOLE_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-04.md)。 - [PRD](./prd/README.md):产品需求与阶段计划;参考 MOKU / 幕间类 AI 文游的陶泥儿 `text-game` 模板口径见 [AI_NATIVE_TEXT_GAME_TEMPLATE_MOKU_REFERENCE_PRD_2026-05-05.md](./prd/AI_NATIVE_TEXT_GAME_TEMPLATE_MOKU_REFERENCE_PRD_2026-05-05.md),视觉小说模板 TXT 玩法平台化接入口径见 [AI_NATIVE_VISUAL_NOVEL_TEMPLATE_PRD_2026-05-05.md](./prd/AI_NATIVE_VISUAL_NOVEL_TEMPLATE_PRD_2026-05-05.md),创意互动内容 Agent Phase 1 的 LangChain-Rust PoC、拼图闭环和并行任务拆分见 [CREATIVE_INTERACTIVE_AGENT_PHASE1_LANGCHAIN_RUST_PUZZLE_LOOP_PRD_2026-05-05.md](./prd/CREATIVE_INTERACTIVE_AGENT_PHASE1_LANGCHAIN_RUST_PUZZLE_LOOP_PRD_2026-05-05.md),幸存者类模板闭环见 [AI_NATIVE_SURVIVOR_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-05.md](./prd/AI_NATIVE_SURVIVOR_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-05.md),后台管理独立前端工程见 [ADMIN_WEB_CONSOLE_PRD_2026-04-30.md](./prd/ADMIN_WEB_CONSOLE_PRD_2026-04-30.md),新增 RPG 开场动画方案见 [AI_NATIVE_RPG_OPENING_ANIMATION_PRD_2026-04-25.md](./prd/AI_NATIVE_RPG_OPENING_ANIMATION_PRD_2026-04-25.md),新增抓大鹅 Match3D 玩法方案见 [AI_NATIVE_MATCH3D_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-04-30.md](./prd/AI_NATIVE_MATCH3D_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-04-30.md),方洞挑战创作、发布与试玩闭环见 [AI_NATIVE_SQUARE_HOLE_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-04.md](./prd/AI_NATIVE_SQUARE_HOLE_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-04.md)。
生产部署切换到 systemd + Nginx + SpacetimeDB 自托管的总方案见 [PRODUCTION_DEPLOYMENT_PLAN_2026-05-02.md](./technical/PRODUCTION_DEPLOYMENT_PLAN_2026-05-02.md),该文档也是当前生产 Jenkinsfile 的唯一入口。SpacetimeDB 表结构变更、自动迁移边界和保留旧数据的分阶段迁移流程见 [SPACETIMEDB_SCHEMA_CHANGE_CONSTRAINTS.md](./technical/SPACETIMEDB_SCHEMA_CHANGE_CONSTRAINTS.md)private 表迁移 JSON 导入导出、HTTP 413 分片导入和旧数据库迁移流水线经验见 [SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md](./technical/SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md) 与 [JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md](./technical/JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md);后台管理独立前端工程技术方案见 [ADMIN_WEB_CONSOLE_TECHNICAL_SOLUTION_2026-04-30.md](./technical/ADMIN_WEB_CONSOLE_TECHNICAL_SOLUTION_2026-04-30.md)。 生产部署切换到 systemd + Nginx + SpacetimeDB 自托管的总方案见 [PRODUCTION_DEPLOYMENT_PLAN_2026-05-02.md](./technical/PRODUCTION_DEPLOYMENT_PLAN_2026-05-02.md),该文档也是当前生产 Jenkinsfile 的唯一入口。SpacetimeDB 表结构变更、自动迁移边界和保留旧数据的分阶段迁移流程见 [SPACETIMEDB_SCHEMA_CHANGE_CONSTRAINTS.md](./technical/SPACETIMEDB_SCHEMA_CHANGE_CONSTRAINTS.md)private 表迁移 JSON 导入导出、HTTP 413 分片导入和旧数据库迁移流水线经验见 [SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md](./technical/SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md) 与 [JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md](./technical/JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md);后台管理独立前端工程技术方案见 [ADMIN_WEB_CONSOLE_TECHNICAL_SOLUTION_2026-04-30.md](./technical/ADMIN_WEB_CONSOLE_TECHNICAL_SOLUTION_2026-04-30.md)。

View File

@@ -6,7 +6,7 @@
当前自定义世界创作工具已经有了比较强的生成骨架、锚点结构和结果编辑能力,但整体仍处在一个很明显的“半收口状态”: 当前自定义世界创作工具已经有了比较强的生成骨架、锚点结构和结果编辑能力,但整体仍处在一个很明显的“半收口状态”:
**设计目标已经走到“百梦主工作台”,数据结构已经支持“锚点化输入”,但实际体验仍然更像“大文本生成器 + 大型结果总表编辑器”。** **设计目标已经走到“陶泥儿主工作台”,数据结构已经支持“锚点化输入”,但实际体验仍然更像“大文本生成器 + 大型结果总表编辑器”。**
如果用一句话概括当前问题,就是: 如果用一句话概括当前问题,就是:
@@ -61,7 +61,7 @@
- 标志性要素 - 标志性要素
- 禁止事项 - 禁止事项
但实际入口 `src/components/SelectionCustomizationModals.tsx` 里,百梦主弹窗仍然基本只有: 但实际入口 `src/components/SelectionCustomizationModals.tsx` 里,陶泥儿主弹窗仍然基本只有:
- 生成模式 - 生成模式
- 一块大 textarea - 一块大 textarea
@@ -82,7 +82,7 @@
--- ---
## 2.2 澄清机制已经存在,但没有真正服务百梦 ## 2.2 澄清机制已经存在,但没有真正服务陶泥儿
`server-node/src/services/customWorldSessionStore.ts` 已经支持: `server-node/src/services/customWorldSessionStore.ts` 已经支持:
@@ -101,7 +101,7 @@
这意味着: 这意味着:
**系统表面上已经有“先澄清再生成”的能力,但实际体验里,百梦主并没有真正参与这一步。** **系统表面上已经有“先澄清再生成”的能力,但实际体验里,陶泥儿主并没有真正参与这一步。**
结果就是: 结果就是:
@@ -113,7 +113,7 @@
- 把 session question 真正接到前端,作为生成前的二次确认步骤。 - 把 session question 真正接到前端,作为生成前的二次确认步骤。
- 每次只问 `1~3` 个最关键问题,不要把它做成问卷。 - 每次只问 `1~3` 个最关键问题,不要把它做成问卷。
- 支持“一键使用系统建议”,但必须让百梦主可见,而不是静默自动填充。 - 支持“一键使用系统建议”,但必须让陶泥儿主可见,而不是静默自动填充。
- 把回答结果回写到 `creatorIntent`,而不是只作为一次性会话答案。 - 把回答结果回写到 `creatorIntent`,而不是只作为一次性会话答案。
--- ---
@@ -175,7 +175,7 @@
这会带来三层问题: 这会带来三层问题:
1. 百梦主负担过重 1. 陶泥儿主负担过重
- 很多字段属于“系统编译层”,不属于“创作决策层”。 - 很多字段属于“系统编译层”,不属于“创作决策层”。
2. 移动端负担过重 2. 移动端负担过重
@@ -240,7 +240,7 @@
--- ---
## 2.6 快速模式还不够“快”,生成页也还不够“百梦主视角” ## 2.6 快速模式还不够“快”,生成页也还不够“陶泥儿主视角”
当前快速模式的主要区别,是把数量降成: 当前快速模式的主要区别,是把数量降成:
@@ -269,7 +269,7 @@
- 计时 - 计时
- 模型阶段 - 模型阶段
而不是百梦主真正关心的: 而不是陶泥儿主真正关心的:
- 关键角色有没有成型 - 关键角色有没有成型
- 核心冲突有没有稳定 - 核心冲突有没有稳定
@@ -281,7 +281,7 @@
- 快速模式改成真正的“关键锚点预览模式”: - 快速模式改成真正的“关键锚点预览模式”:
- 先只生成关键角色、关键地点、核心冲突摘要 - 先只生成关键角色、关键地点、核心冲突摘要
- 暂不补全所有长尾档案 - 暂不补全所有长尾档案
- 生成页改成“百梦主视角进度”: - 生成页改成“陶泥儿主视角进度”:
- 世界灵魂已确定 - 世界灵魂已确定
- 关键角色已成型 - 关键角色已成型
- 关键地点已落地 - 关键地点已落地
@@ -391,16 +391,16 @@
### P0先修主链路闭环 ### P0先修主链路闭环
- 补卡片化输入入口,至少把关键锚点输入真正开放出来。 - 补卡片化输入入口,至少把关键锚点输入真正开放出来。
- 把澄清问题正式接入百梦主流程,不再静默自动兜底。 - 把澄清问题正式接入陶泥儿主流程,不再静默自动兜底。
- 修正“新建完成后直接回世界列表”的流程,生成后默认进入结果工作台。 - 修正“新建完成后直接回世界列表”的流程,生成后默认进入结果工作台。
- 统一锁定与局部重生成规则,先让“百梦主不怕重生成”成立。 - 统一锁定与局部重生成规则,先让“陶泥儿主不怕重生成”成立。
### P1再降低工作台负担 ### P1再降低工作台负担
- 结果页默认只展示高杠杆编辑。 - 结果页默认只展示高杠杆编辑。
- 低杠杆字段进入高级模式。 - 低杠杆字段进入高级模式。
- 快速模式改成真正的关键对象预览模式。 - 快速模式改成真正的关键对象预览模式。
- 生成页改成百梦主视角进度,而不是模型批次视角。 - 生成页改成陶泥儿主视角进度,而不是模型批次视角。
### P2最后做架构收口与去模板化 ### P2最后做架构收口与去模板化
@@ -441,4 +441,4 @@
当前自定义世界创作工具最需要的,不是再继续补更多字段或更多生成步骤,而是: 当前自定义世界创作工具最需要的,不是再继续补更多字段或更多生成步骤,而是:
**把“百梦主先决定灵魂锚点,系统再稳定展开世界”这条主逻辑真正落到 UI、流程和后端边界上。** **把“陶泥儿主先决定灵魂锚点,系统再稳定展开世界”这条主逻辑真正落到 UI、流程和后端边界上。**

View File

@@ -1,15 +1,15 @@
# 百梦线下展会易拉宝设计记录 2026-05-07 # 陶泥儿线下展会易拉宝设计记录 2026-05-07
## 1. 目标 ## 1. 目标
百梦线下展会制作一张纵向易拉宝广告展板,用于在展位现场快速传达: 陶泥儿线下展会制作一张纵向易拉宝广告展板,用于在展位现场快速传达:
1. 产品名称:百梦 1. 产品名称:陶泥儿
2. 产品愿景:百梦AI团队致力于打造AI互动内容UGC平台。 2. 产品愿景:陶泥儿AI团队致力于打造AI互动内容UGC平台。
3. 产品slogan不用代码不用美术10分钟把脑洞变成有趣的体验。 3. 产品slogan不用代码不用美术10分钟把脑洞变成有趣的体验。
4. 产品特点:低门槛创作、高完成度作品、玩过后可改造并发布。 4. 产品特点:低门槛创作、高完成度作品、玩过后可改造并发布。
5. 关键技术Harness Engineering、多Agent调度、AI创作工具、AI原生游戏框架。 5. 关键技术Harness Engineering、多Agent调度、AI创作工具、AI原生游戏框架。
6. 产品心智:想玩但找不到、玩到不满意、平台外体验不满意时,都可以来百梦做成自己满意的。 6. 产品心智:想玩但找不到、玩到不满意、平台外体验不满意时,都可以来陶泥儿做成自己满意的。
## 2. 视觉方向 ## 2. 视觉方向
@@ -27,7 +27,7 @@
第一层:品牌识别 第一层:品牌识别
```text ```text
百梦 陶泥儿
10分钟做自己的互动内容 10分钟做自己的互动内容
``` ```
@@ -57,10 +57,10 @@
第四层:产品心智与关键技术 第四层:产品心智与关键技术
```text ```text
当用户找不到想玩的游戏 -> 来百梦做给自己玩 当用户找不到想玩的游戏 -> 来陶泥儿做给自己玩
当用户玩到了不好玩的游戏 -> 快速改成自己喜欢玩的 当用户玩到了不好玩的游戏 -> 快速改成自己喜欢玩的
当用户在平台外玩到了不满意的游戏 -> 来百梦做成自己满意的 当用户在平台外玩到了不满意的游戏 -> 来陶泥儿做成自己满意的
什么游戏最好玩? -> 来百梦玩自己做的游戏最好玩 什么游戏最好玩? -> 来陶泥儿玩自己做的游戏最好玩
``` ```
关键技术压缩为: 关键技术压缩为:
@@ -82,7 +82,7 @@ AI原生游戏框架
```text ```text
model: gpt-image-2 model: gpt-image-2
size: 1536x3840 size: 1536x3840
reference image: 百梦气泡共创logo方向图 reference image: 陶泥儿气泡共创logo方向图
output: output/imagegen/baimeng-expo-rollup/baimeng-rollup-background-gpt-image-2.png output: output/imagegen/baimeng-expo-rollup/baimeng-rollup-background-gpt-image-2.png
``` ```
@@ -119,17 +119,17 @@ output/imagegen/baimeng-expo-rollup/baimeng-rollup-final-cn-preview.png
北京亓盒网络科技有限公司 北京亓盒网络科技有限公司
岗位名称AI 原生游戏产品/内容实习生 岗位名称AI 原生游戏产品/内容实习生
行业方向AI 原生游戏 × UGC 内容创作 × 互动叙事 行业方向AI 原生游戏 × UGC 内容创作 × 互动叙事
产品:百梦 AI互动内容创作平台 产品:陶泥儿 AI互动内容创作平台
``` ```
新版保留百梦气泡色彩、轻盈白底和创作流动感但新增校园实验室、AI 游戏创作、作品卡、产品测试与内容设计氛围。版面结构调整为: 新版保留陶泥儿气泡色彩、轻盈白底和创作流动感但新增校园实验室、AI 游戏创作、作品卡、产品测试与内容设计氛围。版面结构调整为:
1. 顶部:公司名、岗位名、行业方向与招聘主标题。 1. 顶部:公司名、岗位名、行业方向与招聘主标题。
2. 中上:百梦产品主张与三枚产品能力标签。 2. 中上:陶泥儿产品主张与三枚产品能力标签。
3. 中部:按 `游玩 -> 改造 -> 创作` 顺序展示产品体验闭环。 3. 中部:按 `游玩 -> 改造 -> 创作` 顺序展示产品体验闭环。
4. 中下:介绍“我们正在做的事「百梦」”。 4. 中下:介绍“我们正在做的事「陶泥儿」”。
5. 下部:实习生参与内容、加分项、团队背景和联系方式。 5. 下部:实习生参与内容、加分项、团队背景和联系方式。
6. 底部:预留两个方形二维码占位,收尾文案为 `百梦 | 让每个人都能做自己的游戏` 6. 底部:预留两个方形二维码占位,收尾文案为 `陶泥儿 | 让每个人都能做自己的游戏`
新版使用当前仓库 `VectorEngine gpt-image-2-all` 路径生成底图: 新版使用当前仓库 `VectorEngine gpt-image-2-all` 路径生成底图:
@@ -137,7 +137,7 @@ output/imagegen/baimeng-expo-rollup/baimeng-rollup-final-cn-preview.png
model: gpt-image-2-all model: gpt-image-2-all
size: 1536x3840 size: 1536x3840
reference image 1: 用户提供的上一版海报截图 reference image 1: 用户提供的上一版海报截图
reference image 2: 百梦气泡共创logo方向图 reference image 2: 陶泥儿气泡共创logo方向图
output: output/imagegen/baimeng-recruitment-rollup/baimeng-recruitment-rollup-background-gpt-image-2-all.png output: output/imagegen/baimeng-recruitment-rollup/baimeng-recruitment-rollup-background-gpt-image-2-all.png
``` ```

View File

@@ -1,8 +1,8 @@
# 百梦 logo gpt-image-2 概念方案 2026-05-05 # 陶泥儿 logo gpt-image-2 概念方案 2026-05-05
## 1. 产品气质提炼 ## 1. 产品气质提炼
当前产品对外名为“百梦”,核心不是单一 RPG 玩法,而是面向互动叙事、世界生成和运行时演出的 AI 原生创作平台。 当前产品对外名为“陶泥儿”,核心不是单一 RPG 玩法,而是面向互动叙事、世界生成和运行时演出的 AI 原生创作平台。
本次 logo 概念围绕以下关键词设计: 本次 logo 概念围绕以下关键词设计:
@@ -16,7 +16,7 @@
视觉方向: 视觉方向:
- 用一个打开的门 / 星门作为主体,门内有多条细线向外延展,代表百梦主从一个灵感入口进入多个世界。 - 用一个打开的门 / 星门作为主体,门内有多条细线向外延展,代表陶泥儿主从一个灵感入口进入多个世界。
- 负形中弱化出“百”的结构,不强行写字,方便后续做 App icon、favicon 和小尺寸导航标。 - 负形中弱化出“百”的结构,不强行写字,方便后续做 App icon、favicon 和小尺寸导航标。
- 色彩以暖白、珊瑚粉、少量紫蓝和深墨色组成,贴近平台亮色主题,同时保留梦境和 AI 的科技感。 - 色彩以暖白、珊瑚粉、少量紫蓝和深墨色组成,贴近平台亮色主题,同时保留梦境和 AI 的科技感。
@@ -28,7 +28,7 @@
设计含义: 设计含义:
“梦门”代表创作入口,“星轨”代表剧情线程、角色关系和世界分支。它强调百梦是让创作者开启世界的工具,而不是只播放固定剧情的游戏。 “梦门”代表创作入口,“星轨”代表剧情线程、角色关系和世界分支。它强调陶泥儿是让创作者开启世界的工具,而不是只播放固定剧情的游戏。
## 3. 方案 B叙事图谱 ## 3. 方案 B叙事图谱
@@ -36,7 +36,7 @@
- 用节点、弧线和轻微书页轮廓组成一个稳定的圆形标志。 - 用节点、弧线和轻微书页轮廓组成一个稳定的圆形标志。
- 图谱整体形成近似“百”的秩序感,避免复杂到小尺寸失真。 - 图谱整体形成近似“百”的秩序感,避免复杂到小尺寸失真。
- 色彩以深墨、湖青、点金和珊瑚色组合,体现规则边界与创作活力并存。 - 色彩以深墨、湖青、点金和珊瑚色组合,体现规则边界与创作活力并存。
适合场景: 适合场景:
@@ -48,13 +48,13 @@
这个方向更强调“世界不是一段文本,而是一张可控的叙事图谱”。节点是角色、地点、物件和任务,弧线是关系、暗线与回响。 这个方向更强调“世界不是一段文本,而是一张可控的叙事图谱”。节点是角色、地点、物件和任务,弧线是关系、暗线与回响。
## 4. 方案 C点梦织 ## 4. 方案 C点梦织
视觉方向: 视觉方向:
- 多个点汇聚成柔和的“B / 百”抽象符号,中心像一枚被点亮的种子。 - 多个点汇聚成柔和的“B / 百”抽象符号,中心像一枚被点亮的种子。
- 线条更轻,图形更偏平台化和消费级,不做重游戏徽章。 - 线条更轻,图形更偏平台化和消费级,不做重游戏徽章。
- 色彩采用珊瑚粉、暖金、浅青和深色细线,表达“点”消费单位与灵感生长。 - 色彩采用珊瑚粉、暖金、浅青和深色细线,表达“点”消费单位与灵感生长。
适合场景: 适合场景:
@@ -64,7 +64,7 @@
设计含义: 设计含义:
每个点都是一次生成、一次灵感、一次世界推进。多点汇聚成梦,呼应“百梦”里从许多小创意生长出完整作品的路径。 每个点都是一次生成、一次灵感、一次世界推进。多点汇聚成梦,呼应“陶泥儿”里从许多小创意生长出完整作品的路径。
## 5. 方案 D像素剧场 ## 5. 方案 D像素剧场
@@ -82,11 +82,11 @@
设计含义: 设计含义:
舞台代表演出,卷轴代表叙事,星形光标代表 AI 与玩家选择。它让百梦看起来仍然属于游戏和互动内容,而不是泛 AI 工具。 舞台代表演出,卷轴代表叙事,星形光标代表 AI 与玩家选择。它让陶泥儿看起来仍然属于游戏和互动内容,而不是泛 AI 工具。
## 6. 生成说明 ## 6. 生成说明
本次推荐先用 `gpt-image-2` 生成 4 张 `1024x1024` 方形草案。由于图片模型对中文文字的稳定性有限,首轮应优先验证“图形标识”而不是直接把“百梦”两个字烘焙进图片。最终产品落地时,建议使用真实前端字体或 SVG 字形承载“百梦”字标,把生成图作为图形标志参考。 本次推荐先用 `gpt-image-2` 生成 4 张 `1024x1024` 方形草案。由于图片模型对中文文字的稳定性有限,首轮应优先验证“图形标识”而不是直接把“陶泥儿”两个字烘焙进图片。最终产品落地时,建议使用真实前端字体或 SVG 字形承载“陶泥儿”字标,把生成图作为图形标志参考。
## 7. 女性友好与全年龄潮流版补充 ## 7. 女性友好与全年龄潮流版补充
@@ -96,8 +96,8 @@
- 字形更圆润,减少尖锐笔锋、黑底压迫感和玄幻气质。 - 字形更圆润,减少尖锐笔锋、黑底压迫感和玄幻气质。
- 色彩从黑白、金色、深墨切换到奶油白、莓果粉、薰衣草紫、薄荷青。 - 色彩从黑白、金色、深墨切换到奶油白、莓果粉、薰衣草紫、薄荷青。
- 允许轻量梦泡、云朵、柔软点等符号,但不堆叠插画。 - 允许轻量梦泡、云朵、柔软点等符号,但不堆叠插画。
- 保留“百梦”中文字标作为主识别,图标可作为 App icon 或社交头像补充。 - 保留“陶泥儿”中文字标作为主识别,图标可作为 App icon 或社交头像补充。
本轮生成 prompt 本轮生成 prompt

View File

@@ -1,4 +1,4 @@
# 自定义世界百梦主输入与 AI 分工边界设计 # 自定义世界陶泥儿主输入与 AI 分工边界设计
更新时间:`2026-04-06` 更新时间:`2026-04-06`
@@ -6,9 +6,9 @@
这份文档回答一个非常关键的问题: 这份文档回答一个非常关键的问题:
**在“低创作门槛、高创作自由度”的前提下,自定义世界里哪些内容应该交给百梦主直接定义,哪些内容应该交给 AI 和系统完成。** **在“低创作门槛、高创作自由度”的前提下,自定义世界里哪些内容应该交给陶泥儿主直接定义,哪些内容应该交给 AI 和系统完成。**
这里默认我们的百梦主: 这里默认我们的陶泥儿主:
- 不需要有专业作家背景 - 不需要有专业作家背景
- 不需要有专业游戏设计背景 - 不需要有专业游戏设计背景
@@ -16,33 +16,33 @@
一句话目标: 一句话目标:
**让百梦主把精力放在“决定这个世界为什么值得被创作”,把 AI 用在“把这个世界展开、编译、铺开、校验、补足”。** **让陶泥儿主把精力放在“决定这个世界为什么值得被创作”,把 AI 用在“把这个世界展开、编译、铺开、校验、补足”。**
## 1. 总体结论 ## 1. 总体结论
自定义世界的分工边界应该遵守 3 条硬原则: 自定义世界的分工边界应该遵守 3 条硬原则:
1. 灵魂归百梦主,杂活归 AI。 1. 灵魂归陶泥儿主,杂活归 AI。
- 凡是决定作品气质、主题、冲突、人物关系、审美方向的内容,都应由百梦主掌握。 - 凡是决定作品气质、主题、冲突、人物关系、审美方向的内容,都应由陶泥儿主掌握。
2. 重点对象归百梦主,长尾铺量归 AI。 2. 重点对象归陶泥儿主,长尾铺量归 AI。
- 百梦主应重点塑造少量关键角色、关键地点、关键冲突、关键意象,而不是被迫手填几十个 NPC、几十个场景、几百条描述。 - 陶泥儿主应重点塑造少量关键角色、关键地点、关键冲突、关键意象,而不是被迫手填几十个 NPC、几十个场景、几百条描述。
3. 决策归百梦主,编译归 AI / 系统。 3. 决策归陶泥儿主,编译归 AI / 系统。
- 百梦主负责说“这个世界要成为什么样”AI / 系统负责把它编译成可运行的数据、规则、文本、关系钩子和运行时结构。 - 陶泥儿主负责说“这个世界要成为什么样”AI / 系统负责把它编译成可运行的数据、规则、文本、关系钩子和运行时结构。
这意味着: 这意味着:
- 百梦主应该主要编辑“高杠杆创作锚点” - 陶泥儿主应该主要编辑“高杠杆创作锚点”
- AI 应该主要承担“批量展开 + 结构编译 + 一致性维护 + 专业执行” - AI 应该主要承担“批量展开 + 结构编译 + 一致性维护 + 专业执行”
## 2. 什么内容应该交给百梦 ## 2. 什么内容应该交给陶泥儿
真正应该交给百梦主的,不是大量表格字段,而是下面这些会显著决定作品质量、且 AI 不擅长替代的内容。 真正应该交给陶泥儿主的,不是大量表格字段,而是下面这些会显著决定作品质量、且 AI 不擅长替代的内容。
## 2.1 世界核心命题 ## 2.1 世界核心命题
百梦主应该直接定义: 陶泥儿主应该直接定义:
- 这个世界的一句话设定 - 这个世界的一句话设定
- 这个世界最吸引人的核心幻想 - 这个世界最吸引人的核心幻想
@@ -56,7 +56,7 @@
## 2.2 主题、气质与边界 ## 2.2 主题、气质与边界
百梦主应该直接定义: 陶泥儿主应该直接定义:
- 主题关键词 - 主题关键词
- 情绪基调 - 情绪基调
@@ -71,7 +71,7 @@
## 2.3 玩家身份与开局处境 ## 2.3 玩家身份与开局处境
百梦主应该直接定义: 陶泥儿主应该直接定义:
- 玩家扮演的是什么人 - 玩家扮演的是什么人
- 玩家一开始最缺什么、最想要什么 - 玩家一开始最缺什么、最想要什么
@@ -85,7 +85,7 @@
## 2.4 核心冲突与关键势力 ## 2.4 核心冲突与关键势力
百梦主应该直接定义少量高价值内容: 陶泥儿主应该直接定义少量高价值内容:
- 世界当前最重要的 `2~4` 条明面冲突 - 世界当前最重要的 `2~4` 条明面冲突
- 世界背后最关键的 `1~3` 条暗面问题 - 世界背后最关键的 `1~3` 条暗面问题
@@ -96,13 +96,13 @@
- 冲突结构决定世界是否“有戏” - 冲突结构决定世界是否“有戏”
- 势力关系是 AI 最容易写散、写平、写成百科介绍的部分 - 势力关系是 AI 最容易写散、写平、写成百科介绍的部分
- 这一层由百梦主把握,才能真正提高作品的辨识度 - 这一层由陶泥儿主把握,才能真正提高作品的辨识度
## 2.5 关键角色与关系张力 ## 2.5 关键角色与关系张力
百梦主应该直接定义少量关键角色,而不是所有 NPC。 陶泥儿主应该直接定义少量关键角色,而不是所有 NPC。
建议重点交给百梦主的,是: 建议重点交给陶泥儿主的,是:
- `3~8` 个关键角色 - `3~8` 个关键角色
- 玩家与这些人的潜在关系 - 玩家与这些人的潜在关系
@@ -113,11 +113,11 @@
- 角色关系是最能显著提升作品质量的部分之一 - 角色关系是最能显著提升作品质量的部分之一
- 这也是 AI 最容易写得“完整但无味”的部分 - 这也是 AI 最容易写得“完整但无味”的部分
- 百梦主不需要写长篇背景,但应掌握这些角色真正的关系骨架 - 陶泥儿主不需要写长篇背景,但应掌握这些角色真正的关系骨架
## 2.6 关键地点与空间记忆点 ## 2.6 关键地点与空间记忆点
百梦主应该直接定义: 陶泥儿主应该直接定义:
- `4~12` 个关键地点 / 区域 / 地标 - `4~12` 个关键地点 / 区域 / 地标
- 这些地方为什么重要 - 这些地方为什么重要
@@ -131,7 +131,7 @@
## 2.7 标志性意象、物件、怪物、制度与规则 ## 2.7 标志性意象、物件、怪物、制度与规则
百梦主应该优先控制世界里最能代表它的东西: 陶泥儿主应该优先控制世界里最能代表它的东西:
- 标志性物件 - 标志性物件
- 标志性怪物 / 生物 - 标志性怪物 / 生物
@@ -144,9 +144,9 @@
- 这些内容决定世界的“手感” - 这些内容决定世界的“手感”
- 它们不是普通细节,而是会反复影响命名、剧情、视觉、对话与玩法解释的母题 - 它们不是普通细节,而是会反复影响命名、剧情、视觉、对话与玩法解释的母题
## 2.8 百梦主应直接控制的“禁止事项” ## 2.8 陶泥儿主应直接控制的“禁止事项”
百梦主必须能明确锁定: 陶泥儿主必须能明确锁定:
- 什么绝对不能改 - 什么绝对不能改
- 什么不能被 AI 自动扩写到别的方向 - 什么不能被 AI 自动扩写到别的方向
@@ -156,7 +156,7 @@
原因: 原因:
- 高自由度不等于所有内容都开放漂移 - 高自由度不等于所有内容都开放漂移
- 如果没有“锁定机制”AI 会把百梦主真正关心的内容稀释掉 - 如果没有“锁定机制”AI 会把陶泥儿主真正关心的内容稀释掉
## 3. 什么内容应该交给 AI 和系统 ## 3. 什么内容应该交给 AI 和系统
@@ -176,7 +176,7 @@
原因: 原因:
- 这些内容数量大、重复度高 - 这些内容数量大、重复度高
- 它们需要“贴合世界”,但不需要都由百梦主逐个手写 - 它们需要“贴合世界”,但不需要都由陶泥儿主逐个手写
- AI 很适合做“围绕锚点的批量铺量” - AI 很适合做“围绕锚点的批量铺量”
## 3.2 从创作锚点到系统结构的编译 ## 3.2 从创作锚点到系统结构的编译
@@ -186,7 +186,7 @@
- 从自然语言世界设定中提取题材词汇 - 从自然语言世界设定中提取题材词汇
- 从关键冲突中编译出世界叙事图谱 - 从关键冲突中编译出世界叙事图谱
- 从关键角色卡编译出角色叙事档案 - 从关键角色卡编译出角色叙事档案
-百梦主输入里自动生成标签、钩子、隐藏线索、章节摘要 -陶泥儿主输入里自动生成标签、钩子、隐藏线索、章节摘要
- 从地点和关系中编译出场景连接、事件触发和叙事回响 - 从地点和关系中编译出场景连接、事件触发和叙事回响
对应当前仓库,下面这些结构更适合由 AI / 系统生成,而不是让玩家直接编辑: 对应当前仓库,下面这些结构更适合由 AI / 系统生成,而不是让玩家直接编辑:
@@ -203,7 +203,7 @@
原因: 原因:
- 这些是运行时结构,不是百梦主真正想表达的作品内容 - 这些是运行时结构,不是陶泥儿主真正想表达的作品内容
- 直接暴露给玩家,会把创作过程变成专业数据填表 - 直接暴露给玩家,会把创作过程变成专业数据填表
## 3.3 专业化、规则化的任务 ## 3.3 专业化、规则化的任务
@@ -223,7 +223,7 @@
原因: 原因:
- 这些工作要么重复、要么专业、要么容易做脏活累活 - 这些工作要么重复、要么专业、要么容易做脏活累活
- 让非专业百梦主处理,会显著提高门槛,却不一定显著提高质量 - 让非专业陶泥儿主处理,会显著提高门槛,却不一定显著提高质量
## 3.4 一致性、纠错与查漏补缺 ## 3.4 一致性、纠错与查漏补缺
@@ -240,15 +240,15 @@
原因: 原因:
- 这是 AI 比人更适合做的“维护型工作” - 这是 AI 比人更适合做的“维护型工作”
- 它属于创作支持,不属于百梦主必须亲手完成的创作 - 它属于创作支持,不属于陶泥儿主必须亲手完成的创作
## 4. 最合理的边界不是二分法,而是三层分工 ## 4. 最合理的边界不是二分法,而是三层分工
自定义世界最合理的结构不是“玩家写”与“AI 写”的简单二选一,而是三层。 自定义世界最合理的结构不是“玩家写”与“AI 写”的简单二选一,而是三层。
## 4.1 第一层:百梦主必控层 ## 4.1 第一层:陶泥儿主必控层
这一层必须给百梦主高自由度,且能被锁定: 这一层必须给陶泥儿主高自由度,且能被锁定:
- 世界核心命题 - 世界核心命题
- 主题与气质 - 主题与气质
@@ -264,9 +264,9 @@
**少而重。** **少而重。**
## 4.2 第二层:百梦主可选强化层 ## 4.2 第二层:陶泥儿主可选强化层
这一层不应强制填写,但应该允许百梦主继续深挖: 这一层不应强制填写,但应该允许陶泥儿主继续深挖:
- 明线 / 暗线种子 - 明线 / 暗线种子
- 角色之间的旧事 - 角色之间的旧事
@@ -301,17 +301,17 @@
## 5. 具体模块的建议归属 ## 5. 具体模块的建议归属
| 模块 | 建议归属 | 百梦主应控制什么 | AI / 系统应负责什么 | | 模块 | 建议归属 | 陶泥儿主应控制什么 | AI / 系统应负责什么 |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| 世界一句话设定、核心幻想、核心卖点 | 百梦主直接控制 | 直接写、直接改、可锁定 | 给出备选表述和扩展方向 | | 世界一句话设定、核心幻想、核心卖点 | 陶泥儿主直接控制 | 直接写、直接改、可锁定 | 给出备选表述和扩展方向 |
| 主题、基调、审美、禁忌 | 百梦主直接控制 | 选择 / 改写 / 锁定 | 生成风格词、避雷词、提示词约束 | | 主题、基调、审美、禁忌 | 陶泥儿主直接控制 | 选择 / 改写 / 锁定 | 生成风格词、避雷词、提示词约束 |
| 玩家身份、开局处境、玩家目标 | 百梦主直接控制 | 直接定义 | 补足开局钩子和初始叙事包装 | | 玩家身份、开局处境、玩家目标 | 陶泥儿主直接控制 | 直接定义 | 补足开局钩子和初始叙事包装 |
| 关键势力与核心冲突 | 百梦主控AI 辅助 | 定义核心关系和立场 | 扩展冲突支路、生成世界线程 | | 关键势力与核心冲突 | 陶泥儿主控AI 辅助 | 定义核心关系和立场 | 扩展冲突支路、生成世界线程 |
| 关键角色 | 百梦主控AI 辅助 | 定义角色骨架、关系张力、秘密方向 | 生成长背景、章节拆分、技能、物品、叙事档案 | | 关键角色 | 陶泥儿主控AI 辅助 | 定义角色骨架、关系张力、秘密方向 | 生成长背景、章节拆分、技能、物品、叙事档案 |
| 关键地点 | 百梦主控AI 辅助 | 定义地点意义、气氛、秘密 | 扩展场景细节、连接关系、遭遇分布 | | 关键地点 | 陶泥儿主控AI 辅助 | 定义地点意义、气氛、秘密 | 扩展场景细节、连接关系、遭遇分布 |
| 标志性物件 / 怪物 / 制度 / 规则 | 百梦主控AI 辅助 | 定义代表性要素与硬边界 | 扩展变体、命名、说明、运行时挂钩 | | 标志性物件 / 怪物 / 制度 / 规则 | 陶泥儿主控AI 辅助 | 定义代表性要素与硬边界 | 扩展变体、命名、说明、运行时挂钩 |
| 普通 NPC / 路人 / 杂兵 / 次级地点 | 主要交给 AI | 仅在需要时抽查或替换 | 批量生成与风格保持 | | 普通 NPC / 路人 / 杂兵 / 次级地点 | 主要交给 AI | 仅在需要时抽查或替换 | 批量生成与风格保持 |
| 角色长背景、章节 teaser、context snippet | 主要交给 AI | 百梦主只改关键角色即可 | 自动拆章、压缩、解锁节奏整理 | | 角色长背景、章节 teaser、context snippet | 主要交给 AI | 陶泥儿主只改关键角色即可 | 自动拆章、压缩、解锁节奏整理 |
| 技能、初始物品、标签、构筑倾向 | 主要交给 AI / 系统 | 提供偏好或少量 override | 按角色和世界规则自动编译 | | 技能、初始物品、标签、构筑倾向 | 主要交给 AI / 系统 | 提供偏好或少量 override | 按角色和世界规则自动编译 |
| 世界图谱、知识事实、可见性、导演指令 | AI / 系统内部层 | 不应默认暴露给玩家 | 运行时编译与维护 | | 世界图谱、知识事实、可见性、导演指令 | AI / 系统内部层 | 不应默认暴露给玩家 | 运行时编译与维护 |
| 一致性检查、冲突检查、越权检查 | AI / 系统内部层 | 查看报告、决定是否采纳修改 | 自动扫描并提出修正建议 | | 一致性检查、冲突检查、越权检查 | AI / 系统内部层 | 查看报告、决定是否采纳修改 | 自动扫描并提出修正建议 |
@@ -328,7 +328,7 @@
- 精确数值型 build 倾向 - 精确数值型 build 倾向
- 复杂掉落预算 - 复杂掉落预算
更合理的做法是让百梦主填写直觉表达,例如: 更合理的做法是让陶泥儿主填写直觉表达,例如:
- `初见就戒备` - `初见就戒备`
- `容易合作` - `容易合作`
@@ -351,7 +351,7 @@
原因: 原因:
- 这些字段属于系统运行结构,不属于百梦主自然的创作语言 - 这些字段属于系统运行结构,不属于陶泥儿主自然的创作语言
- 直接让玩家填,会把工具变成只有懂系统的人才能用 - 直接让玩家填,会把工具变成只有懂系统的人才能用
## 6.3 不应该要求玩家逐个补完所有人物设定字段 ## 6.3 不应该要求玩家逐个补完所有人物设定字段
@@ -378,7 +378,7 @@
## 7. 推荐的创作输入形态 ## 7. 推荐的创作输入形态
要让非专业百梦主也能高自由度创作,输入形态必须改成“自然语言创作卡”,而不是“系统字段表单”。 要让非专业陶泥儿主也能高自由度创作,输入形态必须改成“自然语言创作卡”,而不是“系统字段表单”。
## 7.1 世界层卡片 ## 7.1 世界层卡片
@@ -397,10 +397,10 @@
## 7.2 每张卡片都允许 3 种输入方式 ## 7.2 每张卡片都允许 3 种输入方式
1. 一句话自由输入 1. 一句话自由输入
- 适合低门槛百梦 - 适合低门槛陶泥儿
2. 标签 / 选项 / 语气滑条 2. 标签 / 选项 / 语气滑条
- 适合不想写太多字的百梦 - 适合不想写太多字的陶泥儿
3. 高级补充 3. 高级补充
- 适合愿意继续深挖的人 - 适合愿意继续深挖的人
@@ -414,7 +414,7 @@
这是高创作自由度里非常关键的一点。 这是高创作自由度里非常关键的一点。
百梦主应当能: 陶泥儿主应当能:
- 锁定一个角色 - 锁定一个角色
- 锁定一个地点 - 锁定一个地点
@@ -422,13 +422,13 @@
- 只重生成未锁定部分 - 只重生成未锁定部分
- 围绕锁定内容重写其余世界 - 围绕锁定内容重写其余世界
否则百梦主每次调用 AI都会有“好不容易想好的东西被洗掉”的感受。 否则陶泥儿主每次调用 AI都会有“好不容易想好的东西被洗掉”的感受。
## 8. 面向当前仓库的结构映射建议 ## 8. 面向当前仓库的结构映射建议
为了便于后续落实现有系统,这份边界建议可以直接映射到当前结构: 为了便于后续落实现有系统,这份边界建议可以直接映射到当前结构:
## 8.1 百梦主输入层 ## 8.1 陶泥儿主输入层
建议主要映射到: 建议主要映射到:
@@ -445,7 +445,7 @@
## 8.2 AI 编译层 ## 8.2 AI 编译层
由 AI / 系统从百梦主输入自动补出: 由 AI / 系统从陶泥儿主输入自动补出:
- `themePack` - `themePack`
- `storyGraph` - `storyGraph`
@@ -465,7 +465,7 @@
- `CarrierStoryFingerprint` - `CarrierStoryFingerprint`
- `StorySignal` - `StorySignal`
这些内容应该是“系统如何把世界跑起来”,不是“百梦主必须亲手写完的创作内容”。 这些内容应该是“系统如何把世界跑起来”,不是“陶泥儿主必须亲手写完的创作内容”。
## 9. 产品层面的最终结论 ## 9. 产品层面的最终结论
@@ -480,12 +480,12 @@
它应该做成这样: 它应该做成这样:
1. 百梦主决定世界的灵魂锚点。 1. 陶泥儿主决定世界的灵魂锚点。
2. 百梦主重点塑造少量关键人、关键地、关键冲突、关键物。 2. 陶泥儿主重点塑造少量关键人、关键地、关键冲突、关键物。
3. AI 围绕这些锚点批量展开长尾内容。 3. AI 围绕这些锚点批量展开长尾内容。
4. 系统把这些内容编译成可运行的图谱、可见性、任务、物件和关系结构。 4. 系统把这些内容编译成可运行的图谱、可见性、任务、物件和关系结构。
5. 百梦主随时可以锁定核心创意,并局部重生成其余部分。 5. 陶泥儿主随时可以锁定核心创意,并局部重生成其余部分。
一句话收束: 一句话收束:
**百梦主应该写“这个世界为什么动人”AI 应该负责“让这个世界长出来并跑起来”。** **陶泥儿主应该写“这个世界为什么动人”AI 应该负责“让这个世界长出来并跑起来”。**

View File

@@ -6,17 +6,17 @@
这份文档用于回答一个更具体的问题: 这份文档用于回答一个更具体的问题:
**参考 RPG 专业剧情策划全流程后,在自定义世界创作工具里,哪些设定必须要求百梦主手动填写,哪些设定应该由 AI 先生成但允许百梦主修改,哪些设定应完全交给系统托管,才能在“尽可能降低门槛”和“尽可能提高作品质量”之间取一个平衡。** **参考 RPG 专业剧情策划全流程后,在自定义世界创作工具里,哪些设定必须要求陶泥儿主手动填写,哪些设定应该由 AI 先生成但允许陶泥儿主修改,哪些设定应完全交给系统托管,才能在“尽可能降低门槛”和“尽可能提高作品质量”之间取一个平衡。**
这份文档不再只回答“百梦主与 AI 怎么分工”,而是进一步把创作工作台收束成一个更可执行的三层输入结构: 这份文档不再只回答“陶泥儿主与 AI 怎么分工”,而是进一步把创作工作台收束成一个更可执行的三层输入结构:
1. 百梦主必须手填的高杠杆锚点 1. 陶泥儿主必须手填的高杠杆锚点
2. AI 先生成、百梦主可修改的内容草稿层 2. AI 先生成、陶泥儿主可修改的内容草稿层
3. 系统自动编译和运行的托管层 3. 系统自动编译和运行的托管层
一句话结论: 一句话结论:
**让百梦主只负责决定作品的灵魂、视角、冲突和关系钩子,让 AI 负责把这些锚点展开成可编辑的剧情草稿,让系统负责把草稿编译成可运行的结构。** **让陶泥儿主只负责决定作品的灵魂、视角、冲突和关系钩子,让 AI 负责把这些锚点展开成可编辑的剧情草稿,让系统负责把草稿编译成可运行的结构。**
--- ---
@@ -25,27 +25,27 @@
这套平衡设计要同时满足 5 个目标: 这套平衡设计要同时满足 5 个目标:
1. 低门槛 1. 低门槛
-百梦主不需要写长篇设定,也不需要理解底层系统结构。 -陶泥儿主不需要写长篇设定,也不需要理解底层系统结构。
2. 高辨识度 2. 高辨识度
- 百梦主写出来的世界,不应该只是“像一个世界”,而应该保留明显的个人方向。 - 陶泥儿主写出来的世界,不应该只是“像一个世界”,而应该保留明显的个人方向。
3. 高可编辑性 3. 高可编辑性
- AI 不能一次生成后就不可控,百梦主必须能改关键对象、关键关系和关键章节。 - AI 不能一次生成后就不可控,陶泥儿主必须能改关键对象、关键关系和关键章节。
4. 高稳定性 4. 高稳定性
- 任务、章节、关系、物件和可见性等运行层结构不能依赖百梦主手填专业字段。 - 任务、章节、关系、物件和可见性等运行层结构不能依赖陶泥儿主手填专业字段。
5. 可扩展 5. 可扩展
- 愿意深挖的百梦主可以继续补充世界上限,不愿深挖的人也能快速产出质量不错的作品。 - 愿意深挖的陶泥儿主可以继续补充世界上限,不愿深挖的人也能快速产出质量不错的作品。
--- ---
## 2. 核心原则 ## 2. 核心原则
## 2.1 百梦主手填的必须是“高杠杆决策”,不是“高工作量字段” ## 2.1 陶泥儿主手填的必须是“高杠杆决策”,不是“高工作量字段”
应该要求百梦主手填的内容,必须同时满足下面两个条件: 应该要求陶泥儿主手填的内容,必须同时满足下面两个条件:
1. 会显著决定作品气质和辨识度 1. 会显著决定作品气质和辨识度
2. AI 很难替代判断 2. AI 很难替代判断
@@ -67,9 +67,9 @@
- 章节拆分 - 章节拆分
- 运行时信号结构 - 运行时信号结构
## 2.2 百梦主可改层应该承接“专业策划初稿”,而不是“原始底层字段” ## 2.2 陶泥儿主可改层应该承接“专业策划初稿”,而不是“原始底层字段”
AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而应该是一批已经成形的内容卡片,例如: AI 生成后允许陶泥儿主修改的,不应该是一堆技术型字段,而应该是一批已经成形的内容卡片,例如:
- 关键角色卡 - 关键角色卡
- 势力卡 - 势力卡
@@ -81,11 +81,11 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
也就是说: 也就是说:
**AI 先给百梦主一个像策划初稿的东西,而不是给一堆系统字段让百梦主自己拼。** **AI 先给陶泥儿主一个像策划初稿的东西,而不是给一堆系统字段让陶泥儿主自己拼。**
## 2.3 系统托管层必须彻底隐藏专业运行结构 ## 2.3 系统托管层必须彻底隐藏专业运行结构
以下这类结构不应该默认要求百梦主理解或编辑: 以下这类结构不应该默认要求陶泥儿主理解或编辑:
- `ThemePack` - `ThemePack`
- `WorldStoryGraph` - `WorldStoryGraph`
@@ -98,7 +98,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
- 稀有度映射 - 稀有度映射
- 掉落和 build 权重 - 掉落和 build 权重
百梦主应该编辑的是自然语言与内容卡,而不是运行时图结构。 陶泥儿主应该编辑的是自然语言与内容卡,而不是运行时图结构。
## 2.4 先少量必填,再逐层展开 ## 2.4 先少量必填,再逐层展开
@@ -107,9 +107,9 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
```text ```text
先填最小必填卡 先填最小必填卡
-> AI 生成世界初稿 -> AI 生成世界初稿
-> 百梦主修改关键对象 -> 陶泥儿主修改关键对象
-> 系统继续展开长尾 -> 系统继续展开长尾
-> 百梦主决定是否进入高级补充 -> 陶泥儿主决定是否进入高级补充
``` ```
## 2.5 默认清爽,深度能力后置 ## 2.5 默认清爽,深度能力后置
@@ -127,27 +127,27 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
## 3. 最终建议:三层分工 ## 3. 最终建议:三层分工
## 3.1 第一层:必须要求百梦主手动填写 ## 3.1 第一层:必须要求陶泥儿主手动填写
这一层只保留最影响作品质量的高杠杆锚点,建议默认强制填写 6 张卡。 这一层只保留最影响作品质量的高杠杆锚点,建议默认强制填写 6 张卡。
## 3.2 第二层AI 生成后支持百梦主修改 ## 3.2 第二层AI 生成后支持陶泥儿主修改
这一层由 AI 根据第一层锚点自动展开成专业剧情策划初稿,百梦主可以逐项修改、锁定、局部重生成。 这一层由 AI 根据第一层锚点自动展开成专业剧情策划初稿,陶泥儿主可以逐项修改、锁定、局部重生成。
## 3.3 第三层:其余都交给系统 ## 3.3 第三层:其余都交给系统
这一层是把前两层编译成可运行游戏结构所需的系统字段、数值和运行时指令,默认不要求百梦主处理。 这一层是把前两层编译成可运行游戏结构所需的系统字段、数值和运行时指令,默认不要求陶泥儿主处理。
--- ---
## 4. 最低门槛方案:只强制手填 6 张卡 ## 4. 最低门槛方案:只强制手填 6 张卡
如果目标是尽可能降低门槛,同时又保留作品辨识度,建议只强制百梦主填写以下 6 张卡。 如果目标是尽可能降低门槛,同时又保留作品辨识度,建议只强制陶泥儿主填写以下 6 张卡。
## 4.1 卡 1世界一句话与核心幻想 ## 4.1 卡 1世界一句话与核心幻想
百梦主必须手填: 陶泥儿主必须手填:
- 世界一句话设定 - 世界一句话设定
- 玩家来到这个世界最想体验的感觉 - 玩家来到这个世界最想体验的感觉
@@ -165,7 +165,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
## 4.2 卡 2玩家身份与开局困境 ## 4.2 卡 2玩家身份与开局困境
百梦主必须手填: 陶泥儿主必须手填:
- 玩家是谁 - 玩家是谁
- 玩家开局最缺什么 - 玩家开局最缺什么
@@ -179,7 +179,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
## 4.3 卡 3主题气质与禁忌边界 ## 4.3 卡 3主题气质与禁忌边界
百梦主必须手填: 陶泥儿主必须手填:
- 主题关键词 - 主题关键词
- 情绪基调 - 情绪基调
@@ -199,7 +199,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
## 4.4 卡 4核心冲突 ## 4.4 卡 4核心冲突
百梦主必须手填: 陶泥儿主必须手填:
- 当前世界最重要的 `1~3` 个明面冲突 - 当前世界最重要的 `1~3` 个明面冲突
- 至少 `1` 个隐藏问题或暗面危机 - 至少 `1` 个隐藏问题或暗面危机
@@ -212,9 +212,9 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
## 4.5 卡 5关键关系钩子 ## 4.5 卡 5关键关系钩子
这里不强制百梦主一开始填写完整角色档案,只要求填写更高杠杆的“关系骨架”。 这里不强制陶泥儿主一开始填写完整角色档案,只要求填写更高杠杆的“关系骨架”。
百梦主必须手填: 陶泥儿主必须手填:
- `2~4` 条关键关系钩子 - `2~4` 条关键关系钩子
- 每条钩子至少说明: - 每条钩子至少说明:
@@ -229,7 +229,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
## 4.6 卡 6标志性要素与硬规则 ## 4.6 卡 6标志性要素与硬规则
百梦主必须手填: 陶泥儿主必须手填:
- `2~5` 个标志性要素 - `2~5` 个标志性要素
- 物件 - 物件
@@ -247,11 +247,11 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
--- ---
## 5. 不建议强制手填,但应该让 AI 生成后支持百梦主修改的设定 ## 5. 不建议强制手填,但应该让 AI 生成后支持陶泥儿主修改的设定
这一层是平衡“低门槛”和“高质量”的关键。 这一层是平衡“低门槛”和“高质量”的关键。
百梦主不需要从零填写这些内容,但 AI 生成后必须能看、能改、能锁定、能局部重生成。 陶泥儿主不需要从零填写这些内容,但 AI 生成后必须能看、能改、能锁定、能局部重生成。
## 5.1 世界外观层 ## 5.1 世界外观层
@@ -282,7 +282,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 势力很重要,但让新手一开始手写完整势力表太重 - 势力很重要,但让新手一开始手写完整势力表太重
- 更合理的做法是让 AI 基于核心冲突先出草稿,再由百梦主修正 - 更合理的做法是让 AI 基于核心冲突先出草稿,再由陶泥儿主修正
## 5.3 关键角色层 ## 5.3 关键角色层
@@ -302,8 +302,8 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 百梦主已经通过“关系钩子”给出最关键的人物骨架 - 陶泥儿主已经通过“关系钩子”给出最关键的人物骨架
- AI 负责把钩子展开成可编辑角色卡,百梦主再做精修 - AI 负责把钩子展开成可编辑角色卡,陶泥儿主再做精修
## 5.4 关键地点层 ## 5.4 关键地点层
@@ -319,7 +319,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 地点是世界感的重要来源 - 地点是世界感的重要来源
- 但新百梦主未必能一开始就写出完整地点网络 - 但新陶泥儿主未必能一开始就写出完整地点网络
## 5.5 世界线程层 ## 5.5 世界线程层
@@ -335,7 +335,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 线程是专业剧情结构,适合 AI 先搭骨架 - 线程是专业剧情结构,适合 AI 先搭骨架
-百梦主必须有权修正哪条线更重要、哪条线该隐藏 -陶泥儿主必须有权修正哪条线更重要、哪条线该隐藏
## 5.6 主线章节层 ## 5.6 主线章节层
@@ -350,9 +350,9 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 百梦主已经给出了世界目标、冲突和关系 - 陶泥儿主已经给出了世界目标、冲突和关系
- AI 可以先把它们编成主线章节初稿 - AI 可以先把它们编成主线章节初稿
- 百梦主再选择保留、删减或重排 - 陶泥儿主再选择保留、删减或重排
## 5.7 支线、角色线、阵营线层 ## 5.7 支线、角色线、阵营线层
@@ -367,7 +367,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 这是最适合 AI 拉开内容宽度的部分 - 这是最适合 AI 拉开内容宽度的部分
- 也是最需要百梦主局部精修的部分 - 也是最需要陶泥儿主局部精修的部分
## 5.8 场景章节层 ## 5.8 场景章节层
@@ -384,7 +384,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 当前项目已经在走“场景 = 章节单元”的方向 - 当前项目已经在走“场景 = 章节单元”的方向
- 这层非常适合 AI 编排出第一版,再由百梦主补强记忆点 - 这层非常适合 AI 编排出第一版,再由陶泥儿主补强记忆点
## 5.9 叙事载体层 ## 5.9 叙事载体层
@@ -397,7 +397,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
- 场景遗物 - 场景遗物
- 怪物命名及其故事指向 - 怪物命名及其故事指向
百梦主主要修改: 陶泥儿主主要修改:
- 哪些载体最重要 - 哪些载体最重要
- 哪些载体和哪条线程绑定 - 哪些载体和哪条线程绑定
@@ -417,13 +417,13 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 这些内容适合 AI 批量铺量 - 这些内容适合 AI 批量铺量
- 百梦主只需要挑、改、锁定,不必从零起草 - 陶泥儿主只需要挑、改、锁定,不必从零起草
--- ---
## 6. 其余设定应交给系统托管 ## 6. 其余设定应交给系统托管
以下内容不建议默认暴露给百梦主编辑,应由系统根据前两层自动编译和维护。 以下内容不建议默认暴露给陶泥儿主编辑,应由系统根据前两层自动编译和维护。
## 6.1 题材与术语编译层 ## 6.1 题材与术语编译层
@@ -450,7 +450,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 百梦主要的是“故事线能对”,不是维护图数据库 - 陶泥儿主要的是“故事线能对”,不是维护图数据库
## 6.3 可见性和 prompt 裁剪层 ## 6.3 可见性和 prompt 裁剪层
@@ -465,7 +465,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
原因: 原因:
- 这层必须稳定、严格、自动化 - 这层必须稳定、严格、自动化
- 不适合依赖百梦主手动维护 - 不适合依赖陶泥儿主手动维护
## 6.4 运行时导演层 ## 6.4 运行时导演层
@@ -494,7 +494,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
说明: 说明:
- 百梦主可以编辑“任务卡”和“章节卡” - 陶泥儿主可以编辑“任务卡”和“章节卡”
- 但不应默认编辑底层 contract 结构 - 但不应默认编辑底层 contract 结构
## 6.6 数值与配置层 ## 6.6 数值与配置层
@@ -511,7 +511,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
说明: 说明:
- 百梦主可以给“偏向” - 陶泥儿主可以给“偏向”
- 系统负责编译成具体数值 - 系统负责编译成具体数值
## 6.7 QA 与一致性层 ## 6.7 QA 与一致性层
@@ -547,7 +547,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
| 主线 | 不强制首轮手写完整主线 | 幕结构、章节卡、高潮与 handoff | 章节状态编译 | | 主线 | 不强制首轮手写完整主线 | 幕结构、章节卡、高潮与 handoff | 章节状态编译 |
| 支线/角色线 | 不强制首轮手写完整矩阵 | 支线种子、角色线事件、阵营线分歧 | 任务 contract 编译 | | 支线/角色线 | 不强制首轮手写完整矩阵 | 支线种子、角色线事件、阵营线分歧 | 任务 contract 编译 |
| 场景章节 | 不强制首轮手写全量章节 | 场景章节卡、阶段内容、章节载体 | signal 与导演层 | | 场景章节 | 不强制首轮手写全量章节 | 场景章节卡、阶段内容、章节载体 | signal 与导演层 |
| 运行时结构 | 不建议百梦主接触 | 不建议默认编辑 | 可见性、导演、信号、编译、QA | | 运行时结构 | 不建议陶泥儿主接触 | 不建议默认编辑 | 可见性、导演、信号、编译、QA |
--- ---
@@ -555,7 +555,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
## 8.1 第一步:只填写最小必填集 ## 8.1 第一步:只填写最小必填集
百梦主只需要完成: 陶泥儿主只需要完成:
1. 世界一句话与核心幻想 1. 世界一句话与核心幻想
2. 玩家身份与开局困境 2. 玩家身份与开局困境
@@ -584,9 +584,9 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
这里的重点不是一次补满全世界,而是先形成一个像样的内容骨架。 这里的重点不是一次补满全世界,而是先形成一个像样的内容骨架。
## 8.3 第三步:百梦主只精修高价值卡片 ## 8.3 第三步:陶泥儿主只精修高价值卡片
建议默认优先让百梦主编辑这 4 类卡片: 建议默认优先让陶泥儿主编辑这 4 类卡片:
1. 关键角色 1. 关键角色
2. 核心冲突与线程 2. 核心冲突与线程
@@ -606,7 +606,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
- 任务包装 - 任务包装
- 文案变体 - 文案变体
## 8.5 第五步:百梦主按需进入高级模式 ## 8.5 第五步:陶泥儿主按需进入高级模式
高级模式只对愿意深挖的人开放: 高级模式只对愿意深挖的人开放:
@@ -665,7 +665,7 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
## 10.2 每张卡只保留自然语言输入 ## 10.2 每张卡只保留自然语言输入
不要强迫百梦主在首轮填写: 不要强迫陶泥儿主在首轮填写:
- tags - tags
- ids - ids
@@ -676,20 +676,20 @@ AI 生成后允许百梦主修改的,不应该是一堆技术型字段,而
更合理的做法是: 更合理的做法是:
-百梦主输入自然语言或选择直觉标签 -陶泥儿主输入自然语言或选择直觉标签
- 再由系统编译成结构化字段 - 再由系统编译成结构化字段
## 10.3 首轮生成后默认先看“精修建议” ## 10.3 首轮生成后默认先看“精修建议”
AI 初稿生成后,不应该把百梦主直接扔进一个大编辑器。 AI 初稿生成后,不应该把陶泥儿主直接扔进一个大编辑器。
更好的做法是先给出: 更好的做法是先给出:
1. 哪些卡片最值得改 1. 哪些卡片最值得改
2. 哪些内容已经比较稳定 2. 哪些内容已经比较稳定
3. 哪些内容仍然偏泛,需要百梦主补个性 3. 哪些内容仍然偏泛,需要陶泥儿主补个性
这样能明显提高百梦主的修改效率。 这样能明显提高陶泥儿主的修改效率。
## 10.4 移动端优先只保留高杠杆操作 ## 10.4 移动端优先只保留高杠杆操作
@@ -707,15 +707,15 @@ AI 初稿生成后,不应该把百梦主直接扔进一个大编辑器。
## 11. 最后结论 ## 11. 最后结论
如果目标是在自定义世界创作中真正平衡“降低门槛”和“提高作品质量”,最好的做法不是让百梦主填更多字段,也不是把一切都交给 AI。 如果目标是在自定义世界创作中真正平衡“降低门槛”和“提高作品质量”,最好的做法不是让陶泥儿主填更多字段,也不是把一切都交给 AI。
更合理的平衡是: 更合理的平衡是:
1. 百梦主必须手填最小但高杠杆的 6 张卡,掌握世界灵魂。 1. 陶泥儿主必须手填最小但高杠杆的 6 张卡,掌握世界灵魂。
2. AI 根据这 6 张卡生成一套可编辑的专业剧情初稿,负责把骨架展开成角色、地点、线程、章节和载体。 2. AI 根据这 6 张卡生成一套可编辑的专业剧情初稿,负责把骨架展开成角色、地点、线程、章节和载体。
3. 百梦主只精修最有价值的关键对象,锁定真正重要的内容。 3. 陶泥儿主只精修最有价值的关键对象,锁定真正重要的内容。
4. 其余运行结构、数值、可见性、任务编译和 QA 检查都交给系统托管。 4. 其余运行结构、数值、可见性、任务编译和 QA 检查都交给系统托管。
一句话收束: 一句话收束:
**百梦主负责决定“这个世界为什么值得被创作”AI 负责把它整理成可修改的策划初稿,系统负责把它稳定地跑成一个游戏世界。** **陶泥儿主负责决定“这个世界为什么值得被创作”AI 负责把它整理成可修改的策划初稿,系统负责把它稳定地跑成一个游戏世界。**

View File

@@ -10,7 +10,7 @@
- 基于“最小必填锚点 + AI 初稿卡片 + 系统托管层”的结构化创作方案 - 基于“最小必填锚点 + AI 初稿卡片 + 系统托管层”的结构化创作方案
2. 纯 Agent 式方向 2. 纯 Agent 式方向
- 以前台对话为唯一主交互,百梦主主要通过和 Agent 聊天来完成世界构建、角色塑造、剧情扩展和修改 - 以前台对话为唯一主交互,陶泥儿主主要通过和 Agent 聊天来完成世界构建、角色塑造、剧情扩展和修改
文档需要回答 3 个问题: 文档需要回答 3 个问题:
@@ -34,7 +34,7 @@
当前方案的核心是: 当前方案的核心是:
1. 百梦主手填最小高杠杆锚点 1. 陶泥儿主手填最小高杠杆锚点
2. AI 生成一批可编辑的剧情策划初稿卡片 2. AI 生成一批可编辑的剧情策划初稿卡片
3. 系统把内容编译成运行时结构 3. 系统把内容编译成运行时结构
@@ -42,7 +42,7 @@
**结构化工作台 + AI 协作生成。** **结构化工作台 + AI 协作生成。**
百梦主的主要行为是: 陶泥儿主的主要行为是:
1. 填写关键卡片 1. 填写关键卡片
2. 修改关键角色、地点、势力、章节等内容卡 2. 修改关键角色、地点、势力、章节等内容卡
@@ -53,9 +53,9 @@
纯 Agent 式不是指“系统内部没有结构”,而是指: 纯 Agent 式不是指“系统内部没有结构”,而是指:
**百梦主前台几乎不需要面对表单和卡片编辑器,主要通过自然语言对话来完成创作。** **陶泥儿主前台几乎不需要面对表单和卡片编辑器,主要通过自然语言对话来完成创作。**
百梦主的主要行为变成: 陶泥儿主的主要行为变成:
1. 用自然语言描述世界想法 1. 用自然语言描述世界想法
2. 回答 Agent 的追问 2. 回答 Agent 的追问
@@ -77,7 +77,7 @@
1. 前台用户主要通过什么方式思考和输入? 1. 前台用户主要通过什么方式思考和输入?
2. 后台系统是否仍然有稳定的世界模型和编译层? 2. 后台系统是否仍然有稳定的世界模型和编译层?
3. 百梦主是否还能看见摘要、锁定内容和修改范围? 3. 陶泥儿主是否还能看见摘要、锁定内容和修改范围?
对当前项目来说,真正危险的不是“转成聊天”,而是: 对当前项目来说,真正危险的不是“转成聊天”,而是:
@@ -93,11 +93,11 @@
它更擅长: 它更擅长:
1. 帮不擅长表单和结构思考的百梦主起步 1. 帮不擅长表单和结构思考的陶泥儿主起步
2.百梦主思路模糊时做追问和陪创作 2.陶泥儿主思路模糊时做追问和陪创作
3. 把“我要做一个世界”变成一次自然聊天 3. 把“我要做一个世界”变成一次自然聊天
4. 动态决定追问深度,而不是一上来摆很多字段 4. 动态决定追问深度,而不是一上来摆很多字段
5.百梦主感觉自己是在和一个懂 RPG 的剧情搭档共创 5.陶泥儿主感觉自己是在和一个懂 RPG 的剧情搭档共创
## 2.2 纯 Agent 式的主要问题 ## 2.2 纯 Agent 式的主要问题
@@ -110,7 +110,7 @@
1. 聊天很多,但世界状态越来越难总览 1. 聊天很多,但世界状态越来越难总览
2. 角色、地点、势力和章节信息散落在多轮消息里 2. 角色、地点、势力和章节信息散落在多轮消息里
3. 锁定范围不清,重生成容易误伤已有内容 3. 锁定范围不清,重生成容易误伤已有内容
4. Agent 很容易“替百梦主决定太多” 4. Agent 很容易“替陶泥儿主决定太多”
5. 长会话越来越贵,越来越慢,也越来越容易漂移 5. 长会话越来越贵,越来越慢,也越来越容易漂移
## 2.3 对当前项目的判断 ## 2.3 对当前项目的判断
@@ -197,7 +197,7 @@
纯 Agent 式更弱的地方在于: 纯 Agent 式更弱的地方在于:
1. 世界模型隐藏得太深时,百梦主会失去整体掌控感 1. 世界模型隐藏得太深时,陶泥儿主会失去整体掌控感
2. 多轮对话后,已确定内容不容易被清晰回看 2. 多轮对话后,已确定内容不容易被清晰回看
3. 局部重做和精确编辑边界会变模糊 3. 局部重做和精确编辑边界会变模糊
4. Agent 容易过度代写、过度主导 4. Agent 容易过度代写、过度主导
@@ -223,7 +223,7 @@
因为这些环节的关键问题不是“字段如何摆放”,而是: 因为这些环节的关键问题不是“字段如何摆放”,而是:
**百梦主有没有被真正引导出自己想做的世界。** **陶泥儿主有没有被真正引导出自己想做的世界。**
## 4.2 不值得直接转成纯聊天黑箱的部分 ## 4.2 不值得直接转成纯聊天黑箱的部分
@@ -261,8 +261,8 @@
即使转成纯 Agent 式,也仍然要保留这三层: 即使转成纯 Agent 式,也仍然要保留这三层:
1. 百梦主必须确认的高杠杆锚点 1. 陶泥儿主必须确认的高杠杆锚点
2. AI 生成但允许百梦主修改的策划初稿层 2. AI 生成但允许陶泥儿主修改的策划初稿层
3. 系统托管的运行时编译层 3. 系统托管的运行时编译层
变化的只是: 变化的只是:
@@ -339,7 +339,7 @@
2. 会阶段性总结 2. 会阶段性总结
3. 会把聊天结果沉淀成结构化世界状态 3. 会把聊天结果沉淀成结构化世界状态
4. 会提醒风险和冲突 4. 会提醒风险和冲突
5. 会在百梦主要求时进行局部重写和定向扩展 5. 会在陶泥儿主要求时进行局部重写和定向扩展
## 6.2 正确理解 ## 6.2 正确理解
@@ -349,7 +349,7 @@
也就是说: 也就是说:
1. 百梦主看到的是对话 1. 陶泥儿主看到的是对话
2. 系统内部维护的是世界模型、锁定状态、摘要和编译结果 2. 系统内部维护的是世界模型、锁定状态、摘要和编译结果
--- ---
@@ -389,7 +389,7 @@ Agent 首轮不应该直接铺满全世界,而应该给出一份简明底稿
2. 建议内容 2. 建议内容
3. 待确认内容 3. 待确认内容
## 7.3 阶段 C百梦主锁定锚点 ## 7.3 阶段 C陶泥儿主锁定锚点
在纯 Agent 模式里,锁定行为必须被显式支持。 在纯 Agent 模式里,锁定行为必须被显式支持。
@@ -455,7 +455,7 @@ Agent 不应该每轮都继续扩全局,而应该支持“单对象工作模
| 结构 | 作用 | | 结构 | 作用 |
| --- | --- | | --- | --- |
| `creatorIntentProfile` | 当前百梦主最初和最新的创作意图 | | `creatorIntentProfile` | 当前陶泥儿主最初和最新的创作意图 |
| `lockedAnchors` | 已确认不可自动改写的内容 | | `lockedAnchors` | 已确认不可自动改写的内容 |
| `worldDraftSnapshot` | 当前世界底稿快照 | | `worldDraftSnapshot` | 当前世界底稿快照 |
| `editableDraftCards` | 角色、地点、势力、章节等可编辑初稿 | | `editableDraftCards` | 角色、地点、势力、章节等可编辑初稿 |
@@ -530,7 +530,7 @@ Agent 不能像问卷系统,也不能一次追问太多。
1. 一次最多追问 `1~3` 个问题 1. 一次最多追问 `1~3` 个问题
2. 问题必须是当前最缺的高杠杆信息 2. 问题必须是当前最缺的高杠杆信息
3. 每次追问都给默认建议方向 3. 每次追问都给默认建议方向
4. 如果百梦主不想细答,允许 Agent 先代补一个版本再确认 4. 如果陶泥儿主不想细答,允许 Agent 先代补一个版本再确认
这样才能保持“像聊天”,而不是“像客服表单”。 这样才能保持“像聊天”,而不是“像客服表单”。
@@ -614,14 +614,14 @@ Agent 应能识别这些常见修改类型:
3. 锁定内容固定展示 3. 锁定内容固定展示
4. 提供“当前世界圣经”入口 4. 提供“当前世界圣经”入口
## 11.2 风险 2Agent 过度代写,百梦主失去作品归属感 ## 11.2 风险 2Agent 过度代写,陶泥儿主失去作品归属感
防护方式: 防护方式:
1. 高杠杆锚点必须要求确认 1. 高杠杆锚点必须要求确认
2. 重要改动前先说“我准备改什么” 2. 重要改动前先说“我准备改什么”
3. 默认优先给多个候选,而不是直接盖写 3. 默认优先给多个候选,而不是直接盖写
4. 允许百梦主随时回退到旧版本 4. 允许陶泥儿主随时回退到旧版本
## 11.3 风险 3局部修改带出全局漂移 ## 11.3 风险 3局部修改带出全局漂移

View File

@@ -37,8 +37,8 @@
- 不能先删旧字段,再补新结构。 - 不能先删旧字段,再补新结构。
- 必须先补新设定层,再逐步迁读,最后再让旧模板字段退化成兼容层。 - 必须先补新设定层,再逐步迁读,最后再让旧模板字段退化成兼容层。
4. 不能增加百梦主负担 4. 不能增加陶泥儿主负担
- 这次不是让百梦主多填一堆底层 schema。 - 这次不是让陶泥儿主多填一堆底层 schema。
- 这些设定仍然应由 AI / 系统编译出来,只是所有权从模板世界转移到自定义世界自己。 - 这些设定仍然应由 AI / 系统编译出来,只是所有权从模板世界转移到自定义世界自己。
--- ---

View File

@@ -102,9 +102,9 @@
这不是真正跨题材,只是换了名字。 这不是真正跨题材,只是换了名字。
## 3.3 不能让百梦主承担更多底层配置工作 ## 3.3 不能让陶泥儿主承担更多底层配置工作
这次优化不是让百梦主额外填写: 这次优化不是让陶泥儿主额外填写:
- 怪物模板表 - 怪物模板表
- 场景参考池 - 场景参考池

View File

@@ -349,7 +349,7 @@ export interface ChapterProgressionPlan {
} }
``` ```
建议作为后端运行时编译结果缓存,不作为百梦主直接编辑字段。 建议作为后端运行时编译结果缓存,不作为陶泥儿主直接编辑字段。
## 3.7 章节经验记账 ## 3.7 章节经验记账
@@ -636,7 +636,7 @@ chapterXpBudget =
3. 非主角色友方 NPC 3. 非主角色友方 NPC
- `support``ambient` - `support``ambient`
如需修正,再允许章节蓝图加可选 override但不要求百梦主每次手填。 如需修正,再允许章节蓝图加可选 override但不要求陶泥儿主每次手填。
## 7.2 等级锚点 ## 7.2 等级锚点

View File

@@ -31,8 +31,9 @@
3. 用户每次进入创作页时,前端读取上一次进入该页面缓存的公开指标快照;当已发布作品卡片滑动进入视口后,数字从缓存值增长到本次接口返回的最新值。 3. 用户每次进入创作页时,前端读取上一次进入该页面缓存的公开指标快照;当已发布作品卡片滑动进入视口后,数字从缓存值增长到本次接口返回的最新值。
4. 若最新值高于缓存值,动画完成后在对应指标右下角展示红色向上箭头和本次上涨的具体数值,字号低于主数字,避免抢占主信息层级。 4. 若最新值高于缓存值,动画完成后在对应指标右下角展示红色向上箭头和本次上涨的具体数值,字号低于主数字,避免抢占主信息层级。
5. 若没有缓存值、缓存值不低于最新值或作品仍是草稿,则直接显示最新值,不展示上涨标记。 5. 若没有缓存值、缓存值不低于最新值或作品仍是草稿,则直接显示最新值,不展示上涨标记。
6. 每张作品卡片继续使用作品封面作为整卡背景,封面需要有透明度和渐变遮罩,确保标题、描述和指标在亮色与暗色主题下都清晰可读 6. 每张作品卡片继续使用作品封面作为整卡背景,封面保持主视觉可见;遮罩只用于保证标题、描述和指标可读,不能把封面洗成普通面板底色
7. 作品列表按 `updatedAt` 倒序排列;前端排序需要兼容 ISO 时间和 Rust 后端常用的 `seconds.microsZ` 时间文本。 7. 作品列表按 `updatedAt` 倒序排列;前端排序需要兼容 ISO 时间和 Rust 后端常用的 `seconds.microsZ` 时间文本。
8. 若玩法摘要缺少 `coverImageSrc`,允许从同一作品的正式关卡图、背景图或素材图里取第一张可用图片作为卡片背景兜底。
## 移动端布局规则 ## 移动端布局规则

View File

@@ -96,7 +96,7 @@
- 同时开放短信与密码登录时,面板顶部展示两个居中的文字页签,当前页签使用深色字重和短下划线强调。 - 同时开放短信与密码登录时,面板顶部展示两个居中的文字页签,当前页签使用深色字重和短下划线强调。
- 只渲染当前页签对应的输入区;切换页签不弹出新面板,不展示二维码入口。 - 只渲染当前页签对应的输入区;切换页签不弹出新面板,不展示二维码入口。
- `短信登录` 页签包含手机号、验证码、获取验证码和主按钮。 - `短信登录` 页签包含手机号、验证码、获取验证码和主按钮。
- `密码登录` 页签只包含手机号、密码、主按钮和忘记密码入口;不支持邮箱、用户名或百梦号。 - `密码登录` 页签只包含手机号、密码、主按钮和忘记密码入口;不支持邮箱、用户名或陶泥号。
- 密码登录只是手机号验证码登录的补充方式:只有已登录并设置过密码的手机号账号才能使用,不能在密码页签创建账号。 - 密码登录只是手机号验证码登录的补充方式:只有已登录并设置过密码的手机号账号才能使用,不能在密码页签创建账号。
- `密码登录` 主按钮固定为 `登录`,不得使用 `注册/登录` - `密码登录` 主按钮固定为 `登录`,不得使用 `注册/登录`
- 未开放某个登录方式时不展示对应页签,避免用户进入不可用表单。 - 未开放某个登录方式时不展示对应页签,避免用户进入不可用表单。

View File

@@ -69,7 +69,7 @@
- 入口、删除、分享、领取拼图激励等行为全部复用现有 `CustomWorldCreationHub` 的作品卡逻辑。 - 入口、删除、分享、领取拼图激励等行为全部复用现有 `CustomWorldCreationHub` 的作品卡逻辑。
- 一级底部 Tab 文案为“草稿”,内部仍可按草稿与已发布筛选。 - 一级底部 Tab 文案为“草稿”,内部仍可按草稿与已发布筛选。
- 作品列表必须按最后修改时间倒序排列;排序使用后端 `updatedAt`,前端需要兼容 ISO 字符串和 `seconds.microsZ` 两种时间文本。 - 作品列表必须按最后修改时间倒序排列;排序使用后端 `updatedAt`,前端需要兼容 ISO 字符串和 `seconds.microsZ` 两种时间文本。
- 每张作品卡以作品封面图铺满整卡背景,并叠加遮罩保证标题和描述可读;缺封面时才使用现有兜底底图。 - 每张作品卡以作品封面图铺满整卡背景,并叠加遮罩保证标题和描述可读;遮罩不能把封面洗成普通面板底色。缺 `coverImageSrc` 但同一作品已有正式关卡图、背景图或素材图时,优先用这些真实作品图兜底,再使用现有兜底底图。
- 草稿页卡片不展示“最后修改时间”“更新于”或原始 `updatedAt` 文本,时间只参与排序。 - 草稿页卡片不展示“最后修改时间”“更新于”或原始 `updatedAt` 文本,时间只参与排序。
## 6. 我的页玩过列表 ## 6. 我的页玩过列表

View File

@@ -59,8 +59,8 @@
### 3.2 排版 ### 3.2 排版
- 平台层正文、按钮、说明、功能标签统一使用非像素字体 - 平台层正文、按钮、说明、功能标签统一使用非像素字体
- 左上角 `百梦 / GENARRATIVE` 品牌字标允许单独做成像素化 logo - 左上角 `陶泥儿 / GENARRATIVE` 品牌字标允许单独做成像素化 logo
- `GENARRATIVE``百梦` 都优先直接使用游戏内同款 `Fusion Pixel` - `GENARRATIVE``陶泥儿` 都优先直接使用游戏内同款 `Fusion Pixel`
- 品牌字标默认保持正常像素字观感,禁止再叠双层粗阴影或手动加粗到影响识别 - 品牌字标默认保持正常像素字观感,禁止再叠双层粗阴影或手动加粗到影响识别
- 品牌字标直接使用字体文件内原字形,不额外做运行时描字、轮廓拼字或伪粗体处理 - 品牌字标直接使用字体文件内原字形,不额外做运行时描字、轮廓拼字或伪粗体处理
- 主标题保留明显层级,但不再做像素描边效果 - 主标题保留明显层级,但不再做像素描边效果

View File

@@ -5,7 +5,7 @@
## 文档列表 ## 文档列表
- [CHILD_MOTION_DEMO_WARMUP_LEVEL_DESIGN_2026-05-09.md](./CHILD_MOTION_DEMO_WARMUP_LEVEL_DESIGN_2026-05-09.md)4-8 岁儿童动作识别互动玩法 Demo 固定热身关的横屏体验流程、识别目标、表现需求与待确认事项。 - [CHILD_MOTION_DEMO_WARMUP_LEVEL_DESIGN_2026-05-09.md](./CHILD_MOTION_DEMO_WARMUP_LEVEL_DESIGN_2026-05-09.md)4-8 岁儿童动作识别互动玩法 Demo 固定热身关的横屏体验流程、识别目标、表现需求与待确认事项。
- [CUSTOM_WORLD_CREATOR_INPUT_AND_AI_BOUNDARY_DESIGN_2026-04-06.md](./CUSTOM_WORLD_CREATOR_INPUT_AND_AI_BOUNDARY_DESIGN_2026-04-06.md):自定义世界里百梦主输入与 AI 分工边界设计。 - [CUSTOM_WORLD_CREATOR_INPUT_AND_AI_BOUNDARY_DESIGN_2026-04-06.md](./CUSTOM_WORLD_CREATOR_INPUT_AND_AI_BOUNDARY_DESIGN_2026-04-06.md):自定义世界里陶泥儿主输入与 AI 分工边界设计。
- [CUSTOM_WORLD_CREATOR_MANUAL_AI_SYSTEM_BALANCE_DESIGN_2026-04-12.md](./CUSTOM_WORLD_CREATOR_MANUAL_AI_SYSTEM_BALANCE_DESIGN_2026-04-12.md):自定义世界创作里“手填锚点 / AI 可改初稿 / 系统托管层”的平衡设计。 - [CUSTOM_WORLD_CREATOR_MANUAL_AI_SYSTEM_BALANCE_DESIGN_2026-04-12.md](./CUSTOM_WORLD_CREATOR_MANUAL_AI_SYSTEM_BALANCE_DESIGN_2026-04-12.md):自定义世界创作里“手填锚点 / AI 可改初稿 / 系统托管层”的平衡设计。
- [CUSTOM_WORLD_CREATOR_PURE_AGENT_COMPARISON_AND_CONVERSION_DESIGN_2026-04-12.md](./CUSTOM_WORLD_CREATOR_PURE_AGENT_COMPARISON_AND_CONVERSION_DESIGN_2026-04-12.md):纯 Agent 式创作工具与结构化工作台方案的优缺点对比,以及转型设计。 - [CUSTOM_WORLD_CREATOR_PURE_AGENT_COMPARISON_AND_CONVERSION_DESIGN_2026-04-12.md](./CUSTOM_WORLD_CREATOR_PURE_AGENT_COMPARISON_AND_CONVERSION_DESIGN_2026-04-12.md):纯 Agent 式创作工具与结构化工作台方案的优缺点对比,以及转型设计。
- [CUSTOM_WORLD_TEMPLATE_DECOUPLING_AND_CROSS_GENRE_GENERALIZATION_DESIGN_2026-04-08.md](./CUSTOM_WORLD_TEMPLATE_DECOUPLING_AND_CROSS_GENRE_GENERALIZATION_DESIGN_2026-04-08.md):把自定义世界从武侠/仙侠模板依赖迁到跨题材通用设定层的优化设计。 - [CUSTOM_WORLD_TEMPLATE_DECOUPLING_AND_CROSS_GENRE_GENERALIZATION_DESIGN_2026-04-08.md](./CUSTOM_WORLD_TEMPLATE_DECOUPLING_AND_CROSS_GENRE_GENERALIZATION_DESIGN_2026-04-08.md):把自定义世界从武侠/仙侠模板依赖迁到跨题材通用设定层的优化设计。
@@ -18,7 +18,7 @@
- [PLATFORM_CATEGORY_AND_CREATE_TAB_DESIGN_2026-04-24.md](./PLATFORM_CATEGORY_AND_CREATE_TAB_DESIGN_2026-04-24.md):平台入口新增分类 Tab、登录态导航裁剪与创作 Tab 视觉强化设计。 - [PLATFORM_CATEGORY_AND_CREATE_TAB_DESIGN_2026-04-24.md](./PLATFORM_CATEGORY_AND_CREATE_TAB_DESIGN_2026-04-24.md):平台入口新增分类 Tab、登录态导航裁剪与创作 Tab 视觉强化设计。
- [PLATFORM_BIG_FISH_ENTRY_HIDE_2026-04-28.md](./PLATFORM_BIG_FISH_ENTRY_HIDE_2026-04-28.md):平台入口暂时隐藏大鱼吃小鱼创作卡片,但保留现有玩法链路。 - [PLATFORM_BIG_FISH_ENTRY_HIDE_2026-04-28.md](./PLATFORM_BIG_FISH_ENTRY_HIDE_2026-04-28.md):平台入口暂时隐藏大鱼吃小鱼创作卡片,但保留现有玩法链路。
- [UNIFIED_MODAL_WINDOW_DESIGN_2026-04-25.md](./UNIFIED_MODAL_WINDOW_DESIGN_2026-04-25.md):统一平台风与 RPG 像素风模态窗口外壳、交互边界和迁移顺序。 - [UNIFIED_MODAL_WINDOW_DESIGN_2026-04-25.md](./UNIFIED_MODAL_WINDOW_DESIGN_2026-04-25.md):统一平台风与 RPG 像素风模态窗口外壳、交互边界和迁移顺序。
- [BAIMENG_EXPO_ROLLUP_BANNER_DESIGN_2026-05-07.md](./BAIMENG_EXPO_ROLLUP_BANNER_DESIGN_2026-05-07.md)百梦线下展会易拉宝广告展板的文案层级、视觉方向与 gpt-image-2 生成记录。 - [BAIMENG_EXPO_ROLLUP_BANNER_DESIGN_2026-05-07.md](./BAIMENG_EXPO_ROLLUP_BANNER_DESIGN_2026-05-07.md)陶泥儿线下展会易拉宝广告展板的文案层级、视觉方向与 gpt-image-2 生成记录。
- [AI_NATIVE_RUNTIME_ITEM_SYSTEM_REDESIGN_2026-04-02.md](./AI_NATIVE_RUNTIME_ITEM_SYSTEM_REDESIGN_2026-04-02.md):运行时物品生成系统重设计。 - [AI_NATIVE_RUNTIME_ITEM_SYSTEM_REDESIGN_2026-04-02.md](./AI_NATIVE_RUNTIME_ITEM_SYSTEM_REDESIGN_2026-04-02.md):运行时物品生成系统重设计。
- [LEVEL_PROGRESS_AND_CHAPTER_NPC_AUTO_SCALING_DESIGN_2026-04-20.md](./LEVEL_PROGRESS_AND_CHAPTER_NPC_AUTO_SCALING_DESIGN_2026-04-20.md):等级成长、章节经验节奏与 NPC 自动定级设计。 - [LEVEL_PROGRESS_AND_CHAPTER_NPC_AUTO_SCALING_DESIGN_2026-04-20.md](./LEVEL_PROGRESS_AND_CHAPTER_NPC_AUTO_SCALING_DESIGN_2026-04-20.md):等级成长、章节经验节奏与 NPC 自动定级设计。
- [RPG_NARRATIVE_PLANNING_FULL_PIPELINE_WORKFLOW_2026-04-12.md](./RPG_NARRATIVE_PLANNING_FULL_PIPELINE_WORKFLOW_2026-04-12.md):专业剧情策划构建 RPG 游戏全剧情的工作流程与交付模板。 - [RPG_NARRATIVE_PLANNING_FULL_PIPELINE_WORKFLOW_2026-04-12.md](./RPG_NARRATIVE_PLANNING_FULL_PIPELINE_WORKFLOW_2026-04-12.md):专业剧情策划构建 RPG 游戏全剧情的工作流程与交付模板。
@@ -33,8 +33,8 @@
- 做物品、Build、锻造相关需求时先看前两份。 - 做物品、Build、锻造相关需求时先看前两份。
- 做 RPG 全剧情规划、主支线矩阵、角色线、场景章节与剧情交付模板时,先看新增的全剧情策划流程。 - 做 RPG 全剧情规划、主支线矩阵、角色线、场景章节与剧情交付模板时,先看新增的全剧情策划流程。
- 做自定义世界创作工作台、百梦主输入边界、AI 分工设计时,先看第一份。 - 做自定义世界创作工作台、陶泥儿主输入边界、AI 分工设计时,先看第一份。
- 做“哪些内容必须让百梦主手填、哪些适合 AI 先生成再改、哪些必须系统托管”这类分层设计时,优先看新增的输入平衡设计稿。 - 做“哪些内容必须让陶泥儿主手填、哪些适合 AI 先生成再改、哪些必须系统托管”这类分层设计时,优先看新增的输入平衡设计稿。
- 做“是否应该转成纯 Agent 式创作工具、转了之后前后台各该怎么收口”这类产品方向评估时,优先看新增的纯 Agent 对比与转型设计稿。 - 做“是否应该转成纯 Agent 式创作工具、转了之后前后台各该怎么收口”这类产品方向评估时,优先看新增的纯 Agent 对比与转型设计稿。
- 做自定义世界去模板依赖、跨题材泛化、兼容迁移设计时,优先看新增的去模板化优化设计稿。 - 做自定义世界去模板依赖、跨题材泛化、兼容迁移设计时,优先看新增的去模板化优化设计稿。
- 做“模板依赖如何真正变成自定义世界自有设定层”的具体迁移方案时,优先看新增的自有设定层优化方案。 - 做“模板依赖如何真正变成自定义世界自有设定层”的具体迁移方案时,优先看新增的自有设定层优化方案。

View File

@@ -29,7 +29,7 @@
结论: 结论:
- 独立编辑器入口如果没有继续接入主流程,应及时物理删除,不要长期保留兼容壳 - 独立编辑器入口如果没有继续接入主流程,应及时物理删除,不要长期保留兼容壳
- 页签命名要贴近百梦主语言,而不是内部实现命名 - 页签命名要贴近陶泥儿主语言,而不是内部实现命名
### 2.2 NPC 视觉模块并入 NPC 编辑 ### 2.2 NPC 视觉模块并入 NPC 编辑
@@ -144,7 +144,7 @@
经验: 经验:
- 百梦主并不关心 “function” 这个技术词,更关心“这个选项会发生什么” - 陶泥儿主并不关心 “function” 这个技术词,更关心“这个选项会发生什么”
- 同类编辑器如果只给字段表单而没有模板起稿能力,复用效率会很低 - 同类编辑器如果只给字段表单而没有模板起稿能力,复用效率会很低
### 2.8 选项行为预览升级到实机回放 ### 2.8 选项行为预览升级到实机回放
@@ -217,7 +217,7 @@
- 预览面板要么都显示“实时状态” - 预览面板要么都显示“实时状态”
- 要么都显示“同一个阶段的快照” - 要么都显示“同一个阶段的快照”
- 混用实时值和预测值会让百梦主误判 - 混用实时值和预测值会让陶泥儿主误判
## 4. 这类项目里沉淀下来的方法论 ## 4. 这类项目里沉淀下来的方法论
@@ -245,7 +245,7 @@
- 不是所有字段都应该在所有行为类型下开放 - 不是所有字段都应该在所有行为类型下开放
- 如果某类行为最终不会直接读取某个字段,就应该禁用或弱化它 - 如果某类行为最终不会直接读取某个字段,就应该禁用或弱化它
- 否则百梦主会错误地以为改动无效是 bug - 否则陶泥儿主会错误地以为改动无效是 bug
### 4.4 模板比空白表单更重要 ### 4.4 模板比空白表单更重要

View File

@@ -25,7 +25,7 @@
3. 历史已发布作品必须能自动补齐 gallery 投影。 3. 历史已发布作品必须能自动补齐 gallery 投影。
- 公开列表读取 `list_custom_world_gallery_entries` 前,会扫描 `custom_world_profile` 中已发布且未删除的 profile。 - 公开列表读取 `list_custom_world_gallery_entries` 前,会扫描 `custom_world_profile` 中已发布且未删除的 profile。
- 若已发布 profile 缺少 `custom_world_gallery_entry`,或缺少公开作品码 / 作者百梦号,会先补齐公开字段并同步 gallery 投影。 - 若已发布 profile 缺少 `custom_world_gallery_entry`,或缺少公开作品码 / 作者陶泥号,会先补齐公开字段并同步 gallery 投影。
- 这样旧版本发布成功但未落入广场读模型的作品,在下一次首页 / 分类页读取公开列表时会自动出现。 - 这样旧版本发布成功但未落入广场读模型的作品,在下一次首页 / 分类页读取公开列表时会自动出现。
## 经验 ## 经验

View File

@@ -394,7 +394,7 @@ MVP 阶段不需要单独设置密码。
落地规则: 落地规则:
- 入参只允许 `phone``password`,不支持邮箱、用户名或百梦号。 - 入参只允许 `phone``password`,不支持邮箱、用户名或陶泥号。
- 手机号不存在时,不创建账号,返回统一的登录失败。 - 手机号不存在时,不创建账号,返回统一的登录失败。
- 手机号存在但账号未设置过密码时,不允许密码登录。 - 手机号存在但账号未设置过密码时,不允许密码登录。
- 首次设置密码只能在已登录账号中心内完成;用户必须先通过手机号验证码或已绑定手机号的微信账号进入已登录态。 - 首次设置密码只能在已登录账号中心内完成;用户必须先通过手机号验证码或已绑定手机号的微信账号进入已登录态。
@@ -734,7 +734,7 @@ MVP 阶段建议至少提供一个轻量账号中心,包含:
约束: 约束:
- 不支持邮箱、用户名或百梦号。 - 不支持邮箱、用户名或陶泥号。
- 不承担注册能力。 - 不承担注册能力。
- 只有已存在、已验证手机号、且 `passwordLoginEnabled=true` 的账号可以登录。 - 只有已存在、已验证手机号、且 `passwordLoginEnabled=true` 的账号可以登录。

View File

@@ -55,7 +55,7 @@
- 调用 `POST /admin/api/profile/redeem-codes` 创建/更新兑换码。 - 调用 `POST /admin/api/profile/redeem-codes` 创建/更新兑换码。
- 调用 `POST /admin/api/profile/redeem-codes/disable` 停用兑换码。 - 调用 `POST /admin/api/profile/redeem-codes/disable` 停用兑换码。
- 支持 `public``unique``private` 三种模式。 - 支持 `public``unique``private` 三种模式。
- 私有码支持输入内部 `userId` 和公开百梦号,提交给后端统一解析。 - 私有码支持输入内部 `userId` 和公开陶泥号,提交给后端统一解析。
7. 邀请码管理页: 7. 邀请码管理页:
- 调用 `POST /admin/api/profile/invite-codes` 创建/更新注册邀请码。 - 调用 `POST /admin/api/profile/invite-codes` 创建/更新注册邀请码。
- 支持输入 JSON 对象 metadata提交前做基础 JSON 对象校验,最终校验以服务端为准。 - 支持输入 JSON 对象 metadata提交前做基础 JSON 对象校验,最终校验以服务端为准。
@@ -114,7 +114,7 @@ API 调试页是受控接口调试台,不是通用代理工具:
4. maxUses必须为正整数最终校验以服务端为准。 4. maxUses必须为正整数最终校验以服务端为准。
5. enabled创建/更新时可切换。 5. enabled创建/更新时可切换。
6. allowedUserIds私有码允许的内部用户 ID 列表。 6. allowedUserIds私有码允许的内部用户 ID 列表。
7. allowedPublicUserCodes私有码允许的公开百梦号列表。 7. allowedPublicUserCodes私有码允许的公开陶泥号列表。
提交成功后展示后端返回的兑换码记录;失败时展示后端错误消息。 提交成功后展示后端返回的兑换码记录;失败时展示后端错误消息。

View File

@@ -12,7 +12,7 @@
## 1. 一句话定义 ## 1. 一句话定义
`2048` 是一个主题化数字合成玩法模板:百梦主通过 Agent 设定棋盘主题、合成链、视觉皮肤、目标格和难度参数,系统生成可试玩、可发布的 2048 作品;玩家通过滑动方向移动棋盘格,相同等级方块合并升级,直到达成目标格或棋盘无可行动作。 `2048` 是一个主题化数字合成玩法模板:陶泥儿主通过 Agent 设定棋盘主题、合成链、视觉皮肤、目标格和难度参数,系统生成可试玩、可发布的 2048 作品;玩家通过滑动方向移动棋盘格,相同等级方块合并升级,直到达成目标格或棋盘无可行动作。
--- ---
@@ -108,7 +108,7 @@ Agent 型创作至少收集下面 5 个锚点:
Agent 行为要求: Agent 行为要求:
1. 优先接住百梦主的一句话灵感,不把创作变成问卷。 1. 优先接住陶泥儿主的一句话灵感,不把创作变成问卷。
2. 每轮最多追问 1 个最影响成品质量的问题。 2. 每轮最多追问 1 个最影响成品质量的问题。
3. 当主题和合成链已经足够明确时,优先生成草稿。 3. 当主题和合成链已经足够明确时,优先生成草稿。
4. 合成链必须围绕同一主题递进,不允许出现互不相关的方块名。 4. 合成链必须围绕同一主题递进,不允许出现互不相关的方块名。
@@ -860,4 +860,4 @@ npm run check:encoding
## 20. 一句话结论 ## 20. 一句话结论
`2048` 在 Genarrative 中应被做成一个可创作、可换皮、可发布、可排行的主题合成棋盘模板:创作端让百梦主定义合成链和视觉承诺,运行端保持经典 2048 的滑动合并手感,服务端负责正式棋盘裁决、作品状态和成绩真相。 `2048` 在 Genarrative 中应被做成一个可创作、可换皮、可发布、可排行的主题合成棋盘模板:创作端让陶泥儿主定义合成链和视觉承诺,运行端保持经典 2048 的滑动合并手感,服务端负责正式棋盘裁决、作品状态和成绩真相。

View File

@@ -31,7 +31,7 @@
大鱼吃小鱼玩法是一个 `Agent-First` 的轻量实时成长玩法创作链: 大鱼吃小鱼玩法是一个 `Agent-First` 的轻量实时成长玩法创作链:
**百梦主先与 Agent 共创“进化母题、等级阶梯、生态风格与场地气质”,系统再自动编译出一个竖屏全屏、摇杆移动、吞噬收编、三合一进化、持续刷怪、升到最高级即通关的可运行玩法作品。** **陶泥儿主先与 Agent 共创“进化母题、等级阶梯、生态风格与场地气质”,系统再自动编译出一个竖屏全屏、摇杆移动、吞噬收编、三合一进化、持续刷怪、升到最高级即通关的可运行玩法作品。**
--- ---
@@ -115,26 +115,26 @@
`Agent-First 大鱼吃小鱼玩法创作工具` `Agent-First 大鱼吃小鱼玩法创作工具`
玩法运行态对外展示名可由百梦主自定义,不强绑平台内部域名。 玩法运行态对外展示名可由陶泥儿主自定义,不强绑平台内部域名。
## 5.2 目标用户 ## 5.2 目标用户
目标用户主要是 3 类: 目标用户主要是 3 类:
1.百梦 1.陶泥儿
- 想快速做一个可玩的成长吞噬小游戏,但不懂完整关卡编辑器 - 想快速做一个可玩的成长吞噬小游戏,但不懂完整关卡编辑器
2. 视觉驱动型百梦 2. 视觉驱动型陶泥儿
- 更关心“每级长什么样、动作怎么样、背景氛围如何” - 更关心“每级长什么样、动作怎么样、背景氛围如何”
3. 玩法原型百梦 3. 玩法原型陶泥儿
- 想快速验证一套吞噬成长节奏、等级曲线和场地压迫感 - 想快速验证一套吞噬成长节奏、等级曲线和场地压迫感
## 5.3 成功标准 ## 5.3 成功标准
本期上线后,至少要满足下面这些结果: 本期上线后,至少要满足下面这些结果:
1. 百梦主可在 `5~12` 分钟内通过 Agent 聊天形成一版可用锚点草稿。 1. 陶泥儿主可在 `5~12` 分钟内通过 Agent 聊天形成一版可用锚点草稿。
2. 系统默认能编译出 `8` 级实体阶梯的初版玩法草稿。 2. 系统默认能编译出 `8` 级实体阶梯的初版玩法草稿。
3. 每一级实体都能在结果页单独生成和重生成主图。 3. 每一级实体都能在结果页单独生成和重生成主图。
4. 每一级实体都能在结果页单独生成和重生成动作。 4. 每一级实体都能在结果页单独生成和重生成动作。
@@ -179,9 +179,9 @@
Agent 在这一玩法里不负责实时玩法裁决,它只负责 3 件事: Agent 在这一玩法里不负责实时玩法裁决,它只负责 3 件事:
1.百梦主明确高杠杆锚点 1.陶泥儿主明确高杠杆锚点
2.百梦主把模糊灵感总结成可编译结构 2.陶泥儿主把模糊灵感总结成可编译结构
3.百梦主收束出第一版等级阶梯与视觉方向 3.陶泥儿主收束出第一版等级阶梯与视觉方向
## 7.2 前台交互原则 ## 7.2 前台交互原则
@@ -222,7 +222,7 @@ Agent 在这一玩法里不负责实时玩法裁决,它只负责 3 件事:
3. `成长阶梯` 3. `成长阶梯`
- 这一玩法一共大致有几级,以及每一级如何逐步升级、变大、变强、变异 - 这一玩法一共大致有几级,以及每一级如何逐步升级、变大、变强、变异
- 最高级终局形态也并入这一锚点统一确定 - 最高级终局形态也并入这一锚点统一确定
-百梦主没有明确总层数,本期默认按 `8` 级编译,可配置范围固定为 `6~12` -陶泥儿主没有明确总层数,本期默认按 `8` 级编译,可配置范围固定为 `6~12`
4. `风险节奏` 4. `风险节奏`
- 玩家周围应该更偏压迫、平衡还是偏爽快 - 玩家周围应该更偏压迫、平衡还是偏爽快
@@ -235,7 +235,7 @@ Agent 在这一玩法里不负责实时玩法裁决,它只负责 3 件事:
2. `等级总层数` 并入 `成长阶梯` 2. `等级总层数` 并入 `成长阶梯`
3. `升级轮廓` 并入 `成长阶梯` 3. `升级轮廓` 并入 `成长阶梯`
4. `终局形态` 并入 `成长阶梯` 4. `终局形态` 并入 `成长阶梯`
5. `开局成长方式` 改为系统固定规则,不再作为百梦主锚点 5. `开局成长方式` 改为系统固定规则,不再作为陶泥儿主锚点
后续 Agent 追问时,不再把这些内容拆成独立必答题。 后续 Agent 追问时,不再把这些内容拆成独立必答题。
@@ -302,7 +302,7 @@ Agent 在这一玩法里不负责实时玩法裁决,它只负责 3 件事:
## 9.1 默认草稿规模 ## 9.1 默认草稿规模
百梦主没有特别指定时,第一版玩法草稿必须默认编译为: 陶泥儿主没有特别指定时,第一版玩法草稿必须默认编译为:
1. `8` 级实体阶梯 1. `8` 级实体阶梯
2. `1` 张活动区域背景图 2. `1` 张活动区域背景图

View File

@@ -680,7 +680,7 @@ assistant 回复应包含:
1. 对 seedText / 用户消息的简要复述 1. 对 seedText / 用户消息的简要复述
2. 当前仍缺哪些世界锚点 2. 当前仍缺哪些世界锚点
3. 建议百梦主下一步回答什么 3. 建议陶泥儿主下一步回答什么
#### 用户后续消息 #### 用户后续消息

View File

@@ -24,7 +24,7 @@
那么第二阶段的目标就是: 那么第二阶段的目标就是:
**让 Agent 会话真正开始理解百梦主输入,并把自然语言聊天沉淀成结构化创作锚点。** **让 Agent 会话真正开始理解陶泥儿主输入,并把自然语言聊天沉淀成结构化创作锚点。**
一句话定义: 一句话定义:

View File

@@ -26,7 +26,7 @@
那么第四阶段的目标就是: 那么第四阶段的目标就是:
**让百梦主直接修改这版草稿设定,并且继续用 AI 为这版草稿扩出新的角色和场景。** **让陶泥儿主直接修改这版草稿设定,并且继续用 AI 为这版草稿扩出新的角色和场景。**
一句话定义: 一句话定义:
@@ -100,7 +100,7 @@
一句话目标: 一句话目标:
**让第四阶段结束时,百梦主第一次能像在真正做作品一样修改草稿、继续长出新对象。** **让第四阶段结束时,陶泥儿主第一次能像在真正做作品一样修改草稿、继续长出新对象。**
--- ---

View File

@@ -200,7 +200,7 @@
1. 主线关键角色 1. 主线关键角色
2. 可扮演角色 2. 可扮演角色
3. 百梦主重点想看的角色 3. 陶泥儿主重点想看的角色
## 7.2 入口位置 ## 7.2 入口位置

View File

@@ -42,21 +42,21 @@
## 1.2 一句话定义 ## 1.2 一句话定义
百梦主通过与一个懂 RPG 剧情策划方法的 Agent 对话,逐步完成世界锚点收集、关键对象塑造、剧情骨架搭建和长尾内容展开;同时由 Express 后端持续维护结构化世界状态、锁定边界、局部重生成和质量检查。 陶泥儿主通过与一个懂 RPG 剧情策划方法的 Agent 对话,逐步完成世界锚点收集、关键对象塑造、剧情骨架搭建和长尾内容展开;同时由 Express 后端持续维护结构化世界状态、锁定边界、局部重生成和质量检查。
## 1.3 目标用户 ## 1.3 目标用户
目标用户分三类: 目标用户分三类:
1.百梦 1.陶泥儿
- 有世界灵感,但不擅长结构化填表 - 有世界灵感,但不擅长结构化填表
2. 中度百梦 2. 中度陶泥儿
- 愿意精修角色、地点、主线第一幕,但不想维护大量底层字段 - 愿意精修角色、地点、主线第一幕,但不想维护大量底层字段
3. 重度百梦 3. 重度陶泥儿
- 需要局部重生成、锁定、版本化和导出世界圣经 - 需要局部重生成、锁定、版本化和导出世界圣经
## 1.4 产品成功标准 ## 1.4 产品成功标准
@@ -76,7 +76,7 @@
1. 不把整套系统做成纯聊天黑箱。 1. 不把整套系统做成纯聊天黑箱。
2. 不让前端继续承担锁定合并、重生成裁决、结构编译等核心逻辑。 2. 不让前端继续承担锁定合并、重生成裁决、结构编译等核心逻辑。
3. 不要求百梦主直接编辑 `ThemePack / WorldStoryGraph / VisibilitySlice / ThreadContract` 等运行时结构。 3. 不要求陶泥儿主直接编辑 `ThemePack / WorldStoryGraph / VisibilitySlice / ThreadContract` 等运行时结构。
4. 不把长项目世界管理完全交给一条无限增长的聊天记录。 4. 不把长项目世界管理完全交给一条无限增长的聊天记录。
5. 不再保留“生成完直接回世界列表并自动保存”的旧流程。 5. 不再保留“生成完直接回世界列表并自动保存”的旧流程。
6. 不允许角色主图、角色动作、场景背景图继续停留在临时候选状态后直接发布世界。 6. 不允许角色主图、角色动作、场景背景图继续停留在临时候选状态后直接发布世界。
@@ -151,7 +151,7 @@
1. `src/services/customWorldCreatorIntent.ts` 1. `src/services/customWorldCreatorIntent.ts`
- 已有百梦主意图、锚点包、锁定状态的基础结构 - 已有陶泥儿主意图、锚点包、锁定状态的基础结构
2. `src/types/customWorld.ts` 2. `src/types/customWorld.ts`
@@ -228,7 +228,7 @@
后台必须持续维护: 后台必须持续维护:
1. 百梦主意图 1. 陶泥儿主意图
2. 锁定状态 2. 锁定状态
3. 世界底稿快照 3. 世界底稿快照
4. 可编辑草稿对象列表 4. 可编辑草稿对象列表
@@ -271,11 +271,11 @@
-> 打开 Agent 创作入口 -> 打开 Agent 创作入口
-> Agent 收集最小锚点 -> Agent 收集最小锚点
-> Agent 输出首轮世界底稿 -> Agent 输出首轮世界底稿
-> 百梦主锁定/修改关键内容 -> 陶泥儿主锁定/修改关键内容
-> Agent 局部生成关键角色/地点/主线第一幕 -> Agent 局部生成关键角色/地点/主线第一幕
-> 进入角色与场景资产工坊,生成主形象 / 动作 / 背景图 -> 进入角色与场景资产工坊,生成主形象 / 动作 / 背景图
-> Agent 扩展长尾内容 -> Agent 扩展长尾内容
-> 百梦主发布世界 -> 陶泥儿主发布世界
-> 保存到世界库并进入世界 -> 保存到世界库并进入世界
``` ```
@@ -2077,4 +2077,4 @@ Agent 会话每次 operation 完成后自动保存 session snapshot。
这次新创作工具的正确方向,不是把现有工作台换成一个更大的聊天框,而是: 这次新创作工具的正确方向,不是把现有工作台换成一个更大的聊天框,而是:
**让 Agent 成为百梦主的主交互入口,让 Express 后端成为真正的世界状态管理者,让锁定、局部重生成、摘要、质量护栏和发布链把整个创作过程牢牢收住。** **让 Agent 成为陶泥儿主的主交互入口,让 Express 后端成为真正的世界状态管理者,让锁定、局部重生成、摘要、质量护栏和发布链把整个创作过程牢牢收住。**

View File

@@ -37,15 +37,15 @@
## 1.3 目标用户 ## 1.3 目标用户
目标用户仍然是当前自定义世界创作工具的三类百梦主,但本流程更偏向解决其中两类人的起步问题: 目标用户仍然是当前自定义世界创作工具的三类陶泥儿主,但本流程更偏向解决其中两类人的起步问题:
1.百梦 1.陶泥儿
- 有模糊灵感,但不知道先想什么 - 有模糊灵感,但不知道先想什么
2. 中度百梦 2. 中度陶泥儿
- 有一些设定点子,但缺少把设定收束成可运行剧情骨架的方法 - 有一些设定点子,但缺少把设定收束成可运行剧情骨架的方法
重度百梦主也可使用本流程,但他们更关心的是: 重度陶泥儿主也可使用本流程,但他们更关心的是:
- Agent 是否会少问废话 - Agent 是否会少问废话
- 摘要是否准确 - 摘要是否准确
@@ -1190,7 +1190,7 @@ Agent 不应回复成八问表:
## 13.2 后续可编辑范围 ## 13.2 后续可编辑范围
进入世界底稿阶段后,百梦主默认优先精修: 进入世界底稿阶段后,陶泥儿主默认优先精修:
1. 关键角色 1. 关键角色
2. 核心冲突与线程 2. 核心冲突与线程

View File

@@ -1,4 +1,4 @@
# AI 原生自定义世界生成流程优化 PRD # AI 原生自定义世界生成流程优化 PRD
更新时间:`2026-04-06` 更新时间:`2026-04-06`
@@ -8,11 +8,11 @@
目标不是推翻当前已经存在的多阶段生成链,而是解决下面这个核心错位: 目标不是推翻当前已经存在的多阶段生成链,而是解决下面这个核心错位:
**当前仓库已经开始把世界生成拆成 `framework -> themePack -> storyGraph -> role outline -> dossier -> narrativeProfile` 的分阶段 AI 编译流程,但百梦主入口仍然是“一段大文本”,结果页又把大量低杠杆字段重新扔回给百梦主人工兜底。** **当前仓库已经开始把世界生成拆成 `framework -> themePack -> storyGraph -> role outline -> dossier -> narrativeProfile` 的分阶段 AI 编译流程,但陶泥儿主入口仍然是“一段大文本”,结果页又把大量低杠杆字段重新扔回给陶泥儿主人工兜底。**
一句话定义本次优化: 一句话定义本次优化:
**让百梦主先定义世界灵魂锚点,再让 AI / 系统围绕锚点分层生成、分层展开、分层可控地完成长尾内容。** **让陶泥儿主先定义世界灵魂锚点,再让 AI / 系统围绕锚点分层生成、分层展开、分层可控地完成长尾内容。**
## 1. 当前流程现状 ## 1. 当前流程现状
@@ -64,7 +64,7 @@
## 1.3 当前流程的核心问题 ## 1.3 当前流程的核心问题
## 1.3.1 百梦主入口过于粗糙 ## 1.3.1 陶泥儿主入口过于粗糙
当前创建入口只有一块大文本输入框。 当前创建入口只有一块大文本输入框。
@@ -72,23 +72,23 @@
1. 不会写长描述的用户很难开局。 1. 不会写长描述的用户很难开局。
2. 愿意精细创作的用户没有结构化落点。 2. 愿意精细创作的用户没有结构化落点。
3. 系统无法明确分辨“哪些是百梦主真正想锁定的锚点,哪些只是随口补充的描述”。 3. 系统无法明确分辨“哪些是陶泥儿主真正想锁定的锚点,哪些只是随口补充的描述”。
结果就是: 结果就是:
**输入端自由但信息信号不稳定AI 虽然能生成很多内容,却不一定生成的是百梦主真正关心的内容。** **输入端自由但信息信号不稳定AI 虽然能生成很多内容,却不一定生成的是陶泥儿主真正关心的内容。**
## 1.3.2 百梦主与 AI 的职责发生倒置 ## 1.3.2 陶泥儿主与 AI 的职责发生倒置
当前流程实际上是: 当前流程实际上是:
- 百梦主先写一段泛化设定 - 陶泥儿主先写一段泛化设定
- AI 再把整个世界铺满 - AI 再把整个世界铺满
- 百梦主最后回到结果页,人工修改大量角色、章节、技能、初始物品、场景连接等细节 - 陶泥儿主最后回到结果页,人工修改大量角色、章节、技能、初始物品、场景连接等细节
这与“低创作门槛、高创作自由度”的目标相反。 这与“低创作门槛、高创作自由度”的目标相反。
因为真正应该由百梦主控制的,是: 因为真正应该由陶泥儿主控制的,是:
- 世界核心命题 - 世界核心命题
- 主题与气质 - 主题与气质
@@ -98,7 +98,7 @@
- 关键地点 - 关键地点
- 标志性物件 / 怪物 / 禁忌 - 标志性物件 / 怪物 / 禁忌
而不是让百梦主在结果页里逐个补: 而不是让陶泥儿主在结果页里逐个补:
- `backstoryReveal.chapters` - `backstoryReveal.chapters`
- `skills` - `skills`
@@ -117,13 +117,13 @@
问题不在数量本身,而在于系统并没有明确区分: 问题不在数量本身,而在于系统并没有明确区分:
1. 哪些是百梦主应重点塑造的关键对象 1. 哪些是陶泥儿主应重点塑造的关键对象
2. 哪些只是 AI 应自动展开的长尾铺量 2. 哪些只是 AI 应自动展开的长尾铺量
这会导致两个问题: 这会导致两个问题:
1. AI 在早期就花大量成本生成长尾内容,等待时间长。 1. AI 在早期就花大量成本生成长尾内容,等待时间长。
2. 百梦主在结果页里面对的是一整套“全部都生成了”的世界,而不是“先抓关键锚点,再决定是否继续铺开”。 2. 陶泥儿主在结果页里面对的是一整套“全部都生成了”的世界,而不是“先抓关键锚点,再决定是否继续铺开”。
## 1.3.4 当前结果页暴露了过多低杠杆字段 ## 1.3.4 当前结果页暴露了过多低杠杆字段
@@ -134,7 +134,7 @@
- 场景 NPC 分配 - 场景 NPC 分配
- 场景连接网络 - 场景连接网络
这对“专业百梦主”当然有帮助,但对目标用户来说,容易把工具变成: 这对“专业陶泥儿主”当然有帮助,但对目标用户来说,容易把工具变成:
**看起来自由度很高,实际上需要承担很多系统编辑工作。** **看起来自由度很高,实际上需要承担很多系统编辑工作。**
@@ -144,11 +144,11 @@
这意味着: 这意味着:
1. 百梦主一旦修改过内容,就会担心被覆盖。 1. 陶泥儿主一旦修改过内容,就会担心被覆盖。
2. 没有“锁定关键内容,只重生成长尾部分”的机制。 2. 没有“锁定关键内容,只重生成长尾部分”的机制。
3. AI 无法真正成为创作搭档,只像一次性大批量生成器。 3. AI 无法真正成为创作搭档,只像一次性大批量生成器。
## 1.3.6 当前生成阶段是“模型视角”,不是“百梦主视角” ## 1.3.6 当前生成阶段是“模型视角”,不是“陶泥儿主视角”
当前生成页展示的是系统批次和阶段进度,这很好,但它主要回答的是: 当前生成页展示的是系统批次和阶段进度,这很好,但它主要回答的是:
@@ -156,7 +156,7 @@
没有回答的是: 没有回答的是:
- 百梦主最关心的关键角色是否已经成型 - 陶泥儿主最关心的关键角色是否已经成型
- 世界冲突是否已经稳定 - 世界冲突是否已经稳定
- 当前这轮已经锁定了哪些核心创意 - 当前这轮已经锁定了哪些核心创意
- 接下来生成的是关键锚点,还是长尾内容 - 接下来生成的是关键锚点,还是长尾内容
@@ -170,19 +170,19 @@
这次优化要同时满足 6 个目标: 这次优化要同时满足 6 个目标:
1. 降低输入门槛 1. 降低输入门槛
- 不要求百梦主一上来写长文,不要求理解系统字段。 - 不要求陶泥儿主一上来写长文,不要求理解系统字段。
2. 提高高杠杆创作自由度 2. 提高高杠杆创作自由度
-百梦主直接控制世界灵魂锚点,而不是低价值细节。 -陶泥儿主直接控制世界灵魂锚点,而不是低价值细节。
3. 明确百梦主与 AI 的职责边界 3. 明确陶泥儿主与 AI 的职责边界
- 百梦主负责“决定什么值得创作”AI 负责“把它展开并跑起来”。 - 陶泥儿主负责“决定什么值得创作”AI 负责“把它展开并跑起来”。
4. 保留现有分阶段生成骨架 4. 保留现有分阶段生成骨架
- 不推翻 `framework -> themePack -> storyGraph -> role/landmark` 的已有结构。 - 不推翻 `framework -> themePack -> storyGraph -> role/landmark` 的已有结构。
5. 引入锁定与局部重生成 5. 引入锁定与局部重生成
-百梦主能保住自己在乎的内容,只重做其余部分。 -陶泥儿主能保住自己在乎的内容,只重做其余部分。
6. 把结果页从“数据总表”升级成“创作工作台” 6. 把结果页从“数据总表”升级成“创作工作台”
- 让编辑界面按创作价值组织,而不是按底层对象堆字段。 - 让编辑界面按创作价值组织,而不是按底层对象堆字段。
@@ -192,11 +192,11 @@
优化后的自定义世界流程应该改为: 优化后的自定义世界流程应该改为:
```text ```text
百梦主输入世界锚点 陶泥儿主输入世界锚点
-> AI 编译百梦主意图摘要 -> AI 编译陶泥儿主意图摘要
-> 百梦主确认 / 锁定关键锚点 -> 陶泥儿主确认 / 锁定关键锚点
-> AI 先生成关键角色与关键地点 -> AI 先生成关键角色与关键地点
-> 百梦主可局部修改 / 局部重生成 -> 陶泥儿主可局部修改 / 局部重生成
-> AI 再展开长尾 NPC、长尾场景与运行时编译结构 -> AI 再展开长尾 NPC、长尾场景与运行时编译结构
-> 结果页以“锚点 / 关键对象 / 扩展内容 / 运行时摘要”方式组织 -> 结果页以“锚点 / 关键对象 / 扩展内容 / 运行时摘要”方式组织
-> 保存并进入世界 -> 保存并进入世界
@@ -204,7 +204,7 @@
一句话: 一句话:
**先做创作决策,再做内容展开;先做关键对象,再做长尾铺量;先让百梦主锁定灵魂,再让 AI 扩散世界。** **先做创作决策,再做内容展开;先做关键对象,再做长尾铺量;先让陶泥儿主锁定灵魂,再让 AI 扩散世界。**
## 4. 输入层优化方案 ## 4. 输入层优化方案
@@ -251,7 +251,7 @@
2. 卡片模式 2. 卡片模式
- 用户直接按结构化方式输入世界锚点 - 用户直接按结构化方式输入世界锚点
两种模式最终都编译成统一的百梦主意图对象。 两种模式最终都编译成统一的陶泥儿主意图对象。
## 4.3 必填与选填要分开 ## 4.3 必填与选填要分开
@@ -272,7 +272,7 @@
- 标志性要素 - 标志性要素
- 禁止事项 - 禁止事项
这样既能保证世界最小成型,又不会把百梦主门槛抬高。 这样既能保证世界最小成型,又不会把陶泥儿主门槛抬高。
## 4.3.1 抽象统一“聊天补充设定”能力 ## 4.3.1 抽象统一“聊天补充设定”能力
@@ -307,11 +307,11 @@ RPG 创作工作台、拼图创作工作台、大鱼吃小鱼创作工作台都
1. AI 不得在重生成时覆盖该内容 1. AI 不得在重生成时覆盖该内容
2. 长尾内容只能围绕它展开 2. 长尾内容只能围绕它展开
3. 结果页里应明确显示其为“百梦主锚点” 3. 结果页里应明确显示其为“陶泥儿主锚点”
## 5. 生成链路优化方案 ## 5. 生成链路优化方案
## 5.1 新增“百梦主意图编译层” ## 5.1 新增“陶泥儿主意图编译层”
在真正开始世界生成前,先新增一个轻量阶段: 在真正开始世界生成前,先新增一个轻量阶段:
@@ -324,19 +324,19 @@ RPG 创作工作台、拼图创作工作台、大鱼吃小鱼创作工作台都
输出: 输出:
- 百梦主意图摘要 - 陶泥儿主意图摘要
- 世界锚点摘要 - 世界锚点摘要
- 系统识别出的关键角色 / 冲突 / 地点 / 禁忌 - 系统识别出的关键角色 / 冲突 / 地点 / 禁忌
这一步的作用不是生成世界,而是先回答: 这一步的作用不是生成世界,而是先回答:
1. 系统理解到的世界核心是什么 1. 系统理解到的世界核心是什么
2. 哪些内容将被视为百梦主强锚点 2. 哪些内容将被视为陶泥儿主强锚点
3. 哪些内容将交给 AI 扩展 3. 哪些内容将交给 AI 扩展
## 5.2 把当前生成链改成“关键先行、长尾后补” ## 5.2 把当前生成链改成“关键先行、长尾后补”
当前 `generateCustomWorldProfile(...)` 的分阶段结构可以保留,但生成顺序需要更百梦主化。 当前 `generateCustomWorldProfile(...)` 的分阶段结构可以保留,但生成顺序需要更陶泥儿主化。
建议改成 5 层: 建议改成 5 层:
@@ -347,9 +347,9 @@ RPG 创作工作台、拼图创作工作台、大鱼吃小鱼创作工作台都
- 世界框架 - 世界框架
- ThemePack - ThemePack
- StoryGraph 的基础版 - StoryGraph 的基础版
- 百梦主锚点摘要 - 陶泥儿主锚点摘要
这一层完成后,系统应能让百梦主看到: 这一层完成后,系统应能让陶泥儿主看到:
- 世界现在到底被理解成了什么 - 世界现在到底被理解成了什么
- 哪些冲突 / 势力 / 意象被识别出来了 - 哪些冲突 / 势力 / 意象被识别出来了
@@ -362,11 +362,11 @@ RPG 创作工作台、拼图创作工作台、大鱼吃小鱼创作工作台都
- 关键场景角色 - 关键场景角色
- 关键地点 - 关键地点
这一层优先围绕百梦主明确输入的角色和地点,而不是先铺满全部数量。 这一层优先围绕陶泥儿主明确输入的角色和地点,而不是先铺满全部数量。
### 第三层:百梦主校对层 ### 第三层:陶泥儿主校对层
在继续展开长尾内容前,应允许百梦主做一次轻量校对: 在继续展开长尾内容前,应允许陶泥儿主做一次轻量校对:
- 确认关键角色是否对 - 确认关键角色是否对
- 确认关键地点是否对 - 确认关键地点是否对
@@ -408,7 +408,7 @@ RPG 创作工作台、拼图创作工作台、大鱼吃小鱼创作工作台都
这样做的价值很高: 这样做的价值很高:
1. 降低首次等待焦虑 1. 降低首次等待焦虑
2.百梦主更早介入关键对象校正 2.陶泥儿主更早介入关键对象校正
3. 避免系统在创作方向还没稳定前,先铺满大量长尾内容 3. 避免系统在创作方向还没稳定前,先铺满大量长尾内容
## 5.4 角色与场景生成要改成“锚点优先 + 长尾补位” ## 5.4 角色与场景生成要改成“锚点优先 + 长尾补位”
@@ -417,11 +417,11 @@ RPG 创作工作台、拼图创作工作台、大鱼吃小鱼创作工作台都
优化后应改为: 优化后应改为:
1. 先生成百梦主明确指定的关键角色 / 地点 1. 先生成陶泥儿主明确指定的关键角色 / 地点
2. 再根据世界冲突自动补位缺失的角色原型和场景功能位 2. 再根据世界冲突自动补位缺失的角色原型和场景功能位
3. 最后再铺长尾 3. 最后再铺长尾
这样生成出来的世界会更像“围绕百梦主意图长出来”,而不是“先生成了一个完整世界,再让百梦主去认领” 这样生成出来的世界会更像“围绕陶泥儿主意图长出来”,而不是“先生成了一个完整世界,再让陶泥儿主去认领”
## 6. 结果页与编辑工作台优化方案 ## 6. 结果页与编辑工作台优化方案
@@ -439,7 +439,7 @@ RPG 创作工作台、拼图创作工作台、大鱼吃小鱼创作工作台都
优化后建议改成 4 层工作台: 优化后建议改成 4 层工作台:
1. 创作锚点 1. 创作锚点
- 展示百梦主输入和锁定内容 - 展示陶泥儿主输入和锁定内容
2. 关键对象 2. 关键对象
- 关键角色、关键地点、关键冲突对象 - 关键角色、关键地点、关键冲突对象
@@ -448,11 +448,11 @@ RPG 创作工作台、拼图创作工作台、大鱼吃小鱼创作工作台都
- AI 自动展开的长尾角色、长尾地点、补位内容 - AI 自动展开的长尾角色、长尾地点、补位内容
4. 世界编译摘要 4. 世界编译摘要
- 展示世界线程、题材包、运行时摘要,但默认不要求百梦主编辑 - 展示世界线程、题材包、运行时摘要,但默认不要求陶泥儿主编辑
## 6.2 编辑界面应遵守“高价值字段前置,低价值字段折叠” ## 6.2 编辑界面应遵守“高价值字段前置,低价值字段折叠”
百梦主默认暴露的应是: 陶泥儿主默认暴露的应是:
- 角色一句话定位 - 角色一句话定位
- 角色表面面貌 - 角色表面面貌
@@ -507,7 +507,7 @@ RPG 创作工作台、拼图创作工作台、大鱼吃小鱼创作工作台都
## 7.1 新增 `CustomWorldCreatorIntent` ## 7.1 新增 `CustomWorldCreatorIntent`
建议新增百梦主输入的统一结构: 建议新增陶泥儿主输入的统一结构:
```ts ```ts
interface CustomWorldCreatorIntent { interface CustomWorldCreatorIntent {
@@ -529,7 +529,7 @@ interface CustomWorldCreatorIntent {
作用: 作用:
- 把“百梦主真正输入了什么”从最终 `CustomWorldProfile` 中分离出来 - 把“陶泥儿主真正输入了什么”从最终 `CustomWorldProfile` 中分离出来
## 7.2 新增 `CustomWorldAnchorPack` ## 7.2 新增 `CustomWorldAnchorPack`
@@ -583,7 +583,7 @@ interface CustomWorldGenerationDraft {
作用: 作用:
- 让“百梦主输入、AI 编译、结果编辑”成为连续工作流,而不是只有最终成品对象 - 让“陶泥儿主输入、AI 编译、结果编辑”成为连续工作流,而不是只有最终成品对象
## 8. 与当前仓库的接入建议 ## 8. 与当前仓库的接入建议
@@ -597,7 +597,7 @@ interface CustomWorldGenerationDraft {
目标: 目标:
- 把单 textarea 升级为“快速模式 + 卡片模式” - 把单 textarea 升级为“快速模式 + 卡片模式”
- 新增百梦主意图状态 - 新增陶泥儿主意图状态
- 新增锁定和局部重生成入口 - 新增锁定和局部重生成入口
## 8.2 prompt 与生成服务层 ## 8.2 prompt 与生成服务层
@@ -623,7 +623,7 @@ interface CustomWorldGenerationDraft {
目标: 目标:
-`CustomWorldProfile` 增加百梦主意图与锚点相关扩展字段 -`CustomWorldProfile` 增加陶泥儿主意图与锚点相关扩展字段
- 保持旧档兼容 - 保持旧档兼容
- 让现有 builder 能同时消费 `creatorIntent + anchorPack + profile seed` - 让现有 builder 能同时消费 `creatorIntent + anchorPack + profile seed`
@@ -647,28 +647,28 @@ interface CustomWorldGenerationDraft {
本次优化不做以下事情: 本次优化不做以下事情:
1. 不推翻当前自定义世界最终输出仍是 `CustomWorldProfile` 的兼容目标 1. 不推翻当前自定义世界最终输出仍是 `CustomWorldProfile` 的兼容目标
2. 不把所有运行时结构都暴露给百梦主直接编辑 2. 不把所有运行时结构都暴露给陶泥儿主直接编辑
3. 不要求百梦主理解 `themePack / storyGraph / knowledgeFacts / threadContracts` 等系统结构 3. 不要求陶泥儿主理解 `themePack / storyGraph / knowledgeFacts / threadContracts` 等系统结构
4. 不把复杂数值平衡、掉落预算、build 预算转移给百梦 4. 不把复杂数值平衡、掉落预算、build 预算转移给陶泥儿
5. 不把“高自由度”理解成“所有字段都手工可改” 5. 不把“高自由度”理解成“所有字段都手工可改”
## 10. 验收标准 ## 10. 验收标准
做到以下几点,才算这次优化真正成立: 做到以下几点,才算这次优化真正成立:
1. 百梦主可以不用写长文,只靠卡片输入也能完成自定义世界创建。 1. 陶泥儿主可以不用写长文,只靠卡片输入也能完成自定义世界创建。
2. 系统会明确区分“百梦主锚点”和“AI 自动展开内容”。 2. 系统会明确区分“陶泥儿主锚点”和“AI 自动展开内容”。
3. 百梦主不再需要默认手改大量 `skills / initialItems / backstoryReveal / scene connections` 才能得到可用世界。 3. 陶泥儿主不再需要默认手改大量 `skills / initialItems / backstoryReveal / scene connections` 才能得到可用世界。
4. 结果页支持锁定关键角色、关键地点、关键冲突,并支持局部重生成。 4. 结果页支持锁定关键角色、关键地点、关键冲突,并支持局部重生成。
5. 重新生成不再默认覆盖整个世界。 5. 重新生成不再默认覆盖整个世界。
6. 当前 `framework -> themePack -> storyGraph -> role/landmark` 生成主链可以继续复用,而不是被废弃。 6. 当前 `framework -> themePack -> storyGraph -> role/landmark` 生成主链可以继续复用,而不是被废弃。
7. 结果页默认展示的是高创作价值对象,而不是系统级低层字段。 7. 结果页默认展示的是高创作价值对象,而不是系统级低层字段。
8. 长尾内容生成明显后置于关键对象生成,百梦主能更早看到并修正关键对象。 8. 长尾内容生成明显后置于关键对象生成,陶泥儿主能更早看到并修正关键对象。
9. 旧的自由文本输入模式仍然可用,但不再是唯一入口。 9. 旧的自由文本输入模式仍然可用,但不再是唯一入口。
## 11. 推荐落地顺序 ## 11. 推荐落地顺序
## 阶段 A先加百梦主意图层 ## 阶段 A先加陶泥儿主意图层
先做: 先做:
@@ -678,7 +678,7 @@ interface CustomWorldGenerationDraft {
目标: 目标:
- 先把百梦主输入从“单一大文本”升级成“可识别的创作锚点” - 先把陶泥儿主输入从“单一大文本”升级成“可识别的创作锚点”
## 阶段 B再加锚点包与锁定能力 ## 阶段 B再加锚点包与锁定能力
@@ -721,4 +721,4 @@ interface CustomWorldGenerationDraft {
当前自定义世界流程最需要优化的,不是“让 AI 再多生成一点内容”,而是: 当前自定义世界流程最需要优化的,不是“让 AI 再多生成一点内容”,而是:
**把百梦主从低价值字段编辑里解放出来,让百梦主负责世界灵魂锚点,让 AI 负责围绕这些锚点分层生成、分层展开、分层可控地把世界长出来。** **把陶泥儿主从低价值字段编辑里解放出来,让陶泥儿主负责世界灵魂锚点,让 AI 负责围绕这些锚点分层生成、分层展开、分层可控地把世界长出来。**

View File

@@ -16,7 +16,7 @@
## 1. 一句话定义 ## 1. 一句话定义
百梦主在创作页通过表单确认题材主题和难度选项,系统根据难度选项派生需要消除次数与难度数值,并编译出一个可试玩、可发布的单局抓大鹅玩法作品;玩家在 `10` 分钟倒计时内点击圆形空间中可见物品,把物品放入下方 `7` 格备选栏,每凑齐 `3` 个同物品 id 自动消除,最终清空圆形空间内全部物品即胜利。 陶泥儿主在创作页通过表单确认题材主题和难度选项,系统根据难度选项派生需要消除次数与难度数值,并编译出一个可试玩、可发布的单局抓大鹅玩法作品;玩家在 `10` 分钟倒计时内点击圆形空间中可见物品,把物品放入下方 `7` 格备选栏,每凑齐 `3` 个同物品 id 自动消除,最终清空圆形空间内全部物品即胜利。
--- ---
@@ -99,8 +99,8 @@ Match3D 必须形成独立玩法域,后续技术方案至少需要覆盖:
- 2D 素材风格 - 2D 素材风格
- 难度选项 - 难度选项
4. `需要消除次数` 与难度 `1~10` 数值不再作为独立输入框展示,由难度选项派生。 4. `需要消除次数` 与难度 `1~10` 数值不再作为独立输入框展示,由难度选项派生。
5. 生成抓大鹅草稿固定消耗 `10` 点,生成按钮必须显式展示。 5. 生成抓大鹅草稿固定消耗 `10` 点,生成按钮必须显式展示。
6. 结果页背景音乐重新生成固定消耗 `5` UI 背景重新生成固定消耗 `2` 点;批量新增物品素材按实际可新增物品名每 `5` 个消耗 `2` 点,不足 `5` 个向上取整。 6. 结果页背景音乐重新生成固定消耗 `5` UI 背景重新生成固定消耗 `2` 点;批量新增物品素材按实际可新增物品名每 `5` 个消耗 `2` 点,不足 `5` 个向上取整。
7. 结果页支持编辑游戏名称、标签、封面图等基础发布信息。 7. 结果页支持编辑游戏名称、标签、封面图等基础发布信息。
8. 发布前支持试玩,并允许随时停止和修改配置。 8. 发布前支持试玩,并允许随时停止和修改配置。
9. 发布不要求试玩通关。 9. 发布不要求试玩通关。

View File

@@ -13,7 +13,7 @@
-> 选择“拼图玩法” -> 选择“拼图玩法”
-> Agent 聊天收束高杠杆锚点 -> Agent 聊天收束高杠杆锚点
-> 生成拼图结果页 -> 生成拼图结果页
-> 百梦主生成并确认拼图图片 -> 陶泥儿主生成并确认拼图图片
-> 发布到拼图广场 -> 发布到拼图广场
-> 玩家从广场进入第 1 关 -> 玩家从广场进入第 1 关
-> 全屏拼图运行时 -> 全屏拼图运行时
@@ -26,7 +26,7 @@
## 1. 一句话定义 ## 1. 一句话定义
百梦主通过 Agent 对话确定拼图作品的高杠杆视觉锚点再由系统生成结果页、AI 生成拼图图片并发布到广场;玩家进入游戏后,在全屏拼图画布中通过交换、合并、拖动和拆分完成关卡,并沿着“相似题材优先、同作者次优先”的关卡链持续游玩。 陶泥儿主通过 Agent 对话确定拼图作品的高杠杆视觉锚点再由系统生成结果页、AI 生成拼图图片并发布到广场;玩家进入游戏后,在全屏拼图画布中通过交换、合并、拖动和拆分完成关卡,并沿着“相似题材优先、同作者次优先”的关卡链持续游玩。
--- ---
@@ -78,7 +78,7 @@
- 拼图关卡名 - 拼图关卡名
- AI 生成拼图图片的功能 - AI 生成拼图图片的功能
- 图片题材标签 - 图片题材标签
4. 百梦主发布后的拼图作品必须进入平台广场。 4. 陶泥儿主发布后的拼图作品必须进入平台广场。
5. 玩家从广场进入某个作品时,第 1 关必须先显示当前作品本身。 5. 玩家从广场进入某个作品时,第 1 关必须先显示当前作品本身。
6. 第 2 关及以后必须按照“标签相似度权重 `70%` + 同作者权重 `30%`”选择下一关。 6. 第 2 关及以后必须按照“标签相似度权重 `70%` + 同作者权重 `30%`”选择下一关。
7. 游戏运行时必须全屏展示拼图画布。 7. 游戏运行时必须全屏展示拼图画布。
@@ -129,7 +129,7 @@
创建拼图作品 创建拼图作品
-> Agent 聊天收束 5 个视觉锚点 -> Agent 聊天收束 5 个视觉锚点
-> 生成结果页 -> 生成结果页
-> 百梦主确认关卡名、标签、图片 -> 陶泥儿主确认关卡名、标签、图片
-> 发布到拼图广场 -> 发布到拼图广场
``` ```
@@ -137,12 +137,12 @@
### 5.1.1 已发布作品二次编辑 ### 5.1.1 已发布作品二次编辑
百梦主在“我的创作”中点击自己已发布的拼图作品时,不进入只读详情页,而是回到该作品绑定的拼图结果页继续编辑。独立的“体验”按钮仍然直接进入第 1 关,不与编辑入口混用。 陶泥儿主在“我的创作”中点击自己已发布的拼图作品时,不进入只读详情页,而是回到该作品绑定的拼图结果页继续编辑。独立的“体验”按钮仍然直接进入第 1 关,不与编辑入口混用。
落地规则: 落地规则:
1. 已发布拼图作品必须优先通过 `sourceSessionId` 恢复原 Agent session。 1. 已发布拼图作品必须优先通过 `sourceSessionId` 恢复原 Agent session。
2. 恢复后的结果页沿用原草稿、当前正式图、标题、摘要和标签;百梦主可以继续改标题、摘要、标签,并重新生成图片。 2. 恢复后的结果页沿用原草稿、当前正式图、标题、摘要和标签;陶泥儿主可以继续改标题、摘要、标签,并重新生成图片。
3. 再次点击发布时不得创建新作品,必须覆盖同一个 `profileId / workId` 3. 再次点击发布时不得创建新作品,必须覆盖同一个 `profileId / workId`
4. 覆盖发布只更新作品内容、更新时间、发布时间与广场投影;不得清零 `playCount`,不得改变作品归属。 4. 覆盖发布只更新作品内容、更新时间、发布时间与广场投影;不得清零 `playCount`,不得改变作品归属。
5. 如果历史作品缺少 `sourceSessionId`,前端只能退回作品详情,不伪造编辑 session。 5. 如果历史作品缺少 `sourceSessionId`,前端只能退回作品详情,不伪造编辑 session。
@@ -210,9 +210,9 @@
拼图 Agent 必须做到: 拼图 Agent 必须做到:
1. 优先接住百梦主的画面灵感,而不是立刻列问卷。 1. 优先接住陶泥儿主的画面灵感,而不是立刻列问卷。
2. 每轮只追问当前最影响图片生成质量的 `1` 个问题。 2. 每轮只追问当前最影响图片生成质量的 `1` 个问题。
3.百梦主已经说出足够信息时,优先总结,不重复追问。 3.陶泥儿主已经说出足够信息时,优先总结,不重复追问。
4. 当会话至少完成 `2` 轮后,工作区必须提供 `补充剩余关键字` 快捷动作。 4. 当会话至少完成 `2` 轮后,工作区必须提供 `补充剩余关键字` 快捷动作。
- 该动作沿用 RPG 聊天链路,仍走发送消息接口,但请求体必须携带 `quickFillRequested: true` - 该动作沿用 RPG 聊天链路,仍走发送消息接口,但请求体必须携带 `quickFillRequested: true`
- 前端不补数据、不伪造锚点状态,只发送“请补充剩余关键字。”作为本轮用户消息。 - 前端不补数据、不伪造锚点状态,只发送“请补充剩余关键字。”作为本轮用户消息。
@@ -255,7 +255,7 @@ interface PuzzleAnchorPack {
## 7.1 结果页定位 ## 7.1 结果页定位
拼图结果页是百梦主从 Agent 共创转入正式发布前的最小工作台。 拼图结果页是陶泥儿主从 Agent 共创转入正式发布前的最小工作台。
它至少承担 5 件事: 它至少承担 5 件事:
@@ -303,7 +303,7 @@ interface PuzzleAnchorPack {
关卡名生成规则建议如下: 关卡名生成规则建议如下:
1. 默认由 Agent 根据锚点自动生成 `1` 个正式候选名。 1. 默认由 Agent 根据锚点自动生成 `1` 个正式候选名。
2. 百梦主可直接手改。 2. 陶泥儿主可直接手改。
3. 关卡名长度建议控制在 `4~12` 个中文字符。 3. 关卡名长度建议控制在 `4~12` 个中文字符。
4. 不允许空标题发布。 4. 不允许空标题发布。
@@ -357,6 +357,7 @@ interface PuzzleAnchorPack {
4. 历史素材入口与添加参考图并列放在输入框右下角,打开独立素材选择面板,不在当前面板下方展开。 4. 历史素材入口与添加参考图并列放在输入框右下角,打开独立素材选择面板,不在当前面板下方展开。
5. UI 不默认写玩法规则说明,只展示必要状态、预览和操作。 5. UI 不默认写玩法规则说明,只展示必要状态、预览和操作。
6. 移动端中输入框右下角按钮必须可点且不遮挡正文输入;输入框需要预留底部内边距。 6. 移动端中输入框右下角按钮必须可点且不遮挡正文输入;输入框需要预留底部内边距。
7. 本地上传的非正方形拼图图片进入平台通用正方形图片裁剪弹窗;该弹窗的拖拽裁剪框、八向边界手柄、九宫格辅助线、遮罩和触控行为同时服务拼图图片上传与头像上传,后续不得在头像或拼图侧各自维护一套裁剪交互。
后端落地契约: 后端落地契约:
@@ -678,7 +679,7 @@ V1 规则如下:
1. 点击道具必须弹出独立确认窗口。 1. 点击道具必须弹出独立确认窗口。
2. 确认窗口期间暂停游戏时间。 2. 确认窗口期间暂停游戏时间。
3. 正式后端运行态每次确认消耗 `1` 点。 3. 正式后端运行态每次确认消耗 `1` 点。
4. 本地调试 run 不伪造钱包扣费,只保持确认、暂停和表现一致。 4. 本地调试 run 不伪造钱包扣费,只保持确认、暂停和表现一致。
--- ---
@@ -1160,7 +1161,7 @@ interface PuzzleRunSnapshot {
完成标准: 完成标准:
1. 百梦主能从平台进入拼图 Agent 工作区 1. 陶泥儿主能从平台进入拼图 Agent 工作区
2. 能通过聊天生成结果页草稿 2. 能通过聊天生成结果页草稿
## 阶段 B再做结果页与图片资产 ## 阶段 B再做结果页与图片资产
@@ -1174,7 +1175,7 @@ interface PuzzleRunSnapshot {
完成标准: 完成标准:
1. 百梦主能生成正式拼图图片并发布 1. 陶泥儿主能生成正式拼图图片并发布
2. 作品能进入拼图广场 2. 作品能进入拼图广场
## 阶段 C再做拼图运行时核心循环 ## 阶段 C再做拼图运行时核心循环
@@ -1232,4 +1233,4 @@ interface PuzzleRunSnapshot {
这次平台新增拼图玩法,正确的做法不是只补一个拼图画布,而是: 这次平台新增拼图玩法,正确的做法不是只补一个拼图画布,而是:
**把拼图作为平台内独立玩法类型接进现有 Agent-first 创作中心、结果页、发布链、广场分发链和运行时链,让百梦主先收束高杠杆视觉锚点,让玩家在全屏交换-合并-拆分的拼图循环中持续游玩。** **把拼图作为平台内独立玩法类型接进现有 Agent-first 创作中心、结果页、发布链、广场分发链和运行时链,让陶泥儿主先收束高杠杆视觉锚点,让玩家在全屏交换-合并-拆分的拼图循环中持续游玩。**

View File

@@ -630,7 +630,7 @@ SSE 事件:
1. 增加背景音乐和环境音,但不改变四帧三段主链。 1. 增加背景音乐和环境音,但不改变四帧三段主链。
2. 为移动端生成 `9:16` 竖版裁切版本。 2. 为移动端生成 `9:16` 竖版裁切版本。
3. 支持百梦主手动上传某张关键帧,再生成相邻视频。 3. 支持陶泥儿主手动上传某张关键帧,再生成相邻视频。
4. 支持发布后版本化替换开场动画。 4. 支持发布后版本化替换开场动画。
5. 支持用第四幕直接生成开局场景动态背景。 5. 支持用第四幕直接生成开局场景动态背景。
6. 支持把开场动画拆出的关键帧回流为作品详情页轮播素材。 6. 支持把开场动画拆出的关键帧回流为作品详情页轮播素材。

View File

@@ -22,7 +22,7 @@
接成一条新的稳定流程: 接成一条新的稳定流程:
**每个场景由百梦主在工具中配置为 `2~5` 幕;每一幕都绑定独立背景图和相遇 NPC 顺序;每一幕的第一个 NPC 视为主角色;运行时按幕切换背景和可遇对象,并根据主角色当前好感度裁决聊天轮数与第 5 轮收束方式。** **每个场景由陶泥儿主在工具中配置为 `2~5` 幕;每一幕都绑定独立背景图和相遇 NPC 顺序;每一幕的第一个 NPC 视为主角色;运行时按幕切换背景和可遇对象,并根据主角色当前好感度裁决聊天轮数与第 5 轮收束方式。**
本次还追加一条必须和草稿生成阶段一起落地的约束: 本次还追加一条必须和草稿生成阶段一起落地的约束:
@@ -31,13 +31,13 @@
补充口径修正: 补充口径修正:
1. `scene_chapter` 在本期继续保留为数据层 / 编译层 / 运行时层概念。 1. `scene_chapter` 在本期继续保留为数据层 / 编译层 / 运行时层概念。
2. `scene_chapter` 不作为百梦主可见的独立 Tab、独立卡片或独立导航入口。 2. `scene_chapter` 不作为陶泥儿主可见的独立 Tab、独立卡片或独立导航入口。
3. 百梦主配置多幕的唯一入口,是现有“场景”列表里的场景编辑弹层。 3. 陶泥儿主配置多幕的唯一入口,是现有“场景”列表里的场景编辑弹层。
4. 每一幕的 NPC 配置区必须直接叠在当前幕背景预览上,以“对面角色站位”的方式呈现;三个站位既是预览,也是编辑入口。 4. 每一幕的 NPC 配置区必须直接叠在当前幕背景预览上,以“对面角色站位”的方式呈现;三个站位既是预览,也是编辑入口。
5. 幕编辑站位中每个角色只显示角色形象与名称,不展示额外信息块、规则说明或说明性标签。 5. 幕编辑站位中每个角色只显示角色形象与名称,不展示额外信息块、规则说明或说明性标签。
6. 幕内小预览的构图固定为左侧玩家、右侧当前幕角色;右侧三个站位采用一前两后。 6. 幕内小预览的构图固定为左侧玩家、右侧当前幕角色;右侧三个站位采用一前两后。
前排主角色的 y 轴必须与玩家角色对齐后排两个角色必须同一列、x 轴对齐,上下分布,且后排整体的 y 轴中点与前排主角色保持一致。 前排主角色的 y 轴必须与玩家角色对齐后排两个角色必须同一列、x 轴对齐,上下分布,且后排整体的 y 轴中点与前排主角色保持一致。
7. 新建幕默认仅预置 1 个主角色槽位内容,其余槽位留空,等待百梦主补充。 7. 新建幕默认仅预置 1 个主角色槽位内容,其余槽位留空,等待陶泥儿主补充。
8. 角色名称显示在角色形象上方,角色渲染不附带方形 UI 底板。 8. 角色名称显示在角色形象上方,角色渲染不附带方形 UI 底板。
9. 世界档案的场景详情页不再单独展示“场景图片”和“场景内 NPC”字段相关兼容数据统一由多幕配置自动同步回场景对象。 9. 世界档案的场景详情页不再单独展示“场景图片”和“场景内 NPC”字段相关兼容数据统一由多幕配置自动同步回场景对象。
@@ -55,7 +55,7 @@
本次迭代必须同时满足以下目标: 本次迭代必须同时满足以下目标:
1. 百梦主可以在现有创作页面中为每个场景章节配置多幕内容。 1. 陶泥儿主可以在现有创作页面中为每个场景章节配置多幕内容。
2. 每一幕都必须绑定一张正式背景图。 2. 每一幕都必须绑定一张正式背景图。
3. 每一幕都可以配置玩家会遇到哪些 NPC并且保留顺序。 3. 每一幕都可以配置玩家会遇到哪些 NPC并且保留顺序。
4. 每一幕配置的第一个 NPC 必须被系统认定为该幕主角色。 4. 每一幕配置的第一个 NPC 必须被系统认定为该幕主角色。
@@ -89,7 +89,7 @@
1. 不新建独立的“场景编辑器”页面。 1. 不新建独立的“场景编辑器”页面。
2. 不把幕推进逻辑放到前端本地计算。 2. 不把幕推进逻辑放到前端本地计算。
3. 不让百梦主直接编辑底层运行时 `ChapterState` 或聊天状态对象。 3. 不让陶泥儿主直接编辑底层运行时 `ChapterState` 或聊天状态对象。
4. 不做多 NPC 并行聊天。 4. 不做多 NPC 并行聊天。
5. 不做每一幕的复杂分支树可视化编辑器。 5. 不做每一幕的复杂分支树可视化编辑器。
6. 不把“规则说明文案”默认堆到创作页或游戏 UI 面板里。 6. 不把“规则说明文案”默认堆到创作页或游戏 UI 面板里。
@@ -122,7 +122,7 @@
1. 场景章节没有“幕”这一层结构化对象。 1. 场景章节没有“幕”这一层结构化对象。
2. 背景图是场景级资产,不是幕级资产。 2. 背景图是场景级资产,不是幕级资产。
3. NPC 与场景的关系主要还是地点级归属,不是幕级相遇编排。 3. NPC 与场景的关系主要还是地点级归属,不是幕级相遇编排。
4. 百梦主无法在创作页里明确控制“这一幕谁先出场、谁是主角色”。 4. 陶泥儿主无法在创作页里明确控制“这一幕谁先出场、谁是主角色”。
## 4.2 游戏运行侧现状 ## 4.2 游戏运行侧现状
@@ -185,7 +185,7 @@
这意味着: 这意味着:
1. 百梦主在工具里编辑的是“第几幕”。 1. 陶泥儿主在工具里编辑的是“第几幕”。
2. 运行时仍然只认现有章节阶段枚举。 2. 运行时仍然只认现有章节阶段枚举。
3. `chapterDirector` 可以继续复用,只是数据来源从“纯 quest 推导”升级成“quest + 幕蓝图联合推导”。 3. `chapterDirector` 可以继续复用,只是数据来源从“纯 quest 推导”升级成“quest + 幕蓝图联合推导”。
@@ -214,7 +214,7 @@
- `name` - `name`
- `description` - `description`
- `imageSrc` - `imageSrc`
- `sceneNpcIds`(仅作为兼容字段,由多幕配置自动派生,不再作为百梦主可编辑字段) - `sceneNpcIds`(仅作为兼容字段,由多幕配置自动派生,不再作为陶泥儿主可编辑字段)
- `connections` - `connections`
- `sceneChapterBlueprints` 对应的多幕配置 - `sceneChapterBlueprints` 对应的多幕配置
2. 场景配置面板中,开局场景必须复用普通场景同级的配置 UI而不是继续保留一套缩水版表单。 2. 场景配置面板中,开局场景必须复用普通场景同级的配置 UI而不是继续保留一套缩水版表单。
@@ -251,7 +251,7 @@
原因: 原因:
1. 当前创作工作区已经进入“先收关键锚点、再逐步扩写”的阶段。 1. 当前创作工作区已经进入“先收关键锚点、再逐步扩写”的阶段。
2. 一次铺太多 playable、场景和长尾对象会稀释百梦主对第一版底稿的掌控感。 2. 一次铺太多 playable、场景和长尾对象会稀释陶泥儿主对第一版底稿的掌控感。
3. 本期还要把幕级背景图和角色主形象自动挂回草稿,如果对象规模不收束,等待时间和生成成本都会直接失控。 3. 本期还要把幕级背景图和角色主形象自动挂回草稿,如果对象规模不收束,等待时间和生成成本都会直接失控。
### 5.5.2 幕级出演角色与背景必须由剧情引擎判定 ### 5.5.2 幕级出演角色与背景必须由剧情引擎判定
@@ -309,7 +309,7 @@
- 角色主形象是否就绪 - 角色主形象是否就绪
- 场景幕背景是否就绪 - 场景幕背景是否就绪
这样百梦主一进入草稿精修工作区,就能直接看到: 这样陶泥儿主一进入草稿精修工作区,就能直接看到:
1. 角色已经带主形象 1. 角色已经带主形象
2. 每个场景章节的每一幕已经带背景图 2. 每个场景章节的每一幕已经带背景图
@@ -369,7 +369,7 @@ interface CustomWorldFoundationDraftSceneChapter {
1. `primaryNpcId` 必须等于 `encounterNpcIds[0]`,不允许单独填写成别的角色。 1. `primaryNpcId` 必须等于 `encounterNpcIds[0]`,不允许单独填写成别的角色。
2. 每幕必须至少有 `1` 个 NPC。 2. 每幕必须至少有 `1` 个 NPC。
3. 每幕必须有 `backgroundImageSrc``backgroundAssetId` 3. 每幕必须有 `backgroundImageSrc``backgroundAssetId`
4. `advanceRule` 由系统按幕位置默认编译,第一版不要求百梦主手改。 4. `advanceRule` 由系统按幕位置默认编译,第一版不要求陶泥儿主手改。
## 6.2 发布到运行时的蓝图结构 ## 6.2 发布到运行时的蓝图结构
@@ -416,7 +416,7 @@ sceneChapterBlueprints?: SceneChapterBlueprint[] | null;
原因: 原因:
1. 现有 `landmarks` 只足够表达地点,不足够表达幕顺序。 1. 现有 `landmarks` 只足够表达地点,不足够表达幕顺序。
2. 现有 `ChapterState` 是运行时状态,不适合直接兼做百梦主蓝图。 2. 现有 `ChapterState` 是运行时状态,不适合直接兼做陶泥儿主蓝图。
3. 独立蓝图层更适合后端编译和发布校验。 3. 独立蓝图层更适合后端编译和发布校验。
## 6.3 聊天状态扩展 ## 6.3 聊天状态扩展
@@ -483,9 +483,9 @@ type NpcChatTurnResult = {
新增规则: 新增规则:
1. 百梦主从现有“场景”列表点击任一场景卡,进入对应场景编辑弹层。 1. 陶泥儿主从现有“场景”列表点击任一场景卡,进入对应场景编辑弹层。
2. 多幕配置必须作为场景编辑弹层内的一个区块出现,归属于该场景。 2. 多幕配置必须作为场景编辑弹层内的一个区块出现,归属于该场景。
3. `scene_chapter` 仅作为保存层和运行时蓝图存在,不单独暴露在百梦主导航里。 3. `scene_chapter` 仅作为保存层和运行时蓝图存在,不单独暴露在陶泥儿主导航里。
4. 场景卡片可增加“幕数量”轻量摘要,但第一版不是阻塞项。 4. 场景卡片可增加“幕数量”轻量摘要,但第一版不是阻塞项。
## 7.2 场景编辑弹层展示要求 ## 7.2 场景编辑弹层展示要求
@@ -498,8 +498,8 @@ type NpcChatTurnResult = {
补充约束: 补充约束:
1. “场景图片”不再作为场景详情页里的独立字段展示,百梦主只能通过每一幕的“配置背景”入口管理视觉。 1. “场景图片”不再作为场景详情页里的独立字段展示,陶泥儿主只能通过每一幕的“配置背景”入口管理视觉。
2. “场景内 NPC”不再作为场景详情页里的独立字段展示百梦主只能通过每一幕角色槽位配置相遇 NPC。 2. “场景内 NPC”不再作为场景详情页里的独立字段展示陶泥儿主只能通过每一幕角色槽位配置相遇 NPC。
3. 为兼容现有运行时与旧数据结构,场景对象上的 `imageSrc / sceneNpcIds` 仍然保留,但必须由多幕配置自动回填,前台不再暴露单独编辑控件,且不能再用 `sceneNpcIds` 限制每幕可选角色。 3. 为兼容现有运行时与旧数据结构,场景对象上的 `imageSrc / sceneNpcIds` 仍然保留,但必须由多幕配置自动回填,前台不再暴露单独编辑控件,且不能再用 `sceneNpcIds` 限制每幕可选角色。
多幕区块至少展示: 多幕区块至少展示:
@@ -566,11 +566,11 @@ NPC 配置面板必须支持:
3. 不允许把不存在于当前世界角色池中的 id 写入幕配置。 3. 不允许把不存在于当前世界角色池中的 id 写入幕配置。
4. 若主角色未与当前场景或线程建立任何关联,给出发布警告。 4. 若主角色未与当前场景或线程建立任何关联,给出发布警告。
5. 存储时继续落到 `encounterNpcIds` 有序数组,槽位从左到右按顺序压缩写入。 5. 存储时继续落到 `encounterNpcIds` 有序数组,槽位从左到右按顺序压缩写入。
6. `sceneNpcIds` 不再作为百梦主字段,也不再作为幕角色选择范围;保存时只从所有幕的 `encounterNpcIds` 自动派生兼容值。 6. `sceneNpcIds` 不再作为陶泥儿主字段,也不再作为幕角色选择范围;保存时只从所有幕的 `encounterNpcIds` 自动派生兼容值。
## 7.6 幕预览 ## 7.6 幕预览
百梦主在场景编辑弹层里点击“幕预览”后,必须直接进入当前幕的运行时预览。 陶泥儿主在场景编辑弹层里点击“幕预览”后,必须直接进入当前幕的运行时预览。
要求如下: 要求如下:
@@ -633,7 +633,7 @@ interface SceneActRuntimeState {
## 8.3 幕推进规则 ## 8.3 幕推进规则
第一版不要求百梦主手填推进条件,而是由系统按幕位置默认编译: 第一版不要求陶泥儿主手填推进条件,而是由系统按幕位置默认编译:
1.`1` 幕默认 `after_primary_contact` 1.`1` 幕默认 `after_primary_contact`
- 玩家与主角色发生首次有效接触后可进入下一幕判定 - 玩家与主角色发生首次有效接触后可进入下一幕判定
@@ -871,7 +871,7 @@ Adventure 主面板在本次迭代中至少增加下面这些表现:
当下面这些结果都成立时,视为本次 PRD 已被正确落地: 当下面这些结果都成立时,视为本次 PRD 已被正确落地:
1. 百梦主可以在现有场景编辑弹层中配置每个场景的多幕。 1. 陶泥儿主可以在现有场景编辑弹层中配置每个场景的多幕。
2. 每个场景章节都可以配置 `2~5` 幕。 2. 每个场景章节都可以配置 `2~5` 幕。
3. 每一幕都可以绑定独立背景图。 3. 每一幕都可以绑定独立背景图。
4. 每一幕都可以配置有序 NPC 列表,第一位自动成为主角色。 4. 每一幕都可以配置有序 NPC 列表,第一位自动成为主角色。

View File

@@ -14,7 +14,7 @@
## 1. 一句话定义 ## 1. 一句话定义
“方洞挑战”是一个反直觉形状分拣玩法:百梦主通过 Agent 设定形状主题、洞口规则、误导节奏和反差演出,系统生成一个移动端优先的单局挑战;玩家在限时内把连续出现的形状投入正确洞口,后端根据当前关卡的真实兼容规则裁决成功、失败和连击。 “方洞挑战”是一个反直觉形状分拣玩法:陶泥儿主通过 Agent 设定形状主题、洞口规则、误导节奏和反差演出,系统生成一个移动端优先的单局挑战;玩家在限时内把连续出现的形状投入正确洞口,后端根据当前关卡的真实兼容规则裁决成功、失败和连击。
--- ---
@@ -130,7 +130,7 @@ Agent 需要把玩家一句灵感收束为上述锚点,不允许逐项盘问
落地约束: 落地约束:
1. `replyText` 是直接展示给百梦主的中文回复,不得出现 JSON、字段名、内部结构等说明。 1. `replyText` 是直接展示给陶泥儿主的中文回复,不得出现 JSON、字段名、内部结构等说明。
2. `nextConfig` 必须是完整配置,不允许只输出 patch缺失字段只能由后端用当前会话配置兜底。 2. `nextConfig` 必须是完整配置,不允许只输出 patch缺失字段只能由后端用当前会话配置兜底。
3. `shapeCount` 由后端限制在 `6``24``difficulty` 限制在 `1``10` 3. `shapeCount` 由后端限制在 `6``24``difficulty` 限制在 `1``10`
4. `quickFillRequested=true` 时,模型应直接补齐剩余配置,后端把 `progressPercent` 固定为 `100` 4. `quickFillRequested=true` 时,模型应直接补齐剩余配置,后端把 `progressPercent` 固定为 `100`

View File

@@ -14,7 +14,7 @@
## 1. 一句话定义 ## 1. 一句话定义
`survivor` 是一个 AI 原生幸存者类游戏模板:百梦主通过 Agent 设定主角幻想、敌潮母题、武器技能、成长流派和战场节奏,系统编译出一个移动端优先的俯视角割草生存作品;玩家通过移动躲避敌潮,武器自动攻击,拾取经验升级,在若干分钟内完成生存挑战、击败首领或倒下结算。 `survivor` 是一个 AI 原生幸存者类游戏模板:陶泥儿主通过 Agent 设定主角幻想、敌潮母题、武器技能、成长流派和战场节奏,系统编译出一个移动端优先的俯视角割草生存作品;玩家通过移动躲避敌潮,武器自动攻击,拾取经验升级,在若干分钟内完成生存挑战、击败首领或倒下结算。
--- ---
@@ -90,7 +90,7 @@
3. 不做复杂地形寻路、真实物理碰撞和高精度弹幕编辑器。 3. 不做复杂地形寻路、真实物理碰撞和高精度弹幕编辑器。
4. 不做多地图章节战役,只做单局挑战。 4. 不做多地图章节战役,只做单局挑战。
5. 不做局外装备养成、抽卡、永久技能树或付费强化。 5. 不做局外装备养成、抽卡、永久技能树或付费强化。
6. 不要求百梦主逐帧编辑怪物 AI、弹道曲线或数值公式。 6. 不要求陶泥儿主逐帧编辑怪物 AI、弹道曲线或数值公式。
7. 不把玩法规则说明长文默认写进 UI 面板。 7. 不把玩法规则说明长文默认写进 UI 面板。
8. 不把按钮弹出的资产、升级或参数编辑做成当前卡片下方展开内容,统一使用独立面板。 8. 不把按钮弹出的资产、升级或参数编辑做成当前卡片下方展开内容,统一使用独立面板。
9. 不让前端本地结算直接写入正式成绩、钱包、任务或排行榜。 9. 不让前端本地结算直接写入正式成绩、钱包、任务或排行榜。
@@ -161,7 +161,7 @@ Agent 必须围绕用户灵感收束这些锚点,不允许把创作入口做
落地约束: 落地约束:
1. `replyText` 是直接展示给百梦主的中文回复,不得出现 JSON、字段名或内部协议说明。 1. `replyText` 是直接展示给陶泥儿主的中文回复,不得出现 JSON、字段名或内部协议说明。
2. `progressPercent` 只能由后端校验后采纳,范围 `0~100` 2. `progressPercent` 只能由后端校验后采纳,范围 `0~100`
3. `nextDraftPatch` 只允许写入幸存者草稿字段,不允许修改平台账号、钱包或作品归属。 3. `nextDraftPatch` 只允许写入幸存者草稿字段,不允许修改平台账号、钱包或作品归属。
4. 模型不可用或结果无法解析时,接口返回明确错误,不用固定模板伪装 AI 回复。 4. 模型不可用或结果无法解析时,接口返回明确错误,不用固定模板伪装 AI 回复。

View File

@@ -4,7 +4,7 @@
## 0. 文档目的 ## 0. 文档目的
这份 PRD 用于设计 `Genarrative / 百梦` 内的 AI 文字游戏模板,暂定工程 ID 为 `text-game`,展示名可用“幕间”或“幕间文字”。它参考 MOKU / 幕间类 AI 互动平台的剧本游乐场、低门槛创作、自由行动、AI 记忆和模拟器强反馈经验,但不迁入任何外部平台工程、账号体系、社区、支付、榜单、论坛或私有存档。 这份 PRD 用于设计 `Genarrative / 陶泥儿` 内的 AI 文字游戏模板,暂定工程 ID 为 `text-game`,展示名可用“幕间”或“幕间文字”。它参考 MOKU / 幕间类 AI 互动平台的剧本游乐场、低门槛创作、自由行动、AI 记忆和模拟器强反馈经验,但不迁入任何外部平台工程、账号体系、社区、支付、榜单、论坛或私有存档。
外部参考只用于提炼产品模式: 外部参考只用于提炼产品模式:
@@ -13,13 +13,13 @@
3. TextGame.ai 体现 AI Game Master、模板即玩、自定义世界、AI 队友和持久世界状态。 3. TextGame.ai 体现 AI Game Master、模板即玩、自定义世界、AI 队友和持久世界状态。
4. Aventura 体现 lorebook、智能记忆、分支故事和本地/隐私优先的创作辅助理念。 4. Aventura 体现 lorebook、智能记忆、分支故事和本地/隐私优先的创作辅助理念。
本文只冻结百梦自己的模板落地口径。若后续实现与旧 TXT / visual novel 文档冲突,应按本文与当前后端 DDD 总纲重新修正文档后再编码。 本文只冻结陶泥儿自己的模板落地口径。若后续实现与旧 TXT / visual novel 文档冲突,应按本文与当前后端 DDD 总纲重新修正文档后再编码。
--- ---
## 1. 一句话定义 ## 1. 一句话定义
`text-game` 是一个 AI 原生文字游戏模板:百梦主可以用一句话、文档、空白或改作入口创建一个可玩的文字互动剧本,系统把题材、玩家身份、角色、地点、目标、机制、记忆和 GM 规则编译成结构化草稿;玩家进入后通过自由输入或快捷选项推动剧情,后端 AI GM 根据世界状态、长期记忆和阶段目标生成下一轮叙事、状态变化、关系变化和可继续行动。 `text-game` 是一个 AI 原生文字游戏模板:陶泥儿主可以用一句话、文档、空白或改作入口创建一个可玩的文字互动剧本,系统把题材、玩家身份、角色、地点、目标、机制、记忆和 GM 规则编译成结构化草稿;玩家进入后通过自由输入或快捷选项推动剧情,后端 AI GM 根据世界状态、长期记忆和阶段目标生成下一轮叙事、状态变化、关系变化和可继续行动。
--- ---
@@ -35,7 +35,7 @@
### 2.2 不等同于 RPG 主运行时 ### 2.2 不等同于 RPG 主运行时
RPG 主运行时承载百梦现有视觉 RPG、场景探索、战斗、NPC、物品和章节系统。 RPG 主运行时承载陶泥儿现有视觉 RPG、场景探索、战斗、NPC、物品和章节系统。
`text-game` 首版是轻量互动剧本模板不接入完整地图移动、战斗演出、装备背包、NPC 商店和 RPG 章节任务系统。它可以在以后把成熟剧本升级为 RPG 世界,但 V1 不做自动升级。 `text-game` 首版是轻量互动剧本模板不接入完整地图移动、战斗演出、装备背包、NPC 商店和 RPG 章节任务系统。它可以在以后把成熟剧本升级为 RPG 世界,但 V1 不做自动升级。
@@ -55,11 +55,11 @@ RPG 主运行时承载百梦现有视觉 RPG、场景探索、战斗、NPC、物
### 3.1 核心目标 ### 3.1 核心目标
1.百梦主在 3 分钟内从一个想法生成可试玩的文字游戏。 1.陶泥儿主在 3 分钟内从一个想法生成可试玩的文字游戏。
2. 让玩家每一轮行动都看到世界状态、关系或目标推进的反馈。 2. 让玩家每一轮行动都看到世界状态、关系或目标推进的反馈。
3. 让模板支持高复用题材:恋爱养成、古代言情、宫斗宅斗、修仙仙侠、末日生存、灵异怪谈、科幻未来、经营养成、校园都市、娱乐圈。 3. 让模板支持高复用题材:恋爱养成、古代言情、宫斗宅斗、修仙仙侠、末日生存、灵异怪谈、科幻未来、经营养成、校园都市、娱乐圈。
4. 让剧本不只是聊天对象,而是一个有目标、规则、记忆和结局的轻量模拟器。 4. 让剧本不只是聊天对象,而是一个有目标、规则、记忆和结局的轻量模拟器。
5. 让作品可以进入百梦作品架、草稿、发布、广场、存档和继续体验链路。 5. 让作品可以进入陶泥儿作品架、草稿、发布、广场、存档和继续体验链路。
### 3.2 首版不追求 ### 3.2 首版不追求
@@ -100,7 +100,7 @@ RPG 主运行时承载百梦现有视觉 RPG、场景探索、战斗、NPC、物
3. AI 可以填补空位,作为队友、对手或观众角色参与。 3. AI 可以填补空位,作为队友、对手或观众角色参与。
4. 世界状态、队伍、库存、任务进度需要持久化。 4. 世界状态、队伍、库存、任务进度需要持久化。
百梦落点: 陶泥儿落点:
1. V1 支持单人玩家 + AI 角色群。 1. V1 支持单人玩家 + AI 角色群。
2. AI 角色群只作为剧本内角色,不做多人房间。 2. AI 角色群只作为剧本内角色,不做多人房间。
@@ -115,7 +115,7 @@ RPG 主运行时承载百梦现有视觉 RPG、场景探索、战斗、NPC、物
3. 分支故事需要保存 alternate timeline 的结构,而不是只保存最终文本。 3. 分支故事需要保存 alternate timeline 的结构,而不是只保存最终文本。
4. 创作者需要能查看和修正 AI 记住了什么。 4. 创作者需要能查看和修正 AI 记住了什么。
百梦落点: 陶泥儿落点:
1. V1 只做当前主线历史与局部重生成,不做多时间线编辑器。 1. V1 只做当前主线历史与局部重生成,不做多时间线编辑器。
2. 记忆分为剧本静态设定、运行时事件摘要、角色记忆、玩家画像和未解决伏笔。 2. 记忆分为剧本静态设定、运行时事件摘要、角色记忆、玩家画像和未解决伏笔。
@@ -125,9 +125,9 @@ RPG 主运行时承载百梦现有视觉 RPG、场景探索、战斗、NPC、物
## 5. 用户角色 ## 5. 用户角色
### 5.1 百梦 ### 5.1 陶泥儿
百梦主负责创建、编辑、试玩和发布文字游戏。核心诉求是: 陶泥儿主负责创建、编辑、试玩和发布文字游戏。核心诉求是:
1. 用少量输入生成可玩的剧本。 1. 用少量输入生成可玩的剧本。
2. 控制题材、关系张力、目标、结局和禁区。 2. 控制题材、关系张力、目标、结局和禁区。
@@ -197,7 +197,7 @@ RPG 主运行时承载百梦现有视觉 RPG、场景探索、战斗、NPC、物
### 7.1 一句话创建 `idea` ### 7.1 一句话创建 `idea`
输入:百梦主写一句或几句话。 输入:陶泥儿主写一句或几句话。
示例语义: 示例语义:
@@ -1013,12 +1013,12 @@ src/components/text-game-runtime/TextGameRuntimeShell.tsx
V1 默认不新增第二套消费单位。若运行时需要扣费: V1 默认不新增第二套消费单位。若运行时需要扣费:
1. 使用平台“点”钱包。 1. 使用平台“点”钱包。
2. 扣费由 `api-server` 编排,不能在前端自行计算。 2. 扣费由 `api-server` 编排,不能在前端自行计算。
3. 幂等依赖 `clientEventId` 3. 幂等依赖 `clientEventId`
4. 测试 run 是否扣费需要产品确认。 4. 测试 run 是否扣费需要产品确认。
本文不冻结具体点数。 本文不冻结具体点数。
--- ---
@@ -1268,10 +1268,10 @@ cargo check -p api-server
1. 展示名最终用“幕间”“幕间文字”还是“AI文字游戏”。 1. 展示名最终用“幕间”“幕间文字”还是“AI文字游戏”。
2. V1 是否开放 `remix` 2. V1 是否开放 `remix`
3. V1 测试 run 是否消耗点。 3. V1 测试 run 是否消耗点。
4. V1 是否允许创作者配置封面图。 4. V1 是否允许创作者配置封面图。
5. V1 是否开放 `allowOutOfCharacterCommand` 5. V1 是否开放 `allowOutOfCharacterCommand`
6. V1 是否需要接入内容审核队列后才允许公开发布。 6. V1 是否需要接入内容审核队列后才允许公开发布。
7. 作品发现页是否单独展示文字游戏分类入口。 7. 作品发现页是否单独展示文字游戏分类入口。
无论这些默认值如何选择,三条硬边界不变:只做百梦内的 AI 文字游戏模板,复用平台接口,不迁入外部平台和 replay。 无论这些默认值如何选择,三条硬边界不变:只做陶泥儿内的 AI 文字游戏模板,复用平台接口,不迁入外部平台和 replay。

View File

@@ -683,7 +683,7 @@ GET /api/runtime/profile/save-archives
1. 创作底稿生成和运行时 GM 输出由 `api-server` 编排 `platform-llm`SpacetimeDB reducer 不直接调用 LLM。 1. 创作底稿生成和运行时 GM 输出由 `api-server` 编排 `platform-llm`SpacetimeDB reducer 不直接调用 LLM。
2. 图片和音乐生成 / 上传由 `api-server` 编排平台资产服务,不把二进制写入 SpacetimeDB。 2. 图片和音乐生成 / 上传由 `api-server` 编排平台资产服务,不把二进制写入 SpacetimeDB。
3. 消耗点时走平台钱包流水;不得迁入外部仓库积分表。 3. 消耗点时走平台钱包流水;不得迁入外部仓库积分表。
4. prompt 必须输出可解析 JSON step 或工具调用结果;解析失败时由后端 repair不让前端猜测业务状态。 4. prompt 必须输出可解析 JSON step 或工具调用结果;解析失败时由后端 repair不让前端猜测业务状态。
--- ---
@@ -1801,7 +1801,7 @@ cargo check -p api-server
这些问题不阻塞本文冻结边界,但进入编码前需要产品确认默认值: 这些问题不阻塞本文冻结边界,但进入编码前需要产品确认默认值:
1. 视觉小说运行时 AI 推进是否首版收费,以及单次推进默认点数。 1. 视觉小说运行时 AI 推进是否首版收费,以及单次推进默认点数。
2. 文档上传首版支持的最大大小和格式。 2. 文档上传首版支持的最大大小和格式。
3. 角色立绘、场景图是否首版自动生成,还是仅提供手动上传和后续生成按钮。 3. 角色立绘、场景图是否首版自动生成,还是仅提供手动上传和后续生成按钮。
4. 属性面板是否首版关闭,还是只对内部白名单开启。 4. 属性面板是否首版关闭,还是只对内部白名单开启。

View File

@@ -12,7 +12,7 @@ Phase 1 的目标不是重做现有拼图创作系统,也不是把 Agent 降
## 1. 一句话定义 ## 1. 一句话定义
Phase 1 是一个“只开放拼图模板的创意互动内容生成 Agent”它必须先展示多个拼图模板候选用户选择某个模板后再确认该模板下的关卡模式、关卡数和预计点范围;确认后才通过拼图模块 Tool 填充同一份 `PuzzleResultDraft` 草稿字段,并复用现有 `puzzle-result``puzzle-runtime` 完成表单编辑、自然语言修订和立即试玩闭环。 Phase 1 是一个“只开放拼图模板的创意互动内容生成 Agent”它必须先展示多个拼图模板候选用户选择某个模板后再确认该模板下的关卡模式、关卡数和预计点范围;确认后才通过拼图模块 Tool 填充同一份 `PuzzleResultDraft` 草稿字段,并复用现有 `puzzle-result``puzzle-runtime` 完成表单编辑、自然语言修订和立即试玩闭环。
--- ---
@@ -91,7 +91,7 @@ APIMart Responses 请求必须按多模态内容块组织:
1. 新增 `platform-agent` PoC crate封装 LangChain-Rust 的 Function Calling / AgentExecutor 能力。 1. 新增 `platform-agent` PoC crate封装 LangChain-Rust 的 Function Calling / AgentExecutor 能力。
2. 新增创意 Agent shared contract支持阶段、消息、模板选择、积分范围、关卡图片计划、目标拼图 session 绑定。 2. 新增创意 Agent shared contract支持阶段、消息、模板选择、积分范围、关卡图片计划、目标拼图 session 绑定。
3. 新增拼图模板协议,当前只提供一个可用拼图模板,但仍必须显式展示选择步骤。 3. 新增拼图模板协议,当前只提供一个可用拼图模板,但仍必须显式展示选择步骤。
4. 拼图模板卡必须展示模板标题、预览、选择理由、单关卡/多关卡能力、计划关卡数、预计点范围。 4. 拼图模板卡必须展示模板标题、预览、选择理由、单关卡/多关卡能力、计划关卡数、预计点范围。
5. 用户确认模板后Agent 才能创建或复用拼图 session并填充 `PuzzleResultDraft` 5. 用户确认模板后Agent 才能创建或复用拼图 session并填充 `PuzzleResultDraft`
6. Agent 可写草稿字段只允许: 6. Agent 可写草稿字段只允许:
- `PuzzleResultDraft.workTitle` - `PuzzleResultDraft.workTitle`
@@ -133,7 +133,7 @@ APIMart Responses 请求必须按多模态内容块组织:
-> Agent 思考并选择拼图模板 -> Agent 思考并选择拼图模板
-> 前端展示多个拼图模板卡 -> 前端展示多个拼图模板卡
-> 用户选择一个模板 -> 用户选择一个模板
-> 前端弹出该模板的关卡模式、关卡数和预计点范围确认面板 -> 前端弹出该模板的关卡模式、关卡数和预计点范围确认面板
-> Agent 调用拼图模块 Tool 生成草稿字段和图片计划 -> Agent 调用拼图模块 Tool 生成草稿字段和图片计划
-> 拼图模块创建 / 更新 puzzle_agent_session -> 拼图模块创建 / 更新 puzzle_agent_session
-> 拼图模块生成单关卡或多关卡图片候选 -> 拼图模块生成单关卡或多关卡图片候选
@@ -174,7 +174,7 @@ Agent 生成草稿前必须展示独立确认卡。确认卡字段:
| 选择理由 | `reason` | 一到两句中文,不展示内部推理链。 | | 选择理由 | `reason` | 一到两句中文,不展示内部推理链。 |
| 关卡模式 | `selectedLevelMode` | 单关卡 / 多关卡。 | | 关卡模式 | `selectedLevelMode` | 单关卡 / 多关卡。 |
| 计划关卡数 | `plannedLevelCount` | 在模板 min/max 内。 | | 计划关卡数 | `plannedLevelCount` | 在模板 min/max 内。 |
| 预计点 | `costRange` | 显示 `minPoints``maxPoints` 点。 | | 预计点 | `costRange` | 显示 `minPoints``maxPoints` 点。 |
交互: 交互:
@@ -529,7 +529,7 @@ done
事件要求: 事件要求:
1. `messages/stream` 首轮必须先返回 `puzzle_template_catalog`,并把 `puzzleTemplateCatalog` 写入 session`puzzleTemplateSelection` 保持为空。 1. `messages/stream` 首轮必须先返回 `puzzle_template_catalog`,并把 `puzzleTemplateCatalog` 写入 session`puzzleTemplateSelection` 保持为空。
2. 用户点击某个模板后,前端基于模板协议打开独立配置确认面板,确认关卡模式、关卡数和预计点范围。 2. 用户点击某个模板后,前端基于模板协议打开独立配置确认面板,确认关卡模式、关卡数和预计点范围。
3. `confirm-template` 后才允许写入 `puzzle_template_selection``puzzle_level_plan` 并创建拼图草稿。 3. `confirm-template` 后才允许写入 `puzzle_template_selection``puzzle_level_plan` 并创建拼图草稿。
4. `target_session` 必须带 `targetSessionId` 和可跳转 stage。 4. `target_session` 必须带 `targetSessionId` 和可跳转 stage。
5. 流式失败时保留已显示文字,并发送结构化 `error` 5. 流式失败时保留已显示文字,并发送结构化 `error`
@@ -719,7 +719,7 @@ Agent 必须被提示为:
1. 你是创意互动内容生成 Agent不是规则分类器。 1. 你是创意互动内容生成 Agent不是规则分类器。
2. 当前产品只开放拼图模板。 2. 当前产品只开放拼图模板。
3. 你要相信自己的图文理解能力,主动形成拼图创意。 3. 你要相信自己的图文理解能力,主动形成拼图创意。
4. 即使只有拼图可用,也必须显式选择模板并展示预计点范围。 4. 即使只有拼图可用,也必须显式选择模板并展示预计点范围。
5. 未经用户确认模板,不得创建草稿。 5. 未经用户确认模板,不得创建草稿。
6. 你只能调用已注册工具。 6. 你只能调用已注册工具。
7. 可写草稿字段只限 `workTitle``workDescription``workTags``levels[].levelName``levels[].pictureDescription``levels[].pictureReference` 7. 可写草稿字段只限 `workTitle``workDescription``workTags``levels[].levelName``levels[].pictureDescription``levels[].pictureReference`
@@ -996,7 +996,7 @@ npm run test -- PuzzleResultView
4. `PuzzleResultView` 已显示并编辑 `levels[].pictureReference`,并在智能创作链路进入结果页时显示自然语言修订输入条,调用 `streamCreativeDraftEdit` 后回写同一份拼图 session。 4. `PuzzleResultView` 已显示并编辑 `levels[].pictureReference`,并在智能创作链路进入结果页时显示自然语言修订输入条,调用 `streamCreativeDraftEdit` 后回写同一份拼图 session。
5. 前端定向验证已通过:`npm run typecheck``npm run check:encoding``npx eslint src/services/creative-agent/creativeAgentClient.ts src/services/creative-agent/creativeAgentSse.ts src/services/creative-agent/index.ts src/components/creative-agent/CreativeAgentWorkspace.tsx src/components/creative-agent/CreativeAgentInputComposer.tsx src/components/creative-agent/CreativeAgentTemplateConfirmPanel.tsx src/components/creative-agent/CreativeAgentStageTimeline.tsx src/components/creative-agent/creativeAgentViewModel.ts src/components/platform-entry/PlatformEntryFlowShellImpl.tsx src/components/platform-entry/platformEntryCreationTypes.ts src/components/platform-entry/PlatformEntryCreationTypeModal.tsx src/components/puzzle-result/PuzzleResultView.tsx --max-warnings 0``npm run test -- src/services/creative-agent/creativeAgentSse.test.ts``npm run test -- src/components/puzzle-result/PuzzleResultView.test.tsx``npm run test -- src/components/platform-entry/platformEntryCreationTypes.test.ts src/components/custom-world-home/CustomWorldCreationHub.interaction.test.tsx``npm run test -- src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx -t "create hub hides RPG"` 5. 前端定向验证已通过:`npm run typecheck``npm run check:encoding``npx eslint src/services/creative-agent/creativeAgentClient.ts src/services/creative-agent/creativeAgentSse.ts src/services/creative-agent/index.ts src/components/creative-agent/CreativeAgentWorkspace.tsx src/components/creative-agent/CreativeAgentInputComposer.tsx src/components/creative-agent/CreativeAgentTemplateConfirmPanel.tsx src/components/creative-agent/CreativeAgentStageTimeline.tsx src/components/creative-agent/creativeAgentViewModel.ts src/components/platform-entry/PlatformEntryFlowShellImpl.tsx src/components/platform-entry/platformEntryCreationTypes.ts src/components/platform-entry/PlatformEntryCreationTypeModal.tsx src/components/puzzle-result/PuzzleResultView.tsx --max-warnings 0``npm run test -- src/services/creative-agent/creativeAgentSse.test.ts``npm run test -- src/components/puzzle-result/PuzzleResultView.test.tsx``npm run test -- src/components/platform-entry/platformEntryCreationTypes.test.ts src/components/custom-world-home/CustomWorldCreationHub.interaction.test.tsx``npm run test -- src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx -t "create hub hides RPG"`
6. 2026-05-05 补充:智能创作工作区的过程区不再只展示最近 6 个短进度标签,改为基于 SSE 事件生成详细过程项,覆盖阶段切换、工具开始/完成、模板选择、预计点、关卡计划、反思、目标绑定、错误和完成事件;刷新或非流式恢复时会从 session 快照补模板、关卡计划和目标绑定,移动端使用紧凑可滚动列表。 6. 2026-05-05 补充:智能创作工作区的过程区不再只展示最近 6 个短进度标签,改为基于 SSE 事件生成详细过程项,覆盖阶段切换、工具开始/完成、模板选择、预计点、关卡计划、反思、目标绑定、错误和完成事件;刷新或非流式恢复时会从 session 快照补模板、关卡计划和目标绑定,移动端使用紧凑可滚动列表。
7. 2026-05-05 补充:流式过程新增 `thought_summary_delta` 事件,只展示可给用户看的“思考摘要”,例如素材理解、模板选择摘要和关卡规划摘要;该事件不承载模型内部推理链,前端按 `thoughtId` 合并多段 delta 后在过程面板中显示为一条持续更新的“思考摘要”。 7. 2026-05-05 补充:流式过程新增 `thought_summary_delta` 事件,只展示可给用户看的“思考摘要”,例如素材理解、模板选择摘要和关卡规划摘要;该事件不承载模型内部推理链,前端按 `thoughtId` 合并多段 delta 后在过程面板中显示为一条持续更新的“思考摘要”。
8. 2026-05-06 补充:智能创作 Agent 的模板步骤拆成两段,`messages/stream` 只返回 `puzzle_template_catalog` 和 session 里的 `puzzleTemplateCatalog`;前端先展示多个模板卡,用户选中后才打开独立确认面板并提交 `confirm-template``puzzle_template_selection``puzzle_cost_range``puzzle_level_plan` 不再由首轮消息流自动发送。工作区在 `sessionId` 变化时必须清空本地待确认模板,避免上一会话已点开的确认面板残留到新会话。 8. 2026-05-06 补充:智能创作 Agent 的模板步骤拆成两段,`messages/stream` 只返回 `puzzle_template_catalog` 和 session 里的 `puzzleTemplateCatalog`;前端先展示多个模板卡,用户选中后才打开独立确认面板并提交 `confirm-template``puzzle_template_selection``puzzle_cost_range``puzzle_level_plan` 不再由首轮消息流自动发送。工作区在 `sessionId` 变化时必须清空本地待确认模板,避免上一会话已点开的确认面板残留到新会话。
@@ -1051,7 +1051,7 @@ cargo check -p api-server
1. 任务 G 已补 API facade 回归:`cargo test -p api-server creative_agent` 覆盖未确认模板时 `draft-edits/stream` 返回错误且不绑定 `targetBinding`,以及 `rpg.unsupported` 非拼图模板确认被拒绝且不创建目标 session。 1. 任务 G 已补 API facade 回归:`cargo test -p api-server creative_agent` 覆盖未确认模板时 `draft-edits/stream` 返回错误且不绑定 `targetBinding`,以及 `rpg.unsupported` 非拼图模板确认被拒绝且不创建目标 session。
2. 任务 G 已补拼图模块回归:`cargo test -p module-puzzle creative` 同时覆盖单关卡、多关卡 draft 和 `pictureReference` / `workDescription -> summary` / `workTags -> themeTags` 的 Phase 1 映射。 2. 任务 G 已补拼图模块回归:`cargo test -p module-puzzle creative` 同时覆盖单关卡、多关卡 draft 和 `pictureReference` / `workDescription -> summary` / `workTags -> themeTags` 的 Phase 1 映射。
3. 任务 G 已补前端回归:`CreativeAgentTemplateConfirmPanel.test.tsx` 覆盖模板确认卡点范围,`CreativeAgentWorkspace.test.tsx` 覆盖 target ready 后展示打开草稿入口,并通过 `resolveCreativeAgentTargetSelectionStage` 固定 `puzzle-result` 跳转落点;`creativeAgentSse.test.ts` 覆盖 creative Agent SSE 事件与 draft edit payload。 3. 任务 G 已补前端回归:`CreativeAgentTemplateConfirmPanel.test.tsx` 覆盖模板确认卡点范围,`CreativeAgentWorkspace.test.tsx` 覆盖 target ready 后展示打开草稿入口,并通过 `resolveCreativeAgentTargetSelectionStage` 固定 `puzzle-result` 跳转落点;`creativeAgentSse.test.ts` 覆盖 creative Agent SSE 事件与 draft edit payload。
4. 定向验收已通过:`npm run check:encoding``npm run test -- src/components/creative-agent/CreativeAgentWorkspace.test.tsx src/components/creative-agent/CreativeAgentTemplateConfirmPanel.test.tsx src/services/creative-agent/creativeAgentSse.test.ts``npm run test -- src/components/puzzle-result/PuzzleResultView.test.tsx``cargo test -p module-puzzle creative``cargo test -p module-puzzle puzzle_draft``cargo test -p shared-contracts creative_agent``cargo test -p api-server creative_agent``cargo check -p api-server` 4. 定向验收已通过:`npm run check:encoding``npm run test -- src/components/creative-agent/CreativeAgentWorkspace.test.tsx src/components/creative-agent/CreativeAgentTemplateConfirmPanel.test.tsx src/services/creative-agent/creativeAgentSse.test.ts``npm run test -- src/components/puzzle-result/PuzzleResultView.test.tsx``cargo test -p module-puzzle creative``cargo test -p module-puzzle puzzle_draft``cargo test -p shared-contracts creative_agent``cargo test -p api-server creative_agent``cargo check -p api-server`
5. 全量 `npm run typecheck` 当前被视觉小说链路既有类型错误阻塞,包含 `packages/shared/src/contracts/visualNovel.ts``src/components/platform-entry/PlatformEntryFlowShellImpl.tsx``onSelectVisualNovel` 缺失和 `src/components/visual-novel-result/VisualNovelResultView.tsx`;全量 `npm run test` 当前被既有 RPG 首页搜索 / 拼图 workspace 旧断言等非本任务用例阻塞。上述阻塞不来自本次 creative-agent Task G 回归补测。 5. 全量 `npm run typecheck` 当前被视觉小说链路既有类型错误阻塞,包含 `packages/shared/src/contracts/visualNovel.ts``src/components/platform-entry/PlatformEntryFlowShellImpl.tsx``onSelectVisualNovel` 缺失和 `src/components/visual-novel-result/VisualNovelResultView.tsx`;全量 `npm run test` 当前被既有 RPG 首页搜索 / 拼图 workspace 旧断言等非本任务用例阻塞。上述阻塞不来自本次 creative-agent Task G 回归补测。
@@ -1095,7 +1095,7 @@ cargo check -p api-server
1. 用户从创作中心进入创意 Agent。 1. 用户从创作中心进入创意 Agent。
2. 用户输入文字和 1 张图片后SSE 显示感知和思考阶段。 2. 用户输入文字和 1 张图片后SSE 显示感知和思考阶段。
3. Agent 显式展示拼图模板确认卡。 3. Agent 显式展示拼图模板确认卡。
4. 确认卡显示预计点范围。 4. 确认卡显示预计点范围。
5. 未确认模板时不会创建拼图草稿。 5. 未确认模板时不会创建拼图草稿。
6. 确认模板后进入草稿生成。 6. 确认模板后进入草稿生成。
7. 生成的草稿字段对齐 `workTitle``workDescription``workTags``levels[].levelName``levels[].pictureDescription``levels[].pictureReference` 7. 生成的草稿字段对齐 `workTitle``workDescription``workTags``levels[].levelName``levels[].pictureDescription``levels[].pictureReference`

View File

@@ -4,7 +4,7 @@
## 0. 目标 ## 0. 目标
把“点 / 游戏时长 / 玩过”这一排信息卡,从静态数字展示升级成稳定的个人数据看板,让玩家在进入“我的”页时一眼知道自己的账号资产和游玩投入。 把“点 / 游戏时长 / 玩过”这一排信息卡,从静态数字展示升级成稳定的个人数据看板,让玩家在进入“我的”页时一眼知道自己的账号资产和游玩投入。
--- ---
@@ -12,7 +12,7 @@
当前三个数字来源并不统一: 当前三个数字来源并不统一:
1. 点来自当前存档上下文,不等于账号总资产 1. 点来自当前存档上下文,不等于账号总资产
2. 游戏时长依赖当前快照,不代表全账号累计 2. 游戏时长依赖当前快照,不代表全账号累计
3. 玩过当前几乎是硬编码推导,不是真实统计 3. 玩过当前几乎是硬编码推导,不是真实统计
@@ -39,11 +39,11 @@
## 3. 指标定义 ## 3. 指标定义
## 3.1 ## 3.1
定义: 定义:
- 当前账号可立即消费的点余额 - 当前账号可立即消费的点余额
不使用: 不使用:
@@ -80,7 +80,7 @@
点击行为: 点击行为:
1. 点卡 1. 点卡
- 打开资产流水抽屉 - 打开资产流水抽屉
2. 游戏时长卡 2. 游戏时长卡
- 打开游玩统计抽屉 - 打开游玩统计抽屉
@@ -125,7 +125,7 @@
返回: 返回:
- 点流水列表 - 点流水列表
### `GET /api/profile/play-stats` ### `GET /api/profile/play-stats`

View File

@@ -73,7 +73,7 @@
首期奖励建议采用可控方案: 首期奖励建议采用可控方案:
1. 邀请人获得 1. 邀请人获得
2. 被邀请人获得新手奖励 2. 被邀请人获得新手奖励
所有奖励必须走台账,不允许前端本地加值。 所有奖励必须走台账,不允许前端本地加值。
@@ -164,4 +164,4 @@
1. 用户能看到自己的邀请码与邀请链接 1. 用户能看到自己的邀请码与邀请链接
2. 可以一键复制或分享 2. 可以一键复制或分享
3. 邀请成功后能看到正确统计 3. 邀请成功后能看到正确统计
4. 奖励到账后点余额同步变化 4. 奖励到账后点余额同步变化

View File

@@ -51,11 +51,11 @@
首期只保留两种状态: 首期只保留两种状态:
1. `普通用户` 1. `普通用户`
2. `百梦会员` 2. `陶泥儿会员`
会员权益首期建议控制在直接可编码的范围: 会员权益首期建议控制在直接可编码的范围:
1. 每日额外点领取额度 1. 每日额外点领取额度
2. 高级世界模板或创作槽位 2. 高级世界模板或创作槽位
3. 更高的云存档上限 3. 更高的云存档上限
4. 会员专属标识 4. 会员专属标识
@@ -119,7 +119,7 @@
支付成功后: 支付成功后:
1. 刷新会员状态 1. 刷新会员状态
2. 刷新点余额 2. 刷新点余额
3. 刷新权益标签 3. 刷新权益标签
--- ---

View File

@@ -8,7 +8,7 @@
1. 头像编辑 1. 头像编辑
2. 昵称编辑 2. 昵称编辑
3. 百梦号展示与复制 3. 陶泥号展示与复制
4. 登录方式与绑定状态展示 4. 登录方式与绑定状态展示
5. 进入资料编辑抽屉 5. 进入资料编辑抽屉
@@ -22,7 +22,7 @@
- 头像占位 - 头像占位
- 昵称 - 昵称
- 百梦 - 陶泥
- 登录方式 - 登录方式
- 绑定状态 - 绑定状态
@@ -31,7 +31,7 @@
1. 头像按钮和昵称编辑按钮都直接打开账号弹窗,信息架构混在一起 1. 头像按钮和昵称编辑按钮都直接打开账号弹窗,信息架构混在一起
2. 头像当前只是视觉壳,没有真正的上传与裁剪能力 2. 头像当前只是视觉壳,没有真正的上传与裁剪能力
3. 昵称缺少明确的编辑规则与唯一性策略 3. 昵称缺少明确的编辑规则与唯一性策略
4. 百梦号只是前端拼接值,不适合长期作为正式公开识别码 4. 陶泥号只是前端拼接值,不适合长期作为正式公开识别码
--- ---
@@ -43,7 +43,7 @@
2. 资料编辑抽屉 2. 资料编辑抽屉
3. 头像上传、裁切、保存 3. 头像上传、裁切、保存
4. 昵称编辑、校验、保存 4. 昵称编辑、校验、保存
5. 百梦号固定生成与复制 5. 陶泥号固定生成与复制
6. 登录方式与账号状态标签展示 6. 登录方式与账号状态标签展示
## 2.2 本期不做 ## 2.2 本期不做
@@ -63,7 +63,7 @@
- 用户头像 - 用户头像
- 用户昵称 - 用户昵称
- `百梦号` - `陶泥号`
- 登录方式标签 - 登录方式标签
- 账号状态标签 - 账号状态标签
- 资料编辑入口 - 资料编辑入口
@@ -85,7 +85,7 @@
- 打开“编辑资料”抽屉,并默认聚焦头像编辑区域 - 打开“编辑资料”抽屉,并默认聚焦头像编辑区域
2. 点击昵称右侧编辑按钮 2. 点击昵称右侧编辑按钮
- 打开“编辑资料”抽屉,并默认聚焦昵称输入框 - 打开“编辑资料”抽屉,并默认聚焦昵称输入框
3. 点击百梦号复制按钮 3. 点击陶泥号复制按钮
- 直接复制,并给出轻提示 - 直接复制,并给出轻提示
4. 点击登录方式/状态标签 4. 点击登录方式/状态标签
- 不跳页,不弹复杂说明 - 不跳页,不弹复杂说明
@@ -103,6 +103,7 @@
3. 上传后进入正方形裁切 3. 上传后进入正方形裁切
4. 服务端生成 `256x256` 主图和 `96x96` 缩略图 4. 服务端生成 `256x256` 主图和 `96x96` 缩略图
5. 超过大小或格式限制时直接拦截 5. 超过大小或格式限制时直接拦截
6. 头像裁切工具必须复用平台通用正方形图片裁剪弹窗,并与拼图图片上传裁剪保持同一套拖拽裁剪框、八向边界手柄、九宫格辅助线、遮罩和移动端触控行为;不得在头像侧保留独立的缩放/横向/纵向滑杆实现
支持格式: 支持格式:
@@ -125,9 +126,9 @@
4. 不要求全站唯一,但要允许后端做敏感词审核 4. 不要求全站唯一,但要允许后端做敏感词审核
5. 审核失败时返回明确错误 5. 审核失败时返回明确错误
## 4.3 百梦 ## 4.3 陶泥
百梦号规则: 陶泥号规则:
1. 作为公开可复制识别码 1. 作为公开可复制识别码
2. 用户创建后固定生成,不允许用户修改 2. 用户创建后固定生成,不允许用户修改
@@ -207,6 +208,6 @@
1. 用户可以上传并保存头像 1. 用户可以上传并保存头像
2. 用户可以修改昵称并实时看到更新 2. 用户可以修改昵称并实时看到更新
3. 百梦号由后端返回,复制后可正常使用 3. 陶泥号由后端返回,复制后可正常使用
4. 未登录或待绑定状态下,不出现无效编辑入口 4. 未登录或待绑定状态下,不出现无效编辑入口
5. 页面不出现冗长规则说明文案 5. 页面不出现冗长规则说明文案

View File

@@ -5,7 +5,7 @@
## 重点入口 ## 重点入口
- [宝贝识物寓教于乐模板 PRD](./BABY_OBJECT_MATCH_EDUTAINMENT_TEMPLATE_PRD_2026-05-11.md):定义寓教于乐内容线的 `宝贝识物` 创作模板覆盖两个物品名称输入、image-2 物品图生成、精确 `寓教于乐` 标签、结果页和发布边界。 - [宝贝识物寓教于乐模板 PRD](./BABY_OBJECT_MATCH_EDUTAINMENT_TEMPLATE_PRD_2026-05-11.md):定义寓教于乐内容线的 `宝贝识物` 创作模板覆盖两个物品名称输入、image-2 物品图生成、精确 `寓教于乐` 标签、结果页和发布边界。
- [AI 原生幕间文字游戏模板 PRD参考 MOKU 的剧本模拟器闭环](./AI_NATIVE_TEXT_GAME_TEMPLATE_MOKU_REFERENCE_PRD_2026-05-05.md):参考 MOKU / 幕间类 AI 文游的剧本游乐场、自由行动、AI GM、记忆和模拟器强反馈经验但只落为百梦 `text-game` 模板,复用平台接口,不迁入外部社区、支付、私有存档或回放。 - [AI 原生幕间文字游戏模板 PRD参考 MOKU 的剧本模拟器闭环](./AI_NATIVE_TEXT_GAME_TEMPLATE_MOKU_REFERENCE_PRD_2026-05-05.md):参考 MOKU / 幕间类 AI 文游的剧本游乐场、自由行动、AI GM、记忆和模拟器强反馈经验但只落为陶泥儿 `text-game` 模板,复用平台接口,不迁入外部社区、支付、私有存档或回放。
- [AI 原生视觉小说模板 PRDTXT 玩法平台化接入](./AI_NATIVE_VISUAL_NOVEL_TEMPLATE_PRD_2026-05-05.md):参考 `Interactive-fiction-backend` / `Interactive-fiction-frontend` 的 TXT 玩法经验,但只保留视觉小说模板创作与运行闭环,完全使用 Genarrative 平台接口,并明确删除回放和外部平台功能。 - [AI 原生视觉小说模板 PRDTXT 玩法平台化接入](./AI_NATIVE_VISUAL_NOVEL_TEMPLATE_PRD_2026-05-05.md):参考 `Interactive-fiction-backend` / `Interactive-fiction-frontend` 的 TXT 玩法经验,但只保留视觉小说模板创作与运行闭环,完全使用 Genarrative 平台接口,并明确删除回放和外部平台功能。
- [AI 原生幸存者类游戏模板 PRD](./AI_NATIVE_SURVIVOR_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-05.md):定义 `survivor` 幸存者挑战模板,从 Agent 创作、结果页、资产、试玩、发布到后端权威配置与前端高频运行表现的完整闭环。 - [AI 原生幸存者类游戏模板 PRD](./AI_NATIVE_SURVIVOR_CREATOR_AND_GAMEPLAY_SYSTEM_PRD_2026-05-05.md):定义 `survivor` 幸存者挑战模板,从 Agent 创作、结果页、资产、试玩、发布到后端权威配置与前端高频运行表现的完整闭环。
- [创意互动内容生成 Agent Phase 1 PRDLangChain-Rust PoC + 拼图闭环](./CREATIVE_INTERACTIVE_AGENT_PHASE1_LANGCHAIN_RUST_PUZZLE_LOOP_PRD_2026-05-05.md)首版只支持拼图模板Agent 使用 APIMart Responses `gpt-5` 支持文本和图像多模态输入,明确模板选择、积分范围、草稿字段填充、单关卡/多关卡图片生成、立即试玩、自然语言修改和可并行任务拆分。 - [创意互动内容生成 Agent Phase 1 PRDLangChain-Rust PoC + 拼图闭环](./CREATIVE_INTERACTIVE_AGENT_PHASE1_LANGCHAIN_RUST_PUZZLE_LOOP_PRD_2026-05-05.md)首版只支持拼图模板Agent 使用 APIMart Responses `gpt-5` 支持文本和图像多模态输入,明确模板选择、积分范围、草稿字段填充、单关卡/多关卡图片生成、立即试玩、自然语言修改和可并行任务拆分。

View File

@@ -37,7 +37,7 @@ TXT 模式核心玩法是一个包含“创作编辑器 -> 测试体验 -> 正
1. 支持创建 TXT 模式作品。 1. 支持创建 TXT 模式作品。
2. 支持 TXT 模式作品的完整创作流程。 2. 支持 TXT 模式作品的完整创作流程。
3. 支持百梦主测试体验。 3. 支持陶泥儿主测试体验。
4. 支持玩家正式游玩。 4. 支持玩家正式游玩。
5. 支持文本模式运行。 5. 支持文本模式运行。
6. 支持双会话机制。 6. 支持双会话机制。
@@ -176,9 +176,9 @@ TXT 模式核心玩法必须完整保留双会话机制。
2. 正式继续体验 2. 正式继续体验
3. 正式游玩推进 3. 正式游玩推进
## 7.2 百梦主测试/读档会话 ## 7.2 陶泥儿主测试/读档会话
百梦主测试/读档会话用于: 陶泥儿主测试/读档会话用于:
1. 编辑器内测试体验 1. 编辑器内测试体验
2. 指定存档加载 2. 指定存档加载

View File

@@ -2,7 +2,7 @@
> **For Hermes:** Use subagent-driven-development skill to implement this plan task-by-task. > **For Hermes:** Use subagent-driven-development skill to implement this plan task-by-task.
**Goal:**百梦后台新增“埋点数据”页,展示每条埋点原始事件的详细字段,并支持导出为 Excel 可直接打开的表格文件。 **Goal:**陶泥儿后台新增“埋点数据”页,展示每条埋点原始事件的详细字段,并支持导出为 Excel 可直接打开的表格文件。
**Architecture:** 后端继续由 `api-server` 作为后台 BFF经 SpacetimeDB HTTP SQL 只读查询 `tracking_event`,不改变表结构和 reducer。前端在 `apps/admin-web` 中新增独立路由与页面,页面渲染后端返回的原始明细,并在浏览器侧导出 Excel 兼容的 `.xls` HTML 表格,避免新增依赖。 **Architecture:** 后端继续由 `api-server` 作为后台 BFF经 SpacetimeDB HTTP SQL 只读查询 `tracking_event`,不改变表结构和 reducer。前端在 `apps/admin-web` 中新增独立路由与页面,页面渲染后端返回的原始明细,并在浏览器侧导出 Excel 兼容的 `.xls` HTML 表格,避免新增依赖。

View File

@@ -45,7 +45,7 @@
修复: 修复:
1.`map_password_entry_error(...)` 中补充 `InvalidPublicUserCode` 1.`map_password_entry_error(...)` 中补充 `InvalidPublicUserCode`
2. 返回中文错误文案 `百梦号格式不正确` 2. 返回中文错误文案 `陶泥号格式不正确`
### 3.3 `module-custom-world` 的 `Display` 分支未覆盖新字段错误 ### 3.3 `module-custom-world` 的 `Display` 分支未覆盖新字段错误

View File

@@ -34,9 +34,10 @@ GENARRATIVE_LLM_BASE_URL=
GENARRATIVE_LLM_API_KEY= GENARRATIVE_LLM_API_KEY=
GENARRATIVE_LLM_MODEL= GENARRATIVE_LLM_MODEL=
# APIMart / OpenAI 兼容 Responses 文本网关 # APIMart / OpenAI 兼容 Responses 文本网关与抓大鹅 nanobanana 物品素材图
APIMART_BASE_URL= APIMART_BASE_URL=
APIMART_API_KEY= APIMART_API_KEY=
APIMART_IMAGE_REQUEST_TIMEOUT_MS=180000
# VectorEngine / GPT-image-2 / Suno / Vidu 生成网关 # VectorEngine / GPT-image-2 / Suno / Vidu 生成网关
VECTOR_ENGINE_BASE_URL=https://api.vectorengine.ai VECTOR_ENGINE_BASE_URL=https://api.vectorengine.ai
@@ -104,10 +105,10 @@ HYPER3D_MODEL_REQUEST_TIMEOUT_MS / RODIN_MODEL_REQUEST_TIMEOUT_MS
6. VectorEngine 图片与音频生成只读取 `VECTOR_ENGINE_BASE_URL` / `VECTOR_ENGINE_API_KEY`,其中 GPT-image-2 图片生成额外读取 `VECTOR_ENGINE_IMAGE_REQUEST_TIMEOUT_MS`;不复用 `APIMART_*``GENARRATIVE_LLM_*` 或前端变量。拼图 Agent 的生成 action 不做前端自动重试,避免一次点击在上游超时后重复触发外部生图与钱包扣退费;若 VectorEngine 请求达到该超时窗口api-server 返回 `504 Gateway Timeout``error.details.provider``vector-engine`,并保留具体超时 message。 6. VectorEngine 图片与音频生成只读取 `VECTOR_ENGINE_BASE_URL` / `VECTOR_ENGINE_API_KEY`,其中 GPT-image-2 图片生成额外读取 `VECTOR_ENGINE_IMAGE_REQUEST_TIMEOUT_MS`;不复用 `APIMART_*``GENARRATIVE_LLM_*` 或前端变量。拼图 Agent 的生成 action 不做前端自动重试,避免一次点击在上游超时后重复触发外部生图与钱包扣退费;若 VectorEngine 请求达到该超时窗口api-server 返回 `504 Gateway Timeout``error.details.provider``vector-engine`,并保留具体超时 message。
7. 火山引擎语音能力由 `platform-speech` 收口协议帧与上游鉴权,`api-server` 只暴露平台鉴权后的代理路由,不向前端返回任何密钥字段。 7. 火山引擎语音能力由 `platform-speech` 收口协议帧与上游鉴权,`api-server` 只暴露平台鉴权后的代理路由,不向前端返回任何密钥字段。
8. Hyper3D Rodin Gen-2 使用公开默认 `https://api.hyper3d.com/api/v2`API Key 只读取 `HYPER3D_API_KEY` / `RODIN_API_KEY`,不复用文本 LLM、图片或音频网关密钥。 8. Hyper3D Rodin Gen-2 使用公开默认 `https://api.hyper3d.com/api/v2`API Key 只读取 `HYPER3D_API_KEY` / `RODIN_API_KEY`,不复用文本 LLM、图片或音频网关密钥。
9. APIMart 当前保留给创意 Agent 的 `gpt-5` Responses 文本/多模态理解链路GPT-image-2 图片生成不得读取 APIMart 配置。 9. APIMart 当前保留给创意 Agent 的 `gpt-5` Responses 文本/多模态理解链路,并用于抓大鹅物品素材 sheet 的 `nanobanana2` / Gemini 图片模型GPT-image-2 图片生成不得读取 APIMart 配置。
10. 本地 `npm run api-server``npm run dev:rust``npm run dev``npm run dev:web` 的环境文件优先级固定为非空外层 shell 变量最高,其后 `.env``.env.local``.env.secrets.local` 逐层覆盖;真实密钥建议放在 `.env.secrets.local`,防止 `.env` 中的空示例值覆盖私密配置。外层 shell 变量如果是空字符串或全空白,不再遮蔽本地 env 文件中的真实值。 10. 本地 `npm run api-server``npm run dev:rust``npm run dev``npm run dev:web` 的环境文件优先级固定为非空外层 shell 变量最高,其后 `.env``.env.local``.env.secrets.local` 逐层覆盖;真实密钥建议放在 `.env.secrets.local`,防止 `.env` 中的空示例值覆盖私密配置。外层 shell 变量如果是空字符串或全空白,不再遮蔽本地 env 文件中的真实值。
11. OSS 客户端只在 `ALIYUN_OSS_BUCKET``ALIYUN_OSS_ENDPOINT``ALIYUN_OSS_ACCESS_KEY_ID``ALIYUN_OSS_ACCESS_KEY_SECRET` 四项齐全时初始化。四项全部缺失表示未启用 OSS部分缺失时 `api-server` 记录 warning 并继续启动,具体上传、换签或读取 generated 私有资产的接口返回 `OSS 未完成环境变量配置`,并在 `error.details.missingEnv` 中列出缺失变量。 11. OSS 客户端只在 `ALIYUN_OSS_BUCKET``ALIYUN_OSS_ENDPOINT``ALIYUN_OSS_ACCESS_KEY_ID``ALIYUN_OSS_ACCESS_KEY_SECRET` 四项齐全时初始化。四项全部缺失表示未启用 OSS部分缺失时 `api-server` 记录 warning 并继续启动,具体上传、换签或读取 generated 私有资产的接口返回 `OSS 未完成环境变量配置`,并在 `error.details.missingEnv` 中列出缺失变量。
12. 抓大鹅 2D 草稿素材生成需要同时具备 VectorEngine 与 OSS 配置VectorEngine 负责 `gpt-image-2-all` 生成 1K 素材OSS 负责保存 5x5 切割后的五视角图片。缺少 VectorEngine 或 OSS 时应通过 `error.details.reason` 向前端暴露具体缺项,不能只显示泛化“服务暂不可用”。素材图生成、封面生成和背景图生成在调用 VectorEngine 前必须先预检 OSS避免已消耗外部生图后才发现无法落库。 12. 抓大鹅 2D 草稿素材生成需要同时具备 APIMart、VectorEngine 与 OSS 配置:APIMart `gemini-3.1-flash-image-preview` 负责生成 5x5 物品素材 sheetVectorEngine `gpt-image-2-all` 负责封面、9:16 背景图和 1:1 容器 UI OSS 负责保存切割后的五视角图片及其它生成图。缺少 APIMart、VectorEngine 或 OSS 时应通过 `error.details.reason` 向前端暴露具体缺项,不能只显示泛化“服务暂不可用”。素材图、封面和背景图生成在调用外部生图前必须先预检 OSS避免已消耗外部生图后才发现无法落库。
13. 拼图有参考图且开启 AI 重绘时使用 VectorEngine `POST /v1/images/edits` multipart 接口。若返回 `error sending request for url`,代表后端未收到 HTTP 响应;响应 `details` 会带 `reason``source``connect``body``timeout``endpoint`排查时优先检查服务器网络、DNS、防火墙、代理和参考图大小。拼图图片客户端强制 HTTP/1.1,以降低上游 multipart HTTP/2 连接中断风险。 13. 拼图有参考图且开启 AI 重绘时使用 VectorEngine `POST /v1/images/edits` multipart 接口。若返回 `error sending request for url`,代表后端未收到 HTTP 响应;响应 `details` 会带 `reason``source``connect``body``timeout``endpoint`排查时优先检查服务器网络、DNS、防火墙、代理和参考图大小。拼图图片客户端强制 HTTP/1.1,以降低上游 multipart HTTP/2 连接中断风险。
14. 本地排查 `OSS 未完成环境变量配置` 时必须核对键名是否精确为 `ALIYUN_OSS_ACCESS_KEY_SECRET`。常见误写是把 `OSS` 的首字母 `O` 写成数字 `0`,例如 `ALIYUN_0SS_ACCESS_KEY_SECRET`;该键不会被 `api-server` 读取。 14. 本地排查 `OSS 未完成环境变量配置` 时必须核对键名是否精确为 `ALIYUN_OSS_ACCESS_KEY_SECRET`。常见误写是把 `OSS` 的首字母 `O` 写成数字 `0`,例如 `ALIYUN_0SS_ACCESS_KEY_SECRET`;该键不会被 `api-server` 读取。

View File

@@ -1,8 +1,8 @@
# 资产操作点消耗接入方案 # 资产操作点消耗接入方案
## 背景 ## 背景
当前点钱包余额、充值流水与邀请奖励已经收口到 `server-rs/crates/spacetime-module/src/runtime/profile.rs`。资产图片生成和作品发布由 Axum API 调用外部模型或写入业务状态SpacetimeDB reducer/procedure 不能直接执行外部网络生成,因此计费需要拆成两层: 当前点钱包余额、充值流水与邀请奖励已经收口到 `server-rs/crates/spacetime-module/src/runtime/profile.rs`。资产图片生成和作品发布由 Axum API 调用外部模型或写入业务状态SpacetimeDB reducer/procedure 不能直接执行外部网络生成,因此计费需要拆成两层:
- SpacetimeDB 负责钱包余额和流水的原子变更。 - SpacetimeDB 负责钱包余额和流水的原子变更。
- Axum 资产操作服务负责在执行业务资产操作前扣费,并在生成、持久化或发布失败时补偿退款。 - Axum 资产操作服务负责在执行业务资产操作前扣费,并在生成、持久化或发布失败时补偿退款。
@@ -26,17 +26,17 @@
暂不接入以下入口: 暂不接入以下入口:
- 旧资产工坊角色主形象/动作生成接口:当前仍使用 `asset-tool` 作为兼容归属,无法确认真实用户。 - 旧资产工坊角色主形象/动作生成接口:当前仍使用 `asset-tool` 作为兼容归属,无法确认真实用户。
- 手动上传封面:不调用外部生成模型,不消耗点。 - 手动上传封面:不调用外部生成模型,不消耗点。
- 自定义世界草稿自动补图链路:属于后台补全流程,避免一次用户操作触发多笔不可预期扣费。 - 自定义世界草稿自动补图链路:属于后台补全流程,避免一次用户操作触发多笔不可预期扣费。
- 文本实体、NPC 生成:本次需求聚焦图片资产和发布资产操作,首期只覆盖可明确归属的入口。 - 文本实体、NPC 生成:本次需求聚焦图片资产和发布资产操作,首期只覆盖可明确归属的入口。
## 计费规则 ## 计费规则
- 每次可计费资产操作消耗 `1`点。 - 每次可计费资产操作消耗 `1`点。
- 例外Match3D / 抓大鹅草稿生成是一次完整草稿外部生成动作,固定消耗 `10`点;流水仍复用 `asset_operation_consume` / `asset_operation_refund``asset_kind = match3d_draft_generation` - 例外Match3D / 抓大鹅草稿生成是一次完整草稿外部生成动作,固定消耗 `10`点;流水仍复用 `asset_operation_consume` / `asset_operation_refund``asset_kind = match3d_draft_generation`
- 例外:拼图 / 抓大鹅背景音乐生成固定消耗 `5`点;物品点击音效仍按单个音效任务消耗 `10`点。 - 例外:拼图 / 抓大鹅背景音乐生成固定消耗 `5`点;物品点击音效仍按单个音效任务消耗 `10`点。
- 例外:拼图 / 抓大鹅 UI 背景重新生成固定消耗 `2`点。 - 例外:拼图 / 抓大鹅 UI 背景重新生成固定消耗 `2`点。
- 例外:抓大鹅结果页批量新增物品素材按实际可新增物品名计费,每 `5` 个消耗 `2`点,不足 `5` 个向上按 `5` 个计。重复名称、作品中已有名称和超过容量上限的名称不进入计费数量。 - 例外:抓大鹅结果页批量新增物品素材按实际可新增物品名计费,每 `5` 个消耗 `2`点,不足 `5` 个向上按 `5` 个计。重复名称、作品中已有名称和超过容量上限的名称不进入计费数量。
- 图片生成和作品发布都按资产操作计费;余额不足时禁止继续执行。 - 图片生成和作品发布都按资产操作计费;余额不足时禁止继续执行。
- 在调用外部图片生成或发布 mutation 前预扣,余额不足时直接返回业务错误,不继续调用后续资产操作。 - 在调用外部图片生成或发布 mutation 前预扣,余额不足时直接返回业务错误,不继续调用后续资产操作。
- 如果图片生成、远程下载、OSS 写入、资产记录确认或发布 mutation 失败,资产操作服务自动发起同额退款。 - 如果图片生成、远程下载、OSS 写入、资产记录确认或发布 mutation 失败,资产操作服务自动发起同额退款。
@@ -44,7 +44,7 @@
## 钱包流水 ## 钱包流水
公开两个流水来源类型,统一覆盖“资产生成”和“资产发布”这两类资产操作。流水金额由具体资产操作成本决定,不再假定所有资产操作都是 `1`点: 公开两个流水来源类型,统一覆盖“资产生成”和“资产发布”这两类资产操作。流水金额由具体资产操作成本决定,不再假定所有资产操作都是 `1`点:
- `asset_operation_consume`:资产操作预扣,`amount_delta = -points_cost` - `asset_operation_consume`:资产操作预扣,`amount_delta = -points_cost`
- `asset_operation_refund`:资产操作失败退款,`amount_delta = +points_cost` - `asset_operation_refund`:资产操作失败退款,`amount_delta = +points_cost`

View File

@@ -34,7 +34,7 @@ Stage 1 已把 Rust 鉴权快照同步到 SpacetimeDB 的 `auth_store_snapshot`
| 字段 | 类型 | 说明 | | 字段 | 类型 | 说明 |
| --- | --- | --- | | --- | --- | --- |
| `user_id` | `String` | 主键。 | | `user_id` | `String` | 主键。 |
| `public_user_code` | `String` | 公开百梦号。 | | `public_user_code` | `String` | 公开陶泥号。 |
| `username` | `String` | 当前账号用户名。 | | `username` | `String` | 当前账号用户名。 |
| `display_name` | `String` | 展示名。 | | `display_name` | `String` | 展示名。 |
| `phone_number_masked` | `Option<String>` | 脱敏手机号。 | | `phone_number_masked` | `Option<String>` | 脱敏手机号。 |

View File

@@ -44,5 +44,6 @@
2. 草稿 / 已发布筛选计数统一从 `CreationWorkShelfItem.status` 读取。 2. 草稿 / 已发布筛选计数统一从 `CreationWorkShelfItem.status` 读取。
3. 卡片渲染不再直接判断 `publicationStatus` 或不同 works schema 的标题字段。 3. 卡片渲染不再直接判断 `publicationStatus` 或不同 works schema 的标题字段。
4. 统一货架按 `updatedAt` 倒序排序,兼容 ISO 字符串和 `seconds.microsZ` 后端时间文本。 4. 统一货架按 `updatedAt` 倒序排序,兼容 ISO 字符串和 `seconds.microsZ` 后端时间文本。
5. 作品卡片以 `coverImageSrc` 作为整卡背景;卡片不展示最后修改时间,`updatedAt` 只参与排序 5. 作品卡片以 `coverImageSrc` 作为整卡背景;`coverImageSrc` 为空,允许从同一作品已有的关卡图、背景图或素材图兜底,避免草稿页退回普通面板视觉
6. 现有创作中心交互测试通过。 6. 卡片不展示最后修改时间,`updatedAt` 只参与排序。
7. 现有创作中心交互测试通过。

View File

@@ -582,7 +582,7 @@ puzzle_creative_level_generation_plan
- Agent 选择理由 - Agent 选择理由
- 支持单关卡、多关卡或二者皆可 - 支持单关卡、多关卡或二者皆可
- 计划关卡数 - 计划关卡数
- 预计积分范围,例如 `预计消耗 8 到 18 点` - 预计积分范围,例如 `预计消耗 8 到 18 点`
积分范围来自拼图模板协议: 积分范围来自拼图模板协议:

View File

@@ -1,4 +1,4 @@
# 自定义世界草稿场景幕事件与任务字段落地设计2026-04-25 # 自定义世界草稿场景幕事件与任务字段落地设计2026-04-25
## 背景 ## 背景
@@ -37,7 +37,7 @@
- 当前场景的核心任务描述。 - 当前场景的核心任务描述。
- 文本会作为游戏中首次进入某个场景生成章节任务的关键上下文。 - 文本会作为游戏中首次进入某个场景生成章节任务的关键上下文。
- 必须结合场景描述、场景入口钩子、出场角色与 3 幕事件,说明玩家首次进入该场景时要完成什么。 - 必须结合场景描述、场景入口钩子、出场角色与 3 幕事件,说明玩家首次进入该场景时要完成什么。
- 世界档案的场景详情页必须直接展示该字段,便于百梦主确认每个场景的默认章节任务。 - 世界档案的场景详情页必须直接展示该字段,便于陶泥儿主确认每个场景的默认章节任务。
### Landmark 生成源字段 ### Landmark 生成源字段

View File

@@ -408,7 +408,7 @@ Node 侧入口位于:
## 10.2 2026-05-01 新用户注册赠送修正 ## 10.2 2026-05-01 新用户注册赠送修正
新注册用户默认获得 `10`点,注册链路通过 SpacetimeDB procedure 写入 `profile_dashboard_state.wallet_balance``profile_wallet_ledger`。流水来源为 `new_user_registration_reward`,流水 ID 固定为 `new-user-registration:{user_id}`,重复调用不重复发放。 新注册用户默认获得 `10`点,注册链路通过 SpacetimeDB procedure 写入 `profile_dashboard_state.wallet_balance``profile_wallet_ledger`。流水来源为 `new_user_registration_reward`,流水 ID 固定为 `new-user-registration:{user_id}`,重复调用不重复发放。
注册赠送、邀请码奖励、充值、兑换码、资产扣费等都属于真实平台钱包流水。用户只要已经存在非 `snapshot_sync` 钱包流水,后续 `runtime_snapshot.game_state.playerCurrency` 不再覆盖 `wallet_balance`,只继续刷新游玩时长和玩过世界,避免首次保存旧运行态货币字段时把注册赠送覆盖成 `0` 注册赠送、邀请码奖励、充值、兑换码、资产扣费等都属于真实平台钱包流水。用户只要已经存在非 `snapshot_sync` 钱包流水,后续 `runtime_snapshot.game_state.playerCurrency` 不再覆盖 `wallet_balance`,只继续刷新游玩时长和玩过世界,避免首次保存旧运行态货币字段时把注册赠送覆盖成 `0`

View File

@@ -34,17 +34,17 @@
`match3d_compile_draft` action 的后端顺序为: `match3d_compile_draft` action 的后端顺序为:
1. 读取 session config。 1. 读取 session config。
2. 对本次 `match3d_compile_draft` 生成动作按 `sessionId + profileId + action 时间戳` 构造幂等流水并预扣 `10` 点。余额不足时不继续创建草稿;后续任一步失败时自动按同额退款。 2. 对本次 `match3d_compile_draft` 生成动作按 `sessionId + profileId + action 时间戳` 构造幂等流水并预扣 `10` 点。余额不足时不继续创建草稿;后续任一步失败时自动按同额退款。
3. 草稿编译先创建可恢复 profile素材生成数量由入口页难度派生的物品种类决定轻松 `3` 种、标准 `9` 种、进阶 `15` 种、硬核 `21` 种。 3. 草稿编译先创建可恢复 profile素材生成数量由入口页难度派生的物品种类决定轻松 `3` 种、标准 `9` 种、进阶 `15` 种、硬核 `21` 种。
4. 先调用 SpacetimeDB compile procedure 写入草稿。首次执行使用新 `profileId`;重试时复用 session draft / work profile 中已有 `profileId`。这一步不能等待 LLM、图片、音频或 OSS 成功后才执行。 4. 先调用 SpacetimeDB compile procedure 写入草稿。首次执行使用新 `profileId`;重试时复用 session draft / work profile 中已有 `profileId`。这一步不能等待 LLM、图片、音频或 OSS 成功后才执行。
5. 基于入口页题材设定文本调用文本模型生成作品生成计划。模型固定请求 `gpt-4o`,只返回 JSON其中 `gameName` 为 4 到 12 个中文字符的游戏名称,`summary` 为 18 到 48 个中文字符的作品描述。生成计划还必须包含 `tags``backgroundMusic.title``backgroundMusic.style``backgroundMusic.prompt``backgroundPrompt`,以及 `items[]` 中每个物品的 `name``soundPrompt``backgroundMusic.title` 是背景音乐名称,`backgroundMusic.prompt` 固定为空字符串,用于后续 Suno 纯音乐生成;`backgroundPrompt` 用于生成局内竖屏纯背景图只描述题材氛围、色彩和环境不得描述锅、圆盘、托盘、拼图槽、物品槽、HUD、UI、文字、按钮、倒计时、分数或物品。文本模型不可用时保留第 4 步的本地兜底,不阻断草稿。 5. 基于入口页题材设定文本调用文本模型生成作品生成计划。模型固定请求 `gpt-4o`,只返回 JSON其中 `gameName` 为 4 到 12 个中文字符的游戏名称,`summary` 为 18 到 48 个中文字符的作品描述。生成计划还必须包含 `tags``backgroundMusic.title``backgroundMusic.style``backgroundMusic.prompt``backgroundPrompt`,以及 `items[]` 中每个物品的 `name``soundPrompt``backgroundMusic.title` 是背景音乐名称,`backgroundMusic.prompt` 固定为空字符串,用于后续 Suno 纯音乐生成;`backgroundPrompt` 用于生成局内竖屏纯背景图只描述题材氛围、色彩和环境不得描述锅、圆盘、托盘、拼图槽、物品槽、HUD、UI、文字、按钮、倒计时、分数或物品。文本模型不可用时保留第 4 步的本地兜底,不阻断草稿。
6. 后端把生成计划中的 `gameName``summary` 写入 `match3d_work_profile` 作品信息后,自动调用作品标签生成器。标签生成器使用题材、作品名称和作品描述生成 3 到 6 个中文短标签;若调用失败或返回不足,则使用生成计划 tags 和本地兜底标签补齐。结果页手动 `AI生成作品标签` 也使用同一接口,并传入当前作品描述。 6. 后端把生成计划中的 `gameName``summary` 写入 `match3d_work_profile` 作品信息后,自动调用作品标签生成器。标签生成器使用题材、作品名称和作品描述生成 3 到 6 个中文短标签;若调用失败或返回不足,则使用生成计划 tags 和本地兜底标签补齐。结果页手动 `AI生成作品标签` 也使用同一接口,并传入当前作品描述。
7. 后端从同一份作品生成计划读取当前难度所需数量的短物品名称和音效提示词;不得再只生成物品名称而丢失后续音效生成上下文。 7. 后端从同一份作品生成计划读取当前难度所需数量的短物品名称和音效提示词;不得再只生成物品名称而丢失后续音效生成上下文。
8. 调用项目当前图片链路 VectorEngine `gpt-image-2-all` 生成 `1:1``1024x1024` 素材图,提示词必须合入入口页选择的 `assetStylePrompt`,并强制每格使用统一纯绿色绿幕背景,避免白底或纹理背景进入运行态素材。历史 `nanobanana2` 图片选项当前按项目统一决策回落到 VectorEngine不重新接入 APIMart 图片网关 8. 调用 APIMart `nanobanana2` / Gemini 图片模型生成 `1:1``1K` 素材图,请求模型固定为 `gemini-3.1-flash-image-preview`,走 `POST {APIMART_BASE_URL}/images/generations`,并携带 `official_fallback = true`。提示词必须合入入口页选择的 `assetStylePrompt`,并强制每格使用统一纯绿色绿幕背景,避免白底或纹理背景进入运行态素材。该调整只作用于抓大鹅物品素材 sheet封面、9:16 纯背景图和 1:1 容器 UI 图仍继续使用项目现有 VectorEngine `gpt-image-2-all` 链路
9. 每个物品固定需要 `5` 个不同视角。单张素材图固定为 `5*5 = 25` 格,因此单张图承载 `5` 个物品。若用户要求或难度派生的物品种类不是 `5` 的倍数,后端必须向上补齐物品名称和对应图片到最近的 `5` 的倍数;例如标准难度需要 `9` 种玩法物品,实际生成 `10` 个物品名称和对应五视角图片。若草稿物品数超过 `5`,后端按每批 `5` 个物品自动分批,多张素材图并行生成。 9. 每个物品固定需要 `5` 个不同视角。单张素材图固定为 `5*5 = 25` 格,因此单张图承载 `5` 个物品。若用户要求或难度派生的物品种类不是 `5` 的倍数,后端必须向上补齐物品名称和对应图片到最近的 `5` 的倍数;例如标准难度需要 `9` 种玩法物品,实际生成 `10` 个物品名称和对应五视角图片。若草稿物品数超过 `5`,后端按每批 `5` 个物品自动分批,多张素材图并行生成。
10. 将每张素材图按固定 `5 行 * 5 列` 切割成独立图片,并按物品顺序连续分配 `5` 张视角图。素材图提示词必须要求 `5*5` 严格均匀排布、每格主体完整居中、统一纯绿色绿幕背景、相邻物体主体至少保留 `1/4` 单格宽度空白间距、不得跨格、贴边或越界,避免裁剪后相邻格内容污染。切割前必须先在整张素材图上把绿幕背景处理为透明 alpha再在每个理论格子内按透明背景/前景像素做内容边界校准,并带少量安全留白导出;不能做固定内缩裁剪,避免贴近格线但未跨格的樱桃、叶片、把手等主体边缘被切掉。每个物品 JSON 写入 `imageViews[]`,同时把第一个视角兼容写入 `imageSrc/imageObjectKey` 10. 将每张素材图按固定 `5 行 * 5 列` 切割成独立图片,并按物品顺序连续分配 `5` 张视角图。素材图提示词必须要求 `5*5` 严格均匀排布、每格主体完整居中、统一纯绿色绿幕背景、相邻物体主体至少保留 `1/4` 单格宽度空白间距、不得跨格、贴边或越界,避免裁剪后相邻格内容污染。切割前必须先在整张素材图上把绿幕背景处理为透明 alpha再在每个理论格子内按透明背景/前景像素做内容边界校准,并带少量安全留白导出;不能做固定内缩裁剪,避免贴近格线但未跨格的樱桃、叶片、把手等主体边缘被切掉。每个物品 JSON 写入 `imageViews[]`,同时把第一个视角兼容写入 `imageSrc/imageObjectKey`
11. 将素材图和每张独立视角图片上传到 OSS。每次获得可恢复的图片资产后都要回写 `match3d_work_profile.generated_item_assets_json`。成功素材状态为 `image_ready`;失败素材保留已成功图片引用并记录 `error`。每个素材 JSON 同步保存 `soundPrompt`,首个素材 JSON 同步保存 `backgroundMusicTitle``backgroundMusicStyle``backgroundMusicPrompt` 保存为空字符串作为兼容字段。 11. 将素材图和每张独立视角图片上传到 OSS。每次获得可恢复的图片资产后都要回写 `match3d_work_profile.generated_item_assets_json`。成功素材状态为 `image_ready`;失败素材保留已成功图片引用并记录 `error`。每个素材 JSON 同步保存 `soundPrompt`,首个素材 JSON 同步保存 `backgroundMusicTitle``backgroundMusicStyle``backgroundMusicPrompt` 保存为空字符串作为兼容字段。
12. 后端在图片素材生成后使用 `backgroundMusic.title` 提交 Suno 背景音乐任务,`prompt` 为空,`tags` 来自 `backgroundMusic.style`,并固定走纯音乐生成。轮询完成后通过通用创作音频资产链路转存 OSS、确认 `asset_object`、绑定到 `match3d_work/background_music`,再写回首个素材的 `backgroundMusic`音乐生成失败只记录 warning不阻断草稿页进入用户可在结果页 `素材配置 > 背景音乐` 重试 12. 后端在图片素材生成后使用 `backgroundMusic.title` 提交 Suno 背景音乐任务,`prompt` 为空,`tags` 来自 `backgroundMusic.style`,并固定走纯音乐生成。轮询完成后通过通用创作音频资产链路转存 OSS、确认 `asset_object`、绑定到 `match3d_work/background_music`,再写回首个素材的 `backgroundMusic`自动草稿阶段必须拿到非空 `backgroundMusic.audioSrc` 才能返回成功曲名为空、Suno 提交/轮询失败、音频下载失败、OSS 转存失败或资产绑定失败时,本次 `match3d_compile_draft` 返回失败并停留在生成页,不能进入结果页后显示“暂无音乐”
13. 草稿生成阶段不生成点击音效,只保存 `generatedItemAssets[].soundPrompt`;点击音效由结果页 `素材配置 > 物品` 详情面板手动生成并写回对应素材。 13. 草稿生成阶段不生成点击音效,只保存 `generatedItemAssets[].soundPrompt`;点击音效由结果页 `素材配置 > 物品` 详情面板手动生成并写回对应素材。
14. UI 背景生成由 `api-server` 调用 VectorEngine `gpt-image-2-all` 分成两张资产:第一张是 `9:16` 纯背景图不传锅参考图且必须禁止锅、圆盘、托盘、拼图槽、物品槽、HUD、文字、按钮、倒计时、分数和物品第二张是 `1:1` 题材容器 UI 图,固定传入 `public/match3d-background-references/pot-fused-reference.png` 作为参考图,只生成一个贴合题材设定的圆形或浅盘状竞技容器,不生成整页背景、文字、按钮或物品。容器图必须沿用参考图的大尺寸轻俯视构图:外轮廓接近画布四边,宽度约占 `86%-92%`、高度约占 `82%-90%`,内口为横向椭圆,禁止生成小容器、正俯视圆盘、侧视碗、餐盘或小托盘。纯背景上传到 `generated-match3d-assets/{sessionId}/{profileId}/background/{taskId}/background.png`,容器 UI 图上传到 `generated-match3d-assets/{sessionId}/{profileId}/ui-container/{taskId}/container.png`,两者都作为 `backgroundAsset` 挂在首个 `generatedItemAssets[]` JSON 上HTTP DTO 同时顶层输出兼容的 `backgroundPrompt``backgroundImageSrc``backgroundImageObjectKey``generatedBackgroundAsset`,容器图通过 `generatedBackgroundAsset.containerImageSrc/containerImageObjectKey` 返回。若作品尚无用户自定义封面,草稿生成完成后默认把容器 UI 图写入 `coverImageSrc`,作为草稿架和作品信息的默认封面。 14. UI 背景生成由 `api-server` 调用 VectorEngine `gpt-image-2-all` 分成两张资产:第一张是 `9:16` 纯背景图不传锅参考图且必须禁止锅、圆盘、托盘、拼图槽、物品槽、HUD、文字、按钮、倒计时、分数和物品第二张是 `1:1` 题材容器 UI 图,固定传入 `public/match3d-background-references/pot-fused-reference.png` 作为参考图,只生成一个贴合题材设定的圆形或浅盘状竞技容器,不生成整页背景、文字、按钮或物品。容器图必须沿用参考图的大尺寸轻俯视构图:外轮廓接近画布四边,宽度约占 `86%-92%`、高度约占 `82%-90%`,内口为横向椭圆,禁止生成小容器、正俯视圆盘、侧视碗、餐盘或小托盘。纯背景上传到 `generated-match3d-assets/{sessionId}/{profileId}/background/{taskId}/background.png`,容器 UI 图上传到 `generated-match3d-assets/{sessionId}/{profileId}/ui-container/{taskId}/container.png`,两者都作为 `backgroundAsset` 挂在首个 `generatedItemAssets[]` JSON 上HTTP DTO 同时顶层输出兼容的 `backgroundPrompt``backgroundImageSrc``backgroundImageObjectKey``generatedBackgroundAsset`,容器图通过 `generatedBackgroundAsset.containerImageSrc/containerImageObjectKey` 返回。若作品尚无用户自定义封面,草稿生成完成后默认把容器 UI 图写入 `coverImageSrc`,作为草稿架和作品信息的默认封面。
15. 在 HTTP 返回的 draft/profile DTO 中附带本次生成的素材资产预览信息、背景音乐资产信息、背景资产信息和默认封面;后续重进草稿页时从 work profile 的持久化 `generatedItemAssets``coverImageSrc` 恢复同一批素材、音乐、UI 与封面。 15. 在 HTTP 返回的 draft/profile DTO 中附带本次生成的素材资产预览信息、背景音乐资产信息、背景资产信息和默认封面;后续重进草稿页时从 work profile 的持久化 `generatedItemAssets``coverImageSrc` 恢复同一批素材、音乐、UI 与封面。
@@ -204,7 +204,7 @@ Match3DWorkProfile / PlatformMatch3DGalleryCard
详情页不再展示参考图、用途、模型提示词、文生/图生切换、状态查询、下载列表、taskUuid 或 subscriptionKey。 详情页不再展示参考图、用途、模型提示词、文生/图生切换、状态查询、下载列表、taskUuid 或 subscriptionKey。
`物品素材` 列表项点击必须弹出独立预览面板,不允许在列表右侧或列表下方内联展示。列表本身使用移动端至少两列的多列卡片布局;每个列表项只展示图片预览、物品名称和垃圾箱删除图标,不展示用途、状态胶囊、视角数量或 `2D素材` 标记。预览面板只承担查看五视角图片、编辑素材名称、编辑点击音效提示词和生成点击音效;不再展示 `重新生成` 按钮。列表项自身支持单项删除,删除后立即把剩余 `generatedItemAssets` 写回作品 profile。批量新增通过列表顶部按钮打开独立面板面板内每个输入框只输入一个物品名称`新增物品名称` 按钮追加一个输入框;提交后按输入框顺序清洗、去重并调用 Match3D 作品批量生图接口。生成进度同时显示在批量新增面板和 `素材配置 > 物品` 列表顶部面板可关闭后台生成继续推进不阻塞封面、音频等其他生成操作。后端复用草稿生成的素材图、切图、OSS 上传和可选点击音效流程,但仅按实际可新增名称持久化,不重新生成已有物品,不新增 SpacetimeDB 表,最终仍写回同一份 `generated_item_assets_json`。批量新增先补齐到 `5` 个参与整图生成,随后丢弃补齐用临时物品,只对真实新增物品抠背景、切割和上传。批量新增计费按实际可新增名称每 `5` 个消耗 `2` 点,不足 `5` 个向上取整;重复名称、已有名称和超过容量上限的名称不计费。 `物品素材` 列表项点击必须弹出独立预览面板,不允许在列表右侧或列表下方内联展示。列表本身使用移动端至少两列的多列卡片布局;每个列表项只展示图片预览、物品名称和垃圾箱删除图标,不展示用途、状态胶囊、视角数量或 `2D素材` 标记。预览面板只承担查看五视角图片、编辑素材名称、编辑点击音效提示词和生成点击音效;不再展示 `重新生成` 按钮。列表项自身支持单项删除,删除后立即把剩余 `generatedItemAssets` 写回作品 profile。批量新增通过列表顶部按钮打开独立面板面板内每个输入框只输入一个物品名称`新增物品名称` 按钮追加一个输入框;提交后按输入框顺序清洗、去重并调用 Match3D 作品批量生图接口。生成进度同时显示在批量新增面板和 `素材配置 > 物品` 列表顶部面板可关闭后台生成继续推进不阻塞封面、音频等其他生成操作。后端复用草稿生成的素材图、切图、OSS 上传和可选点击音效流程,但仅按实际可新增名称持久化,不重新生成已有物品,不新增 SpacetimeDB 表,最终仍写回同一份 `generated_item_assets_json`。批量新增先补齐到 `5` 个参与整图生成,随后丢弃补齐用临时物品,只对真实新增物品抠背景、切割和上传。批量新增计费按实际可新增名称每 `5` 个消耗 `2` 点,不足 `5` 个向上取整;重复名称、已有名称和超过容量上限的名称不计费。
## 6.1 音频生成与扣费 ## 6.1 音频生成与扣费
@@ -214,9 +214,9 @@ Match3DWorkProfile / PlatformMatch3DGalleryCard
2. 物品点击音效默认读取对应 `generatedItemAssets[].soundPrompt`,用户可在 `素材配置 > 物品` 详情面板内编辑。 2. 物品点击音效默认读取对应 `generatedItemAssets[].soundPrompt`,用户可在 `素材配置 > 物品` 详情面板内编辑。
3. 背景音乐与物品音效生成过程必须显示进度条;提交任务、等待生成、转存资产和完成分别推进到不同进度,不再只展示旋转图标。 3. 背景音乐与物品音效生成过程必须显示进度条;提交任务、等待生成、转存资产和完成分别推进到不同进度,不再只展示旋转图标。
4. 音频生成完成后立即展示浏览器原生 audio 控件,支持试听。 4. 音频生成完成后立即展示浏览器原生 audio 控件,支持试听。
5. `POST /api/creation/audio/background-music/{task_id}/asset``POST /api/creation/audio/sound-effect/{task_id}/asset` 在真正拿到音频并转存资产前,由后端按 `taskId + 资产槽位` 幂等预扣;背景音乐扣 `5` 点,物品点击音效扣 `10` 点。任务仍在处理中时不扣费。资产下载、OSS 转存或资产绑定失败时后端自动退款。前端只展示生成按钮和进度,不自行计算或写入钱包。 5. `POST /api/creation/audio/background-music/{task_id}/asset``POST /api/creation/audio/sound-effect/{task_id}/asset` 在真正拿到音频并转存资产前,由后端按 `taskId + 资产槽位` 幂等预扣;背景音乐扣 `5` 点,物品点击音效扣 `10` 点。任务仍在处理中时不扣费。资产下载、OSS 转存或资产绑定失败时后端自动退款。前端只展示生成按钮和进度,不自行计算或写入钱包。
创作入口不展示 `生成音效` Toggle。草稿生成阶段不产生物品点击音效任务也不产生点击音效相关扣费入口只产生一次固定 `10` 点的草稿生成扣费。结果页 `素材配置 > UI` 重新生成背景固定扣 `2` 点。物品点击音效由结果页 `素材配置 > 物品` 详情面板手动触发,每个音效按单独任务和单独 `match3d_click_sound` 资产槽位扣费。音效生成失败不影响草稿,失败素材保留 `soundPrompt`,用户可在结果页物品详情面板手动重试。 创作入口不展示 `生成音效` Toggle。草稿生成阶段不产生物品点击音效任务也不产生点击音效相关扣费入口只产生一次固定 `10` 点的草稿生成扣费。结果页 `素材配置 > UI` 重新生成背景固定扣 `2` 点。物品点击音效由结果页 `素材配置 > 物品` 详情面板手动触发,每个音效按单独任务和单独 `match3d_click_sound` 资产槽位扣费。音效生成失败不影响草稿,失败素材保留 `soundPrompt`,用户可在结果页物品详情面板手动重试。
## 7. 验收 ## 7. 验收
@@ -238,4 +238,4 @@ cargo check -p spacetime-client --manifest-path server-rs\Cargo.toml
cargo check -p spacetime-module --manifest-path server-rs\Cargo.toml cargo check -p spacetime-module --manifest-path server-rs\Cargo.toml
``` ```
真实草稿生成需要本地私密环境配置 `VECTOR_ENGINE_BASE_URL` / `VECTOR_ENGINE_API_KEY`,以及完整 `ALIYUN_OSS_BUCKET``ALIYUN_OSS_ENDPOINT``ALIYUN_OSS_ACCESS_KEY_ID``ALIYUN_OSS_ACCESS_KEY_SECRET`。如果只配置 bucket 和 endpoint抓大鹅素材、封面或背景生成会在调用 VectorEngine 前返回 `OSS 未完成环境变量配置``details.missingEnv` 会列出缺少的 AccessKey 项;不要回退到 Rodin/GLB 或伪造本地上传成功。开启音频生成还需要对应音频上游配置。后端改动后使用 `npm run api-server` 启动,并检查 `/healthz` 真实草稿生成需要本地私密环境配置 `APIMART_BASE_URL` / `APIMART_API_KEY` / `APIMART_IMAGE_REQUEST_TIMEOUT_MS` 用于物品素材 sheet配置 `VECTOR_ENGINE_BASE_URL` / `VECTOR_ENGINE_API_KEY` 用于封面、背景和容器 UI并补齐完整 `ALIYUN_OSS_BUCKET``ALIYUN_OSS_ENDPOINT``ALIYUN_OSS_ACCESS_KEY_ID``ALIYUN_OSS_ACCESS_KEY_SECRET`。如果只配置 bucket 和 endpoint抓大鹅素材、封面或背景生成会在调用外部生图前返回 `OSS 未完成环境变量配置``details.missingEnv` 会列出缺少的 AccessKey 项;不要回退到 Rodin/GLB 或伪造本地上传成功。开启音频生成还需要对应音频上游配置。后端改动后使用 `npm run api-server` 启动,并检查 `/healthz`

View File

@@ -8,7 +8,7 @@
> >
> 2026-05-13 补充:草稿素材实际生成数量按 `5` 的倍数向上补齐,补齐物品同样需要生成名称和五视角图片。素材图提示词固定要求 `5*5` 严格均匀排布,禁止主体跨格、贴边或越界影响裁剪效果。 > 2026-05-13 补充:草稿素材实际生成数量按 `5` 的倍数向上补齐,补齐物品同样需要生成名称和五视角图片。素材图提示词固定要求 `5*5` 严格均匀排布,禁止主体跨格、贴边或越界影响裁剪效果。
> >
> 2026-05-13 补充:创作页隐藏抓大鹅 `生成音效` Toggle草稿生成固定预扣 `10` 点,按钮展示 `消耗10点`。点击音效生成只保留在结果页 `素材配置 > 物品` 详情面板中手动触发。 > 2026-05-13 补充:创作页隐藏抓大鹅 `生成音效` Toggle草稿生成固定预扣 `10` 点,按钮展示 `消耗10点`。点击音效生成只保留在结果页 `素材配置 > 物品` 详情面板中手动触发。
## 1. 阶段边界 ## 1. 阶段边界
@@ -69,7 +69,7 @@ badge: 可创建
自定义风格必须在弹出面板中填写描述后才能应用。入口表单必须在移动端创作页可视区内完成题材、风格、难度和生成按钮的展示,页面自身不产生纵向滚动;风格卡只允许横向滑动。 自定义风格必须在弹出面板中填写描述后才能应用。入口表单必须在移动端创作页可视区内完成题材、风格、难度和生成按钮的展示,页面自身不产生纵向滚动;风格卡只允许横向滑动。
生成按钮文案为 `生成抓大鹅草稿`,按钮内必须同时展示 `消耗10点`。UI 中不默认展示玩法规则长文,也不展示隐藏派生数值的摘要框。 生成按钮文案为 `生成抓大鹅草稿`,按钮内必须同时展示 `消耗10点`。UI 中不默认展示玩法规则长文,也不展示隐藏派生数值的摘要框。
## 5. mock client ## 5. mock client
@@ -115,7 +115,7 @@ POST /api/creation/match3d/sessions/:sessionId/compile
2. 切换到 `抓大鹅` Tab 后,页面内直接显示抓大鹅入口表单,不提前创建会话。 2. 切换到 `抓大鹅` Tab 后,页面内直接显示抓大鹅入口表单,不提前创建会话。
3. 表单不展示参考图、`需要消除次数``难度数值``题材``物品``难度`摘要框。 3. 表单不展示参考图、`需要消除次数``难度数值``题材``物品``难度`摘要框。
4. 输入题材、选择风格和难度后,提交 payload 包含派生后的 `clearCount``difficulty``referenceImageSrc``null`,并包含 `assetStyleId``assetStyleLabel``assetStylePrompt` 4. 输入题材、选择风格和难度后,提交 payload 包含派生后的 `clearCount``difficulty``referenceImageSrc``null`,并包含 `assetStyleId``assetStyleLabel``assetStylePrompt`
5. 生成按钮展示 `消耗10点`,创作页不展示 `生成音效` Toggle。 5. 生成按钮展示 `消耗10点`,创作页不展示 `生成音效` Toggle。
6. 点击 `自定义` 风格弹出独立面板,填写后应用到提交 payload未填写时不能应用空自定义风格。 6. 点击 `自定义` 风格弹出独立面板,填写后应用到提交 payload未填写时不能应用空自定义风格。
7. 移动端创作页内抓大鹅入口内容不产生纵向滚动,风格卡横向滑动。 7. 移动端创作页内抓大鹅入口内容不产生纵向滚动,风格卡横向滑动。
8. 点击生成后创建会话并进入草稿生成/结果页链路。 8. 点击生成后创建会话并进入草稿生成/结果页链路。

View File

@@ -6,33 +6,33 @@
本轮在“我的”页面的“会员充值”入口落地账户充值弹窗,包含两个页签: 本轮在“我的”页面的“会员充值”入口落地账户充值弹窗,包含两个页签:
1. `点充值` 1. `点充值`
2. `会员卡充值` 2. `会员卡充值`
前端只负责展示与发起购买,套餐、价格、赠送规则、会员权益、生效时间、钱包余额与交易流水统一由 `server-rs` 后端返回。普通 H5 / 本地联调继续使用 `mock` 渠道:创建订单后立即写入余额或会员状态,并返回最新账户中心快照。微信小程序 web-view 使用 `wechat_mp` 渠道:创建订单时只写入 `pending` 订单并返回小程序 `wx.requestPayment` 参数,真实到账以后端微信支付通知为准。 前端只负责展示与发起购买,套餐、价格、赠送规则、会员权益、生效时间、钱包余额与交易流水统一由 `server-rs` 后端返回。普通 H5 / 本地联调继续使用 `mock` 渠道:创建订单后立即写入余额或会员状态,并返回最新账户中心快照。微信小程序 web-view 使用 `wechat_mp` 渠道:创建订单时只写入 `pending` 订单并返回小程序 `wx.requestPayment` 参数,真实到账以后端微信支付通知为准。
## 2. 产品规则 ## 2. 产品规则
### 2.1 点充值套餐 ### 2.1 点充值套餐
| productId | 点 | 金额分 | 徽标 | 说明 | | productId | 点 | 金额分 | 徽标 | 说明 |
| ------------- | ---: | -----: | -------- | -------------- | | ------------- | ---: | -----: | -------- | -------------- |
| `points_60` | 60 | 600 | 首充双倍 | 首充送60点 | | `points_60` | 60 | 600 | 首充双倍 | 首充送60点 |
| `points_180` | 180 | 1800 | 首充双倍 | 首充送180点 | | `points_180` | 180 | 1800 | 首充双倍 | 首充送180点 |
| `points_300` | 300 | 3000 | 首充双倍 | 首充送300点 | | `points_300` | 300 | 3000 | 首充双倍 | 首充送300点 |
| `points_680` | 680 | 6800 | 首充双倍 | 首充送680点 | | `points_680` | 680 | 6800 | 首充双倍 | 首充送680点 |
| `points_1280` | 1280 | 12800 | 首充双倍 | 首充送1280点 | | `points_1280` | 1280 | 12800 | 首充双倍 | 首充送1280点 |
| `points_3280` | 3280 | 32800 | 首充双倍 | 首充送3280点 | | `points_3280` | 3280 | 32800 | 首充双倍 | 首充送3280点 |
点充值固定为 `¥6 / ¥18 / ¥30 / ¥68 / ¥128 / ¥328` 六个档位。全部档位参与首充双倍:用户历史上没有 `points_recharge` 流水时,本次购买到账点为基础点与等额赠送点之和;已有充值流水后只到账基础点。实际到账点写入交易流水,余额以 SpacetimeDB projection 为准。 点充值固定为 `¥6 / ¥18 / ¥30 / ¥68 / ¥128 / ¥328` 六个档位。全部档位参与首充双倍:用户历史上没有 `points_recharge` 流水时,本次购买到账点为基础点与等额赠送点之和;已有充值流水后只到账基础点。实际到账点写入交易流水,余额以 SpacetimeDB projection 为准。
### 2.2 会员卡套餐 ### 2.2 会员卡套餐
| productId | 类型 | 天数 | 金额分 | 权益 | | productId | 类型 | 天数 | 金额分 | 权益 |
| --------------- | ---- | ---: | -----: | --------------------------------- | | --------------- | ---- | ---: | -----: | --------------------------------- |
| `member_month` | 月卡 | 30 | 2800 | 免点回合数100每日签到加成0% | | `member_month` | 月卡 | 30 | 2800 | 免点回合数100每日签到加成0% |
| `member_season` | 季卡 | 90 | 7800 | 免点回合数100每日签到加成100% | | `member_season` | 季卡 | 90 | 7800 | 免点回合数100每日签到加成100% |
| `member_year` | 年卡 | 365 | 24800 | 免点回合数100每日签到加成210% | | `member_year` | 年卡 | 365 | 24800 | 免点回合数100每日签到加成210% |
购买会员时,如果当前会员仍有效,则从当前到期时间顺延;如果已过期或从未购买,则从当前服务端时间开始计算。状态只区分 `普通` 与已生效会员,前端不自行推断。 购买会员时,如果当前会员仍有效,则从当前到期时间顺延;如果已过期或从未购买,则从当前服务端时间开始计算。状态只区分 `普通` 与已生效会员,前端不自行推断。
@@ -42,8 +42,8 @@
需要 Bearer JWT。返回 需要 Bearer JWT。返回
1. 当前点余额、会员状态、到期时间 1. 当前点余额、会员状态、到期时间
2. 点套餐与会员套餐 2. 点套餐与会员套餐
3. 会员权益表 3. 会员权益表
4. 最近订单摘要 4. 最近订单摘要
@@ -65,8 +65,8 @@
1. 校验 `productId` 1. 校验 `productId`
2. `paymentChannel = "mock"` 时后端创建已支付订单 2. `paymentChannel = "mock"` 时后端创建已支付订单
3. `paymentChannel = "wechat_mp"` 时后端创建待支付订单,并调用微信支付 JSAPI 下单生成小程序支付参数 3. `paymentChannel = "wechat_mp"` 时后端创建待支付订单,并调用微信支付 JSAPI 下单生成小程序支付参数
4. mock 点套餐立即写入钱包余额与流水mock 会员套餐立即写入会员状态 4. mock 点套餐立即写入钱包余额与流水mock 会员套餐立即写入会员状态
5. wechat_mp 订单不提前发点或会员,只返回待支付订单、账户中心快照与 `wechatMiniProgramPayParams` 5. wechat_mp 订单不提前发点或会员,只返回待支付订单、账户中心快照与 `wechatMiniProgramPayParams`
兼容路径:`POST /api/runtime/profile/recharge/orders` 兼容路径:`POST /api/runtime/profile/recharge/orders`
@@ -113,15 +113,15 @@
1. “我的”页会员充值按钮打开独立弹窗,不在当前面板下方展开。 1. “我的”页会员充值按钮打开独立弹窗,不在当前面板下方展开。
2. 弹窗顶部标题为 `账户充值`,右上角关闭。 2. 弹窗顶部标题为 `账户充值`,右上角关闭。
3. 默认打开 `点充值`,可切换到 `会员卡充值` 3. 默认打开 `点充值`,可切换到 `会员卡充值`
4. 点击套餐后调用下单接口,按钮进入处理中状态;小程序环境走 native 支付页拉起 `wx.requestPayment`,支付页返回后刷新 `profileDashboard` 4. 点击套餐后调用下单接口,按钮进入处理中状态;小程序环境走 native 支付页拉起 `wx.requestPayment`,支付页返回后刷新 `profileDashboard`
5. 弹窗内不写大段说明文案,只保留必要金额、点、会员权益和状态反馈。 5. 弹窗内不写大段说明文案,只保留必要金额、点、会员权益和状态反馈。
6. 会员卡充值区以套餐卡片优先展示周期、价格和处理状态;移动端单列,桌面端三列,权益表允许横向滚动,避免小屏挤压。 6. 会员卡充值区以套餐卡片优先展示周期、价格和处理状态;移动端单列,桌面端三列,权益表允许横向滚动,避免小屏挤压。
## 5. 验收 ## 5. 验收
1. 普通用户打开弹窗能看到点与会员套餐。 1. 普通用户打开弹窗能看到点与会员套餐。
2. 点购买后余额增加,流水来源为 `points_recharge` 2. 点购买后余额增加,流水来源为 `points_recharge`
3. 首充赠送只在首次点充值时生效。 3. 首充赠送只在首次点充值时生效。
4. 会员购买后会员状态与到期时间立即更新。 4. 会员购买后会员状态与到期时间立即更新。
5. 移动端弹窗单列可滚动,桌面端接近参考图卡片网格。 5. 移动端弹窗单列可滚动,桌面端接近参考图卡片网格。

View File

@@ -13,9 +13,9 @@
## 2. 前端交互 ## 2. 前端交互
### 2.1 百梦号复制 ### 2.1 陶泥号复制
1. 点击“我的”页百梦号后的复制按钮后,按钮文案临时切换为 `已复制` 1. 点击“我的”页陶泥号后的复制按钮后,按钮文案临时切换为 `已复制`
2. 复制失败时临时切换为 `复制失败` 2. 复制失败时临时切换为 `复制失败`
3. 状态自动恢复为 `复制` 3. 状态自动恢复为 `复制`
@@ -84,7 +84,7 @@ SpacetimeDB 正式表 `user_account` 需要增加 `avatar_url: Option<String>`
## 5. 验收 ## 5. 验收
1. 创作页已发布作品分享按钮点击后显示 `已复制` 1. 创作页已发布作品分享按钮点击后显示 `已复制`
2. “我的”页百梦号复制按钮点击后显示 `已复制` 2. “我的”页陶泥号复制按钮点击后显示 `已复制`
3. “我的”页不展示 `手机号``正常` 标签。 3. “我的”页不展示 `手机号``正常` 标签。
4. 昵称编辑成功后,资料卡与顶部账号入口同步新昵称。 4. 昵称编辑成功后,资料卡与顶部账号入口同步新昵称。
5. 昵称与头像裁剪弹窗面板不透明,不能露出底层页面内容。 5. 昵称与头像裁剪弹窗面板不透明,不能露出底层页面内容。

View File

@@ -7,14 +7,14 @@
在现有“我的”Tab 功能入口区(常用功能)落地三个轻量入口,入口顺序固定为 `邀请好友``填邀请码``玩家社区` 在现有“我的”Tab 功能入口区(常用功能)落地三个轻量入口,入口顺序固定为 `邀请好友``填邀请码``玩家社区`
1. `邀请好友`:弹出面板展示当前账号绑定的邀请码、邀请奖励规则和成功邀请用户列表。 1. `邀请好友`:弹出面板展示当前账号绑定的邀请码、邀请奖励规则和成功邀请用户列表。
2. `填邀请码`:弹出面板填写邀请码,成功后邀请者与被邀请者各获得 `30` 点。 2. `填邀请码`:弹出面板填写邀请码,成功后邀请者与被邀请者各获得 `30` 点。
3. `玩家社区`:弹出面板展示微信群与 QQ 群正式二维码图片。 3. `玩家社区`:弹出面板展示微信群与 QQ 群正式二维码图片。
## 后端边界 ## 后端边界
- 邀请码、邀请关系与奖励发放全部存入 `server-rs/crates/spacetime-module` - 邀请码、邀请关系与奖励发放全部存入 `server-rs/crates/spacetime-module`
- Axum 只做鉴权、参数转发与响应映射,不在 API 层自行计算奖励。 - Axum 只做鉴权、参数转发与响应映射,不在 API 层自行计算奖励。
- 前端只读取后端状态与调用提交接口,不做本地加点。 - 前端只读取后端状态与调用提交接口,不做本地加点。
- 钱包余额继续复用 `profile_dashboard_state.wallet_balance` - 钱包余额继续复用 `profile_dashboard_state.wallet_balance`
- 奖励流水继续复用 `profile_wallet_ledger`,新增来源类型: - 奖励流水继续复用 `profile_wallet_ledger`,新增来源类型:
- `invite_inviter_reward` - `invite_inviter_reward`
@@ -43,7 +43,7 @@
- 每个用户拥有一个稳定邀请码,首次进入邀请中心时自动生成。 - 每个用户拥有一个稳定邀请码,首次进入邀请中心时自动生成。
- 用户不能填写自己的邀请码。 - 用户不能填写自己的邀请码。
- 用户最多填写一个邀请码,成功后不可修改。 - 用户最多填写一个邀请码,成功后不可修改。
- 被邀请者绑定成功后获得 `30` 点。 - 被邀请者绑定成功后获得 `30` 点。
- 邀请者每天最多获得 `10` 次邀请奖励,超过后关系仍可绑定,被邀请者仍获得奖励,邀请者当次不再加分。 - 邀请者每天最多获得 `10` 次邀请奖励,超过后关系仍可绑定,被邀请者仍获得奖励,邀请者当次不再加分。
- 每次奖励都写入钱包流水,钱包余额以后端返回为准。 - 每次奖励都写入钱包流水,钱包余额以后端返回为准。
@@ -60,7 +60,7 @@
"invitedUsers": [ "invitedUsers": [
{ {
"userId": "user_001", "userId": "user_001",
"displayName": "百梦玩家", "displayName": "陶泥儿玩家",
"avatarUrl": null, "avatarUrl": null,
"boundAt": "2026-05-01T08:00:00Z" "boundAt": "2026-05-01T08:00:00Z"
} }
@@ -89,10 +89,10 @@
- `server-rs/crates/spacetime-module` 已新增邀请码与邀请关系表,邀请中心读取和填码绑定均通过 SpacetimeDB procedure 执行。 - `server-rs/crates/spacetime-module` 已新增邀请码与邀请关系表,邀请中心读取和填码绑定均通过 SpacetimeDB procedure 执行。
- `server-rs/crates/api-server` 已挂接 `/api/runtime/profile/referrals/*``/api/profile/referrals/*` 两组路由。 - `server-rs/crates/api-server` 已挂接 `/api/runtime/profile/referrals/*``/api/profile/referrals/*` 两组路由。
- 前端“我的”Tab 三个功能入口均打开独立弹窗,玩家社区使用 `media/social-media-group/wechat.png``media/social-media-group/qq.png` 两张正式二维码图片。 - 前端“我的”Tab 三个功能入口均打开独立弹窗,玩家社区使用 `media/social-media-group/wechat.png``media/social-media-group/qq.png` 两张正式二维码图片。
- 复制邀请会复制邀请码和邀请链接;填码成功后刷新个人看板点。 - 复制邀请会复制邀请码和邀请链接;填码成功后刷新个人看板点。
- 邀请好友弹窗展示 `邀请一个用户注册,双方都可获得 30 点。每日最多获得十次邀请奖励。`,不再展示“邀请 / 已奖 / 今日”三项统计。 - 邀请好友弹窗展示 `邀请一个用户注册,双方都可获得 30 点。每日最多获得十次邀请奖励。`,不再展示“邀请 / 已奖 / 今日”三项统计。
- 邀请好友弹窗底部展示成功邀请用户头像和昵称列表;没有成功邀请时展示短空状态。 - 邀请好友弹窗底部展示成功邀请用户头像和昵称列表;没有成功邀请时展示短空状态。
- “我的”页 `邀请好友` 按钮副标题展示 `双方得30点icon``玩家社区` 按钮副标题展示 `每日领福利` - “我的”页 `邀请好友` 按钮副标题展示 `双方得30点icon``玩家社区` 按钮副标题展示 `每日领福利`
- “我的”页功能入口区不展示 `常用功能` 标题和 `快捷入口` 副标题,避免首屏重复说明类文案。 - “我的”页功能入口区不展示 `常用功能` 标题和 `快捷入口` 副标题,避免首屏重复说明类文案。
## 前端交互 ## 前端交互

View File

@@ -36,5 +36,5 @@
3. 未开放玩法点击态保持禁用,不应进入鉴权或创建会话链路。 3. 未开放玩法点击态保持禁用,不应进入鉴权或创建会话链路。
4. 已开放玩法点击后必须进入对应创建链路;若用户未登录,先走登录保护。 4. 已开放玩法点击后必须进入对应创建链路;若用户未登录,先走登录保护。
5. 创作 Tab 首屏应显示“10分钟创作一个精品互动玩法”并默认展示拼图创作表单。 5. 创作 Tab 首屏应显示“10分钟创作一个精品互动玩法”并默认展示拼图创作表单。
6. 智能创作入口隐藏后不应出现“Hi, 朋友”“问一问百梦”或“一句话生成闪应用”等旧首页入口。 6. 智能创作入口隐藏后不应出现“Hi, 朋友”“问一问陶泥儿”或“一句话生成闪应用”等旧首页入口。
7. 方洞挑战入口隐藏后,不应出现在创作 Tab 模板入口、创作中心顶部卡带、平台创作类型弹层和创作页作品架中;既有 `SH-` 作品号、广场详情和试玩 runtime 链路不因此删除。 7. 方洞挑战入口隐藏后,不应出现在创作 Tab 模板入口、创作中心顶部卡带、平台创作类型弹层和创作页作品架中;既有 `SH-` 作品号、广场详情和试玩 runtime 链路不因此删除。

View File

@@ -1,6 +1,6 @@
# 密码登录入口历史落地设计 # 密码登录入口历史落地设计
> 2026-04-25 更新:当前产品策略已调整为“不开放密码注册”。新用户必须通过手机号验证码注册/登录,密码登录只面向已经登录后设置过密码的手机号账号。`POST /api/auth/entry` 只接受 `phone + password`,不支持邮箱、用户名或百梦号登录,也不承担自动建号能力。本文原有“密码自动建号”内容仅作为历史背景保留,当前落地以本更新和 [PASSWORD_LOGIN_CHANGE_RESET_DESIGN_2026-04-24.md](./PASSWORD_LOGIN_CHANGE_RESET_DESIGN_2026-04-24.md) 为准。 > 2026-04-25 更新:当前产品策略已调整为“不开放密码注册”。新用户必须通过手机号验证码注册/登录,密码登录只面向已经登录后设置过密码的手机号账号。`POST /api/auth/entry` 只接受 `phone + password`,不支持邮箱、用户名或陶泥号登录,也不承担自动建号能力。本文原有“密码自动建号”内容仅作为历史背景保留,当前落地以本更新和 [PASSWORD_LOGIN_CHANGE_RESET_DESIGN_2026-04-24.md](./PASSWORD_LOGIN_CHANGE_RESET_DESIGN_2026-04-24.md) 为准。
> >
> 2026-04-28 更新:为开发期本地/测试服联调新增服务端环境变量 `GENARRATIVE_DEV_PASSWORD_ENTRY_AUTO_REGISTER_ENABLED`,默认 `false`。仅当该变量显式为 `true` 时,`POST /api/auth/entry` 可对未知手机号用本次密码直接创建账号并登录;默认关闭时仍严格保持未知手机号返回 `401` 的生产语义。该开关不得用于生产环境,也不新增任何前端规则说明文案。 > 2026-04-28 更新:为开发期本地/测试服联调新增服务端环境变量 `GENARRATIVE_DEV_PASSWORD_ENTRY_AUTO_REGISTER_ENABLED`,默认 `false`。仅当该变量显式为 `true` 时,`POST /api/auth/entry` 可对未知手机号用本次密码直接创建账号并登录;默认关闭时仍严格保持未知手机号返回 `401` 的生产语义。该开关不得用于生产环境,也不新增任何前端规则说明文案。
@@ -17,7 +17,7 @@
1. `api-server` 对外只暴露 `phone + password` 的最小接口。 1. `api-server` 对外只暴露 `phone + password` 的最小接口。
2. `module-auth` 只负责已存在手机号账号的密码校验。 2. `module-auth` 只负责已存在手机号账号的密码校验。
3. 密码入口不创建账号,不接收邮箱、用户名或百梦号。 3. 密码入口不创建账号,不接收邮箱、用户名或陶泥号。
4. 登录成功后与 JWT、refresh cookie 的衔接方式。 4. 登录成功后与 JWT、refresh cookie 的衔接方式。
## 1.1 当前冻结结论 ## 1.1 当前冻结结论
@@ -239,7 +239,7 @@
1. 未知手机号密码登录返回 `401`,且不创建账号。 1. 未知手机号密码登录返回 `401`,且不创建账号。
2. 已登录手机号账号设置密码后可用 `phone + password` 登录。 2. 已登录手机号账号设置密码后可用 `phone + password` 登录。
3. 同手机号错误密码返回 `401` 3. 同手机号错误密码返回 `401`
4. 邮箱、用户名或百梦号作为密码登录标识返回 `400` 4. 邮箱、用户名或陶泥号作为密码登录标识返回 `400`
5. 登录成功时返回 access token。 5. 登录成功时返回 access token。
6. 登录成功时写回 refresh cookie。 6. 登录成功时写回 refresh cookie。
7. `GENARRATIVE_DEV_PASSWORD_ENTRY_AUTO_REGISTER_ENABLED` 默认关闭时行为不变。 7. `GENARRATIVE_DEV_PASSWORD_ENTRY_AUTO_REGISTER_ENABLED` 默认关闭时行为不变。

View File

@@ -19,7 +19,7 @@
沿用现有 `POST /api/auth/entry` 沿用现有 `POST /api/auth/entry`
1. 请求字段固定为 `phone``password`,前端只提交手机号。 1. 请求字段固定为 `phone``password`,前端只提交手机号。
2. 后端只按标准手机号归一化后查找账号,不兼容邮箱、用户名、百梦号或历史开发游客标识。 2. 后端只按标准手机号归一化后查找账号,不兼容邮箱、用户名、陶泥号或历史开发游客标识。
3. 手机号不存在时返回 `401`,不创建账号。 3. 手机号不存在时返回 `401`,不创建账号。
4. 手机号存在但未设置密码时返回 `401` 4. 手机号存在但未设置密码时返回 `401`
5. 校验成功后签发 access token并写入 refresh cookie。 5. 校验成功后签发 access token并写入 refresh cookie。

View File

@@ -15,7 +15,7 @@
3. 匹配忽略大小写,允许用户输入去掉空格、连字符或下划线后的连续片段,例如 `PZEPUBLIC1` 命中 `PZ-EPUBLIC1` 3. 匹配忽略大小写,允许用户输入去掉空格、连字符或下划线后的连续片段,例如 `PZEPUBLIC1` 命中 `PZ-EPUBLIC1`
4. 输入完整公开作品号并本地命中时,保留既有作品号直达行为。 4. 输入完整公开作品号并本地命中时,保留既有作品号直达行为。
5. 输入模糊片段命中公开作品时,在首页直接展示搜索结果列表,点击结果打开对应作品详情。 5. 输入模糊片段命中公开作品时,在首页直接展示搜索结果列表,点击结果打开对应作品详情。
6. 当前公开作品列表无命中时,保留既有公开编号直达兜底,继续支持远端按作品号或百梦号查找。 6. 当前公开作品列表无命中时,保留既有公开编号直达兜底,继续支持远端按作品号或陶泥号查找。
## 验收标准 ## 验收标准

View File

@@ -1,24 +1,24 @@
# 百梦产品命名规范落地说明 # 陶泥儿产品命名规范落地说明
## 背景 ## 背景
平台对外中文命名统一使用以下称谓: 平台对外中文命名统一使用以下称谓:
- 产品中文展示名:`百梦` - 产品中文展示名:`陶泥儿`
- 平台内消费单位:`点` - 平台内消费单位:`点`
- 公开账号标识:`百梦号` - 公开账号标识:`陶泥号`
- 创作侧面向创作者称谓:`百梦主` - 创作侧面向创作者称谓:`陶泥儿主`
## 落地边界 ## 落地边界
1. 前端页面、弹窗、测试断言和后端返回给用户的中文错误文案统一使用新称谓。 1. 前端页面、弹窗、测试断言和后端返回给用户的中文错误文案统一使用新称谓。
2. SpacetimeDB 表字段、Rust/TypeScript contract 字段、流水来源枚举、`points_*` 商品 ID、`public_user_code` 字段名继续保持不变,避免引入数据库迁移和历史数据兼容风险。 2. SpacetimeDB 表字段、Rust/TypeScript contract 字段、流水来源枚举、`points_*` 商品 ID、`public_user_code` 字段名继续保持不变,避免引入数据库迁移和历史数据兼容风险。
3. 公开编号现有 `SY-XXXXXXXX` 格式本轮不迁移,只调整用户可见标签为“百梦号”;编号格式如需改为新前缀,应另起迁移方案并同步老用户兼容策略。 3. 公开编号现有 `SY-XXXXXXXX` 格式本轮不迁移,只调整用户可见标签为“陶泥号”;编号格式如需改为新前缀,应另起迁移方案并同步老用户兼容策略。
4. 历史日志、构建产物、第三方依赖和生成绑定不参与本轮文本替换。 4. 历史日志、构建产物、第三方依赖和生成绑定不参与本轮文本替换。
## 验收点 ## 验收点
1. 首页、登录绑定页、我的页和搜索结果不再展示旧产品名。 1. 首页、登录绑定页、我的页和搜索结果不再展示旧产品名。
2. 钱包、充值、邀请、兑换码、资产计费和拼图道具确认文案统一展示“点”。 2. 钱包、充值、邀请、兑换码、资产计费和拼图道具确认文案统一展示“点”。
3. 账号公开标识相关错误和搜索空状态统一展示“百梦号”。 3. 账号公开标识相关错误和搜索空状态统一展示“陶泥号”。
4. 创作相关可见默认称谓使用“百梦主”。 4. 创作相关可见默认称谓使用“陶泥儿主”。

View File

@@ -1,20 +1,20 @@
# 百梦产品命名替换落地说明 # 陶泥儿产品命名替换落地说明
## 1. 本轮目标 ## 1. 本轮目标
本轮统一平台对外中文命名,当前生效称谓如下: 本轮统一平台对外中文命名,当前生效称谓如下:
- 产品中文展示名:`百梦` - 产品中文展示名:`陶泥儿`
- 平台内消费单位:`点` - 平台内消费单位:`点`
- 公开账号标识:`百梦号` - 公开账号标识:`陶泥号`
- 创作侧面向创作者称谓:`百梦主` - 创作侧面向创作者称谓:`陶泥儿主`
## 2. 落地范围 ## 2. 落地范围
1. 前端网页、管理后台、HTML 标题、metadata 与品牌标识统一展示“百梦”。 1. 前端网页、管理后台、HTML 标题、metadata 与品牌标识统一展示“陶泥儿”。
2. 钱包、充值、邀请、兑换码、资产计费、拼图道具与作者激励统一展示“点”。 2. 钱包、充值、邀请、兑换码、资产计费、拼图道具与作者激励统一展示“点”。
3. 公开账号标识、搜索兜底、登录限制与错误信息统一展示“百梦号”。 3. 公开账号标识、搜索兜底、登录限制与错误信息统一展示“陶泥号”。
4. 创作侧面向创作者的称谓统一展示“百梦主”。 4. 创作侧面向创作者的称谓统一展示“陶泥儿主”。
5. 后端错误信息、默认商品文案、测试断言与文档说明同步更新。 5. 后端错误信息、默认商品文案、测试断言与文档说明同步更新。
## 3. 非目标 ## 3. 非目标

View File

@@ -49,7 +49,7 @@ admin:{管理员用户名}:{邀请码}
## 验收标准 ## 验收标准
1. 未登录用户访问 `/?inviteCode=ABC123` 自动打开注册弹窗并预填 `ABC123` 1. 未登录用户访问 `/?inviteCode=ABC123` 自动打开注册弹窗并预填 `ABC123`
2. 有效邀请码注册成功后,被邀请人获得点奖励,邀请关系落库。 2. 有效邀请码注册成功后,被邀请人获得点奖励,邀请关系落库。
3. 无效邀请码注册成功但不绑定,并返回短提示。 3. 无效邀请码注册成功但不绑定,并返回短提示。
4. 管理员可添加邀请码并写入 metadata重复提交同管理员同码更新 metadata。 4. 管理员可添加邀请码并写入 metadata重复提交同管理员同码更新 metadata。
5. 管理员邀请码被使用时不产生 `admin:*` 虚拟主体的钱包流水。 5. 管理员邀请码被使用时不产生 `admin:*` 虚拟主体的钱包流水。

View File

@@ -1,8 +1,8 @@
# 新用户注册默认点落地说明 # 新用户注册默认点落地说明
## 目标 ## 目标
每个新注册用户默认获得 `10`点。赠送必须由后端统一落账,前端只展示余额和流水,不在本地补发或推算。 每个新注册用户默认获得 `10`点。赠送必须由后端统一落账,前端只展示余额和流水,不在本地补发或推算。
## 落账规则 ## 落账规则
@@ -18,7 +18,7 @@
`runtime_snapshot.game_state.playerCurrency` 是运行态内的旧货币字段,不允许覆盖已经存在真实钱包业务流水的账户余额。只要用户已有非 `snapshot_sync` 的钱包流水,后续存档同步只能累计游玩时长和玩过世界,不再用 `playerCurrency` 回写 `wallet_balance` `runtime_snapshot.game_state.playerCurrency` 是运行态内的旧货币字段,不允许覆盖已经存在真实钱包业务流水的账户余额。只要用户已有非 `snapshot_sync` 的钱包流水,后续存档同步只能累计游玩时长和玩过世界,不再用 `playerCurrency` 回写 `wallet_balance`
这样可以避免新用户注册赠送的 `10`点,在首次保存 `playerCurrency = 0` 的运行态快照时被覆盖成 `0` 这样可以避免新用户注册赠送的 `10`点,在首次保存 `playerCurrency = 0` 的运行态快照时被覆盖成 `0`
## 影响文件 ## 影响文件

View File

@@ -2,9 +2,9 @@
## 1. 目标 ## 1. 目标
本轮在现有“我的”资料与钱包 projection 上新增兑换码能力。用户兑换成功后直接增加点余额,写入 `profile_wallet_ledger`,并同步刷新 `profile_dashboard_state.wallet_balance` 本轮在现有“我的”资料与钱包 projection 上新增兑换码能力。用户兑换成功后直接增加点余额,写入 `profile_wallet_ledger`,并同步刷新 `profile_dashboard_state.wallet_balance`
管理侧本轮只提供后端 API不新增管理后台页面。私有兑换码创建时支持内部 `userId` 与公开百梦号两类输入,后端创建阶段统一解析成内部 `userId` 存储。 管理侧本轮只提供后端 API不新增管理后台页面。私有兑换码创建时支持内部 `userId` 与公开陶泥号两类输入,后端创建阶段统一解析成内部 `userId` 存储。
## 2. 兑换码类型 ## 2. 兑换码类型
@@ -26,7 +26,7 @@
| --- | --- | --- | | --- | --- | --- |
| `code` | `String` | 主键,标准化后的兑换码。 | | `code` | `String` | 主键,标准化后的兑换码。 |
| `mode` | `RuntimeProfileRedeemCodeMode` | 兑换码模式。 | | `mode` | `RuntimeProfileRedeemCodeMode` | 兑换码模式。 |
| `reward_points` | `u64` | 单次到账点。 | | `reward_points` | `u64` | 单次到账点。 |
| `max_uses` | `u32` | 公共码为单用户上限,唯一码/私有码为全局上限。 | | `max_uses` | `u32` | 公共码为单用户上限,唯一码/私有码为全局上限。 |
| `global_used_count` | `u32` | 全局已使用次数。公共码也记录总使用次数,但不参与公共码上限判断。 | | `global_used_count` | `u32` | 全局已使用次数。公共码也记录总使用次数,但不参与公共码上限判断。 |
| `enabled` | `bool` | 是否启用。 | | `enabled` | `bool` | 是否启用。 |
@@ -42,7 +42,7 @@
| `usage_id` | `String` | 主键,格式 `redeem:{code}:{user_id}:{micros}:{sequence}`。 | | `usage_id` | `String` | 主键,格式 `redeem:{code}:{user_id}:{micros}:{sequence}`。 |
| `code` | `String` | 兑换码。 | | `code` | `String` | 兑换码。 |
| `user_id` | `String` | 兑换用户。 | | `user_id` | `String` | 兑换用户。 |
| `amount_granted` | `u64` | 到账点。 | | `amount_granted` | `u64` | 到账点。 |
| `created_at` | `Timestamp` | 兑换时间。 | | `created_at` | `Timestamp` | 兑换时间。 |
索引:`code``user_id``(code, user_id)` 索引:`code``user_id``(code, user_id)`
@@ -121,7 +121,7 @@
“我的”页头像右侧入口由 `会员充值` 改为 `兑换码`。点击打开独立模态窗口,窗口内只保留输入框、兑换按钮和后端返回提示,不展示兑换规则说明。 “我的”页头像右侧入口由 `会员充值` 改为 `兑换码`。点击打开独立模态窗口,窗口内只保留输入框、兑换按钮和后端返回提示,不展示兑换规则说明。
成功后展示 `已到账 X 点`,并刷新 profile dashboard。失败后直接展示后端 `message` 成功后展示 `已到账 X 点`,并刷新 profile dashboard。失败后直接展示后端 `message`
## 8. 测试矩阵 ## 8. 测试矩阵

View File

@@ -4,7 +4,7 @@
## 1. 目标 ## 1. 目标
本轮新增一套可配置的个人任务系统,并补齐任务依赖的埋点统计能力。首个任务为“每日登录”,奖励 `10` 点,入口放在“我的”页签;后台可修改任务配置。 本轮新增一套可配置的个人任务系统,并补齐任务依赖的埋点统计能力。首个任务为“每日登录”,奖励 `10` 点,入口放在“我的”页签;后台可修改任务配置。
## 2. 核心边界 ## 2. 核心边界
@@ -13,7 +13,7 @@
- 任务配置写入 `profile_task_config`,默认配置包含 `daily_login`,后台修改后不得被默认初始化覆盖。 - 任务配置写入 `profile_task_config`,默认配置包含 `daily_login`,后台修改后不得被默认初始化覆盖。
- 任务进度写入 `profile_task_progress`,用于任务中心快速读取状态。 - 任务进度写入 `profile_task_progress`,用于任务中心快速读取状态。
- 领奖记录写入 `profile_task_reward_claim`,与钱包流水 `profile_wallet_ledger` 同事务写入。 - 领奖记录写入 `profile_task_reward_claim`,与钱包流水 `profile_wallet_ledger` 同事务写入。
- “星光”奖励复用现有“点”钱包,不新增第二种货币。 - “星光”奖励复用现有“点”钱包,不新增第二种货币。
## 3. 埋点分层 ## 3. 埋点分层
@@ -77,7 +77,7 @@
## 9. 验收 ## 9. 验收
1. `profile_task_config` 默认存在 `daily_login`,后台可修改奖励、阈值、标题和启用状态。 1. `profile_task_config` 默认存在 `daily_login`,后台可修改奖励、阈值、标题和启用状态。
2. “我的”页可以打开每日任务面板,登录后任务可领取 `10` 点。 2. “我的”页可以打开每日任务面板,登录后任务可领取 `10` 点。
3. 登录成功会幂等记录 `daily_login`;重复打开任务中心只记录 `task_center_view`,不会重复增加领取资格。 3. 登录成功会幂等记录 `daily_login`;重复打开任务中心只记录 `task_center_view`,不会重复增加领取资格。
4. 重复领奖不会重复发放。 4. 重复领奖不会重复发放。
5. 表目录、迁移白名单、Rust/TypeScript 契约和前端入口同步更新。 5. 表目录、迁移白名单、Rust/TypeScript 契约和前端入口同步更新。

View File

@@ -2,7 +2,7 @@
## 1. 背景 ## 1. 背景
当前前端展示的“百梦号”由前端基于 `AuthUser.id` 临时拼装: 当前前端展示的“陶泥号”由前端基于 `AuthUser.id` 临时拼装:
- 前缀固定为 `SY-` - 前缀固定为 `SY-`
-`user.id``username` 去除非字母数字字符后的末 8 位 -`user.id``username` 去除非字母数字字符后的末 8 位
@@ -174,7 +174,7 @@
1. `id` 返回内部 ID 仅供当前工程内部跳转与资源读取使用,不在 UI 上直接暴露为文案 1. `id` 返回内部 ID 仅供当前工程内部跳转与资源读取使用,不在 UI 上直接暴露为文案
2. 不返回手机号、登录方式、绑定状态、tokenVersion 等敏感字段 2. 不返回手机号、登录方式、绑定状态、tokenVersion 等敏感字段
3. 未命中返回 `404` 3. 未命中返回 `404`
4. `by-id` 仅接受内部 `user_XXXXXXXX` 这类用户 ID用于工程内跳转、运营排查或已有资源引用不替代公开百梦号主搜索语义 4. `by-id` 仅接受内部 `user_XXXXXXXX` 这类用户 ID用于工程内跳转、运营排查或已有资源引用不替代公开陶泥号主搜索语义
## 5.2 广场作品公开编号搜索 ## 5.2 广场作品公开编号搜索
@@ -251,7 +251,7 @@
## 7.1 账号展示 ## 7.1 账号展示
当前首页资料卡和桌面顶部都展示前端拼装百梦号,改为: 当前首页资料卡和桌面顶部都展示前端拼装陶泥号,改为:
1. 直接展示 `authUi.user.publicUserCode` 1. 直接展示 `authUi.user.publicUserCode`
2. 复制按钮复制后端返回值 2. 复制按钮复制后端返回值
@@ -262,7 +262,7 @@
广场作品卡和详情页增加: 广场作品卡和详情页增加:
1. 作品号 `CW-XXXXXXXX` 1. 作品号 `CW-XXXXXXXX`
2. 作者百梦`SY-XXXXXXXX` 2. 作者陶泥`SY-XXXXXXXX`
展示要求: 展示要求:
@@ -284,7 +284,7 @@
用户搜索命中后的最小行为: 用户搜索命中后的最小行为:
1. 打开独立用户搜索结果面板或对话框 1. 打开独立用户搜索结果面板或对话框
2. 展示头像字母、显示名、百梦 2. 展示头像字母、显示名、陶泥
3. 提供“查看该作者作品”入口 3. 提供“查看该作者作品”入口
作品搜索命中后的行为: 作品搜索命中后的行为:
@@ -325,7 +325,7 @@
## 11. 当前落地说明 ## 11. 当前落地说明
1. 首页百梦号展示已优先读取后端 `publicUserCode`,原本基于 `AuthUser.id/username` 的前端拼装仅保留为兼容兜底,避免老会话未刷新时界面直接空白。 1. 首页陶泥号展示已优先读取后端 `publicUserCode`,原本基于 `AuthUser.id/username` 的前端拼装仅保留为兼容兜底,避免老会话未刷新时界面直接空白。
2. 用户公开搜索与广场作品公开搜索均已改为调用后端匿名接口,前端只负责输入、展示与跳转,不再自行决定最终编号格式。 2. 用户公开搜索与广场作品公开搜索均已改为调用后端匿名接口,前端只负责输入、展示与跳转,不再自行决定最终编号格式。
3. 自定义世界发布链路已改为从认证服务读取真实 `public_user_code` 写入作品真相与广场读模型,不再从内部 `user_id` 临时反推 `SY-XXXXXXXX` 3. 自定义世界发布链路已改为从认证服务读取真实 `public_user_code` 写入作品真相与广场读模型,不再从内部 `user_id` 临时反推 `SY-XXXXXXXX`
4. 当前作品号 `public_work_code` 仍采用基于 `profile_id` 的稳定 fallback 方案生成 `CW-XXXXXXXX`;若后续补独立计数表,需要在不改变读写接口的前提下替换生成来源。 4. 当前作品号 `public_work_code` 仍采用基于 `profile_id` 的稳定 fallback 方案生成 `CW-XXXXXXXX`;若后续补独立计数表,需要在不改变读写接口的前提下替换生成来源。

View File

@@ -32,8 +32,8 @@
5. 参考图入口继续在画面描述输入框右下角,模型选择在左下角,两者不得遮挡文本。 5. 参考图入口继续在画面描述输入框右下角,模型选择在左下角,两者不得遮挡文本。
6. 表单创建 session、自动保存表单草稿、首图生成失败重试时都要保留当前模型选择。 6. 表单创建 session、自动保存表单草稿、首图生成失败重试时都要保留当前模型选择。
7. 结果页关卡重新生成时将当前模型随 `generate_puzzle_images` action 传给后端。 7. 结果页关卡重新生成时将当前模型随 `generate_puzzle_images` action 传给后端。
8. “生成草稿”和关卡详情“生成画面 / 重新生成画面”按钮文本右侧展示 `消耗2点` 8. “生成草稿”和关卡详情“生成画面 / 重新生成画面”按钮文本右侧展示 `消耗2点`
9. 关卡详情点击“生成画面 / 重新生成画面”后先弹出确认消耗点弹窗,确认后开始请求;按钮区域切换为 30 秒倒计时进度条,并展示预计剩余生成完成时间。 9. 关卡详情点击“生成画面 / 重新生成画面”后先弹出确认消耗点弹窗,确认后开始请求;按钮区域切换为 30 秒倒计时进度条,并展示预计剩余生成完成时间。
## 后端路由 ## 后端路由
@@ -49,7 +49,7 @@
7. `save_puzzle_generated_images` 写回草稿时若遇到 SpacetimeDB 连接级 `503` 或断线API 层基于本次生成结果合成 session 快照返回给前端,避免 VectorEngine 已成功出图却被后置持久化误报成服务不可用。余额不足、参数错误、上游生图失败仍按原错误返回,不做伪成功。 7. `save_puzzle_generated_images` 写回草稿时若遇到 SpacetimeDB 连接级 `503` 或断线API 层基于本次生成结果合成 session 快照返回给前端,避免 VectorEngine 已成功出图却被后置持久化误报成服务不可用。余额不足、参数错误、上游生图失败仍按原错误返回,不做伪成功。
8. 结果页 `generate_puzzle_images` 会携带当前作品信息和 `levelsJson`。当 SpacetimeDB 在读取 session 阶段就返回连接级 `503` 或断线时,后端必须先用这份结果页快照构造最小内存 session再继续调用 VectorEngine外部图片已经生成后仍按第 6、7 条处理持久化降级。余额不足、参数错误、缺少草稿快照、关卡不存在等业务错误不走此降级。 8. 结果页 `generate_puzzle_images` 会携带当前作品信息和 `levelsJson`。当 SpacetimeDB 在读取 session 阶段就返回连接级 `503` 或断线时,后端必须先用这份结果页快照构造最小内存 session再继续调用 VectorEngine外部图片已经生成后仍按第 6、7 条处理持久化降级。余额不足、参数错误、缺少草稿快照、关卡不存在等业务错误不走此降级。
9. VectorEngine 错误统一映射为 `502 UPSTREAM_ERROR``details.provider = "vector-engine"`,保留上游状态码、业务 message 和截断后的 raw excerpt。 9. VectorEngine 错误统一映射为 `502 UPSTREAM_ERROR``details.provider = "vector-engine"`,保留上游状态码、业务 message 和截断后的 raw excerpt。
10. 拼图首图生成 `compile_puzzle_draft` 与关卡图片生成 `generate_puzzle_images` 每次预扣 `2` 点;余额不足仍返回 `409 CONFLICT`SpacetimeDB 连接级 503 仍按既有降级策略处理。 10. 拼图首图生成 `compile_puzzle_draft` 与关卡图片生成 `generate_puzzle_images` 每次预扣 `2` 点;余额不足仍返回 `409 CONFLICT`SpacetimeDB 连接级 503 仍按既有降级策略处理。
## 关卡名多模态生成 ## 关卡名多模态生成
@@ -79,6 +79,6 @@ VECTOR_ENGINE_IMAGE_REQUEST_TIMEOUT_MS=180000
4. 历史 `original` 或空模型值不会再触发 DashScope统一按 `gpt-image-2` 请求 VectorEngine。 4. 历史 `original` 或空模型值不会再触发 DashScope统一按 `gpt-image-2` 请求 VectorEngine。
5. 选择图片模型时,请求 `POST {VECTOR_ENGINE_BASE_URL}/v1/images/generations`,使用 `Authorization: Bearer {VECTOR_ENGINE_API_KEY}`,上游 `model = gpt-image-2-all`,不携带 `official_fallback``size = 1024x1024` 5. 选择图片模型时,请求 `POST {VECTOR_ENGINE_BASE_URL}/v1/images/generations`,使用 `Authorization: Bearer {VECTOR_ENGINE_API_KEY}`,上游 `model = gpt-image-2-all`,不携带 `official_fallback``size = 1024x1024`
6. 首图和结果页关卡重新生图成功后Network 中应先完成 VectorEngine 图片生成,再调用 APIMart `POST {APIMART_BASE_URL}/chat/completions`,请求模型为 `gpt-4o-mini`,消息同时包含画面描述文本和正式图 `image_url` Data URL。 6. 首图和结果页关卡重新生图成功后Network 中应先完成 VectorEngine 图片生成,再调用 APIMart `POST {APIMART_BASE_URL}/chat/completions`,请求模型为 `gpt-4o-mini`,消息同时包含画面描述文本和正式图 `image_url` Data URL。
7. “生成草稿”和关卡详情生图按钮展示 `消耗2点`;关卡详情确认后展示 30 秒预计剩余进度条。 7. “生成草稿”和关卡详情生图按钮展示 `消耗2点`;关卡详情确认后展示 30 秒预计剩余进度条。
8. 不改 SpacetimeDB 表结构,因此无需更新 `migration.rs` 或重新生成 bindings。 8. 不改 SpacetimeDB 表结构,因此无需更新 `migration.rs` 或重新生成 bindings。
9. 后端改动后运行对应 Rust 测试,并按项目约束用 `npm run api-server` 重启验证。 9. 后端改动后运行对应 Rust 测试,并按项目约束用 `npm run api-server` 重启验证。

View File

@@ -201,7 +201,7 @@ Rust DTO 只承载对前端公开的 HTTP contract不直接泄露 `module-puz
1. 每次生成 2 张候选图。 1. 每次生成 2 张候选图。
2. 候选图通过 `api-server` 写入 OSS兼容展示路径统一为 `/generated-puzzle-assets/...`,禁止再落到仓库 `public/` 目录。 2. 候选图通过 `api-server` 写入 OSS兼容展示路径统一为 `/generated-puzzle-assets/...`,禁止再落到仓库 `public/` 目录。
3. Axum 把候选图 URL、assetId、prompt snapshot 回写到 Spacetime session draft。 3. Axum 把候选图 URL、assetId、prompt snapshot 回写到 Spacetime session draft。
4. 百梦主在结果页选择其中 1 张作为正式图。 4. 陶泥儿主在结果页选择其中 1 张作为正式图。
这样可以保证: 这样可以保证:
@@ -211,7 +211,7 @@ Rust DTO 只承载对前端公开的 HTTP contract不直接泄露 `module-puz
### 6.1 发布前编辑真相补充 ### 6.1 发布前编辑真相补充
结果页允许百梦主在发布前直接编辑: 结果页允许陶泥儿主在发布前直接编辑:
1. `关卡名` 1. `关卡名`
2. `摘要` 2. `摘要`

View File

@@ -14,8 +14,8 @@
1. 限定时间内未完成时弹出失败面板。 1. 限定时间内未完成时弹出失败面板。
2. 失败面板提供两个选择: 2. 失败面板提供两个选择:
- `重新开始`:重新开启当前拼图关卡,不扣点。 - `重新开始`:重新开启当前拼图关卡,不扣点。
- `继续1分钟`:先弹出确认窗口,确认后消耗 `1` 点,并把当前失败关卡恢复为 `playing`,剩余时间固定为 `60000ms` - `继续1分钟`:先弹出确认窗口,确认后消耗 `1` 点,并把当前失败关卡恢复为 `playing`,剩余时间固定为 `60000ms`
3. 进入拼图作品后立即写入 `profile_save_archive`,存档页显示拼图存档。 3. 进入拼图作品后立即写入 `profile_save_archive`,存档页显示拼图存档。
4. 每次进入下一关后更新同一条拼图存档,使存档恢复时指向最新可继续的关卡。 4. 每次进入下一关后更新同一条拼图存档,使存档恢复时指向最新可继续的关卡。
@@ -26,7 +26,7 @@
`PuzzleRuntimePropKind` 增加 `extendTime`,沿用现有道具确认与扣费接口: `PuzzleRuntimePropKind` 增加 `extendTime`,沿用现有道具确认与扣费接口:
1. 前端只在 `runtimeStatus = failed` 时开放 `继续1分钟` 1. 前端只在 `runtimeStatus = failed` 时开放 `继续1分钟`
2. 点击后打开独立确认弹窗,文案只显示短标题和 `消耗 1 点` 2. 点击后打开独立确认弹窗,文案只显示短标题和 `消耗 1 点`
3. 正式 run 继续走 `POST /api/runtime/puzzle/runs/:runId/props` 3. 正式 run 继续走 `POST /api/runtime/puzzle/runs/:runId/props`
4. `api-server``extendTime` 映射为账单 `asset_kind = puzzle_prop_extend_time` 4. `api-server``extendTime` 映射为账单 `asset_kind = puzzle_prop_extend_time`
5. SpacetimeDB 侧只允许失败关卡续时;续时成功后: 5. SpacetimeDB 侧只允许失败关卡续时;续时成功后:
@@ -37,7 +37,7 @@
- 清空暂停与冻结生效点 - 清空暂停与冻结生效点
- 调整 `paused_accumulated_ms`,保证从确认成功那一刻开始完整倒计时 `60` - 调整 `paused_accumulated_ms`,保证从确认成功那一刻开始完整倒计时 `60`
本地调试 run 没有真实钱包,沿用本地道具兜底:仍弹确认窗,但不扣真实点。 本地调试 run 没有真实钱包,沿用本地道具兜底:仍弹确认窗,但不扣真实点。
### 重新开始 ### 重新开始
@@ -91,7 +91,7 @@ SpacetimeDB 拼图运行态每次持久化 run 时同步刷新存档:
1. 倒计时归零后失败弹窗有 `重新开始``继续1分钟` 1. 倒计时归零后失败弹窗有 `重新开始``继续1分钟`
2. 点击 `继续1分钟` 后先出现扣费确认,确认成功后失败弹窗关闭并恢复 `60` 秒倒计时。 2. 点击 `继续1分钟` 后先出现扣费确认,确认成功后失败弹窗关闭并恢复 `60` 秒倒计时。
3. 点余额不足时确认弹窗保留,并展示错误。 3. 点余额不足时确认弹窗保留,并展示错误。
4. 点击 `重新开始` 后当前关卡重新打乱并重置倒计时。 4. 点击 `重新开始` 后当前关卡重新打乱并重置倒计时。
5. 进入拼图作品后,存档页出现 `worldType = PUZZLE` 的拼图存档。 5. 进入拼图作品后,存档页出现 `worldType = PUZZLE` 的拼图存档。
6. 通过一关后,只要后端确认同作品下一关存在,同一条存档立即更新到新关卡;没有同作品下一关时保留已完成关卡,等待玩家选择相似作品。 6. 通过一关后,只要后端确认同作品下一关存在,同一条存档立即更新到新关卡;没有同作品下一关时保留已完成关卡,等待玩家选择相似作品。

View File

@@ -28,7 +28,7 @@
2. 新 session 的 `seedText` 允许为空SpacetimeDB 侧用空锚点和空表单草稿初始化,不得把默认题材文案写入玩家草稿字段。 2. 新 session 的 `seedText` 允许为空SpacetimeDB 侧用空锚点和空表单草稿初始化,不得把默认题材文案写入玩家草稿字段。
3. 初始表单输入自动保存到 session 的 `draft_json``puzzle_work_profile` 投影。保存字段只包含 `workTitle``workDescription``pictureDescription`、可推断标签和一个 `generationStatus = idle` 的默认关卡草稿设置阶段默认关卡名称必须为空不得写入“第一关”“第1关”或作品名称作为默认值。生成前的参考图只保存在当前前端会话内一旦用于首图生成并成功返回后端必须把该参考图写入首关 `pictureReference`,供结果页后续重新生成继续复用。 3. 初始表单输入自动保存到 session 的 `draft_json``puzzle_work_profile` 投影。保存字段只包含 `workTitle``workDescription``pictureDescription`、可推断标签和一个 `generationStatus = idle` 的默认关卡草稿设置阶段默认关卡名称必须为空不得写入“第一关”“第1关”或作品名称作为默认值。生成前的参考图只保存在当前前端会话内一旦用于首图生成并成功返回后端必须把该参考图写入首关 `pictureReference`,供结果页后续重新生成继续复用。
4. 玩家在生成草稿前退出,再次从创作中心点击这条拼图草稿时,必须恢复到填表页,并回填之前自动保存的作品名称、作品描述和画面描述;只有执行 `compile_puzzle_draft` 且生成结果页草稿后,草稿入口才进入结果页。 4. 玩家在生成草稿前退出,再次从创作中心点击这条拼图草稿时,必须恢复到填表页,并回填之前自动保存的作品名称、作品描述和画面描述;只有执行 `compile_puzzle_draft` 且生成结果页草稿后,草稿入口才进入结果页。
5. 表单自动保存走 `save_puzzle_form_draft` action不消耗点,不生成图片,不改变 `stage = collecting_anchors`;生成草稿按钮仍单独触发 `compile_puzzle_draft` 并进入进度页。 5. 表单自动保存走 `save_puzzle_form_draft` action不消耗点,不生成图片,不改变 `stage = collecting_anchors`;生成草稿按钮仍单独触发 `compile_puzzle_draft` 并进入进度页。
6. 点击拼图入口始终创建新草稿,不复用上一次未完成 session恢复旧草稿只通过“我的创作”中的草稿卡进入。 6. 点击拼图入口始终创建新草稿,不复用上一次未完成 session恢复旧草稿只通过“我的创作”中的草稿卡进入。
7. 若运行中的旧 wasm 缺少 `save_puzzle_form_draft` procedure前端提交生成或生成失败页重试时不得继续复用空 `seedText` 的表单 session必须用当前表单 payload 新建带真实 seed 的 session 再执行 `compile_puzzle_draft` 7. 若运行中的旧 wasm 缺少 `save_puzzle_form_draft` procedure前端提交生成或生成失败页重试时不得继续复用空 `seedText` 的表单 session必须用当前表单 payload 新建带真实 seed 的 session 再执行 `compile_puzzle_draft`
8. api-server 也要兼容旧 wasm`save_puzzle_form_draft` 缺失时,自动保存 action 降级返回当前 session`compile_puzzle_draft` 前置保存缺失且当前 session 为空 seed 时,创建一条带表单 seed 的替代 session 后继续编译,避免再次暴露 `No such procedure` 8. api-server 也要兼容旧 wasm`save_puzzle_form_draft` 缺失时,自动保存 action 降级返回当前 session`compile_puzzle_draft` 前置保存缺失且当前 session 为空 seed 时,创建一条带表单 seed 的替代 session 后继续编译,避免再次暴露 `No such procedure`
@@ -88,10 +88,10 @@
10. `StartPuzzleRunRequest` 新增可选 `levelId`。详情页或草稿结果页单独体验某关时传入目标关卡,后端从作品/草稿的 `levels` 中选取该关卡生成运行态。 10. `StartPuzzleRunRequest` 新增可选 `levelId`。详情页或草稿结果页单独体验某关时传入目标关卡,后端从作品/草稿的 `levels` 中选取该关卡生成运行态。
11. `ExecutePuzzleAgentActionRequest` 必须保留 `pictureDescription` 字段。表单直达生成时,`compile_puzzle_draft` 优先用 `pictureDescription` 作为首图 prompt再回退到旧 `promptText`;避免生成页展示的是玩家画面描述,但后端实际用作品名称或旧摘要出图。 11. `ExecutePuzzleAgentActionRequest` 必须保留 `pictureDescription` 字段。表单直达生成时,`compile_puzzle_draft` 优先用 `pictureDescription` 作为首图 prompt再回退到旧 `promptText`;避免生成页展示的是玩家画面描述,但后端实际用作品名称或旧摘要出图。
12. `compile_puzzle_draft` 中的图片上游失败不得映射成 `400 BAD_REQUEST`。DashScope 返回 `InvalidParameter` 或任务失败时api-server 统一按 `502 UPSTREAM_ERROR` 暴露,并在 `details.message` 中保留“拼图图片生成失败:...”的业务原因,避免生成页只显示“请求参数不合法”。 12. `compile_puzzle_draft` 中的图片上游失败不得映射成 `400 BAD_REQUEST`。DashScope 返回 `InvalidParameter` 或任务失败时api-server 统一按 `502 UPSTREAM_ERROR` 暴露,并在 `details.message` 中保留“拼图图片生成失败:...”的业务原因,避免生成页只显示“请求参数不合法”。
13. `compile_puzzle_draft` 前置点预扣失败不得映射成 `400 BAD_REQUEST`。余额不足返回 `409 CONFLICT`SpacetimeDB procedure 不可用、绑定不匹配、钱包服务异常等统一按 `502 UPSTREAM_ERROR` 暴露,并在 `details.message` 中保留真实钱包错误。 13. `compile_puzzle_draft` 前置点预扣失败不得映射成 `400 BAD_REQUEST`。余额不足返回 `409 CONFLICT`SpacetimeDB procedure 不可用、绑定不匹配、钱包服务异常等统一按 `502 UPSTREAM_ERROR` 暴露,并在 `details.message` 中保留真实钱包错误。
14. 生成拼图作品草稿动作涉及的表单 seed prompt 与首图 prompt 来源选择统一收口在 `server-rs/crates/api-server/src/prompt/puzzle/draft.rs``puzzle.rs` 只负责调用 SpacetimeDB、计费、图片服务和持久化不再直接拼草稿 prompt 文本。 14. 生成拼图作品草稿动作涉及的表单 seed prompt 与首图 prompt 来源选择统一收口在 `server-rs/crates/api-server/src/prompt/puzzle/draft.rs``puzzle.rs` 只负责调用 SpacetimeDB、计费、图片服务和持久化不再直接拼草稿 prompt 文本。
15. `compile_puzzle_draft_with_initial_cover` 中,首关文本名称生成与首关图片生成互不等待:首图 prompt 只读取画面描述OSS 临时路径使用现有关卡名或确定性兜底名;首图返回后再用图片语义尝试精修最终关卡名。最终关卡名确定后,背景音乐与首关 UI 背景图通过 `tokio::join!` 并行生成,任一失败只记录 warning 并保留草稿。 15. `compile_puzzle_draft_with_initial_cover` 中,首关文本名称生成与首关图片生成互不等待:首图 prompt 只读取画面描述OSS 临时路径使用已有名或确定性兜底名;首图返回后再用图片语义尝试精修最终关卡名。最终关卡名确定后,必须继续生成首关 UI 背景图与背景音乐,并在写入正式草稿前校验 `levels[0].uiBackgroundImageSrc/uiBackgroundImageObjectKey``levels[0].backgroundMusic.audioSrc` 都不为空;任一资产失败时 `compile_puzzle_draft` 返回上游错误,生成页停留失败态,不能返回一个显示“暂无音乐”或默认 UI 的成功草稿。
16. `compile_puzzle_draft_with_uploaded_cover` 中,上传图解析后,文本名称生成、图片语义名称生成和上传图转存 OSS 可并行;上传图转存失败必须立即返回,不得继续触发背景音乐或 UI 背景生成。上传图转存成功且最终关卡名确定后,背景音乐与首关 UI 背景图同样并行生成 16. `compile_puzzle_draft_with_uploaded_cover` 中,上传图解析后,文本名称生成、图片语义名称生成和上传图转存 OSS 可并行;上传图转存失败必须立即返回,不得继续触发背景音乐或 UI 背景生成。上传图转存成功且最终关卡名确定后,同样必须生成并校验首关 UI 背景图与背景音乐。自动草稿阶段先生成 UI 背景,再生成会单独扣费的音乐资产,避免 UI 失败后留下未写入草稿的已扣费音频
## 结果页 ## 结果页
@@ -110,7 +110,7 @@
1. UI 背景图只生成拼图运行态的题材氛围纯背景不得把拼图槽、棋盘外框、按钮、HUD 或其它 UI 元素烘进图片。拼图槽位、棋盘边框和空格继续使用运行态默认样式绘制。 1. UI 背景图只生成拼图运行态的题材氛围纯背景不得把拼图槽、棋盘外框、按钮、HUD 或其它 UI 元素烘进图片。拼图槽位、棋盘边框和空格继续使用运行态默认样式绘制。
2. UI 背景图不得生成文字、水印、按钮文字、数字、拼图碎片、完整拼图图像、教程浮层、拼图槽或物品槽,避免与真实拼图图块和运行态 HUD 混淆。 2. UI 背景图不得生成文字、水印、按钮文字、数字、拼图碎片、完整拼图图像、教程浮层、拼图槽或物品槽,避免与真实拼图图块和运行态 HUD 混淆。
3. 结果页 UI Tab 支持直接修改提示词并重新生成;点击生成前会把本地首关 `uiBackgroundPrompt` 同步进 `levelsJson`,使自动保存尚未完成时后端仍能拿到最新提示词。 3. 结果页 UI Tab 支持直接修改提示词并重新生成;点击生成前会把本地首关 `uiBackgroundPrompt` 同步进 `levelsJson`,使自动保存尚未完成时后端仍能拿到最新提示词。
4. 草稿编译阶段自动生成 UI 背景失败时只记录 warning并保留草稿进入结果页用户可在 UI Tab 重新生成,不因背景图上游波动阻断首图草稿主流程 4. 草稿编译阶段自动生成 UI 背景失败时必须让 `compile_puzzle_draft` 失败并停留在生成页;不能保留一个成功状态但缺少 UI 背景的草稿。只有结果页用户主动点击 `生成UI背景``重新生成` 时,失败才作为当前面板错误展示,由用户手动重试
5. `api-server` 负责拼接生成 prompt、调用 VectorEngine、下载并转存 OSSSpacetimeDB 只通过 `save_puzzle_ui_background` procedure 保存结果,不做外部 I/O。 5. `api-server` 负责拼接生成 prompt、调用 VectorEngine、下载并转存 OSSSpacetimeDB 只通过 `save_puzzle_ui_background` procedure 保存结果,不做外部 I/O。
6. 拼图运行态读取 `currentLevel.uiBackgroundImageSrc` 渲染为全屏背景;无 UI 背景图时继续使用原封面模糊背景兜底。棋盘本身仍由正式拼图图生成,不能把 UI 背景当作拼图切块来源。 6. 拼图运行态读取 `currentLevel.uiBackgroundImageSrc` 渲染为全屏背景;无 UI 背景图时继续使用原封面模糊背景兜底。棋盘本身仍由正式拼图图生成,不能把 UI 背景当作拼图切块来源。
7. 生成完成后的自动试玩和结果页“试玩”走前端本地运行态兜底时,`startLocalPuzzleRun` 也必须从 `PuzzleWorkSummary.levels[]` 复制 `uiBackgroundImageSrc``backgroundMusic``currentLevel`;不得只带 `coverImageSrc`,否则草稿结果页有背景但试玩局内空白。 7. 生成完成后的自动试玩和结果页“试玩”走前端本地运行态兜底时,`startLocalPuzzleRun` 也必须从 `PuzzleWorkSummary.levels[]` 复制 `uiBackgroundImageSrc``backgroundMusic``currentLevel`;不得只带 `coverImageSrc`,否则草稿结果页有背景但试玩局内空白。

View File

@@ -21,7 +21,7 @@
5. 文生图正向 prompt 必须由后端压缩到 `500` 字符以内,优先保留玩家画面描述开头与固定拼图约束,避免上游把超长 prompt 判为“请求参数不合法”。 5. 文生图正向 prompt 必须由后端压缩到 `500` 字符以内,优先保留玩家画面描述开头与固定拼图约束,避免上游把超长 prompt 判为“请求参数不合法”。
6. VectorEngine 上游失败时api-server 必须在错误 details 中保留业务 message、`upstreamStatus` 和截断后的 `rawExcerpt`,日志也要记录同样的摘要,避免生成进度页只能看到通用 HTTP 文案。 6. VectorEngine 上游失败时api-server 必须在错误 details 中保留业务 message、`upstreamStatus` 和截断后的 `rawExcerpt`,日志也要记录同样的摘要,避免生成进度页只能看到通用 HTTP 文案。
7. 图片生成仍由 `api-server` 执行。SpacetimeDB reducer 不做网络 I/O。 7. 图片生成仍由 `api-server` 执行。SpacetimeDB reducer 不做网络 I/O。
8. 点预扣失败属于钱包或 SpacetimeDB 服务链路错误,不得映射成 `400 BAD_REQUEST`。除余额不足返回 `409 CONFLICT` 外,其余预扣异常统一按上游/服务错误暴露,避免生成页误提示“请求参数不合法”。 8. 点预扣失败属于钱包或 SpacetimeDB 服务链路错误,不得映射成 `400 BAD_REQUEST`。除余额不足返回 `409 CONFLICT` 外,其余预扣异常统一按上游/服务错误暴露,避免生成页误提示“请求参数不合法”。
### 2. 前端规则裁决 ### 2. 前端规则裁决

View File

@@ -30,7 +30,7 @@
3. 下载音频字节。 3. 下载音频字节。
4. 写入 OSS 私有对象。 4. 写入 OSS 私有对象。
5. 确认 `asset_object` 并绑定 `asset_entity_binding` 5. 确认 `asset_object` 并绑定 `asset_entity_binding`
6. 音频真正可下载并准备转存时,按 `taskId + assetKind + entityId + slot` 幂等扣费;背景音乐固定扣除 `5` 点,物品点击音效固定扣除 `10` 点。任务仍在处理中不扣费,转存或资产绑定失败自动退款。 6. 音频真正可下载并准备转存时,按 `taskId + assetKind + entityId + slot` 幂等扣费;背景音乐固定扣除 `5` 点,物品点击音效固定扣除 `10` 点。任务仍在处理中不扣费,转存或资产绑定失败自动退款。
通用背景音乐提交允许 `prompt = ""`。拼图和抓大鹅草稿生成都按纯音乐处理:后端提交 Suno 时固定带 `make_instrumental = true`,只用 `title``tags` 约束作品气质,不把歌词或规则描述写入 prompt。视觉小说原路由保持兼容内部继续复用同一套提交、轮询、转存逻辑。 通用背景音乐提交允许 `prompt = ""`。拼图和抓大鹅草稿生成都按纯音乐处理:后端提交 Suno 时固定带 `make_instrumental = true`,只用 `title``tags` 约束作品气质,不把歌词或规则描述写入 prompt。视觉小说原路由保持兼容内部继续复用同一套提交、轮询、转存逻辑。
@@ -53,7 +53,7 @@
} }
``` ```
草稿生成阶段在生成首关作品题目后,使用作品题目作为 Suno `title``prompt` 为空,`tags` 使用轻快、拼图、循环、instrumental。生成失败只记录 warning不阻断草稿进入结果页。运行态从 `PuzzleRuntimeLevelSnapshot.backgroundMusic.audioSrc` 读取该字段作为背景音乐源,游戏开始后自动循环播放;字段为空,保持静默背景音乐兜底。 草稿生成阶段在生成首关作品题目后,使用作品题目作为 Suno `title``prompt` 为空,`tags` 使用轻快、拼图、循环、instrumental。自动草稿编译必须拿到可播放的 `backgroundMusic.audioSrc` 后才返回成功;生成失败应返回上游错误并停留在生成页,不能进入结果页后显示“暂无音乐”。运行态从 `PuzzleRuntimeLevelSnapshot.backgroundMusic.audioSrc` 读取该字段作为背景音乐源,游戏开始后自动循环播放;历史草稿或手动删除音乐时字段为空,保持静默背景音乐兜底。
### 3.2 抓大鹅 ### 3.2 抓大鹅
@@ -62,7 +62,7 @@
1. 作品背景音乐暂存到第一个 `Match3DGeneratedItemAsset.backgroundMusic`,表示当前 work profile 的作品级背景音乐。 1. 作品背景音乐暂存到第一个 `Match3DGeneratedItemAsset.backgroundMusic`,表示当前 work profile 的作品级背景音乐。
2. 单个物体点击音效保存到对应 `Match3DGeneratedItemAsset.clickSound` 2. 单个物体点击音效保存到对应 `Match3DGeneratedItemAsset.clickSound`
这是一个兼容性折中:当前 Match3D work profile 没有 work-level metadata 字段,而 `generated_item_assets_json` 已经随作品详情、草稿架、运行态入口稳定传递。草稿生成阶段的文本计划在生成物品名称时同步生成 `backgroundMusic.title` 作为背景音乐名称,`backgroundMusic.prompt` 固定为空字符串,后端用该名称作为 Suno `title` 并生成纯音乐。后续若新增正式作品 metadata 表达,应迁移 `backgroundMusic` 到作品级字段。 这是一个兼容性折中:当前 Match3D work profile 没有 work-level metadata 字段,而 `generated_item_assets_json` 已经随作品详情、草稿架、运行态入口稳定传递。草稿生成阶段的文本计划在生成物品名称时同步生成 `backgroundMusic.title` 作为背景音乐名称,`backgroundMusic.prompt` 固定为空字符串,后端用该名称作为 Suno `title` 并生成纯音乐。自动草稿编译必须把生成后的 `backgroundMusic.audioSrc` 写回首个素材后才返回成功;若 Suno 提交、轮询、下载、OSS 转存或资产绑定失败,本次草稿生成返回失败并允许用户重试同一 session/profile。后续若新增正式作品 metadata 表达,应迁移 `backgroundMusic` 到作品级字段。
## 4. 前端交互 ## 4. 前端交互
@@ -73,7 +73,7 @@
3. 抓大鹅每个物体音效生成入口放在对应素材详情面板内,不在列表下方展开大段配置。 3. 抓大鹅每个物体音效生成入口放在对应素材详情面板内,不在列表下方展开大段配置。
4. 抓大鹅物体音效提示词允许在素材详情面板内编辑;背景音乐只允许在 `素材配置 > 背景音乐` 编辑曲名和风格,生成请求固定使用空 `prompt` 4. 抓大鹅物体音效提示词允许在素材详情面板内编辑;背景音乐只允许在 `素材配置 > 背景音乐` 编辑曲名和风格,生成请求固定使用空 `prompt`
5. 背景音乐和物体音效生成期间都显示进度条,生成完成后展示 audio 控件试听。 5. 背景音乐和物体音效生成期间都显示进度条,生成完成后展示 audio 控件试听。
6. 背景音乐重新生成只要求曲名非空;重新生成继续按纯音乐提交,`prompt = ""`,按钮展示 `5` 点成本。 6. 背景音乐重新生成只要求曲名非空;重新生成继续按纯音乐提交,`prompt = ""`,按钮展示 `5` 点成本。
### 4.1 运行态默认点击音效 ### 4.1 运行态默认点击音效

View File

@@ -2,14 +2,14 @@
## 背景 ## 背景
拼图创作入口继续保留填表式体验,但入口表单不再要求百梦主提前填写作品名称和作品描述。入口只收集“拼图画面描述”,后端用该描述完成首图生成和第一关关卡名生成;进入结果页后再补作品信息。 拼图创作入口继续保留填表式体验,但入口表单不再要求陶泥儿主提前填写作品名称和作品描述。入口只收集“拼图画面描述”,后端用该描述完成首图生成和第一关关卡名生成;进入结果页后再补作品信息。
## 入口表单 ## 入口表单
1. 点击“开始创作”后的拼图表单只展示 `画面描述`、参考图和图片模型选择。 1. 点击“开始创作”后的拼图表单只展示 `画面描述`、参考图和图片模型选择。
2. `画面描述` 是唯一必填字段,提交时写入 `pictureDescription`,并作为 `promptText` 传给 `compile_puzzle_draft` 2. `画面描述` 是唯一必填字段,提交时写入 `pictureDescription`,并作为 `promptText` 传给 `compile_puzzle_draft`
3. `workTitle``workDescription` 不再从入口表单传入;`seedText` 只由画面描述组成,格式为 `画面描述:...` 3. `workTitle``workDescription` 不再从入口表单传入;`seedText` 只由画面描述组成,格式为 `画面描述:...`
4. 表单自动保存只保存画面描述,不生成图片,不消耗点。 4. 表单自动保存只保存画面描述,不生成图片,不消耗点。
5. 生成进度页“当前拼图信息”只展示画面描述,不再展示空作品名称或空作品描述。 5. 生成进度页“当前拼图信息”只展示画面描述,不再展示空作品名称或空作品描述。
## 生成进度步骤 ## 生成进度步骤

View File

@@ -4,7 +4,7 @@
拼图结果页此前存在两个串联问题: 拼图结果页此前存在两个串联问题:
1. 百梦主在结果页修改 `关卡名`、新增标签、删除标签,只会改前端本地 `editState`,不会立即写回拼图作品 profile。 1. 陶泥儿主在结果页修改 `关卡名`、新增标签、删除标签,只会改前端本地 `editState`,不会立即写回拼图作品 profile。
2. 发布弹窗同时混用了旧 session 内的 `publishReady` 与前端本地编辑态,导致标签已经在界面里补够,但发布校验仍然盯着旧草稿里的标签数量,用户无法通过发布检验。 2. 发布弹窗同时混用了旧 session 内的 `publishReady` 与前端本地编辑态,导致标签已经在界面里补够,但发布校验仍然盯着旧草稿里的标签数量,用户无法通过发布检验。
这会直接破坏拼图创作主链的可用性:用户明明已经在结果页补齐正式标签,却因为没有自动保存、也没有按当前编辑态重算门槛而卡在发布前。 这会直接破坏拼图创作主链的可用性:用户明明已经在结果页补齐正式标签,却因为没有自动保存、也没有按当前编辑态重算门槛而卡在发布前。
@@ -59,6 +59,6 @@
## 2026-05-09 发布失败提示补充 ## 2026-05-09 发布失败提示补充
`publish_puzzle_work` 属于资产操作发布入口,按 `ASSET_GENERATION_POINTS_CONSUMPTION_2026-04-27.md` 会在发布 mutation 前预扣 `1`点。余额不足时后端返回 `409 CONFLICT`,响应 `details.message``点余额不足`,这属于业务拒绝,不是拼图发布接口不可用。 `publish_puzzle_work` 属于资产操作发布入口,按 `ASSET_GENERATION_POINTS_CONSUMPTION_2026-04-27.md` 会在发布 mutation 前预扣 `1`点。余额不足时后端返回 `409 CONFLICT`,响应 `details.message``点余额不足`,这属于业务拒绝,不是拼图发布接口不可用。
结果页发布弹窗必须在用户点击发布后继续展示后端错误原因,不能只把错误写到弹窗背后的页面 banner。这样余额不足、SpacetimeDB 发布门禁或其他后端业务错误都会在当前独立发布面板中直接可见。 结果页发布弹窗必须在用户点击发布后继续展示后端错误原因,不能只把错误写到弹窗背后的页面 banner。这样余额不足、SpacetimeDB 发布门禁或其他后端业务错误都会在当前独立发布面板中直接可见。

View File

@@ -6,7 +6,7 @@
1. 不同难度有明确倒计时,超时即失败。 1. 不同难度有明确倒计时,超时即失败。
2. 底部固定 3 个轻量道具:提示、查看原图、冻结时间。 2. 底部固定 3 个轻量道具:提示、查看原图、冻结时间。
3. 道具使用必须经过确认弹窗并消耗 `1` 点,确认弹窗期间暂停关卡计时。 3. 道具使用必须经过确认弹窗并消耗 `1` 点,确认弹窗期间暂停关卡计时。
本设计只处理拼图运行时,不改拼图创作链、发布链和广场推荐链。 本设计只处理拼图运行时,不改拼图创作链、发布链和广场推荐链。
@@ -95,7 +95,7 @@ remainingMs = max(0, timeLimitMs - effectiveElapsedMs)
## 计费规则 ## 计费规则
每次确认使用道具消耗 `1` 点。 每次确认使用道具消耗 `1` 点。
正式后端运行态复用现有资产操作钱包预扣链路,新增道具 `asset_kind` 正式后端运行态复用现有资产操作钱包预扣链路,新增道具 `asset_kind`

View File

@@ -98,11 +98,11 @@ size = 1024x1024
- 已上传图片时,输入框标题为 `画面AI重绘要求提示词` - 已上传图片时,输入框标题为 `画面AI重绘要求提示词`
- 展示图片模型切换。 - 展示图片模型切换。
- `compile_puzzle_draft` 携带 `aiRedraw: true`,继续走 VectorEngine 生图与 `PUZZLE_IMAGE_GENERATION_POINTS_COST = 2` 扣费链路。 - `compile_puzzle_draft` 携带 `aiRedraw: true`,继续走 VectorEngine 生图与 `PUZZLE_IMAGE_GENERATION_POINTS_COST = 2` 扣费链路。
- 生成按钮展示 `消耗2点` - 生成按钮展示 `消耗2点`
2. `AI重绘=false` 2. `AI重绘=false`
- 隐藏画面描述输入框和模型切换。 - 隐藏画面描述输入框和模型切换。
- 必须上传拼图图片,按钮不展示 `消耗2点` - 必须上传拼图图片,按钮不展示 `消耗2点`
- `compile_puzzle_draft` 携带 `aiRedraw: false`,后端只编译草稿和生成首关名,不调用 VectorEngine不进入点扣费 wrapper。 - `compile_puzzle_draft` 携带 `aiRedraw: false`,后端只编译草稿和生成首关名,不调用 VectorEngine不进入点扣费 wrapper。
- 后端把上传图片 Data URL 按拼图资产路径持久化,构造 `sourceType=uploaded` 的候选图并直接选为第一关正式图。 - 后端把上传图片 Data URL 按拼图资产路径持久化,构造 `sourceType=uploaded` 的候选图并直接选为第一关正式图。
3. 上传裁剪 3. 上传裁剪
- 前端读取上传图原始宽高。 - 前端读取上传图原始宽高。
@@ -126,8 +126,8 @@ Rust 共享契约使用 `ai_redraw: Option<bool>` 并按 camelCase 序列化为
3. 图片模型切换仍可打开并选择 `gpt-image-2` / `nanobanana2` 3. 图片模型切换仍可打开并选择 `gpt-image-2` / `nanobanana2`
4. 历史模板样例图文件可保留,但不出现在拼图入口表单。 4. 历史模板样例图文件可保留,但不出现在拼图入口表单。
5. 当前创作 Tab 顶部的拼图、方洞挑战、视觉小说和 AIRP 卡片能看到对应 `creation-type-references` 图片。 5. 当前创作 Tab 顶部的拼图、方洞挑战、视觉小说和 AIRP 卡片能看到对应 `creation-type-references` 图片。
6. 默认 `AI重绘` 打开时,无图状态展示 `画面描述``消耗2点`;上传图片后输入框标题改为 `画面AI重绘要求提示词` 6. 默认 `AI重绘` 打开时,无图状态展示 `画面描述``消耗2点`;上传图片后输入框标题改为 `画面AI重绘要求提示词`
7. 关闭 `AI重绘` 后隐藏画面描述输入框,生成按钮不展示 `消耗2点`,后端直接应用上传图片为第一关图片。 7. 关闭 `AI重绘` 后隐藏画面描述输入框,生成按钮不展示 `消耗2点`,后端直接应用上传图片为第一关图片。
8. 上传非 1:1 图片时必须先通过拖拽裁剪框完成正方形裁剪。 8. 上传非 1:1 图片时必须先通过拖拽裁剪框完成正方形裁剪。
9. gpt-image-2 Skill 校验通过,且脚本 dry-run 能输出计划请求而不泄露密钥。 9. gpt-image-2 Skill 校验通过,且脚本 dry-run 能输出计划请求而不泄露密钥。
10. `npm run check:encoding` 通过。 10. `npm run check:encoding` 通过。

View File

@@ -6,18 +6,18 @@
1. 拼图草稿页“新增关卡”按钮下方显示一行小字:“获得更多积分激励”。 1. 拼图草稿页“新增关卡”按钮下方显示一行小字:“获得更多积分激励”。
2. 创作页的已发布拼图作品卡展示当前作品的积分激励总数、待领取积分数和领取按钮。 2. 创作页的已发布拼图作品卡展示当前作品的积分激励总数、待领取积分数和领取按钮。
3. 用户在他人已发布拼图作品中消耗点时,作品作者获得消耗点数量的一半作为积分激励。 3. 用户在他人已发布拼图作品中消耗点时,作品作者获得消耗点数量的一半作为积分激励。
4. 作者领取时只能领取整数个点,待领取值向下取整;未满 1 个点的半数余额继续保留。 4. 作者领取时只能领取整数个点,待领取值向下取整;未满 1 个点的半数余额继续保留。
## 2. 数据模型 ## 2. 数据模型
拼图作品激励归属到 `puzzle_work_profile` 拼图作品激励归属到 `puzzle_work_profile`
1. `point_incentive_total_half_points: u64` 1. `point_incentive_total_half_points: u64`
- 记录该作品累计获得的激励,单位为“半个点”。 - 记录该作品累计获得的激励,单位为“半个点”。
- 每消耗 `N`点,增加 `N` 个 half points当前拼图道具每次消耗 1 个点,因此每次为作者增加 0.5。 - 每消耗 `N`点,增加 `N` 个 half points当前拼图道具每次消耗 1 个点,因此每次为作者增加 0.5。
2. `point_incentive_claimed_points: u64` 2. `point_incentive_claimed_points: u64`
- 记录作者已领取的整数点数量。 - 记录作者已领取的整数点数量。
3. 前端展示: 3. 前端展示:
- 激励总数 = `pointIncentiveTotalHalfPoints / 2`,允许展示一位小数。 - 激励总数 = `pointIncentiveTotalHalfPoints / 2`,允许展示一位小数。
- 待领取积分 = `floor(pointIncentiveTotalHalfPoints / 2) - pointIncentiveClaimedPoints` - 待领取积分 = `floor(pointIncentiveTotalHalfPoints / 2) - pointIncentiveClaimedPoints`
@@ -33,7 +33,7 @@
- 只允许作品作者领取。 - 只允许作品作者领取。
- 计算可领取整数 `claimable = total_half_points / 2 - claimed_points` - 计算可领取整数 `claimable = total_half_points / 2 - claimed_points`
- `claimable <= 0` 时拒绝领取。 - `claimable <= 0` 时拒绝领取。
- 同一事务内更新作品 `claimed_points += claimable`,并向作者钱包增加 `claimable` 点,钱包流水来源使用 `puzzle_author_incentive_claim` - 同一事务内更新作品 `claimed_points += claimable`,并向作者钱包增加 `claimable` 点,钱包流水来源使用 `puzzle_author_incentive_claim`
## 4. API 与前端 ## 4. API 与前端
@@ -55,6 +55,6 @@
2. 已发布拼图作品卡展示“积分激励总数”和“待领取”两个数值。 2. 已发布拼图作品卡展示“积分激励总数”和“待领取”两个数值。
3. 待领取积分为 0 时领取按钮禁用。 3. 待领取积分为 0 时领取按钮禁用。
4. 非作者游玩他人拼图并使用付费道具后,该作品累计 half points 增加。 4. 非作者游玩他人拼图并使用付费道具后,该作品累计 half points 增加。
5. 作者领取后钱包增加向下取整后的整数点,作品待领取数归零或保留不足 1 的小数余额。 5. 作者领取后钱包增加向下取整后的整数点,作品待领取数归零或保留不足 1 的小数余额。
6. 领取成功后顶部/我的页钱包余额随个人看板刷新。 6. 领取成功后顶部/我的页钱包余额随个人看板刷新。
7. 修改后运行编码检查、SpacetimeDB 绑定生成、Rust 检查和必要前端测试。 7. 修改后运行编码检查、SpacetimeDB 绑定生成、Rust 检查和必要前端测试。

View File

@@ -1,4 +1,4 @@
# 技术方案 # 技术方案
这一组文档偏技术选型、实现路线和外部产品形态拆解。 这一组文档偏技术选型、实现路线和外部产品形态拆解。
@@ -30,7 +30,7 @@
- [CREATIVE_INTERACTIVE_CONTENT_AGENT_TECHNICAL_SOLUTION_2026-05-05.md](./CREATIVE_INTERACTIVE_CONTENT_AGENT_TECHNICAL_SOLUTION_2026-05-05.md):冻结基于 LangChain-Rust 的创意互动内容生成 Agent 技术方案,明确首版只支持拼图模板、必须显式展示模板选择和积分范围,通过拼图模块 Tool/模板协议填充同一份草稿字段,支持单关卡与多关卡图片生成、立即试玩、表单化编辑和 Agent 自然语言修订草稿字段。 - [CREATIVE_INTERACTIVE_CONTENT_AGENT_TECHNICAL_SOLUTION_2026-05-05.md](./CREATIVE_INTERACTIVE_CONTENT_AGENT_TECHNICAL_SOLUTION_2026-05-05.md):冻结基于 LangChain-Rust 的创意互动内容生成 Agent 技术方案,明确首版只支持拼图模板、必须显式展示模板选择和积分范围,通过拼图模块 Tool/模板协议填充同一份草稿字段,支持单关卡与多关卡图片生成、立即试玩、表单化编辑和 Agent 自然语言修订草稿字段。
- [VISUAL_NOVEL_PROMPT_AND_LLM_TOOLS_VN03_2026-05-05.md](./VISUAL_NOVEL_PROMPT_AND_LLM_TOOLS_VN03_2026-05-05.md):记录视觉小说模板 `VN-03` Prompt / LLM 工具落地,包含创作底稿 Prompt、运行时 GM Prompt、repair Prompt、工具参数 schema、Responses 请求口径和定向验证结果。 - [VISUAL_NOVEL_PROMPT_AND_LLM_TOOLS_VN03_2026-05-05.md](./VISUAL_NOVEL_PROMPT_AND_LLM_TOOLS_VN03_2026-05-05.md):记录视觉小说模板 `VN-03` Prompt / LLM 工具落地,包含创作底稿 Prompt、运行时 GM Prompt、repair Prompt、工具参数 schema、Responses 请求口径和定向验证结果。
- [VISUAL_NOVEL_IMPLEMENTATION_HANDOFF_2026-05-07.md](./VISUAL_NOVEL_IMPLEMENTATION_HANDOFF_2026-05-07.md):记录视觉小说模板 `VN-13` 实现收口、当前正式入口、表目录、路由、作品 / 运行 / 资产和负向扫描口径。 - [VISUAL_NOVEL_IMPLEMENTATION_HANDOFF_2026-05-07.md](./VISUAL_NOVEL_IMPLEMENTATION_HANDOFF_2026-05-07.md):记录视觉小说模板 `VN-13` 实现收口、当前正式入口、表目录、路由、作品 / 运行 / 资产和负向扫描口径。
- [PROFILE_TASK_AND_TRACKING_SYSTEM_2026-05-03.md](./PROFILE_TASK_AND_TRACKING_SYSTEM_2026-05-03.md):冻结个人任务与埋点系统首版方案,明确 `tracking_event``tracking_daily_stat``profile_task_config`、任务进度、领奖记录和点钱包流水的边界。 - [PROFILE_TASK_AND_TRACKING_SYSTEM_2026-05-03.md](./PROFILE_TASK_AND_TRACKING_SYSTEM_2026-05-03.md):冻结个人任务与埋点系统首版方案,明确 `tracking_event``tracking_daily_stat``profile_task_config`、任务进度、领奖记录和点钱包流水的边界。
- [SQUARE_HOLE_IMAGE_SLOT_AND_RUNTIME_INTERACTION_FIX_2026-05-06.md](./SQUARE_HOLE_IMAGE_SLOT_AND_RUNTIME_INTERACTION_FIX_2026-05-06.md):记录方洞挑战结果页图片槽位局部生成、洞口图历史素材、运行态拖拽与点击投放交互的修正口径。 - [SQUARE_HOLE_IMAGE_SLOT_AND_RUNTIME_INTERACTION_FIX_2026-05-06.md](./SQUARE_HOLE_IMAGE_SLOT_AND_RUNTIME_INTERACTION_FIX_2026-05-06.md):记录方洞挑战结果页图片槽位局部生成、洞口图历史素材、运行态拖拽与点击投放交互的修正口径。
- [MAINCLOUD_REFERENCE_REMOVAL_POLICY_2026-05-06.md](./MAINCLOUD_REFERENCE_REMOVAL_POLICY_2026-05-06.md):冻结 Maincloud 历史残留引用禁用策略,明确后续不得新增、运行或引用 `api-server:maincloud``GENARRATIVE_SPACETIME_MAINCLOUD_*` 和相关测试/文档口径。 - [MAINCLOUD_REFERENCE_REMOVAL_POLICY_2026-05-06.md](./MAINCLOUD_REFERENCE_REMOVAL_POLICY_2026-05-06.md):冻结 Maincloud 历史残留引用禁用策略,明确后续不得新增、运行或引用 `api-server:maincloud``GENARRATIVE_SPACETIME_MAINCLOUD_*` 和相关测试/文档口径。
- [PRODUCTION_DEPLOYMENT_PLAN_2026-05-02.md](./PRODUCTION_DEPLOYMENT_PLAN_2026-05-02.md):冻结单机生产部署目标,从旧一体化启动脚本切到 Nginx、systemd 托管 SpacetimeDB 与 Rust `api-server`,并记录生产 Jenkins 流水线拆分计划和首批部署骨架。 - [PRODUCTION_DEPLOYMENT_PLAN_2026-05-02.md](./PRODUCTION_DEPLOYMENT_PLAN_2026-05-02.md):冻结单机生产部署目标,从旧一体化启动脚本切到 Nginx、systemd 托管 SpacetimeDB 与 Rust `api-server`,并记录生产 Jenkins 流水线拆分计划和首批部署骨架。
@@ -83,7 +83,7 @@
- [SERVER_RS_DDD_PARALLEL_TASKLIST_2026-04-29.md](./SERVER_RS_DDD_PARALLEL_TASKLIST_2026-04-29.md):把 `server-rs` DDD 一次性重构拆成全局可并行工作包,覆盖 `module-*``spacetime-module``spacetime-client``api-server``platform-*`、共享契约和前端接入的依赖、边界与验收命令。 - [SERVER_RS_DDD_PARALLEL_TASKLIST_2026-04-29.md](./SERVER_RS_DDD_PARALLEL_TASKLIST_2026-04-29.md):把 `server-rs` DDD 一次性重构拆成全局可并行工作包,覆盖 `module-*``spacetime-module``spacetime-client``api-server``platform-*`、共享契约和前端接入的依赖、边界与验收命令。
- [SERVER_RS_DDD_FULL_REFACTOR_2026-04-28.md](./SERVER_RS_DDD_FULL_REFACTOR_2026-04-28.md):冻结 `server-rs` 一次性 DDD 重构总纲,明确 crate 依赖方向、模块目录、上下文聚合/命令/事件/读模型、SpacetimeDB adapter 映射和表结构变更约束。 - [SERVER_RS_DDD_FULL_REFACTOR_2026-04-28.md](./SERVER_RS_DDD_FULL_REFACTOR_2026-04-28.md):冻结 `server-rs` 一次性 DDD 重构总纲,明确 crate 依赖方向、模块目录、上下文聚合/命令/事件/读模型、SpacetimeDB adapter 映射和表结构变更约束。
- [SPACETIMEDB_SCHEMA_CHANGE_CONSTRAINTS.md](./SPACETIMEDB_SCHEMA_CHANGE_CONSTRAINTS.md):冻结 SpacetimeDB 表结构变更约束、自动迁移可接受范围、冲突后的系统行为,以及保留旧数据的增量迁移流程;凡涉及 `spacetime publish`、表字段调整或 `migration.rs` 对齐时优先参考。 - [SPACETIMEDB_SCHEMA_CHANGE_CONSTRAINTS.md](./SPACETIMEDB_SCHEMA_CHANGE_CONSTRAINTS.md):冻结 SpacetimeDB 表结构变更约束、自动迁移可接受范围、冲突后的系统行为,以及保留旧数据的增量迁移流程;凡涉及 `spacetime publish`、表字段调整或 `migration.rs` 对齐时优先参考。
- [PRODUCT_NAMING_BAIMENG_RENAME_2026-05-01.md](./PRODUCT_NAMING_BAIMENG_RENAME_2026-05-01.md):冻结当前对外中文命名,产品展示名统一为“百梦”,消费单位为“点”,公开账号标识为“百梦号”,创作侧称谓为“百梦主”。 - [PRODUCT_NAMING_BAIMENG_RENAME_2026-05-01.md](./PRODUCT_NAMING_BAIMENG_RENAME_2026-05-01.md):冻结当前对外中文命名,产品展示名统一为“陶泥儿”,消费单位为“点”,公开账号标识为“陶泥号”,创作侧称谓为“陶泥儿主”。
- [SPACETIMEDB_CLOUD_CONFIG_REMOVAL_2026-05-02.md](./SPACETIMEDB_CLOUD_CONFIG_REMOVAL_2026-05-02.md):记录旧云端 SpacetimeDB 配置、发布脚本和默认文档口径的移除结果,冻结后续仅使用本地或显式 `SERVER_URL` 的运维规则。 - [SPACETIMEDB_CLOUD_CONFIG_REMOVAL_2026-05-02.md](./SPACETIMEDB_CLOUD_CONFIG_REMOVAL_2026-05-02.md):记录旧云端 SpacetimeDB 配置、发布脚本和默认文档口径的移除结果,冻结后续仅使用本地或显式 `SERVER_URL` 的运维规则。
- [SPACETIMEDB_LOCAL_REPLICA_IDENTITY_MISMATCH_FIX_2026-04-30.md](./SPACETIMEDB_LOCAL_REPLICA_IDENTITY_MISMATCH_FIX_2026-04-30.md):记录本地 standalone 启动时报 `mismatched database identity` 的数据目录/replica 数据残留根因、备份重建步骤和脚本诊断口径。 - [SPACETIMEDB_LOCAL_REPLICA_IDENTITY_MISMATCH_FIX_2026-04-30.md](./SPACETIMEDB_LOCAL_REPLICA_IDENTITY_MISMATCH_FIX_2026-04-30.md):记录本地 standalone 启动时报 `mismatched database identity` 的数据目录/replica 数据残留根因、备份重建步骤和脚本诊断口径。
- [AUTH_SNAPSHOT_AND_MATCH3D_LOCAL_DEV_FIX_2026-05-01.md](./AUTH_SNAPSHOT_AND_MATCH3D_LOCAL_DEV_FIX_2026-05-01.md):记录远端库挂起导致认证快照同步和抓大鹅创作失败的根因、认证同步非阻断修复、`/api/creation` Vite 代理补齐和本地 SpacetimeDB 可跑链路。 - [AUTH_SNAPSHOT_AND_MATCH3D_LOCAL_DEV_FIX_2026-05-01.md](./AUTH_SNAPSHOT_AND_MATCH3D_LOCAL_DEV_FIX_2026-05-01.md):记录远端库挂起导致认证快照同步和抓大鹅创作失败的根因、认证同步非阻断修复、`/api/creation` Vite 代理补齐和本地 SpacetimeDB 可跑链路。

View File

@@ -2,7 +2,7 @@
## 背景 ## 背景
世界创作结果页已经提供“作品测试”入口,但测试运行时此前缺少与“幕预览”一致的显式退出按钮。百梦主进入测试后只能依赖浏览器返回、刷新或其他间接链路离开,不符合独立运行时面板的交互语义。 世界创作结果页已经提供“作品测试”入口,但测试运行时此前缺少与“幕预览”一致的显式退出按钮。陶泥儿主进入测试后只能依赖浏览器返回、刷新或其他间接链路离开,不符合独立运行时面板的交互语义。
## 本次约束 ## 本次约束

View File

@@ -2,7 +2,7 @@
## 背景 ## 背景
幕预览和测试作品用于百梦主检查玩法表现,不能被当作玩家正式游玩记录。若这类运行时复用正式 RPG 壳、story action 或 snapshot 接口,必须在进入个人存档页、游玩统计、作品游玩历史前被过滤。 幕预览和测试作品用于陶泥儿主检查玩法表现,不能被当作玩家正式游玩记录。若这类运行时复用正式 RPG 壳、story action 或 snapshot 接口,必须在进入个人存档页、游玩统计、作品游玩历史前被过滤。
## 落地约束 ## 落地约束

View File

@@ -10,7 +10,7 @@
1. 草稿层可以承载 `scene chapter / scene act` 1. 草稿层可以承载 `scene chapter / scene act`
2. 后端可以把 `scene_chapter` 编译成正式蓝图 2. 后端可以把 `scene_chapter` 编译成正式蓝图
3. 百梦主可以在现有场景编辑弹层里看到并编辑多幕配置 3. 陶泥儿主可以在现有场景编辑弹层里看到并编辑多幕配置
4. 编辑后的幕信息可以正确写回 `sceneChapterBlueprints` 4. 编辑后的幕信息可以正确写回 `sceneChapterBlueprints`
5. 运行时共享层先具备读取幕背景、主角色、相遇 NPC 池的基础能力 5. 运行时共享层先具备读取幕背景、主角色、相遇 NPC 池的基础能力
6. 当前幕主角色的负好感 `5` 轮聊天限制先形成首个可运行闭环 6. 当前幕主角色的负好感 `5` 轮聊天限制先形成首个可运行闭环
@@ -60,7 +60,7 @@
前端已完成第一批接入: 前端已完成第一批接入:
1. `scene_chapter` 不再作为独立 Tab / 独立卡片暴露给百梦 1. `scene_chapter` 不再作为独立 Tab / 独立卡片暴露给陶泥儿
2. 多幕配置已内嵌到 `CustomWorldEntityEditorModal.tsx``LandmarkEditor` 2. 多幕配置已内嵌到 `CustomWorldEntityEditorModal.tsx``LandmarkEditor`
3. 单幕编辑已从文本表单切成“背景大图预览 + 3 个角色槽位”的轻量交互 3. 单幕编辑已从文本表单切成“背景大图预览 + 3 个角色槽位”的轻量交互
4. “幕标题 / 幕摘要 / 幕目标 / 过渡钩子”已从场景手工编辑区移除,继续留在草稿生成与编译层 4. “幕标题 / 幕摘要 / 幕目标 / 过渡钩子”已从场景手工编辑区移除,继续留在草稿生成与编译层
@@ -88,7 +88,7 @@
7. 幕预览运行时已补 custom world NPC 的视觉兜底链路,优先使用 `visual / imageSrc` 渲染,避免角色形象或动画空白 7. 幕预览运行时已补 custom world NPC 的视觉兜底链路,优先使用 `visual / imageSrc` 渲染,避免角色形象或动画空白
8. 当前幕小预览已调整为左侧玩家、右侧敌对/相遇角色的构图NPC 站位采用一前两后 8. 当前幕小预览已调整为左侧玩家、右侧敌对/相遇角色的构图NPC 站位采用一前两后
前排主角色与玩家角色保持同一 y 轴后排两个角色改为同一列、x 轴对齐并上下分布,且后排整体 y 轴中点与前排主角色一致 前排主角色与玩家角色保持同一 y 轴后排两个角色改为同一列、x 轴对齐并上下分布,且后排整体 y 轴中点与前排主角色一致
9. 新增幕默认只带 1 个主角色,后续槽位由百梦主按需补充 9. 新增幕默认只带 1 个主角色,后续槽位由陶泥儿主按需补充
10. 小预览里的名字已移动到角色头顶,角色渲染不再带方形底板,避免遮挡场景背景 10. 小预览里的名字已移动到角色头顶,角色渲染不再带方形底板,避免遮挡场景背景
11. 幕预览复用真实游戏壳时隐藏左上角角色等级徽标,退出入口固定在上方画面区域底部居中,并使用“结束预览”作为操作文案 11. 幕预览复用真实游戏壳时隐藏左上角角色等级徽标,退出入口固定在上方画面区域底部居中,并使用“结束预览”作为操作文案
12. 创作侧场景列表封面、多幕配置卡片、配置背景弹层统一读取同一张场景显示图;在任一幕保存背景时同步回全部幕背景字段和场景兼容图,避免同一场景在不同层级出现不同预览图 12. 创作侧场景列表封面、多幕配置卡片、配置背景弹层统一读取同一张场景显示图;在任一幕保存背景时同步回全部幕背景字段和场景兼容图,避免同一场景在不同层级出现不同预览图

View File

@@ -411,7 +411,7 @@ Access-Control-Allow-Credentials: true
职责: 职责:
- 面向百梦主、运营、内部编辑器 - 面向陶泥儿主、运营、内部编辑器
- 必须鉴权 - 必须鉴权
- 必须审计 - 必须审计
- 不建议对公网完全开放 - 不建议对公网完全开放
@@ -471,7 +471,7 @@ flowchart TD
当出现这些需求时,再进入下一阶段: 当出现这些需求时,再进入下一阶段:
- 多人同时在线 - 多人同时在线
-百梦主协作 -陶泥儿主协作
- 图片/视频生成任务变多 - 图片/视频生成任务变多
- 需要账号体系、存档、云同步 - 需要账号体系、存档、云同步
- 需要审计和版本回滚 - 需要审计和版本回滚

View File

@@ -109,7 +109,7 @@ src/
聚合: 聚合:
1. `AuthUser`:账号、公开百梦号、登录方式、绑定状态、token version。 1. `AuthUser`:账号、公开陶泥号、登录方式、绑定状态、token version。
2. `RefreshSession`refresh token hash、客户端信息、过期、吊销、last seen。 2. `RefreshSession`refresh token hash、客户端信息、过期、吊销、last seen。
3. `SmsVerification`:手机号、场景、验证码状态、冷却、失败次数。 3. `SmsVerification`:手机号、场景、验证码状态、冷却、失败次数。
4. `WechatBinding`:微信 provider 身份、union id、绑定状态。 4. `WechatBinding`:微信 provider 身份、union id、绑定状态。

View File

@@ -53,7 +53,7 @@
10. `RefreshSessionRecord` 10. `RefreshSessionRecord`
11. `AuthStoreSnapshotRecord` 11. `AuthStoreSnapshotRecord`
12. 密码长度、短信验证码长度、验证码 TTL、冷却、失败次数等领域常量。 12. 密码长度、短信验证码长度、验证码 TTL、冷却、失败次数等领域常量。
13. 手机号规范化、手机号脱敏、公开百梦号规范化、验证码 key 构造等纯函数。 13. 手机号规范化、手机号脱敏、公开陶泥号规范化、验证码 key 构造等纯函数。
本次将以下写入输入落入 `commands.rs` 本次将以下写入输入落入 `commands.rs`

View File

@@ -71,7 +71,7 @@
本次继续把留在 SpacetimeDB adapter 中的纯规则收回 `module-runtime` 本次继续把留在 SpacetimeDB adapter 中的纯规则收回 `module-runtime`
1. played world、snapshot wallet ledger、save archive、recharge order、recharge wallet ledger、redeem usage、redeem ledger 等 ID 生成规则。 1. played world、snapshot wallet ledger、save archive、recharge order、recharge wallet ledger、redeem usage、redeem ledger 等 ID 生成规则。
2. 首充点奖励计算。 2. 首充点奖励计算。
3. 会员购买续期时间计算。 3. 会员购买续期时间计算。
4. 邀请码 deterministic 生成、邀请链接、每日奖励窗口和邀请人奖励上限判断。 4. 邀请码 deterministic 生成、邀请链接、每日奖励窗口和邀请人奖励上限判断。
5. 兑换码 public / unique / private 模式使用资格校验。 5. 兑换码 public / unique / private 模式使用资格校验。

View File

@@ -206,7 +206,7 @@
1. 密码登录仍由 `user_account.password_hash` 承担 1. 密码登录仍由 `user_account.password_hash` 承担
2. 本轮不引入 `password` provider identity 2. 本轮不引入 `password` provider identity
3. 密码登录只接受已绑定手机号的账号,不支持邮箱、用户名或百梦号作为登录身份 3. 密码登录只接受已绑定手机号的账号,不支持邮箱、用户名或陶泥号作为登录身份
4. 密码登录不创建账号,新账号只由手机号验证码登录创建 4. 密码登录不创建账号,新账号只由手机号验证码登录创建
### 9.2 `POST /api/auth/phone/login` ### 9.2 `POST /api/auth/phone/login`

Some files were not shown because too many files have changed in this diff Show More