From 90de86724eaf4eb0d1c775ef6b9f3788f57f3c02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ACT=E4=B8=B6=E6=B5=81=E6=98=9F=E9=9B=A8?= <1340145680@qq.com> Date: Sat, 28 Mar 2026 01:19:56 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agents/productionAgent/index.ts | 72 ++++++++++++----------- src/agents/productionAgent/tools.ts | 85 +++++++++++++++++++++------- src/agents/scriptAgent/index.ts | 3 + src/socket/routes/productionAgent.ts | 52 +++++++++++++++-- 4 files changed, 151 insertions(+), 61 deletions(-) diff --git a/src/agents/productionAgent/index.ts b/src/agents/productionAgent/index.ts index 84a1757..702d95c 100644 --- a/src/agents/productionAgent/index.ts +++ b/src/agents/productionAgent/index.ts @@ -11,8 +11,10 @@ export interface AgentContext { socket: Socket; isolationKey: string; text: string; + userMessageTime?: number; abortSignal?: AbortSignal; resTool: ResTool; + msg: ReturnType; } function buildSystemPrompt(skillPrompt: string, mem: Awaited>): string { @@ -52,7 +54,7 @@ export async function decisionAI(ctx: AgentContext) { ...skill.tools, ...memory.getTools(), run_sub_agent: runSubAgent(ctx), - ...useTools(ctx.resTool), + ...useTools({ resTool: ctx.resTool, msg: ctx.msg }), }, onFinish: async (completion) => { await memory.add("assistant:decision", completion.text); @@ -65,78 +67,80 @@ export async function decisionAI(ctx: AgentContext) { //====================== 执行层 ====================== export async function executionAI(ctx: AgentContext) { - const { isolationKey, text, abortSignal, resTool } = ctx; + const { text, abortSignal } = ctx; - resTool.systemMessage("执行层AI 接管聊天"); + const skill = await useSkill("production_agent_execution.md"); - const memory = new Memory("productionAgent", isolationKey); - const [skill, mem] = await Promise.all([useSkill("production_agent_execution.md"), memory.get(text)]); - - const systemPrompt = buildSystemPrompt(skill.prompt, mem); + const subMsg = ctx.resTool.newMessage("assistant", "执行导演"); const { textStream } = await u.Ai.Text("productionAgent").stream({ - system: systemPrompt, + system: skill.prompt, messages: [{ role: "user", content: text }], abortSignal, tools: { ...skill.tools, - ...memory.getTools(), - ...useTools(ctx.resTool), - }, - onFinish: async (completion) => { - await memory.add("assistant:execution", completion.text); + ...useTools({ resTool: ctx.resTool, msg: subMsg }), }, }); - return textStream; + return { textStream, subMsg }; } export async function supervisionAI(ctx: AgentContext) { - const { isolationKey, text, abortSignal } = ctx; - const memory = new Memory("productionAgent", isolationKey); - const [skill, mem] = await Promise.all([useSkill("production_agent_supervision.md"), memory.get(text)]); + const { text, abortSignal } = ctx; - const systemPrompt = buildSystemPrompt(skill.prompt, mem); + const skill = await useSkill("production_agent_supervision.md"); + const subMsg = ctx.resTool.newMessage("assistant", "编辑"); - const { textStream } = await u.Ai.Text("productionAgent").stream({ - system: systemPrompt, + const { textStream } = await u.Ai.Text("scriptAgent").stream({ + system: skill.prompt, messages: [{ role: "user", content: text }], abortSignal, tools: { ...skill.tools, - ...useTools(ctx.resTool), - }, - onFinish: async (completion) => { - await memory.add("assistant:supervision", completion.text); + ...useTools({ + resTool: ctx.resTool, + msg: subMsg, + }), }, }); - return textStream; + return { textStream, subMsg }; } //工具函数 function runSubAgent(parentCtx: AgentContext) { + const memory = new Memory("scriptAgent", parentCtx.isolationKey); return tool({ description: "启动子Agent执行独立任务。可用子Agent:executionAI, decisionAI, supervisionAI", inputSchema: z.object({ agent: z.enum(["executionAI", "supervisionAI"]).describe("子Agent名称"), - prompt: z.string().max(100).describe("交给子Agent的任务简约描述"), + prompt: z.string().describe("交给子Agent的任务简约描述,100字以内"), }), execute: async ({ agent, prompt }) => { - //todo 传入md有问题 const fn = [executionAI, supervisionAI][subAgentList.indexOf(agent)]; - //运行子Agent - const subTextStream = await fn({ ...parentCtx, text: prompt }); - let msg: ReturnType; + // 先完成主Agent当前的消息 + parentCtx.msg.complete(); + // 子Agent用新消息回复 + const { textStream: subTextStream, subMsg } = await fn({ ...parentCtx, text: prompt }); + let text = subMsg.text(); let fullResponse = ""; - for await (const chunk of subTextStream) { - if (!msg!) msg = parentCtx.resTool.textMessage(); - msg.send(chunk); + text.append(chunk); fullResponse += chunk; } - msg!.end(); + text.complete(); + subMsg.complete(); + if (fullResponse.trim()) { + await memory.add(`assistant:${agent === "executionAI" ? "execution" : "supervision"}`, fullResponse, { + name: agent === "executionAI" ? "编剧" : "编辑", + createTime: new Date(subMsg.datetime).getTime(), + }); + } + + // 为主Agent后续输出创建新消息 + parentCtx.msg = parentCtx.resTool.newMessage("assistant", "统筹"); return fullResponse; }, diff --git a/src/agents/productionAgent/tools.ts b/src/agents/productionAgent/tools.ts index 3d6c64a..ba7c1bf 100644 --- a/src/agents/productionAgent/tools.ts +++ b/src/agents/productionAgent/tools.ts @@ -3,7 +3,6 @@ import { z } from "zod"; import _ from "lodash"; import ResTool from "@/socket/resTool"; import u from "@/utils"; -import { useSkill } from "@/utils/agent/skillsTools"; import { urlToBase64 } from "@/utils/vm"; export const deriveAssetSchema = z.object({ id: z.number().describe("衍生资产ID,如果新增则为空"), @@ -75,7 +74,14 @@ const flowDataKeyLabels = Object.fromEntries( Object.entries(flowDataSchema.shape).map(([key, schema]) => [key, (schema as z.ZodTypeAny).description ?? key]), ) as Record; -export default (resTool: ResTool, toolsNames?: string[]) => { +interface ToolConfig { + resTool: ResTool; + toolsNames?: string[]; + msg: ReturnType; +} + +export default (toolCpnfig: ToolConfig) => { + const { resTool, toolsNames, msg } = toolCpnfig; const { socket } = resTool; const tools: Record = { get_flowData: tool({ @@ -84,9 +90,12 @@ export default (resTool: ResTool, toolsNames?: string[]) => { key: keySchema.describe("数据key"), }), execute: async ({ key }) => { - resTool.systemMessage(`正在阅读 ${flowDataKeyLabels[key]} 数据...`); + const thinking = msg.thinking(`正在获取${flowDataKeyLabels[key]}工作区数据...`); console.log("[tools] get_flowData", key); const flowData: FlowData = await new Promise((resolve) => socket.emit("getFlowData", { key }, (res: any) => resolve(res))); + thinking.appendText(`获取到${flowDataKeyLabels[key]}:\n` + flowData[key]); + thinking.updateTitle(`获取${flowDataKeyLabels[key]}完成`); + thinking.complete(); return flowData[key]; }, }), @@ -95,8 +104,10 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ value: flowDataSchema.shape.script }), execute: async ({ value }) => { console.log("[tools] set_flowData script", value); - resTool.systemMessage("正在保存 剧本 数据"); + const thinking = msg.thinking("正在保存 剧本 数据"); socket.emit("setFlowData", { key: "script", value }); + thinking.updateTitle("保存 剧本 数据完成"); + thinking.complete(); return true; }, }), @@ -105,8 +116,10 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ value: flowDataSchema.shape.scriptPlan }), execute: async ({ value }) => { console.log("[tools] set_flowData scriptPlan", value); - resTool.systemMessage("正在保存 拍摄计划 数据"); + const thinking = msg.thinking("正在保存 拍摄计划 数据"); socket.emit("setFlowData", { key: "scriptPlan", value }); + thinking.updateTitle("保存 拍摄计划 数据完成"); + thinking.complete(); return true; }, }), @@ -115,7 +128,7 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ value: z.array(deriveAssetSchema.omit({ id: true })).describe("需要新增的衍生资产列表") }), execute: async ({ value }) => { console.log("[tools] set_flowData add_flowData_assets", value); - resTool.systemMessage("正在保存 衍生资产 数据"); + const thinking = msg.thinking("正在保存 衍生资产 数据"); const setData = [...value] as z.infer[]; const { projectId, scriptId } = resTool.data; const startTime = Date.now(); @@ -154,6 +167,9 @@ export default (resTool: ResTool, toolsNames?: string[]) => { i.derive = [...(i.derive || []), ...watiAddAssetsMap[i.id]]; } }); + thinking.updateTitle("保存 衍生资产 数据完成"); + thinking.complete(); + socket.emit("setFlowData", { key: "assets", value: assetsData }); return true; }, @@ -163,7 +179,7 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ value: z.array(deriveAssetSchema).describe("需要更新的衍生资产列表") }), execute: async ({ value }) => { console.log("[tools] update_flowData update_flowData_assets", value); - resTool.systemMessage("正在保存 衍生资产 数据"); + const thinking = msg.thinking("正在保存 衍生资产 数据"); for (const i of value) { await u .db("o_assets") @@ -195,6 +211,8 @@ export default (resTool: ResTool, toolsNames?: string[]) => { asset.derive = (asset.derive || []).map((d) => updatedMap[d.id] ?? d); } }); + thinking.updateTitle("保存 衍生资产 数据完成"); + thinking.complete(); socket.emit("setFlowData", { key: "assets", value: assetsData }); return true; }, @@ -204,13 +222,15 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ ids: z.array(z.number()).describe("需要删除的 衍生资产id ") }), execute: async ({ ids }) => { console.log("[tools] delete_flowData delete_flowData_assets", ids); - resTool.systemMessage("正在保存 衍生资产 数据"); + const thinking = msg.thinking("正在删除指定 衍生资产 数据..."); await u.db("o_assets").whereIn("id", ids).delete(); const flowData: FlowData = await new Promise((resolve) => socket.emit("getFlowData", { key: "assets" }, (res: any) => resolve(res))); const assetsData = flowData.assets; assetsData.forEach((i) => { i.derive = (i.derive || []).filter((d) => !ids.includes(d.id)); }); + thinking.updateTitle("删除指定 衍生资产 数据完成"); + thinking.complete(); // 将 derive 中已存在的条目替换为更新后的数据 socket.emit("setFlowData", { key: "assets", value: assetsData }); return true; @@ -265,8 +285,10 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ value: flowDataSchema.shape.storyboardTable }), execute: async ({ value }) => { console.log("[tools] set_flowData storyboardTable", value); - resTool.systemMessage("正在保存 分镜表 数据..."); + const thinking = msg.thinking("正在保存 分镜表 数据..."); socket.emit("setFlowData", { key: "storyboardTable", value }); + thinking.updateTitle("保存 分镜表 数据完成"); + thinking.complete(); return true; }, }), @@ -275,7 +297,7 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ value: z.array(storyboardSchema.omit({ id: true })) }), execute: async ({ value }) => { console.log("[tools] add_flowData storyboard", value); - resTool.systemMessage("正在新增 分镜面板 数据..."); + const thinking = msg.thinking("正在保存 分镜面板 数据..."); const setData = [...value] as z.infer[]; for (const item of setData) { item.src = ""; @@ -302,6 +324,9 @@ export default (resTool: ResTool, toolsNames?: string[]) => { const storyboardData = flowData["storyboard"].concat([...setData]); socket.emit("setFlowData", { key: "storyboard", value: storyboardData }); + thinking.updateTitle("保存 分镜面板 数据完成"); + thinking.complete(); + return true; }, }), @@ -310,7 +335,7 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ value: flowDataSchema.shape.storyboard }), execute: async ({ value }) => { console.log("[tools] update_flowData storyboard", value); - resTool.systemMessage("正在更新 分镜面板 数据..."); + const thinking = msg.thinking("正在保存 分镜面板 数据..."); for (const item of value) { await u .db("o_storyboard") @@ -344,6 +369,8 @@ export default (resTool: ResTool, toolsNames?: string[]) => { }; }); socket.emit("setFlowData", { key: "storyboard", value: storyboardData }); + thinking.updateTitle("保存 分镜面板 数据完成"); + thinking.complete(); return true; }, }), @@ -352,13 +379,15 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ ids: z.array(z.number()).describe("需要删除的 分镜id ") }), execute: async ({ ids }) => { console.log("[tools] delete_flowData storyboard", ids); - resTool.systemMessage("正在删除指定 分镜面板 数据..."); + const thinking = msg.thinking("正在删除指定 分镜面板 数据..."); await u.db("o_storyboard").whereIn("id", ids).delete(); await u.db("o_assets2Storyboard").whereIn("storyboardId", ids).delete(); await u.db("o_storyboardFlow").whereIn("storyboardId", ids).delete(); const flowData: FlowData = await new Promise((resolve) => socket.emit("getFlowData", { key: "storyboard" }, (res: any) => resolve(res))); const storyboardData = flowData["storyboard"].filter((item) => !ids.includes(item.id)); socket.emit("setFlowData", { key: "storyboard", value: storyboardData }); + thinking.updateTitle("删除指定 分镜面板 数据完成"); + thinking.complete(); return true; }, }), @@ -400,8 +429,10 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ value: flowDataSchema.shape.workbench }), execute: async ({ value }) => { console.log("[tools] set_flowData workbench", value); - resTool.systemMessage("正在保存 工作台配置 数据..."); + const thinking = msg.thinking("正在保存 工作台配置 数据..."); socket.emit("setFlowData", { key: "workbench", value }); + thinking.updateTitle("保存 工作台配置 数据完成"); + thinking.complete(); return true; }, }), @@ -410,7 +441,9 @@ export default (resTool: ResTool, toolsNames?: string[]) => { inputSchema: z.object({ value: flowDataSchema.shape.poster }), execute: async ({ value }) => { console.log("[tools] set_flowData poster", value); - resTool.systemMessage("正在保存 海报 数据..."); + const thinking = msg.thinking("正在保存 海报配置 数据..."); + thinking.updateTitle("保存 海报配置 数据完成"); + thinking.complete(); socket.emit("setFlowData", { key: "poster", value }); return true; }, @@ -448,7 +481,7 @@ export default (resTool: ResTool, toolsNames?: string[]) => { }), execute: async ({ images }) => { console.log("[tools] generate_storyboard_images", images); - + const thinking = msg.thinking("正在生成 分镜图片 数据..."); // --- 构建任务id集合 --- const taskIds = new Set(images.map((item) => item.id)); const imageMap = new Map(images.map((item) => [item.id, item])); @@ -492,11 +525,13 @@ export default (resTool: ResTool, toolsNames?: string[]) => { // 循环依赖检测 if (visited.size !== images.length) { const cyclicIds = images.filter((item) => !visited.has(item.id)).map((item) => item.id); - resTool.systemMessage(`检测到循环依赖,涉及分镜id: ${cyclicIds.join(", ")},请修正后重试`); + thinking.appendText(`检测到循环依赖,涉及分镜id: ${cyclicIds.join(", ")},请修正后重试`); + thinking.updateTitle("循环依赖错误"); + thinking.error(); return `错误:检测到循环依赖,涉及分镜id: ${cyclicIds.join(", ")}`; } - resTool.systemMessage(`图片生成调度计划:共 ${levels.length} 层,${images.length} 张图片`); + thinking.appendText(`图片生成调度计划:共 ${levels.length} 层,${images.length} 张图片`); // --- 准备公共数据 --- const projectData = await u.db("o_project").where("id", resTool.data.projectId).select("videoRatio").first(); @@ -504,7 +539,7 @@ export default (resTool: ResTool, toolsNames?: string[]) => { // 生成单张图片的函数 const generateOneImage = async (item: (typeof images)[0]) => { - resTool.systemMessage(`正在生成分镜 id:${item.id} 图片`); + const thinking = msg.thinking(`正在生成分镜 id:${item.id} 图片`); // 更新数据库状态为生成中 await u.db("o_storyboard").where("id", item.id).update({ state: "生成中" }); // 更新前端为生成中 @@ -544,7 +579,8 @@ export default (resTool: ResTool, toolsNames?: string[]) => { referenceIds: item.referenceIds, }; // 前端对话框提示 - resTool.systemMessage(`分镜 id:${item.id} 图片生成完成`); + thinking.appendText(`分镜 id:${item.id} 图片生成完成`); + thinking.complete(); // 更新前端界面展示 socket.emit("setFlowData", { key: "setStoryboardImage", value: obj }); }; @@ -553,7 +589,9 @@ export default (resTool: ResTool, toolsNames?: string[]) => { for (let levelIndex = 0; levelIndex < levels.length; levelIndex++) { const levelIds = levels[levelIndex]; const levelItems = levelIds.map((id) => imageMap.get(id)!); - resTool.systemMessage(`开始生成第 ${levelIndex + 1}/${levels.length} 层,共 ${levelItems.length} 张图片 (ids: ${levelIds.join(", ")})`); + const thinking = msg.thinking( + `开始生成第 ${levelIndex + 1}/${levels.length} 层,共 ${levelItems.length} 张图片 (ids: ${levelIds.join(", ")})`, + ); // 同层内所有图片并行生成,使用 allSettled 确保不会因单张失败中断整层 const results = await Promise.allSettled(levelItems.map((item) => generateOneImage(item))); @@ -564,7 +602,7 @@ export default (resTool: ResTool, toolsNames?: string[]) => { const failedId = levelIds[i]; const reason = (results[i] as PromiseRejectedResult).reason; console.error(`[tools] 分镜 id:${failedId} 图片生成失败`, reason); - resTool.systemMessage(`分镜 id:${failedId} 图片生成失败: ${reason?.message || reason}`); + thinking.appendText(`分镜 id:${failedId} 图片生成失败: ${reason?.message || reason}`); await u.db("o_storyboard").where("id", failedId).update({ state: "生成失败" }); socket.emit("setFlowData", { key: "setStoryboardImage", @@ -572,7 +610,12 @@ export default (resTool: ResTool, toolsNames?: string[]) => { }); } } + thinking.appendText(`第 ${levelIndex + 1}/${levels.length} 层图片生成完成`); + thinking.complete(); } + thinking.appendText("所有分镜图片生成完成"); + thinking.updateTitle("分镜图片生成完成"); + thinking.complete(); return "分镜图片生成完成"; }, diff --git a/src/agents/scriptAgent/index.ts b/src/agents/scriptAgent/index.ts index 63f1458..a50938b 100644 --- a/src/agents/scriptAgent/index.ts +++ b/src/agents/scriptAgent/index.ts @@ -69,6 +69,9 @@ export async function decisionAI(ctx: AgentContext) { run_sub_agent: runSubAgent(ctx), ...useTools({ resTool: ctx.resTool, msg: ctx.msg }), }, + onFinish: async (completion) => { + await memory.add("assistant:decision", completion.text); + }, }); return textStream; diff --git a/src/socket/routes/productionAgent.ts b/src/socket/routes/productionAgent.ts index b7ef731..611cd5f 100644 --- a/src/socket/routes/productionAgent.ts +++ b/src/socket/routes/productionAgent.ts @@ -3,6 +3,7 @@ import u from "@/utils"; import { Namespace, Socket } from "socket.io"; import * as agent from "@/agents/productionAgent/index"; import ResTool from "@/socket/resTool"; +import Memory from "@/utils/agent/memory"; async function verifyToken(rawToken: string): Promise { const setting = await u.db("o_setting").where("key", "tokenKey").select("value").first(); @@ -41,29 +42,67 @@ export default (nsp: Namespace) => { }); let abortController: AbortController | null = null; - socket.on("message", async (text: string) => { + socket.on("chat", async (data: { content: string }) => { + const { content } = data; abortController?.abort(); abortController = new AbortController(); const currentController = abortController; - console.log("%c Line:30 🍑 isolationKey", "background:#e41a6a", isolationKey); + const memory = new Memory("scriptAgent", isolationKey); - const textStream = await agent.decisionAI({ socket, isolationKey, text, abortSignal: currentController.signal, resTool }); + const msg = resTool.newMessage("assistant", "统筹"); + const ctx: agent.AgentContext = { + socket, + isolationKey, + text: content, + userMessageTime: new Date(msg.datetime).getTime() - 1, + abortSignal: currentController.signal, + resTool, + msg, + }; - let msg = resTool.textMessage(); + const textStream = await agent.decisionAI(ctx); + + let currentMsg = ctx.msg; + let text = currentMsg.text(); + let currentContent = ""; + + const persistCurrentMessage = async () => { + if (!currentContent.trim()) return; + await memory.add("assistant:decision", currentContent, { + name: "统筹", + createTime: new Date(currentMsg.datetime).getTime(), + }); + currentContent = ""; + }; + + const syncCurrentMessage = async () => { + if (ctx.msg === currentMsg) return; + text.complete(); + currentMsg.complete(); + await persistCurrentMessage(); + currentMsg = ctx.msg; + text = currentMsg.text(); + }; try { for await (const chunk of textStream) { - msg.send(chunk); + await syncCurrentMessage(); + text.append(chunk); + currentContent += chunk; } } catch (err: any) { if (err.name !== "AbortError") throw err; } finally { - msg.end(); + await syncCurrentMessage(); + text.complete(); + currentMsg.complete(); + await persistCurrentMessage(); if (abortController === currentController) { abortController = null; } } }); + socket.on("setModelData", async (data: any) => { resTool.data.imageModel = data; }); @@ -71,6 +110,7 @@ export default (nsp: Namespace) => { isolationKey = data.key; resTool.data.scriptId = data.scriptId; }); + socket.on("stop", () => { abortController?.abort(); abortController = null; From ecd404e5ed3dc7f92236e42fdf941a4208e6c554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ACT=E4=B8=B6=E6=B5=81=E6=98=9F=E9=9B=A8?= <1340145680@qq.com> Date: Sat, 28 Mar 2026 01:29:25 +0800 Subject: [PATCH 2/5] no message --- src/types/database.d.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/types/database.d.ts b/src/types/database.d.ts index eea92c2..eed488e 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,4 +1,4 @@ -// @db-hash 05ecfd675f848d88631c1a546996caea +// @db-hash 8e5f2b7a28d4494b291d802b055b6399 //该文件由脚本自动生成,请勿手动修改 export interface memories { @@ -7,6 +7,7 @@ export interface memories { 'embedding'?: string | null; 'id'?: string; 'isolationKey': string; + 'name'?: string | null; 'relatedMessageIds'?: string | null; 'role'?: string | null; 'summarized'?: number | null; @@ -46,7 +47,6 @@ export interface o_assets { 'name'?: string | null; 'projectId'?: number | null; 'prompt'?: string | null; - 'promptState'?: string | null; 'remark'?: string | null; 'scriptId'?: number | null; 'startTime'?: number | null; @@ -121,13 +121,11 @@ export interface o_project { export interface o_prompt { 'id'?: number; 'name'?: string | null; - 'prompt'?: string | null; + 'rompt'?: string | null; } export interface o_script { 'content'?: string | null; 'createTime'?: number | null; - 'errorReason'?: string | null; - 'extractState'?: number | null; 'id'?: number; 'name'?: string | null; 'projectId'?: number | null; From 4b46be03a160877f0ed32af6865a57341ae91bb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683> Date: Sat, 28 Mar 2026 01:34:29 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=8D=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/initDB.ts | 3 +- src/router.ts | 78 ++++++++++--------- src/routes/setting/promptManage/getPrompt.ts | 10 +++ .../setting/promptManage/updatePrompt.ts | 23 ++++++ src/types/database.d.ts | 8 +- src/utils/cleanNovel.ts | 4 +- 6 files changed, 83 insertions(+), 43 deletions(-) create mode 100644 src/routes/setting/promptManage/getPrompt.ts create mode 100644 src/routes/setting/promptManage/updatePrompt.ts diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts index 4334863..06195b3 100644 --- a/src/lib/initDB.ts +++ b/src/lib/initDB.ts @@ -190,7 +190,8 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => builder: (table) => { table.integer("id").notNullable(); table.string("name"); - table.text("prompt"); + table.string("type"); + table.text("data"); table.primary(["id"]); table.unique(["id"]); }, diff --git a/src/router.ts b/src/router.ts index dcf1414..2dcb5be 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 7027f20b3def330f442689eb22769f31 +// @routes-hash 921ad94cce5432d95991aab4272cbd4d import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -91,24 +91,26 @@ import route87 from "./routes/setting/loginConfig/updateUserPwd"; import route88 from "./routes/setting/memoryConfig/delAllMemory"; import route89 from "./routes/setting/memoryConfig/getMemory"; import route90 from "./routes/setting/memoryConfig/sureMemory"; -import route91 from "./routes/setting/skillManagement/addSkill"; -import route92 from "./routes/setting/skillManagement/deleteSkill"; -import route93 from "./routes/setting/skillManagement/embeddingSkill"; -import route94 from "./routes/setting/skillManagement/generateDescription"; -import route95 from "./routes/setting/skillManagement/getSkillList"; -import route96 from "./routes/setting/skillManagement/scanSkills"; -import route97 from "./routes/setting/skillManagement/updateSkill"; -import route98 from "./routes/setting/vendorConfig/addVendor"; -import route99 from "./routes/setting/vendorConfig/deleteVendor"; -import route100 from "./routes/setting/vendorConfig/getVendorList"; -import route101 from "./routes/setting/vendorConfig/modelTest"; -import route102 from "./routes/setting/vendorConfig/updateCode"; -import route103 from "./routes/setting/vendorConfig/updateVendor"; -import route104 from "./routes/task/getProject"; -import route105 from "./routes/task/getTaskApi"; -import route106 from "./routes/task/getTaskCategories"; -import route107 from "./routes/task/taskDetails"; -import route108 from "./routes/test/test"; +import route91 from "./routes/setting/promptManage/getPrompt"; +import route92 from "./routes/setting/promptManage/updatePrompt"; +import route93 from "./routes/setting/skillManagement/addSkill"; +import route94 from "./routes/setting/skillManagement/deleteSkill"; +import route95 from "./routes/setting/skillManagement/embeddingSkill"; +import route96 from "./routes/setting/skillManagement/generateDescription"; +import route97 from "./routes/setting/skillManagement/getSkillList"; +import route98 from "./routes/setting/skillManagement/scanSkills"; +import route99 from "./routes/setting/skillManagement/updateSkill"; +import route100 from "./routes/setting/vendorConfig/addVendor"; +import route101 from "./routes/setting/vendorConfig/deleteVendor"; +import route102 from "./routes/setting/vendorConfig/getVendorList"; +import route103 from "./routes/setting/vendorConfig/modelTest"; +import route104 from "./routes/setting/vendorConfig/updateCode"; +import route105 from "./routes/setting/vendorConfig/updateVendor"; +import route106 from "./routes/task/getProject"; +import route107 from "./routes/task/getTaskApi"; +import route108 from "./routes/task/getTaskCategories"; +import route109 from "./routes/task/taskDetails"; +import route110 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -201,22 +203,24 @@ export default async (app: Express) => { app.use("/api/setting/memoryConfig/delAllMemory", route88); app.use("/api/setting/memoryConfig/getMemory", route89); app.use("/api/setting/memoryConfig/sureMemory", route90); - app.use("/api/setting/skillManagement/addSkill", route91); - app.use("/api/setting/skillManagement/deleteSkill", route92); - app.use("/api/setting/skillManagement/embeddingSkill", route93); - app.use("/api/setting/skillManagement/generateDescription", route94); - app.use("/api/setting/skillManagement/getSkillList", route95); - app.use("/api/setting/skillManagement/scanSkills", route96); - app.use("/api/setting/skillManagement/updateSkill", route97); - app.use("/api/setting/vendorConfig/addVendor", route98); - app.use("/api/setting/vendorConfig/deleteVendor", route99); - app.use("/api/setting/vendorConfig/getVendorList", route100); - app.use("/api/setting/vendorConfig/modelTest", route101); - app.use("/api/setting/vendorConfig/updateCode", route102); - app.use("/api/setting/vendorConfig/updateVendor", route103); - app.use("/api/task/getProject", route104); - app.use("/api/task/getTaskApi", route105); - app.use("/api/task/getTaskCategories", route106); - app.use("/api/task/taskDetails", route107); - app.use("/api/test/test", route108); + app.use("/api/setting/promptManage/getPrompt", route91); + app.use("/api/setting/promptManage/updatePrompt", route92); + app.use("/api/setting/skillManagement/addSkill", route93); + app.use("/api/setting/skillManagement/deleteSkill", route94); + app.use("/api/setting/skillManagement/embeddingSkill", route95); + app.use("/api/setting/skillManagement/generateDescription", route96); + app.use("/api/setting/skillManagement/getSkillList", route97); + app.use("/api/setting/skillManagement/scanSkills", route98); + app.use("/api/setting/skillManagement/updateSkill", route99); + app.use("/api/setting/vendorConfig/addVendor", route100); + app.use("/api/setting/vendorConfig/deleteVendor", route101); + app.use("/api/setting/vendorConfig/getVendorList", route102); + app.use("/api/setting/vendorConfig/modelTest", route103); + app.use("/api/setting/vendorConfig/updateCode", route104); + app.use("/api/setting/vendorConfig/updateVendor", route105); + app.use("/api/task/getProject", route106); + app.use("/api/task/getTaskApi", route107); + app.use("/api/task/getTaskCategories", route108); + app.use("/api/task/taskDetails", route109); + app.use("/api/test/test", route110); } diff --git a/src/routes/setting/promptManage/getPrompt.ts b/src/routes/setting/promptManage/getPrompt.ts new file mode 100644 index 0000000..a698249 --- /dev/null +++ b/src/routes/setting/promptManage/getPrompt.ts @@ -0,0 +1,10 @@ +import express from "express"; +import u from "@/utils"; +import { success, error } from "@/lib/responseFormat"; + +const router = express.Router(); + +export default router.post("/", async (req, res) => { + const data = await u.db("o_prompt").select("*"); + res.status(200).send(success(data)); +}); diff --git a/src/routes/setting/promptManage/updatePrompt.ts b/src/routes/setting/promptManage/updatePrompt.ts new file mode 100644 index 0000000..6515dd9 --- /dev/null +++ b/src/routes/setting/promptManage/updatePrompt.ts @@ -0,0 +1,23 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { success, error } from "@/lib/responseFormat"; +import { validateFields } from "@/middleware/middleware"; +const router = express.Router(); + +export default router.post( + "/", + validateFields({ + id: z.number(), + }), + async (req, res) => { + const { id, data } = req.body; + await u + .db("o_prompt") + .where("id", id) + .update({ + data: JSON.stringify(data), + }); + res.status(200).send(success(123)); + }, +); diff --git a/src/types/database.d.ts b/src/types/database.d.ts index eea92c2..b49367a 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,4 +1,4 @@ -// @db-hash 05ecfd675f848d88631c1a546996caea +// @db-hash 8aa6e47033e9f59d1f8b797d5b4fccd3 //该文件由脚本自动生成,请勿手动修改 export interface memories { @@ -7,6 +7,7 @@ export interface memories { 'embedding'?: string | null; 'id'?: string; 'isolationKey': string; + 'name'?: string | null; 'relatedMessageIds'?: string | null; 'role'?: string | null; 'summarized'?: number | null; @@ -119,9 +120,10 @@ export interface o_project { 'videoRatio'?: string | null; } export interface o_prompt { + 'data'?: string | null; 'id'?: number; 'name'?: string | null; - 'prompt'?: string | null; + 'type'?: string | null; } export interface o_script { 'content'?: string | null; @@ -164,7 +166,7 @@ export interface o_storyboard { 'filePath'?: string | null; 'frameMode'?: string | null; 'id'?: number; - 'index'?: string | null; + 'index'?: number | null; 'lines'?: string | null; 'mode'?: string | null; 'model'?: string | null; diff --git a/src/utils/cleanNovel.ts b/src/utils/cleanNovel.ts index da16103..0f14a44 100644 --- a/src/utils/cleanNovel.ts +++ b/src/utils/cleanNovel.ts @@ -27,9 +27,9 @@ class CleanNovel { private async processChapter(novel: o_novel, intansce: ReturnType): Promise { try { const prompt = await u.getPrompts("event"); - const data = await u.db("o_prompt").where("name", "eventExtraction").first("prompt"); + const data = await u.db("o_prompt").where("type", "eventExtraction").first("data"); const resData = await intansce.invoke({ - system: data ? JSON.stringify(data.prompt) : (prompt as string), + system: data ? JSON.stringify(data.data) : (prompt as string), messages: [ { role: "user", From 70bd4cc7e4ac3035eaf040fad2e5684d7eec5c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683> Date: Sat, 28 Mar 2026 01:35:27 +0800 Subject: [PATCH 4/5] no message --- src/types/database.d.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/types/database.d.ts b/src/types/database.d.ts index eed488e..b49367a 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,4 +1,4 @@ -// @db-hash 8e5f2b7a28d4494b291d802b055b6399 +// @db-hash 8aa6e47033e9f59d1f8b797d5b4fccd3 //该文件由脚本自动生成,请勿手动修改 export interface memories { @@ -47,6 +47,7 @@ export interface o_assets { 'name'?: string | null; 'projectId'?: number | null; 'prompt'?: string | null; + 'promptState'?: string | null; 'remark'?: string | null; 'scriptId'?: number | null; 'startTime'?: number | null; @@ -119,13 +120,16 @@ export interface o_project { 'videoRatio'?: string | null; } export interface o_prompt { + 'data'?: string | null; 'id'?: number; 'name'?: string | null; - 'rompt'?: string | null; + 'type'?: string | null; } export interface o_script { 'content'?: string | null; 'createTime'?: number | null; + 'errorReason'?: string | null; + 'extractState'?: number | null; 'id'?: number; 'name'?: string | null; 'projectId'?: number | null; @@ -162,7 +166,7 @@ export interface o_storyboard { 'filePath'?: string | null; 'frameMode'?: string | null; 'id'?: number; - 'index'?: string | null; + 'index'?: number | null; 'lines'?: string | null; 'mode'?: string | null; 'model'?: string | null; From a4c9e18a86a776c3f103678144ea33a57344133b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683> Date: Sat, 28 Mar 2026 15:36:27 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=B0=8F=E8=AF=B4=E5=8E=9F=E6=9C=AC=E5=85=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=8C=E5=AE=8C=E5=96=84=E6=A0=B9=E6=8D=AE=E5=89=A7=E6=9C=AC?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router.ts | 292 +++++++++++++++--------------- src/routes/novel/getNovelData.ts | 19 ++ src/routes/project/editProject.ts | 4 +- 3 files changed, 169 insertions(+), 146 deletions(-) create mode 100644 src/routes/novel/getNovelData.ts diff --git a/src/router.ts b/src/router.ts index 2dcb5be..72cf4c1 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 921ad94cce5432d95991aab4272cbd4d +// @routes-hash 58fd64b8de7872e80874b1244bbe3569 import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -39,78 +39,79 @@ import route35 from "./routes/novel/event/deletEvent"; import route36 from "./routes/novel/event/generateEvents"; import route37 from "./routes/novel/event/getEvent"; import route38 from "./routes/novel/getNovel"; -import route39 from "./routes/novel/getNovelEventState"; -import route40 from "./routes/novel/getNovelIndex"; -import route41 from "./routes/novel/updateNovel"; -import route42 from "./routes/other/deleteAllData"; -import route43 from "./routes/other/getVersion"; -import route44 from "./routes/production/assets/getAssetsData"; -import route45 from "./routes/production/editImage/generateFlowImage"; -import route46 from "./routes/production/editImage/getImageFlow"; -import route47 from "./routes/production/editImage/saveImageFlow"; -import route48 from "./routes/production/editImage/updateImageFlow"; -import route49 from "./routes/production/exportImage"; -import route50 from "./routes/production/getFlowData"; -import route51 from "./routes/production/getProductionData"; -import route52 from "./routes/production/getStoryboardData"; -import route53 from "./routes/production/saveFlowData"; -import route54 from "./routes/production/storyboard/downPreviewImage"; -import route55 from "./routes/production/storyboard/getStoryboardData"; -import route56 from "./routes/production/storyboard/previewImage"; -import route57 from "./routes/production/workbench/confirmSelection"; -import route58 from "./routes/production/workbench/delVideo"; -import route59 from "./routes/production/workbench/generateVideo"; -import route60 from "./routes/production/workbench/getChatLines"; -import route61 from "./routes/production/workbench/getVideoModelDetail"; -import route62 from "./routes/production/workbench/videoPolling"; -import route63 from "./routes/project/addProject"; -import route64 from "./routes/project/delProject"; -import route65 from "./routes/project/editProject"; -import route66 from "./routes/project/getProject"; -import route67 from "./routes/script/addScript"; -import route68 from "./routes/script/delScript"; -import route69 from "./routes/script/exportScript"; -import route70 from "./routes/script/extractAssets"; -import route71 from "./routes/script/getScrptApi"; -import route72 from "./routes/script/pollScriptAssets"; -import route73 from "./routes/script/updateScript"; -import route74 from "./routes/scriptAgent/getPlanData"; -import route75 from "./routes/scriptAgent/setPlanData"; -import route76 from "./routes/setting/about/checkUpdate"; -import route77 from "./routes/setting/about/downloadApp"; -import route78 from "./routes/setting/agentDeploy/agentSetKey"; -import route79 from "./routes/setting/agentDeploy/deployAgentModel"; -import route80 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route81 from "./routes/setting/dbConfig/clearData"; -import route82 from "./routes/setting/dev/getSwitchAiDevTool"; -import route83 from "./routes/setting/dev/updateSwitchAiDevTool"; -import route84 from "./routes/setting/fileManagement/openFolder"; -import route85 from "./routes/setting/getTextModel"; -import route86 from "./routes/setting/loginConfig/getUser"; -import route87 from "./routes/setting/loginConfig/updateUserPwd"; -import route88 from "./routes/setting/memoryConfig/delAllMemory"; -import route89 from "./routes/setting/memoryConfig/getMemory"; -import route90 from "./routes/setting/memoryConfig/sureMemory"; -import route91 from "./routes/setting/promptManage/getPrompt"; -import route92 from "./routes/setting/promptManage/updatePrompt"; -import route93 from "./routes/setting/skillManagement/addSkill"; -import route94 from "./routes/setting/skillManagement/deleteSkill"; -import route95 from "./routes/setting/skillManagement/embeddingSkill"; -import route96 from "./routes/setting/skillManagement/generateDescription"; -import route97 from "./routes/setting/skillManagement/getSkillList"; -import route98 from "./routes/setting/skillManagement/scanSkills"; -import route99 from "./routes/setting/skillManagement/updateSkill"; -import route100 from "./routes/setting/vendorConfig/addVendor"; -import route101 from "./routes/setting/vendorConfig/deleteVendor"; -import route102 from "./routes/setting/vendorConfig/getVendorList"; -import route103 from "./routes/setting/vendorConfig/modelTest"; -import route104 from "./routes/setting/vendorConfig/updateCode"; -import route105 from "./routes/setting/vendorConfig/updateVendor"; -import route106 from "./routes/task/getProject"; -import route107 from "./routes/task/getTaskApi"; -import route108 from "./routes/task/getTaskCategories"; -import route109 from "./routes/task/taskDetails"; -import route110 from "./routes/test/test"; +import route39 from "./routes/novel/getNovelData"; +import route40 from "./routes/novel/getNovelEventState"; +import route41 from "./routes/novel/getNovelIndex"; +import route42 from "./routes/novel/updateNovel"; +import route43 from "./routes/other/deleteAllData"; +import route44 from "./routes/other/getVersion"; +import route45 from "./routes/production/assets/getAssetsData"; +import route46 from "./routes/production/editImage/generateFlowImage"; +import route47 from "./routes/production/editImage/getImageFlow"; +import route48 from "./routes/production/editImage/saveImageFlow"; +import route49 from "./routes/production/editImage/updateImageFlow"; +import route50 from "./routes/production/exportImage"; +import route51 from "./routes/production/getFlowData"; +import route52 from "./routes/production/getProductionData"; +import route53 from "./routes/production/getStoryboardData"; +import route54 from "./routes/production/saveFlowData"; +import route55 from "./routes/production/storyboard/downPreviewImage"; +import route56 from "./routes/production/storyboard/getStoryboardData"; +import route57 from "./routes/production/storyboard/previewImage"; +import route58 from "./routes/production/workbench/confirmSelection"; +import route59 from "./routes/production/workbench/delVideo"; +import route60 from "./routes/production/workbench/generateVideo"; +import route61 from "./routes/production/workbench/getChatLines"; +import route62 from "./routes/production/workbench/getVideoModelDetail"; +import route63 from "./routes/production/workbench/videoPolling"; +import route64 from "./routes/project/addProject"; +import route65 from "./routes/project/delProject"; +import route66 from "./routes/project/editProject"; +import route67 from "./routes/project/getProject"; +import route68 from "./routes/script/addScript"; +import route69 from "./routes/script/delScript"; +import route70 from "./routes/script/exportScript"; +import route71 from "./routes/script/extractAssets"; +import route72 from "./routes/script/getScrptApi"; +import route73 from "./routes/script/pollScriptAssets"; +import route74 from "./routes/script/updateScript"; +import route75 from "./routes/scriptAgent/getPlanData"; +import route76 from "./routes/scriptAgent/setPlanData"; +import route77 from "./routes/setting/about/checkUpdate"; +import route78 from "./routes/setting/about/downloadApp"; +import route79 from "./routes/setting/agentDeploy/agentSetKey"; +import route80 from "./routes/setting/agentDeploy/deployAgentModel"; +import route81 from "./routes/setting/agentDeploy/getAgentDeploy"; +import route82 from "./routes/setting/dbConfig/clearData"; +import route83 from "./routes/setting/dev/getSwitchAiDevTool"; +import route84 from "./routes/setting/dev/updateSwitchAiDevTool"; +import route85 from "./routes/setting/fileManagement/openFolder"; +import route86 from "./routes/setting/getTextModel"; +import route87 from "./routes/setting/loginConfig/getUser"; +import route88 from "./routes/setting/loginConfig/updateUserPwd"; +import route89 from "./routes/setting/memoryConfig/delAllMemory"; +import route90 from "./routes/setting/memoryConfig/getMemory"; +import route91 from "./routes/setting/memoryConfig/sureMemory"; +import route92 from "./routes/setting/promptManage/getPrompt"; +import route93 from "./routes/setting/promptManage/updatePrompt"; +import route94 from "./routes/setting/skillManagement/addSkill"; +import route95 from "./routes/setting/skillManagement/deleteSkill"; +import route96 from "./routes/setting/skillManagement/embeddingSkill"; +import route97 from "./routes/setting/skillManagement/generateDescription"; +import route98 from "./routes/setting/skillManagement/getSkillList"; +import route99 from "./routes/setting/skillManagement/scanSkills"; +import route100 from "./routes/setting/skillManagement/updateSkill"; +import route101 from "./routes/setting/vendorConfig/addVendor"; +import route102 from "./routes/setting/vendorConfig/deleteVendor"; +import route103 from "./routes/setting/vendorConfig/getVendorList"; +import route104 from "./routes/setting/vendorConfig/modelTest"; +import route105 from "./routes/setting/vendorConfig/updateCode"; +import route106 from "./routes/setting/vendorConfig/updateVendor"; +import route107 from "./routes/task/getProject"; +import route108 from "./routes/task/getTaskApi"; +import route109 from "./routes/task/getTaskCategories"; +import route110 from "./routes/task/taskDetails"; +import route111 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -151,76 +152,77 @@ export default async (app: Express) => { app.use("/api/novel/event/generateEvents", route36); app.use("/api/novel/event/getEvent", route37); app.use("/api/novel/getNovel", route38); - app.use("/api/novel/getNovelEventState", route39); - app.use("/api/novel/getNovelIndex", route40); - app.use("/api/novel/updateNovel", route41); - app.use("/api/other/deleteAllData", route42); - app.use("/api/other/getVersion", route43); - app.use("/api/production/assets/getAssetsData", route44); - app.use("/api/production/editImage/generateFlowImage", route45); - app.use("/api/production/editImage/getImageFlow", route46); - app.use("/api/production/editImage/saveImageFlow", route47); - app.use("/api/production/editImage/updateImageFlow", route48); - app.use("/api/production/exportImage", route49); - app.use("/api/production/getFlowData", route50); - app.use("/api/production/getProductionData", route51); - app.use("/api/production/getStoryboardData", route52); - app.use("/api/production/saveFlowData", route53); - app.use("/api/production/storyboard/downPreviewImage", route54); - app.use("/api/production/storyboard/getStoryboardData", route55); - app.use("/api/production/storyboard/previewImage", route56); - app.use("/api/production/workbench/confirmSelection", route57); - app.use("/api/production/workbench/delVideo", route58); - app.use("/api/production/workbench/generateVideo", route59); - app.use("/api/production/workbench/getChatLines", route60); - app.use("/api/production/workbench/getVideoModelDetail", route61); - app.use("/api/production/workbench/videoPolling", route62); - app.use("/api/project/addProject", route63); - app.use("/api/project/delProject", route64); - app.use("/api/project/editProject", route65); - app.use("/api/project/getProject", route66); - app.use("/api/script/addScript", route67); - app.use("/api/script/delScript", route68); - app.use("/api/script/exportScript", route69); - app.use("/api/script/extractAssets", route70); - app.use("/api/script/getScrptApi", route71); - app.use("/api/script/pollScriptAssets", route72); - app.use("/api/script/updateScript", route73); - app.use("/api/scriptAgent/getPlanData", route74); - app.use("/api/scriptAgent/setPlanData", route75); - app.use("/api/setting/about/checkUpdate", route76); - app.use("/api/setting/about/downloadApp", route77); - app.use("/api/setting/agentDeploy/agentSetKey", route78); - app.use("/api/setting/agentDeploy/deployAgentModel", route79); - app.use("/api/setting/agentDeploy/getAgentDeploy", route80); - app.use("/api/setting/dbConfig/clearData", route81); - app.use("/api/setting/dev/getSwitchAiDevTool", route82); - app.use("/api/setting/dev/updateSwitchAiDevTool", route83); - app.use("/api/setting/fileManagement/openFolder", route84); - app.use("/api/setting/getTextModel", route85); - app.use("/api/setting/loginConfig/getUser", route86); - app.use("/api/setting/loginConfig/updateUserPwd", route87); - app.use("/api/setting/memoryConfig/delAllMemory", route88); - app.use("/api/setting/memoryConfig/getMemory", route89); - app.use("/api/setting/memoryConfig/sureMemory", route90); - app.use("/api/setting/promptManage/getPrompt", route91); - app.use("/api/setting/promptManage/updatePrompt", route92); - app.use("/api/setting/skillManagement/addSkill", route93); - app.use("/api/setting/skillManagement/deleteSkill", route94); - app.use("/api/setting/skillManagement/embeddingSkill", route95); - app.use("/api/setting/skillManagement/generateDescription", route96); - app.use("/api/setting/skillManagement/getSkillList", route97); - app.use("/api/setting/skillManagement/scanSkills", route98); - app.use("/api/setting/skillManagement/updateSkill", route99); - app.use("/api/setting/vendorConfig/addVendor", route100); - app.use("/api/setting/vendorConfig/deleteVendor", route101); - app.use("/api/setting/vendorConfig/getVendorList", route102); - app.use("/api/setting/vendorConfig/modelTest", route103); - app.use("/api/setting/vendorConfig/updateCode", route104); - app.use("/api/setting/vendorConfig/updateVendor", route105); - app.use("/api/task/getProject", route106); - app.use("/api/task/getTaskApi", route107); - app.use("/api/task/getTaskCategories", route108); - app.use("/api/task/taskDetails", route109); - app.use("/api/test/test", route110); + app.use("/api/novel/getNovelData", route39); + app.use("/api/novel/getNovelEventState", route40); + app.use("/api/novel/getNovelIndex", route41); + app.use("/api/novel/updateNovel", route42); + app.use("/api/other/deleteAllData", route43); + app.use("/api/other/getVersion", route44); + app.use("/api/production/assets/getAssetsData", route45); + app.use("/api/production/editImage/generateFlowImage", route46); + app.use("/api/production/editImage/getImageFlow", route47); + app.use("/api/production/editImage/saveImageFlow", route48); + app.use("/api/production/editImage/updateImageFlow", route49); + app.use("/api/production/exportImage", route50); + app.use("/api/production/getFlowData", route51); + app.use("/api/production/getProductionData", route52); + app.use("/api/production/getStoryboardData", route53); + app.use("/api/production/saveFlowData", route54); + app.use("/api/production/storyboard/downPreviewImage", route55); + app.use("/api/production/storyboard/getStoryboardData", route56); + app.use("/api/production/storyboard/previewImage", route57); + app.use("/api/production/workbench/confirmSelection", route58); + app.use("/api/production/workbench/delVideo", route59); + app.use("/api/production/workbench/generateVideo", route60); + app.use("/api/production/workbench/getChatLines", route61); + app.use("/api/production/workbench/getVideoModelDetail", route62); + app.use("/api/production/workbench/videoPolling", route63); + app.use("/api/project/addProject", route64); + app.use("/api/project/delProject", route65); + app.use("/api/project/editProject", route66); + app.use("/api/project/getProject", route67); + app.use("/api/script/addScript", route68); + app.use("/api/script/delScript", route69); + app.use("/api/script/exportScript", route70); + app.use("/api/script/extractAssets", route71); + app.use("/api/script/getScrptApi", route72); + app.use("/api/script/pollScriptAssets", route73); + app.use("/api/script/updateScript", route74); + app.use("/api/scriptAgent/getPlanData", route75); + app.use("/api/scriptAgent/setPlanData", route76); + app.use("/api/setting/about/checkUpdate", route77); + app.use("/api/setting/about/downloadApp", route78); + app.use("/api/setting/agentDeploy/agentSetKey", route79); + app.use("/api/setting/agentDeploy/deployAgentModel", route80); + app.use("/api/setting/agentDeploy/getAgentDeploy", route81); + app.use("/api/setting/dbConfig/clearData", route82); + app.use("/api/setting/dev/getSwitchAiDevTool", route83); + app.use("/api/setting/dev/updateSwitchAiDevTool", route84); + app.use("/api/setting/fileManagement/openFolder", route85); + app.use("/api/setting/getTextModel", route86); + app.use("/api/setting/loginConfig/getUser", route87); + app.use("/api/setting/loginConfig/updateUserPwd", route88); + app.use("/api/setting/memoryConfig/delAllMemory", route89); + app.use("/api/setting/memoryConfig/getMemory", route90); + app.use("/api/setting/memoryConfig/sureMemory", route91); + app.use("/api/setting/promptManage/getPrompt", route92); + app.use("/api/setting/promptManage/updatePrompt", route93); + app.use("/api/setting/skillManagement/addSkill", route94); + app.use("/api/setting/skillManagement/deleteSkill", route95); + app.use("/api/setting/skillManagement/embeddingSkill", route96); + app.use("/api/setting/skillManagement/generateDescription", route97); + app.use("/api/setting/skillManagement/getSkillList", route98); + app.use("/api/setting/skillManagement/scanSkills", route99); + app.use("/api/setting/skillManagement/updateSkill", route100); + app.use("/api/setting/vendorConfig/addVendor", route101); + app.use("/api/setting/vendorConfig/deleteVendor", route102); + app.use("/api/setting/vendorConfig/getVendorList", route103); + app.use("/api/setting/vendorConfig/modelTest", route104); + app.use("/api/setting/vendorConfig/updateCode", route105); + app.use("/api/setting/vendorConfig/updateVendor", route106); + app.use("/api/task/getProject", route107); + app.use("/api/task/getTaskApi", route108); + app.use("/api/task/getTaskCategories", route109); + app.use("/api/task/taskDetails", route110); + app.use("/api/test/test", route111); } diff --git a/src/routes/novel/getNovelData.ts b/src/routes/novel/getNovelData.ts new file mode 100644 index 0000000..695f902 --- /dev/null +++ b/src/routes/novel/getNovelData.ts @@ -0,0 +1,19 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { success } from "@/lib/responseFormat"; +import { validateFields } from "@/middleware/middleware"; +const router = express.Router(); + +// 获取原文数据 +export default router.post( + "/", + validateFields({ + projectId: z.number(), + }), + async (req, res) => { + const { projectId } = req.body; + const data = await u.db("o_novel").where("projectId", projectId).select("*"); + res.status(200).send(success(data)); + }, +); diff --git a/src/routes/project/editProject.ts b/src/routes/project/editProject.ts index eb4fc8e..714e95a 100644 --- a/src/routes/project/editProject.ts +++ b/src/routes/project/editProject.ts @@ -17,9 +17,10 @@ export default router.post( videoRatio: z.string(), imageModel: z.string(), videoModel: z.string(), + projectType: z.string(), }), async (req, res) => { - const { id, name, intro, type, artStyle, videoRatio, imageModel, videoModel } = req.body; + const { id, name, intro, type, artStyle, videoRatio, imageModel, videoModel, projectType } = req.body; await u.db("o_project").where("id", id).update({ name, @@ -29,6 +30,7 @@ export default router.post( videoRatio, imageModel, videoModel, + projectType, }); res.status(200).send(success({ message: "新增项目成功" }));