diff --git a/apps/ai-game-creator-shell/src/features/agent-runtime/model.ts b/apps/ai-game-creator-shell/src/features/agent-runtime/model.ts index 32e2714c7..5330ee566 100644 --- a/apps/ai-game-creator-shell/src/features/agent-runtime/model.ts +++ b/apps/ai-game-creator-shell/src/features/agent-runtime/model.ts @@ -1212,6 +1212,18 @@ export function projectNameFromPath(projectPath: string) { ); } +export function projectWorkspaceStatusForDisplay(workspaceStatus: string) { + const openedPrefix = '已打开:'; + if (!workspaceStatus.startsWith(openedPrefix)) { + return workspaceStatus; + } + const projectPath = workspaceStatus.slice(openedPrefix.length).trim(); + if (!/[\\/]/u.test(projectPath)) { + return workspaceStatus; + } + return `${openedPrefix}${projectNameFromPath(projectPath)}`; +} + export function mergeProjectSupervisorConversation( projectRecords: LocalConversationMessageRecord[], supervisorRecords: LocalConversationMessageRecord[], diff --git a/apps/ai-game-creator-shell/src/features/asset-canvas/AssetCanvasSurface.tsx b/apps/ai-game-creator-shell/src/features/asset-canvas/AssetCanvasSurface.tsx index b5cabdace..551e3033c 100644 --- a/apps/ai-game-creator-shell/src/features/asset-canvas/AssetCanvasSurface.tsx +++ b/apps/ai-game-creator-shell/src/features/asset-canvas/AssetCanvasSurface.tsx @@ -106,6 +106,13 @@ export type AssetCanvasCommitNotification = { eventId?: string; }; +export const ASSET_CANVAS_KIND_OPTIONS = [ + { value: 'game-art', label: '普通游戏美术' }, + { value: 'icon-spec', label: '统一视觉规范' }, + { value: 'ui-prototype', label: '游戏界面原型' }, + { value: 'art-spritesheet', label: '核心美术图集' }, +] as const; + type RuntimeCanvasLayer = CanvasLayer & { mediaRef: ImageCanvasMediaRef }; type PendingGenerationIdentity = { @@ -303,6 +310,8 @@ export function AssetCanvasSurface({ scope, sessionId, expectedHostRevision, + initialAssetName = '画布素材', + initialAssetKind = 'game-art', onCancel, onCommitted, onSaveAttempt, @@ -312,11 +321,15 @@ export function AssetCanvasSurface({ scope: ImageCanvasHostScope; sessionId: string; expectedHostRevision: string; + initialAssetName?: string; + initialAssetKind?: string; onCancel?: () => void; onCommitted?: (input: AssetCanvasCommitNotification) => void; onSaveAttempt?: (input: AssetCanvasSaveAttempt) => void; renderImage?: RenderAssetCanvasImage; }) { + const resolvedInitialAssetName = initialAssetName.trim() || '画布素材'; + const resolvedInitialAssetKind = initialAssetKind.trim() || 'game-art'; const stableScope = useMemo( () => ({ projectId: scope.projectId, @@ -339,8 +352,8 @@ export function AssetCanvasSurface({ const [backgroundColor, setBackgroundColor] = useState('#f4f4f5'); const [selectedLayerIds, setSelectedLayerIds] = useState([]); const [notice, setNotice] = useState(''); - const [assetName, setAssetName] = useState('画布素材'); - const [assetKind, setAssetKind] = useState('asset'); + const [assetName, setAssetName] = useState(resolvedInitialAssetName); + const [assetKind, setAssetKind] = useState(resolvedInitialAssetKind); const [exportMediaType, setExportMediaType] = useState< 'image/png' | 'image/jpeg' | 'image/webp' >('image/png'); @@ -385,6 +398,12 @@ export function AssetCanvasSurface({ const onWalletBalanceMayHaveChanged = useWalletStore( (state) => state.onWalletBalanceMayHaveChanged, ); + const assetSettingsDisabled = + lifecycle.kind === 'canvas.saving' || + lifecycle.kind === 'canvas.generating'; + const inheritedUnknownAssetKind = + stableScope.intent === 'refine' && + !ASSET_CANVAS_KIND_OPTIONS.some((option) => option.value === assetKind); layersRef.current = layers; viewportRef.current = viewport; @@ -1425,33 +1444,56 @@ export function AssetCanvasSurface({ className="asset-canvas-surface__savebar" aria-label="素材保存设置" > - setAssetName(event.target.value)} - disabled={lifecycle.kind === 'canvas.generating'} - /> - setAssetKind(event.target.value)} - disabled={lifecycle.kind === 'canvas.generating'} - /> - + + +