# Conflicts:
#	src/router.ts
This commit is contained in:
zhishi 2026-03-26 21:05:22 +08:00
commit bc4f3107a5
16 changed files with 252 additions and 275 deletions

View File

@ -1,77 +0,0 @@
# 烤龙肉的做法
## 前言
龙肉,作为幻想世界中最珍贵的食材之一,其烹饪方法自古以来就是冒险者和宫廷厨师们追求的终极秘技。以下是一份经典的烤龙肉食谱。
---
## 食材准备
| 食材 | 用量 | 备注 |
|------|------|------|
| 龙肉(里脊或腿肉) | 2公斤 | 需提前放血处理 |
| 龙息椒粉 | 2大勺 | 普通辣椒粉可替代 |
| 凤凰蛋黄 | 3个 | 鸡蛋黄可替代 |
| 精灵橄榄油 | 100毫升 | 特级初榨橄榄油可替代 |
| 矮人黑盐 | 适量 | 海盐可替代 |
| 迷迭香、百里香 | 各一把 | 新鲜为佳 |
| 蒜头 | 8瓣 | 拍碎 |
| 蜂蜜 | 3大勺 | 用于表面刷酱 |
---
## 烹饪步骤
### 第一步:腌制龙肉(需提前一天)
1. 将龙肉洗净,用厨房纸巾吸干表面水分
2. 用锋利的刀在肉面划几道深约1厘米的斜纹便于入味
3. 将蛋黄、橄榄油、龙息椒粉、黑盐混合,调成腌料
4. 均匀涂抹在龙肉表面,放入密封容器
5. 冷藏腌制12-24小时
### 第二步:准备香草束
1. 将迷迭香、百里香捆扎成束
2. 蒜瓣拍碎备用
3. 准备好蜂蜜刷酱
### 第三步:烤制
1. **预热烤炉**将烤炉预热至220°C若使用龙焰烤炉调至"青龙"档位)
2. **初次高温烤制**
- 将腌制好的龙肉放入烤盘
- 铺上香草束和蒜瓣
- 220°C烤制20分钟封住肉汁
3. **转中温慢烤**
- 温度降至160°C
- 每隔20分钟翻面一次并刷上蜂蜜
- 继续烤制约1.5-2小时视肉块大小调整
4. **检验熟度**
- 用探针温度计测量中心温度达65°C为五分熟
- 达75°C为全熟
- 龙肉建议七分熟约70°C口感最佳
### 第四步:静置与切片
1. 出炉后用锡纸包裹静置15分钟
2. 逆着纹理切成1厘米厚的片状
3. 摆盘,淋上烤盘中的肉汁
---
## 小贴士
- ⚠️ **安全提示**:处理龙肉时请佩戴防火手套,残余龙息可能引发灼伤
- 🍷 **搭配推荐**:建议搭配精灵白葡萄酒或矮人麦芽啤酒
- 🔥 若龙肉带有冰属性如霜龙烤制时间需延长30%
---
## 成品效果
外皮金黄酥脆,内部肉质鲜嫩多汁,带有独特的硫磺香气与蜂蜜的甜润,回味中隐约有龙息的微辣感。

View File

@ -19,6 +19,8 @@ if (!fs.existsSync(envFile)) {
console.log(`📄 已自动创建环境变量文件: ${envFile}`);
}
const pkg = JSON.parse(fs.readFileSync(path.resolve("package.json"), "utf8"));
const external = [
"electron",
"@huggingface/transformers",
@ -51,6 +53,9 @@ const appBuildConfig: esbuild.BuildOptions = {
},
sourcemap: false,
external,
define: {
__APP_VERSION__: JSON.stringify(pkg.version),
},
};
// Electron 主进程打包配置
@ -69,6 +74,9 @@ const mainBuildConfig: esbuild.BuildOptions = {
},
sourcemap: false,
external,
define: {
__APP_VERSION__: JSON.stringify(pkg.version),
},
};
(async () => {

View File

@ -40,7 +40,6 @@ export async function decisionAI(ctx: AgentContext) {
resTool.systemMessage("决策层AI 接管聊天");
const memory = new Memory("scriptAgent", isolationKey);
console.log("%c Line:43 🥟 isolationKey", "background:#4fff4B", isolationKey);
await memory.add("user", text);
const [skill, mem] = await Promise.all([useSkill("script_agent_decision.md"), memory.get(text)]);
@ -59,7 +58,6 @@ export async function decisionAI(ctx: AgentContext) {
].join("\n");
const prefixSystem = `${projectInfo}\n\n## 章节ID映射表\n${novelData.map((i: any) => `- ${i.id}: 第${i.index}`).join("\n")}\n\n`;
console.log("%c Line:57 🍧 prefixSystem", "background:#ea7e5c", prefixSystem);
const { textStream } = await u.Ai.Text("scriptAgent").stream({
system: prefixSystem + systemPrompt,

View File

@ -443,7 +443,7 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
table.text("type").notNullable(); // "main" | "references"
table.integer("createTime").notNullable();
table.integer("updateTime").notNullable();
table.integer("state").notNullable(); // 1正常0正在生成description-1description为空。-2归属为空,-3md5变动
table.integer("state").notNullable(); // 1正常0正在生成description-1description为空。-2归属为空,-3md5变动-4文件不存在
table.primary(["id"]);
},
initData: async (knex) => {

View File

@ -1,4 +1,4 @@
// @routes-hash 6a0b99b951c1563adc7b58f09afa1a45
// @routes-hash 758e343e27eb25780faf00eeab306216
import { Express } from "express";
import route1 from "./routes/agents/clearMemory";
@ -13,59 +13,59 @@ import route9 from "./routes/assets/batchGenerationData";
import route10 from "./routes/assets/delAssets";
import route11 from "./routes/assets/getAssetsApi";
import route12 from "./routes/assets/getImage";
import route13 from "./routes/assets/saveAssets";
import route14 from "./routes/assets/updateAssets";
import route15 from "./routes/assets/uploadClip";
import route16 from "./routes/assetsGenerate/generateAssets";
import route17 from "./routes/assetsGenerate/polishAssetsPrompt";
import route18 from "./routes/cornerScape/getAllAssets";
import route19 from "./routes/general/generalStatistics";
import route20 from "./routes/general/getSingleProject";
import route21 from "./routes/general/updateProject";
import route22 from "./routes/login/login";
import route23 from "./routes/migrate/migrateData";
import route24 from "./routes/modelSelect/getModelDetail";
import route25 from "./routes/modelSelect/getModelList";
import route26 from "./routes/novel/addNovel";
import route27 from "./routes/novel/batchDeleteNovel";
import route28 from "./routes/novel/delNovel";
import route29 from "./routes/novel/event/batchDeleteEvent";
import route30 from "./routes/novel/event/deletEvent";
import route31 from "./routes/novel/event/generateEvents";
import route32 from "./routes/novel/event/getEvent";
import route33 from "./routes/novel/getNovel";
import route34 from "./routes/novel/getNovelEventState";
import route35 from "./routes/novel/getNovelIndex";
import route36 from "./routes/novel/updateNovel";
import route37 from "./routes/other/deleteAllData";
import route38 from "./routes/other/getCaptcha";
import route39 from "./routes/production/assets/getAssetsData";
import route40 from "./routes/production/editImage/generateFlowImage";
import route41 from "./routes/production/editImage/getImageFlow";
import route42 from "./routes/production/editImage/saveImageFlow";
import route43 from "./routes/production/editImage/updateImageFlow";
import route44 from "./routes/production/exportImage";
import route45 from "./routes/production/getFlowData";
import route46 from "./routes/production/getProductionData";
import route47 from "./routes/production/getStoryboardData";
import route48 from "./routes/production/saveFlowData";
import route49 from "./routes/production/storyboard/downPreviewImage";
import route50 from "./routes/production/storyboard/getStoryboardData";
import route51 from "./routes/production/storyboard/previewImage";
import route52 from "./routes/production/workbench/confirmSelection";
import route53 from "./routes/production/workbench/delVideo";
import route54 from "./routes/production/workbench/generateVideo";
import route55 from "./routes/production/workbench/getChatLines";
import route56 from "./routes/production/workbench/getVideoModelDetail";
import route57 from "./routes/production/workbench/videoPolling";
import route58 from "./routes/project/addProject";
import route59 from "./routes/project/delProject";
import route60 from "./routes/project/editProject";
import route61 from "./routes/project/getProject";
import route62 from "./routes/script/addScript";
import route63 from "./routes/script/delScript";
import route64 from "./routes/script/exportScript";
import route65 from "./routes/script/extractAssets";
import route13 from "./routes/assets/getMaterialData";
import route14 from "./routes/assets/saveAssets";
import route15 from "./routes/assets/updateAssets";
import route16 from "./routes/assets/uploadClip";
import route17 from "./routes/assetsGenerate/generateAssets";
import route18 from "./routes/assetsGenerate/polishAssetsPrompt";
import route19 from "./routes/cornerScape/getAllAssets";
import route20 from "./routes/general/generalStatistics";
import route21 from "./routes/general/getSingleProject";
import route22 from "./routes/general/updateProject";
import route23 from "./routes/login/login";
import route24 from "./routes/migrate/migrateData";
import route25 from "./routes/modelSelect/getModelDetail";
import route26 from "./routes/modelSelect/getModelList";
import route27 from "./routes/novel/addNovel";
import route28 from "./routes/novel/batchDeleteNovel";
import route29 from "./routes/novel/delNovel";
import route30 from "./routes/novel/event/batchDeleteEvent";
import route31 from "./routes/novel/event/deletEvent";
import route32 from "./routes/novel/event/generateEvents";
import route33 from "./routes/novel/event/getEvent";
import route34 from "./routes/novel/getNovel";
import route35 from "./routes/novel/getNovelEventState";
import route36 from "./routes/novel/getNovelIndex";
import route37 from "./routes/novel/updateNovel";
import route38 from "./routes/other/deleteAllData";
import route39 from "./routes/other/getVersion";
import route40 from "./routes/production/assets/getAssetsData";
import route41 from "./routes/production/editImage/generateFlowImage";
import route42 from "./routes/production/editImage/getImageFlow";
import route43 from "./routes/production/editImage/saveImageFlow";
import route44 from "./routes/production/editImage/updateImageFlow";
import route45 from "./routes/production/exportImage";
import route46 from "./routes/production/getFlowData";
import route47 from "./routes/production/getProductionData";
import route48 from "./routes/production/getStoryboardData";
import route49 from "./routes/production/saveFlowData";
import route50 from "./routes/production/storyboard/downPreviewImage";
import route51 from "./routes/production/storyboard/getStoryboardData";
import route52 from "./routes/production/storyboard/previewImage";
import route53 from "./routes/production/workbench/confirmSelection";
import route54 from "./routes/production/workbench/delVideo";
import route55 from "./routes/production/workbench/generateVideo";
import route56 from "./routes/production/workbench/getChatLines";
import route57 from "./routes/production/workbench/getVideoModelDetail";
import route58 from "./routes/production/workbench/videoPolling";
import route59 from "./routes/project/addProject";
import route60 from "./routes/project/delProject";
import route61 from "./routes/project/editProject";
import route62 from "./routes/project/getProject";
import route63 from "./routes/script/addScript";
import route64 from "./routes/script/delScript";
import route65 from "./routes/script/exportScript";
import route66 from "./routes/script/getScrptApi";
import route67 from "./routes/script/updateScript";
import route68 from "./routes/scriptAgent/getPlanData";
@ -78,24 +78,25 @@ import route74 from "./routes/setting/fileManagement/openFolder";
import route75 from "./routes/setting/getTextModel";
import route76 from "./routes/setting/loginConfig/getUser";
import route77 from "./routes/setting/loginConfig/updateUserPwd";
import route78 from "./routes/setting/memoryConfig/getMemory";
import route79 from "./routes/setting/memoryConfig/sureMemory";
import route80 from "./routes/setting/skillManagement/addSkill";
import route81 from "./routes/setting/skillManagement/deleteSkill";
import route82 from "./routes/setting/skillManagement/embeddingSkill";
import route83 from "./routes/setting/skillManagement/generateDescription";
import route84 from "./routes/setting/skillManagement/getSkillList";
import route85 from "./routes/setting/skillManagement/scanSkills";
import route86 from "./routes/setting/skillManagement/updateSkill";
import route87 from "./routes/setting/vendorConfig/addVendor";
import route88 from "./routes/setting/vendorConfig/deleteVendor";
import route89 from "./routes/setting/vendorConfig/getVendorList";
import route90 from "./routes/setting/vendorConfig/modelTest";
import route91 from "./routes/setting/vendorConfig/updateVendor";
import route92 from "./routes/task/getTaskApi";
import route93 from "./routes/task/getTaskCategories";
import route94 from "./routes/task/taskDetails";
import route95 from "./routes/test/test";
import route78 from "./routes/setting/memoryConfig/delAllMemory";
import route79 from "./routes/setting/memoryConfig/getMemory";
import route80 from "./routes/setting/memoryConfig/sureMemory";
import route81 from "./routes/setting/skillManagement/addSkill";
import route82 from "./routes/setting/skillManagement/deleteSkill";
import route83 from "./routes/setting/skillManagement/embeddingSkill";
import route84 from "./routes/setting/skillManagement/generateDescription";
import route85 from "./routes/setting/skillManagement/getSkillList";
import route86 from "./routes/setting/skillManagement/scanSkills";
import route87 from "./routes/setting/skillManagement/updateSkill";
import route88 from "./routes/setting/vendorConfig/addVendor";
import route89 from "./routes/setting/vendorConfig/deleteVendor";
import route90 from "./routes/setting/vendorConfig/getVendorList";
import route91 from "./routes/setting/vendorConfig/modelTest";
import route92 from "./routes/setting/vendorConfig/updateVendor";
import route93 from "./routes/task/getTaskApi";
import route94 from "./routes/task/getTaskCategories";
import route95 from "./routes/task/taskDetails";
import route96 from "./routes/test/test";
export default async (app: Express) => {
app.use("/api/agents/clearMemory", route1);
@ -110,59 +111,59 @@ export default async (app: Express) => {
app.use("/api/assets/delAssets", route10);
app.use("/api/assets/getAssetsApi", route11);
app.use("/api/assets/getImage", route12);
app.use("/api/assets/saveAssets", route13);
app.use("/api/assets/updateAssets", route14);
app.use("/api/assets/uploadClip", route15);
app.use("/api/assetsGenerate/generateAssets", route16);
app.use("/api/assetsGenerate/polishAssetsPrompt", route17);
app.use("/api/cornerScape/getAllAssets", route18);
app.use("/api/general/generalStatistics", route19);
app.use("/api/general/getSingleProject", route20);
app.use("/api/general/updateProject", route21);
app.use("/api/login/login", route22);
app.use("/api/migrate/migrateData", route23);
app.use("/api/modelSelect/getModelDetail", route24);
app.use("/api/modelSelect/getModelList", route25);
app.use("/api/novel/addNovel", route26);
app.use("/api/novel/batchDeleteNovel", route27);
app.use("/api/novel/delNovel", route28);
app.use("/api/novel/event/batchDeleteEvent", route29);
app.use("/api/novel/event/deletEvent", route30);
app.use("/api/novel/event/generateEvents", route31);
app.use("/api/novel/event/getEvent", route32);
app.use("/api/novel/getNovel", route33);
app.use("/api/novel/getNovelEventState", route34);
app.use("/api/novel/getNovelIndex", route35);
app.use("/api/novel/updateNovel", route36);
app.use("/api/other/deleteAllData", route37);
app.use("/api/other/getCaptcha", route38);
app.use("/api/production/assets/getAssetsData", route39);
app.use("/api/production/editImage/generateFlowImage", route40);
app.use("/api/production/editImage/getImageFlow", route41);
app.use("/api/production/editImage/saveImageFlow", route42);
app.use("/api/production/editImage/updateImageFlow", route43);
app.use("/api/production/exportImage", route44);
app.use("/api/production/getFlowData", route45);
app.use("/api/production/getProductionData", route46);
app.use("/api/production/getStoryboardData", route47);
app.use("/api/production/saveFlowData", route48);
app.use("/api/production/storyboard/downPreviewImage", route49);
app.use("/api/production/storyboard/getStoryboardData", route50);
app.use("/api/production/storyboard/previewImage", route51);
app.use("/api/production/workbench/confirmSelection", route52);
app.use("/api/production/workbench/delVideo", route53);
app.use("/api/production/workbench/generateVideo", route54);
app.use("/api/production/workbench/getChatLines", route55);
app.use("/api/production/workbench/getVideoModelDetail", route56);
app.use("/api/production/workbench/videoPolling", route57);
app.use("/api/project/addProject", route58);
app.use("/api/project/delProject", route59);
app.use("/api/project/editProject", route60);
app.use("/api/project/getProject", route61);
app.use("/api/script/addScript", route62);
app.use("/api/script/delScript", route63);
app.use("/api/script/exportScript", route64);
app.use("/api/script/extractAssets", route65);
app.use("/api/assets/getMaterialData", route13);
app.use("/api/assets/saveAssets", route14);
app.use("/api/assets/updateAssets", route15);
app.use("/api/assets/uploadClip", route16);
app.use("/api/assetsGenerate/generateAssets", route17);
app.use("/api/assetsGenerate/polishAssetsPrompt", route18);
app.use("/api/cornerScape/getAllAssets", route19);
app.use("/api/general/generalStatistics", route20);
app.use("/api/general/getSingleProject", route21);
app.use("/api/general/updateProject", route22);
app.use("/api/login/login", route23);
app.use("/api/migrate/migrateData", route24);
app.use("/api/modelSelect/getModelDetail", route25);
app.use("/api/modelSelect/getModelList", route26);
app.use("/api/novel/addNovel", route27);
app.use("/api/novel/batchDeleteNovel", route28);
app.use("/api/novel/delNovel", route29);
app.use("/api/novel/event/batchDeleteEvent", route30);
app.use("/api/novel/event/deletEvent", route31);
app.use("/api/novel/event/generateEvents", route32);
app.use("/api/novel/event/getEvent", route33);
app.use("/api/novel/getNovel", route34);
app.use("/api/novel/getNovelEventState", route35);
app.use("/api/novel/getNovelIndex", route36);
app.use("/api/novel/updateNovel", route37);
app.use("/api/other/deleteAllData", route38);
app.use("/api/other/getVersion", route39);
app.use("/api/production/assets/getAssetsData", route40);
app.use("/api/production/editImage/generateFlowImage", route41);
app.use("/api/production/editImage/getImageFlow", route42);
app.use("/api/production/editImage/saveImageFlow", route43);
app.use("/api/production/editImage/updateImageFlow", route44);
app.use("/api/production/exportImage", route45);
app.use("/api/production/getFlowData", route46);
app.use("/api/production/getProductionData", route47);
app.use("/api/production/getStoryboardData", route48);
app.use("/api/production/saveFlowData", route49);
app.use("/api/production/storyboard/downPreviewImage", route50);
app.use("/api/production/storyboard/getStoryboardData", route51);
app.use("/api/production/storyboard/previewImage", route52);
app.use("/api/production/workbench/confirmSelection", route53);
app.use("/api/production/workbench/delVideo", route54);
app.use("/api/production/workbench/generateVideo", route55);
app.use("/api/production/workbench/getChatLines", route56);
app.use("/api/production/workbench/getVideoModelDetail", route57);
app.use("/api/production/workbench/videoPolling", route58);
app.use("/api/project/addProject", route59);
app.use("/api/project/delProject", route60);
app.use("/api/project/editProject", route61);
app.use("/api/project/getProject", route62);
app.use("/api/script/addScript", route63);
app.use("/api/script/delScript", route64);
app.use("/api/script/exportScript", route65);
app.use("/api/script/getScrptApi", route66);
app.use("/api/script/updateScript", route67);
app.use("/api/scriptAgent/getPlanData", route68);
@ -175,22 +176,23 @@ export default async (app: Express) => {
app.use("/api/setting/getTextModel", route75);
app.use("/api/setting/loginConfig/getUser", route76);
app.use("/api/setting/loginConfig/updateUserPwd", route77);
app.use("/api/setting/memoryConfig/getMemory", route78);
app.use("/api/setting/memoryConfig/sureMemory", route79);
app.use("/api/setting/skillManagement/addSkill", route80);
app.use("/api/setting/skillManagement/deleteSkill", route81);
app.use("/api/setting/skillManagement/embeddingSkill", route82);
app.use("/api/setting/skillManagement/generateDescription", route83);
app.use("/api/setting/skillManagement/getSkillList", route84);
app.use("/api/setting/skillManagement/scanSkills", route85);
app.use("/api/setting/skillManagement/updateSkill", route86);
app.use("/api/setting/vendorConfig/addVendor", route87);
app.use("/api/setting/vendorConfig/deleteVendor", route88);
app.use("/api/setting/vendorConfig/getVendorList", route89);
app.use("/api/setting/vendorConfig/modelTest", route90);
app.use("/api/setting/vendorConfig/updateVendor", route91);
app.use("/api/task/getTaskApi", route92);
app.use("/api/task/getTaskCategories", route93);
app.use("/api/task/taskDetails", route94);
app.use("/api/test/test", route95);
app.use("/api/setting/memoryConfig/delAllMemory", route78);
app.use("/api/setting/memoryConfig/getMemory", route79);
app.use("/api/setting/memoryConfig/sureMemory", route80);
app.use("/api/setting/skillManagement/addSkill", route81);
app.use("/api/setting/skillManagement/deleteSkill", route82);
app.use("/api/setting/skillManagement/embeddingSkill", route83);
app.use("/api/setting/skillManagement/generateDescription", route84);
app.use("/api/setting/skillManagement/getSkillList", route85);
app.use("/api/setting/skillManagement/scanSkills", route86);
app.use("/api/setting/skillManagement/updateSkill", route87);
app.use("/api/setting/vendorConfig/addVendor", route88);
app.use("/api/setting/vendorConfig/deleteVendor", route89);
app.use("/api/setting/vendorConfig/getVendorList", route90);
app.use("/api/setting/vendorConfig/modelTest", route91);
app.use("/api/setting/vendorConfig/updateVendor", route92);
app.use("/api/task/getTaskApi", route93);
app.use("/api/task/getTaskCategories", route94);
app.use("/api/task/taskDetails", route95);
app.use("/api/test/test", route96);
}

View File

@ -12,7 +12,6 @@ export default router.post(
}),
async (req, res) => {
const { id } = req.body;
console.log("%c Line:15 🍑 id", "background:#465975", id);
const assetsData = await u.db("o_image").where("assetsId", id);
await Promise.all(assetsData.map((i) => i.filePath && u.oss.deleteFile(i.filePath)));
await u.db("o_assets").where({ id }).delete();

View File

@ -0,0 +1,32 @@
import express from "express";
import u from "@/utils";
import { success } from "@/lib/responseFormat";
const router = express.Router();
// 获取生成图片
export default router.post("/", async (req, res) => {
const list = await u.db("o_assets").leftJoin("o_image", "o_assets.id", "=", "o_image.assetsId").where("o_assets.type", "clip").select("*");
const data = await Promise.all(
list.map(async (item) => ({
...item,
filePath: item.filePath ? await u.oss.getFileUrl(item.filePath) : "",
})),
);
// 查询o_videoConfig表拿到已选中的videoId
const configRows = await u.db("o_videoConfig").select("videoId");
const selectedIds = new Set(configRows.map((row) => row.videoId));
// 查询o_video表
const videoRows = await u.db("o_video").where("state", "生成成功").select("*");
// 处理并返回结果
const video = await Promise.all(
videoRows.map(async (row) => ({
id: row.id,
filePath: row.filePath ? await u.oss.getFileUrl(row.filePath) : "",
selected: selectedIds.has(row.id),
storyboard: row.storyboardId,
})),
);
res.status(200).send(success({ data, video }));
});

View File

@ -1,13 +0,0 @@
import express from "express";
import { success } from "@/lib/responseFormat";
import { md5 } from "js-md5";
const router = express.Router();
// 获取验证码
export default router.get("/", async (req, res) => {
const data: any = { svg: "<svg></svg>", captcha: md5("123") };
if (req.app.get("env") === "dev") {
data.key = 2;
}
res.status(200).send(success(data));
});

View File

@ -0,0 +1,22 @@
import express from "express";
import { success } from "@/lib/responseFormat";
const router = express.Router();
import fs from "fs";
import path from "path";
declare const __APP_VERSION__: string | undefined;
const APP_VERSION: string = (() => {
if (typeof __APP_VERSION__ !== "undefined") {
return __APP_VERSION__;
}
// 开发环境回退:从 package.json 读取
const pkgPath = path.resolve(process.cwd(), "package.json");
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
return pkg.version;
})();
export default router.get("/", async (req, res) => {
res.status(200).send(success(APP_VERSION));
});

View File

@ -14,6 +14,7 @@ export default router.post(
async (req, res) => {
const { scriptId, specifyIds } = req.body;
const data = await u.db("o_video").where("scriptId", scriptId).whereIn("id", specifyIds).andWhere("state", "生成中").select("*");
console.log("%c Line:17 🧀 data", "background:#93c0a4", data.length);
res.status(200).send(success(data));
},
);

View File

@ -20,9 +20,6 @@ export default router.post(
const assetsData = await u.db("o_assets").where("projectId", id).select("id");
const assetsIds = assetsData.map((item: any) => item.id);
const videoData = await u.db("o_video").whereIn("scriptId", scriptIds).select("id");
const videoIds = videoData.map((item: any) => item.id);
await u.db("o_project").where("id", id).delete();
await u.db("o_novel").where("projectId", id).delete();
await u.db("o_outline").where("projectId", id).delete();
@ -31,17 +28,9 @@ export default router.post(
await u.db("o_script").where("projectId", id).delete();
await u.db("o_assets").where("projectId", id).delete();
const tempAssetsQuery = u.db("o_image").where("projectId", id);
if (assetsIds.length > 0) {
tempAssetsQuery.orWhereIn("assetsId", assetsIds);
await u.db("o_image").where("projectId", id).orWhereIn("assetsId", assetsIds).delete();
}
if (scriptIds.length > 0) {
tempAssetsQuery.orWhereIn("scriptId", scriptIds);
}
if (videoIds.length > 0) {
tempAssetsQuery.orWhereIn("videoId", videoIds);
}
await tempAssetsQuery.delete();
await u.db("o_video").whereIn("scriptId", scriptIds).delete();

View File

@ -0,0 +1,9 @@
import express from "express";
import { error, success } from "@/lib/responseFormat";
import u from "@/utils";
const router = express.Router();
export default router.post("/", async (req, res) => {
await u.db("memories").del();
res.status(200).send(success(true));
});

View File

@ -51,7 +51,16 @@ export default router.post(
});
}
const list = await query.select("*").orderBy("updateTime", "desc").orderBy("type", "desc").limit(limit).offset(offset);
const list = await query
.select("*")
.orderByRaw(`
CASE type WHEN 'main' THEN 1 ELSE 0 END ASC,
CASE WHEN id NOT IN (SELECT skillId FROM o_skillAttribution) THEN 0 ELSE 1 END ASC,
CASE WHEN state = 1 THEN 1 ELSE 0 END ASC,
updateTime DESC
`)
.limit(limit)
.offset(offset);
// 查询每个技能的归属
const skillIds = list.map((item: any) => item.id);

View File

@ -44,19 +44,19 @@ export default router.post("/", async (req, res) => {
let updatedCount = 0;
let removedCount = 0;
const scannedIds = new Set<string>();
const scannedPaths = new Set<string>();
const existingRows = await u.db("o_skillList").whereIn("type", ["main", "references"]).select("id", "md5", "type", "path");
for (const item of scanItems) {
const id = crypto.createHash("md5").update(item.relativePath).digest("hex");
const name = path.basename(item.entry, ".md");
scannedPaths.add(item.relativePath);
const existing = existingRows.find((row: any) => row.path === item.relativePath);
const content = await fs.readFile(item.fullPath, "utf-8");
const md5 = crypto.createHash("md5").update(content).digest("hex");
const existing = existingRows.find((row: any) => row.id === id);
scannedIds.add(id);
if (!existing) {
const id = crypto.createHash("md5").update(item.relativePath).digest("hex");
const name = path.basename(item.entry, ".md");
await u.db("o_skillList").insert({
id,
path: item.relativePath,
@ -70,25 +70,19 @@ export default router.post("/", async (req, res) => {
state: -1,
});
insertedCount++;
continue;
}
if (existing.md5 !== md5 || existing.path !== item.relativePath || existing.type !== item.type) {
await u.db("o_skillList").where("id", id).update({
path: item.relativePath,
name,
md5,
type: item.type,
updateTime: now,
state: -3,
});
} else {
const updateData: Record<string, any> = { md5, updateTime: now };
if (existing.md5 !== md5) {
updateData.state = -3;
}
await u.db("o_skillList").where("id", existing.id).update(updateData);
updatedCount++;
}
}
const removedIds = existingRows.map((row: any) => row.id).filter((id: string) => !scannedIds.has(id));
const removedIds = existingRows.filter((row: any) => !scannedPaths.has(row.path)).map((row: any) => row.id);
if (removedIds.length > 0) {
await u.db("o_skillList").whereIn("id", removedIds).delete();
await u.db("o_skillList").whereIn("id", removedIds).update({ state: -4, updateTime: now });
removedCount = removedIds.length;
}

View File

@ -6,6 +6,7 @@ import { validateFields } from "@/middleware/middleware";
import fs from "fs/promises";
import path from "path";
import crypto from "crypto";
import { getEmbedding } from "@/utils/agent/embedding";
const router = express.Router();
@ -99,6 +100,14 @@ export default router.post(
state: resolveState(finalDescription, finalAttributions),
});
if (finalDescription && !current.embedding) {
const embedding = await getEmbedding(finalDescription);
await u
.db("o_skillList")
.where("id", nextId)
.update({ embedding: JSON.stringify(embedding) });
}
await u.db("o_skillAttribution").where("skillId", nextId).delete();
if (finalAttributions.length > 0) {
await u.db("o_skillAttribution").insert(

View File

@ -30,13 +30,8 @@ export default function runCode(code: string) {
urlToBase64,
mergeImages,
pollTask,
Response,
exports,
fetch,
axios,
FormData,
},
compiler: "javascript",