From b00a3f80576949567bf3320f0c6c92b4ed0a649d Mon Sep 17 00:00:00 2001 From: kdletters Date: Mon, 24 Aug 2026 18:29:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E8=B5=84=E6=BA=90=E7=94=BB?= =?UTF-8?q?=E5=B8=83=E9=A1=B6=E9=83=A8=E6=89=8B=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除资源画布顶部的生成视频、生成音效、生成背景音乐和新增 UI 设计按钮 移除仅服务于这些入口的前端 handler 与入口配置 保留 Agent 语义生成、已有资源编辑、生成动画和未完成任务恢复能力 补充顶部入口消失与画布级操作保留的定向回归测试 同步更新 AGC 配置白名单、技术方案与项目决策记录 --- .../scripts/check-config.mjs | 13 +-- .../src/view/project-development/index.tsx | 110 ++---------------- .../project-development/resourceEditModel.ts | 14 --- .../appSurface/project-development.suite.ts | 23 +++- .../projectResourceLiveIntegration.test.tsx | 26 +++-- .../tests/resourceEditModel.test.ts | 9 -- .../shared-memory/decision-log.md | 6 + ...案】AI游戏创作智能体App实施计划-2026-06-24.md | 2 +- ...】GameAgent资源自由画板与快速编辑-2026-08-20.md | 2 + 9 files changed, 59 insertions(+), 146 deletions(-) diff --git a/apps/ai-game-creator-shell/scripts/check-config.mjs b/apps/ai-game-creator-shell/scripts/check-config.mjs index 1989106a5..9732b34b5 100644 --- a/apps/ai-game-creator-shell/scripts/check-config.mjs +++ b/apps/ai-game-creator-shell/scripts/check-config.mjs @@ -127,6 +127,7 @@ const rustSharedContractSource = fs.readFileSync( const allowedUncalledTauriCommands = [ 'chat_with_game_creator_agent', 'check_ui_editor_font_glyph_coverage', + 'create_ui_design_resource', 'open_game_creator_launcher_window', 'open_game_creator_workspace_window', ]; @@ -1547,13 +1548,11 @@ if (!viteConfigSource.includes('allow: [repoRoot]')) { ); } -if ( - !( - tauriConfig.build?.beforeDevCommand?.includes( - 'run ai-game-creator-shell:dev-server', - ) || tauriConfig.build?.beforeDevCommand?.includes('run agc:serve') - ) -) { +if (!( + tauriConfig.build?.beforeDevCommand?.includes( + 'run ai-game-creator-shell:dev-server', + ) || tauriConfig.build?.beforeDevCommand?.includes('run agc:serve') +)) { throw new Error( 'AI game creator shell beforeDevCommand must start the selected Vite dev server', ); diff --git a/apps/ai-game-creator-shell/src/view/project-development/index.tsx b/apps/ai-game-creator-shell/src/view/project-development/index.tsx index c8c48d411..3551689db 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/index.tsx +++ b/apps/ai-game-creator-shell/src/view/project-development/index.tsx @@ -106,8 +106,6 @@ import { type ProjectResourceEditCapability, resolveProjectCharacterAnimationCapability, resolveProjectResourceEditCapability, - type ResourceGenerationKind, - resourceGenerationOptions, } from './resourceEditModel'; import { type ResourceEditSubmitInput, @@ -213,12 +211,6 @@ type UiEditorRoute = { resourceLabel: string; }; -type CreateUiDesignResourceResult = { - asset: { id: string }; - manifest: GameCreationAppManifest; - committedProjectRevision: number; -}; - type DeriveLocalProjectResourceResult = { operationId: string; sourceResourceId: string; @@ -1606,8 +1598,7 @@ export default function ProjectDevelopmentView({ } const viewport = resolveViewport(event); const category = viewport?.dataset.resourceSectionScroll as - | ResourceCategory - | undefined; + ResourceCategory | undefined; if (!viewport || !category) { return; } @@ -1626,8 +1617,7 @@ export default function ProjectDevelopmentView({ const event = rawEvent as WebKitGestureEvent; const viewport = resolveViewport(event); const category = viewport?.dataset.resourceSectionScroll as - | ResourceCategory - | undefined; + ResourceCategory | undefined; if (!viewport || !category) { return; } @@ -1739,8 +1729,7 @@ export default function ProjectDevelopmentView({ .querySelectorAll('[data-resource-section-scroll]') .forEach((viewport) => { const category = viewport.dataset.resourceSectionScroll as - | ResourceCategory - | undefined; + ResourceCategory | undefined; if (!category) { return; } @@ -1760,8 +1749,7 @@ export default function ProjectDevelopmentView({ ?.querySelectorAll('[data-resource-section-scroll]') .forEach((viewport) => { const category = viewport.dataset.resourceSectionScroll as - | ResourceCategory - | undefined; + ResourceCategory | undefined; if (!category) { return; } @@ -2258,34 +2246,6 @@ export default function ProjectDevelopmentView({ ], ); - const createUiDesignResource = useCallback(async () => { - const invoke = window.__TAURI__?.core?.invoke; - if (!invoke) { - setAssetCanvasNotice('UI 设计资源需要在客户端内创建'); - return; - } - setAssetCanvasNotice('正在创建 UI 设计…'); - try { - const result = await invoke( - 'create_ui_design_resource', - { projectPath, expectedProjectId: manifest.projectId }, - ); - if (result.manifest.projectId !== manifest.projectId) { - throw new Error('UI 设计资源登记结果与当前项目不一致'); - } - onManifestChange?.(projectPath, result.manifest, { - projectId: result.manifest.projectId, - revision: result.committedProjectRevision, - source: 'asset-command', - }); - setAssetCanvasNotice('UI 设计已创建,正在同步资源与布局…'); - } catch (error) { - setAssetCanvasNotice( - error instanceof Error ? error.message : String(error), - ); - } - }, [manifest.projectId, onManifestChange, projectPath]); - const resetResourceCanvasViewport = useCallback(() => { const canvasSize = resourceCanvasElementSize(resourceCanvasRef.current); setConstrainedResourceCanvasViewport( @@ -2635,39 +2595,6 @@ export default function ProjectDevelopmentView({ [advanceFocusGeneration], ); - const openCreateResource = useCallback( - (kind: ResourceGenerationKind) => { - canvasOpenEpochRef.current += 1; - advanceFocusGeneration(); - const flowId = crypto.randomUUID(); - activeFocusFlowIdRef.current = flowId; - pendingResourceFocusRef.current = null; - setAssetCanvasRoute(null); - setAssetCanvasNotice(''); - const sourceMediaType = kind === 'video' ? 'video/mp4' : 'audio/mpeg'; - setResourceEditorRoute({ - flowId, - operationId: crypto.randomUUID(), - idempotencyKey: crypto.randomUUID(), - resource: null, - capability: { - route: 'derive', - editKind: kind, - sourceMediaType, - semanticNotice: - kind === 'background-music' - ? '将生成全新的背景音乐。' - : kind === 'sound-effect' - ? '将生成全新的音效。' - : '将生成全新的视频。', - generationMode: 'create', - }, - generationMode: 'create', - }); - }, - [advanceFocusGeneration], - ); - const cancelResourceEditor = useCallback(() => { if (resourceEditorRoute) { resourceEditorRevisionRef.current.delete(resourceEditorRoute.operationId); @@ -3277,16 +3204,16 @@ export default function ProjectDevelopmentView({ dependencyLayoutSettled: dependencyLayout.settled, dependencyPositioned: Boolean( intent.resourceId && - dependencyLayout.layout.positions.some( - (position) => position.resourceId === intent.resourceId, - ), + dependencyLayout.layout.positions.some( + (position) => position.resourceId === intent.resourceId, + ), ), typeLayoutSettled: typeLayout.settled, typePositioned: Boolean( intent.resourceId && - typeLayout.layout.positions.some( - (position) => position.resourceId === intent.resourceId, - ), + typeLayout.layout.positions.some( + (position) => position.resourceId === intent.resourceId, + ), ), visible: targetVisible, domRendered: Boolean(card), @@ -3457,23 +3384,6 @@ export default function ProjectDevelopmentView({ : `管理未完成编辑 (${pendingResourceEdits.length})`} ) : null} - {resourceGenerationOptions.map((option) => ( - - ))} -