diff --git a/apps/ai-game-creator-shell/src/features/ui-editor/uiDesignResourceBridge.ts b/apps/ai-game-creator-shell/src/features/ui-editor/uiDesignResourceBridge.ts index c42ca8c58..358af30c9 100644 --- a/apps/ai-game-creator-shell/src/features/ui-editor/uiDesignResourceBridge.ts +++ b/apps/ai-game-creator-shell/src/features/ui-editor/uiDesignResourceBridge.ts @@ -6,6 +6,7 @@ import { GAME_CREATION_APP_UI_DESIGN_DOC_ASSET_KIND, GAME_CREATION_APP_UI_DESIGN_DOC_MEDIA_TYPE, } from '../../../../../packages/shared/src/contracts/gameCreationApp'; +import { parseGameCreationAppAssetKind } from '../../contracts/assetKind'; export type UiDesignResourceBridgeResult = { asset: GameCreationAppAssetManifestEntry; @@ -52,7 +53,10 @@ export function findLinkedUiDesignResource( manifest.assets .filter( (asset) => - asset.kind === GAME_CREATION_APP_UI_DESIGN_DOC_ASSET_KIND && + parseGameCreationAppAssetKind( + asset.kind, + 'ui-design-resource-bridge.linked-document', + ) === GAME_CREATION_APP_UI_DESIGN_DOC_ASSET_KIND && asset.mediaType === GAME_CREATION_APP_UI_DESIGN_DOC_MEDIA_TYPE && asset.source.referenceResourceIds?.some((reference) => referenceIds.has(reference), @@ -84,7 +88,13 @@ export async function ensureUiDesignResourceForPrototype({ const prototype = manifest.assets.find( (asset) => asset.id === normalizedPrototypeAssetId, ); - if (!prototype || prototype.kind !== 'ui-prototype') { + if ( + !prototype || + parseGameCreationAppAssetKind( + prototype.kind, + 'ui-design-resource-bridge.prototype', + ) !== 'ui-design' + ) { throw new Error('目标资源不是 UI 原型图片'); } if (!prototype.mediaType.toLowerCase().startsWith('image/')) { diff --git a/apps/ai-game-creator-shell/tests/uiDesignResourceBridge.test.ts b/apps/ai-game-creator-shell/tests/uiDesignResourceBridge.test.ts index 18b2a235d..42d2f5003 100644 --- a/apps/ai-game-creator-shell/tests/uiDesignResourceBridge.test.ts +++ b/apps/ai-game-creator-shell/tests/uiDesignResourceBridge.test.ts @@ -16,7 +16,7 @@ import { function manifestWithPrototype(): GameCreationAppManifest { const prototype: GameCreationAppAssetManifestEntry = { id: 'prototype-asset', - kind: 'ui-prototype', + kind: 'ui-design', mediaType: 'image/png', localPath: 'assets/ui-prototype.png', source: { kind: 'canvas', referenceResourceIds: [] }, diff --git a/docs/project-memory/todos/【待办】AGC资源kind枚举化扫描清单-2026-09-15.md b/docs/project-memory/todos/【待办】AGC资源kind枚举化扫描清单-2026-09-15.md index e4085b1d4..e7d293a98 100644 --- a/docs/project-memory/todos/【待办】AGC资源kind枚举化扫描清单-2026-09-15.md +++ b/docs/project-memory/todos/【待办】AGC资源kind枚举化扫描清单-2026-09-15.md @@ -216,5 +216,6 @@ - `src/contracts/assetKind.ts`:消费 Rust 生成的 `GameCreationAppAssetKind`,未知输入记录 `rawKind` / `sourceContext` 并返回 `unknown`,不做旧 alias 转换。 - `src/features/project-workspace/resourceReferences.ts`:资源引用 kind 改为生成枚举类型并通过 parser 收口。 - `src/view/project-development/index.tsx`:画布引用入口通过同一 parser 构造资源引用 kind。 +- `src/features/ui-editor/uiDesignResourceBridge.ts`:UI 原型 manifest kind 只接受 `ui-design`,UI 文档链接只接受 `ui-design-doc`;旧 `ui-prototype` 不再 alias。 其余 `packages/shared` import 和前端 manifest `kind: string` 字段仍未迁移,继续作为后续小切片,不在本次提交中伪装完成。