diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx index 011dc8de4..9eb216df3 100644 --- a/app/(admin)/settings/admin-settings-client.tsx +++ b/app/(admin)/settings/admin-settings-client.tsx @@ -308,7 +308,7 @@ const ROLE_LABELS: Record = { guest: "访客用户", regular: "普通用户", admin: "管理员", - agent_admin: "智能体管理员", + agent_admin: "风格化管理员", }; type ToolConfig = { @@ -5931,7 +5931,7 @@ export function AdminSettingsClient() { 普通 管理员 - 智能体管理员 + 风格化管理员 @@ -9119,9 +9119,9 @@ export function AdminSettingsClient() { <>
- +
- 开启后,首页侧边栏显示“智能体”入口,用户可进入独立的智能体工作台;关闭后隐藏该入口。 + 开启后,首页侧边栏显示“风格化”入口,用户可进入独立的风格化工作台;关闭后隐藏该入口。
控制无限画布右侧对话框中的 Agent模式 - 入口,与上面的智能体工作台入口独立。 + 入口,与上面的风格化工作台入口独立。
-
智能体工作流配置
+
风格化工作流配置
- 智能体页面的功能按钮名称、Prompt + 风格化页面的功能按钮名称、Prompt 片段和预览图已迁移到独立子页面,避免网站设置页过于臃肿。原先重复的分类和二级类型配置已不再在这里维护。
@@ -9171,7 +9171,7 @@ export function AdminSettingsClient() {
- 独立维护智能体功能卡片 + 独立维护风格化功能卡片
建议在独立页面中维护每个环节的按钮名称、预览图上传、说明文案和 @@ -9181,7 +9181,7 @@ export function AdminSettingsClient() {
-

智能体工作流配置

+

风格化工作流配置

- 配置智能体页面的视频海报、素材搜索、品牌模特及工作流步骤 + 配置风格化页面的视频海报、素材搜索、品牌模特及工作流步骤

diff --git a/app/(admin)/settings/agent-workflow/psd-templates/page.tsx b/app/(admin)/settings/agent-workflow/psd-templates/page.tsx index 289525647..ca5c1703b 100644 --- a/app/(admin)/settings/agent-workflow/psd-templates/page.tsx +++ b/app/(admin)/settings/agent-workflow/psd-templates/page.tsx @@ -13,7 +13,7 @@ export default async function AgentWorkflowPsdTemplatesPage() { return ( ); } diff --git a/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx b/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx index a76375806..34a7d65ab 100644 --- a/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx +++ b/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx @@ -1146,7 +1146,7 @@ export function PsdTemplatesSettingsClient({

PSD 模板配置

- 上传 PSD 模板、管理字体库、配置图片和文字槽位,并在智能体结果区直接套版导出 + 上传 PSD 模板、管理字体库、配置图片和文字槽位,并在风格化结果区直接套版导出

diff --git a/app/(chat)/api/chat/route.ts b/app/(chat)/api/chat/route.ts index 44ed7ede0..c8422419a 100644 --- a/app/(chat)/api/chat/route.ts +++ b/app/(chat)/api/chat/route.ts @@ -2917,8 +2917,8 @@ function normalizeAgentSupplementPrompt(text: string, presetName?: string | null if (!normalized) return ""; const escapedPresetName = String(presetName || "").replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); const genericPattern = escapedPresetName - ? new RegExp(`^请按「${escapedPresetName}」智能体配置顺序处理这\\d+张图片。?$`) - : /^请按「.+」智能体配置顺序处理这\d+张图片。?$/; + ? new RegExp(`^请按「${escapedPresetName}」风格化配置顺序处理这\\d+张图片。?$`) + : /^请按「.+」风格化配置顺序处理这\d+张图片。?$/; if (genericPattern.test(normalized)) { return ""; } @@ -6848,15 +6848,15 @@ export async function POST(request: Request) { return NextResponse.json( { code: "not_found:chat", - message: "智能体不存在或无权使用", + message: "风格化不存在或无权使用", }, { status: 404 }, ); } if (selectedAgentPreset.type === "text") { - // 生文智能体走常规多模态对话链路: - // - 模型已由前端切到智能体预设模型 + // 生文风格化走常规多模态对话链路: + // - 模型已由前端切到风格化预设模型 // - 提示词通过 hiddenPrompt 注入 // - 图片输入沿用普通多模态附件 } else { @@ -6898,7 +6898,7 @@ export async function POST(request: Request) { return NextResponse.json( { code: "bad_request:api", - message: "当前智能体未配置可执行槽位", + message: "当前风格化未配置可执行槽位", }, { status: 400 }, ); @@ -6935,7 +6935,7 @@ export async function POST(request: Request) { return NextResponse.json( { code: "bad_request:api", - message: `当前智能体需要上传 ${requiredUploadCount} 张图片`, + message: `当前风格化需要上传 ${requiredUploadCount} 张图片`, }, { status: 400 }, ); @@ -6946,7 +6946,7 @@ export async function POST(request: Request) { return NextResponse.json( { code: "bad_request:api", - message: "当前智能体未配置默认模型", + message: "当前风格化未配置默认模型", }, { status: 400 }, ); diff --git a/app/api/agent-categories/route.ts b/app/api/agent-categories/route.ts index e93657c73..30c54e2ee 100644 --- a/app/api/agent-categories/route.ts +++ b/app/api/agent-categories/route.ts @@ -40,7 +40,7 @@ export async function GET(request: NextRequest) { ); } return NextResponse.json( - { success: false, error: "获取智能体分类失败" }, + { success: false, error: "获取风格化分类失败" }, { status: 500 } ); } @@ -74,7 +74,7 @@ export async function POST(request: NextRequest) { ); } return NextResponse.json( - { success: false, error: "创建智能体分类失败" }, + { success: false, error: "创建风格化分类失败" }, { status: 500 } ); } diff --git a/app/api/agents/[id]/fork/route.ts b/app/api/agents/[id]/fork/route.ts index 1bb9550ac..de1668a05 100644 --- a/app/api/agents/[id]/fork/route.ts +++ b/app/api/agents/[id]/fork/route.ts @@ -40,7 +40,7 @@ export async function POST( ); } return NextResponse.json( - { success: false, error: "复制智能体失败" }, + { success: false, error: "复制风格化失败" }, { status: 500 } ); } diff --git a/app/api/agents/[id]/route.ts b/app/api/agents/[id]/route.ts index b50268361..874bc6517 100644 --- a/app/api/agents/[id]/route.ts +++ b/app/api/agents/[id]/route.ts @@ -72,7 +72,7 @@ export async function GET( }); if (!preset) { - return NextResponse.json({ success: false, error: "智能体不存在" }, { status: 404 }); + return NextResponse.json({ success: false, error: "风格化不存在" }, { status: 404 }); } return NextResponse.json({ success: true, data: preset }); @@ -81,7 +81,7 @@ export async function GET( return error.toResponse(); } return NextResponse.json( - { success: false, error: "获取智能体失败" }, + { success: false, error: "获取风格化失败" }, { status: 500 } ); } @@ -106,7 +106,7 @@ export async function PUT( }); if (!existingPreset) { - return NextResponse.json({ success: false, error: "智能体不存在" }, { status: 404 }); + return NextResponse.json({ success: false, error: "风格化不存在" }, { status: 404 }); } const canManagePublicPreset = isAgentWorkflowAdminType(session.user.type) && existingPreset.visibility === "public"; @@ -164,7 +164,7 @@ export async function PUT( ); } return NextResponse.json( - { success: false, error: "更新智能体失败" }, + { success: false, error: "更新风格化失败" }, { status: 500 } ); } @@ -187,7 +187,7 @@ export async function DELETE( }); if (!existingPreset) { - return NextResponse.json({ success: false, error: "智能体不存在" }, { status: 404 }); + return NextResponse.json({ success: false, error: "风格化不存在" }, { status: 404 }); } const canManagePublicPreset = isAgentWorkflowAdminType(session.user.type) && existingPreset.visibility === "public"; @@ -201,7 +201,7 @@ export async function DELETE( }); if (!deleted) { - return NextResponse.json({ success: false, error: "智能体不存在" }, { status: 404 }); + return NextResponse.json({ success: false, error: "风格化不存在" }, { status: 404 }); } return NextResponse.json({ success: true, data: deleted }); @@ -210,7 +210,7 @@ export async function DELETE( return error.toResponse(); } return NextResponse.json( - { success: false, error: "删除智能体失败" }, + { success: false, error: "删除风格化失败" }, { status: 500 } ); } diff --git a/app/api/agents/route.ts b/app/api/agents/route.ts index 62728faf4..03f256789 100644 --- a/app/api/agents/route.ts +++ b/app/api/agents/route.ts @@ -130,7 +130,7 @@ export async function GET(request: NextRequest) { ); } return NextResponse.json( - { success: false, error: "获取智能体列表失败" }, + { success: false, error: "获取风格化列表失败" }, { status: 500 } ); } @@ -190,7 +190,7 @@ export async function POST(request: NextRequest) { ); } return NextResponse.json( - { success: false, error: "创建智能体失败" }, + { success: false, error: "创建风格化失败" }, { status: 500 } ); } diff --git a/app/api/site-settings/route.ts b/app/api/site-settings/route.ts index c7032224e..15f6b0059 100644 --- a/app/api/site-settings/route.ts +++ b/app/api/site-settings/route.ts @@ -1042,7 +1042,7 @@ const updateSchema = z.object({ .optional(), }); -// PUT /api/site-settings - 更新网站设置(管理员 / 智能体管理员) +// PUT /api/site-settings - 更新网站设置(管理员 / 风格化管理员) export async function PUT(request: NextRequest) { try { const session = await auth(); diff --git a/app/canvas/[id]/page.tsx b/app/canvas/[id]/page.tsx index 3daaae8a2..ed001fc6f 100644 --- a/app/canvas/[id]/page.tsx +++ b/app/canvas/[id]/page.tsx @@ -2268,7 +2268,7 @@ export default function CanvasEditorPage({ params }: PageProps) { .getState() .setProject( id, - requestedAgentMode ? "智能体工作台" : defaultCanvasTitle + requestedAgentMode ? "风格化工作台" : defaultCanvasTitle ); setWorkflowHydrationSource("empty"); if (!requestedAgentMode) { @@ -7823,7 +7823,7 @@ export default function CanvasEditorPage({ params }: PageProps) {
- 智能体功能未开启,请联系管理员在系统设置中开启。 + 风格化功能未开启,请联系管理员在系统设置中开启。
) : null; @@ -8003,7 +8003,7 @@ export default function CanvasEditorPage({ params }: PageProps) { 先选择一个生图项目

- 打开历史项目可以继续沿用之前的生图结果、模式和工作流。只有在你明确点击新建项目时,系统才会创建一个全新的智能体项目。 + 打开历史项目可以继续沿用之前的生图结果、模式和工作流。只有在你明确点击新建项目时,系统才会创建一个全新的风格化项目。

@@ -8018,7 +8018,7 @@ export default function CanvasEditorPage({ params }: PageProps) { 打开历史项目
- 从项目列表里继续昨天或今天的智能体项目,避免生成结果分散在多个空项目中。 + 从项目列表里继续昨天或今天的风格化项目,避免生成结果分散在多个空项目中。
@@ -8127,7 +8127,7 @@ export default function CanvasEditorPage({ params }: PageProps) { syncGeneratedResultsToCanvas={false} topNavRightSlot={agentProjectNavSlot} workflowContext={workflowContext} - // 嵌入的智能体选择面板 + // 嵌入的风格化选择面板 workflowPromptOptimizationEnabled={appearanceRecognitionEnabled} workflowStylePanel={ - 智能体模式 + 风格化模式 ) : null} diff --git a/components/agents/AgentCanvasTopNavDark.tsx b/components/agents/AgentCanvasTopNavDark.tsx index 62756080b..83c9dc586 100644 --- a/components/agents/AgentCanvasTopNavDark.tsx +++ b/components/agents/AgentCanvasTopNavDark.tsx @@ -23,7 +23,7 @@ const NAV_ITEMS = [ }, { key: "agent" as const, - label: "智能体", + label: "风格化", icon: Wand2, onClick: () => window.location.assign("/canvas?mode=agent"), }, diff --git a/components/agents/AgentExecutionSnapshotDialog.tsx b/components/agents/AgentExecutionSnapshotDialog.tsx index d326875d5..96b324338 100644 --- a/components/agents/AgentExecutionSnapshotDialog.tsx +++ b/components/agents/AgentExecutionSnapshotDialog.tsx @@ -42,7 +42,7 @@ export function AgentExecutionSnapshotDialog({ 执行快照 - 查看本次智能体执行时使用的素材图、槽位提示词、参考图与模型。 + 查看本次风格化执行时使用的素材图、槽位提示词、参考图与模型。 @@ -59,7 +59,7 @@ export function AgentExecutionSnapshotDialog({
-
智能体
+
风格化
{snapshot.presetName}
类型:{snapshot.presetType === "video" ? "视频" : "生图"} diff --git a/components/agents/AgentGenerationWorkspaceDark.tsx b/components/agents/AgentGenerationWorkspaceDark.tsx index f355c2cff..be703216e 100644 --- a/components/agents/AgentGenerationWorkspaceDark.tsx +++ b/components/agents/AgentGenerationWorkspaceDark.tsx @@ -578,7 +578,7 @@ export function AgentGenerationWorkspaceDark({

{selectedAgentPresetId ? "配置图片槽位后点击开始生成" - : "从左侧选择或创建一个智能体"} + : "从左侧选择或创建一个风格化"}

)} diff --git a/components/agents/AgentGenerationWorkspaceDarkV2.tsx b/components/agents/AgentGenerationWorkspaceDarkV2.tsx index 96ff1ad92..290ee03da 100644 --- a/components/agents/AgentGenerationWorkspaceDarkV2.tsx +++ b/components/agents/AgentGenerationWorkspaceDarkV2.tsx @@ -2727,14 +2727,14 @@ export function AgentGenerationWorkspaceDarkV2({ ? selectedModelId : selectedAgentPreset?.defaultModelId || selectedModelId; if (!resolvedModelId) { - toast.error("当前智能体未配置模型"); + toast.error("当前风格化未配置模型"); return; } if ( resolvedModelId !== "auto" && !selectableModels.some((model) => model.id === resolvedModelId) ) { - toast.error("当前智能体绑定的模型不存在或已停用,请重新编辑智能体模型配置"); + toast.error("当前风格化绑定的模型不存在或已停用,请重新编辑风格化模型配置"); return; } const parts: Array<{ type: "text"; text: string } | { type: "file"; mediaType: string; name: string; url: string; assetId?: string }> = []; @@ -6104,7 +6104,7 @@ export function AgentGenerationWorkspaceDarkV2({ PSD 模板暂时无法打开 - 已拦截本次客户端异常,避免整个智能体工作台被一起打断。 + 已拦截本次客户端异常,避免整个风格化工作台被一起打断。
diff --git a/components/agents/AgentPanelHeader.tsx b/components/agents/AgentPanelHeader.tsx index ce9f184e4..cc092341b 100644 --- a/components/agents/AgentPanelHeader.tsx +++ b/components/agents/AgentPanelHeader.tsx @@ -18,13 +18,13 @@ interface AgentPanelHeaderProps { } export function AgentPanelHeader({ - title = "智能体", + title = "风格化", description = "选择模式后,工作台会自动加载对应槽位和生成能力", searchValue, onSearchChange, - searchPlaceholder = "搜索智能体...", + searchPlaceholder = "搜索风格化...", onCreateClick, - createLabel = "新建智能体", + createLabel = "新建风格化", className, }: AgentPanelHeaderProps) { return ( diff --git a/components/agents/AgentPresetCard.tsx b/components/agents/AgentPresetCard.tsx index 965689ff1..c68c0fe39 100644 --- a/components/agents/AgentPresetCard.tsx +++ b/components/agents/AgentPresetCard.tsx @@ -112,7 +112,7 @@ export function AgentPresetCard({ event.stopPropagation(); onFork(preset); }} - title="另存为我的智能体" + title="另存为我的风格化" > diff --git a/components/agents/AgentPresetCardNew.tsx b/components/agents/AgentPresetCardNew.tsx index 163a49213..ede484d4b 100644 --- a/components/agents/AgentPresetCardNew.tsx +++ b/components/agents/AgentPresetCardNew.tsx @@ -193,7 +193,7 @@ export function AgentPresetCardNew({ event.stopPropagation(); onFork(preset); }} - title="另存为我的智能体" + title="另存为我的风格化" > diff --git a/components/agents/AgentPresetDialog.tsx b/components/agents/AgentPresetDialog.tsx index d493be02d..c7ae08b96 100644 --- a/components/agents/AgentPresetDialog.tsx +++ b/components/agents/AgentPresetDialog.tsx @@ -130,7 +130,7 @@ export function AgentPresetDialog({ onOpenChange, initialPreset, onSaved, - entityLabel = "智能体", + entityLabel = "风格化", theme = "light", }: AgentPresetDialogProps) { const { data: modelsData } = useSWR<{ @@ -1010,7 +1010,7 @@ export function AgentPresetDialog({
) : (
- 还没有配置任何生图分类,请先到“智能体工作流配置 - 生图分类”中新增顶部分类页和三级分类树。 + 还没有配置任何生图分类,请先到“风格化工作流配置 - 生图分类”中新增顶部分类页和三级分类树。
)}
diff --git a/components/agents/AgentPresetPanel.tsx b/components/agents/AgentPresetPanel.tsx index 6f4c9b503..8ebb309f7 100644 --- a/components/agents/AgentPresetPanel.tsx +++ b/components/agents/AgentPresetPanel.tsx @@ -30,11 +30,11 @@ export function AgentPresetPanel({ onSelectPreset, embedded = false, layout = "fill", - title = "智能体", + title = "风格化", description = "选择模式后,工作台会自动加载对应槽位和生成能力", - searchPlaceholder = "搜索智能体", - publicTitle = "公共智能体", - privateTitle = "我的智能体", + searchPlaceholder = "搜索风格化", + publicTitle = "公共风格化", + privateTitle = "我的风格化", }: AgentPresetPanelProps) { const [keyword, setKeyword] = useState(""); const [showCreateDialog, setShowCreateDialog] = useState(false); @@ -47,7 +47,7 @@ export function AgentPresetPanel({ sort: "latest", }); if (!result.success || !result.data) { - throw new Error(result.error || "获取智能体失败"); + throw new Error(result.error || "获取风格化失败"); } return result.data; } @@ -81,26 +81,26 @@ export function AgentPresetPanel({ const handleForkPreset = async (preset: AgentPreset) => { const result = await agentService.forkPreset(preset.id, `${preset.name}(副本)`); if (!result.success || !result.data) { - toast.error(result.error || "复制智能体失败"); + toast.error(result.error || "复制风格化失败"); return; } - toast.success("已另存为我的智能体"); + toast.success("已另存为我的风格化"); await mutate(); onSelectPreset(result.data.id); }; const handleDeletePreset = async (preset: AgentPreset) => { - if (!window.confirm(`确定删除智能体「${preset.name}」吗?`)) { + if (!window.confirm(`确定删除风格化「${preset.name}」吗?`)) { return; } const result = await agentService.deletePreset(preset.id); if (!result.success) { - toast.error(result.error || "删除智能体失败"); + toast.error(result.error || "删除风格化失败"); return; } - toast.success("智能体已删除"); + toast.success("风格化已删除"); if (selectedPresetId === preset.id) { onSelectPreset(null); } @@ -164,7 +164,7 @@ export function AgentPresetPanel({
) : (
- 暂无公共智能体 + 暂无公共风格化
)} @@ -186,7 +186,7 @@ export function AgentPresetPanel({
) : (
- 还没有私有智能体,先新建一个吧 + 还没有私有风格化,先新建一个吧
)} @@ -216,7 +216,7 @@ export function AgentPresetPanel({
) : (
- 暂无公共智能体 + 暂无公共风格化
)} @@ -238,7 +238,7 @@ export function AgentPresetPanel({ ) : (
- 还没有私有智能体,先新建一个吧 + 还没有私有风格化,先新建一个吧
)} diff --git a/components/agents/AgentPresetPanelDark.tsx b/components/agents/AgentPresetPanelDark.tsx index 569f6f6b8..cb44ba750 100644 --- a/components/agents/AgentPresetPanelDark.tsx +++ b/components/agents/AgentPresetPanelDark.tsx @@ -27,11 +27,11 @@ interface AgentPresetPanelDarkProps { export function AgentPresetPanelDark({ selectedPresetId, onSelectPreset, - title = "智能体", + title = "风格化", description = "选择生图模式开始创作", - searchPlaceholder = "搜索智能体...", - publicTitle = "公共智能体", - privateTitle = "我的智能体", + searchPlaceholder = "搜索风格化...", + publicTitle = "公共风格化", + privateTitle = "我的风格化", }: AgentPresetPanelDarkProps) { const [keyword, setKeyword] = useState(""); const [showCreateDialog, setShowCreateDialog] = useState(false); @@ -45,7 +45,7 @@ export function AgentPresetPanelDark({ sort: "latest", }); if (!result.success || !result.data) { - throw new Error(result.error || "获取智能体失败"); + throw new Error(result.error || "获取风格化失败"); } return result.data; } @@ -74,24 +74,24 @@ export function AgentPresetPanelDark({ const handleForkPreset = async (preset: AgentPreset) => { const result = await agentService.forkPreset(preset.id, `${preset.name}(副本)`); if (!result.success || !result.data) { - toast.error(result.error || "复制智能体失败"); + toast.error(result.error || "复制风格化失败"); return; } - toast.success("已另存为我的智能体"); + toast.success("已另存为我的风格化"); await mutate(); onSelectPreset(result.data.id); }; const handleDeletePreset = async (preset: AgentPreset) => { - if (!window.confirm(`确定删除智能体「${preset.name}」吗?`)) { + if (!window.confirm(`确定删除风格化「${preset.name}」吗?`)) { return; } const result = await agentService.deletePreset(preset.id); if (!result.success) { - toast.error(result.error || "删除智能体失败"); + toast.error(result.error || "删除风格化失败"); return; } - toast.success("智能体已删除"); + toast.success("风格化已删除"); if (selectedPresetId === preset.id) { onSelectPreset(null); } @@ -145,7 +145,7 @@ export function AgentPresetPanelDark({ )} > - 新建智能体 + 新建风格化 @@ -155,7 +155,7 @@ export function AgentPresetPanelDark({
- {/* 公共智能体区域 */} + {/* 公共风格化区域 */}
) : ( - + )} - {/* 私有智能体区域 */} + {/* 私有风格化区域 */}
) : ( - + )}
diff --git a/components/agents/AgentPresetPanelDarkV2.tsx b/components/agents/AgentPresetPanelDarkV2.tsx index 17b47060b..1b298f148 100644 --- a/components/agents/AgentPresetPanelDarkV2.tsx +++ b/components/agents/AgentPresetPanelDarkV2.tsx @@ -49,7 +49,7 @@ export function AgentPresetPanelDarkV2({ onSelectPreset, onCreateClick, embedded = false, - embeddedEntityLabel = "智能体", + embeddedEntityLabel = "风格化", }: AgentPresetPanelDarkV2Props) { const { data: session } = useSession(); const [activeTab, setActiveTab] = useState(AGENT_PRESET_LIBRARY_ALL_MODES_ID); @@ -75,7 +75,7 @@ export function AgentPresetPanelDarkV2({ sort: "latest", }); if (!result.success || !result.data) { - throw new Error(result.error || "获取智能体失败"); + throw new Error(result.error || "获取风格化失败"); } return result.data; } @@ -235,24 +235,24 @@ export function AgentPresetPanelDarkV2({ const handleForkPreset = async (preset: AgentPreset) => { const result = await agentService.forkPreset(preset.id, `${preset.name}(副本)`); if (!result.success || !result.data) { - toast.error(result.error || "复制智能体失败"); + toast.error(result.error || "复制风格化失败"); return; } - toast.success("已另存为我的智能体"); + toast.success("已另存为我的风格化"); await mutate(); onSelectPreset(result.data.id); }; const handleDeletePreset = async (preset: AgentPreset) => { - if (!window.confirm(`确定删除智能体「${preset.name}」吗?`)) { + if (!window.confirm(`确定删除风格化「${preset.name}」吗?`)) { return; } const result = await agentService.deletePreset(preset.id); if (!result.success) { - toast.error(result.error || "删除智能体失败"); + toast.error(result.error || "删除风格化失败"); return; } - toast.success("智能体已删除"); + toast.success("风格化已删除"); if (selectedPresetId === preset.id) { onSelectPreset(null); } @@ -499,7 +499,7 @@ export function AgentPresetPanelDarkV2({ - {/* 智能体卡片网格区域 */} + {/* 风格化卡片网格区域 */}
{/* 搜索栏 */} diff --git a/components/agents/AgentPresetPanelNew.tsx b/components/agents/AgentPresetPanelNew.tsx index cd625a0cb..374f5a2c1 100644 --- a/components/agents/AgentPresetPanelNew.tsx +++ b/components/agents/AgentPresetPanelNew.tsx @@ -31,11 +31,11 @@ export function AgentPresetPanelNew({ onSelectPreset, embedded = false, layout = "fill", - title = "智能体", + title = "风格化", description = "选择模式后,工作台会自动加载对应槽位和生成能力", - searchPlaceholder = "搜索智能体...", - publicTitle = "公共智能体", - privateTitle = "我的智能体", + searchPlaceholder = "搜索风格化...", + publicTitle = "公共风格化", + privateTitle = "我的风格化", }: AgentPresetPanelNewProps) { const [keyword, setKeyword] = useState(""); const [showCreateDialog, setShowCreateDialog] = useState(false); @@ -49,7 +49,7 @@ export function AgentPresetPanelNew({ sort: "latest", }); if (!result.success || !result.data) { - throw new Error(result.error || "获取智能体失败"); + throw new Error(result.error || "获取风格化失败"); } return result.data; } @@ -78,24 +78,24 @@ export function AgentPresetPanelNew({ const handleForkPreset = async (preset: AgentPreset) => { const result = await agentService.forkPreset(preset.id, `${preset.name}(副本)`); if (!result.success || !result.data) { - toast.error(result.error || "复制智能体失败"); + toast.error(result.error || "复制风格化失败"); return; } - toast.success("已另存为我的智能体"); + toast.success("已另存为我的风格化"); await mutate(); onSelectPreset(result.data.id); }; const handleDeletePreset = async (preset: AgentPreset) => { - if (!window.confirm(`确定删除智能体「${preset.name}」吗?`)) { + if (!window.confirm(`确定删除风格化「${preset.name}」吗?`)) { return; } const result = await agentService.deletePreset(preset.id); if (!result.success) { - toast.error(result.error || "删除智能体失败"); + toast.error(result.error || "删除风格化失败"); return; } - toast.success("智能体已删除"); + toast.success("风格化已删除"); if (selectedPresetId === preset.id) { onSelectPreset(null); } @@ -126,7 +126,7 @@ export function AgentPresetPanelNew({ const content = (
- {/* 公共智能体区域 */} + {/* 公共风格化区域 */}
) : ( - renderEmptyState("暂无公共智能体") + renderEmptyState("暂无公共风格化") )}
- {/* 私有智能体区域 */} + {/* 私有风格化区域 */}
) : ( - renderEmptyState("还没有私有智能体,点击右上角新建一个吧") + renderEmptyState("还没有私有风格化,点击右上角新建一个吧") )}
diff --git a/components/agents/AgentPsdTemplateEditorDialog.tsx b/components/agents/AgentPsdTemplateEditorDialog.tsx index 09ddca37d..1656850ff 100644 --- a/components/agents/AgentPsdTemplateEditorDialog.tsx +++ b/components/agents/AgentPsdTemplateEditorDialog.tsx @@ -2659,7 +2659,7 @@ export function AgentPsdTemplateEditorDialog({ ) : ( )} - 应用并导出 + {renderedResultUrl ? "重新编辑应用导出" : "应用并导出"} )}
diff --git a/components/agents/AgentWorkflowPanel.tsx b/components/agents/AgentWorkflowPanel.tsx index 62aea9a31..253bb5cf7 100644 --- a/components/agents/AgentWorkflowPanel.tsx +++ b/components/agents/AgentWorkflowPanel.tsx @@ -209,7 +209,7 @@ export function AgentWorkflowPanel({
- 智能体工作流 + 风格化工作流
先完成工作流设定,下一步再进入生图模式执行。 diff --git a/components/agents/AgentWorkflowPanelDark.tsx b/components/agents/AgentWorkflowPanelDark.tsx index 46aef13fe..0be4d260b 100644 --- a/components/agents/AgentWorkflowPanelDark.tsx +++ b/components/agents/AgentWorkflowPanelDark.tsx @@ -292,7 +292,7 @@ export function AgentWorkflowPanelDark({
-

智能体工作流

+

风格化工作流

配置工作流参数后进入生图模式

diff --git a/components/agents/AgentWorkflowPanelNew.tsx b/components/agents/AgentWorkflowPanelNew.tsx index 1d6f2f99f..ada876ee7 100644 --- a/components/agents/AgentWorkflowPanelNew.tsx +++ b/components/agents/AgentWorkflowPanelNew.tsx @@ -314,7 +314,7 @@ export function AgentWorkflowPanelNew({

- 智能体工作流 + 风格化工作流

(null); const [annotations, setAnnotations] = useState([]); + const [defaultAnnotationColor, setDefaultAnnotationColor] = useState( + DEFAULT_DIMENSION_COLOR + ); const [selectedAnnotationId, setSelectedAnnotationId] = useState(""); const [isDrawMode, setIsDrawMode] = useState(false); const [isDownloading, setIsDownloading] = useState(false); @@ -845,7 +848,7 @@ export function AgentPsdTemplateExportPreview({ x2: startPoint.x, y2: startPoint.y, label: "", - color: DEFAULT_DIMENSION_COLOR, + color: defaultAnnotationColor, glow: false, }, ]); @@ -897,6 +900,7 @@ export function AgentPsdTemplateExportPreview({ }, [ attachPointerSession, + defaultAnnotationColor, enableDimensionAnnotations, getCoordinateSpace, isDrawMode, @@ -1487,7 +1491,8 @@ export function AgentPsdTemplateExportPreview({ : "border-white/10 hover:border-white/30" )} key={normalizedColor} - onClick={() => + onClick={() => { + setDefaultAnnotationColor(normalizedColor); setAnnotations((current) => current.map((annotation) => annotation.id === selectedAnnotation.id @@ -1497,8 +1502,8 @@ export function AgentPsdTemplateExportPreview({ } : annotation ) - ) - } + ); + }} style={{ backgroundColor: normalizedColor }} type="button" /> @@ -1512,6 +1517,7 @@ export function AgentPsdTemplateExportPreview({ const nextColor = normalizeDimensionColor( event.target.value ); + setDefaultAnnotationColor(nextColor); setAnnotations((current) => current.map((annotation) => annotation.id === selectedAnnotation.id diff --git a/components/agents/index-dark-v2.ts b/components/agents/index-dark-v2.ts index ff4cf67f6..80e2aec11 100644 --- a/components/agents/index-dark-v2.ts +++ b/components/agents/index-dark-v2.ts @@ -1,4 +1,4 @@ -// 智能体深色主题 V2 组件统一导出 +// 风格化深色主题 V2 组件统一导出 export { AgentPresetCardDark } from "./AgentPresetCardDark"; export { AgentPresetPanelDarkV2 } from "./AgentPresetPanelDarkV2"; export { AgentGenerationWorkspaceDarkV2 } from "./AgentGenerationWorkspaceDarkV2"; diff --git a/components/agents/index-dark.ts b/components/agents/index-dark.ts index a86144f6b..b42f742ed 100644 --- a/components/agents/index-dark.ts +++ b/components/agents/index-dark.ts @@ -1,4 +1,4 @@ -// 智能体深色主题组件统一导出 +// 风格化深色主题组件统一导出 export { AgentPresetCardDark } from "./AgentPresetCardDark"; export { AgentPresetPanelDark } from "./AgentPresetPanelDark"; export { AgentWorkflowPanelDark } from "./AgentWorkflowPanelDark"; diff --git a/components/agents/index-new.ts b/components/agents/index-new.ts index f493abe27..3fc686f07 100644 --- a/components/agents/index-new.ts +++ b/components/agents/index-new.ts @@ -1,4 +1,4 @@ -// 智能体新UI组件统一导出 +// 风格化新UI组件统一导出 export { AgentPresetCardNew } from "./AgentPresetCardNew"; export { AgentPresetPanelNew } from "./AgentPresetPanelNew"; export { AgentWorkflowPanelNew } from "./AgentWorkflowPanelNew"; diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx index 7879bba21..5557cc612 100644 --- a/components/canvas/CanvasChatPanel.tsx +++ b/components/canvas/CanvasChatPanel.tsx @@ -3584,15 +3584,15 @@ export function CanvasChatPanel({ setAttachments(next); toast.success( slotCount === 1 - ? "已添加到智能体图片槽位" - : `已添加到智能体槽位(${inserted}/${slotCount})` + ? "已添加到风格化图片槽位" + : `已添加到风格化槽位(${inserted}/${slotCount})` ); } else if (toAdd.length > 0) { - toast.info("智能体图片槽位已满,请先替换或移除"); + toast.info("风格化图片槽位已满,请先替换或移除"); } if (toAdd.length - inserted > 0) { - toast.info(`还有 ${toAdd.length - inserted} 张未添加,可继续替换智能体图片槽位`); + toast.info(`还有 ${toAdd.length - inserted} 张未添加,可继续替换风格化图片槽位`); } setTimeout(() => { @@ -5699,7 +5699,7 @@ export function CanvasChatPanel({ (slotIndex: number) => { const preferredNode = selectedImageNodes[slotIndex] || selectedImageNodes[0]; const attachment = preferredNode - ? getCanvasNodeAttachment(preferredNode, `智能体图片 ${slotIndex + 1}`) + ? getCanvasNodeAttachment(preferredNode, `风格化图片 ${slotIndex + 1}`) : null; if (!attachment) return false; @@ -7873,7 +7873,7 @@ export function CanvasChatPanel({ } if (effectiveAttachments.length < agentRequiredUploadCount) { - toast.error("当前智能体需要上传 3 张图片:产品图1、产品图2、模特图"); + toast.error("当前风格化需要上传 3 张图片:产品图1、产品图2、模特图"); return; } } @@ -7957,7 +7957,7 @@ export function CanvasChatPanel({ const effectiveComposerMode = activeComposerModeRef.current || activeComposerMode; const effectiveAgentEntryMode = agentEntryModeRef.current || agentEntryMode; if (!textContent && hasAgentUploadSlots && selectedAgentPreset) { - textContent = `请按「${selectedAgentPreset.name}」智能体配置顺序处理产品图1、产品图2和模特图。`; + textContent = `请按「${selectedAgentPreset.name}」风格化配置顺序处理产品图1、产品图2和模特图。`; } if (!textContent && selectedSkillTag) { textContent = `请按「${selectedSkillTag.name}」标签的要求处理。`; @@ -7987,7 +7987,7 @@ export function CanvasChatPanel({ const title = String(slot.title || slot.uploadLabel || `模板${index + 1}`).trim(); const promptText = String(slot.promptTemplate || "").trim(); if (!promptText) return ""; - return `【智能体:${selectedAgentPreset.name}|${title}】\n${promptText}`; + return `【风格化:${selectedAgentPreset.name}|${title}】\n${promptText}`; }) .filter(Boolean) .join("\n\n"); @@ -8271,12 +8271,12 @@ export function CanvasChatPanel({ if (handledCount > 0) { toast.success( handledCount === 1 - ? "已粘贴图片到智能体槽位" - : `已粘贴 ${handledCount} 张图片到智能体槽位` + ? "已粘贴图片到风格化槽位" + : `已粘贴 ${handledCount} 张图片到风格化槽位` ); } if (handledCount < files.length) { - toast.info("智能体图片槽位已满,剩余图片未添加"); + toast.info("风格化图片槽位已满,剩余图片未添加"); } void maybeAutoSetCanvasTitle(firstImageUrl); return; @@ -8411,12 +8411,12 @@ export function CanvasChatPanel({ if (handledCount > 0) { toast.success( handledCount === 1 - ? "图片已添加到智能体槽位" - : `已添加 ${handledCount} 张图片到智能体槽位` + ? "图片已添加到风格化槽位" + : `已添加 ${handledCount} 张图片到风格化槽位` ); } if (handledCount < files.length) { - toast.info("智能体需要的图片槽位已满,剩余图片未添加"); + toast.info("风格化需要的图片槽位已满,剩余图片未添加"); } void maybeAutoSetCanvasTitle(firstImageUrl); @@ -11087,7 +11087,7 @@ export function CanvasChatPanel({ })}
- 智能体需要上传 3 张图片:产品图1、产品图2、模特图;已选主 SKU / 搭配 SKU 的素材图会优先进入前两个产品槽位,模特图继续手动上传或替换。 + 风格化需要上传 3 张图片:产品图1、产品图2、模特图;已选主 SKU / 搭配 SKU 的素材图会优先进入前两个产品槽位,模特图继续手动上传或替换。
)} diff --git a/components/home/lovart-home.tsx b/components/home/lovart-home.tsx index 4b78c2c16..391b8aa6d 100644 --- a/components/home/lovart-home.tsx +++ b/components/home/lovart-home.tsx @@ -1574,12 +1574,12 @@ export function LovartHome({ type="button" className="flex h-10 w-10 items-center justify-center rounded-full hover:bg-black/5" onClick={() => router.push("/canvas?mode=agent")} - title="智能体" + title="风格化" > - 智能体 + 风格化 ) : null} diff --git a/components/top-navbar.tsx b/components/top-navbar.tsx index 51630d119..a1547d6d3 100644 --- a/components/top-navbar.tsx +++ b/components/top-navbar.tsx @@ -174,8 +174,8 @@ export function TopNavbar({ if (trimmed === "图片编辑") { return "编辑"; } - if (trimmed === "智能体") { - return "智能"; + if (trimmed === "风格化") { + return "风格"; } if (trimmed === "视频画布") { return "视频"; @@ -588,18 +588,18 @@ export function TopNavbar({ {getShortLabel("图片编辑")} - {/* 智能体模式 */} + {/* 风格化模式 */} {agentEnabled && ( )} @@ -644,7 +644,7 @@ export function TopNavbar({ - {/* 系统设置(管理员 / 智能体管理员可见)*/} + {/* 系统设置(管理员 / 风格化管理员可见)*/} {(isAdmin || settingsHref) && (
20) { - throw new ChatSDKError("bad_request:database", "智能体槽位数量不能超过 20"); + throw new ChatSDKError("bad_request:database", "风格化槽位数量不能超过 20"); } const allAssetIds = Array.from( diff --git a/lib/db/schema.ts b/lib/db/schema.ts index a1b395b56..313ca4a04 100644 --- a/lib/db/schema.ts +++ b/lib/db/schema.ts @@ -382,7 +382,7 @@ export const siteSettings = pgTable("SiteSettings", { productPlanningEnabled: boolean("productPlanningEnabled").notNull().default(true), // 是否显示并启用商品策划工具 // 无限画布设置 canvasEnabled: boolean("canvasEnabled").notNull().default(true), // 是否启用无限画布功能 - agentEnabled: boolean("agentEnabled").notNull().default(true), // 是否启用智能体功能 + agentEnabled: boolean("agentEnabled").notNull().default(true), // 是否启用风格化功能 realtimeCanvasEnabled: boolean("realtimeCanvasEnabled").notNull().default(true), // 是否显示实时画布入口 canvasDefaultModelId: varchar("canvasDefaultModelId", { length: 128 }), // 画布默认选择的模型ID(null表示智能自动) canvasAutoModeDefaultModelId: varchar("canvasAutoModeDefaultModelId", { length: 128 }), // 智能自动模式下实际使用的默认生图模型ID @@ -504,7 +504,7 @@ export const generatedImage = pgTable("GeneratedImage", { export type GeneratedImage = InferSelectModel; -// 智能体分类表 +// 风格化分类表 export const agentPresetCategory = pgTable("AgentPresetCategory", { id: uuid("id").primaryKey().notNull().defaultRandom(), name: varchar("name", { length: 64 }).notNull(), @@ -521,7 +521,7 @@ export const agentPresetCategory = pgTable("AgentPresetCategory", { export type AgentPresetCategory = InferSelectModel; -// 智能体表 +// 风格化表 export const agentPreset = pgTable("AgentPreset", { id: uuid("id").primaryKey().notNull().defaultRandom(), ownerUserId: uuid("ownerUserId") @@ -574,7 +574,7 @@ export const agentPreset = pgTable("AgentPreset", { export type AgentPreset = InferSelectModel; -// 智能体槽位表(每个槽位=一套提示词 + 一组参考图 + 一张用户上传图) +// 风格化槽位表(每个槽位=一套提示词 + 一组参考图 + 一张用户上传图) export const agentPresetSlot = pgTable("AgentPresetSlot", { id: uuid("id").primaryKey().notNull().defaultRandom(), presetId: uuid("presetId") @@ -1086,7 +1086,7 @@ export const assetMemorySnapshot = pgTable("AssetMemorySnapshot", { export type AssetMemorySnapshot = InferSelectModel; -// 智能体参考图绑定表 +// 风格化参考图绑定表 export const agentPresetReferenceAsset = pgTable("AgentPresetReferenceAsset", { id: uuid("id").primaryKey().notNull().defaultRandom(), presetId: uuid("presetId") @@ -1104,7 +1104,7 @@ export const agentPresetReferenceAsset = pgTable("AgentPresetReferenceAsset", { export type AgentPresetReferenceAsset = InferSelectModel; -// 智能体执行快照表 +// 风格化执行快照表 export const agentPresetExecutionSnapshot = pgTable("AgentPresetExecutionSnapshot", { id: uuid("id").primaryKey().notNull().defaultRandom(), presetId: uuid("presetId") diff --git a/services/agents/index.ts b/services/agents/index.ts index 943b9e677..ca0b777fa 100644 --- a/services/agents/index.ts +++ b/services/agents/index.ts @@ -29,11 +29,11 @@ export const agentCategoryService = { }); const data = await parseJsonSafely>(response); if (!response.ok) { - return { success: false, error: data?.error || "获取智能体分类失败" }; + return { success: false, error: data?.error || "获取风格化分类失败" }; } - return data || { success: false, error: "获取智能体分类失败" }; + return data || { success: false, error: "获取风格化分类失败" }; } catch (_error) { - return { success: false, error: "获取智能体分类失败" }; + return { success: false, error: "获取风格化分类失败" }; } }, @@ -46,11 +46,11 @@ export const agentCategoryService = { }); const data = await parseJsonSafely>(response); if (!response.ok) { - return { success: false, error: data?.error || "创建智能体分类失败" }; + return { success: false, error: data?.error || "创建风格化分类失败" }; } - return data || { success: false, error: "创建智能体分类失败" }; + return data || { success: false, error: "创建风格化分类失败" }; } catch (_error) { - return { success: false, error: "创建智能体分类失败" }; + return { success: false, error: "创建风格化分类失败" }; } }, }; @@ -76,11 +76,11 @@ export const agentService = { }); const data = await parseJsonSafely>(response); if (!response.ok) { - return { success: false, error: data?.error || "获取智能体列表失败" }; + return { success: false, error: data?.error || "获取风格化列表失败" }; } - return data || { success: false, error: "获取智能体列表失败" }; + return data || { success: false, error: "获取风格化列表失败" }; } catch (_error) { - return { success: false, error: "获取智能体列表失败" }; + return { success: false, error: "获取风格化列表失败" }; } }, @@ -89,11 +89,11 @@ export const agentService = { const response = await fetch(`/api/agents/${id}`, { cache: "no-store" }); const data = await parseJsonSafely>(response); if (!response.ok) { - return { success: false, error: data?.error || "获取智能体失败" }; + return { success: false, error: data?.error || "获取风格化失败" }; } - return data || { success: false, error: "获取智能体失败" }; + return data || { success: false, error: "获取风格化失败" }; } catch (_error) { - return { success: false, error: "获取智能体失败" }; + return { success: false, error: "获取风格化失败" }; } }, @@ -106,11 +106,11 @@ export const agentService = { }); const data = await parseJsonSafely>(response); if (!response.ok) { - return { success: false, error: data?.error || "创建智能体失败" }; + return { success: false, error: data?.error || "创建风格化失败" }; } - return data || { success: false, error: "创建智能体失败" }; + return data || { success: false, error: "创建风格化失败" }; } catch (_error) { - return { success: false, error: "创建智能体失败" }; + return { success: false, error: "创建风格化失败" }; } }, @@ -123,11 +123,11 @@ export const agentService = { }); const data = await parseJsonSafely>(response); if (!response.ok) { - return { success: false, error: data?.error || "更新智能体失败" }; + return { success: false, error: data?.error || "更新风格化失败" }; } - return data || { success: false, error: "更新智能体失败" }; + return data || { success: false, error: "更新风格化失败" }; } catch (_error) { - return { success: false, error: "更新智能体失败" }; + return { success: false, error: "更新风格化失败" }; } }, @@ -138,11 +138,11 @@ export const agentService = { }); const data = await parseJsonSafely>(response); if (!response.ok) { - return { success: false, error: data?.error || "删除智能体失败" }; + return { success: false, error: data?.error || "删除风格化失败" }; } - return data || { success: false, error: "删除智能体失败" }; + return data || { success: false, error: "删除风格化失败" }; } catch (_error) { - return { success: false, error: "删除智能体失败" }; + return { success: false, error: "删除风格化失败" }; } }, @@ -155,11 +155,11 @@ export const agentService = { }); const data = await parseJsonSafely>(response); if (!response.ok) { - return { success: false, error: data?.error || "复制智能体失败" }; + return { success: false, error: data?.error || "复制风格化失败" }; } - return data || { success: false, error: "复制智能体失败" }; + return data || { success: false, error: "复制风格化失败" }; } catch (_error) { - return { success: false, error: "复制智能体失败" }; + return { success: false, error: "复制风格化失败" }; } }, };