工作台与触发器联动
页面
新建工作流只填写名称,工作流列表与多标签编辑器独立。列表中的每一项均可展开,查看下次执行时间或监听错误;右侧的“编辑”按钮在收起时也直接打开对应标签。工作流启停由列表控制。
编辑器入口使用代码图标。左侧节点库独立停靠,工作流标签从右侧实际编辑窗口的左边缘开始排列;标签、图形化/C# 工具栏与右侧属性属于同一个带边框的编辑窗口。底部运行输出/诊断是另一个独立面板,通过水平分隔条调整高度。选中工作流标签与编辑窗口使用相同的主题背景并无间隙相接。调整节点库宽度时,标签和编辑内容一同移动,切换标签保留各自的编辑状态、节点库筛选、输出标签和收起状态。
实机截图:列表编辑入口、深色编辑器、浅色编辑器。布局与主题验证数据记录标签边界、编辑区边界和面板宽度。
插件中心专门管理本地插件,按插件 ID 展示一张卡片,历史版本在详情中切换。右侧显示来源、版本、能力、触发器、依赖和锁定此版本的工作流数量,支持启停、导入、导出和卸载。
Space 为独立导航页面,包含“插件”“工作流”“我的发布”;管理员额外看到“审核中心”。公开目录合并同一资源的发布版本,在详情中可选旧版本。支持分页、搜索、插件上传,以及从本地工作流或文件上传工作流;作者与审核页可以切换插件/工作流类型、筛选发布状态。列表和详情之间使用可拖动分隔条,窄窗口自动改为上下布局。工作流下载后作为默认关闭的新副本导入,可自动安装并启用锁定版本的插件。账号与 Space 共用固定本地服务器 http://localhost:3300/space/v1/。完整流程见 Space。
运行记录按工作流、状态、触发来源与日期筛选,详情包含输入、输出、执行时间、错误与 XFE 节点日志,可重新运行或打开完整日志。重新运行使用当前保存的工作流,确认输入后启动新的运行。
日志页包含工作流运行、诊断和应用日志,统一使用 XFELogEntry 及 XFE 日志模板。支持级别、工作流、日期、运行 ID 和文本筛选,可复制、导出或跳转到运行记录/节点。工作流日志来自持久化运行记录,诊断保存在工作区 Logs/*.diagnostics.json。仅用户/插件主动日志和必要的失败、中断等提示进入日志;节点开始、结束、成功与遍历生命周期用于状态更新,不进入日志或导出。旧记录读取时同样过滤这些事件。
节点库的“日志操作”包含“输出日志”和“导出运行日志”。导出节点选择文件或填写路径,支持 UTF-8 .log 文本与结构化 .json,并输出 path(文本)和 count(数字)供后续节点使用。默认覆盖文件,文本可开启追加;JSON 不支持追加。导出的是本次运行截至该节点的 XFE 日志快照,包含节点与运行来源并隐藏托管凭据;该节点之后的日志可在日志页导出,成功完成不自动生成一条日志。日志页导出当前筛选结果,使用同一套格式与脱敏逻辑,文件处理在后台执行。
编辑器底部的运行输出与诊断使用正圆计数徽章。内容区与选中选项卡共用 WinUI 的 TabViewItemHeaderBackgroundSelected 主题资源,背景铺满面板并紧贴标签,浅深色主题实时同步;原生渲染检查会逐像素验证连接处没有异色分隔线。第三个“调试”选项卡显示断点暂停时的参数、变量与输出;F5 运行/继续、F9 设置节点断点、F10 越过、F11 进入子图,Shift+F5 停止。完整调试语义。
设置分为通用、凭据、桌面输入。凭据使用 Windows 当前用户 DPAPI 加密,Space 会话凭据不显示在编辑列表中。桌面输入包含后端切换、HID 检测与显式安装、紧急停止和恢复调度。快捷键为 Ctrl+Alt+F12。
浏览器提供前进、后退、刷新、地址输入、新标签、下载管理和元素拾取。定位参数可复制为 JSON,含 tab、frame、selector,便于填写网页节点。独立登录配置保留 Cookie;托盘驻留期间标签继续服务工作流。
插件、运行记录、日志和浏览器的主视图与详情之间使用可拖动分隔条,宽窗口左右排列,窄窗口上下排列;尺寸会保存。工作流编辑区继续保留导航、节点库、属性和输出面板的拖动分隔条。端口为圆环,连线接在圆心;按住未连接端口拖出预览,松开到匹配端口后连接,松到空白处取消新建连线。拖动已连接的目标输入圆环,松到兼容输入后改接,松到空白处断开原线;Ctrl+Z/Y 撤销或重做。Esc 取消拖动并保留原线,类型不兼容、环路或画布外松开也保留原线。多条连接的选择及断开方式。
连线和拖动预览位于卡片下层,重叠卡片会遮住连线;端口到自身卡片边界的短线与卡片一起绘制,保持接入圆心。线段端头及预览虚线断点使用圆形线帽。端口圆环直径 14,连接中心的小圆点直径 5,比线宽 3 稍大;缩放时三者同比缩放,遮挡关系一致。
触发节点
在节点库“触发器”分类中拖入间隔、每日、文件变化、工作流完成或插件事件节点。选择节点,在属性区配置并点击“应用触发节点”,保存后在工作流列表开启工作流。图形工作流需要将 next 连到后续步骤;每次事件只执行对应节点的分支。内置触发器的 event 输出原始事件,inputs 输出映射后的工作流输入;新版插件可声明独立的有类型输出,例如企业微信的消息引用、发送者 ID 与正文,分别连接对应输入。插件事件端口。
“查看触发节点”只负责定位画布与属性。旧版独立规则读取后迁移为节点,连到原来的第一步,保留原有绑定;保存后不再写入独立规则。复制触发节点会生成新 ID 并默认停用,删除节点并保存即移除监听。
纯 C# 工作流也在画布中配置触发节点,事件到来后执行 C# 主体;点击“C# 代码”返回编辑器,不改变代码。结构化子图中不能添加自动触发节点。
| 类型 | 事件数据 trigger.data |
|---|---|
| 间隔 | scheduledAt,最少间隔 1 秒 |
| 每日 | scheduledAt,使用本机时区 |
| 文件变化 | path,监听目录与文件筛选,包含子目录 |
| 插件事件 | 插件声明并发出的 JSON 数据,监听参数可配置 |
| 工作流完成 | workflowId、runId、status、outputs、error |
输入由工作流 inputDefaults、事件字段、输入映射依次合并,完整事件封装在系统保留的 trigger 中。输入映射中的单字段对象 {"$event":"路径"} 从事件读取值,支持点路径、数组索引以及嵌套对象/数组;其他值作为常量。修改定时间隔会重新计算下次执行时间,未改动的规则不会因保存而推迟。
例如文件变化触发器的输入映射:
{
"filePath": { "$event": "path" },
"source": "文件监听"
}
文件节点的 path 参数使用 {"$input":"filePath"};也可直接使用 {"$input":"trigger.data.path"}。C# 使用 context.Inputs["filePath"] 或 context.Inputs["trigger"]?["data"]?["path"]。
工作流之间的联动
在下游工作流拖入“工作流完成”节点,选择上游及成功/失败/取消/任意结果。默认只在上游成功时触发;因重叠而跳过的运行不会引发完成联动。将上游输出映射到下游输入,例如:
{
"message": { "$event": "outputs.result" }
}
flowchart LR
T[间隔/文件/插件事件] --> A[获取数据工作流]
A -->|完成事件 outputs.result| B[AI 处理工作流]
B -->|完成事件 outputs.result| C[企微通知工作流]
下游图形节点、代码节点和纯 C# 都能继续通过稳定能力 ID 调用插件。每次联动记录触发来源、完整输入与工作流链;检测到链中已执行过的工作流时阻止回环并记录错误。同一工作流默认不重叠运行,重复触发记为“跳过”。紧急停止会暂停自动调度,需显式恢复。
执行启动、插件触发器和调度刷新在后台线程运行,具体步骤由独立 Runner 执行。编辑器每 150 毫秒合并一次运行状态,后台准备最多 1000 条最新 XFE 日志,界面一次性应用;隐藏的编辑页暂停刷新,重新打开后显示最新状态。运行记录与日志页同样合并后台事件,在定时刷新时应用最新状态。完整运行记录继续保存,日志洪峰不会逐条向 UI 队列提交刷新或反复移动画布。
图形生成 C#
切换到“C# 代码”会生成当前图形的 C#,包含实际节点、参数、执行连线、数据绑定和结构化子图。生成的 CreateGraph 可以编辑,context.ExecuteGraphAsync 使用同一引擎执行,保留节点日志与错误定位。默认模板也会被实际图形替换。
未手动修改的生成代码会随图形更新;手动修改后切换视图保留代码。右上角生成按钮可预览当前图形的新代码,确认替换时备份原代码,旁边的还原按钮可恢复。代码与备份随工作流保存。手写 C# 切回图形时继续保留原图,不自动反向生成节点。
“遍历集合”“条件循环”“并行执行”和“异常处理”通过节点属性中的“编辑子图”进入内部步骤,返回箭头回到上层。数组逐项处理放在遍历节点的 body 内,主图后续步骤只在全部遍历完成后执行。数组遍历教程与模板。
设计资源
以下设计图由内置 imagegen 生成,各自的 .prompt.md 保存完整提示词。实际界面使用原生 WinUI 控件和主题资源,并针对窗口大小调整布局;图片是设计参考。
应用图标由透明 PNG 生成多尺寸 ICO(16~256 像素),用于可执行文件、窗口与托盘;同时更新标题栏图标和安装包磁贴/启动画面。tools/package_icon.py 仅负责等比缩放、居中与格式转换。