diff --git a/NOTICES.txt b/NOTICES.txt index 4e21b5c..ef08f0b 100644 --- a/NOTICES.txt +++ b/NOTICES.txt @@ -40,6 +40,12 @@ Repository: https://github.com/vercel/ai ----------------------------- +Name: @huggingface/transformers +License: Apache-2.0 +Repository: https://github.com/huggingface/transformers.js + +----------------------------- + Name: @rmp135/sql-ts License: MIT Repository: https://github.com/rmp135/sql-ts @@ -76,6 +82,12 @@ Repository: https://github.com/DefinitelyTyped/DefinitelyTyped ----------------------------- +Name: @types/lodash +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + +----------------------------- + Name: @types/morgan License: MIT Repository: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -178,6 +190,12 @@ Repository: https://github.com/form-data/form-data ----------------------------- +Name: graphlib +License: MIT +Repository: https://github.com/dagrejs/graphlib + +----------------------------- + Name: is-path-inside License: MIT Repository: https://github.com/sindresorhus/is-path-inside @@ -208,6 +226,12 @@ Repository: https://github.com/davglass/license-checker ----------------------------- +Name: lodash +License: MIT +Repository: https://github.com/lodash/lodash + +----------------------------- + Name: morgan License: MIT Repository: https://github.com/expressjs/morgan @@ -220,9 +244,9 @@ Repository: https://github.com/remy/nodemon ----------------------------- -Name: qwen-ai-provider +Name: qwen-ai-provider-v5 License: Apache-2.0 -Repository: https://github.com/Younis-Ahmed/qwen-ai-provider +Repository: https://github.com/bolechen/qwen-ai-provider-v5 ----------------------------- @@ -244,12 +268,24 @@ Repository: https://github.com/lovell/sharp ----------------------------- +Name: socket.io +License: MIT +Repository: https://github.com/socketio/socket.io + +----------------------------- + Name: sqlite3 License: BSD-3-Clause Repository: https://github.com/TryGhost/node-sqlite3 ----------------------------- +Name: sucrase +License: MIT +Repository: https://github.com/alangpierce/sucrase + +----------------------------- + Name: tsx License: MIT Repository: https://github.com/privatenumber/tsx @@ -268,6 +304,12 @@ Repository: https://github.com/uuidjs/uuid ----------------------------- +Name: vm2 +License: MIT +Repository: https://github.com/patriksimek/vm2 + +----------------------------- + Name: zhipu-ai-provider License: Apache-2.0 Repository: https://github.com/Xiang-CH/zhipu-ai-provider diff --git a/data/skills/production-agent/decision/SKILL.md b/data/skills/production-agent/decision/SKILL.md index 1226750..fe3fb98 100644 --- a/data/skills/production-agent/decision/SKILL.md +++ b/data/skills/production-agent/decision/SKILL.md @@ -7,20 +7,6 @@ description: 短剧漫剧制作决策层。负责分析用户需求、制定执 短剧漫剧制作的指挥层,负责整体决策和协调。始终以用户当前指令为最终目标推进:默认直接协调执行,只有用户明确提出需要新增或修改拍摄计划时,才进入计划编辑与确认流程。 -## 可用工具 - -| 工具 | 说明 | -| ---------------------------- | ----------------------------------------------------------------------------------------------------------- | -| `activate_skill` | 激活技能,加载完整指令和资源列表到上下文 | -| `read_skill_file` | 读取已激活技能目录下的参考资料文件 | -| `deepRetrieve` | 深度检索记忆,通过关键词回忆历史对话详情 | -| `run_sub_agent` | 启动子 Agent 执行任务(可用:`executionAI`、`supervisionAI`) | -| `get_flowData` | 获取工作区数据(key: `script` 剧本 / `scriptPlan` 拍摄计划 / `assets` 资产列表 / `storyboardTable` 分镜表) | -| `get_flowData_schema` | 获取工作区数据的类型结构 | -| `set_flowData` | 保存数据到工作区(lodash 路径) | -| `generate_assets_images` | 生成衍生资产图片(传入资产 id 列表) | -| `generate_storyboard_images` | 生成分镜图(传入剧本文本) | - ## 核心工作流程(必须严格遵循) ### 首先:判断用户意图 @@ -30,34 +16,30 @@ description: 短剧漫剧制作决策层。负责分析用户需求、制定执 - **用户发起执行类需求**(如"开始制作第 4 集"、"继续生成分镜"、"提取角色资产") → 直接进入阶段三,按用户目标执行 - **用户明确要求新增/修改拍摄计划**(如"给我出一版拍摄计划"、"第 2 步改一下"、"加一个镜头") → 进入阶段二,更新 `scriptPlan` 并与用户确认 - **用户确认拍摄计划**(如"可以"、"确认"、"开始吧"、"没问题") → 在不重做计划的前提下进入阶段三执行 - + **禁止**:在用户未提出计划诉求时,主动生成或反复重生成拍摄计划。 ### 阶段一:收集信息(仅首次进入会话或上下文不足时触发) -1. 调用 `get_flowData`(key: `script`)获取当前剧本内容 -2. 调用 `get_flowData`(key: `scriptPlan`)获取已有拍摄计划(可能为空) -3. 调用 `get_flowData`(key: `assets`)获取资产数据,了解项目现状 -4. 调用 `deepRetrieve` 检索相关历史记忆,了解已完成的工作进度 -5. 使用 `read_skill_file` 加载 `references/plan.md` 获取计划制定规范 +1. 调用 `deepRetrieve` 检索相关历史记忆,了解已完成的工作进度 ### 阶段二:编辑拍摄计划并对话确认(仅用户明确提出时触发) -1. 根据剧本内容、工作区数据、历史记忆和用户需求,新增或修改**拍摄计划**(scriptPlan) -2. 调用 `set_flowData`(key: `scriptPlan`, value: 最新拍摄计划文本)将拍摄计划同步到前端工作区 +1. 根据历史记忆和用户需求,新增或修改**拍摄计划** +2. 调用 `set_plane` 将拍摄计划同步到前端工作区 3. **将拍摄计划回复给用户**,请求确认 4. 输出拍摄计划后**停止并等待用户回复**,不要自行继续 5. 如果用户要求调整: - 根据用户反馈修改拍摄计划 - - 再次调用 `set_flowData`(key: `scriptPlan`, value: 修改后的拍摄计划)同步到前端 + - 再次调用 `set_plane` 同步到前端 - 重新回复修改后的拍摄计划,继续等待确认 - **循环此过程**,直到用户明确确认 ### 阶段三:按用户目标执行(默认阶段) -以用户当前指令为目标,优先执行用户要求;若 `scriptPlan` 已存在则按其作为参考,不存在时也可直接执行当前任务。需要分步时再拆解为执行步骤,并按顺序调用 `run_sub_agent` 工具: +以用户当前指令为目标,优先执行用户要求;若拍摄计划已存在则按其作为参考,不存在时也可直接执行当前任务。需要分步时再拆解为执行步骤,并按顺序调用 `run_sub_agent`: -1. 每次调用 `run_sub_agent` 时,选择 `executionAI` 作为子 Agent,将当前步骤的任务描述作为 `prompt` 参数传入 +1. 每次调用 `run_sub_agent` 时,选择 `executionAI` 作为子 Agent,将当前步骤的任务描述作为 `prompt` 传入 2. 检查返回结果是否符合预期,不符合则调整指令重试 3. 将上一步的输出作为上下文传入下一步(如有依赖) 4. 全部步骤完成后,向用户汇报整体结果 @@ -69,14 +51,6 @@ description: 短剧漫剧制作决策层。负责分析用户需求、制定执 - 关注步骤间的依赖关系,确保顺序合理 - 利用 `deepRetrieve` 检索历史记忆,避免重复已完成的工作 - **用户目标优先**:默认直接响应并推进用户当前任务,不要为了流程完整性而强制先生成计划 -- **计划按需维护**:仅当用户明确要求新增/修改拍摄计划时,才更新 `scriptPlan`,且每次改动都调用 `set_flowData` 同步到前端 -- **提取衍生资产后**:计划中必须包含"询问用户是否生成资产图片"步骤。若用户确认,执行层将调用 `generate_assets_images` 工具批量生成衍生资产图片 -- **生成分镜表后**:计划中必须包含"询问用户是否生成分镜图片"步骤。若用户确认,执行层将调用 `generate_storyboard_images` 工具生成分镜图 - -## 参考资料 - -使用 `read_skill_file` 按需加载: - -- [生成计划](references/plan.md) — 计划制定规范和回复模板 - -**注意**:按需加载参考资料,不要一次性全部加载。 +- **计划按需维护**:仅当用户明确要求新增/修改拍摄计划时,才更新拍摄计划,且每次改动都调用 `set_plane` 同步到前端 +- **提取衍生资产后**:计划中必须包含"询问用户是否生成资产图片"步骤。若用户确认,执行层将调用相应工具批量生成衍生资产图片 +- **生成分镜表后**:计划中必须包含"询问用户是否生成分镜图片"步骤。若用户确认,执行层将调用相应工具生成分镜图 diff --git a/data/skills/production-agent/execution/SKILL.md b/data/skills/production-agent/execution/SKILL.md index c89abc8..002985c 100644 --- a/data/skills/production-agent/execution/SKILL.md +++ b/data/skills/production-agent/execution/SKILL.md @@ -22,7 +22,7 @@ description: > 1. 调用 `get_flowData` 分别获取 `script`(剧本)和 `assets`(现有资产列表) 2. 根据[衍生资产提取](references/derive-assets-extraction.md)文档中的提取原则,分析剧本内容,为每个角色资产识别出关联的衍生资产(道具、服饰、法器、座驾、场景物件等) -3. 对每个有衍生状态的资产调用 `set_flowData({ key: "assets[N].derive", value: derive数组 })` 逐个保存 +3. 对每个有衍生状态的资产调用 `set_flowData_assets` 保存 4. 告知用户提取完成,列出为每个角色提取的衍生资产概要 5. **询问用户是否需要生成衍生资产图片**: - 如果用户确认需要,收集所有需要生成图片的资产 id,调用 `generate_assets_images({ ids: [资产id列表] })` 生成图片 diff --git a/package.json b/package.json index f2c2724..d662544 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,6 @@ "license": "bun run scripts/license.ts" }, "dependencies": { - "@ag-ui/core": "^0.0.47", "@ai-sdk/anthropic": "^3.0.35", "@ai-sdk/deepseek": "^2.0.17", "@ai-sdk/devtools": "^0.0.11", @@ -49,6 +48,7 @@ "axios-retry": "^4.5.0", "best-effort-json-parser": "^1.2.1", "better-sqlite3": "^12.6.2", + "compressing": "^2.1.0", "cors": "^2.8.5", "dotenv": "^17.2.3", "express": "^5.2.1", diff --git a/src/agents/productionAgent/index.ts b/src/agents/productionAgent/index.ts index c8f2cc7..9899a39 100644 --- a/src/agents/productionAgent/index.ts +++ b/src/agents/productionAgent/index.ts @@ -35,7 +35,7 @@ function buildSystemPrompt(skillPrompt: string, mem: Awaited { - await memory.add("decisionAI", completion.text); + await memory.add("assistant:decision", completion.text); }, }); @@ -81,10 +81,10 @@ export async function executionAI(ctx: AgentContext) { tools: { ...skill.tools, ...memory.getTools(), - ...useTools(ctx.socket), + ...useTools(ctx.resTool), }, onFinish: async (completion) => { - await memory.add("executionAI", completion.text); + await memory.add("assistant:execution", completion.text); }, }); @@ -94,7 +94,6 @@ export async function executionAI(ctx: AgentContext) { export async function supervisionAI(ctx: AgentContext) { const { isolationKey, text, abortSignal } = ctx; const memory = new Memory("productionAgent", isolationKey); - await memory.add("user", text); const [skill, mem] = await Promise.all([useSkill("production-agent", "supervision"), memory.get(text)]); const systemPrompt = buildSystemPrompt(skill.prompt, mem); @@ -108,7 +107,7 @@ export async function supervisionAI(ctx: AgentContext) { ...memory.getTools(), }, onFinish: async (completion) => { - await memory.add("supervisionAI", completion.text); + await memory.add("assistant:supervision", completion.text); }, }); diff --git a/src/agents/productionAgent/tools.ts b/src/agents/productionAgent/tools.ts index d5fd9ae..8483193 100644 --- a/src/agents/productionAgent/tools.ts +++ b/src/agents/productionAgent/tools.ts @@ -1,60 +1,151 @@ import { tool, Tool } from "ai"; -import { z, toJSONSchema } from "zod"; +import { z } from "zod"; import _ from "lodash"; -import { Socket } from "socket.io"; +import ResTool from "@/socket/resTool"; -const deriveSchema = z.object({ name: z.string().min(1).max(20), desc: z.string().min(1).max(100) }); -const assetSchema = z.object({ assetsId: z.string(), name: z.string(), desc: z.string(), src: z.string(), derive: z.array(deriveSchema).optional() }); -const storyboardTableSchema = z.string().describe("分镜表的markdown文本"); -const flowDataSchema = z.object({ script: z.string(), scriptPlan: z.string(), assets: z.array(assetSchema), storyboardTable: storyboardTableSchema }); - -type FlowData = z.infer; - -const keySchema = z.object({ - key: z - .enum(["script", "scriptPlan", "assets", "storyboardTable"]) - .describe("script=剧本,scriptPlan=拍摄计划,assets=资产列表,storyboardTable=分镜表"), +export const deriveAssetSchema = z.object({ + id: z.number().describe("衍生资产ID,如果新增则为空").optional(), + assetsId: z.string().describe("关联的资产ID"), + name: z.string().describe("衍生资产名称"), + desc: z.string().describe("衍生资产描述"), + src: z.string().describe("衍生资产资源路径"), + state: z.enum(["未生成", "生成中", "已完成", "生成失败"]).describe("衍生资产生成状态"), +}); +export const assetItemSchema = z.object({ + assetsId: z.string().describe("资产唯一标识"), + name: z.string().describe("资产名称"), + desc: z.string().describe("资产描述"), + src: z.string().describe("资产资源路径"), + derive: z.array(deriveAssetSchema).describe("衍生资产列表"), +}); +export const storyboardSchema = z.object({ + id: z.number().describe("分镜ID"), + title: z.string().describe("分镜标题"), + description: z.string().describe("分镜描述"), + camera: z.string().describe("镜头信息"), + duration: z.number().describe("持续时长(秒)"), + frameMode: z.enum(["firstFrame", "endFrame", "linesSoundEffects"]).describe("帧模式: 首帧/尾帧/台词音效"), + prompt: z.string().describe("生成提示词"), + lines: z.string().nullable().describe("台词内容"), + sound: z.string().nullable().describe("音效内容"), + associateAssetsIds: z.array(z.number()).describe("关联资产ID列表"), + src: z.string().nullable().describe("分镜资源路径"), +}); +export const workbenchDataSchema = z.object({ + name: z.string().describe("项目名称"), + duration: z.string().describe("视频时长"), + resolution: z.string().describe("分辨率"), + fps: z.string().describe("帧率"), + cover: z.string().optional().describe("封面图片路径"), + gradient: z.string().optional().describe("渐变色配置"), +}); +export const posterItemSchema = z.object({ + id: z.number().describe("海报ID"), + image: z.string().describe("海报图片路径"), +}); +export const flowDataSchema = z.object({ + script: z.string().describe("剧本内容"), + scriptPlan: z.string().describe("拍摄计划"), + assets: z.array(assetItemSchema).describe("衍生资产"), + storyboardTable: z.string().describe("分镜表"), + storyboard: z.array(storyboardSchema).describe("分镜列表"), + workbench: workbenchDataSchema.describe("工作台配置"), + poster: z + .object({ + items: z.array(posterItemSchema).describe("海报项目列表"), + }) + .describe("海报配置"), }); -const valueSchema = z - .union([z.string(), z.array(assetSchema), assetSchema, z.array(deriveSchema), z.array(storyboardTableSchema)]) - .describe("路径对应的值"); -export default (socket: Socket, toolsNames?: string[]) => { +export type FlowData = z.infer; + +const keySchema = z.enum(Object.keys(flowDataSchema.shape) as [keyof FlowData, ...Array]); +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[]) => { + const { socket } = resTool; const tools: Record = { get_flowData: tool({ description: "获取工作区数据", - inputSchema: keySchema, + inputSchema: z.object({ + key: keySchema.describe("数据key"), + }), execute: async ({ key }) => { + resTool.systemMessage(`正在阅读 ${flowDataKeyLabels[key]} 数据...`); console.log("[tools] get_flowData", key); const flowData: FlowData = await new Promise((resolve) => socket.emit("getFlowData", { key }, (res: any) => resolve(res))); return flowData[key]; }, }), - get_flowData_schema: tool({ - description: "获取工作区数据的类型结构,在使用set_flowData前应先调用", - inputSchema: keySchema, - execute: async ({ key }) => { - console.log("[tools] get_flowData_schema", key); - return toJSONSchema(flowDataSchema.shape[key]); + set_flowData_script: tool({ + description: "保存剧本内容到工作区", + inputSchema: z.object({ value: flowDataSchema.shape.script }), + execute: async ({ value }) => { + console.log("[tools] set_flowData script", value); + resTool.systemMessage("正在保存 剧本 数据"); + socket.emit("setFlowData", { key: "script", value }); + return true; }, }), - set_flowData: tool({ - description: "保存数据到工作区,key为lodash路径,先调用get_flowData_schema了解可用路径和类型", - inputSchema: z.object({ - key: z.string().describe("lodash路径,如 script、assets[0].derive"), - value: valueSchema, - }), - execute: async ({ key, value }) => { - console.log("[tools] set_flowData", key, value); - const flowData: FlowData = await new Promise((resolve) => socket.emit("getFlowData", { key }, (res: any) => resolve(res))); - const backup = _.cloneDeep(_.get(flowData, key)); - _.set(flowData, key, value); - const r = flowDataSchema.safeParse(flowData); - if (!r.success) { - _.set(flowData, key, backup); - return { error: r.error.issues.map((i) => `[${i.path.join(".")}] ${i.message}`).join("; ") }; - } - socket.emit("setFlowData", { key, value }); + set_flowData_scriptPlan: tool({ + description: "保存拍摄计划到工作区", + inputSchema: z.object({ value: flowDataSchema.shape.scriptPlan }), + execute: async ({ value }) => { + console.log("[tools] set_flowData scriptPlan", value); + resTool.systemMessage("正在保存 拍摄计划 数据"); + socket.emit("setFlowData", { key: "scriptPlan", value }); + return true; + }, + }), + set_flowData_assets: tool({ + description: "保存衍生资产列表到工作区", + inputSchema: z.object({ value: flowDataSchema.shape.assets }), + execute: async ({ value }) => { + console.log("[tools] set_flowData assets", value); + resTool.systemMessage("正在保存 衍生资产 数据"); + socket.emit("setFlowData", { key: "assets", value }); + return true; + }, + }), + set_flowData_storyboardTable: tool({ + description: "保存分镜表到工作区", + inputSchema: z.object({ value: flowDataSchema.shape.storyboardTable }), + execute: async ({ value }) => { + console.log("[tools] set_flowData storyboardTable", value); + resTool.systemMessage("正在保存 分镜表 数据..."); + socket.emit("setFlowData", { key: "storyboardTable", value }); + return true; + }, + }), + set_flowData_storyboard: tool({ + description: "保存分镜列表到工作区", + inputSchema: z.object({ value: flowDataSchema.shape.storyboard }), + execute: async ({ value }) => { + console.log("[tools] set_flowData storyboard", value); + resTool.systemMessage("正在保存 分镜列表 数据..."); + socket.emit("setFlowData", { key: "storyboard", value }); + return true; + }, + }), + set_flowData_workbench: tool({ + description: "保存工作台配置数据到工作区", + inputSchema: z.object({ value: flowDataSchema.shape.workbench }), + execute: async ({ value }) => { + console.log("[tools] set_flowData workbench", value); + resTool.systemMessage("正在保存 工作台配置 数据..."); + socket.emit("setFlowData", { key: "workbench", value }); + return true; + }, + }), + set_flowData_poster: tool({ + description: "保存海报配置到工作区", + inputSchema: z.object({ value: flowDataSchema.shape.poster }), + execute: async ({ value }) => { + console.log("[tools] set_flowData poster", value); + resTool.systemMessage("正在保存 海报 数据..."); + socket.emit("setFlowData", { key: "poster", value }); return true; }, }), @@ -62,23 +153,23 @@ export default (socket: Socket, toolsNames?: string[]) => { generate_storyboard_images: tool({ description: `生成一组图片任务,支持图片间的依赖关系(以图生图)。 -参数说明: -- images: 图片任务数组 - - id: 图片唯一标识符 - - prompt: 图片生成提示词 - - referenceIds: 依赖的参考图id数组,无依赖填空数组[] - - assetIds: 参考的资产图id数组(可选) + 参数说明: + - images: 图片任务数组 + - id: 图片唯一标识符 + - prompt: 图片生成提示词 + - referenceIds: 依赖的参考图id数组,无依赖填空数组[] + - assetIds: 参考的资产图id数组(可选) -依赖规则: -1. referenceIds中的id必须存在于images数组中 -2. 禁止循环依赖(如A依赖B,B依赖A) -3. 被依赖的图片会先生成,其结果作为参考图传入 + 依赖规则: + 1. referenceIds中的id必须存在于images数组中 + 2. 禁止循环依赖(如A依赖B,B依赖A) + 3. 被依赖的图片会先生成,其结果作为参考图传入 -示例:生成猫图,再以猫图为参考生成狗图 -images: [ - {id: "cat", prompt: "一只橘猫", referenceIds: [], assetIds: []}, - {id: "dog", prompt: "风格相同的金毛犬", referenceIds: ["cat"], assetIds: []} -]`, + 示例:生成猫图,再以猫图为参考生成狗图 + images: [ + {id: "cat", prompt: "一只橘猫", referenceIds: [], assetIds: []}, + {id: "dog", prompt: "风格相同的金毛犬", referenceIds: ["cat"], assetIds: []} + ]`, inputSchema: z.object({ images: z.array( z.object({ diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts index 10d796f..7540d01 100644 --- a/src/lib/initDB.ts +++ b/src/lib/initDB.ts @@ -329,8 +329,12 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => name: "o_flowData", builder: (table) => { table.integer("id").notNullable(); - table.string("name"); + table.integer("projectId"); + table.integer("espisodeId"); + table.string("key"); //用户其他方式索引 + table.string("data"); table.integer("createTime"); + table.integer("updateTime"); table.primary(["id"]); table.unique(["id"]); }, diff --git a/src/router.ts b/src/router.ts index 5de8d73..617a5fd 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 35b38e94f3f229944c2a0c85a8439b87 +// @routes-hash 6d230b9f278cc0ba49f62f5e48365dea import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -38,39 +38,42 @@ import route34 from "./routes/production/editStoryboard/generateStoryboardImage" import route35 from "./routes/production/editStoryboard/getStoryboardFlow"; import route36 from "./routes/production/editStoryboard/saveStoryboardFlow"; import route37 from "./routes/production/editStoryboard/updateStoryboardFlow"; -import route38 from "./routes/production/getProductionData"; -import route39 from "./routes/production/getStoryboardData"; -import route40 from "./routes/production/workbench/confirmSelection"; -import route41 from "./routes/production/workbench/delVideo"; -import route42 from "./routes/production/workbench/generateVideo"; -import route43 from "./routes/production/workbench/getVideoModelDetail"; -import route44 from "./routes/production/workbench/videoPolling"; -import route45 from "./routes/project/addProject"; -import route46 from "./routes/project/delProject"; -import route47 from "./routes/project/editProject"; -import route48 from "./routes/project/getProject"; -import route49 from "./routes/script/addScript"; -import route50 from "./routes/script/delScript"; -import route51 from "./routes/script/getScrptApi"; -import route52 from "./routes/script/updateScript"; -import route53 from "./routes/setting/agentDeploy/deployAgentModel"; -import route54 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route55 from "./routes/setting/agentDeploy/updateKey"; -import route56 from "./routes/setting/dbConfig/clearData"; -import route57 from "./routes/setting/getTextModel"; -import route58 from "./routes/setting/loginConfig/getUser"; -import route59 from "./routes/setting/loginConfig/updateUserPwd"; -import route60 from "./routes/setting/memoryConfig/getMemory"; -import route61 from "./routes/setting/memoryConfig/sureMemory"; -import route62 from "./routes/setting/vendorConfig/addVendor"; -import route63 from "./routes/setting/vendorConfig/deleteVendor"; -import route64 from "./routes/setting/vendorConfig/getVendorList"; -import route65 from "./routes/setting/vendorConfig/modelTest"; -import route66 from "./routes/setting/vendorConfig/updateVendor"; -import route67 from "./routes/task/getMyTaskApi"; -import route68 from "./routes/task/getTaskCategories"; -import route69 from "./routes/task/taskDetails"; -import route70 from "./routes/test/test"; +import route38 from "./routes/production/getFlowData"; +import route39 from "./routes/production/getProductionData"; +import route40 from "./routes/production/getStoryboardData"; +import route41 from "./routes/production/saveFlowData"; +import route42 from "./routes/production/workbench/confirmSelection"; +import route43 from "./routes/production/workbench/delVideo"; +import route44 from "./routes/production/workbench/generateVideo"; +import route45 from "./routes/production/workbench/getVideoModelDetail"; +import route46 from "./routes/production/workbench/videoPolling"; +import route47 from "./routes/project/addProject"; +import route48 from "./routes/project/delProject"; +import route49 from "./routes/project/editProject"; +import route50 from "./routes/project/getProject"; +import route51 from "./routes/script/addScript"; +import route52 from "./routes/script/delScript"; +import route53 from "./routes/script/exportScript"; +import route54 from "./routes/script/getScrptApi"; +import route55 from "./routes/script/updateScript"; +import route56 from "./routes/setting/agentDeploy/deployAgentModel"; +import route57 from "./routes/setting/agentDeploy/getAgentDeploy"; +import route58 from "./routes/setting/agentDeploy/updateKey"; +import route59 from "./routes/setting/dbConfig/clearData"; +import route60 from "./routes/setting/getTextModel"; +import route61 from "./routes/setting/loginConfig/getUser"; +import route62 from "./routes/setting/loginConfig/updateUserPwd"; +import route63 from "./routes/setting/memoryConfig/getMemory"; +import route64 from "./routes/setting/memoryConfig/sureMemory"; +import route65 from "./routes/setting/vendorConfig/addVendor"; +import route66 from "./routes/setting/vendorConfig/deleteVendor"; +import route67 from "./routes/setting/vendorConfig/getVendorList"; +import route68 from "./routes/setting/vendorConfig/modelTest"; +import route69 from "./routes/setting/vendorConfig/updateVendor"; +import route70 from "./routes/task/getTaskApi"; +import route71 from "./routes/task/getTaskCategories"; +import route72 from "./routes/task/taskDetails"; +import route73 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -110,37 +113,40 @@ export default async (app: Express) => { app.use("/api/production/editStoryboard/getStoryboardFlow", route35); app.use("/api/production/editStoryboard/saveStoryboardFlow", route36); app.use("/api/production/editStoryboard/updateStoryboardFlow", route37); - app.use("/api/production/getProductionData", route38); - app.use("/api/production/getStoryboardData", route39); - app.use("/api/production/workbench/confirmSelection", route40); - app.use("/api/production/workbench/delVideo", route41); - app.use("/api/production/workbench/generateVideo", route42); - app.use("/api/production/workbench/getVideoModelDetail", route43); - app.use("/api/production/workbench/videoPolling", route44); - app.use("/api/project/addProject", route45); - app.use("/api/project/delProject", route46); - app.use("/api/project/editProject", route47); - app.use("/api/project/getProject", route48); - app.use("/api/script/addScript", route49); - app.use("/api/script/delScript", route50); - app.use("/api/script/getScrptApi", route51); - app.use("/api/script/updateScript", route52); - app.use("/api/setting/agentDeploy/deployAgentModel", route53); - app.use("/api/setting/agentDeploy/getAgentDeploy", route54); - app.use("/api/setting/agentDeploy/updateKey", route55); - app.use("/api/setting/dbConfig/clearData", route56); - app.use("/api/setting/getTextModel", route57); - app.use("/api/setting/loginConfig/getUser", route58); - app.use("/api/setting/loginConfig/updateUserPwd", route59); - app.use("/api/setting/memoryConfig/getMemory", route60); - app.use("/api/setting/memoryConfig/sureMemory", route61); - app.use("/api/setting/vendorConfig/addVendor", route62); - app.use("/api/setting/vendorConfig/deleteVendor", route63); - app.use("/api/setting/vendorConfig/getVendorList", route64); - app.use("/api/setting/vendorConfig/modelTest", route65); - app.use("/api/setting/vendorConfig/updateVendor", route66); - app.use("/api/task/getMyTaskApi", route67); - app.use("/api/task/getTaskCategories", route68); - app.use("/api/task/taskDetails", route69); - app.use("/api/test/test", route70); + app.use("/api/production/getFlowData", route38); + app.use("/api/production/getProductionData", route39); + app.use("/api/production/getStoryboardData", route40); + app.use("/api/production/saveFlowData", route41); + app.use("/api/production/workbench/confirmSelection", route42); + app.use("/api/production/workbench/delVideo", route43); + app.use("/api/production/workbench/generateVideo", route44); + app.use("/api/production/workbench/getVideoModelDetail", route45); + app.use("/api/production/workbench/videoPolling", route46); + app.use("/api/project/addProject", route47); + app.use("/api/project/delProject", route48); + app.use("/api/project/editProject", route49); + app.use("/api/project/getProject", route50); + app.use("/api/script/addScript", route51); + app.use("/api/script/delScript", route52); + app.use("/api/script/exportScript", route53); + app.use("/api/script/getScrptApi", route54); + app.use("/api/script/updateScript", route55); + app.use("/api/setting/agentDeploy/deployAgentModel", route56); + app.use("/api/setting/agentDeploy/getAgentDeploy", route57); + app.use("/api/setting/agentDeploy/updateKey", route58); + app.use("/api/setting/dbConfig/clearData", route59); + app.use("/api/setting/getTextModel", route60); + app.use("/api/setting/loginConfig/getUser", route61); + app.use("/api/setting/loginConfig/updateUserPwd", route62); + app.use("/api/setting/memoryConfig/getMemory", route63); + app.use("/api/setting/memoryConfig/sureMemory", route64); + app.use("/api/setting/vendorConfig/addVendor", route65); + app.use("/api/setting/vendorConfig/deleteVendor", route66); + app.use("/api/setting/vendorConfig/getVendorList", route67); + app.use("/api/setting/vendorConfig/modelTest", route68); + app.use("/api/setting/vendorConfig/updateVendor", route69); + app.use("/api/task/getTaskApi", route70); + app.use("/api/task/getTaskCategories", route71); + app.use("/api/task/taskDetails", route72); + app.use("/api/test/test", route73); } diff --git a/src/routes/agents/clearMemory.ts b/src/routes/agents/clearMemory.ts index cfa59a8..7f2249f 100644 --- a/src/routes/agents/clearMemory.ts +++ b/src/routes/agents/clearMemory.ts @@ -16,10 +16,20 @@ export default router.post( const { projectId, episodesId, type = "all" } = req.body; const isolationKey = `${projectId}:${episodesId ?? ""}`; - const query = u.db("memories").where({ isolationKey }); - if (type !== "all") query.where("type", type); - - await query.del(); + if (type === "all") { + await u.db("memories").where({ isolationKey }).del(); + } else if (type === "message") { + // 删 message 时同步删关联的 summary,避免悬挂引用 + await u.db("memories").where({ isolationKey, type: "message" }).del(); + await u.db("memories").where({ isolationKey, type: "summary" }).del(); + } else { + // 删 summary 时将关联的 message 重置为未总结,使其重新进入 shortTerm + await u + .db("memories") + .where({ isolationKey, type: "message", summarized: 1 }) + .update({ summarized: 0 }); + await u.db("memories").where({ isolationKey, type: "summary" }).del(); + } res.status(200).send(success(null)); }, diff --git a/src/routes/agents/getMemory.ts b/src/routes/agents/getMemory.ts index 5768ca8..3c129ca 100644 --- a/src/routes/agents/getMemory.ts +++ b/src/routes/agents/getMemory.ts @@ -5,6 +5,15 @@ import { success } from "@/lib/responseFormat"; import { validateFields } from "@/middleware/middleware"; const router = express.Router(); +function normalizeRole(role?: string | null): "user" | "assistant" { + return role?.startsWith("assistant") ? "assistant" : "user"; +} + +function getAssistantName(role?: string | null): string | undefined { + if (!role?.startsWith("assistant:")) return undefined; + return role.split(":")[1] || "assistant"; +} + export default router.post( "/", validateFields({ @@ -19,15 +28,16 @@ export default router.post( .db("memories") .where({ isolationKey, type: "message" }) .orderBy("createTime", "asc") - .select("id", "content", "createTime"); + .select("id", "role", "content", "createTime"); const history = rows.map((row) => ({ id: row.id, - role: "user", - content: [{ type: "text", status: "complete", data: row.content }], + role: normalizeRole(row.role), + name: getAssistantName(row.role), + content: [{ type: "markdown", status: "complete", data: row.content }], createTime: row.createTime, })); - res.status(200).send(success({ history })); + res.status(200).send(success(history)); }, ); diff --git a/src/routes/assetsGenerate/generateAssets.ts b/src/routes/assetsGenerate/generateAssets.ts index 3e1001f..3dd11f7 100644 --- a/src/routes/assetsGenerate/generateAssets.ts +++ b/src/routes/assetsGenerate/generateAssets.ts @@ -153,6 +153,7 @@ export default router.post( return res.status(500).send("资产已被删除"); } } catch (e) { + console.errork(e); await u.db("o_image").where("id", imageId).update({ state: "生成失败", }); diff --git a/src/routes/production/getFlowData.ts b/src/routes/production/getFlowData.ts new file mode 100644 index 0000000..f9a81e7 --- /dev/null +++ b/src/routes/production/getFlowData.ts @@ -0,0 +1,82 @@ +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(); +import { FlowData } from "@/agents/productionAgent/tools"; + +export default router.post( + "/", + validateFields({ + projectId: z.number(), + episodesId: z.number(), + }), + async (req, res) => { + const { projectId, episodesId } = req.body; + const sqlData = await u.db("o_flowData").where({ projectId, episodesId }).first(); + + const scriptData = await u.db("o_script").where("projectId", projectId).first(); + + const assetsData = await u + .db("o_assets") + .leftJoin("o_image", "o_assets.imageId", "o_image.id") + .select("o_assets.*", "o_image.filePath") + .where("o_assets.projectId", projectId); + let childAssetsData = await u + .db("o_assets") + .leftJoin("o_image", "o_assets.imageId", "o_image.id") + .select("o_assets.*", "o_image.filePath") + .where("o_assets.projectId", projectId) + .whereNotNull("o_assets.sonId"); + + if (!sqlData) { + const flowData: FlowData = { + script: scriptData?.content ?? "", + scriptPlan: "", + assets: await Promise.all( + assetsData.map(async (item) => ({ + assetsId: item.id, + name: item.name ?? "", + desc: item.describe ?? "", + src: item.filePath && (await u.oss.getFileUrl(item.filePath!)), + derive: await Promise.all( + childAssetsData + .filter((child) => child.sonId === item.id) + .map(async (child) => ({ + id: child.id, + assetsId: item.id, + name: child.name ?? "", + desc: child.describe ?? "", + src: child.filePath && (await u.oss.getFileUrl(child.filePath!)), + state: child.state ?? "未生成", //todo:矫正状态值 + })), + ), + })), + ), + storyboardTable: "", + storyboard: [], + //todo:矫正workbench数据 + workbench: { + name: scriptData?.name ?? "", + duration: "01:03", + resolution: "1920×1080", + fps: "30fps", + gradient: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)", + }, + //todo:矫正封面数据 + poster: { + items: [], + }, + }; + return res.status(200).send(success(flowData)); + } else { + try { + const flowData = JSON.parse(sqlData!.data ?? "{}"); + res.status(200).send(success(flowData)); + } catch (err) { + res.status(200).send(error()); + } + } + }, +); diff --git a/src/routes/production/saveFlowData.ts b/src/routes/production/saveFlowData.ts new file mode 100644 index 0000000..14fd7e1 --- /dev/null +++ b/src/routes/production/saveFlowData.ts @@ -0,0 +1,35 @@ +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(); +import { flowDataSchema } from "@/agents/productionAgent/tools"; + +export default router.post( + "/", + validateFields({ + projectId: z.number(), + episodesId: z.number(), + data: flowDataSchema, + }), + async (req, res) => { + const { projectId, episodesId } = req.body; + const sqlData = await u.db("o_flowData").where({ projectId, episodesId }).first(); + if (!sqlData) { + await u.db("o_flowData").insert({ + projectId, + episodesId, + data: JSON.stringify(req.body.data), + }); + } else { + await u + .db("o_flowData") + .where({ projectId, episodesId }) + .update({ + data: JSON.stringify(req.body.data), + }); + } + return res.status(200).send(success()); + }, +); diff --git a/src/routes/script/exportScript.ts b/src/routes/script/exportScript.ts new file mode 100644 index 0000000..739506b --- /dev/null +++ b/src/routes/script/exportScript.ts @@ -0,0 +1,27 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { success } from "@/lib/responseFormat"; +import compressing from 'compressing'; +import { validateFields } from "@/middleware/middleware"; +const router = express.Router(); + +export default router.post( + "/", + validateFields({ + id: z.array(z.number()), + }), + async (req, res) => { + const { id } = req.body; + const scripts = await u.db("o_script").whereIn("id", id); + const textList = scripts.map((s) => ({ name: s.name, text: s.content })); + //压缩为zip文件 + const zipStream = new compressing.zip.Stream(); + textList.forEach((item) => { + zipStream.addEntry(Buffer.from(item.text!), { relativePath: `${item.name}.txt` }); + }); + res.setHeader("Content-Type", "application/zip"); + res.setHeader("Content-Disposition", `attachment; filename=scripts.zip`); + zipStream.pipe(res); + }, +); diff --git a/src/routes/task/getMyTaskApi.ts b/src/routes/task/getTaskApi.ts similarity index 95% rename from src/routes/task/getMyTaskApi.ts rename to src/routes/task/getTaskApi.ts index ea9c94c..9e7c769 100644 --- a/src/routes/task/getMyTaskApi.ts +++ b/src/routes/task/getTaskApi.ts @@ -28,7 +28,8 @@ export default router.post( }) .select("o_tasks.*", "o_project.* ") .offset(offset) - .limit(limit); + .limit(limit) + .orderBy("o_tasks.id", "desc"); const totalQuery = (await u .db("o_tasks") .andWhere((qb) => { diff --git a/src/socket/resTool.ts b/src/socket/resTool.ts index 920d904..91d2e47 100644 --- a/src/socket/resTool.ts +++ b/src/socket/resTool.ts @@ -1,10 +1,8 @@ import u from "@/utils"; import { Socket } from "socket.io"; -type Role = "developer" | "system" | "assistant" | "user"; - class ResTool { - constructor(private socket: Socket) {} + constructor(public socket: Socket) {} textMessage(name: string = "AI") { const messageId = u.uuid(); diff --git a/src/types/database.d.ts b/src/types/database.d.ts index 6ef2668..ce05685 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,4 +1,4 @@ -// @db-hash 481efc498b16db66100914dff7c6aab5 +// @db-hash d0e44c9c923897d847cded0a28012baf //该文件由脚本自动生成,请勿手动修改 export interface memories { @@ -58,8 +58,12 @@ export interface o_eventChapter { } export interface o_flowData { 'createTime'?: number | null; + 'data'?: string | null; + 'episodesId'?: number | null; 'id'?: number; - 'name'?: string | null; + 'key'?: string | null; + 'projectId'?: number | null; + 'updateTime'?: number | null; } export interface o_image { 'assetsId'?: number | null; diff --git a/src/utils/agent/embedding.ts b/src/utils/agent/embedding.ts index f195e23..565a19c 100644 --- a/src/utils/agent/embedding.ts +++ b/src/utils/agent/embedding.ts @@ -12,7 +12,6 @@ let extractor: FeatureExtractionPipeline | null = null; export async function initEmbedding(): Promise { if (extractor) return; - //todo 模型配置放到这里 const modelConfigData = await db("o_setting").whereIn("key", ["modelOnnxFile", "modelDtype"]); const modelObj: Record = {}; Object.entries(modelConfigData).forEach(([key, value]) => { diff --git a/src/utils/ai.ts b/src/utils/ai.ts index bde273c..0c7edb6 100644 --- a/src/utils/ai.ts +++ b/src/utils/ai.ts @@ -1,5 +1,5 @@ -import { generateText, streamText, Output, stepCountIs, ModelMessage, LanguageModel, Tool, GenerateTextResult } from "ai"; -import { parse } from "best-effort-json-parser"; +import { generateText, streamText, wrapLanguageModel, stepCountIs } from "ai"; +import { devToolsMiddleware } from "@ai-sdk/devtools"; import axios from "axios"; import { transform } from "sucrase"; import u from "@/utils"; @@ -76,7 +76,10 @@ class AiText { return streamText({ ...(input.tools && { stopWhen: stepCountIs(Object.keys(input.tools).length * 5) }), ...input, - model: await getVendorTemplateFn("textRequest", modelName), + model: wrapLanguageModel({ + model: await getVendorTemplateFn("textRequest", modelName), + middleware: devToolsMiddleware(), + }), } as Parameters[0]); } } diff --git a/yarn.lock b/yarn.lock index 3f0bc5e..af1ce62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,14 +7,6 @@ resolved "https://registry.npmmirror.com/7zip-bin/-/7zip-bin-5.2.0.tgz#7a03314684dd6572b7dfa89e68ce31d60286854d" integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== -"@ag-ui/core@^0.0.47": - version "0.0.47" - resolved "https://registry.npmmirror.com/@ag-ui/core/-/core-0.0.47.tgz#0f6b8cb6bf1f90a562c64d6c0b4585ae0174e4ed" - integrity sha512-fHat7ZErAH028R90psYclTWaj6PdcvN2GJxzwWPF/j1c5ceqbF2+6xe+t06Psg+gCzZneI9QE3IkOkdJNplZ5A== - dependencies: - rxjs "7.8.1" - zod "^3.22.4" - "@ai-sdk/anthropic@^3.0.35": version "3.0.50" resolved "https://registry.npmmirror.com/@ai-sdk/anthropic/-/anthropic-3.0.50.tgz#5ffdb638ae5418a2bf53d97448346af7ab77e09a" @@ -129,6 +121,14 @@ ajv "^6.12.0" ajv-keywords "^3.4.1" +"@eggjs/yauzl@^2.11.0": + version "2.11.0" + resolved "https://registry.npmmirror.com/@eggjs/yauzl/-/yauzl-2.11.0.tgz#b8e4413f50fc7c51451f770f152de4c1137aa99b" + integrity sha512-Jq+k2fCZJ3i3HShb0nxLUiAgq5pwo8JTT1TrH22JoehZQ0Nm2dvByGIja1NYfNyuE4Tx5/Dns5nVsBN/mlC8yg== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer2 "^1.2.0" + "@electron/asar@3.4.1", "@electron/asar@^3.3.1": version "3.4.1" resolved "https://registry.npmmirror.com/@electron/asar/-/asar-3.4.1.tgz#4e9196a4b54fba18c56cd8d5cac67c5bdc588065" @@ -1217,6 +1217,13 @@ at-least-node@^1.0.0: resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + axios-retry@^4.5.0: version "4.5.0" resolved "https://registry.npmmirror.com/axios-retry/-/axios-retry-4.5.0.tgz#441fdc32cedf63d6abd5de5d53db3667afd4c39b" @@ -1285,6 +1292,14 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -1343,6 +1358,19 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -1353,6 +1381,11 @@ buffer-equal-constant-time@^1.0.1: resolved "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -1461,7 +1494,7 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== @@ -1469,7 +1502,17 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: es-errors "^1.3.0" function-bind "^1.1.2" -call-bound@^1.0.2: +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== @@ -1659,6 +1702,19 @@ compare-version@^0.1.2: resolved "https://registry.npmmirror.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== +compressing@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/compressing/-/compressing-2.1.0.tgz#c27eb0f3e3532fa41cc9c9c499715770b020db65" + integrity sha512-CJsNw09YdOqRJ4GJxMIlshK8OEr/0e2jvygRXNf48B73KqsF94OIjcAScq6oargUrT4MZQradg6+5Z+mNYVvDQ== + dependencies: + "@eggjs/yauzl" "^2.11.0" + flushwritable "^1.0.0" + get-ready "^1.0.0" + iconv-lite "^0.5.0" + streamifier "^0.1.1" + tar-stream "^1.5.2" + yazl "^2.4.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1694,6 +1750,11 @@ core-util-is@1.0.2: resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@^2.8.5, cors@~2.8.5: version "2.8.6" resolved "https://registry.npmmirror.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96" @@ -1783,7 +1844,7 @@ defer-to-connect@^2.0.0: resolved "https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1: +define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -1990,7 +2051,7 @@ encoding@^0.1.12, encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.5" resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== @@ -2222,6 +2283,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fd-slicer2@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/fd-slicer2/-/fd-slicer2-1.2.0.tgz#a2c54a540639bbcd4702480821771341277ca20e" + integrity sha512-3lBUNUckhMZduCc4g+Pw4Ve16LD9vpX9b8qUkkKq2mgDRLYWzblszZH2luADnJqjJe+cypngjCuKRm/IW12rRw== + dependencies: + pend "^1.2.0" + fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -2270,11 +2338,23 @@ flatbuffers@^25.1.24: resolved "https://registry.npmmirror.com/flatbuffers/-/flatbuffers-25.9.23.tgz#346811557fe9312ab5647535e793c761e9c81eb1" integrity sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ== +flushwritable@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/flushwritable/-/flushwritable-1.0.0.tgz#3e328d8fde412ad47e738e3be750b4d290043498" + integrity sha512-3VELfuWCLVzt5d2Gblk8qcqFro6nuwvxwMzHaENVDHI7rxcBRtMCwTk/E9FXcgh+82DSpavPNDueA9+RxXJoFg== + follow-redirects@^1.15.11: version "1.15.11" resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.npmmirror.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + foreground-child@^3.1.0: version "3.3.1" resolved "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" @@ -2394,7 +2474,7 @@ get-caller-file@^2.0.5: resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -2423,6 +2503,11 @@ get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" +get-ready@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/get-ready/-/get-ready-1.0.0.tgz#f91817f1e9adecfea13a562adfc8de883ab34782" + integrity sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw== + get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -2559,7 +2644,7 @@ has-flag@^4.0.0: resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== @@ -2679,6 +2764,13 @@ iconv-corefoundation@^1.1.7: cli-truncate "^2.1.0" node-addon-api "^1.6.3" +iconv-lite@^0.5.0: + version "0.5.2" + resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.5.2.tgz#af6d628dccfb463b7364d97f715e4b74b8c8c2b8" + integrity sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag== + dependencies: + safer-buffer ">= 2.1.2 < 3" + iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -2733,7 +2825,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.4: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2765,6 +2857,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-core-module@^2.16.1: version "2.16.1" resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" @@ -2819,11 +2916,28 @@ is-retry-allowed@^2.2.0: resolved "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== +is-typed-array@^1.1.14: + version "1.1.15" + resolved "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isbinaryfile@^4.0.8: version "4.0.10" resolved "https://registry.npmmirror.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" @@ -3735,7 +3849,7 @@ pe-library@^0.4.1: resolved "https://registry.npmmirror.com/pe-library/-/pe-library-0.4.1.tgz#e269be0340dcb13aa6949d743da7d658c3e2fbea" integrity sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw== -pend@~1.2.0: +pend@^1.2.0, pend@~1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== @@ -3789,6 +3903,11 @@ pluralize@^8.0.0: resolved "https://registry.npmmirror.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + prebuild-install@^7.1.1: version "7.1.3" resolved "https://registry.npmmirror.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" @@ -3812,6 +3931,11 @@ proc-log@^5.0.0: resolved "https://registry.npmmirror.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8" integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + progress@^2.0.3: version "2.0.3" resolved "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -3969,6 +4093,19 @@ read-package-json@^2.0.0: normalize-package-data "^2.0.0" npm-normalize-package-bin "^1.0.0" +readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.8" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -4110,24 +4247,17 @@ runtime-required@^1.1.0: resolved "https://registry.npmmirror.com/runtime-required/-/runtime-required-1.1.0.tgz#a000a50c2748dba123f4dac5105e66d4599519c4" integrity sha512-yX97f5E0WfNpcQnfVjap6vzQcvErkYYCx6eTK4siqGEdC8lglwypUFgZVTX7ShvIlgfkC4XGFl9O1KTYcff0pw== -rxjs@7.8.1: - version "7.8.1" - resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-buffer@5.1.2: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -4211,6 +4341,18 @@ set-blocking@^2.0.0: resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -4510,6 +4652,11 @@ statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2: resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== +streamifier@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/streamifier/-/streamifier-0.1.1.tgz#97e98d8fa4d105d62a2691d1dc07e820db8dfc4f" + integrity sha512-zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqXpdg== + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -4544,6 +4691,13 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -4624,6 +4778,19 @@ tar-fs@^2.0.0: pump "^3.0.0" tar-stream "^2.1.4" +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" @@ -4728,6 +4895,15 @@ tmp@^0.2.0: resolved "https://registry.npmmirror.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== +to-buffer@^1.1.1: + version "1.2.2" + resolved "https://registry.npmmirror.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" + integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== + dependencies: + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -4762,7 +4938,7 @@ ts-interface-checker@^0.1.9: resolved "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.4.0: version "2.8.1" resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -4805,6 +4981,15 @@ type-is@^2.0.1: media-typer "^1.1.0" mime-types "^3.0.0" +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + typescript@^5.9.3: version "5.9.3" resolved "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" @@ -4892,7 +5077,7 @@ utf8-byte-length@^1.0.1: resolved "https://registry.npmmirror.com/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz#f9f63910d15536ee2b2d5dd4665389715eac5c1e" integrity sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA== -util-deprecate@^1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -4954,6 +5139,19 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +which-typed-array@^1.1.16: + version "1.1.20" + resolved "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -5027,6 +5225,11 @@ xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: resolved "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -5068,6 +5271,13 @@ yauzl@^2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" +yazl@^2.4.2: + version "2.5.1" + resolved "https://registry.npmmirror.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" + integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== + dependencies: + buffer-crc32 "~0.2.3" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" @@ -5081,11 +5291,6 @@ zhipu-ai-provider@^0.2.2: "@ai-sdk/provider" "^2.0.0" "@ai-sdk/provider-utils" "^3.0.0" -zod@^3.22.4: - version "3.25.76" - resolved "https://registry.npmmirror.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" - integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== - zod@^4.3.5: version "4.3.6" resolved "https://registry.npmmirror.com/zod/-/zod-4.3.6.tgz#89c56e0aa7d2b05107d894412227087885ab112a"