fix(assets): 复用生成素材身份并保留空缓存同步前的编辑 (#690)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Catlaxy AI
2026-10-06 09:24:06 +08:00
committed by GitHub
parent 67e2e1ebbf
commit 544daa4b9f
11 changed files with 798 additions and 14 deletions

View File

@@ -99,6 +99,12 @@ const queuedAssetPersists = new Map<string, QueuedAssetPersist>();
const assetPersistTokens = new Map<string, number>();
const assetOperations = new Set<Promise<unknown>>();
const generationAssetFailures = new Map<string, unknown>();
const generationAssetDefaults = new Map<string, Map<string, Asset>>();
// 只记录本次实际创建的生成输入,不能把重读的缓存(可能已编辑)当作默认值。
export function getGenerationAssetDefaults(id: string): Asset | undefined {
return generationAssetDefaults.get(getActiveUserScope())?.get(id);
}
function recordAssetStorageDocument(scope: string, document: AssetStorageDocument) {
observedAssetPersists.set(scope, {
@@ -337,13 +343,17 @@ export const useAssetStore = create<AssetStore>()(
assetId: id,
createAsset: () => {
const now = new Date().toISOString();
return parseAssetRecord({
const created = parseAssetRecord({
...asset,
id,
createdAt: now,
updatedAt: now,
metadata: { ...asset.metadata, generationEffectKey: effectKey },
});
const defaults = generationAssetDefaults.get(scope) ?? new Map<string, Asset>();
defaults.set(id, structuredClone(created));
generationAssetDefaults.set(scope, defaults);
return created;
},
updateAssets: (updater) => {
withAssetStorePersistenceSuppressed(() => {
@@ -408,6 +418,7 @@ export const useAssetStore = create<AssetStore>()(
removeAsset: async (id) => get().removeAssets([id]),
removeAssets: async (ids) => {
const removedIds = new Set(ids);
for (const id of ids) generationAssetDefaults.get(getActiveUserScope())?.delete(id);
let remainingAssets: Asset[] = [];
let hasLocalMedia = false;
set((state) => {