From c55bd56f5841b25ed1aebc3533d275bf22497dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683> Date: Tue, 24 Mar 2026 11:42:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E9=94=AE=E5=A1=AB=E5=85=A5key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router.ts | 6 +- .../setting/agentDeploy/deployAgentModel.ts | 25 ++-- .../setting/agentDeploy/oneClickToFillIn.ts | 9 ++ src/routes/setting/agentDeploy/updateKey.ts | 116 ------------------ src/types/database.d.ts | 15 +-- 5 files changed, 30 insertions(+), 141 deletions(-) create mode 100644 src/routes/setting/agentDeploy/oneClickToFillIn.ts delete mode 100644 src/routes/setting/agentDeploy/updateKey.ts diff --git a/src/router.ts b/src/router.ts index 15f2fc1..e07b7cc 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash d482a1b197a774825d3bc1c4ca8b70c5 +// @routes-hash 060ac05250962088b128ef8200ab0471 import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -65,7 +65,7 @@ import route61 from "./routes/scriptAgent/getPlanData"; import route62 from "./routes/scriptAgent/setPlanData"; import route63 from "./routes/setting/agentDeploy/deployAgentModel"; import route64 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route65 from "./routes/setting/agentDeploy/updateKey"; +import route65 from "./routes/setting/agentDeploy/oneClickToFillIn"; import route66 from "./routes/setting/dbConfig/clearData"; import route67 from "./routes/setting/getTextModel"; import route68 from "./routes/setting/loginConfig/getUser"; @@ -147,7 +147,7 @@ export default async (app: Express) => { app.use("/api/scriptAgent/setPlanData", route62); app.use("/api/setting/agentDeploy/deployAgentModel", route63); app.use("/api/setting/agentDeploy/getAgentDeploy", route64); - app.use("/api/setting/agentDeploy/updateKey", route65); + app.use("/api/setting/agentDeploy/oneClickToFillIn", route65); app.use("/api/setting/dbConfig/clearData", route66); app.use("/api/setting/getTextModel", route67); app.use("/api/setting/loginConfig/getUser", route68); diff --git a/src/routes/setting/agentDeploy/deployAgentModel.ts b/src/routes/setting/agentDeploy/deployAgentModel.ts index 104dc03..22f541a 100644 --- a/src/routes/setting/agentDeploy/deployAgentModel.ts +++ b/src/routes/setting/agentDeploy/deployAgentModel.ts @@ -5,15 +5,18 @@ import { z } from "zod"; import { validateFields } from "@/middleware/middleware"; const router = express.Router(); -export default router.post("/", validateFields({ - id: z.number(), - name: z.string(), - model: z.string(), - modelName: z.string(), - vendorId: z.number().nullable(), - desc: z.string(), -}), async (req, res) => { - const { id, name, model, modelName, vendorId, desc } = req.body; - await u.db("o_agentDeploy").where({ id }).update({ id, name, model, modelName, vendorId, desc }); +export default router.post( + "/", + validateFields({ + id: z.array(z.number()), + }), + async (req, res) => { + const { id } = req.body; + await u.db("o_agentDeploy").whereIn("id", id).where("disabled", "<>", 1).update({ + model: "gpt-4.1", + modelName: "1:gpt-4.1", + vendorId: 1, + }); res.status(200).send(success("配置成功")); -}); + }, +); diff --git a/src/routes/setting/agentDeploy/oneClickToFillIn.ts b/src/routes/setting/agentDeploy/oneClickToFillIn.ts new file mode 100644 index 0000000..f1fdfd7 --- /dev/null +++ b/src/routes/setting/agentDeploy/oneClickToFillIn.ts @@ -0,0 +1,9 @@ +import express from "express"; +import { success } from "@/lib/responseFormat"; +import u from "@/utils"; +const router = express.Router(); + +export default router.post("/", async (req, res) => { + const data = await u.db("o_agentDeploy").leftJoin("o_vendorConfig", "o_vendorConfig.id", "o_agentDeploy.vendorId").select("o_agentDeploy.*", "o_vendorConfig.icon"); + res.status(200).send(success(data)); +}); diff --git a/src/routes/setting/agentDeploy/updateKey.ts b/src/routes/setting/agentDeploy/updateKey.ts deleted file mode 100644 index bd8e696..0000000 --- a/src/routes/setting/agentDeploy/updateKey.ts +++ /dev/null @@ -1,116 +0,0 @@ -import express from "express"; -import { success, error } from "@/lib/responseFormat"; -import { validateFields } from "@/middleware/middleware"; -import u from "@/utils"; -import { z } from "zod"; -import { transform } from "sucrase"; -const router = express.Router(); -const vendorConfigSchema = z.object({ - version: z.number(), - icon: z.string().optional(), - name: z.string(), - inputs: z.array( - z.object({ - key: z.string(), - label: z.string(), - type: z.enum(["text", "password", "url"]), - required: z.boolean(), - placeholder: z.string().optional(), - }), - ), - inputValues: z.record(z.string(), z.string()), - models: z.array( - z.discriminatedUnion("type", [ - z.object({ - name: z.string(), - modelName: z.string(), - type: z.literal("text"), - multimodal: z.boolean(), - tool: z.boolean(), - }), - z.object({ - name: z.string(), - modelName: z.string(), - type: z.literal("image"), - mode: z.array(z.enum(["text", "singleImage", "multiReference"])), - }), - z.object({ - name: z.string(), - modelName: z.string(), - type: z.literal("video"), - mode: z.array( - z.enum([ - "singleImage", - "multiImage", - "gridImage", - "startEndRequired", - "endFrameOptional", - "startFrameOptional", - "text", - "audioReference", - "videoReference", - ]), - ), - audio: z.union([z.literal("optional"), z.boolean()]), - durationResolutionMap: z.array( - z.object({ - duration: z.array(z.number()), - resolution: z.array(z.string()), - }), - ), - }), - ]), - ), -}); -export default router.post("/", - validateFields({ - id: z.number(), - key: z.string(), - }), - async (req, res) => { - const { id, key } = req.body; - const data = await u.db("o_vendorConfig").where("id", id).select("code", "inputValues").first(); - let inputValues = JSON.parse(data?.inputValues || "{}"); - inputValues.apiKey = key; - const jsCode = transform(data?.code!, { transforms: ["typescript"] }).code; - const exports = u.vm(jsCode); - if (!exports) return res.status(400).send(success("脚本文件必须导出对象")); - if (!exports.textRequest) return res.status(400).send(success("脚本文件必须导出文本请求对象")); - if (!exports.imageRequest) return res.status(400).send(success("脚本文件必须导出图像请求对象")); - if (!exports.videoRequest) return res.status(400).send(success("脚本文件必须导出视频请求对象")); - if (!exports.vendor) return res.status(400).send(success("脚本文件必须导出vendor对象")); - const vendor = exports.vendor; - const result = vendorConfigSchema.safeParse(vendor); - if (!result.success) { - const errorMsg = result.error.issues.map((e) => `${e.path.join(".")}: ${e.message}`).join("; "); - return res.status(400).send(error(`vendor配置校验失败: ${errorMsg}`)); - } - const replaceBlockValue = (code: string, key: string, newValue: string): string => { - const open = newValue.trimStart()[0] as "[" | "{"; - const close = open === "[" ? "]" : "}"; - const keyMatch = code.match(new RegExp(`\\b${key}\\s*:\\s*[\\[{]`)); - if (!keyMatch || keyMatch.index === undefined) return code; - const valueStart = keyMatch.index + keyMatch[0].length - 1; - let depth = 0; - let valueEnd = -1; - for (let i = valueStart; i < code.length; i++) { - if (code[i] === open) depth++; - else if (code[i] === close) { - depth--; - if (depth === 0) { - valueEnd = i; - break; - } - } - } - if (valueEnd === -1) return code; - return code.slice(0, valueStart) + newValue + code.slice(valueEnd + 1); - }; - let updatedTsCode = data?.code!; - updatedTsCode = replaceBlockValue(updatedTsCode, "inputValues", JSON.stringify(inputValues ?? vendor.inputValues, null, 2)); - await u.db("o_vendorConfig").where("id", id).update({ - inputValues: inputValues ? JSON.stringify(inputValues) : JSON.stringify(vendor.inputValues), - code: updatedTsCode, - }); - res.status(200).send(success("保存成功")); - }); diff --git a/src/types/database.d.ts b/src/types/database.d.ts index f27634d..3beb120 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,4 +1,4 @@ -// @db-hash 5ea1f1cf9926d08390093d10da66e6ae +// @db-hash c57fab383d85c473ba9ca06566b33680 //该文件由脚本自动生成,请勿手动修改 export interface memories { @@ -65,15 +65,6 @@ export interface o_eventChapter { 'id'?: number; 'novelId'?: number | null; } -export interface o_flowData { - 'createTime'?: number | null; - 'data'?: string | null; - 'espisodeId'?: number | null; - 'id'?: number; - 'key'?: string | null; - 'projectId'?: number | null; - 'updateTime'?: number | null; -} export interface o_image { 'assetsId'?: number | null; 'filePath'?: string | null; @@ -88,6 +79,9 @@ export interface o_novel { 'chapterData'?: string | null; 'chapterIndex'?: number | null; 'createTime'?: number | null; + 'errorReason'?: string | null; + 'event'?: string | null; + 'eventState'?: number | null; 'id'?: number; 'projectId'?: number | null; 'reel'?: string | null; @@ -210,7 +204,6 @@ export interface DB { "o_assets2Storyboard": o_assets2Storyboard; "o_event": o_event; "o_eventChapter": o_eventChapter; - "o_flowData": o_flowData; "o_image": o_image; "o_novel": o_novel; "o_outline": o_outline;