diff --git a/src/main/capabilities/ftp.ts b/src/main/capabilities/ftp.ts index d707fcd..e5a6012 100644 --- a/src/main/capabilities/ftp.ts +++ b/src/main/capabilities/ftp.ts @@ -111,7 +111,9 @@ register("FTP_CreateDir", async (ctx, node, args) => { const client = await requireClient(node.id); const dir = requireText(args, ["dirname"], "目录名", node.id); await client.ensureDir(dir); - client.cd(dir).catch(() => {}); + // 创建后进入该目录;必须 await,否则下个节点的命令与本次 cd 并发, + // basic-ftp 会以 "task while another one is still running" 关闭客户端 + await client.cd(dir).catch(() => {}); ctx.log("已创建目录:" + dir, "info", node.id); return { created: true, dir }; }); diff --git a/src/main/capabilities/windows-system.ts b/src/main/capabilities/windows-system.ts index 0760bb5..d611206 100644 --- a/src/main/capabilities/windows-system.ts +++ b/src/main/capabilities/windows-system.ts @@ -87,6 +87,12 @@ register("System_SetInputMethodState", async (ctx, node, args) => { register("File_OpenFile", async (ctx, node, args) => { const p = reqText(args, ["path"], "文件夹路径", node.id); - await run("explorer.exe", [p], { windowsHide: true }); + try { + await run("explorer.exe", [p], { windowsHide: true }); + } catch (error) { + // explorer.exe 打开成功也会返回退出码 1(Windows 已知行为),仅路径不存在时才是真失败 + const code = (error as { code?: unknown }).code; + if (code !== 1) throw error; + } return { opened: true, path: p }; }); diff --git a/src/renderer/src/validation/flowValidation.ts b/src/renderer/src/validation/flowValidation.ts index ab5d142..add8a85 100644 --- a/src/renderer/src/validation/flowValidation.ts +++ b/src/renderer/src/validation/flowValidation.ts @@ -56,7 +56,7 @@ export function validateFlow(flow: FlowDefinition, catalog: Catalog): FlowValida } const definedVars = new Set([ - ...flow.variables.map((item) => item.name), + ...(flow.variables ?? []).map((item) => item.name), ...flow.nodes.map((node) => node.options?.outputVar).filter(Boolean) as string[] ]); const variableRef = /\$\{\s*([A-Za-z_\u4e00-\u9fa5][\w\u4e00-\u9fa5]*)\s*(?:\.[A-Za-z_]\w*)?\s*\}/g;