) {
+ return content.imageName?.replace(/\s+/g, " ").trim() || "image";
+}
+
function imageGeneratorSubmittedPrompt(contents: AgentContent[]) {
return cleanImageGeneratorPrompt(
contents
.map((content, index) => {
if (content.type === "text" && !isSettingsTextSource(content.textSource)) return content.text;
- if (content.type === "image") return `参考图 ${index + 1}:${content.imageUrl}`;
+ if (content.type === "image") return `参考图 ${index + 1}(${agentContentImageName(content)}):${content.imageUrl}`;
return "";
})
.filter((item) => item.trim())
diff --git a/frontend/src/ui/pages/HomePage/index.tsx b/frontend/src/ui/pages/HomePage/index.tsx
index ef1bd36..fde388a 100644
--- a/frontend/src/ui/pages/HomePage/index.tsx
+++ b/frontend/src/ui/pages/HomePage/index.tsx
@@ -736,6 +736,7 @@ export function HomePage() {
onReferenceRemoved={handleReferenceRemoved}
onPasteFile={attachImage}
onSubmit={() => createProject()}
+ submitDisabled={loading || !canSubmitPrompt}
/>
void attachImage(event.target.files?.[0] ?? null)} />
diff --git a/server/img_infinite_canvas.api b/server/img_infinite_canvas.api
index 8ea5522..cf867ef 100644
--- a/server/img_infinite_canvas.api
+++ b/server/img_infinite_canvas.api
@@ -369,6 +369,7 @@ type AgentContent {
Text string `json:"text,optional"`
TextSource string `json:"textSource,optional"`
ImageUrl string `json:"imageUrl,optional"`
+ ImageName string `json:"imageName,optional"`
ImageWidth int64 `json:"imageWidth,optional"`
ImageHeight int64 `json:"imageHeight,optional"`
}
diff --git a/server/internal/application/design_service.go b/server/internal/application/design_service.go
index d2fc1e9..200dfa2 100644
--- a/server/internal/application/design_service.go
+++ b/server/internal/application/design_service.go
@@ -4510,7 +4510,13 @@ func promptFromAgentMessages(messages []design.AgentChatMessage) string {
if builder.Len() > 0 {
builder.WriteString("\n")
}
- builder.WriteString("Reference image: ")
+ builder.WriteString("Reference image")
+ if imageName := strings.TrimSpace(content.ImageName); imageName != "" {
+ builder.WriteString(" (")
+ builder.WriteString(compactReferenceImageName(imageName))
+ builder.WriteString(")")
+ }
+ builder.WriteString(": ")
builder.WriteString(imageURL)
}
}
@@ -4519,6 +4525,10 @@ func promptFromAgentMessages(messages []design.AgentChatMessage) string {
return builder.String()
}
+func compactReferenceImageName(value string) string {
+ return strings.Join(strings.Fields(value), " ")
+}
+
func hasUserPromptTextInAgentMessages(messages []design.AgentChatMessage) bool {
for _, message := range messages {
if strings.TrimSpace(message.Role) != "" && strings.ToLower(strings.TrimSpace(message.Role)) != "user" {
diff --git a/server/internal/domain/design/agent.go b/server/internal/domain/design/agent.go
index 33a5589..f05f975 100644
--- a/server/internal/domain/design/agent.go
+++ b/server/internal/domain/design/agent.go
@@ -18,6 +18,7 @@ type AgentContent struct {
Text string
TextSource string
ImageURL string
+ ImageName string
ImageWidth int64
ImageHeight int64
}
diff --git a/server/internal/logic/agent_websocket_logic.go b/server/internal/logic/agent_websocket_logic.go
index 9128c97..f11127a 100644
--- a/server/internal/logic/agent_websocket_logic.go
+++ b/server/internal/logic/agent_websocket_logic.go
@@ -70,6 +70,7 @@ type socketContent struct {
Text string `json:"text"`
TextSource string `json:"text_source"`
ImageURL string `json:"image_url"`
+ ImageName string `json:"image_name"`
ImageWidth int64 `json:"image_width"`
ImageHeight int64 `json:"image_height"`
}
@@ -155,6 +156,7 @@ func (data socketStartData) toDomainChat(projectID string) design.AgentChatReque
Text: content.Text,
TextSource: content.TextSource,
ImageURL: content.ImageURL,
+ ImageName: content.ImageName,
ImageWidth: content.ImageWidth,
ImageHeight: content.ImageHeight,
})
diff --git a/server/internal/logic/mapper.go b/server/internal/logic/mapper.go
index b226c4d..e731e44 100644
--- a/server/internal/logic/mapper.go
+++ b/server/internal/logic/mapper.go
@@ -519,6 +519,7 @@ func toDomainAgentChat(req *types.AgentChatRequest) design.AgentChatRequest {
Text: content.Text,
TextSource: content.TextSource,
ImageURL: content.ImageUrl,
+ ImageName: content.ImageName,
ImageWidth: content.ImageWidth,
ImageHeight: content.ImageHeight,
})
diff --git a/server/internal/types/types.go b/server/internal/types/types.go
index bac3477..3ff2bfd 100644
--- a/server/internal/types/types.go
+++ b/server/internal/types/types.go
@@ -49,6 +49,7 @@ type AgentContent struct {
Text string `json:"text,optional"`
TextSource string `json:"textSource,optional"`
ImageUrl string `json:"imageUrl,optional"`
+ ImageName string `json:"imageName,optional"`
ImageWidth int64 `json:"imageWidth,optional"`
ImageHeight int64 `json:"imageHeight,optional"`
}