完成检查更新基本内容
This commit is contained in:
parent
0fee2f79f1
commit
b8de0326fb
8307
package-lock.json
generated
8307
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -52,6 +52,7 @@
|
|||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"custom-electron-titlebar": "^4.2.8",
|
"custom-electron-titlebar": "^4.2.8",
|
||||||
"dotenv": "^17.2.3",
|
"dotenv": "^17.2.3",
|
||||||
|
"electron-rebuild": "^3.2.9",
|
||||||
"express": "^5.2.1",
|
"express": "^5.2.1",
|
||||||
"express-ws": "^5.0.2",
|
"express-ws": "^5.0.2",
|
||||||
"fast-glob": "^3.3.3",
|
"fast-glob": "^3.3.3",
|
||||||
|
|||||||
@ -153,6 +153,14 @@ app.whenReady().then(async () => {
|
|||||||
app.exit(0);
|
app.exit(0);
|
||||||
return { ok: true };
|
return { ok: true };
|
||||||
},
|
},
|
||||||
|
apprestart: () => {
|
||||||
|
// 延迟执行,让响应先返回给前端
|
||||||
|
setTimeout(() => {
|
||||||
|
app.relaunch();
|
||||||
|
app.exit(0);
|
||||||
|
}, 500);
|
||||||
|
return { ok: true, message: "应用即将重启" };
|
||||||
|
},
|
||||||
windowismaximized: () => ({
|
windowismaximized: () => ({
|
||||||
maximized: mainWindow?.isMaximized() ?? false,
|
maximized: mainWindow?.isMaximized() ?? false,
|
||||||
}),
|
}),
|
||||||
|
|||||||
116
src/router.ts
116
src/router.ts
@ -1,4 +1,4 @@
|
|||||||
// @routes-hash 557dfd43a824a4bd4170d0e2c9a6b45c
|
// @routes-hash 9559cc3a8cb0291f04970e9ba299265f
|
||||||
import { Express } from "express";
|
import { Express } from "express";
|
||||||
|
|
||||||
import route1 from "./routes/agents/clearMemory";
|
import route1 from "./routes/agents/clearMemory";
|
||||||
@ -71,34 +71,35 @@ import route67 from "./routes/script/getScrptApi";
|
|||||||
import route68 from "./routes/script/updateScript";
|
import route68 from "./routes/script/updateScript";
|
||||||
import route69 from "./routes/scriptAgent/getPlanData";
|
import route69 from "./routes/scriptAgent/getPlanData";
|
||||||
import route70 from "./routes/scriptAgent/setPlanData";
|
import route70 from "./routes/scriptAgent/setPlanData";
|
||||||
import route71 from "./routes/setting/agentDeploy/agentSetKey";
|
import route71 from "./routes/setting/about/checkUpdate";
|
||||||
import route72 from "./routes/setting/agentDeploy/deployAgentModel";
|
import route72 from "./routes/setting/agentDeploy/agentSetKey";
|
||||||
import route73 from "./routes/setting/agentDeploy/getAgentDeploy";
|
import route73 from "./routes/setting/agentDeploy/deployAgentModel";
|
||||||
import route74 from "./routes/setting/dbConfig/clearData";
|
import route74 from "./routes/setting/agentDeploy/getAgentDeploy";
|
||||||
import route75 from "./routes/setting/fileManagement/openFolder";
|
import route75 from "./routes/setting/dbConfig/clearData";
|
||||||
import route76 from "./routes/setting/getTextModel";
|
import route76 from "./routes/setting/fileManagement/openFolder";
|
||||||
import route77 from "./routes/setting/loginConfig/getUser";
|
import route77 from "./routes/setting/getTextModel";
|
||||||
import route78 from "./routes/setting/loginConfig/updateUserPwd";
|
import route78 from "./routes/setting/loginConfig/getUser";
|
||||||
import route79 from "./routes/setting/memoryConfig/delAllMemory";
|
import route79 from "./routes/setting/loginConfig/updateUserPwd";
|
||||||
import route80 from "./routes/setting/memoryConfig/getMemory";
|
import route80 from "./routes/setting/memoryConfig/delAllMemory";
|
||||||
import route81 from "./routes/setting/memoryConfig/sureMemory";
|
import route81 from "./routes/setting/memoryConfig/getMemory";
|
||||||
import route82 from "./routes/setting/skillManagement/addSkill";
|
import route82 from "./routes/setting/memoryConfig/sureMemory";
|
||||||
import route83 from "./routes/setting/skillManagement/deleteSkill";
|
import route83 from "./routes/setting/skillManagement/addSkill";
|
||||||
import route84 from "./routes/setting/skillManagement/embeddingSkill";
|
import route84 from "./routes/setting/skillManagement/deleteSkill";
|
||||||
import route85 from "./routes/setting/skillManagement/generateDescription";
|
import route85 from "./routes/setting/skillManagement/embeddingSkill";
|
||||||
import route86 from "./routes/setting/skillManagement/getSkillList";
|
import route86 from "./routes/setting/skillManagement/generateDescription";
|
||||||
import route87 from "./routes/setting/skillManagement/scanSkills";
|
import route87 from "./routes/setting/skillManagement/getSkillList";
|
||||||
import route88 from "./routes/setting/skillManagement/updateSkill";
|
import route88 from "./routes/setting/skillManagement/scanSkills";
|
||||||
import route89 from "./routes/setting/vendorConfig/addVendor";
|
import route89 from "./routes/setting/skillManagement/updateSkill";
|
||||||
import route90 from "./routes/setting/vendorConfig/deleteVendor";
|
import route90 from "./routes/setting/vendorConfig/addVendor";
|
||||||
import route91 from "./routes/setting/vendorConfig/getVendorList";
|
import route91 from "./routes/setting/vendorConfig/deleteVendor";
|
||||||
import route92 from "./routes/setting/vendorConfig/modelTest";
|
import route92 from "./routes/setting/vendorConfig/getVendorList";
|
||||||
import route93 from "./routes/setting/vendorConfig/updateVendor";
|
import route93 from "./routes/setting/vendorConfig/modelTest";
|
||||||
import route94 from "./routes/task/getProject";
|
import route94 from "./routes/setting/vendorConfig/updateVendor";
|
||||||
import route95 from "./routes/task/getTaskApi";
|
import route95 from "./routes/task/getProject";
|
||||||
import route96 from "./routes/task/getTaskCategories";
|
import route96 from "./routes/task/getTaskApi";
|
||||||
import route97 from "./routes/task/taskDetails";
|
import route97 from "./routes/task/getTaskCategories";
|
||||||
import route98 from "./routes/test/test";
|
import route98 from "./routes/task/taskDetails";
|
||||||
|
import route99 from "./routes/test/test";
|
||||||
|
|
||||||
export default async (app: Express) => {
|
export default async (app: Express) => {
|
||||||
app.use("/api/agents/clearMemory", route1);
|
app.use("/api/agents/clearMemory", route1);
|
||||||
@ -171,32 +172,33 @@ export default async (app: Express) => {
|
|||||||
app.use("/api/script/updateScript", route68);
|
app.use("/api/script/updateScript", route68);
|
||||||
app.use("/api/scriptAgent/getPlanData", route69);
|
app.use("/api/scriptAgent/getPlanData", route69);
|
||||||
app.use("/api/scriptAgent/setPlanData", route70);
|
app.use("/api/scriptAgent/setPlanData", route70);
|
||||||
app.use("/api/setting/agentDeploy/agentSetKey", route71);
|
app.use("/api/setting/about/checkUpdate", route71);
|
||||||
app.use("/api/setting/agentDeploy/deployAgentModel", route72);
|
app.use("/api/setting/agentDeploy/agentSetKey", route72);
|
||||||
app.use("/api/setting/agentDeploy/getAgentDeploy", route73);
|
app.use("/api/setting/agentDeploy/deployAgentModel", route73);
|
||||||
app.use("/api/setting/dbConfig/clearData", route74);
|
app.use("/api/setting/agentDeploy/getAgentDeploy", route74);
|
||||||
app.use("/api/setting/fileManagement/openFolder", route75);
|
app.use("/api/setting/dbConfig/clearData", route75);
|
||||||
app.use("/api/setting/getTextModel", route76);
|
app.use("/api/setting/fileManagement/openFolder", route76);
|
||||||
app.use("/api/setting/loginConfig/getUser", route77);
|
app.use("/api/setting/getTextModel", route77);
|
||||||
app.use("/api/setting/loginConfig/updateUserPwd", route78);
|
app.use("/api/setting/loginConfig/getUser", route78);
|
||||||
app.use("/api/setting/memoryConfig/delAllMemory", route79);
|
app.use("/api/setting/loginConfig/updateUserPwd", route79);
|
||||||
app.use("/api/setting/memoryConfig/getMemory", route80);
|
app.use("/api/setting/memoryConfig/delAllMemory", route80);
|
||||||
app.use("/api/setting/memoryConfig/sureMemory", route81);
|
app.use("/api/setting/memoryConfig/getMemory", route81);
|
||||||
app.use("/api/setting/skillManagement/addSkill", route82);
|
app.use("/api/setting/memoryConfig/sureMemory", route82);
|
||||||
app.use("/api/setting/skillManagement/deleteSkill", route83);
|
app.use("/api/setting/skillManagement/addSkill", route83);
|
||||||
app.use("/api/setting/skillManagement/embeddingSkill", route84);
|
app.use("/api/setting/skillManagement/deleteSkill", route84);
|
||||||
app.use("/api/setting/skillManagement/generateDescription", route85);
|
app.use("/api/setting/skillManagement/embeddingSkill", route85);
|
||||||
app.use("/api/setting/skillManagement/getSkillList", route86);
|
app.use("/api/setting/skillManagement/generateDescription", route86);
|
||||||
app.use("/api/setting/skillManagement/scanSkills", route87);
|
app.use("/api/setting/skillManagement/getSkillList", route87);
|
||||||
app.use("/api/setting/skillManagement/updateSkill", route88);
|
app.use("/api/setting/skillManagement/scanSkills", route88);
|
||||||
app.use("/api/setting/vendorConfig/addVendor", route89);
|
app.use("/api/setting/skillManagement/updateSkill", route89);
|
||||||
app.use("/api/setting/vendorConfig/deleteVendor", route90);
|
app.use("/api/setting/vendorConfig/addVendor", route90);
|
||||||
app.use("/api/setting/vendorConfig/getVendorList", route91);
|
app.use("/api/setting/vendorConfig/deleteVendor", route91);
|
||||||
app.use("/api/setting/vendorConfig/modelTest", route92);
|
app.use("/api/setting/vendorConfig/getVendorList", route92);
|
||||||
app.use("/api/setting/vendorConfig/updateVendor", route93);
|
app.use("/api/setting/vendorConfig/modelTest", route93);
|
||||||
app.use("/api/task/getProject", route94);
|
app.use("/api/setting/vendorConfig/updateVendor", route94);
|
||||||
app.use("/api/task/getTaskApi", route95);
|
app.use("/api/task/getProject", route95);
|
||||||
app.use("/api/task/getTaskCategories", route96);
|
app.use("/api/task/getTaskApi", route96);
|
||||||
app.use("/api/task/taskDetails", route97);
|
app.use("/api/task/getTaskCategories", route97);
|
||||||
app.use("/api/test/test", route98);
|
app.use("/api/task/taskDetails", route98);
|
||||||
|
app.use("/api/test/test", route99);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,10 +2,10 @@ import express from "express";
|
|||||||
import u from "@/utils";
|
import u from "@/utils";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { error, success } from "@/lib/responseFormat";
|
import { error, success } from "@/lib/responseFormat";
|
||||||
import compressing from "compressing";
|
|
||||||
import { validateFields } from "@/middleware/middleware";
|
import { validateFields } from "@/middleware/middleware";
|
||||||
import { useSkill } from "@/utils/agent/skillsTools";
|
import { useSkill } from "@/utils/agent/skillsTools";
|
||||||
import { Output, tool } from "ai";
|
import { tool } from "ai";
|
||||||
|
import { o_script } from "@/types/database";
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
export const AssetSchema = z.object({
|
export const AssetSchema = z.object({
|
||||||
@ -14,79 +14,166 @@ export const AssetSchema = z.object({
|
|||||||
desc: z.string().describe("资产描述"),
|
desc: z.string().describe("资产描述"),
|
||||||
type: z.enum(["role", "tool", "scene"]).describe("资产类型"),
|
type: z.enum(["role", "tool", "scene"]).describe("资产类型"),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
type Asset = z.infer<typeof AssetSchema>;
|
||||||
|
|
||||||
|
/** 控制并发的辅助函数 */
|
||||||
|
async function pMap<T, R>(items: T[], fn: (item: T) => Promise<R>, concurrency: number): Promise<R[]> {
|
||||||
|
const results: R[] = [];
|
||||||
|
let index = 0;
|
||||||
|
async function worker() {
|
||||||
|
while (index < items.length) {
|
||||||
|
const i = index++;
|
||||||
|
results[i] = await fn(items[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => worker()));
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
export default router.post(
|
export default router.post(
|
||||||
"/",
|
"/",
|
||||||
validateFields({
|
validateFields({
|
||||||
scriptIds: z.array(z.number()),
|
scriptIds: z.array(z.number()),
|
||||||
projectId: z.number(),
|
projectId: z.number(),
|
||||||
|
concurrency: z.number().min(1).max(20).optional(),
|
||||||
}),
|
}),
|
||||||
async (req, res) => {
|
async (req, res) => {
|
||||||
const { scriptIds, projectId } = req.body;
|
const { scriptIds, projectId, concurrency = 3 } = req.body;
|
||||||
if (!scriptIds.length) return res.status(400).send(error("请先选择剧本"));
|
if (!scriptIds.length) return res.status(400).send(error("请先选择剧本"));
|
||||||
const scripts = await u.db("o_script").whereIn("id", scriptIds);
|
const scripts = await u.db("o_script").whereIn("id", scriptIds);
|
||||||
const intansce = u.Ai.Text("universalAgent");
|
const intansce = u.Ai.Text("universalAgent");
|
||||||
const novelData = await u.db("o_novel").where("projectId", projectId).select("chapterData");
|
const novelData = await u.db("o_novel").where("projectId", projectId).select("chapterData");
|
||||||
if (!novelData || novelData.length === 0) return res.status(400).send(error("请先上传小说"));
|
if (!novelData || novelData.length === 0) return res.status(400).send(error("请先上传小说"));
|
||||||
|
|
||||||
async function getAssets() {
|
// 每个 scriptId 对应提取出的资产列表
|
||||||
return await u.db("o_assets").where("projectId", projectId).select("id", "name");
|
const scriptAssetsMap = new Map<number, Asset[]>();
|
||||||
}
|
|
||||||
for (const scriptId of scriptIds) {
|
|
||||||
const resultTool = tool({
|
|
||||||
description: "返回结果时必须调用这个工具,",
|
|
||||||
inputSchema: z.object({
|
|
||||||
assetsList: z.array(AssetSchema).describe("剧本所使用资产列表,注意不要包含剧本内容,仅为所使用到的 道具、人物、场景、素材"),
|
|
||||||
}),
|
|
||||||
execute: async ({ assetsList }) => {
|
|
||||||
console.log("[tools] set_flowData script", assetsList);
|
|
||||||
if (assetsList && assetsList.length) {
|
|
||||||
const assetId = [];
|
|
||||||
const existingAssets = await getAssets();
|
|
||||||
for (const i of assetsList) {
|
|
||||||
if (existingAssets.length) {
|
|
||||||
const exist = existingAssets.find((j) => j.name === i.name);
|
|
||||||
if (exist) {
|
|
||||||
assetId.push(exist.id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const [id] = await u.db("o_assets").insert({
|
|
||||||
name: i.name,
|
|
||||||
prompt: i.prompt,
|
|
||||||
type: i.type,
|
|
||||||
describe: i.desc,
|
|
||||||
projectId: projectId,
|
|
||||||
startTime: Date.now(),
|
|
||||||
});
|
|
||||||
assetId.push(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
await u.db("o_scriptAssets").insert(assetId.map((i) => ({ scriptId: scriptId, assetId: i })));
|
// 构建 scriptId -> script 内容的映射
|
||||||
}
|
const scriptMap = new Map(scripts.map((s: o_script) => [s.id, s]));
|
||||||
return true;
|
|
||||||
},
|
const errors: { scriptId: number; error: string }[] = [];
|
||||||
});
|
|
||||||
try {
|
// 并发提取所有剧本的资产,每个剧本单独跑一次 AI
|
||||||
const skill = await useSkill("universal_agent.md");
|
await pMap(
|
||||||
const resData = await intansce.invoke({
|
scriptIds,
|
||||||
messages: [
|
async (scriptId: number) => {
|
||||||
{
|
const script = scriptMap.get(scriptId);
|
||||||
role: "system",
|
if (!script) {
|
||||||
content:
|
errors.push({ scriptId, error: "未找到对应剧本" });
|
||||||
skill.prompt +
|
return;
|
||||||
"\n\n提取剧本中涉及的资产(角色、场景、道具),参考技能 script_assets_extract 规范,结果必须通过 resultTool 工具返回。",
|
}
|
||||||
},
|
|
||||||
{
|
// 用闭包收集当前 scriptId 的资产
|
||||||
role: "user",
|
let collected: Asset[] = [];
|
||||||
content: `请根据以下剧本提取对应的剧本资产(角色、场景、道具、素材片段):\n\n${scripts.map((i) => i.content).join("\n\n---\n\n")}`,
|
|
||||||
},
|
const resultTool = tool({
|
||||||
],
|
description: "返回结果时必须调用这个工具,",
|
||||||
tools: { ...skill.tools, resultTool },
|
inputSchema: z.object({
|
||||||
|
assetsList: z.array(AssetSchema).describe("剧本所使用资产列表,注意不要包含剧本内容,仅为所使用到的 道具、人物、场景、素材"),
|
||||||
|
}),
|
||||||
|
execute: async ({ assetsList }) => {
|
||||||
|
console.log("[tools] set_flowData script", assetsList);
|
||||||
|
if (assetsList && assetsList.length) {
|
||||||
|
collected = assetsList;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
});
|
});
|
||||||
console.log("%c Line:47 🥝 resData", "background:#2eafb0", resData);
|
|
||||||
} catch (e) {
|
try {
|
||||||
console.log("%c Line:52 🍢 e", "background:#42b983", e);
|
const skill = await useSkill("universal_agent.md");
|
||||||
|
await intansce.invoke({
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
role: "system",
|
||||||
|
content:
|
||||||
|
skill.prompt +
|
||||||
|
"\n\n提取剧本中涉及的资产(角色、场景、道具),参考技能 script_assets_extract 规范,结果必须通过 resultTool 工具返回。",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: "user",
|
||||||
|
content: `请根据以下剧本提取对应的剧本资产(角色、场景、道具、素材片段):\n\n${script.content}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
tools: { ...skill.tools, resultTool },
|
||||||
|
});
|
||||||
|
} catch (e: any) {
|
||||||
|
const msg = e?.message || String(e);
|
||||||
|
console.error(`[extractAssets] scriptId=${scriptId} name=${script.name} 提取失败:`, msg);
|
||||||
|
errors.push({ scriptId, error: script.name + ":" + u.error(e).message });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!collected.length) {
|
||||||
|
errors.push({ scriptId, error: "AI 未返回任何资产" });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
scriptAssetsMap.set(scriptId, collected);
|
||||||
|
},
|
||||||
|
concurrency,
|
||||||
|
);
|
||||||
|
|
||||||
|
// 如果全部失败,直接返回错误
|
||||||
|
if (!scriptAssetsMap.size) {
|
||||||
|
return res.status(500).send(error("所有剧本资产提取均失败", errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 按 name 合并所有资产,同名资产只保留第一个
|
||||||
|
const mergedAssetsMap = new Map<string, Asset>();
|
||||||
|
// 同时记录每个资产名称关联的 scriptId 列表
|
||||||
|
const assetScriptIds = new Map<string, number[]>();
|
||||||
|
|
||||||
|
for (const [scriptId, assets] of scriptAssetsMap) {
|
||||||
|
for (const asset of assets) {
|
||||||
|
if (!mergedAssetsMap.has(asset.name)) {
|
||||||
|
mergedAssetsMap.set(asset.name, asset);
|
||||||
|
}
|
||||||
|
const ids = assetScriptIds.get(asset.name) || [];
|
||||||
|
ids.push(scriptId);
|
||||||
|
assetScriptIds.set(asset.name, ids);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 一次性查询数据库中已有的资产
|
||||||
|
const existingAssets = await u.db("o_assets").where("projectId", projectId).select("id", "name");
|
||||||
|
const existingMap = new Map(existingAssets.map((a) => [a.name!, a.id!]));
|
||||||
|
|
||||||
|
// 批量插入不存在的资产
|
||||||
|
const toInsert = [...mergedAssetsMap.values()].filter((asset) => !existingMap.has(asset.name));
|
||||||
|
if (toInsert.length) {
|
||||||
|
await u.db("o_assets").insert(
|
||||||
|
toInsert.map((asset) => ({
|
||||||
|
name: asset.name,
|
||||||
|
prompt: asset.prompt,
|
||||||
|
type: asset.type,
|
||||||
|
describe: asset.desc,
|
||||||
|
projectId: projectId,
|
||||||
|
startTime: Date.now(),
|
||||||
|
})),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重新查询所有资产,获取完整的 name -> id 映射
|
||||||
|
const allAssets = await u.db("o_assets").where("projectId", projectId).select("id", "name");
|
||||||
|
const nameToId = new Map(allAssets.map((a) => [a.name, a.id]));
|
||||||
|
|
||||||
|
// 批量建立 scriptId <-> assetId 的关联
|
||||||
|
const scriptAssetRows: { scriptId: number; assetId: number }[] = [];
|
||||||
|
for (const [name, sIds] of assetScriptIds) {
|
||||||
|
const assetId = nameToId.get(name);
|
||||||
|
if (assetId) {
|
||||||
|
for (const sid of sIds) {
|
||||||
|
scriptAssetRows.push({ scriptId: sid, assetId });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await u.db("o_scriptAssets").whereIn("scriptId", scriptIds).delete();
|
||||||
|
if (scriptAssetRows.length) {
|
||||||
|
await u.db("o_scriptAssets").insert(scriptAssetRows);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.send(success(errors.length ? `部分剧本资产提取失败\n${errors.map((i) => i.error).join("\n")}` : "资产提取完成"));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@ -23,11 +23,11 @@ export default router.post("/", async (req, res) => {
|
|||||||
const currentVersionList = APP_VERSION.split(".").map(Number);
|
const currentVersionList = APP_VERSION.split(".").map(Number);
|
||||||
//对比Major
|
//对比Major
|
||||||
if (taggerList[0] > currentVersionList[0]) {
|
if (taggerList[0] > currentVersionList[0]) {
|
||||||
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: true }));
|
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: false }));
|
||||||
}
|
}
|
||||||
//对比Minor
|
//对比Minor
|
||||||
if (taggerList[1] > currentVersionList[1]) {
|
if (taggerList[1] > currentVersionList[1]) {
|
||||||
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: true }));
|
return res.status(200).send(success({ needUpdate: true, latestVersion: tagger, reinstall: false }));
|
||||||
}
|
}
|
||||||
//Patch
|
//Patch
|
||||||
if (taggerList[2] > currentVersionList[2]) {
|
if (taggerList[2] > currentVersionList[2]) {
|
||||||
|
|||||||
@ -5,15 +5,19 @@ import { z } from "zod";
|
|||||||
import { validateFields } from "@/middleware/middleware";
|
import { validateFields } from "@/middleware/middleware";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
export default router.post("/", validateFields({
|
export default router.post(
|
||||||
|
"/",
|
||||||
|
validateFields({
|
||||||
id: z.number(),
|
id: z.number(),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
model: z.string(),
|
model: z.string(),
|
||||||
modelName: z.string(),
|
modelName: z.string(),
|
||||||
vendorId: z.number().nullable(),
|
vendorId: z.number().nullable(),
|
||||||
desc: z.string(),
|
desc: z.string(),
|
||||||
}), async (req, res) => {
|
}),
|
||||||
|
async (req, res) => {
|
||||||
const { id, name, model, modelName, vendorId, desc } = req.body;
|
const { id, name, model, modelName, vendorId, desc } = req.body;
|
||||||
await u.db("o_agentDeploy").where({ id }).update({ id, name, model, modelName, vendorId, desc });
|
await u.db("o_agentDeploy").where({ id }).update({ id, name, model, modelName, vendorId, desc });
|
||||||
res.status(200).send(success("配置成功"));
|
res.status(200).send(success("配置成功"));
|
||||||
});
|
},
|
||||||
|
);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user