From b189ca1b58e92df28f46d0c99dd3ae86a7edb4bc Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 1 Jun 2026 18:33:12 +0800 Subject: [PATCH] fix: honor PSD super locked image slots --- lib/agents/psd-render-service.ts | 9 ++++++--- lib/agents/psd-template-config.ts | 7 +++---- lib/agents/psd-template-parser.ts | 11 +++++++---- lib/agents/psd-template-repair.ts | 19 ++++++------------- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/lib/agents/psd-render-service.ts b/lib/agents/psd-render-service.ts index 4fc849950..2132ae636 100644 --- a/lib/agents/psd-render-service.ts +++ b/lib/agents/psd-render-service.ts @@ -150,11 +150,14 @@ export async function executeAgentPsdTemplateRenderRequest( ); } - if (!isAgentPsdTemplateLayerUserEditable(layer)) { + const canReplaceImageLayer = + isAgentPsdImageLayerSlot(layer) && layer.isEditable; + const canEditTextLayer = isAgentPsdTemplateLayerUserEditable(layer); + if (!canReplaceImageLayer && !canEditTextLayer) { continue; } - if (isAgentPsdImageLayerSlot(layer)) { + if (canReplaceImageLayer) { const explicitUrl = String(body.imageAssignments[layer.id] || "").trim(); if (explicitUrl) { imageAssignments[layer.id] = explicitUrl; @@ -172,7 +175,7 @@ export async function executeAgentPsdTemplateRenderRequest( } } - if (isAgentPsdTextLayerSlot(layer)) { + if (canEditTextLayer && isAgentPsdTextLayerSlot(layer)) { if (Object.hasOwn(body.textAssignments, layer.id)) { textAssignments[layer.id] = String( body.textAssignments[layer.id] ?? "" diff --git a/lib/agents/psd-template-config.ts b/lib/agents/psd-template-config.ts index 0b6921118..bdbb33f32 100644 --- a/lib/agents/psd-template-config.ts +++ b/lib/agents/psd-template-config.ts @@ -411,10 +411,9 @@ export function parseAgentPsdTemplateLayers(value: unknown) { layers.push({ ...baseRecord, slotType: "image", - isDefaultResultSource: - isEditable && !isSuperLocked && record.isDefaultResultSource === true, + isDefaultResultSource: isEditable && record.isDefaultResultSource === true, allowUserUploadOverride: - isEditable && !isSuperLocked ? record.allowUserUploadOverride !== false : false, + isEditable ? record.allowUserUploadOverride !== false : false, replaceMode: normalizeAgentPsdTemplateReplaceMode(record.replaceMode), contentBounds: normalizeAgentPsdTemplateImageContentBounds( record.contentBounds, @@ -617,7 +616,7 @@ export function getAgentPsdTemplateRuntimeMissingLayers(template: AgentPsdTempla if (hasUsableRenderBase) { return ( isAgentPsdImageLayerSlot(layer) && - isAgentPsdTemplateLayerUserEditable(layer) && + layer.isEditable && !hasAgentPsdTemplateStoredLayerSource(layer) ); } diff --git a/lib/agents/psd-template-parser.ts b/lib/agents/psd-template-parser.ts index c62b6c870..a3032065e 100644 --- a/lib/agents/psd-template-parser.ts +++ b/lib/agents/psd-template-parser.ts @@ -728,7 +728,11 @@ function shouldPrepareLayerPreview( layer: AgentPsdTemplateLayerSlot, assetProfile: PsdTemplateLayerAssetProfile ) { - return assetProfile === "full" || isAgentPsdTemplateLayerUserEditable(layer); + return ( + assetProfile === "full" || + isAgentPsdTemplateLayerUserEditable(layer) || + (isAgentPsdImageLayerSlot(layer) && layer.isEditable) + ); } function shouldPrepareLayerSource( @@ -739,7 +743,7 @@ function shouldPrepareLayerSource( return true; } - return isAgentPsdImageLayerSlot(layer) && isAgentPsdTemplateLayerUserEditable(layer); + return isAgentPsdImageLayerSlot(layer) && layer.isEditable; } export async function preparePsdTemplateRenderAssets(params: { @@ -795,8 +799,7 @@ export async function preparePsdTemplateRenderAssets(params: { isAgentPsdTextLayerSlot(targetLayer) && targetLayer.styleSource !== "custom"; const shouldResolveImageBounds = - isAgentPsdTemplateLayerUserEditable(targetLayer) && - isAgentPsdImageLayerSlot(targetLayer); + isAgentPsdImageLayerSlot(targetLayer) && targetLayer.isEditable; if ( !shouldUploadPreview && diff --git a/lib/agents/psd-template-repair.ts b/lib/agents/psd-template-repair.ts index bcd260523..f83ee6ec1 100644 --- a/lib/agents/psd-template-repair.ts +++ b/lib/agents/psd-template-repair.ts @@ -10,7 +10,6 @@ import { AGENT_PSD_TEMPLATE_ASSET_VERSION, hasAgentPsdTemplateRenderSegments, isAgentPsdImageLayerSlot, - isAgentPsdLayerSuperLocked, isAgentPsdTemplateLayerUserEditable, isAgentPsdTextLayerSlot, type AgentPsdTemplate, @@ -42,7 +41,7 @@ function hasMissingLayerAssets(template: AgentPsdTemplate) { if (hasRenderBase) { return ( isAgentPsdImageLayerSlot(layer) && - isAgentPsdTemplateLayerUserEditable(layer) && + layer.isEditable && !String(layer.sourceUrl || "").trim() ); } @@ -74,19 +73,13 @@ function hasStaticTemplateLayers(template: AgentPsdTemplate) { function repairEditableImageLayerSelection(template: AgentPsdTemplate) { const imageLayers = template.layers.filter(isAgentPsdImageLayerSlot); - const unlockedImageLayers = imageLayers.filter( - (layer) => !isAgentPsdLayerSuperLocked(layer) - ); - if (unlockedImageLayers.length === 0) { + if (imageLayers.length === 0) { return template.layers; } - const editableImageLayers = unlockedImageLayers.filter( - isAgentPsdTemplateLayerUserEditable - ); - const defaultImageLayer = unlockedImageLayers.find( - (layer) => - isAgentPsdTemplateLayerUserEditable(layer) && layer.isDefaultResultSource + const editableImageLayers = imageLayers.filter((layer) => layer.isEditable); + const defaultImageLayer = imageLayers.find( + (layer) => layer.isEditable && layer.isDefaultResultSource ); const shouldAutoRepairSelection = editableImageLayers.length === 0 || @@ -98,7 +91,7 @@ function repairEditableImageLayerSelection(template: AgentPsdTemplate) { } const nextPrimaryLayerId = pickPrimaryPsdImageLayerId({ - imageLayers: unlockedImageLayers, + imageLayers, canvasWidth: template.width, canvasHeight: template.height, });