Merge branch '108' of https://github.com/HBAI-Ltd/Toonflow-app into 108
# Conflicts: # src/router.ts # src/types/database.d.ts
This commit is contained in:
commit
347244587b
46
NOTICES.txt
46
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
|
||||
|
||||
@ -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` 同步到前端
|
||||
- **提取衍生资产后**:计划中必须包含"询问用户是否生成资产图片"步骤。若用户确认,执行层将调用相应工具批量生成衍生资产图片
|
||||
- **生成分镜表后**:计划中必须包含"询问用户是否生成分镜图片"步骤。若用户确认,执行层将调用相应工具生成分镜图
|
||||
|
||||
@ -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列表] })` 生成图片
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -35,7 +35,7 @@ function buildSystemPrompt(skillPrompt: string, mem: Awaited<ReturnType<Memory["
|
||||
const subAgentList = ["executionAI", "supervisionAI"] as const;
|
||||
|
||||
export async function decisionAI(ctx: AgentContext) {
|
||||
const { socket, isolationKey, text, abortSignal } = ctx;
|
||||
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", "decision"), memory.get(text)]);
|
||||
@ -52,10 +52,10 @@ export async function decisionAI(ctx: AgentContext) {
|
||||
...skill.tools,
|
||||
...memory.getTools(),
|
||||
run_sub_agent: runSubAgent(ctx),
|
||||
...useTools(ctx.socket),
|
||||
...useTools(ctx.resTool),
|
||||
},
|
||||
onFinish: async (completion) => {
|
||||
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);
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@ -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<typeof flowDataSchema>;
|
||||
|
||||
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<typeof flowDataSchema>;
|
||||
|
||||
const keySchema = z.enum(Object.keys(flowDataSchema.shape) as [keyof FlowData, ...Array<keyof FlowData>]);
|
||||
const flowDataKeyLabels = Object.fromEntries(
|
||||
Object.entries(flowDataSchema.shape).map(([key, schema]) => [key, (schema as z.ZodTypeAny).description ?? key]),
|
||||
) as Record<keyof FlowData, string>;
|
||||
|
||||
export default (resTool: ResTool, toolsNames?: string[]) => {
|
||||
const { socket } = resTool;
|
||||
const tools: Record<string, Tool> = {
|
||||
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({
|
||||
|
||||
@ -329,8 +329,12 @@ export default async (knex: Knex, forceInit: boolean = false): Promise<void> =>
|
||||
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"]);
|
||||
},
|
||||
|
||||
140
src/router.ts
140
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);
|
||||
}
|
||||
|
||||
@ -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));
|
||||
},
|
||||
|
||||
@ -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));
|
||||
},
|
||||
);
|
||||
|
||||
@ -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: "生成失败",
|
||||
});
|
||||
|
||||
82
src/routes/production/getFlowData.ts
Normal file
82
src/routes/production/getFlowData.ts
Normal file
@ -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());
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
35
src/routes/production/saveFlowData.ts
Normal file
35
src/routes/production/saveFlowData.ts
Normal file
@ -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());
|
||||
},
|
||||
);
|
||||
27
src/routes/script/exportScript.ts
Normal file
27
src/routes/script/exportScript.ts
Normal file
@ -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);
|
||||
},
|
||||
);
|
||||
@ -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) => {
|
||||
@ -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();
|
||||
|
||||
8
src/types/database.d.ts
vendored
8
src/types/database.d.ts
vendored
@ -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;
|
||||
|
||||
@ -12,7 +12,6 @@ let extractor: FeatureExtractionPipeline | null = null;
|
||||
export async function initEmbedding(): Promise<void> {
|
||||
if (extractor) return;
|
||||
|
||||
//todo 模型配置放到这里
|
||||
const modelConfigData = await db("o_setting").whereIn("key", ["modelOnnxFile", "modelDtype"]);
|
||||
const modelObj: Record<string, string> = {};
|
||||
Object.entries(modelConfigData).forEach(([key, value]) => {
|
||||
|
||||
@ -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<typeof streamText>[0]);
|
||||
}
|
||||
}
|
||||
|
||||
271
yarn.lock
271
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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user