From 1ed746c2361733bf582aa02b1ac3562d855b6d26 Mon Sep 17 00:00:00 2001 From: xxyyh <2289112474@qq.com> Date: Mon, 20 Jul 2026 17:56:31 +0800 Subject: [PATCH 01/18] feat(workflow): add workflow core and local CLI --- ...00\345\217\221\346\226\207\346\241\243.md" | 1745 +++++++++++++++++ ...76\350\256\241\346\226\207\346\241\243.md" | 1614 +++++++++++++++ packages/global/core/workflow/constants.ts | 2 +- packages/global/core/workflow/type/io.ts | 9 + packages/global/core/workflow/type/node.ts | 8 +- packages/global/openapi/core/workflow/node.ts | 9 +- packages/web/i18n/en/workflow.json | 8 +- packages/web/i18n/zh-CN/workflow.json | 8 +- packages/web/i18n/zh-Hant/workflow.json | 8 +- packages/workflow-cli/package.json | 37 + packages/workflow-cli/src/cli.ts | 4 + packages/workflow-cli/src/commands/config.ts | 50 + .../workflow-cli/src/commands/container.ts | 15 + .../workflow-cli/src/commands/document.ts | 152 ++ packages/workflow-cli/src/commands/edge.ts | 72 + packages/workflow-cli/src/commands/helpers.ts | 123 ++ packages/workflow-cli/src/commands/input.ts | 149 ++ packages/workflow-cli/src/commands/meta.ts | 25 + packages/workflow-cli/src/commands/node.ts | 162 ++ packages/workflow-cli/src/commands/output.ts | 52 + .../workflow-cli/src/commands/template.ts | 46 + packages/workflow-cli/src/commands/tool.ts | 54 + .../workflow-cli/src/commands/validate.ts | 24 + .../workflow-cli/src/commands/variable.ts | 247 +++ packages/workflow-cli/src/error.ts | 11 + packages/workflow-cli/src/help.ts | 19 + packages/workflow-cli/src/i18n.ts | 29 + packages/workflow-cli/src/index.ts | 9 + packages/workflow-cli/src/io/workflowFile.ts | 59 + packages/workflow-cli/src/output/render.ts | 76 + packages/workflow-cli/src/parser.ts | 124 ++ packages/workflow-cli/src/registry.ts | 954 +++++++++ packages/workflow-cli/src/run.ts | 84 + packages/workflow-cli/src/type.ts | 41 + packages/workflow-cli/test/bin-smoke.mjs | 79 + packages/workflow-cli/test/e2e.test.ts | 1164 +++++++++++ .../workflow-cli/test/io/workflowFile.test.ts | 40 + packages/workflow-cli/test/output.test.ts | 44 + packages/workflow-cli/test/parser.test.ts | 52 + packages/workflow-cli/test/registry.test.ts | 579 ++++++ packages/workflow-cli/tsconfig.json | 10 + packages/workflow-cli/tsdown.config.ts | 14 + packages/workflow-cli/vitest.config.ts | 20 + packages/workflow-core/package.json | 34 + packages/workflow-core/src/binding/service.ts | 53 + packages/workflow-core/src/binding/type.ts | 11 + packages/workflow-core/src/code/io.ts | 278 +++ packages/workflow-core/src/command/apply.ts | 453 +++++ packages/workflow-core/src/command/type.ts | 222 +++ packages/workflow-core/src/config/service.ts | 275 +++ packages/workflow-core/src/domain/checksum.ts | 42 + .../workflow-core/src/domain/diagnostic.ts | 32 + packages/workflow-core/src/domain/document.ts | 33 + packages/workflow-core/src/edge/compiler.ts | 165 ++ packages/workflow-core/src/edge/parser.ts | 51 + packages/workflow-core/src/edge/service.ts | 214 ++ packages/workflow-core/src/edge/type.ts | 27 + packages/workflow-core/src/index.ts | 30 + packages/workflow-core/src/io/service.ts | 348 ++++ packages/workflow-core/src/nesting/service.ts | 166 ++ packages/workflow-core/src/node/add.ts | 155 ++ packages/workflow-core/src/node/service.ts | 189 ++ packages/workflow-core/src/public.ts | 13 + packages/workflow-core/src/reference/codec.ts | 80 + .../workflow-core/src/reference/service.ts | 364 ++++ packages/workflow-core/src/reference/type.ts | 24 + packages/workflow-core/src/store/compile.ts | 12 + packages/workflow-core/src/store/decompile.ts | 30 + .../src/template/automationMeta.ts | 277 +++ .../workflow-core/src/template/builtin.ts | 92 + .../src/template/defaultValue.ts | 70 + .../workflow-core/src/template/descriptor.ts | 133 ++ .../workflow-core/src/template/instantiate.ts | 160 ++ packages/workflow-core/src/template/type.ts | 75 + .../workflow-core/src/template/valueSchema.ts | 83 + .../workflow-core/src/validation/index.ts | 562 ++++++ .../test/binding/service.test.ts | 119 ++ packages/workflow-core/test/code/io.test.ts | 67 + .../test/command/additionalBuiltins.test.ts | 185 ++ .../workflow-core/test/command/apply.test.ts | 143 ++ .../workflow-core/test/command/codeIo.test.ts | 168 ++ .../workflow-core/test/command/pr2.test.ts | 225 +++ .../workflow-core/test/command/pr3.test.ts | 272 +++ .../test/command/systemConfig.test.ts | 104 + .../workflow-core/test/config/service.test.ts | 125 ++ .../workflow-core/test/edge/compiler.test.ts | 166 ++ .../workflow-core/test/edge/parser.test.ts | 53 + .../basic-ai/expected-diagnostics.json | 1 + .../fixtures/basic-ai/store-workflow.json | 248 +++ .../test/fixtures/basic-ai/workflow.json | 254 +++ .../basic-static/expected-diagnostics.json | 1 + .../fixtures/basic-static/store-workflow.json | 101 + .../test/fixtures/basic-static/workflow.json | 111 ++ .../branching/expected-diagnostics.json | 1 + .../fixtures/branching/store-workflow.json | 143 ++ .../test/fixtures/branching/workflow.json | 159 ++ .../common-linear/expected-diagnostics.json | 1 + .../common-linear/store-workflow.json | 860 ++++++++ .../test/fixtures/common-linear/workflow.json | 893 +++++++++ .../expected-diagnostics.json | 1 + .../dynamic-io-catch/store-workflow.json | 255 +++ .../fixtures/dynamic-io-catch/workflow.json | 265 +++ .../nested-loop/expected-diagnostics.json | 1 + .../fixtures/nested-loop/store-workflow.json | 229 +++ .../test/fixtures/nested-loop/workflow.json | 239 +++ packages/workflow-core/test/fixtures/pr3.ts | 195 ++ .../tool-call-tools/expected-diagnostics.json | 1 + .../tool-call-tools/store-workflow.json | 265 +++ .../fixtures/tool-call-tools/workflow.json | 275 +++ .../test/reference/codec.test.ts | 70 + .../test/reference/service.test.ts | 104 + .../test/store/roundtrip.test.ts | 90 + .../test/template/defaultValue.test.ts | 80 + .../test/template/template.test.ts | 292 +++ .../test/validation/validation.test.ts | 124 ++ packages/workflow-core/tsconfig.json | 7 + packages/workflow-core/tsdown.config.ts | 11 + packages/workflow-core/vitest.config.ts | 19 + pnpm-lock.yaml | 56 + projects/app/package.json | 1 + .../Flow/NodeTemplatesPopover.tsx | 18 +- .../Flow/hooks/useDebug.tsx | 15 +- .../Flow/hooks/useWorkflow.tsx | 65 +- .../Flow/nodes/NodeCode/Copilot.tsx | 45 +- .../Flow/nodes/NodeCode/parser.ts | 22 +- .../Flow/nodes/NodeIfElse/index.tsx | 15 +- .../WorkflowComponents/adapters/command.ts | 85 + .../WorkflowComponents/adapters/document.ts | 22 + .../WorkflowComponents/adapters/validation.ts | 129 ++ .../context/workflowUtilsContext.tsx | 14 +- .../app/detail/WorkflowComponents/utils.ts | 4 +- .../pages/api/core/workflow/optimizeCode.ts | 1 + .../Flow/nodes/NodeCode/parser.test.ts | 72 + .../Flow/nodes/NodeIfElse/index.test.ts | 110 ++ .../adapters/document.test.ts | 44 + .../workflowCorePr1Equivalence.test.ts | 86 + .../workflow/workflowCorePr2Adapter.test.ts | 92 + .../workflow/workflowCorePr3Adapter.test.ts | 109 + 138 files changed, 20645 insertions(+), 67 deletions(-) create mode 100644 ".agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" create mode 100644 ".agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" create mode 100644 packages/workflow-cli/package.json create mode 100644 packages/workflow-cli/src/cli.ts create mode 100644 packages/workflow-cli/src/commands/config.ts create mode 100644 packages/workflow-cli/src/commands/container.ts create mode 100644 packages/workflow-cli/src/commands/document.ts create mode 100644 packages/workflow-cli/src/commands/edge.ts create mode 100644 packages/workflow-cli/src/commands/helpers.ts create mode 100644 packages/workflow-cli/src/commands/input.ts create mode 100644 packages/workflow-cli/src/commands/meta.ts create mode 100644 packages/workflow-cli/src/commands/node.ts create mode 100644 packages/workflow-cli/src/commands/output.ts create mode 100644 packages/workflow-cli/src/commands/template.ts create mode 100644 packages/workflow-cli/src/commands/tool.ts create mode 100644 packages/workflow-cli/src/commands/validate.ts create mode 100644 packages/workflow-cli/src/commands/variable.ts create mode 100644 packages/workflow-cli/src/error.ts create mode 100644 packages/workflow-cli/src/help.ts create mode 100644 packages/workflow-cli/src/i18n.ts create mode 100644 packages/workflow-cli/src/index.ts create mode 100644 packages/workflow-cli/src/io/workflowFile.ts create mode 100644 packages/workflow-cli/src/output/render.ts create mode 100644 packages/workflow-cli/src/parser.ts create mode 100644 packages/workflow-cli/src/registry.ts create mode 100644 packages/workflow-cli/src/run.ts create mode 100644 packages/workflow-cli/src/type.ts create mode 100644 packages/workflow-cli/test/bin-smoke.mjs create mode 100644 packages/workflow-cli/test/e2e.test.ts create mode 100644 packages/workflow-cli/test/io/workflowFile.test.ts create mode 100644 packages/workflow-cli/test/output.test.ts create mode 100644 packages/workflow-cli/test/parser.test.ts create mode 100644 packages/workflow-cli/test/registry.test.ts create mode 100644 packages/workflow-cli/tsconfig.json create mode 100644 packages/workflow-cli/tsdown.config.ts create mode 100644 packages/workflow-cli/vitest.config.ts create mode 100644 packages/workflow-core/package.json create mode 100644 packages/workflow-core/src/binding/service.ts create mode 100644 packages/workflow-core/src/binding/type.ts create mode 100644 packages/workflow-core/src/code/io.ts create mode 100644 packages/workflow-core/src/command/apply.ts create mode 100644 packages/workflow-core/src/command/type.ts create mode 100644 packages/workflow-core/src/config/service.ts create mode 100644 packages/workflow-core/src/domain/checksum.ts create mode 100644 packages/workflow-core/src/domain/diagnostic.ts create mode 100644 packages/workflow-core/src/domain/document.ts create mode 100644 packages/workflow-core/src/edge/compiler.ts create mode 100644 packages/workflow-core/src/edge/parser.ts create mode 100644 packages/workflow-core/src/edge/service.ts create mode 100644 packages/workflow-core/src/edge/type.ts create mode 100644 packages/workflow-core/src/index.ts create mode 100644 packages/workflow-core/src/io/service.ts create mode 100644 packages/workflow-core/src/nesting/service.ts create mode 100644 packages/workflow-core/src/node/add.ts create mode 100644 packages/workflow-core/src/node/service.ts create mode 100644 packages/workflow-core/src/public.ts create mode 100644 packages/workflow-core/src/reference/codec.ts create mode 100644 packages/workflow-core/src/reference/service.ts create mode 100644 packages/workflow-core/src/reference/type.ts create mode 100644 packages/workflow-core/src/store/compile.ts create mode 100644 packages/workflow-core/src/store/decompile.ts create mode 100644 packages/workflow-core/src/template/automationMeta.ts create mode 100644 packages/workflow-core/src/template/builtin.ts create mode 100644 packages/workflow-core/src/template/defaultValue.ts create mode 100644 packages/workflow-core/src/template/descriptor.ts create mode 100644 packages/workflow-core/src/template/instantiate.ts create mode 100644 packages/workflow-core/src/template/type.ts create mode 100644 packages/workflow-core/src/template/valueSchema.ts create mode 100644 packages/workflow-core/src/validation/index.ts create mode 100644 packages/workflow-core/test/binding/service.test.ts create mode 100644 packages/workflow-core/test/code/io.test.ts create mode 100644 packages/workflow-core/test/command/additionalBuiltins.test.ts create mode 100644 packages/workflow-core/test/command/apply.test.ts create mode 100644 packages/workflow-core/test/command/codeIo.test.ts create mode 100644 packages/workflow-core/test/command/pr2.test.ts create mode 100644 packages/workflow-core/test/command/pr3.test.ts create mode 100644 packages/workflow-core/test/command/systemConfig.test.ts create mode 100644 packages/workflow-core/test/config/service.test.ts create mode 100644 packages/workflow-core/test/edge/compiler.test.ts create mode 100644 packages/workflow-core/test/edge/parser.test.ts create mode 100644 packages/workflow-core/test/fixtures/basic-ai/expected-diagnostics.json create mode 100644 packages/workflow-core/test/fixtures/basic-ai/store-workflow.json create mode 100644 packages/workflow-core/test/fixtures/basic-ai/workflow.json create mode 100644 packages/workflow-core/test/fixtures/basic-static/expected-diagnostics.json create mode 100644 packages/workflow-core/test/fixtures/basic-static/store-workflow.json create mode 100644 packages/workflow-core/test/fixtures/basic-static/workflow.json create mode 100644 packages/workflow-core/test/fixtures/branching/expected-diagnostics.json create mode 100644 packages/workflow-core/test/fixtures/branching/store-workflow.json create mode 100644 packages/workflow-core/test/fixtures/branching/workflow.json create mode 100644 packages/workflow-core/test/fixtures/common-linear/expected-diagnostics.json create mode 100644 packages/workflow-core/test/fixtures/common-linear/store-workflow.json create mode 100644 packages/workflow-core/test/fixtures/common-linear/workflow.json create mode 100644 packages/workflow-core/test/fixtures/dynamic-io-catch/expected-diagnostics.json create mode 100644 packages/workflow-core/test/fixtures/dynamic-io-catch/store-workflow.json create mode 100644 packages/workflow-core/test/fixtures/dynamic-io-catch/workflow.json create mode 100644 packages/workflow-core/test/fixtures/nested-loop/expected-diagnostics.json create mode 100644 packages/workflow-core/test/fixtures/nested-loop/store-workflow.json create mode 100644 packages/workflow-core/test/fixtures/nested-loop/workflow.json create mode 100644 packages/workflow-core/test/fixtures/pr3.ts create mode 100644 packages/workflow-core/test/fixtures/tool-call-tools/expected-diagnostics.json create mode 100644 packages/workflow-core/test/fixtures/tool-call-tools/store-workflow.json create mode 100644 packages/workflow-core/test/fixtures/tool-call-tools/workflow.json create mode 100644 packages/workflow-core/test/reference/codec.test.ts create mode 100644 packages/workflow-core/test/reference/service.test.ts create mode 100644 packages/workflow-core/test/store/roundtrip.test.ts create mode 100644 packages/workflow-core/test/template/defaultValue.test.ts create mode 100644 packages/workflow-core/test/template/template.test.ts create mode 100644 packages/workflow-core/test/validation/validation.test.ts create mode 100644 packages/workflow-core/tsconfig.json create mode 100644 packages/workflow-core/tsdown.config.ts create mode 100644 packages/workflow-core/vitest.config.ts create mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/command.ts create mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/document.ts create mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/validation.ts create mode 100644 projects/app/test/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/parser.test.ts create mode 100644 projects/app/test/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.test.ts create mode 100644 projects/app/test/pageComponents/app/detail/WorkflowComponents/adapters/document.test.ts create mode 100644 projects/app/test/web/core/app/workflow/workflowCorePr1Equivalence.test.ts create mode 100644 projects/app/test/web/core/app/workflow/workflowCorePr2Adapter.test.ts create mode 100644 projects/app/test/web/core/app/workflow/workflowCorePr3Adapter.test.ts diff --git "a/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" "b/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" new file mode 100644 index 000000000000..d7f144a027ce --- /dev/null +++ "b/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" @@ -0,0 +1,1745 @@ +# Workflow CLI Builder 功能开发文档 + +## 0. 文档标识 + +- 文档状态:方案评审稿 +- 修订日期:2026-07-20 +- 关联需求文档:`workflow-cli-builder-需求设计文档.md` +- 实施原则:先共享领域核心,再接 Web 和 CLI,最后接远端 +- 文档范围:模块设计、实施任务、测试与发布方案 +- Agent 接入范围:PR1 到 PR4 保证具备 Shell 能力的 Agent 可调用 CLI;PR5 在 Workflow 编辑器内注入单一内置 `workflow-builder` Skill,不实现通用 MCP Adapter + +## 1. 开发目标和硬约束 + +### 1.1 开发目标 + +构建一个不依赖 React、ReactFlow、Next.js 和浏览器 API 的工作流领域核心,让以下两个入口执行同一套规则: + +```text +Web command adapter ─┐ + ├─> @fastgpt/workflow-core ─> WorkflowDocument ─> StoreWorkflow +CLI command handler ─┘ +``` + +第一阶段完成本地闭环: + +```text +load/import + -> resolve template + -> apply WorkflowCommand + -> validate + -> build StoreWorkflow + -> atomic write +``` + +### 1.2 硬约束 + +1. `packages/global/core` 只继续提供已有共享类型、常量和基础工具,不承载 editor 业务实现。 +2. `packages/workflow-core` 必须保持 browser-safe,不引用 `fs`、React、ReactFlow、Next.js 或服务端 SDK。 +3. 文件 IO、终端交互、HTTP profile 和进程退出码位于 `packages/workflow-cli`。 +4. 后端权限与数据写入继续位于现有 service/API 层。 +5. API 入参修改必须使用 `parseApiInput` 和 OpenAPI schema。 +6. Web 迁移必须通过 adapter,不能把 ReactFlow 类型扩散到 workflow-core。 +7. 每条 mutation 都通过统一 command dispatcher,禁止 CLI command 直接修改数组。 +8. 本地 JSON 约束、Confirm 和远端版本冲突都要由代码重新计算,不能信任文件内布尔值。 +9. CLI/Agent 参数语义通过独立 Template Descriptor 暴露,不向运行时节点 Schema 混入 CLI 专用字段。 +10. CLI 本体不新增通用 Skill、MCP Server 或 MCP Adapter;PR5 的 `workflow-builder` 仅是产品层内置 Skill,不进入 WorkflowDocument、StoreWorkflow 或 CLI 领域 Schema。 + +### 1.3 Core 抽取与最小 CLI 落地总览 + +#### 1.3.1 抽取目标 + +PR1 采用纵向切片,不一次性搬迁 FastGPT Web 的全部工作流逻辑。交付目标是抽取能够构建基础线性工作流的最小 Core,同时打通 CLI 输入、Document 修改、StoreWorkflow 编译和本地文件写入的完整闭环。 + +`@fastgpt/workflow-core` 是 browser-safe TypeScript package,不启动进程、不监听端口。Web 和 CLI 将动作适配为相同的 `WorkflowCommand`,Core 只根据输入文档和显式依赖返回新文档与诊断。 + +```text +Current WorkflowDocument + WorkflowCommand + Dependencies + -> structuredClone + -> dispatch command + -> command invariant validation + -> WorkflowCommandResult +``` + +Core 不直接等于 ReactFlow。节点数据复用 `StoreNodeItemType`,执行边使用稳定的语义端口;ReactFlow 的 Node/Edge 外层、selected、zIndex、viewport、节点尺寸和临时 debug 状态继续由 Web Adapter 管理。 + +#### 1.3.2 PR1 数据流 + +```mermaid +flowchart LR + subgraph Caller["调用入口"] + Human["用户 / 脚本"] + Agent["Agent"] + Web["FastGPT Web"] + end + + subgraph Adapter["接入层"] + CLI["workflow-cli
flags / stdin / IO"] + WebAdapter["Web Adapter
PR2/PR3 逐步接入"] + end + + Protocol["WorkflowCommand / ChangeSet
统一修改协议"] + Core["@fastgpt/workflow-core
模板 + 节点 + 边 + 引用 + 校验"] + Document["WorkflowDocument
唯一规范状态"] + File["workflow.json
本地文件"] + Store["StoreWorkflow
FastGPT 格式"] + Service["FastGPT Service / AppVersion
PR6/PR7"] + + Human --> CLI + Agent -->|"stdin ChangeSet"| CLI + Web --> WebAdapter + CLI --> Protocol + WebAdapter --> Protocol + Protocol --> Core --> Document + Document -->|"serialize"| File + Document -->|"compile"| Store + Store --> Service + + classDef canonical fill:#fff2cc,stroke:#bf9000,stroke-width:2px; + classDef core fill:#e2f0d9,stroke:#548235; + classDef later fill:#f2f2f2,stroke:#7f7f7f,stroke-dasharray:5 5; + class Document canonical; + class Core core; + class Service later; +``` + +状态转换单独表达,避免把 UI 适配、文件持久化和服务端编译混在调用图中: + +```mermaid +flowchart LR + ReactFlow["ReactFlow State
Document + UI 状态"] + Document["WorkflowDocument
唯一规范状态"] + File["workflow.json
Document 的 JSON 表达"] + Store["StoreWorkflow
FastGPT 存储格式"] + + ReactFlow <-->|"Web Adapter"| Document + File <-->|"parse / serialize"| Document + Document <-->|"compile / decompile"| Store + + classDef canonical fill:#fff2cc,stroke:#bf9000,stroke-width:2px; + class Document canonical; +``` + +三种转换的实现边界: + +| 转换 | 所属模块 | PR1 要求 | +| --- | --- | --- | +| `workflow.json <-> WorkflowDocument` | CLI codec + Core Schema/normalize | 稳定序列化、schemaVersion、错误不覆盖原文件 | +| `WorkflowDocument <-> StoreWorkflow` | Core store compiler/decompiler | 普通节点和 next/target 边语义往返 | +| `ReactFlow State <-> WorkflowDocument` | Web Adapter | PR1 先用 fixture 固化当前行为,PR2/PR3 按动作接入 | + +#### 1.3.3 PR1 首批节点 + +PR1 只支持能够证明基础工作流构建链路的四类内置节点: + +| 节点 | Core 实现重点 | 可执行的最小场景 | +| --- | --- | --- | +| SystemConfig | 默认存在、唯一且不可删除/复制;配置读取 `chatConfig` | 提供变量和工作流开关的统一 Web 编辑入口 | +| WorkflowStart | 唯一性、系统输出、默认 userChatInput/userFiles 引用 | 提供工作流入口 | +| AI Chat | 完整模板实例化、模型和提示词参数、用户输入引用 | Start -> AI Chat | +| Text Editor | 固定文本和 VariableRef 输入 | Start -> Text Editor | +| Assigned Answer | 固定值/引用作为回答、普通 target 端口 | Text Editor -> Assigned Answer | + +模板实例化必须读取现有 FastGPT 原始模板,保留 inputs、outputs、toolConfig、pluginData、catchError 等运行字段。CLI/Agent 参数说明通过 Descriptor 和 Automation Metadata 暴露,但这些元数据不得进入节点、`workflow.json` 或 StoreWorkflow。 + +#### 1.3.4 PR1 Core 操作面 + +| 分类 | PR1 操作 | 主要输出 | +| --- | --- | --- | +| Document | create、parse、normalize、serialize、基础 checksum | `WorkflowDocument` | +| Template | builtin list/show、descriptor normalize、instantiate | 完整 `StoreNodeItemType` | +| Node | list、show、add、add-after | 新节点及必要执行边 | +| Input | set literal、set VariableRef | 更新后的节点 input value | +| Edge | parse next/target、compile/decompile 普通边 | `WorkflowExecutionEdge` / `StoreEdgeItemType` | +| Validation | Schema、节点 ID、必填输入、普通边、引用、Start 可达性 | `WorkflowDiagnostic[]` | +| Store | compile、decompile、semantic round-trip | `StoreWorkflow` | + +`node add --after` 必须只生成一个 `AddNodeCommand`,通过 `connectFrom` 在 Core 内原子完成“创建节点 + 连接边”。执行失败时不返回新节点,也不写入文件。 + +#### 1.3.5 PR1 CLI Demo + +PR1 CLI 开放以下命令: + +```text +init +build +template list +template show +node list +node show +node add +input set +input ref +validate +``` + +最小验收流程: + +```bash +fastgpt-workflow init --dir ./demo +fastgpt-workflow node add --dir ./demo --node ai --template builtin:ai-chat --after start@next +fastgpt-workflow input ref --dir ./demo --node ai --key userChatInput --from start.userChatInput +fastgpt-workflow input set --dir ./demo --node ai --key systemPrompt --value "You are a helpful assistant" +fastgpt-workflow validate --dir ./demo +fastgpt-workflow build --dir ./demo --output ./demo/workflow.generated.json +``` + +验收条件: + +1. `workflow.json` 可以稳定 parse/serialize,失败不产生半写入文件。 +2. 生成的 StoreWorkflow 可被当前 FastGPT Web 正确读取。 +3. Start、AI Chat、输入引用和普通执行边保持完整。 +4. `StoreWorkflow -> WorkflowDocument -> StoreWorkflow` 规范化后语义等价。 +5. 人工 CLI flags 和直接调用同一 Command 得到相同 Document。 +6. `--dry-run` 零写入,`--format json` 的 stdout 只包含结构化结果。 + +#### 1.3.6 后续增量操作 + +| 阶段 | 新增节点和操作 | Core 演进重点 | +| --- | --- | --- | +| PR2 | 知识库搜索、问题优化、内容提取、HTTP、代码、调用应用;node update/remove/clone;edge connect/disconnect/reconnect;input unset;App/ChatConfig/global variables | 完整线性工作流和共享 Validator | +| PR3 | 条件分支、catch、工具调用、动态 IO、循环和容器节点;insert、复杂 reconnect、attach/detach tool、父子移动 | 复杂图语义、副作用和 Web action 迁移 | +| PR4 | 不新增节点;ChangeSet、plan/apply、checksum、Confirm、CI | 自动化事务和本地 CLI Beta | +| PR5 | Workflow ChatBox、独立 Builder Handler、App Sandbox、内置 Skill、CLI 调用、ChangeSet 预览/应用 | 端到端 Workflow 辅助生成 Demo | +| PR6 | 远端 Team App、System Tool、Tool 模板 Provider;pull/versions/preview | 远端只读和反编译 | +| PR7 | draft save、publish、run、debug | 权限、发布校验和乐观并发 | + +所有后续操作继续扩展 `WorkflowCommandSchema` 和同一个 dispatcher。禁止在 CLI Handler、Web Context 或远端 Client 中形成第二套节点、边和引用修改逻辑。 + +#### 1.3.7 开发顺序 + +PR1 固定按以下顺序实施: + +1. 从当前 Web 导出并脱敏 `basic-ai`、`basic-static` fixture,建立 Characterization Tests。 +2. 创建 `workflow-core` 和 `workflow-cli` package,锁定依赖方向。 +3. 定义 PR1 范围内的 Document、Diagnostic、ExecutionPortRef、VariableRef、Descriptor 和 Command Schema。 +4. 实现普通 edge compiler/decompiler 和 StoreWorkflow round-trip。 +5. 实现四类内置模板的 Provider、Descriptor 与完整节点实例化。 +6. 实现 AddNode、SetInputValue、SetInputReference 和 dispatcher。 +7. 实现最小 Validator、文件 codec、原子 IO 和 CLI Registry。 +8. 完成 CLI 端到端、golden、失败不写盘、JSON contract 和确定性构建测试。 + +## 2. 总体模块设计 + +### 2.1 新增 package + +```text +packages/ +├── workflow-core/ +│ ├── package.json +│ ├── tsconfig.json +│ ├── tsdown.config.ts +│ ├── src/ +│ │ ├── domain/ +│ │ ├── command/ +│ │ ├── template/ +│ │ ├── edge/ +│ │ ├── reference/ +│ │ ├── nesting/ +│ │ ├── validation/ +│ │ ├── store/ +│ │ └── index.ts +│ └── test/ +└── workflow-cli/ + ├── package.json + ├── tsconfig.json + ├── tsdown.config.ts + ├── src/ + │ ├── cli.ts + │ ├── registry.ts + │ ├── context.ts + │ ├── options/ + │ ├── commands/ + │ ├── io/ + │ ├── remote/ + │ ├── output/ + │ └── index.ts + └── test/ +``` + +两个目录都匹配 `pnpm-workspace.yaml` 的 `packages/*`,无需新增 workspace 路径。 + +建议包名: + +- `@fastgpt/workflow-core` +- `@fastgpt/workflow-cli` + +### 2.2 依赖方向 + +```mermaid +flowchart LR + Global["@fastgpt/global
types/constants"] --> Core["@fastgpt/workflow-core
pure domain"] + Core --> CLI["@fastgpt/workflow-cli
IO/HTTP/terminal"] + Core --> Web["projects/app
ReactFlow adapter"] + Service["@fastgpt/service"] --> API["Next API"] + Global --> Service + CLI --> API +``` + +禁止依赖: + +- `workflow-core -> workflow-cli` +- `workflow-core -> projects/app` +- `workflow-core -> packages/service` +- `packages/global -> workflow-core` + +## 3. workflow-core 文件设计 + +### 3.1 文件清单 + +| 文件 | 职责 | 关键导出 | +| --- | --- | --- | +| `src/domain/document.ts` | Document schema/type | `WorkflowDocumentSchema`、`WorkflowDocument` | +| `src/domain/diagnostic.ts` | 统一诊断 | `WorkflowDiagnostic`、`DiagnosticCode` | +| `src/domain/checksum.ts` | 规范化和 checksum | `normalizeWorkflowDocument()`、`getWorkflowChecksum()` | +| `src/edge/type.ts` | 语义执行端口和边 | `ExecutionSourcePortRef`、`WorkflowExecutionEdge` | +| `src/edge/parser.ts` | CLI 语义字符串解析 | `parseExecutionPortRef()` | +| `src/edge/compiler.ts` | 语义边与 StoreEdge 互转 | `compileExecutionEdge()`、`decompileStoreEdge()` | +| `src/reference/type.ts` | 数据引用 | `VariableRefSchema` | +| `src/reference/codec.ts` | Document/Store 数据引用编解码 | output key/id 与文本占位符双向转换 | +| `src/reference/service.ts` | set/unset/available | `setInputReference()`、`getAvailableVariables()` | +| `src/template/type.ts` | 模板引用和 provider 接口 | `NodeTemplateRef`、`WorkflowTemplateProvider` | +| `src/template/builtin.ts` | 内置模板 provider | `builtinTemplateProvider` | +| `src/template/descriptor.ts` | 机器可读模板参数契约 | `NodeTemplateDescriptor`、`NodeParameterDescriptor` | +| `src/template/normalize.ts` | 现有模板到 Descriptor 的归一化 | `normalizeNodeTemplateDescriptor()` | +| `src/template/automationMeta.ts` | CLI/Agent 补充元数据 | `NodeTemplateAutomationMeta`、`getAutomationMeta()` | +| `src/template/instantiate.ts` | 完整节点实例化 | `instantiateNodeFromTemplate()` | +| `src/nesting/rules.ts` | 容器规则 | `checkCanMoveIntoParent()` | +| `src/nesting/service.ts` | 父子关系更新 | `moveNodeToParent()`、`removeParentCascade()` | +| `src/command/type.ts` | Command/ChangeSet schema | `WorkflowCommandSchema`、`WorkflowChangeSetSchema` | +| `src/command/apply.ts` | 单命令 dispatcher | `applyWorkflowCommand()` | +| `src/command/applyChangeSet.ts` | 批量原子执行 | `applyWorkflowChangeSet()` | +| `src/command/node.ts` | node commands | `addNode()`、`removeNode()`、`cloneNode()` | +| `src/command/edge.ts` | edge commands | `connectEdge()`、`insertNodeOnEdge()` | +| `src/command/input.ts` | input/output commands | `setInputValue()`、`removeOutput()` | +| `src/command/config.ts` | App 元数据、ChatConfig、全局变量 | `updateAppMeta()`、`updateChatConfig()`、`addGlobalVariable()` | +| `src/validation/schema.ts` | schema 诊断 | `validateWorkflowSchema()` | +| `src/validation/document.ts` | 节点和父子规则 | `validateWorkflowDocument()` | +| `src/validation/graph.ts` | 图和端口规则 | `validateWorkflowGraph()` | +| `src/validation/reference.ts` | 引用规则 | `validateWorkflowReferences()` | +| `src/validation/index.ts` | 聚合校验 | `validateWorkflow()` | +| `src/store/compile.ts` | Document -> Store | `compileStoreWorkflow()` | +| `src/store/decompile.ts` | Store -> Document | `decompileStoreWorkflow()` | +| `src/index.ts` | browser-safe 统一导出 | 上述公共 API | + +### 3.2 领域类型 + +```ts +import { + StoreEdgeItemTypeSchema, + StoreNodeItemTypeSchema +} from '@fastgpt/global/core/workflow/type'; + +export const WorkflowDocumentSchema = z.object({ + schemaVersion: z.literal('fastgpt-workflow/v1'), + app: z.object({ + appId: z.string().optional(), + name: z.string().optional(), + intro: z.string().optional(), + appType: z.string().optional(), + baseVersionId: z.string().optional() + }), + nodes: z.array(StoreNodeItemTypeSchema), + executionEdges: z.array(WorkflowExecutionEdgeSchema), + chatConfig: AppChatConfigSchema +}); +``` + +注意:示例表示结构方向,实际 import 应以仓库现有类型导出位置为准,不为 CLI 复制 StoreNode/ChatConfig schema。 + +### 3.3 Template Descriptor + +#### 3.3.1 类型定义 + +`FlowNodeInputItemTypeSchema` 同时服务于模板、ReactFlow 节点和 StoreNode。CLI/Agent 专用字段不能直接加到这个共享输入结构,否则会进入 Web 节点状态或 StoreWorkflow。 + +workflow-core 定义独立 Descriptor: + +```ts +export type NodeTemplateDescriptor = { + template: NodeTemplateRef; + name: string; + intro?: string; + flowNodeType: string; + inputs: NodeParameterDescriptor[]; + outputs: NodeOutputDescriptor[]; + constraints: { + unique: boolean; + isTool: boolean; + allowedParents?: string[]; + }; +}; + +export type NodeOutputDescriptor = { + id: string; + key: string; + label: string; + description?: string; + valueType?: string; + required: boolean; + executable: boolean; +}; + +export type NodeParameterDescriptor = { + key: string; + label: string; + description: string; + valueType?: string; + required: boolean; + defaultValue?: unknown; + defaultPolicy: 'template' | 'userRequired' | 'remoteValidated'; + resourceKind?: 'dataset' | 'model' | 'app' | 'tool' | 'secret'; + bindingRequired: boolean; + configurable: boolean; + inputModes: Array<'literal' | 'reference' | 'secret'>; + enum?: Array<{ + label?: string; + value: string; + description?: string; + }>; + constraints?: { + min?: number; + max?: number; + minLength?: number; + maxLength?: number; + valueSchema?: Record; + }; + examples?: unknown[]; +}; + +export type NodeTemplateAutomationMeta = { + inputs?: Record< + string, + { + configurable?: boolean; + agentHint?: string; + valueSchema?: Record; + examples?: unknown[]; + defaultPolicy?: 'template' | 'userRequired' | 'remoteValidated'; + resourceKind?: 'dataset' | 'model' | 'app' | 'tool' | 'secret'; + bindingRequired?: boolean; + } + >; +}; + +export type ResolvedWorkflowTemplate = { + template: FlowNodeTemplateType; + automationMeta?: NodeTemplateAutomationMeta; + validatedInputDefaults?: Record; +}; +``` + +#### 3.3.2 归一化逻辑 + +```ts +export const normalizeNodeTemplateDescriptor = ({ + template, + templateRef, + automationMeta, + locale +}: NormalizeNodeTemplateDescriptorParams): NodeTemplateDescriptor => ({ + template: templateRef, + name: resolveLocale(template.name, locale), + intro: resolveLocale(template.intro, locale), + flowNodeType: template.flowNodeType, + inputs: template.inputs + .filter((input) => input.deprecated !== true) + .map((input) => { + const meta = automationMeta?.inputs?.[input.key]; + return { + key: input.key, + label: resolveLocale(input.label, locale), + description: resolveLocale( + meta?.agentHint ?? input.toolDescription ?? input.description ?? input.label, + locale + ), + valueType: input.valueType, + required: input.required ?? false, + defaultValue: input.defaultValue ?? input.value, + defaultPolicy: meta?.defaultPolicy ?? 'template', + resourceKind: meta?.resourceKind, + bindingRequired: meta?.bindingRequired ?? false, + configurable: meta?.configurable ?? input.canEdit !== false, + inputModes: renderTypesToInputModes(input.renderTypeList), + enum: input.list, + constraints: { + min: input.min, + max: input.max, + minLength: input.minLength, + maxLength: input.maxLength, + valueSchema: meta?.valueSchema + }, + examples: meta?.examples + }; + }), + outputs: template.outputs + .filter((output) => output.deprecated !== true) + .map((output) => ({ + id: output.id, + key: output.key, + label: resolveLocale(output.label, locale), + description: output.description + ? resolveLocale(output.description, locale) + : undefined, + valueType: output.valueType, + required: output.required ?? false, + executable: output.type === FlowNodeOutputTypeEnum.source + })), + constraints: { + unique: template.unique === true, + isTool: template.isTool === true + } +}); +``` + +实现要求: + +- 普通字段从现有模板实时归一化,不在 CLI 维护第二份 `label/description/valueType`。 +- `NodeTemplateAutomationMeta` 只补充现有模板无法表达的 Agent/CLI 信息。 + +#### 3.3.3 输入初始值解析 + +新增 `packages/workflow-core/src/template/defaultValue.ts`,集中实现值来源优先级;禁止在 builtin template、CLI handler 或 Agent 示例中分散判断资源字段。 + +```ts +const hasOwn = (value: object, key: PropertyKey) => + Object.prototype.hasOwnProperty.call(value, key); + +export const resolveInitialInputValue = ({ + input, + meta, + validatedRemoteDefault +}: ResolveInitialInputValueParams) => { + if (validatedRemoteDefault?.provided === true) { + return structuredClone(validatedRemoteDefault.value); + } + + if ((meta?.defaultPolicy ?? 'template') === 'template') { + return structuredClone(input.defaultValue ?? input.value); + } + + return getResourceSafeEmptyValue({ + valueType: input.valueType, + resourceKind: meta?.resourceKind + }); +}; +``` + +`getResourceSafeEmptyValue()` 规则: + +| 输入 | 空值 | +| --- | --- | +| `resourceKind=dataset` / `selectDataset` | `[]` | +| `resourceKind=model/app/secret` | `undefined` | +| `resourceKind=tool` | 不实例化资源节点,不创建 selectedTools edge | +| 非资源数组且模板无默认值 | `[]` | +| 其他字段且模板无默认值 | `undefined` | + +用户显式值不在该 helper 内解析。`node.add.inputOverrides` 在模板实例化后通过 `hasOwn(inputOverrides, inputKey)` 应用,确保 `[]`、`''`、`false` 和 `0` 都能覆盖远端值及模板默认值。 + +Start 默认引用作为实例化的后置步骤执行:仅当 `hasConfiguredValue(input.value) === false`、输入支持 reference 且共享 `areWorkflowValueTypesCompatible()` 认可源输出类型时补充。普通单引用仍要求类型匹配;对明确的聚合引用,`arrayString` 可接收 `string` 元素或 `arrayString` 输出。实例化、`input ref` 和 Validator 必须复用同一函数,禁止各自维护兼容表。 +- `renderTypeList` 转成 `literal/reference/secret`,不把 React 组件名称暴露给 Agent。 +- `description` 只负责语义说明;类型、范围和复杂结构必须使用结构化字段。 +- `valueSchema` 用于 custom、object、array 等复杂输入;缺失时返回 warning,不允许 Agent 靠猜测提交复杂值。 +- secret/input config 只输出参数约束,不输出实际值。 +- Descriptor 不传入 `nodeTemplate2FlowNode()`,不写入 WorkflowDocument、`workflow.json`、StoreNode 或 StoreWorkflow。 + +#### 3.3.3 Provider 返回契约 + +```ts +export type ResolvedWorkflowTemplate = { + template: FlowNodeTemplateType; + automationMeta?: NodeTemplateAutomationMeta; +}; + +export type TemplateResolveContext = { + locale: string; + appId?: string; +}; + +export interface WorkflowTemplateProvider { + resolve( + ref: NodeTemplateRef, + context: TemplateResolveContext + ): Promise; +} +``` + +Provider 行为: + +- builtin provider 返回内置模板和本地补充 metadata。 +- Web remote provider 复用 `getClientToolPreviewNode`,将 preview template 包装为 resolved result;不改变 Web 节点实例化结果。 +- CLI remote provider 通过 profile 获取完整 preview 和可用参数 Schema。 +- 测试 provider 返回固定模板和固定 metadata,不依赖网络。 +- `template show` 调用 `resolve -> normalizeNodeTemplateDescriptor`。 +- `node add` 只使用 `resolved.template` 实例化,不能把 `automationMeta` 展开到节点。 + +### 3.4 语义执行端口 + +```ts +export const ExecutionSourcePortRefSchema = z.discriminatedUnion('kind', [ + z.object({ kind: z.literal('next'), nodeId: z.string() }), + z.object({ kind: z.literal('branch'), nodeId: z.string(), branchKey: z.string() }), + z.object({ kind: z.literal('sourceOutput'), nodeId: z.string(), outputKey: z.string() }), + z.object({ kind: z.literal('catch'), nodeId: z.string() }), + z.object({ kind: z.literal('selectedTools'), nodeId: z.string() }) +]); + +export const ExecutionTargetPortRefSchema = z.discriminatedUnion('kind', [ + z.object({ kind: z.literal('target'), nodeId: z.string() }), + z.object({ kind: z.literal('selectedTools'), nodeId: z.string() }) +]); +``` + +编译规则: + +```ts +const compileSourceHandle = (port: ExecutionSourcePortRef, document: WorkflowDocument) => { + switch (port.kind) { + case 'next': + return getHandleId(port.nodeId, 'source', Position.Right); + case 'branch': + return getHandleId(port.nodeId, 'source', port.branchKey); + case 'sourceOutput': + assertSourceOutput(document, port.nodeId, port.outputKey); + return getHandleId(port.nodeId, 'source', port.outputKey); + case 'catch': + return getHandleId(port.nodeId, 'source_catch', Position.Right); + case 'selectedTools': + return NodeOutputKeyEnum.selectedTools; + } +}; +``` + +`Position.Right/Left` 不应让 workflow-core 引入 ReactFlow。实现时在 core 内定义稳定字符串常量 `right/left`,或让 `getHandleId` 接受字符串;上述伪代码只展示与当前 Web handle 的对应关系。 + +### 3.5 StoreEdge 反编译 + +`decompileStoreEdge()` 按以下顺序识别: + +1. 两端均为 `selectedTools`:工具边。 +2. source 为 `${nodeId}-source_catch-right`:catch 边。 +3. source 为 `${nodeId}-source-right`:普通 next 边。 +4. source key 命中节点中 `type=source` 的 output:sourceOutput 边。 +5. source key 命中 ifElse/userSelect/classify 等分支配置:branch 边。 +6. target 必须能规范化为 `${targetId}-target-left` 或工具目标。 + +未知 handle 不得被静默删除。返回阻断式诊断: + +```ts +{ + code: 'WORKFLOW_EDGE_HANDLE_UNSUPPORTED', + severity: 'error', + edge: storeEdge +} +``` + +只有完成新 handle 类型映射后,import 才能继续。 + +### 3.6 Template 实例化 + +实例化函数: + +```ts +export const instantiateNodeFromTemplate = async ({ + document, + templateRef, + nodeId, + position, + parentNodeId, + provider, + locale +}: InstantiateNodeParams): Promise => { + // 1. resolve ResolvedWorkflowTemplate,只取 template 进入节点实例化 + // 2. 检查 unique/tool/nesting 限制 + // 3. 生成完整 StoreNode + // 4. 按 workflowStart 补 userChatInput/userFiles 默认引用 + // 5. 创建容器所需系统子节点 + // 6. 返回主节点、附带节点和 warnings +}; +``` + +实际实现链路调整为: + +```text +provider.resolve(templateRef) +-> template + automationMeta + validatedInputDefaults(PR6) +-> resolveInitialInputValue() 逐输入解析 +-> StoreNodeItemTypeSchema.parse() +-> 仅为空且类型兼容时补 Start 引用 +-> addNodeFromTemplate() 创建系统子节点 +-> applyWorkflowCommand() 最后应用 inputOverrides +``` + +文件级改动: + +| 文件 | 职责与关键改动 | +| --- | --- | +| `packages/workflow-core/src/template/type.ts` | 增加 `defaultPolicy/resourceKind/bindingRequired/validatedInputDefaults` 类型,不进入运行时节点 | +| `packages/workflow-core/src/template/automationMeta.ts` | 声明 dataset/model/app/tool/secret 等资源输入及默认值策略 | +| `packages/workflow-core/src/template/defaultValue.ts` | 实现唯一的输入初始值解析器和安全空值映射 | +| `packages/workflow-core/src/template/instantiate.ts` | 消费 Provider 元数据,按优先级解析输入,通过共享类型函数限制 Start 默认引用 | +| `packages/workflow-core/src/command/apply.ts` | 保证 `inputOverrides` 按“是否提供”覆盖,不使用 truthy/nullish 判断 | +| `packages/workflow-core/src/reference/service.ts` | 实现单引用/聚合引用共享类型兼容规则 | +| `packages/workflow-core/src/binding/type.ts` | 定义 `missing/unverified` 绑定结果,不包含资源实际值 | +| `packages/workflow-core/src/binding/service.ts` | 收集待绑定项并转换为非阻断 warning | +| `packages/workflow-core/src/validation/index.ts` | 只输出本地可确定的结构诊断,外部绑定缺失不转换为结构 error | +| `packages/workflow-cli/src/commands/document.ts` | `build/inspect` 合并 Binding Collector 结果,构建不合成资源值 | +| `packages/workflow-cli/src/commands/validate.ts` | 返回结构 `valid`、绑定清单和 `executable` 提示,不接收校验 mode | + +不得只复制 `flowNodeType/name`。必须保留 template 的 inputs、outputs、toolConfig、pluginData、catchError 等现有字段。 + +### 3.7 Command Dispatcher + +```ts +export const applyWorkflowCommand = async ({ + document, + command, + dependencies +}: ApplyWorkflowCommandParams): Promise => { + const nextDocument = structuredClone(document); + const result = await dispatchCommand(nextDocument, command, dependencies); + const diagnostics = validateCommandInvariants(result.document); + + if (diagnostics.some((item) => item.severity === 'error')) { + throw new WorkflowCommandError(diagnostics); + } + + return { + ...result, + checksum: getWorkflowChecksum(result.document) + }; +}; +``` + +约束: + +- 输入 document 不得原地修改。 +- 单命令失败不返回半成品。 +- ChangeSet 在内存中依次执行,全部成功后才交给 IO 层写盘。 +- command error 与完整 workflow validation error 分开。 + +#### 3.7.1 WorkflowCommand 与 WorkflowChangeSet 边界 + +三类对象必须保持职责分离: + +| 对象 | 职责 | 不负责 | +| --- | --- | --- | +| `WorkflowCommand` | 描述一个原子领域修改,是 Web 和 workflow-core 的最小 mutation 单元 | 保存完整状态、处理文件和网络 | +| `WorkflowChangeSet` | 封装一个或多个 WorkflowCommand,是 Agent、脚本和 CI 的版本化事务协议 | 重新实现节点、边、引用和校验规则 | +| `WorkflowDocument` | 保存当前完整工作流,是唯一规范状态 | 描述本次修改意图 | + +调用边界固定为: + +```text +FastGPT Web action -> WorkflowCommand -> applyWorkflowCommand() +人工 CLI flags -> WorkflowCommand -> applyWorkflowCommand() +Agent stdin -> WorkflowChangeSet -> applyWorkflowChangeSet() -> WorkflowCommand[] +``` + +`WorkflowChangeSet` 不是所有调用端必须使用的领域输入。Web 的拖拽、改单个参数和连一条边直接生成 WorkflowCommand;人工 CLI flags 是单条 WorkflowCommand 的人类友好适配器。Agent 的所有 mutation 无论只有一条还是多条,都必须通过 stdin 提交 WorkflowChangeSet,不做“简单/复杂”分类。 + +`applyWorkflowChangeSet()` 只负责编排,必须逐条调用 `applyWorkflowCommand()`,不能复制 dispatcher 或领域规则: + +```ts +export const applyWorkflowChangeSet = async ({ + document, + changeSet, + dependencies +}: ApplyWorkflowChangeSetParams): Promise => { + let nextDocument = structuredClone(document); + const changes: WorkflowChangeSummary[] = []; + const warnings: WorkflowDiagnostic[] = []; + + for (const command of changeSet.commands) { + const result = await applyWorkflowCommand({ + document: nextDocument, + command, + dependencies + }); + + nextDocument = result.document; + changes.push(...result.changes); + warnings.push(...result.warnings); + } + + return { + document: nextDocument, + changes, + warnings, + checksum: getWorkflowChecksum(nextDocument) + }; +}; +``` + +执行期间只更新内存中的 nextDocument。任一 Command 失败,整个 ChangeSet 失败,IO 层不得写入中间状态。Command invariant 每条执行后检查;需要完整图才能判断的 graph/reference/publish validation 在 ChangeSet 全部执行后统一检查。 + +### 3.8 AddNodeCommand + +```ts +type AddNodeCommand = { + type: 'node.add'; + nodeId: string; + template: NodeTemplateRef; + name?: string; + position?: { x: number; y: number }; + parentNodeId?: string; + connectFrom?: ExecutionSourcePortRef; + inputOverrides?: Record; +}; +``` + +执行顺序固定: + +1. 检查 nodeId 唯一。 +2. resolve + instantiate 完整模板。 +3. 应用 input overrides。 +4. 确认或继承 parentNodeId。 +5. 创建系统子节点并维护 childrenNodeIdList。 +6. 若有 connectFrom,连接到新节点 target。 +7. 检查边、父子和 unique node invariant。 +8. 一次性返回 document。 + +这正是用户要求的“添加一个节点,并把节点的边连上”的原子动作。 + +### 3.9 节点和 IO 副作用 + +共享 command 必须实现: + +| 操作 | 必要副作用 | +| --- | --- | +| 删除节点 | 删除所有入边、出边、变量引用诊断;父节点默认级联子节点 | +| 删除父节点 | 删除 childrenNodeIdList 内子节点及相关边 | +| 移入容器 | 更新 child.parentNodeId 和 parent.childrenNodeIdList;按 Web 语义清边 | +| 移出容器 | 同步移除 parent.childrenNodeIdList | +| 替换动态 output | 删除旧 output handle 发出的执行边 | +| 删除动态 output | 删除该 output handle 发出的执行边;保留引用错误供 validator 报告 | +| 重置节点模板 | key 仍存在的 input value 按前端现状保留 | +| 条件 loopRun 删除 break | 若最后一个 break 被移除则拒绝操作 | +| 删除 tool node | 删除来自 toolCall 的 `selectedTools` 工具边 | + +变量引用不建议在删除输出时静默清除。静默清除会丢失用户意图;应保留引用并由 validator 精确报告,除非命令显式传入清理策略。 + +### 3.10 InsertNodeCommand + +```ts +type InsertNodeCommand = { + type: 'node.insert'; + edge: WorkflowExecutionEdge; + nodeId: string; + template: NodeTemplateRef; +}; +``` + +算法: + +1. 精确找到旧 edge。 +2. 校验旧 edge 唯一存在。 +3. 创建节点但暂不提交。 +4. 删除旧 edge。 +5. 创建 `oldSource -> newNode@target`。 +6. 创建 `newNode@next -> oldTarget`。 +7. 若新模板没有普通 next 端口则拒绝插入。 +8. 任一步失败回到原 document。 + +工具边、catch 边和分支边是否支持 insert 由显式规则决定,PR1 只支持普通 next -> target。 + +### 3.11 引用和可用变量 + +`getAvailableVariables(document, targetNodeId)` 不能简单返回所有其他节点输出。实现应复用或下沉当前 `getNodeAllSource` 的语义: + +- 从目标节点逆向遍历可达上游。 +- 加入 workflowStart 和系统变量。 +- 识别嵌套父级可见变量。 +- 排除下游、不可达和作用域外输出。 +- 输出 valueType,供 `input ref` 做类型兼容检查。 + +```ts +type AvailableVariable = { + ref: VariableRef; + name: string; + valueType: WorkflowValueType; + source: 'node' | 'system' | 'parent'; +}; +``` + +#### 3.11.1 outputKey / outputId 编解码边界 + +Core 内存在两个不可混用的输出标识命名空间: + +- CLI、WorkflowCommand、WorkflowDocument 和 `workflow.json` 使用稳定的 `output.key`。 +- StoreWorkflow、FastGPT Web 引用选择器和 Runtime 使用节点内的 `output.id`。 +- execution edge 的 source output 是执行端口语义,继续使用 `output.key`,不参与数据引用编解码。 + +`compileStoreWorkflow()` 必须递归处理节点 input value,将结构化引用 +`[nodeId, outputKey]`、聚合引用和 `{{$nodeId.outputKey$}}` 文本占位符转换为 `output.id`。 +`decompileStoreWorkflow()` 执行完全相反的转换。`VARIABLE_NODE_ID` 全局变量引用保持 variable key 不变。 +编解码必须覆盖 `variable-update.updateList`、if/else 条件等嵌套配置,不能只处理 +`selectedTypeIndex === reference` 的顶层输入。 + +Store -> Document -> Store 必须保持 StoreWorkflow 引用语义等价;Document -> Store 的产物必须能被当前 +Web 引用选择器识别。不得要求 CLI 用户读取或手工填写模板生成的随机 output id。 + +## 4. Validator 下沉设计 + +### 4.1 校验边界 + +共享校验器接收 `WorkflowDocument` 并返回结构化诊断,不依赖 ReactFlow 类型。`projects/app/src/web/core/workflow/utils.ts` 的 `checkWorkflowNodeAndConnection()` 通过 Web adapter 调用共享校验器,并继续向页面返回错误 nodeId。 + +### 4.2 目标结构 + +```text +validateWorkflow(document) + ├── validateWorkflowSchema + ├── validateWorkflowDocument + ├── validateWorkflowGraph + └── validateWorkflowReferences + +collectWorkflowBindings(document) + ├── missing + └── unverified + +assertWorkflowExecutable(document, resolvedBindings) // PR6/PR7 + ├── validateWorkflow + ├── resolveResourceBindings + └── validateRuntimeAndPublishCapabilities +``` + +```ts +type WorkflowBindingRequirement = { + nodeId: string; + inputKey: string; + defaultPolicy: 'userRequired' | 'remoteValidated'; + resourceKind?: WorkflowResourceKind; + status: 'missing' | 'unverified'; +}; +``` + +`collectWorkflowBindings()` 读取 Automation Metadata,但不更改 Validator 诊断级别: + +- 空值且 `input.required=true` 或 `bindingRequired=true`:返回 `missing`。 +- 非空且 `defaultPolicy=remoteValidated`:本地只返回 `unverified`,不声称资源可用。 +- 可选且空的外部输入不返回绑定项,避免关闭的 rerank、未使用 Secret 等字段产生噪声。 +- 返回对象不包含 value,避免 Dataset 快照、URL 或 Secret 进入日志和 CLI envelope。 + +CLI `validate/build` 只被 `validateWorkflow()` 的 error 阻断,Binding Collector 输出稳定 warning。PR6 Resolver 和 PR7 `assertWorkflowExecutable()` 在需要调试、运行或发布时检查存在性、当前团队读取权限和运行能力;这是独立业务操作,不是 Validator mode。 + +返回: + +```ts +type WorkflowValidationResult = { + valid: boolean; + diagnostics: WorkflowDiagnostic[]; +}; +``` + +### 4.3 Web adapter + +```ts +const checkWorkflowNodeAndConnection = ({ nodes, edges }) => { + const document = reactFlowToWorkflowDocument({ nodes, edges, chatConfig }); + const result = validateWorkflow(document); + + if (result.valid) return; + return unique( + result.diagnostics + .map((item) => item.nodeId) + .filter(Boolean) + ); +}; +``` + +Web 继续负责: + +- `onUpdateNodeError` +- `fitView` +- toast 文案和 i18n +- sandbox UI 开关提示 + +Core 只返回诊断事实,不发 toast。 + +### 4.4 校验迁移顺序 + +1. 先为当前校验行为补 characterization tests。 +2. 将纯 Store/Document 规则迁入 workflow-core。 +3. Web adapter 对同一 fixture 比较当前 Web 行为和共享校验结果。 +4. 结果等价后,Web 切换到新 validator。 +5. sandbox、套餐能力等环境规则通过 context/provider 注入。 + +## 5. 本地文件与自动化门禁实现 + +### 5.1 Workflow File Codec + +初期不实现分片 Manifest。workflow-core 只定义 `WorkflowDocumentSchema` 和规范化函数,不读取文件;workflow-cli 负责把单文件 `workflow.json` 解析为 `WorkflowDocument`: + +```ts +parseWorkflowDocument(input: unknown): WorkflowDocument; +serializeWorkflowDocument(document: WorkflowDocument): string; +``` + +`serializeWorkflowDocument()` 只负责稳定 JSON 序列化,不执行节点、边、权限或确认规则。 + +### 5.2 Workflow File IO + +workflow-cli 负责单文件 IO: + +```ts +readWorkflowFile(dir: string): Promise; +writeWorkflowFileAtomic(dir: string, document: WorkflowDocument): Promise; +``` + +写入规则: + +1. 目标文件固定为工作目录下的 `workflow.json`。 +2. 写入前先完成 Schema 和当前场景要求的领域校验,失败不得修改原文件。 +3. JSON 使用稳定字段顺序、固定缩进和末尾换行。 +4. 在同目录写入临时文件,完成必要 fsync 后原子 rename 为 `workflow.json`。 +5. rename 失败时保留原文件并清理临时文件;不得出现半写入状态。 +6. 两个进程并发写入的冲突控制在实现 PR 中通过 checksum/baseChecksum 验证,不引入目录事务协议。 + +分片 Manifest 仅是后期可选 IO Codec。只有真实实验证明单文件在大型 Git diff、多人冲突或 Agent 上下文方面构成瓶颈时才单独设计,不进入当前 package 目录、命令注册、TODO 和测试矩阵。 + +### 5.3 规范化与 checksum + +checksum 输入: + +- schemaVersion +- app 绑定字段,排除易变展示字段时必须明确 +- 按 nodeId 排序的完整节点 +- 按语义端口排序的 executionEdges +- 规范化 chatConfig + +不纳入 checksum: + +- 文件路径 +- JSON 缩进 +- `workflow.generated.json` +- plan 的 approvedAt 等审计元数据 + +推荐流程:稳定 JSON canonicalize 后计算 SHA-256。 + +### 5.4 ChangeSet plan + +```ts +type WorkflowPlan = { + schemaVersion: 'fastgpt-workflow-plan/v1'; + baseChecksum: string; + targetChecksum: string; + changeSet: WorkflowChangeSet; + changes: WorkflowChangeSummary[]; + diagnostics: WorkflowDiagnostic[]; +}; +``` + +`apply` 时重新执行 ChangeSet 并重新计算 targetChecksum,不直接信任 plan 中的目标文档。 + +Agent 默认不生成 ChangeSet 或 Plan 文件。`changeset plan --input -` 从 stdin 读取 `WorkflowChangeSetSchema`,JSON 结果通过 stdout 返回;用户确认后,`changeset apply --plan -` 从 stdin 读取原始 WorkflowPlan。Agent 在两次调用之间保留结构化对象,Apply 成功后只持久化 `workflow.json`。 + +文件只是 Git/CI/跨人审批的可选载体,不是 Agent mutation 的前置条件。stdin 和文件输入必须进入同一个 parser 和 Schema;不得维护两套 ChangeSet 业务逻辑。 + +## 6. workflow-cli 实现 + +### 6.1 CLI 入口 + +`packages/workflow-cli/package.json`: + +```json +{ + "name": "@fastgpt/workflow-cli", + "type": "module", + "bin": { + "fastgpt-workflow": "dist/cli.js" + } +} +``` + +命令示例统一使用 `fastgpt-workflow` 作为实际 bin;文档中的 `workflow` 是可读简称,正式帮助文本只保留一个名称,避免双命令漂移。 + +CLI 框架选型应优先复用仓库已有依赖;若仓库没有成熟 CLI parser,再在实现 PR 中比较 `commander`、`yargs` 或轻量自解析。框架不影响领域契约。 + +### 6.2 CLI 契约实现 + +所有命令由单一 Command Registry 注册,parser、`--help`、测试和命令可用性检查都消费该注册表,禁止分别维护命令列表: + +```ts +type CliCommandDefinition = { + path: readonly string[]; + introducedIn: 'PR1' | 'PR2' | 'PR3' | 'PR4' | 'PR5' | 'PR6' | 'PR7'; + kind: 'query' | 'localMutation' | 'artifact' | 'remoteQuery' | 'remoteMutation'; + inputSchema: ZodType; + supportsDryRun: boolean; + confirm: 'none' | 'checksum'; + handler: (input: TInput, context: CliContext) => Promise; +}; +``` + +实现约束: + +- 全局 parser 只注册 `--dir`、`--format`、`--locale`、`--no-color`、`--quiet` 和基础 help/version。 +- `--dry-run`、`--profile`、`--output`、`--confirm` 只注册到适用命令,避免无效参数被静默忽略。 +- 资源标识统一使用显式选项;不得同时支持位置参数和 option 两套语法。 +- `--value`、`--value-json`、`--value-file`、`--value-env` 由互斥 Zod union 校验;`input ref` 只接受 `--from`。 +- 配置解析优先级固定为 CLI 参数、环境变量、profile、内置默认值,并在 handler 执行前生成只读 `CliContext`。 +- stdout renderer 使用 `--format`;只有 artifact command 使用 `--output`。JSON renderer 不读取 TTY 状态,也不输出 ANSI。 +- 当前发行阶段未开放的命令不注册到 parser 和 help;不得注册后返回 TODO 或空结果。 +- Command Registry 的 path、option、introducedIn、dry-run 和 confirm 属性需要 snapshot test。 +- CLI 公共命令或 JSON envelope 的破坏性修改必须提升 CLI major version;WorkflowDocument 格式变化必须提升 schemaVersion 并提供明确迁移指引。 +- 查询命令继续使用显式 CLI options;Agent 的 mutation 入口固定为 `changeset plan --input -` 和 `changeset apply --plan -`。 +- Agent 即使只修改一个参数,也提交只包含一条 WorkflowCommand 的 ChangeSet;禁止增加简单/复杂参数分类器。 +- 人工 mutation flags 只生成一条 WorkflowCommand,不能形成第二套 mutation 实现;需要批量原子操作时同样调用 applyWorkflowChangeSet。 +- stdin 只承载版本化 JSON,不接受自然语言或待猜测的字符串格式;解析失败按参数/schema 错误返回退出码 2。 + +### 6.2.1 全局变量参数模型 + +`variable add/update` 直接复用 `VariableItemTypeSchema`,CLI 参数拆为两个正交维度: + +- `--type` 对应 `VariableInputEnum`,控制输入组件或变量作用域;`external` 在 CLI 边界归一化为存储值 `custom`。 +- `--value-type` 对应 `WorkflowIOValueTypeEnum`,控制变量值的数据结构;不得增加与 `--type` 重复表达作用域的 `--source`。 + +兼容规则:显式 `--type` 的优先级最高;未传时沿用现有 `valueType -> type` 推断。`variable update --value-type` 只在当前 `type` 等于旧 `valueType` 的推断结果时计算新 `type`,否则保留当前显式类型,避免把 `internal/custom` 意外改回普通输入框。 + +类型专属字段由 `VariableItemTypeSchema.partial().omit(coreFields).strict()` 校验。`--config-json/--config-file` 提供完整配置入口,常用快捷参数覆盖 JSON 同名字段;`coreFields` 包括 `key`、`label`、`description`、`type`、`valueType`、`required` 和 `defaultValue`,只能由各自专用参数修改。最终仍组装单条 `variable.add` 或 `variable.update` WorkflowCommand,不允许 handler 绕过 Core 直接写 `chatConfig.variables`。 + +### 6.3 Command Handler 边界 + +每个 handler 只做五件事: + +1. parse args。 +2. load document/profile。 +3. 组装 WorkflowCommand 或调用 query service。 +4. 调用 workflow-core。 +5. 输出并按规则原子写入。 + +禁止在 handler 内复制节点模板、handle、嵌套或校验规则。 + +### 6.4 命令文件映射 + +| CLI | 文件 | Core 调用 | +| --- | --- | --- | +| `init/import/build/inspect/diff` | `src/commands/document.ts` | create/decompile/compile/diff | +| `template list/show` | `src/commands/template.ts` | template provider + `normalizeNodeTemplateDescriptor()` | +| `node list/show/add/update/remove/clone/move` | `src/commands/node.ts` | query/applyWorkflowCommand | +| `edge list/connect/disconnect/reconnect` | `src/commands/edge.ts` | query/applyWorkflowCommand | +| `node insert` | `src/commands/insert.ts` | applyWorkflowCommand | +| `input show/set/ref/unset/available`、`output list/add/remove` | `src/commands/input.ts` | descriptor lookup + command/reference service | +| `meta/config/variable` 的 list/show/get/set/add/update/remove | `src/commands/config.ts` | config commands | +| `tool attach/detach/list` | `src/commands/tool.ts` | toolCall 专用 command/edge query | +| `container children` | `src/commands/container.ts` | nesting query | +| `validate` | `src/commands/validate.ts` | validate | +| `changeset plan/apply` | `src/commands/changeSet.ts` | applyWorkflowChangeSet | +| `profile list/show/add/update/remove/test` | `src/commands/profile.ts` | CLI-only profile store | +| `remote pull/diff/versions/meta push/save/publish` | `src/commands/remote.ts` | remote client + core build | +| `debug start/run` | `src/commands/run.ts` | remote client | + +### 6.4.1 `template show` 实现流程 + +```ts +const showTemplate = async ({ ref, locale, format }) => { + const resolved = await templateProvider.resolve(ref, { locale }); + const descriptor = normalizeNodeTemplateDescriptor({ + template: resolved.template, + templateRef: ref, + automationMeta: resolved.automationMeta, + locale + }); + + return printResult(descriptor, format); +}; +``` + +`template show --format json` 必须输出稳定的 `NodeTemplateDescriptor`。它只读取模板和补充 metadata,不创建节点、不写 `workflow.json`、不调用保存 API。 + +### 6.4.2 `input set/ref` 参数校验 + +```ts +const validateInputMutation = ({ node, inputKey, value, mode }) => { + const descriptor = getNodeParameterDescriptor(node, inputKey); + + assert(descriptor, 'WORKFLOW_INPUT_NOT_FOUND'); + assert(descriptor.configurable, 'WORKFLOW_INPUT_NOT_CONFIGURABLE'); + assert(descriptor.inputModes.includes(mode), 'WORKFLOW_INPUT_MODE_NOT_ALLOWED'); + assertValueType(value, descriptor.valueType, descriptor.constraints?.valueSchema); +}; +``` + +资源型输入额外执行: + +- PR6 前允许保存用户显式输入,但标记为 unverified;不能凭格式合法把它当作真实资源。 +- Agent 未从用户输入或远端 Provider 获得资源值时必须调用 `input unset` 或保留安全空值,禁止从 `examples/label/description` 生成占位 ID。 +- PR6 后由 `resourceResolver` 校验存在性和读取权限;通用 `input set` 不直接访问网络。 +- model 等 `valueType=string` 的资源必须依赖 `resourceKind` 判断,不能只按 valueType 推断。 + +参数描述的来源顺序: + +1. 节点实例自身的 input 元数据。 +2. 对应 templateRef 的 Automation Metadata。 +3. 远端模板版本的 preview/schema。 + +如果复杂参数没有 `valueSchema`,命令返回 warning 或阻断错误,不让 CLI/Agent 靠自然语言猜测对象结构。Descriptor 元数据不写入节点实例。 + +### 6.5 本地 mutation 流程 + +```ts +const runMutation = async ({ dir, command, dryRun, format }) => { + const document = await readWorkflowFile(dir); + const result = await applyWorkflowCommand({ document, command, dependencies }); + + printResult(result, format); + + if (!dryRun) { + await writeWorkflowFileAtomic(dir, result.document); + } +}; +``` + +构建门禁: + +```ts +const buildDocument = async ({ document }: BuildParams) => { + const diagnostics = validateWorkflow(document); + assertNoValidationErrors(diagnostics); + + const bindings = collectWorkflowBindings(document); + return { + workflow: compileStoreWorkflow(document), + bindings, + warnings: getWorkflowBindingDiagnostics(bindings) + }; +}; +``` + +结构校验失败时不写 StoreWorkflow;只存在待绑定项时正常构建并输出 warning,节点中的资源字段仍保持安全空值。build 阶段不填充、猜测或替换资源,也不等价于可运行或可发布。 + +打印错误后不得写盘。JSON 输出写 stdout,日志和交互提示写 stderr,便于脚本稳定解析。 + +### 6.6 输出和错误 + +内部异常统一转换: + +| 错误类 | 退出码 | +| --- | --- | +| `CliArgumentError`、Zod schema error | 2 | +| `WorkflowCommandError` | 3 | +| `WorkflowValidationError` | 4 | +| `RemoteAuthError`、`RemotePermissionError` | 5 | +| `RemoteVersionConflictError` | 6 | +| `RemoteTransportError` | 7 | + +不得根据英文 message 判断退出码,必须根据错误类型或稳定 error code。 + +## 7. Web 前端接入 + +### 7.1 Adapter 文件 + +建议新增: + +```text +projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/ +├── document.ts +├── command.ts +├── templateProvider.ts +└── validation.ts +``` + +职责: + +- `document.ts`:ReactFlow Node/Edge 与 WorkflowDocument 转换。 +- `command.ts`:把 UI action 转成 WorkflowCommand,应用后 setNodes/setEdges。 +- `templateProvider.ts`:复用 `getClientToolPreviewNode`;Web 节点创建只消费 raw template,不消费 Automation Metadata。 +- `validation.ts`:把 diagnostics 转为 node error、fitView 和 toast。 + +### 7.2 需要逐步迁移的调用点 + +| 当前文件 | 当前逻辑 | 迁移目标 | +| --- | --- | --- | +| `workflowActionsContext.tsx` | input/output 变更与清边 | 调用 node/input command | +| `Flow/hooks/useWorkflow.tsx` | add/delete/connect/insert/nesting | 调用 command dispatcher | +| `NodeTemplates/list.tsx` | resolve template/default refs/system child | 调用 instantiateNodeFromTemplate | +| `NodeTemplatesPopover.tsx` | 新增后自动连边 | 发出单个 AddNodeCommand.connectFrom | +| `workflowUtilsContext.tsx` | 转 Store + UI 校验 | 调用 shared validator | +| `projects/app/src/web/core/workflow/utils.ts` | ReactFlow 校验 | 保留 adapter,移除重复领域规则 | + +### 7.3 迁移策略 + +不要一次性重写全部 Context。按命令垂直迁移: + +1. 普通 edge connect/disconnect。 +2. node add + connectFrom。 +3. node remove cascade。 +4. input value/reference。 +5. output side effect。 +6. nested move。 +7. validator。 + +每接入一个动作,先通过 Web 行为回归测试,再删除对应的重复领域逻辑。 + +### 7.4 PR5 Workflow 辅助生成 Demo + +PR5 在 Workflow 编辑器内增加独立辅助生成模块。前端可以复用 `ChatBox`、`ChatItemContextProvider`、`ChatRecordContextProvider` 和 `ChatAIModelSelector`,但使用独立 Workflow Builder 容器和 API client,不改造 Skill Preview。 + +```text +projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/ +├── index.tsx +├── ChatPanel.tsx +├── WorkflowPlanCard.tsx +└── api.ts +``` + +Pro 拥有 Workflow Builder 的产品编排、Sandbox 上下文和内置 Skill;FastGPT 主仓保留共享 Schema、Workflow Core/Web Adapter 与 UI。 + +```text +pro/admin/src/pages/api/core/workflow/builder/chat.ts +pro/admin/src/service/core/ai/workflowBuilder/ +├── handler.ts +├── runtime.ts +├── sandbox.ts +├── schema.ts +└── index.ts +pro/admin/src/service/core/ai/skill/builtin/workflow-builder/SKILL.md +``` + +`handleWorkflowBuilderChat` 是独立 Handler。它只模仿 `handleSkillDebugChat` 的顺序,直接调用已有底层能力,不抽取 Skill 辅助生成的公共业务 Runner: + +1. 用 `authApp` 验证当前成员对 App 的写权限并执行聊天频控。 +2. 将前端当前轮 `messages` 转换为 ChatItem,通过 `getChatItems` 恢复同 `appId + chatId` 的历史和 memories。 +3. 调用 `preChatRound`,构造 `WorkflowStart -> Agent` 最小 Runtime,并通过 `dispatchWorkFlow` 进入现有 Agent Loop。 +4. 按 `sourceType=app`、`sourceId=appId`、`userId`、`chatId` 创建或恢复 App Sandbox,不使用 `skillEdit` 或 `chatAgentHelper` source。 +5. Sandbox prepare action 每轮写入前端当前 `WorkflowDocument`,注入与服务端版本一致的 `fastgpt-workflow` 构建产物,并同步内置 `workflow-builder` Skill。 +6. Skill 必须要求 Agent 先查询 Descriptor,只使用 `--format json` 的 CLI 命令,不直接编辑 `workflow.json` 或 StoreWorkflow。 +7. Agent 产出 ChangeSet 后,Handler 重新验证 Schema、`baseChecksum`、graph 和 reference,禁止直接信任 Sandbox 输出。 +8. 通过现有 Workflow SSE 输出文本、plan 和 diagnostics,并使用 `finalizeChatRound` / `updateInteractiveChat` 持久化普通聊天历史。 +9. 前端确认时对当前画布重新计算 checksum;匹配后通过 Web Adapter/Core 应用 ChangeSet,不匹配则只作废当前 plan。 + +请求 Schema 位于共享 OpenAPI 目录,只包含当前轮消息和当前画布事实: + +```ts +type WorkflowBuilderChatBody = { + appId: string; + chatId: string; + responseChatItemId?: string; + messages: ChatCompletionMessageParam[]; + model?: string; + workflowContext: { + document: WorkflowDocument; + checksum: string; + }; +}; +``` + +不向前端开放 `systemPrompt` 和 `mode`;不单独传输完整历史、修改记录或节点选中上下文。PR5 只支持当前 CLI 已暴露的内置节点和本地静态校验,不自动保存、发布、调试或调用 PR6/PR7 远端命令。 + +## 8. 远端 API 实现 + +该部分分为 PR6 的远端只读能力和 PR7 的远端写入与运行,不应混入本地 CLI MVP 或 PR5 Workflow 辅助生成 Demo。 + +### 8.1 鉴权改造 + +需要逐个审计并增加 API Key 支持的现有入口: + +| 能力 | 当前文件 | 改造 | +| --- | --- | --- | +| pull 详情 | `projects/app/src/pages/api/core/app/detail.ts` | `authApp` 增加 `authApiKey: true`,保持完整图要求写权限 | +| push 应用资料 | `projects/app/src/pages/api/core/app/update.ts` | 增加 API Key,继续按字段执行已有权限和父目录规则 | +| template preview | `projects/app/src/pages/api/core/app/tool/getPreviewNode.ts` | 增加 API Key,保持团队资源权限 | +| draft save/publish | `projects/app/src/pages/api/core/app/version/publish.ts` | 增加 API Key、baseVersionId | +| debug | `projects/app/src/pages/api/core/workflow/debug.ts` | 增加 API Key,保持 app/resource 权限 | + +不能只改 `parseHeaderCert`。每个 endpoint 必须明确 opt in,并补授权测试。 + +PR6 Template Provider 的资源默认值契约: + +```ts +type ValidatedInputDefault = { + provided: true; + value: unknown; + resourceKind: 'dataset' | 'model' | 'app' | 'tool'; +}; +``` + +- Provider 必须在当前 profile 身份下确认资源存在且具有读取权限,才放入 `validatedInputDefaults`。 +- API 返回完整节点运行所需快照,例如 dataset 不能只返回 `_id`,还需返回当前模板要求的 name/avatar/vectorModel 等字段。 +- 找不到、无权限、已删除或网络无法确认时不返回默认值,由实例化层落到安全空值并产生资源绑定诊断。 +- `validatedInputDefaults` 只参与本次实例化,不写入 Automation Metadata;节点只保存现有 StoreNode 所需值。 +- Secret 永远不进入 `validatedInputDefaults`,Provider 不读取、不返回、不记录模板中的 secret 默认值。 + +#### 8.1.1 只读资源解析 API + +新增批量只读解析入口,避免 CLI 分别依赖 Dataset、App、Model 和 Tool 的 Web 页面接口: + +```text +POST /api/core/workflow/resource/resolve +``` + +```ts +const WorkflowResourceResolveBodySchema = z.object({ + resources: z + .array( + z.object({ + requestKey: z.string().min(1), + kind: z.enum(['dataset', 'model', 'app', 'tool']), + resourceKey: z.string().min(1) + }) + ) + .max(100) +}); + +const WorkflowResourceResolveResponseSchema = z.object({ + items: z.array( + z.object({ + requestKey: z.string(), + kind: z.enum(['dataset', 'model', 'app', 'tool']), + status: z.enum(['available', 'unavailable']), + value: z.unknown().optional() + }) + ) +}); +``` + +`unavailable` 统一表示不存在、无权限或已删除,避免向调用方泄露资源是否真实存在。`value` 仅在 available 时返回节点当前 Store schema 所需的脱敏快照;响应 schema 不允许 secret/token/header credential 字段。 + +文件落点: + +| 文件 | 改动 | +| --- | --- | +| `packages/global/openapi/core/workflow/resource.ts` | 定义带 Route/Method/Description/Tags 和字段 meta 的请求、响应 Zod Schema,导出类型并注册 OpenAPI | +| `projects/app/src/pages/api/core/workflow/resource/resolve.ts` | 使用 `parseApiInput` 校验 body,启用 API Key 只读鉴权,返回前执行 ResponseSchema.parse | +| `projects/app/src/service/core/workflow/resourceResolver.ts` | 按 kind 调用现有 Dataset/App/Model/Tool 权限服务,归一化 available/unavailable 和脱敏快照 | +| `packages/workflow-cli/src/remote/resourceResolver.ts` | 批量调用 API,转换为 Core `WorkflowResourceResolver`,不缓存 secret 或权限结论 | + +该接口只读且不绑定、不保存资源;profile/API Key 不进入请求 body。请求日志只记录 kind、数量和结果数量,不记录资源快照、用户 Prompt 或任何凭证。 + +### 8.2 乐观并发 + +OpenAPI body 增加: + +```ts +baseVersionId: ObjectIdSchema.optional() +``` + +服务端事务逻辑: + +1. 开启 Mongo session。 +2. 查询当前 App 的 `pluginData.nodeVersion`。 +3. 若请求带 baseVersionId 且不一致,抛 `WORKFLOW_VERSION_CONFLICT`,HTTP 409。 +4. 创建 version history。 +5. 使用同时匹配 `_id` 和旧 versionId 的条件更新 App。 +6. `matchedCount === 0` 时同样返回冲突。 + +仅在事务外先查询一次不够,会有 TOCTOU 覆盖窗口。 + +### 8.3 保存和发布 + +- draft save:使用 `isPublish: false`、`autoSave: false` 创建可追踪版本;允许 graph validation error,但请求 schema、权限和节点格式适配仍必须通过。CLI v1 不调用 Web 后台自动保存分支。 +- publish:CLI 本地先 validate,服务端仍重新执行发布必要校验。 +- 服务端不能信任 CLI 的 `validated: true` 或 checksum。 +- 发布继续检查 Agent Skill 读取权限和资源引用。 +- debug tool 发布限制应下沉成可复用 publish validator,Web 和 CLI 都展示同一诊断。 + +### 8.4 运行与调试 + +- `run` 可复用现有 OpenAI-compatible chat 接口时,不额外发明运行 API。 +- `debug` 需要保持当前 entryNode、runtimeNodes、runtimeEdges、variables、usageId 的逐步状态契约。 +- CLI debug v1 可以只输出 JSON step 结果,不实现 TUI。 + +## 9. 测试设计 + +### 9.1 workflow-core 单元测试 + +| 测试文件 | 覆盖 | +| --- | --- | +| `test/edge/parser.test.ts` | `@next/@target/@branch/@output/@catch/@tools` | +| `test/edge/compiler.test.ts` | semantic edge 与 StoreEdge 双向转换 | +| `test/template/descriptor.test.ts` | 现有模板字段归一化、locale、inputModes、valueSchema、secret 脱敏 | +| `test/template/automationMeta.test.ts` | 补充 metadata 与模板 key 对齐、configurable 和 examples | +| `test/template/defaultValue.test.ts` | 显式值、PR6 已验证值、模板安全默认值、资源安全空值的优先级和显式空值 | +| `test/template/instantiate.test.ts` | 完整模板、默认引用不覆盖已有值、引用类型兼容、unique、系统子节点 | +| `test/command/addNode.test.ts` | add、add-after 原子性、重复 ID | +| `test/command/removeNode.test.ts` | 边清理、父节点级联、forbidDelete | +| `test/command/input.test.ts` | 固定值、VariableRef、动态 IO、清边 | +| `test/command/insert.test.ts` | 替边、回滚、不支持端口 | +| `test/nesting/service.test.ts` | 父子列表、非法嵌套、条件 break | +| `test/validation/graph.test.ts` | 连通性、工具边、分支、sourceOutput | +| `test/validation/reference.test.ts` | 上游、作用域、输出存在和类型 | +| `test/binding/service.test.ts` | 必填绑定为空、未验证资源、可选 Secret 和诊断脱敏 | +| `test/io/workflowFile.test.ts` | parse/serialize round-trip、Schema 错误和原子写入 | +| `test/store/roundtrip.test.ts` | Store -> Document -> Store 语义等价 | +| `test/template/runtime-isolation.test.ts` | Descriptor 不进入 ReactFlow Node、StoreNode、`workflow.json` 和 StoreWorkflow | + +### 9.2 workflow-cli 契约测试 + +| 测试文件 | 覆盖 | +| --- | --- | +| `test/registry.snapshot.test.ts` | 所有命令 path、首次开放 PR、kind、dry-run 和 Confirm 元数据 | +| `test/help.snapshot.test.ts` | 当前发行阶段只展示已开放命令,全局和命令级 option 不漂移 | +| `test/options/value.test.ts` | value/value-json/value-file/value-env 互斥、类型解析和 secret 脱敏 | +| `test/options/reference.test.ts` | TemplateRef、ExecutionPortRef、VariableRef、position 语法 | +| `test/output/json.test.ts` | JSON envelope、schemaVersion、stdout 纯 JSON、无 ANSI | +| `test/output/text.test.ts` | locale、quiet、no-color 和 stderr 分流 | +| `test/exitCode.test.ts` | 参数、领域、校验、权限、冲突和网络错误映射 | +| `test/dryRun.test.ts` | 本地与远端 mutation dry-run 零写入 | +| `test/compatibility.test.ts` | 已发布命令 option 和 JSON envelope 的向后兼容 | +| `test/stdinChangeSet.test.ts` | 单命令/多命令 ChangeSet、stdin 解析、零过程文件和原子失败 | +| `test/mutationEquivalence.test.ts` | 人工 flags、Web Command 与单命令 ChangeSet 产生相同 Document | +| `test/e2e.test.ts` | 待绑定资源下 validate/build 成功、warning 稳定、构建不合成资源值 | + +Command Registry 测试必须校验需求文档完整命令目录中的每个 command path 都有唯一注册项。未到首次开放 PR 的命令不进入当前 help snapshot,但必须在对应 PR 合并时同时增加 registry、handler、测试和帮助快照。 + +### 9.3 Characterization tests + +在迁移 Web 逻辑前,先冻结以下当前行为: + +- `onChangeNode` 删除/替换 output 后清理 source edge。 +- `node add` 默认关联 workflowStart 输入。 +- 从 handle 添加节点后自动连边。 +- 删除父节点级联删除 children。 +- move into parent 清边并维护 childrenNodeIdList。 +- 条件 loopRun 至少保留一个 loopRunBreak。 +- save draft 不强制完整校验,publish/run 强制校验。 +- `template show --format json` 返回稳定 Descriptor,且不产生任何工作流写入。 +- `input set/ref` 根据 Descriptor 的 type、inputMode、configurable 和 valueSchema 进行校验。 +- 模板安全默认值保留,资源默认值在 PR6 验证前保持空;显式 `[]/''/false/0` 不被覆盖。 +- Start 默认引用只补空输入且类型兼容;知识库搜索的聚合输入允许 `string/arrayString -> arrayString`,普通单引用仍拒绝该转换。 + +### 9.4 Golden fixtures + +从真实 FastGPT 导出并脱敏保存: + +```text +packages/workflow-core/test/fixtures/ +├── basic-ai/ +├── branching/ +├── tool-call-tools/ +├── nested-loop/ +└── dynamic-io-catch/ +``` + +每个 fixture 包含: + +- `store-workflow.json` +- `workflow.json` +- `expected-diagnostics.json` +- 必要时的 template snapshot + +Round-trip 比较使用规范化后的语义对象,不比较 JSON 字段顺序和 ReactFlow 展示位置微调。 + +### 9.5 Web/CLI 等价测试 + +PR1 不接入 Web Adapter,也不要求复刻当前 Web 校验器的短路顺序或内部副作用。PR1 的 Characterization Test 将当前 Web 结果投影为 `valid/invalid + blockingNodeIds`,再与 workflow-core 在 `basic-ai`、`basic-static` 及对应失败样本上的规范化投影比较。完整 WorkflowCommand、StoreWorkflow 和 diagnostics 等价从 PR2 的 Web Validation Adapter 开始,并在 PR3 随复杂图语义补齐。 + +对同一初始 fixture 和同一 WorkflowCommand: + +1. CLI 直接调用 workflow-core。 +2. Web adapter 转 Document 后调用 workflow-core。 +3. 两边编译 StoreWorkflow。 +4. 比较规范化 StoreWorkflow 和 diagnostics。 + +这组测试是防止双实现漂移的核心验收,不可省略。 + +### 9.6 Workflow 辅助生成测试 + +- Workflow Builder 前端只发送当前轮 message、model、WorkflowDocument 和 checksum。 +- Handler 按 `appId + chatId` 恢复历史 ChatItem、memories、active plan 和 ask 交互。 +- 显式 model 与默认 model 路径均进入现有 Agent Loop,usage 只计费一次。 +- 不同 `chatId` 使用独立 App Sandbox,同一会话可恢复并继续使用原 Sandbox。 +- prepare action 每轮写入当前 WorkflowDocument,CLI 产物版本与服务端匹配,内置 Skill 不写入用户工作区。 +- Agent 不直接编辑 `workflow.json`,生成的 ChangeSet 必须经 workflow-core 二次校验。 +- base checksum 匹配时可应用到当前画布;人工修改导致不匹配时保留画布并只作废当前 plan。 +- 刷新页面后恢复聊天、生成状态和待确认 plan;Skill 辅助生成现有 API、历史和 Sandbox 测试保持不变。 + +### 9.7 远端契约测试 + +- API Key 可/不可访问各 endpoint。 +- `projects/app/test/api/core/workflow/resource/resolve.test.ts` 覆盖 available、格式非法、批量上限、无权限/不存在统一 unavailable、跨团队、响应无 Secret。 +- `packages/global/openapi/core/workflow/resource.test.ts` 覆盖请求和响应 Schema、OpenAPI 注册及 kind-specific resourceKey。 +- `packages/workflow-cli/test/remote/resourceResolver.test.ts` 覆盖批量映射、网络失败、部分 unavailable 和不缓存权限结论。 +- 只读成员无法拉取完整图。 +- 无 Agent Skill 权限不能 publish。 +- baseVersionId 正常更新。 +- 两个并发请求只有一个成功,另一个 409。 +- draft save 未完成图成功,publish 同图失败。 +- PR6 Provider 仅返回当前 profile 可读资源;无权限、删除、跨团队和网络无法确认时不返回 validated default。 +- PR7 debug/run/publish 对 PR6 曾验证但随后删除或撤权的资源重新阻断。 + +资源初始值和 Binding Collector 核心函数要求优先达到 100% 行/分支覆盖,最低不得低于 90%;远端 Resolver 只 mock 鉴权和网络边界,本地优先级、空值映射、绑定脱敏、diagnostics 和 build 必须真实执行。 + +## 10. 可观测性和审计 + +CLI 的结构化日志字段: + +```ts +type CliAuditEvent = { + command: string; + appId?: string; + profile?: string; + baseChecksum?: string; + targetChecksum?: string; + baseVersionId?: string; + changedNodeIds?: string[]; + changedEdgeCount?: number; + durationMs: number; + result: 'success' | 'rejected' | 'conflict' | 'failed'; +}; +``` + +禁止记录: + +- API Key、session token。 +- 完整用户输入和 prompt。 +- 节点 secret、header、credential。 +- 未脱敏的远端响应体。 + +FastGPT 服务端已有 audit log 继续作为远端写入审计源;CLI 日志不替代服务端审计。 + +## 11. 质量门禁 + +每个 PR 至少执行: + +```bash +pnpm --filter @fastgpt/workflow-core test +pnpm --filter @fastgpt/workflow-core build +pnpm --filter @fastgpt/workflow-cli test +pnpm --filter @fastgpt/workflow-cli build +pnpm --filter @fastgpt/workflow-cli test:bin +``` + +涉及 Web adapter 时增加相关 app 单测和类型检查;涉及 API 时增加 OpenAPI、路由和权限测试。最终合并前再执行仓库要求的全量检查。 + +PR5 额外要求 Workflow Builder Handler、Sandbox prepare action、聊天恢复、usage 单次上报、checksum 过期和 Web apply 的定向测试;Pro 内置 Skill 注入测试不得依赖用户工作区或外部网络。 + +i18n 要求: + +- core diagnostic 使用稳定 code 和参数,不内置面向用户的中文/英文长文案。 +- Template Descriptor 的 label/description/placeholder 按 CLI `--locale` 解析;JSON 不输出未解析的 i18n key。 +- Web 使用现有 i18n 展示诊断。 +- CLI text renderer 根据 locale 翻译;JSON 始终输出稳定 code。 +- 新增文案同步仓库现有的英文、简体中文和繁体中文资源。 + +## 12. 发布和回滚 + +### 12.1 发布顺序 + +1. PR1 合并最小可用 Demo CLI,仅用于内部验证,不发布正式 CLI。 +2. PR2 增加常用线性节点和基础编辑,继续作为内部 alpha。 +3. PR3 开放复杂图语义,Web 按动作迁移到 shared commands。 +4. PR4 完成 ChangeSet、Confirm、checksum 和 CI 后发布本地 CLI Beta。 +5. PR5 在 Workflow 编辑器开放内部辅助生成 Demo,只支持 ChangeSet 预览和画布应用。 +6. PR6 完成 API Key 只读契约后开放 remote read beta。 +7. PR7 完成权限、并发和发布测试后开放 remote write beta。 + +### 12.2 回滚边界 + +- workflow-core 是纯函数 package,可按依赖版本回滚。 +- Web adapter 每个动作独立接入,可按 feature flag 临时切回当前 Web 实现。 +- Workflow Builder 入口通过 feature flag 独立关闭,回滚不影响 Skill 辅助生成、手工画布编辑或已发布 CLI。 +- WorkflowDocument schemaVersion 不允许静默降级;不兼容时给出明确错误和迁移指引。 +- 远端 baseVersionId 字段为 optional,旧 Web 客户端保持兼容。 +- API Key opt in 出现权限问题时可单 endpoint 关闭,不影响 session Web。 + +## 13. Reviewer 阅读顺序 + +1. `domain/document.ts`:是否只有一个规范状态。 +2. `edge/type.ts` 和 `edge/compiler.ts`:执行边是否与 VariableRef 分开。 +3. `template/defaultValue.ts`、`template/instantiate.ts`:是否按显式值、PR6 已验证值、模板安全默认值、安全空值解析,且 Start 引用不覆盖已有值。 +4. `command/apply.ts`:是否纯函数、原子、无半成品。 +5. node/input/nesting command:是否覆盖前端副作用。 +6. validation/binding:Web 和 CLI 是否共享单一结构规则,Binding Collector 是否不修改结构诊断级别且不泄露资源值。 +7. workflow file IO:是否只是解析和序列化,不执行权限或确认。 +8. CLI handlers:是否没有复制领域逻辑,结构失败是否零写入,待绑定时是否保持资源字段为空。 +9. Web adapter:是否没有把 ReactFlow 放入 core。 +10. Workflow Builder:是否保持独立 Handler,只复用底层 Chat/Agent/Sandbox 能力,并在服务端二次校验 ChangeSet。 +11. API/远端 Provider:是否逐 endpoint 鉴权、只返回可读资源默认值,并在运行/发布时重新检查资源与版本。 +12. golden 和 adapter 等价测试:是否证明没有行为漂移。 + +## 14. 实施 TODO + +当前 TODO 交付 workflow-core、workflow-cli、Web Adapter、PR5 Workflow 辅助生成 Demo 和必要的 FastGPT API 改造。Agent 通过 Shell 使用 CLI;PR5 只注入单一内置 `workflow-builder` Skill,通用 MCP Adapter 不在 PR1 到 PR7 范围内。PR 是增量开发与审核单元,不等于发布单元;PR1 只提供内部技术 Demo,PR4 完成后才发布本地 CLI Beta。 + +共享校验能力集中在 PR2 完成:一次性抽取 FastGPT Web 现有工作流规则,建立 Web 与 CLI 共用的 Validator 和新旧结果等价测试。PR1 只保留最小 Demo 所需的结构检查;PR3 以后只为新增图语义或远端场景补充规则,不再重复建设校验框架。 + +### PR1:最小可用 Demo CLI + +- [x] T1 创建 `packages/workflow-core`、`packages/workflow-cli` package 及构建测试配置。 +- [x] T2 用 `basic-ai` 固化 Web 当前 WorkflowStart、AI Chat、必填输入、普通边、基础变量引用和 Start 可达性行为。 +- [x] T3 定义最小 WorkflowDocument、Diagnostic、ExecutionPortRef、VariableRef、Command 和 Descriptor。 +- [x] T4 实现普通 semantic edge parser/compiler/decompiler 和 StoreWorkflow compile/decompile。 +- [x] T5 实现 builtin template provider、Automation Metadata、Descriptor 归一化和完整节点实例化。 +- [x] T6 支持 WorkflowStart、AI Chat、Text Editor、Assigned Answer 四种基础模板。 +- [x] T7 实现 `node add --after`、`input set/ref` 和基础 WorkflowCommand dispatcher。 +- [x] T8 实现 PR1 Demo 所需的最小 Store/Document/Graph/Reference 结构检查,不在本 PR 迁移完整 Web Validator。 +- [x] T9 实现 `workflow.json` Schema codec、schemaVersion 和单文件原子 IO。 +- [x] T10 实现 `init/build/template list/template show/node list/node show/node add/input set/input ref/validate`、`--dry-run`、JSON 输出和基础退出码。 +- [x] T10.1 统一默认工作流初始化:`init` 创建 SystemConfig + WorkflowStart,`import` 对旧工作流补齐 SystemConfig,且不覆盖 `chatConfig`。 +- [x] T11 增加 `basic-ai`、`basic-static` CLI 端到端和 golden round-trip 测试。 +- [x] T12 增加 Command Registry/help/JSON snapshot、value option 互斥、Descriptor runtime isolation、命令失败不写盘、确定性构建、构建后真实 bin 冒烟和 PR1 新旧校验结果等价测试。 + +### PR2:常用线性工作流 + +- [x] T13 实现 node update/remove/clone 和普通 edge connect/disconnect/reconnect。 +- [x] T14 实现 import/inspect、App 元数据、ChatConfig、全局变量和 available variables。 +- [x] T14.1 为全局变量补齐 `--type`、`external -> custom` 别名、类型专属配置和更新兼容规则,覆盖 Web 变量类型模型。 +- [x] T15 接入知识库搜索、问题优化、内容提取、HTTP、代码和调用应用等常用线性节点中可独立落地的部分。 +- [x] T16 完善 `input set/ref/unset`、常用复杂参数 `valueSchema` 和基础删除副作用。 +- [x] T17 集中抽取 FastGPT Web 现有工作流校验为共享 Validator,覆盖节点必填参数、输入输出、边合法性、变量引用、Start 可达性和删除残留关系。 +- [x] T18 建立常用线性工作流 fixtures 和 CLI 端到端测试。 +- [x] T19 建立 Web Validation Adapter,对同一 fixture 比较新旧校验结果;等价后让 Web 与 CLI 共同调用共享 Validator,但不一次性迁移全部 Web mutation action。 + +### PR3:复杂图语义 + +- [x] T20 实现 branch/sourceOutput/catch/tool edge。 +- [x] T21 实现 add-after 扩展、insert 和复杂 reconnect。 +- [x] T22 实现动态 input/output 和清边副作用。 +- [x] T23 实现 nesting rules、父子同步和系统子节点。 +- [x] T24 迁移分支、catch、工具边、动态 IO、父子关系和循环校验,并增加 branching、tool-call-tools、nested-loop、dynamic-io-catch fixtures。 +- [x] T25 逐动作迁移 Web editor 到 shared commands。 +- [x] T26 完成复杂图 Web/CLI StoreWorkflow、阻断结果、warning 和 diagnostics 等价测试。 +- [x] T26.1 修复数据引用的 outputKey/outputId 编解码,覆盖结构化引用、文本占位符、嵌套配置和 Store 往返回归测试。 + +### PR4:自动化与门禁 + +- [ ] T27 完善 WorkflowDocument schemaVersion 兼容策略和 `workflow.json` 迁移指引。 +- [ ] T28 实现基于规范化 WorkflowDocument 的 canonical checksum。 +- [ ] T29 实现 stdin ChangeSet plan/apply、单命令/多命令统一编排和 baseChecksum。 +- [ ] T30 实现 TTY/non-TTY Confirm gate。 +- [x] T31 固化模板输入值来源优先级、资源安全空值、Start 引用不覆盖、共享引用类型兼容规则、单一结构校验和独立 Binding Collector;CLI validate/build 输出稳定 warning 且不合成资源值。 +- [ ] T32 增加 workflow file/ChangeSet/Confirm/CI、审计字段和失败零写入测试,并补齐本地 CLI Beta 端到端验收。 +- [ ] T33 完成本地 CLI Beta 的安装、升级、回滚和端到端验收。 + +### PR5:Workflow 辅助生成 Demo + +- [ ] T34 定义 `WorkflowBuilderChatBodySchema` 和 Workflow Builder SSE/ChangeSet 输出契约,只接收当前轮 messages、model、WorkflowDocument 和 checksum。 +- [ ] T35 在 Pro 中实现独立 `handleWorkflowBuilderChat`、Runtime 构造和 API route,复用底层 Chat/Workflow 能力但不抽取或修改 Skill Handler。 +- [ ] T36 实现 App Sandbox prepare action,每轮写入当前 `workflow.json`,注入版本匹配的 CLI 构建产物,并确保不同 chatId 的 Sandbox 隔离。 +- [ ] T37 实现 Pro 内置 `workflow-builder` Skill,约束 Agent 先查询 Descriptor、只调用 JSON CLI、不直接编辑 Document/StoreWorkflow。 +- [ ] T38 恢复普通 Chat 历史、memories、plan/ask、模型选择、SSE、停止和 usage,并通过现有 Chat round 流程持久化。 +- [ ] T39 在 Handler 中对 Sandbox 输出的 ChangeSet 执行 Schema、base checksum、graph 和 reference 二次校验,禁止未确认的远端保存/发布。 +- [ ] T40 在 Workflow 编辑器接入独立 ChatBox、模型选择、历史恢复和最小 WorkflowPlanCard,不实现节点选中上下文和复杂 diff UI。 +- [ ] T41 用 Web Adapter/Core 将已确认 ChangeSet 应用到当前画布,覆盖 checksum 过期、人工修改保留、刷新恢复、计费单次上报和 Skill 路径零回归。 + +### PR6:远端只读能力 + +- [ ] T42 设计 profile 和密钥读取,不在配置文件明文保存 key。 +- [ ] T43 为 detail、preview、versions 和 dataset/model/app/tool 资源解析增加 API Key 只读契约与权限测试,所有响应禁止包含 Secret 值。 +- [ ] T44 实现 team app/system tool/remote tool provider 和只读 Resource Resolver,返回远端参数 Schema/Descriptor;仅把当前 profile 已鉴权且具有读取权限的非 Secret 资源写入 `validatedInputDefaults`。 +- [ ] T45 实现 remote pull、versions 和 template preview。 +- [ ] T46 增加远端模板版本、读取权限、资源可见性、未授权/已删除资源默认值回退为空、pull 本地冲突和 StoreWorkflow 反编译校验测试。 +- [ ] T47 完成 remote read beta 验收。 + +### PR7:远端写入与运行 + +- [ ] T48 为 update、publish 和 debug 增加 API Key 写入契约与权限测试。 +- [ ] T49 为 publish schema 增加 baseVersionId。 +- [ ] T50 在事务内实现版本比较和 409 冲突。 +- [ ] T51 实现 remote meta push、draft save 和 publish。 +- [ ] T52 实现 run 和 JSON step debug。 +- [ ] T53 完成 runtime/publish Validator,重新验证 PR6 已解析资源,增加并发、权限撤销、资源删除、跨团队复制、资源引用、draft/publish 门禁差异的服务端端到端测试。 +- [ ] T54 完成 remote write beta 的发布与回滚验收。 + +## 15. 开发开始前的阻断条件 + +以下三项没有确认前,不进入源代码实现: + +1. 接受 `WorkflowDocument` 为唯一 CLI 规范状态,初期直接持久化为单文件 `workflow.json`;分片 Manifest 不进入 PR1 到 PR7。 +2. 接受执行边使用 `@next/@target/...`,变量引用使用 `node.output`,两者彻底分开。 +3. 接受按 PR1 到 PR7 增量落地,PR1 只作为内部技术 Demo,PR4 后发布本地 CLI Beta,PR5 接入 Workflow 辅助生成 Demo,PR6/PR7 再开放远端能力。 + +确认后,实际开发从 T1 开始,并按 TODO 逐项更新状态。 diff --git "a/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" "b/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" new file mode 100644 index 000000000000..9eb9d0d884f5 --- /dev/null +++ "b/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" @@ -0,0 +1,1614 @@ +# Workflow CLI Builder 需求设计文档 + +## 0. 文档标识 + +- 文档状态:方案评审稿 +- 修订日期:2026-07-20 +- 目标仓库:FastGPT +- 目标对象:FastGPT Workflow 的本地构建、自动化修改、Web 辅助生成、远端保存、发布与调试 +- 关联开发文档:`workflow-cli-builder-功能开发文档.md` +- 文档范围:需求边界、CLI 规范与总体架构 + +## 1. 结论先行 + +CLI 不能被设计成一套脱离 FastGPT 前端的 JSON 拼装器。它必须是 FastGPT 工作流编辑领域能力的第二个调用端: + +```text +FastGPT Web Editor ─┐ + ├─> Shared Headless Workflow Core ─> WorkflowDocument ─> StoreWorkflow +FastGPT Workflow CLI ┘ +``` + +本方案锁定以下决策: + +1. Web 与 CLI 共享同一套节点、执行边、变量引用、嵌套、删除副作用和校验规则。 +2. ReactFlow 只负责画布交互,不作为共享领域模型。 +3. 执行边与变量引用是两种不同关系,必须使用不同类型和命令。 +4. `WorkflowDocument` 是 CLI 内存中的唯一规范状态,初期直接序列化为单文件 `workflow.json`。 +5. `WorkflowChangeSet` 只描述对 `WorkflowDocument` 的命令集合,不是第二份工作流状态。 +6. `StoreWorkflow` 是编译结果和 FastGPT 现有保存、发布、运行接口的输入。 +7. `workflow.json` 只记录状态,约束由共享代码和校验命令执行;分片 Manifest 仅作为后期实验指标证明有必要时的可选优化。 +8. 本地编辑命令默认原子写入,统一支持 `--dry-run`;远端发布和 AI 生成的批量变更需要确认门禁。 +9. 第一阶段只交付本地核心闭环,远端鉴权和并发控制完成后再开放远端写入。 +10. 新建和导入工作流必须包含唯一且不可删除的系统配置节点;变量和开关仍以 `chatConfig` 为唯一事实源,系统配置节点只提供 Web 编辑入口。 +11. PR5 在 Workflow 编辑器内提供独立的辅助生成 Demo:复用现有 Chat、Agent Loop、Sandbox、Skill 和计费基础设施,但不抽象或改写 Skill 辅助生成的业务 Handler。 + +## 2. 目标与设计约束 + +### 2.1 产品目标 + +用户能够用 CLI 自动化完成一个 FastGPT 工作流从零到可运行的全过程,包括: + +- 选择节点模板并创建完整节点。 +- 给节点设置固定值、变量引用和节点专用配置。 +- 建立普通执行边、分支边、异常边和工具边。 +- 将节点插入已有边,或在创建节点时直接接到现有节点后。 +- 创建和维护循环、批处理等嵌套结构。 +- 删除、克隆、移动节点,并正确处理关联边和子节点。 +- 校验节点配置、图连通性、引用有效性和运行前置条件。 +- 将本地草稿保存为可审查、可版本控制的 `workflow.json`。 +- 拉取、保存、发布、调试和运行远端 FastGPT 应用。 +- 让 AI 只生成可审查的 ChangeSet,再由确定性代码应用。 + +### 2.2 设计约束 + +FastGPT Web 已经具备完整的画布操作。CLI 需要将分布在 React Context、ReactFlow hook、节点模板 UI、校验工具和 API 中的领域规则收敛为共享能力,并满足以下约束: + +- 节点创建必须包含模板默认输入和远端模板完整数据。 +- 变量引用与执行边使用独立的数据结构和命令。 +- 删除输出、节点或父容器时执行确定性的清理副作用。 +- 嵌套关系遵循与 Web 相同的领域规则。 +- CLI 与 Web 使用同一套运行、发布校验规则。 +- 远端命令只使用已明确支持并经过权限测试的 API Key 契约。 + +第一阶段先建立可被 Web 和 CLI 共同调用的工作流领域核心,再实现命令行入口。 + +## 3. FastGPT 现状事实基线 + +以下事实来自当前代码,后续实现不得用推测替代。 + +| 领域 | 当前代码 | 已确认行为 | 对 CLI 的要求 | +| --- | --- | --- | --- | +| 编辑器初始化 | `projects/app/src/pageComponents/app/detail/Workflow/index.tsx` | 由 `appDetail.modules` 和 `appDetail.edges` 初始化 ReactFlow | CLI 使用存储态,不依赖 ReactFlow Node/Edge | +| 编辑器能力分层 | `WorkflowComponents/context/index.tsx` | Init、Actions、Utils、Debug、Persistence 等 Context 叠加 | 共享领域规则由 workflow-core 承载 | +| 节点修改 | `workflowActionsContext.tsx` | 支持属性、输入、输出增删改;删除或替换输出会清边 | CLI 节点命令必须产生相同副作用 | +| 图操作 | `Flow/hooks/useWorkflow.tsx` | 连接、删除、复制、插入、嵌套均有额外规则 | CLI 不能只对数组做 CRUD | +| 嵌套节点 | `useWorkflow.tsx`、`useNestedNode.ts` | 维护 `parentNodeId` 和 `childrenNodeIdList`;移入容器会清边 | 嵌套命令必须原子更新父子关系和边 | +| 节点模板 | `Flow/components/NodeTemplates/useNodeTemplates.tsx` | 模板包含内置节点、团队应用、系统工具 | 模板引用必须区分来源,不能只用 `flowNodeType` | +| 模板实例化 | `NodeTemplates/list.tsx` | 远端模板先取完整 preview;内置模板补默认输入引用和本地化文案 | CLI 应复用模板提供器和实例化规则 | +| 普通执行边 | `ConnectionHandle.tsx`、`getHandleId()` | 常规 source/target handle 使用节点 ID、方向和类型生成 | CLI 接收语义端口,内部编译 handle | +| 输出执行边 | `RenderOutput/Label.tsx` | 仅 `output.type === source` 的输出产生执行 handle | 普通变量输出不能被当作执行端口 | +| 工具边 | `NodeCard.tsx`、`ToolHandle.tsx`、`NodeTemplatesPopover.tsx` | toolCall 节点提供 source,工具节点提供 target;两端 handle 均为 `selectedTools` | 工具调用连边是专用执行边,不能泛化成任意 Agent 连边 | +| 异常边 | `CatchError.tsx` | source 类型为 `source_catch` | CLI 要有 `catch` 端口语义 | +| 变量引用 | 工作流 input/reference 逻辑 | 引用值是 `[nodeId, outputId]`,存储在节点输入中 | 使用 `input ref`,不创建 StoreEdge | +| 新增后连边 | `NodeTemplatesPopover.tsx` | 从 handle 新增节点后,会自动添加一条边 | CLI 的 `node add --after` 必须是原子操作 | +| 新增默认引用 | `NodeTemplates/list.tsx` | 常见输入会默认引用 workflowStart 的用户文本或文件 | CLI 与 Web 应生成相同默认值 | +| 删除父节点 | `useWorkflow.tsx` | 同时删除子节点及所有关联边 | CLI `node remove` 默认级联 | +| 条件循环 | `useWorkflow.tsx`、校验函数 | 条件 loopRun 至少保留一个 loopRunBreak | CLI 在修改和校验阶段都要阻止非法状态 | +| 校验 | `projects/app/src/web/core/workflow/utils.ts` | `checkWorkflowNodeAndConnection` 同时检查节点和连通性,但输入是 ReactFlow 类型 | 使用 Store/Document 级共享校验器 | +| 草稿保存 | `Header.tsx`、`SaveButton.tsx` | 保存到云端不强制执行完整校验,允许保存未完成草稿 | CLI 必须区分 draft save 与 publish | +| 运行和发布 | `Header.tsx` | Run 和 Save and publish 会先调用检查 | CLI run/publish 必须经过阻断式校验 | +| 发布权限 | `version/publish.ts` | 要求写权限;发布时检查 Agent Skill 读取权限 | CLI 不得绕过资源权限 | +| 只读详情 | `api/core/app/detail.ts` | 只有读权限、没有写权限时返回空 nodes/edges | CLI pull 工作流图实际需要写权限 | +| API 鉴权 | detail、preview、publish、debug API | 当前主要开启 `authToken: true`,未统一开启 `authApiKey` | 远端 CLI 上线前必须补 API Key 契约或明确只支持 session token | +| 包边界 | `.agents/code/syntax.md` | `packages/global/core` 主要承载类型和常量 | 共享领域实现位于独立 package | + +### 3.1 当前校验层级与复用边界 + +当前 FastGPT 没有统一的工作流 Validator。校验职责分散在以下三层: + +| 当前层级 | 当前职责 | 代表代码 | CLI 设计处理 | +| --- | --- | --- | --- | +| Web 前端层 | 节点配置、必填输入、变量引用、特殊节点规则、执行边和图连通性 | `projects/app/src/web/core/workflow/utils.ts` 的 `checkWorkflowNodeAndConnection()` | 复用规则本身,将纯规则下沉到 workflow-core;CLI 不直接依赖 ReactFlow 函数 | +| API Schema 层 | 请求字段、枚举、ObjectId、nodes/edges/chatConfig 基本结构 | OpenAPI/Zod Schema 和 `parseApiInput` | 保留 API 边界校验,不能替代工作流领域校验 | +| Service 层 | App 权限、资源引用、Agent Skill 读取权限、发布限制和版本写入 | `authApp`、`beforeUpdateAppFormat`、publish controller | 继续留在服务端;CLI 本地校验结果不能替代服务端权限和发布校验 | + +当前主要图校验调用链: + +```text +ReactFlow Nodes/Edges + -> checkWorkflowNodeAndConnection() + -> 节点标红 / toast + -> uiWorkflow2StoreWorkflow() + -> FastGPT API +``` + +`checkWorkflowNodeAndConnection()` 不能被 CLI 直接 import,原因是它接收 ReactFlow Node/Edge、读取 sourceHandle/targetHandle、只返回首个错误节点,并在部分分支中修改 input value。CLI 建设不重新发明校验准则,而是通过 Characterization tests 固化现有行为,再把判断规则迁移为不依赖 UI、文件系统和网络的纯 Validator: + +```text +FastGPT Web -> Web Adapter -------┐ + v + WorkflowDocument + | +CLI workflow.json -> File Codec --┘ + v + Shared Workflow Validator + | + WorkflowDiagnostic[] + +FastGPT API / Service -> Schema、权限、资源、运行和发布校验 +``` + +目标拆分: + +- `validateWorkflowSchema()`:Document 与字段结构。 +- `validateWorkflowDocument()`:节点、模板实例、必填配置和动态 key。 +- `validateWorkflowGraph()`:执行端口、重复边、连通性、分支、工具边和循环规则。 +- `validateWorkflowReferences()`:变量存在性、类型、上游可达性和父级作用域。 +- `validateWorkflowRuntime()`:模型、sandbox 和外部资源能力,需要运行环境上下文。 +- `validateWorkflowPublish()`:调试工具、Agent Skill 和远端资源权限,最终由服务端执行。 + +校验策略不能对所有命令一刀切: + +| 场景 | 阻断规则 | 非阻断诊断 | +| --- | --- | --- | +| 普通本地 mutation | Schema、ID、端口、父子一致性、本次参数类型和引用格式 | 整体连通性、其他节点尚未补齐的业务参数 | +| `build` / ChangeSet apply | schema、document、graph、reference | runtime、publish | +| `remote save --draft` | schema、document、服务端请求结构和权限 | graph、reference、runtime、publish | +| `remote publish` / `run` | schema、document、graph、reference、runtime、publish | 仅明确标记为 warning 的诊断 | + +每条 mutation 在内存中生成 `Next WorkflowDocument` 后执行对应策略。存在阻断错误时,不写 `workflow.json`、不调用远端写接口;Validator 只返回完整 `WorkflowDiagnostic[]`,不得修改 Document。Web 将诊断转换为节点高亮和 toast,CLI 将同一诊断渲染为 text 或 JSON。 + +### 3.2 本次 Binding 职责拆分影响域 + +| 维度 | 是否命中 | 证据 | 结论 | +| --- | --- | --- | --- | +| API | No | 本地 `validate/build` 不调用远端 Resolver | Not Applicable,PR6 再设计鉴权接口 | +| Data | No | Binding 不写入 WorkflowDocument、StoreWorkflow 或数据库 | Not Applicable,无迁移 | +| Frontend | No | 本次只改 workflow-core 和 workflow-cli | Not Applicable,Web 行为不切换 | +| Logging | No | Binding 只进入 CLI result/warnings,且不包含实际值 | Not Applicable,不新增日志通道 | +| Packaging | Yes | 新增 `packages/workflow-core/src/binding/*` 并从 package 入口导出 | 保持 browser-safe,不引入 IO/服务端依赖 | +| Testing | Yes | Core Binding/reference/validation 与 CLI e2e 都需回归 | 真实运行 CLI,不 mock 本地领域逻辑 | +| DocI18n | No | 未增加用户可见文案,诊断使用稳定 code | Not Applicable,无 i18n key 变更 | + +## 4. 范围和分档 + +### 4.1 档位 A:共享领域核心和本地 CLI 闭环 + +必须优先完成: + +- `WorkflowDocument`、语义执行端口、变量引用、命令和结果模型。 +- StoreWorkflow 的导入、编译与语义等价 round-trip。 +- 内置模板实例化。 +- 内置模板参数的机器可读 Descriptor 和 `template show --format json`。 +- 节点新增、修改、删除。 +- 普通执行边连接、断开。 +- 输入固定值和变量引用。 +- 共用的 Store/Document 级校验器。 +- 本地文件读写、原子保存、`--dry-run` 和 JSON 输出。 + +### 4.2 档位 B:完整图编辑语义 + +- 分支边、输出 source 边、catch 边、工具边。 +- `node add --after`、`node insert`、reconnect。 +- 动态输入输出及清边副作用。 +- clone、批量删除、嵌套移动。 +- loop、loopRun、batch 等父子节点自动创建与约束。 +- 团队应用、插件、MCP/HTTP 工具等远端模板提供器。 +- custom/object 参数的 JSON Schema、示例和远端模板 Descriptor。 + +### 4.3 档位 C:ChangeSet 和 Confirm 门禁 + +- ChangeSet diff、plan、apply。 +- AI 生成 ChangeSet,不直接生成最终 StoreWorkflow。 +- 对 base checksum 和 target checksum 做确认门禁。 +- 确认后内容发生变化时自动使确认失效。 + +### 4.4 档位 D:Workflow 辅助生成 Demo + +- Workflow 编辑器内的独立聊天入口。 +- 复用普通聊天的历史恢复、模型选择、SSE、停止、计费和 Agent Loop。 +- 使用 App 归属 Sandbox,注入当前 `workflow.json`、固定版本 CLI 和内置 `workflow-builder` Skill。 +- Agent 只生成可预览、可确认的 `WorkflowChangeSet`,由 Web Adapter/Core 应用到当前画布。 +- PR5 不自动保存、发布或调试,不支持节点选中上下文、文件上传或复杂 diff 编辑。 + +### 4.5 档位 E:远端生命周期 + +- profile/login/whoami。 +- pull、draft save、publish、versions。 +- debug step、run。 +- API Key 鉴权、写权限、资源权限。 +- `baseVersionId` 乐观并发控制和 409 冲突。 + +### 4.6 后期可选优化:分片 Manifest + +分片 Manifest 不进入当前 PR1 到 PR7 的开发、测试和验收范围。初期统一使用单文件 `workflow.json`,先通过真实工作流实验验证以下问题是否实际存在: + +- 大型工作流导致 Git diff 难以审核。 +- 多人并行编辑单文件产生高频冲突。 +- Agent 读取完整文件造成不可接受的上下文开销。 +- 单文件原子写入或恢复不能满足实际可靠性要求。 + +只有实验数据证明上述问题达到需要优化的程度,才新增可选的 Manifest Codec。该 Codec 只负责 `WorkflowDocument` 的分片序列化和组装,不改变 Command、Validator、StoreWorkflow Compiler 和远端 API 契约。 + +### 4.7 档位 F:团队与 CI + +- 非交互模式和稳定退出码。 +- 结构化审计日志。 +- CI validate/build/diff/publish。 +- 策略配置,例如禁止调试工具发布、允许节点类型白名单。 + +### 4.8 第一版明确不做 + +- 不在 CLI 内实现可视化画布。 +- 不把 ReactFlow viewport、选择态、toast、modal、节点宽高放进共享核心。 +- 不在 v1 中创建、删除 FastGPT App;先针对本地文档和已有 App。 +- 不在 v1 中自动布局复杂图;节点位置先由模板默认、显式参数或简单确定性偏移产生。 +- CLI 本体不实现通用 Skill 或 MCP Adapter;PR5 只在产品层注入单一内置 `workflow-builder` Skill,Agent 仍通过 Shell 调用 CLI 并读取结构化输出。 +- 不允许用户在常规命令中手写 `sourceHandle` 和 `targetHandle`。 +- 不让大模型直接写数据库格式并绕过确定性命令。 + +## 5. CLI 整体架构与实现逻辑 + +### 5.1 架构目标 + +整体架构采用“一个共享领域核心、两个直接调用端、两个持久化落点”: + +- 一个共享领域核心:`@fastgpt/workflow-core`,集中执行节点、执行边、变量引用、嵌套、副作用和校验规则。 +- 两个直接调用端:FastGPT Web Adapter 和 `fastgpt-workflow` CLI。 +- 两个持久化落点:本地单文件 `workflow.json` 和正在运行的 FastGPT 服务。 +- Agent 位于 CLI 上游;PR1 到 PR4 保证具备 Shell 能力的 Agent 可直接调用 CLI,PR5 再将同一能力接入 FastGPT Workflow 编辑器。 + +核心原则: + +1. Web、CLI 和 Agent 最终都执行同一套 WorkflowCommand。 +2. CLI 只做命令解析、流程编排、文件 IO、HTTP 和结果输出。 +3. workflow-core 只做确定性领域计算,不依赖 React、文件系统和网络。 +4. 本地工作流与服务端工作流通过 StoreWorkflow 编译结果对接。 +5. 所有高风险变更先 plan、validate,再 confirm 和 apply。 + +### 5.2 整体大架构 + +```mermaid +flowchart TB + subgraph Interaction["交互层"] + User["用户 / 自动化脚本"] + Agent["Agent 自然语言交互"] + Web["FastGPT Web 编辑器"] + end + + subgraph Access["接入与编排层"] + CLI["fastgpt-workflow CLI"] + WebAdapter["Web Workflow Adapter"] + end + + subgraph Domain["共享领域层"] + Core["@fastgpt/workflow-core"] + end + + subgraph State["状态与编译层"] + Document["WorkflowDocument"] + WorkflowFile["workflow.json"] + Store["StoreWorkflow"] + end + + subgraph Server["FastGPT 服务端"] + APIClient["FastGPT API Client"] + API["FastGPT HTTP API"] + Service["FastGPT Service"] + DB["MongoDB / App Version"] + end + + User --> CLI + Agent --> CLI + Web --> WebAdapter + CLI --> Core + WebAdapter --> Core + Core --> Document + Document --> WorkflowFile + Document --> Store + Store --> APIClient --> API --> Service --> DB +``` + +Agent 不形成第二套工作流引擎。具备 Shell 能力的 Agent 直接调用 CLI,并读取稳定 JSON 输出;PR5 的内置 `workflow-builder` Skill 只规定 Agent 如何使用 CLI,实际修改仍由 CLI 和 workflow-core 完成。通用 MCP Adapter 不属于当前开发范围。 + +### 5.3 详细架构设计 + +```mermaid +flowchart LR + Agent["Agent / 用户"] --> CLI["CLI Command Router"] + Web["FastGPT Web"] --> WebAdapter["Web Adapter"] + + subgraph Core["共享 Workflow Core"] + Template["Template System
模板发现、参数描述、节点实例化"] + Command["WorkflowCommand"] + Mutation["Graph Mutation Engine
节点、边、参数、引用、嵌套"] + NextDocument["Next WorkflowDocument"] + Validator["Validator"] + Compiler["StoreWorkflow Compiler"] + end + + subgraph Local["本地工作流"] + WorkflowFile["workflow.json"] + FileAdapter["Workflow File IO
Schema 解析、原子写入"] + Document["WorkflowDocument"] + end + + subgraph RemoteSide["远端 FastGPT"] + Remote["Remote Client"] + Server["FastGPT API / Service"] + end + + Output["Text / JSON Output"] + + CLI --> Template + Template -->|"template show"| Output + CLI --> Command + WebAdapter --> Command + Template -->|"模板与参数契约"| Command + + WorkflowFile --> FileAdapter --> Document --> Command + Command --> Mutation --> NextDocument --> Validator + + Validator -->|"查看结果"| Output + Validator -->|"local apply"| FileAdapter + Validator -->|"remote apply"| Compiler --> Remote --> Server +``` + +精简后的详细架构只保留两条关键链路: + +- 模板查询链路:`CLI -> Template System -> 参数描述 -> Text / JSON 输出`。 +- 工作流修改链路:`workflow.json -> WorkflowDocument -> WorkflowCommand -> Graph Mutation Engine -> Validator`;校验通过后,根据命令选择 `local apply` 原子写回 `workflow.json`,或 `remote apply` 编译为 StoreWorkflow 并提交 FastGPT 服务。 + +Automation Metadata 只进入 Descriptor 归一化和参数校验,不进入节点实例化、WorkflowDocument、`workflow.json` 或 StoreWorkflow。 + +### 5.4 组件职责 + +| 组件 | 位置 | 核心职责 | 明确不负责 | +| --- | --- | --- | --- | +| Workflow CLI | `packages/workflow-cli` | 参数解析、命令编排、本地 IO、远端 HTTP、输出和退出码 | 节点与图规则 | +| Workflow Core | `packages/workflow-core` | 模板实例化、Command、图操作、引用、嵌套、校验、编译 | ReactFlow、fs、HTTP、终端交互 | +| Web Adapter | `projects/app/.../WorkflowComponents/adapters` | ReactFlow 与 WorkflowDocument 转换、UI action 适配、诊断展示 | 重复实现领域规则 | +| Template Provider | core 接口 + Web/CLI 实现 | 提供内置模板、团队应用、系统工具的完整模板和可选自动化元数据 | 直接修改工作流 | +| Template Descriptor | `packages/workflow-core/src/template` | 将现有模板字段与 Automation Metadata 归一化为机器可读参数契约 | 修改 Web 模板或进入 StoreNode | +| Workflow File IO | `packages/workflow-cli/src/io` | `workflow.json` 的 Schema 解析、确定性序列化和单文件原子写入 | 判断节点是否合法 | +| Remote Client | `packages/workflow-cli/src/remote` | profile、鉴权、pull、save、publish、debug、run | 直接读写数据库 | +| FastGPT API | 现有 Next API 与 Service | 权限、资源校验、版本写入和运行调试 | 信任客户端已完成校验 | + +### 5.5 分层调用规则 + +依赖方向固定为: + +```text +Agent -> Workflow CLI -> Workflow Core -> @fastgpt/global +FastGPT Web -> Web Adapter -> Workflow Core -> @fastgpt/global +Workflow CLI -> FastGPT API -> Service -> Database +``` + +禁止出现: + +- workflow-core 引用 workflow-cli。 +- workflow-core 引用 projects/app、ReactFlow 或 packages/service。 +- CLI command handler 直接拼 `sourceHandle/targetHandle`。 +- Agent 绕过 CLI 直接写 StoreWorkflow 或 MongoDB。 +- FastGPT API 信任客户端传入的 `validated: true`、confirm 状态或权限结论。 +- CLI 专用 Automation Metadata 写入 `FlowNodeInputItemTypeSchema`、WorkflowDocument、`workflow.json` 或 StoreWorkflow。 + +### 5.6 数据流与对象关系 + +工作流状态、变更指令和编译结果必须分开: + +```text +WorkflowChangeSet + -> apply +WorkflowDocument + -> serialize / parse -> workflow.json + -> build -> StoreWorkflow + -> save / publish / run -> FastGPT Service +``` + +- `WorkflowChangeSet` 回答“要执行哪些动作”。 +- `WorkflowDocument` 回答“当前完整工作流是什么”。 +- `workflow.json` 回答“工作流如何在本地持久化”。 +- `StoreWorkflow` 回答“如何提交给 FastGPT”。 + +任何时候都只能有一个规范工作流状态,即 `WorkflowDocument`。`workflow.json` 是它的单文件序列化结果,StoreWorkflow 是它的编译结果。 + +### 5.7 单条命令执行流程 + +以创建节点并自动连边为例: + +```bash +fastgpt-workflow node add \ + --dir ./flow \ + --template builtin:ai-chat \ + --node answer \ + --after start@next +``` + +内部执行顺序: + +1. CLI parser 校验参数并确定工作目录。 +2. Workflow File IO 读取并解析 `workflow.json` 为 `WorkflowDocument`。 +3. CLI 将参数转换为 `AddNodeCommand`,其中包含 templateRef、nodeId 和 connectFrom。 +4. workflow-core 通过 Template Provider 解析完整节点模板。 +5. command dispatcher 创建完整节点、默认输入引用和系统子节点。 +6. dispatcher 创建 `start@next -> answer@target` 语义执行边。 +7. validator 检查节点 ID、模板、端口、父子关系和图约束。 +8. workflow-core 返回新 Document、变更摘要、warning 和 checksum。 +9. `--dry-run` 只输出结果;普通模式通过临时文件和原子 rename 写回 `workflow.json`。 +10. 若执行 `remote save/publish`,CLI 编译 StoreWorkflow 并调用 FastGPT API。 + +步骤 4 到步骤 7 任一失败,Document 不落盘,远端 API 也不会被调用。 + +### 5.8 本地构建模式 + +本地模式不要求 FastGPT 服务运行: + +```text +workflow.json -> WorkflowDocument -> Command -> Validate -> workflow.json / StoreWorkflow JSON +``` + +适用场景: + +- 在代码仓库中维护工作流。 +- 使用 Git review 工作流变化。 +- CI 执行 validate/build。 +- 批量生成可导入的 workflow JSON。 +- Agent 在沙箱中先生成并审查工作流,不直接影响服务端。 + +本地 mutation 默认原子写入,所有 mutation 支持 `--dry-run`。 + +### 5.9 FastGPT 服务端模式 + +服务端模式通过 HTTP API 操作一个正在运行的 FastGPT 实例。该实例可以位于公网、内网,也可以是 `localhost`。 + +```text +WorkflowDocument -> Build StoreWorkflow -> FastGPT API -> App Version +``` + +规则: + +- CLI 不直接连接 MongoDB。 +- pull、save、publish 和 debug 都经过 FastGPT 权限系统。 +- draft save 与 publish 使用不同校验门禁。 +- `baseVersionId` 用于阻止覆盖其他客户端的新版本。 +- 服务端重新执行 schema、权限、资源和发布校验。 +- 当前 v1 面向已有 App;创建和删除 App 不属于 v1。 + +### 5.10 Web 共用逻辑 + +FastGPT Web 不调用 CLI 进程,而是通过 Web Adapter 直接调用 workflow-core: + +```text +ReactFlow action -> WorkflowCommand -> Workflow Core -> WorkflowDocument -> ReactFlow state +``` + +Web Adapter 负责坐标、选择态、viewport、toast、modal 和错误高亮。节点创建、连边、引用、嵌套和校验规则由 workflow-core 负责。 + +同一初始 Document 和同一 WorkflowCommand,Web 与 CLI 必须生成语义相同的 StoreWorkflow。 + +### 5.11 Agent 接入逻辑 + +Agent 不作为另一套工作流引擎。PR1 到 PR4 只保证具备 Shell 能力的 Agent 直接调用 `fastgpt-workflow`,并读取稳定 JSON 输出;PR5 将这条路径接入 Workflow 编辑器,但不改变 WorkflowCommand、ChangeSet 和 Core 的事实边界。通用 MCP Adapter 不进入当前验收范围。 + +Agent 的标准执行循环: + +1. 查询模板及其输入输出约束。 +2. 根据用户需求生成 `WorkflowChangeSet`。 +3. 调用 `changeset plan` 获取变更摘要和诊断。 +4. 根据诊断调整 ChangeSet,直到静态校验通过。 +5. 向用户展示 plan。 +6. 获得确认后执行 apply。 +7. 根据用户要求停留在本地、保存草稿或发布到 FastGPT。 + +Agent 只能提出和调用结构化动作。checksum、权限、发布校验和并发冲突必须由 CLI/Core/API 独立执行。 + +### 5.12 PR5 Workflow 辅助生成接入 + +PR5 是独立产品模块,只模仿 Skill 辅助生成的运行顺序,不抽取、改造或共用 `handleSkillDebugChat` 的业务 Handler。它可以直接复用现有底层函数和组件,包括 `ChatBox`、`getChatItems`、`preChatRound`、`dispatchWorkFlow`、Agent Loop、Sandbox tools、usage 和 `finalizeChatRound`。 + +```text +Workflow ChatBox + -> independent Workflow Builder API/Handler + -> restore normal chat histories and Agent memories + -> build WorkflowStart -> Agent runtime + -> prepare App sandbox + -> write current workflow.json + -> inject version-matched fastgpt-workflow CLI + -> inject builtin workflow-builder Skill + -> Agent Loop calls CLI + -> server revalidates WorkflowChangeSet + -> SSE returns plan/diagnostics + -> Web Adapter/Core applies confirmed ChangeSet to current canvas +``` + +PR5 请求只携带当前轮消息、模型和画布事实;历史对话、Agent memories、计费和生成状态继续按普通 Chat 机制恢复: + +```ts +type WorkflowBuilderChatBody = { + appId: string; + chatId: string; + responseChatItemId?: string; + messages: ChatCompletionMessageParam[]; + model?: string; + workflowContext: { + document: WorkflowDocument; + checksum: string; + }; +}; +``` + +PR5 不传入 `mode`、不单独建模“修改记录”、不传节点选中上下文。Sandbox 只修改当前 Document 的副本;未经用户确认时不得更新画布或调用保存/发布 API。应用时必须重新比较 `baseChecksum`,用户人工修改导致过期时只作废当前 plan,不限制之后继续使用辅助生成。 + +### 5.13 Workflow Core 抽取与阶段交付 + +`@fastgpt/workflow-core` 是 Web 和 CLI 共同依赖的 TypeScript 领域包,不是独立部署的服务。它围绕 `WorkflowDocument` 提供确定性的模板实例化、节点编辑、执行边编辑、变量引用、嵌套、副作用、校验和 StoreWorkflow 转换能力。 + +Core 的状态关系固定为: + +```text +workflow.json + <-> parse / serialize +WorkflowDocument + <-> compile / decompile +StoreWorkflow + +ReactFlow State + <-> Web Adapter +WorkflowDocument +``` + +其中: + +- `workflow.json` 是 `WorkflowDocument` 的单文件持久化表达,不是第二套领域模型。 +- `StoreWorkflow` 是 FastGPT 当前保存、发布和运行所需的编译结果。 +- ReactFlow State 是 `WorkflowDocument` 加上 Web 画布运行状态;selected、viewport、节点测量尺寸、toast 和 debug 展示信息不得进入 Core。 +- Core 复用 `StoreNodeItemType` 保存完整节点,以语义执行端口代替面向用户暴露的 ReactFlow handle。 + +PR1 只抽取能够构建基础线性工作流的最小 Core 纵向切片,并交付本地 CLI Demo,不宣称完成全部 Workflow Core。首批节点固定为: + +| 节点 | 用途 | PR1 必要能力 | +| --- | --- | --- | +| WorkflowStart | 工作流入口,提供用户问题和文件等系统输出 | 初始化、默认引用、Start 可达性校验 | +| AI Chat | 调用模型生成结果 | 模板实例化、模型/提示词参数、用户输入引用 | +| Text Editor | 提供静态文本或拼接文本 | 固定值输入、变量引用 | +| Assigned Answer | 将固定内容或上游结果作为最终回答 | 固定值/引用输入、普通执行边 | + +PR1 必须打通以下完整链路: + +```text +CLI flags + -> WorkflowCommand + -> applyWorkflowCommand() + -> WorkflowDocument + -> validate + -> compileStoreWorkflow() + -> workflow.generated.json +``` + +PR1 的 Core 操作范围: + +- 创建和解析 `WorkflowDocument`,规范化并计算基础 checksum。 +- 解析内置模板并实例化完整 `StoreNodeItemType`。 +- 添加节点,并通过 `connectFrom` 原子地连接普通 `next -> target` 执行边。 +- 设置 input 固定值、设置 VariableRef、查询节点和模板。 +- 编译和反编译普通 StoreEdge,完成 StoreWorkflow 语义往返。 +- 执行最小 Schema、节点、图、引用和 Start 可达性校验。 +- 返回结构化 changes、warnings、diagnostics 和稳定退出码。 + +后续能力按增量 PR 进入同一 Core,不创建第二套编辑引擎: + +| 阶段 | Core 新增操作 | +| --- | --- | +| PR2 | node update/remove/clone、edge connect/disconnect/reconnect、input unset、App 元数据、ChatConfig、全局变量、完整线性图 Validator | +| PR3 | branch/sourceOutput/catch/tool edge、insert、动态 input/output、嵌套和循环、系统子节点、Web action 逐步迁移 | +| PR4 | ChangeSet plan/apply、canonical checksum、Confirm、并发写入保护、CI 契约 | +| PR5 | Workflow 编辑器 ChatBox、独立 Builder Handler、App Sandbox、内置 Skill、CLI 调用、ChangeSet 预览/应用 | +| PR6 | 远端模板 Provider、StoreWorkflow pull/decompile、版本查询 | +| PR7 | draft save、publish、run/debug 前校验和远端版本冲突处理 | + +PR1 的验收结果必须是:仅通过 CLI 即可创建 Start -> AI Chat 或 Start -> Text Editor -> Assigned Answer 基础工作流,生成可被当前 FastGPT 识别的 StoreWorkflow;命令失败不写盘,Store -> Document -> Store 语义等价。 + +## 6. 核心对象模型 + +### 6.1 WorkflowDocument + +`WorkflowDocument` 是 CLI 和共享核心使用的唯一规范状态。 + +```ts +type WorkflowDocument = { + schemaVersion: 'fastgpt-workflow/v1'; + app: { + appId?: string; + name?: string; + intro?: string; + appType?: string; + baseVersionId?: string; + }; + nodes: StoreNodeItemType[]; + executionEdges: WorkflowExecutionEdge[]; + chatConfig: AppChatConfigType; +}; +``` + +约束: + +- `nodes` 使用 FastGPT 完整存储节点,不发明精简节点格式。 +- `executionEdges` 使用语义执行端口,不在用户格式中暴露 ReactFlow handle。 +- 变量引用保留在节点 input value 中,不进入 `executionEdges`。 +- `app` 只保存本地绑定与并发基线,不替代 FastGPT App 数据。 +- 编译器将该文档转换为现有 `{ nodes, edges, chatConfig }`。 + +### 6.2 StoreWorkflow + +`StoreWorkflow` 是现有 FastGPT 保存、发布、运行链路所需的编译结果: + +```ts +type StoreWorkflow = { + nodes: StoreNodeItemType[]; + edges: StoreEdgeItemType[]; + chatConfig: AppChatConfigType; +}; +``` + +它不是主要手工编辑格式。`fastgpt-workflow build` 负责生成它,`fastgpt-workflow import` 负责把现有 StoreWorkflow 反编译为 `WorkflowDocument`。 + +### 6.3 NodeTemplateRef + +模板来源必须显式区分: + +```ts +type NodeTemplateRef = + | { kind: 'builtin'; templateId: string } + | { kind: 'teamApp'; appId: string; versionId?: string } + | { kind: 'systemTool'; toolId: string; versionId?: string } + | { kind: 'tool'; toolId: string; parentId?: string; versionId?: string }; +``` + +模板实例化必须输出完整 `StoreNodeItemType`,并执行与 Web 一致的默认输入引用、节点名、本地化文案、父节点和系统子节点处理。 + +#### 6.3.1 模板输入初始值优先级 + +节点输入初始值必须由统一解析器决定,禁止各模板、CLI handler 或 Agent 自行猜测。值来源优先级固定为: + +1. 用户显式提供的值。 +2. PR6 远端 Template Provider 在当前 profile 下完成鉴权、存在性和读取权限验证后返回的值。 +3. 原始模板中与部署环境、团队和用户无关的安全默认值。 +4. 与 `valueType` 匹配的安全空值。 + +规则: + +- 用户显式提供 `[]`、`''`、`false` 或 `0` 也视为明确输入,不得使用空值合并运算覆盖。 +- PR6 前不存在可信远端值,第二优先级必须跳过;本地 CLI 不得把示例值、名称或自然语言推断结果当成资源 ID。 +- `dataset/model/app/tool/secret` 等资源型输入必须由 Automation Metadata 声明;未验证资源不得从模板默认值写入节点。 +- 资源输入的安全空值分别为:`selectDataset -> []`,其他单值资源和 secret 保持 `undefined`,工具资源不创建工具边。 +- Secret 永远使用 `userRequired`,即使到 PR6 也不得通过 Template Provider 返回或写入默认值。 +- HTTP URL 等用户环境参数不是远端资源 ID,但没有真实输入时同样保持为空,不得写入 `example.com` 等演示地址。 +- Start 默认引用属于确定性图推导,不参与上述四级值来源竞争;只在输入仍为空、目标允许 reference 且源输出类型兼容时补充,且不得覆盖模板值或用户值。 +- `defaultValue`、模板 `input.value` 和已验证远端值只作为实例化输入;来源元数据不得进入 WorkflowDocument、StoreWorkflow 或数据库。 + +该优先级解决“创建节点时写入什么”,不证明远端资源在运行时持续可用。PR6 负责读取时验证,PR7 的 debug/run/publish 和服务端仍必须重新验证资源存在性与权限。 + +### 6.4 NodeTemplateDescriptor + +现有 FastGPT 模板已经包含 `key`、`label`、`description`、`toolDescription`、`valueType`、`required`、`defaultValue`、`renderTypeList`、`list`、`min/max` 等参数信息。CLI 不复制这些字段,而是将它们归一化为稳定的机器可读契约: + +```ts +type NodeTemplateDescriptor = { + template: NodeTemplateRef; + name: string; + intro?: string; + flowNodeType: string; + inputs: NodeParameterDescriptor[]; + outputs: NodeOutputDescriptor[]; + constraints: { + unique: boolean; + isTool: boolean; + allowedParents?: string[]; + }; +}; + +type NodeOutputDescriptor = { + id: string; + key: string; + label: string; + description?: string; + valueType?: string; + required: boolean; + executable: boolean; +}; + +type NodeParameterDescriptor = { + key: string; + label: string; + description: string; + valueType?: string; + required: boolean; + defaultValue?: unknown; + defaultPolicy: 'template' | 'userRequired' | 'remoteValidated'; + resourceKind?: 'dataset' | 'model' | 'app' | 'tool' | 'secret'; + bindingRequired: boolean; + configurable: boolean; + inputModes: Array<'literal' | 'reference' | 'secret'>; + enum?: Array<{ + label?: string; + value: string; + description?: string; + }>; + constraints?: { + min?: number; + max?: number; + minLength?: number; + maxLength?: number; + valueSchema?: Record; + }; + examples?: unknown[]; +}; +``` + +归一化规则: + +- `description` 优先使用 `toolDescription`,其次使用 `description`,最后回退到 `label`。 +- `inputModes` 由 `renderTypeList` 转换,不要求 Agent 理解 Web 组件枚举。 +- `required/defaultValue/enum/min/max` 直接来自现有模板结构字段。 +- hidden 不直接等于不可配置;是否由系统维护通过 Automation Metadata 显式声明。 +- `description` 只解释含义,类型、范围和复杂结构必须使用结构化字段表达。 +- i18n 文案按照 `--locale` 解析后输出,不把翻译 key 交给 Agent。 +- secret 参数只输出约束和说明,不输出当前值或默认密钥。 + +现有模板缺少的复杂参数信息使用独立补充层: + +```ts +type NodeTemplateAutomationMeta = { + inputs?: Record< + string, + { + configurable?: boolean; + agentHint?: string; + valueSchema?: Record; + examples?: unknown[]; + defaultPolicy?: 'template' | 'userRequired' | 'remoteValidated'; + resourceKind?: 'dataset' | 'model' | 'app' | 'tool' | 'secret'; + bindingRequired?: boolean; + } + >; +}; +``` + +隔离要求: + +- 不向 `FlowNodeInputItemTypeSchema` 添加 CLI/Agent 专用字段。 +- 不为了 Agent 批量修改现有模板的 `label`、`description`、`required`、`valueType`、`renderTypeList` 和默认值。 +- Automation Metadata 只参与 `normalizeNodeTemplateDescriptor()`,不得被 `nodeTemplate2FlowNode()` 展开到节点实例。 +- Automation Metadata 不进入 WorkflowDocument、`workflow.json`、StoreWorkflow 和数据库。 +- Web 可继续使用原始 `FlowNodeTemplateType`;Descriptor 层不改变 Web 渲染和保存结果。 +- 未声明 `defaultPolicy` 的历史 Automation Metadata 按 `template` 解释;资源型输入必须显式声明,避免通过 valueType 为 `string` 的模型、应用等字段漏检。 +- `defaultPolicy` 只描述初始值来源,不承担必填语义;当原始模板的 `required` 不能表达运行前必须配置时,使用 `bindingRequired` 显式补充。 + +### 6.5 ExecutionPortRef + +执行端口只描述控制流: + +```ts +type ExecutionSourcePortRef = + | { kind: 'next'; nodeId: string } + | { kind: 'branch'; nodeId: string; branchKey: string } + | { kind: 'sourceOutput'; nodeId: string; outputKey: string } + | { kind: 'catch'; nodeId: string } + | { kind: 'selectedTools'; nodeId: string }; + +type ExecutionTargetPortRef = + | { kind: 'target'; nodeId: string } + | { kind: 'selectedTools'; nodeId: string }; + +type WorkflowExecutionEdge = { + source: ExecutionSourcePortRef; + target: ExecutionTargetPortRef; +}; +``` + +CLI 文本格式: + +| 语义 | 文本格式 | 编译结果 | +| --- | --- | --- | +| 普通后继 | `start@next` | `${startId}-source-right` | +| 普通目标 | `ai@target` | `${aiId}-target-left` | +| 分支 | `if1@branch:else` | `getHandleId(if1, 'source', 'else')` | +| source 输出 | `node@output:success` | `getHandleId(node, 'source', 'success')` | +| 异常 | `node@catch` | `getHandleId(node, 'source_catch', 'right')` | +| 工具 | `agent@tools -> tool@tools` | 两端 handle 均为 `selectedTools` | + +规则: + +- `sourceOutput` 只允许引用 `output.type === source` 的输出。 +- 普通输出变量不能用 `edge connect`。 +- 普通执行边不能连接工具目标,工具边也不能连接普通目标。 +- 自连接、重复边和不存在的节点/端口必须被拒绝。 + +### 6.6 VariableRef + +变量引用描述数据流: + +```ts +type VariableRef = { + nodeId: string; + outputKey: string; +}; +``` + +CLI 文本格式为 `nodeId.outputKey`。例如: + +```bash +fastgpt-workflow input ref --node ai --key text --from start.userChatInput +``` + +该命令修改 `WorkflowDocument` 中 `ai` 节点的 input value,保存为语义引用 +`[startNodeId, userChatInput]`,不会创建执行边。`WorkflowDocument` 和 `workflow.json` 始终使用稳定的 +`output.key`;编译 StoreWorkflow 时必须把结构化引用和 `{{$nodeId.outputKey$}}` 文本引用转换为 +FastGPT Web/Runtime 使用的 `output.id`,反编译时再转换回 `output.key`。全局变量引用 +`[VARIABLE_NODE_ID, variableKey]` 不参与转换,执行边的 source output 也继续使用 `output.key`。 + +### 6.7 WorkflowCommand 与 WorkflowChangeSet + +```ts +type WorkflowChangeSet = { + schemaVersion: 'fastgpt-workflow-changeset/v1'; + baseChecksum: string; + commands: WorkflowCommand[]; +}; + +type WorkflowCommand = + | UpdateAppMetaCommand + | AddNodeCommand + | UpdateNodeCommand + | RemoveNodeCommand + | MoveNodeCommand + | CloneNodeCommand + | ConnectExecutionEdgeCommand + | DisconnectExecutionEdgeCommand + | ReconnectExecutionEdgeCommand + | InsertNodeCommand + | SetInputValueCommand + | SetInputReferenceCommand + | UnsetInputCommand + | AttachToolCommand + | DetachToolCommand + | AddGlobalVariableCommand + | UpdateGlobalVariableCommand + | RemoveGlobalVariableCommand + | UpdateChatConfigCommand; +``` + +所有命令由同一个 dispatcher 执行,并返回: + +```ts +type WorkflowCommandResult = { + document: WorkflowDocument; + changes: WorkflowChangeSummary[]; + warnings: WorkflowDiagnostic[]; + checksum: string; +}; +``` + +### 6.8 本地工作流文件 + +初期使用单文件 `workflow.json` 直接保存 `WorkflowDocument`: + +```text +workflow.json + <-> parse / serialize +WorkflowDocument + -> build +StoreWorkflow JSON +``` + +本地文件规则: + +- `workflow.json` 是本地唯一 source of truth,不额外保存第二份 Document 状态。 +- 写入前执行对应校验;存在阻断错误时不得覆盖原文件。 +- JSON 使用稳定字段顺序、固定缩进和末尾换行,便于 Git diff 和 checksum。 +- 写入临时文件并在同一文件系统内原子 rename,失败时保留原文件。 +- `workflow.generated.json` 是可选 build 输出,不是手工维护的 source of truth。 + +文件格式不负责决定节点、端口、嵌套或发布是否合法,也不保存可被手工修改绕过的“已确认”状态,上述约束全部由代码执行。 + +分片 Manifest 是后期可选 IO Codec,不进入初期命令面。若实验数据证明单文件在大型工作流 Git diff、并发冲突或 Agent 上下文方面存在实际瓶颈,可在不改变 `WorkflowDocument` 的前提下增加: + +```text +WorkflowDocument <-> Optional Manifest Codec <-> workflow.manifest/ +``` + +## 7. 详细功能需求 + +| 需求编号 | 功能域 | 目标 | +| --- | --- | --- | +| FR-01 | 文档、配置与本地文件 | 创建、导入、配置、单文件持久化和编译工作流 | +| FR-02 | 节点模板 | 查询并解析完整节点模板 | +| FR-03 | 节点操作 | 新增、修改、克隆、移动、删除和插入节点 | +| FR-04 | 执行边 | 管理普通、分支、异常和输出执行边 | +| FR-05 | 工具连接 | 管理 toolCall 与工具节点之间的专用边 | +| FR-06 | 输入、输出和变量引用 | 管理固定值、数据引用和动态 IO | +| FR-07 | 嵌套容器 | 管理 loop、loopRun、batch、parallel 父子结构 | +| FR-08 | 校验和诊断 | 提供 schema、graph、reference、runtime、publish 校验 | +| FR-09 | ChangeSet 与 Confirm | 提供可审查、可确认、原子应用的批量修改 | +| FR-10 | FastGPT 服务端生命周期 | pull、save、publish、versions、debug 和 run | +| FR-11 | Workflow 辅助生成 | 通过 Chat + Agent Loop + Sandbox + Skill + CLI 生成并应用可审查 ChangeSet | + +### 7.0 CLI 公共契约 + +CLI 公共契约一次性定义 PR1 到 PR7 的最终命令面。PR5 不新增 CLI 命令,只在产品层调用 PR4 稳定的 ChangeSet 契约。后续 PR 只按阶段开放命令,不改变已经发布的命令语法;未实现命令不得出现在正式帮助文本中,也不得返回伪成功结果。 + +#### 7.0.1 命令语法 + +统一语法: + +```text +fastgpt-workflow [global options] [command options] +``` + +规则: + +- 正式 bin 只有 `fastgpt-workflow`,不提供 `workflow` 等别名。 +- 资源 ID 和引用统一使用显式选项,例如 `--node ai`、`--template builtin:ai-chat`、`--app APP_ID`,不混用位置参数。 +- 查询动作统一使用 `list/show/inspect/validate/diff`;创建和修改使用 `add/set/update/remove`;不提供语义模糊的 `edit`、`sync` 或通用 `exec`。 +- 创建命令遇到重复 ID 必须失败,更新命令遇到不存在 ID 必须失败;不提供隐式 upsert。 +- `--help` 和 `--version` 属于所有阶段的基础能力,帮助文本只展示当前版本已开放的命令。 + +#### 7.0.2 公共选项 + +| 选项 | 适用范围 | 默认值 | 语义 | +| --- | --- | --- | --- | +| `--dir ` | 本地工作流命令 | 当前目录 | 包含 `workflow.json` 的工作目录 | +| `--format text\|json` | 所有命令 | `text` | stdout 的展示格式 | +| `--locale ` | 需要人类文案的命令 | 系统 locale | Descriptor 和 text renderer 的语言 | +| `--no-color` | text 输出 | 非 TTY 自动关闭 | 禁止 ANSI 颜色 | +| `--quiet` | 所有命令 | `false` | 隐藏非必要进度信息,不隐藏结果或错误 | +| `--dry-run` | mutation 命令 | `false` | 完整计算但不执行本地或远端写入 | +| `--profile ` | 远端命令 | 无 | 选择 FastGPT 服务配置 | +| `--output ` | 产生文件的命令 | 命令定义 | 产物文件路径,不用于控制终端格式 | +| `--confirm ` | 受门禁保护的命令 | 无 | 确认目标 checksum | + +`--format` 与 `--output` 必须严格分离:前者控制 stdout,后者指定文件产物。JSON 模式推荐同时使用 `--no-color`,但 JSON 输出无论是否传该参数都不得包含 ANSI 字符。 + +配置优先级固定为:命令行参数 > 环境变量 > profile > 内置默认值。CLI 不根据 TTY 自动切换 `--format`,Agent 和脚本必须显式使用 `--format json`。 + +#### 7.0.3 值、引用和资源语法 + +输入值参数互斥: + +| 参数 | 用途 | +| --- | --- | +| `--value ` | string、number、boolean 等标量,由 Descriptor 决定解析类型 | +| `--value-json ` | object、array、custom 等结构化值 | +| `--value-file ` | 从 UTF-8 文件读取;`-` 表示 stdin | +| `--value-env ` | 从环境变量读取 secret,避免进入 shell history | +| `--from ` | 设置 VariableRef,仅用于 `input ref` | + +引用格式: + +```text +模板引用:builtin:ai-chat | teamApp:APP_ID | systemTool:TOOL_ID | plugin:PLUGIN_ID +执行端口:start@next | route@branch:yes | request@catch | caller@tools +变量引用:start.userChatInput | search.datasetQuote +坐标:600,200 +边引用:--from start@next --to ai@target +``` + +CLI 不猜测字符串是否为 JSON、文件或变量引用,也不允许通过普通 `--value` 写入 secret。 + +#### 7.0.4 完整命令目录 + +| 领域 | 最终命令 | 类型 | 首次开放 | +| --- | --- | --- | --- | +| 基础 | `--help`、`--version` | 查询 | PR1 | +| 文档 | `init`、`build` | 本地 mutation / 产物 | PR1 | +| 文档 | `import`、`inspect` | 本地 mutation / 查询 | PR2 | +| 文档 | `diff` | 查询 | PR4 | +| 元数据 | `meta show`、`meta set` | 查询 / 本地 mutation | PR2 | +| ChatConfig | `config list`、`config get`、`config set`、`config unset` | 查询 / 本地 mutation | PR2 | +| 全局变量 | `variable list`、`variable add`、`variable update`、`variable remove` | 查询 / 本地 mutation | PR2 | +| 模板 | `template list`、`template show` | 查询 | PR1;远端来源 PR6 | +| 节点 | `node list`、`node show`、`node add` | 查询 / 本地 mutation | PR1 | +| 节点 | `node update`、`node remove`、`node clone`、`node move` | 本地 mutation | PR2 | +| 节点 | `node insert` | 本地 mutation | PR3 | +| 执行边 | `edge list`、`edge connect`、`edge disconnect`、`edge reconnect` | 查询 / 本地 mutation | PR2;复杂端口 PR3 | +| 输入 | `input show`、`input set`、`input ref`、`input unset`、`input available` | 查询 / 本地 mutation | set/ref PR1;其余 PR2 | +| 动态输出 | `output list`、`output add`、`output remove` | 查询 / 本地 mutation | PR3 | +| 工具连接 | `tool list`、`tool attach`、`tool detach` | 查询 / 本地 mutation | PR3 | +| 嵌套 | `container children`、`node move --parent/--root` | 查询 / 本地 mutation | PR3 | +| 校验 | `validate` | 查询 | PR1;完整层级 PR3/PR7 | +| ChangeSet | `changeset plan`、`changeset apply` | 产物 / 本地 mutation + Confirm | PR4 | +| Profile | `profile list`、`profile show`、`profile add`、`profile update`、`profile remove`、`profile test` | 本地配置 | PR6 | +| 远端只读 | `remote pull`、`remote diff`、`remote versions` | 远端查询 / 本地 mutation | PR6 | +| 远端写入 | `remote meta push`、`remote save`、`remote publish` | 远端 mutation | PR7 | +| 调试运行 | `debug start`、`run` | 远端执行 | PR7 | + +`input available` 是查询指定节点输入可引用变量的唯一命令,不再提供重复的 `available-vars` 别名。 + +#### 7.0.5 命令参数契约 + +文档与配置: + +| 命令 | 必填参数 | 可选参数与关键约束 | +| --- | --- | --- | +| `init` | 无 | `--dir`、`--name`;默认创建系统配置节点和 WorkflowStart;目标目录已有 `workflow.json` 时失败 | +| `import` | `--input ` | `--dir`;缺少系统配置节点时补齐但不覆盖 `chatConfig`;导入未知 handle 或不支持 schema 时阻断 | +| `inspect` | 无 | `--dir`;只输出节点、边、引用、配置和诊断摘要 | +| `diff` | `--input ` | `--dir`;输出语义差异,不比较 JSON 排序和展示坐标微调 | +| `build` | `--output ` | `--dir`;先执行 schema/document/graph/reference 校验 | +| `meta show` | 无 | `--dir` | +| `meta set` | 至少一个 `--name/--intro` | `--dir`、`--dry-run`;只修改本地绑定元数据 | +| `config list` | 无 | `--dir` | +| `config get` | `--path ` | `--dir` | +| `config set` | `--path` 与一个 value 参数 | `--dir`、`--dry-run`;path 必须在 ChatConfig allowlist | +| `config unset` | `--path ` | `--dir`、`--dry-run` | +| `variable list` | 无 | `--dir` | +| `variable add` | `--key`、`--value-type` | `--type`、`--description`、`--required`、类型配置、value 参数、`--dry-run` | +| `variable update` | `--key` 与至少一个更新字段 | `--type`、`--value-type`、类型配置;不允许修改为重复 key | +| `variable remove` | `--key` | `--dry-run`;仍被引用时阻断并返回引用位置 | + +模板、节点与图: + +| 命令 | 必填参数 | 可选参数与关键约束 | +| --- | --- | --- | +| `template list` | 无 | `--source builtin\|team\|system\|plugin`、远端来源要求 `--profile` | +| `template show` | `--template ` | `--version`、`--locale`、远端模板要求 `--profile` | +| `node list` | 无 | `--dir`、`--type`、`--parent` | +| `node show` | `--node ` | `--dir`;输出节点、Descriptor、执行端口和引用摘要 | +| `node add` | `--template`、`--node` | `--name`、`--position`、`--after`;`--parent` 从 PR3 开放 | +| `node update` | `--node` 与至少一个更新字段 | `--name`、`--position`、`--dry-run`;参数值修改应走 input 命令 | +| `node remove` | `--node` | `--dry-run`;执行边、引用和子节点副作用必须进入变更摘要 | +| `node clone` | `--node`、`--id` | `--offset`、`--position`、`--dry-run`;不复制不可复用 secret | +| `node move` | `--node` | `--position` 可与 `--parent` 或 `--root` 组合;`--parent` 与 `--root` 互斥 | +| `node insert` | `--from`、`--to`、`--template`、`--id` | `--position`、`--dry-run`;删除旧边并创建两条新边必须原子完成 | +| `edge list` | 无 | `--dir`、`--node`、`--kind` | +| `edge connect` | `--from `、`--to ` | `--dry-run`;重复边失败 | +| `edge disconnect` | `--from`、`--to` | `--dry-run`;不存在边失败 | +| `edge reconnect` | `--from`、`--old-to`、`--to` | `--dry-run`;断开和重连必须原子完成 | +| `input show` | `--node`、`--key` | `--dir`;secret 只显示是否已配置 | +| `input set` | `--node`、`--key` 与一个 value 参数 | `--dry-run`;value 参数互斥并按 Descriptor 校验 | +| `input ref` | `--node`、`--key`、`--from ` | `--dry-run`;校验上游可达性、作用域和类型 | +| `input unset` | `--node`、`--key` | `--dry-run`;required 或系统维护参数不可清除 | +| `input available` | `--node`、`--key` | `--dir`;只返回该输入可合法引用的变量 | +| `output list` | `--node` | `--dir` | +| `output add` | `--node`、`--key`、`--value-type` | `--label`、`--description`、`--dry-run`;仅动态 IO 节点可用 | +| `output remove` | `--node`、`--key` | `--dry-run`;同步清理关联执行边并报告变量引用 | +| `tool list` | `--tool-call ` | `--dir` | +| `tool attach` | `--tool-call` 与 `--template` 或 `--tool-node` | 两种工具来源互斥;创建节点和工具边必须原子完成 | +| `tool detach` | `--tool-call`、`--tool-node` | `--dry-run`;默认只断开,不删除已存在工具节点 | +| `container children` | `--node ` | `--dir`;返回系统子节点和普通子节点 | +| `validate` | 无 | `--level schema\|document\|graph\|reference\|runtime\|publish`;远端层级要求 `--profile` | + +自动化与远端: + +| 命令 | 必填参数 | 可选参数与关键约束 | +| --- | --- | --- | +| `changeset plan` | `--file `、`--output ` | `--dir`;输出 base/target checksum、changes 和 diagnostics | +| `changeset apply` | `--plan ` | `--dir`、`--dry-run`、`--confirm`;非 TTY 写入必须提供 target checksum | +| `profile list` | 无 | 只显示名称、base URL 和 credential 来源,不显示密钥 | +| `profile show` | `--name` | secret 只显示来源和配置状态 | +| `profile add` | `--name`、`--base-url` 与 credential 来源 | credential 使用 `--api-key-env`,不接受明文 `--api-key` | +| `profile update` | `--name` 与至少一个更新字段 | 不把解析后的密钥写入配置文件 | +| `profile remove` | `--name` | profile 被当前命令使用时失败 | +| `profile test` | `--name` | 只测试连通性和身份,不读取完整工作流 | +| `remote pull` | `--app`、`--profile` | `--dir`、`--dry-run`;非空本地目录存在未同步变更时拒绝覆盖 | +| `remote diff` | `--app`、`--profile` | `--dir`;比较本地 Document 与远端版本,不写入两端 | +| `remote versions` | `--app`、`--profile` | `--limit`、`--cursor` | +| `remote meta push` | `--app`、`--profile`、`--confirm` | `--dir`、`--dry-run`;只同步允许的应用资料字段 | +| `remote save` | `--app`、`--profile`、`--draft` | `--dir`、`--dry-run`;携带 baseVersionId,允许 graph warning | +| `remote publish` | `--app`、`--profile`、`--confirm` | `--dir`、`--version-name`、`--dry-run`;publish error 必须阻断 | +| `debug start` | `--app`、`--entry`、`--profile` | `--input/--input-json/--input-file`;输出 JSON step 事件 | +| `run` | `--app`、`--profile` 与一个 input 参数 | `--input/--input-json/--input-file` 互斥;执行完整运行校验 | + +#### 7.0.6 查询、写入和 Confirm + +- query 命令不得修改 Document、`workflow.json`、profile 或远端 App。 +- 本地 mutation 默认写入,统一支持 `--dry-run`,并以单条命令为原子事务。 +- 远端 mutation 统一支持 `--dry-run`;dry-run 不得调用任何写接口。 +- `changeset apply`、`remote meta push` 和 `remote publish` 受 checksum Confirm 保护。 +- `remote save --draft` 不要求 Confirm,但必须携带 `baseVersionId` 并显示 graph warnings。 +- 非 TTY 环境不允许等待输入;需要确认时必须显式传 `--confirm`。 +- 不提供通用 `--force`、`--yes` 或跳过权限/校验的参数。 + +所有 mutation 必须转换为 WorkflowCommand 或明确的 CLI/remote mutation service,不允许 command handler 直接修改数组、JSON 或数据库。远端操作在客户端校验后,服务端仍重新执行权限和数据校验。 + +### 7.1 FR-01:文档、配置与本地文件 + +```bash +fastgpt-workflow init --dir ./flow --name "客服助手" +fastgpt-workflow import --input workflow.json --dir ./flow +fastgpt-workflow inspect --dir ./flow +fastgpt-workflow meta set --dir ./flow --name "客服助手" --intro "处理售后咨询" +fastgpt-workflow config set --dir ./flow --path welcomeText --value "你好" +fastgpt-workflow variable add --dir ./flow --key customerId --value-type string --required +fastgpt-workflow variable add --dir ./flow --key quizResults --type internal --value-type arrayObject --value-json '[]' +fastgpt-workflow variable add --dir ./flow --key theme --type select --value-type string --options-json '[{"label":"数学","value":"math"}]' +fastgpt-workflow variable update --dir ./flow --key customerId --description "客户编号" +fastgpt-workflow variable remove --dir ./flow --key customerId +fastgpt-workflow build --dir ./flow --output workflow.generated.json +``` + +`import -> build` 必须保证语义等价,不要求 JSON 字段顺序完全一致。 + +`config set` 只能修改 AppChatConfig schema 中列入 allowlist 的路径,不能实现成任意 JSON Pointer。全局变量命令维护 `chatConfig.variables`,并执行 key 唯一、valueType、required/defaultValue 等现有 schema 约束。 + +全局变量使用两个正交维度,不增加第三个 `source` 参数: + +- `--type` 表示交互或作用域类型,取值与 `VariableInputEnum` 一致;CLI 额外接受 `external` 友好别名,落盘统一保存为现有 `custom`。 +- `--value-type` 表示数据结构,如 `string`、`number`、`object`、`arrayObject`。普通输入变量的两个参数可能看起来相同或相关,但语义不能合并。 +- 显式 `--type` 优先;省略时保留历史自动推断。更新 `--value-type` 时,只有旧变量仍是自动推断类型才重新推断,显式的 `internal/custom` 等类型必须保留。 +- `custom`、`internal` 和 `switch` 固定为非必填;CLI 不接受它们与 `--required` 的冲突组合。 +- 类型专属配置使用 `--config-json` 或 `--config-file`,两者互斥;`--options-json`、`--min`、`--max`、`--max-length`、`--time-granularity` 是高频快捷参数,并覆盖 JSON 配置中的同名字段。类型配置不得覆盖 `key/type/valueType/required/defaultValue` 等核心字段。 + +`meta set` 只更新本地 App 绑定信息;`build` 只输出 StoreWorkflow,不把 name/intro 混入工作流 payload。远端同步元数据必须使用独立命令,避免一次 publish 意外覆盖应用资料。 + +### 7.2 FR-02:节点模板 + +```bash +fastgpt-workflow template list --source builtin +fastgpt-workflow template list --source team --profile prod +fastgpt-workflow template show --template builtin:ai-chat --locale zh-CN --format json +fastgpt-workflow template show --template teamApp:APP_ID --version VERSION_ID --format json +``` + +`template show` 必须输出 `NodeTemplateDescriptor`,包括输入、输出、动态字段、允许的执行端口、是否唯一节点、是否工具节点和嵌套限制。 + +实现要求: + +- 普通参数从现有 FlowNodeTemplate inputs/outputs 归一化,不在 CLI 中维护第二份说明。 +- 内置模板可以离线生成 Descriptor。 +- 团队应用、插件和工具先通过 Template Provider 获取完整 preview,再生成 Descriptor。 +- custom/object/array 参数必须提供 `valueSchema` 或返回 `WORKFLOW_TEMPLATE_PARAMETER_SCHEMA_MISSING` warning,禁止让 Agent猜测结构。 +- `configurable: false` 的参数不得通过 `input set/ref/unset` 修改。 +- Descriptor 中不得包含 input 当前 secret、credential、Authorization 或其他敏感值。 +- 同一模板、版本和 locale 的 JSON 输出必须确定性稳定。 + +示例输出: + +```json +{ + "template": { + "kind": "builtin", + "templateId": "ai-chat" + }, + "inputs": [ + { + "key": "systemPrompt", + "label": "系统提示词", + "description": "定义 AI 的角色、回答规则和限制", + "valueType": "string", + "required": false, + "configurable": true, + "inputModes": ["literal", "reference"], + "constraints": { + "maxLength": 100000 + }, + "examples": ["你是一个售后客服助手"] + } + ] +} +``` + +### 7.3 FR-03:节点操作 + +```bash +fastgpt-workflow node add --template builtin:ai-chat --node ai --position 600,200 +fastgpt-workflow node add --template builtin:ai-chat --node ai --after start@next +fastgpt-workflow node add --template builtin:if-else --node route --after start@next +fastgpt-workflow node update --node ai --name "回答用户" +fastgpt-workflow node clone --node ai --id ai_copy --offset 320,0 +fastgpt-workflow node move --node child --position 900,300 +fastgpt-workflow node move --node child --parent loop1 --position 120,180 +fastgpt-workflow node move --node child --root +fastgpt-workflow node remove --node ai +``` + +`node add --after start` 的领域含义不是两个松散动作,而是一个原子命令: + +1. 解析模板。 +2. 创建完整节点。 +3. 补齐默认输入引用。 +4. 校验父节点和嵌套限制。 +5. 添加 `start@next -> newNode@target` 执行边。 +6. 任一步失败则整个命令不落盘。 + +### 7.4 FR-04:执行边 + +```bash +fastgpt-workflow edge connect --from start@next --to ai@target +fastgpt-workflow edge connect --from route@branch:yes --to success@target +fastgpt-workflow edge connect --from request@catch --to fallback@target +fastgpt-workflow edge reconnect --from start@next --old-to ai@target --to route@target +fastgpt-workflow edge disconnect --from start@next --to ai@target +fastgpt-workflow node insert --from start@next --to ai@target --template builtin:if-else --id route +``` + +`node insert` 必须原子完成:删除旧边、创建节点、建立前后两条边。失败时恢复原图。 + +### 7.5 FR-05:工具连接 + +```bash +fastgpt-workflow tool attach --tool-call caller1 --template systemTool:webSearch +fastgpt-workflow tool attach --tool-call caller1 --tool-node search1 +fastgpt-workflow tool detach --tool-call caller1 --tool-node search1 +fastgpt-workflow tool list --tool-call caller1 +``` + +工具命令内部维护 `toolCall@tools -> toolNode@tools` 专用边,用户不接触内部 handle。Agent V2 的技能选择若存储在 `selectedTools` input 中,应走 input/专用 Agent Skill 命令,不能伪装成执行边。 + +### 7.6 FR-06:输入、变量引用和动态 IO + +```bash +fastgpt-workflow input set --node ai --key systemPrompt --value "你是客服助手" +fastgpt-workflow input set --node code --key timeout --value-json 30 +fastgpt-workflow input ref --node ai --key text --from start.userChatInput +fastgpt-workflow input unset --node ai --key text +fastgpt-workflow input available --node ai +fastgpt-workflow output add --node code --key score --value-type number +fastgpt-workflow output remove --node code --key score +``` + +规则: + +- `input available` 复用 FastGPT 的上游可用变量语义,不能仅列出所有节点输出。 +- `input set/ref/unset` 根据当前节点的 `NodeParameterDescriptor` 校验参数,不只检查 key 是否存在。 +- `input set --value` 只接受与 `valueType` 兼容的标量;对象、数组和复杂配置使用 `--json`。 +- `input ref` 只允许 Descriptor 声明 `reference` inputMode 的参数,并检查来源输出类型。 +- `configurable: false`、deprecated 和系统维护参数禁止修改。 +- custom/object 参数按照 `constraints.valueSchema` 校验;缺少 Schema 时不得静默接受 Agent 猜测的数据。 +- 引用必须来自当前节点可达的上游节点、系统变量或合法父级作用域。 +- 动态 input/output key 在同一节点内唯一。 +- 删除或替换 `source` 类型输出时,必须同步删除从该 output handle 发出的执行边。 +- 普通数据输出即使被引用,也不产生执行边。 + +### 7.7 FR-07:嵌套和容器 + +```bash +fastgpt-workflow container children --node loop1 +fastgpt-workflow node move --node worker --parent loop1 +fastgpt-workflow node move --node worker --root +``` + +共享核心必须覆盖前端现有规则: + +- workflowStart、loop/loopRun/parallel、插件输入输出、系统配置等节点不能被任意放进容器。 +- interactive 节点不能放入 parallel。 +- loopRunBreak 只能位于 loopRun。 +- 节点移入或移出父容器时按前端语义清理不满足新作用域约束的边。 +- 同时维护 child 的 `parentNodeId` 和 parent 的 `childrenNodeIdList`。 +- 新建 loopRun 等容器时自动创建系统子节点。 +- 删除容器时默认级联删除子节点和所有关联边。 + +### 7.8 FR-08:校验和诊断 + +```bash +fastgpt-workflow validate --dir ./flow +fastgpt-workflow validate --dir ./flow --level schema +fastgpt-workflow validate --dir ./flow --level graph +fastgpt-workflow validate --dir ./flow --level runtime --profile prod +fastgpt-workflow input available --node ai --key userChatInput --dir ./flow +``` + +诊断必须包含稳定 code、severity、nodeId/edge、path 和 message。例如: + +```json +{ + "code": "WORKFLOW_EDGE_SOURCE_OUTPUT_NOT_EXECUTABLE", + "severity": "error", + "nodeId": "code1", + "path": "executionEdges[2].source", + "message": "Output score is a data output and cannot be used as an execution port" +} +``` + +校验层级: + +1. `schema`:文件结构、枚举、必填字段。 +2. `document`:节点 ID、模板实例、动态 key、父子一致性。 +3. `graph`:端口、重复边、连通性、起点可达、工具边和循环规则。 +4. `reference`:变量存在、类型与作用域。 +5. `runtime`:sandbox、模型、外部资源和运行环境能力。 +6. `publish`:调试工具、Agent Skill 权限、远端资源权限。 + +校验层级只回答“工作流结构是否合法”,资源绑定和可执行性是独立职责,不通过 `draft/strict` 模式改变同一条诊断的阻断级别: + +- `validateWorkflow(document)` 只检查 schema/document/graph/reference 等本地可确定规则,且保持单一签名。 +- `collectWorkflowBindings(document)` 收集 `missing/unverified` 绑定;未绑定资源不是结构错误,以 `WORKFLOW_BINDING_REQUIRED` 或 `WORKFLOW_BINDING_UNVERIFIED` warning 返回。 +- 本地 `validate` 和 `build` 只被结构 error 阻断;`build` 保留资源字段空值并输出待绑定清单,不声称产物已可执行。 +- `defaultPolicy=userRequired|remoteValidated` 的外部绑定不使用通用 `WORKFLOW_REQUIRED_INPUT_MISSING` 报错;是否需要绑定由模板 `required` 或 Metadata `bindingRequired` 决定。 +- PR6 Resolver 负责当前 profile 下的存在性和读取权限验证;PR7 的 debug/run/publish 通过 `assertWorkflowExecutable()` 重新解析并阻断未绑定、已删除或无权限资源。 + +绑定诊断必须至少包含 `nodeId`、`inputKey`、`defaultPolicy` 和可用时的 `resourceKind`,且不得包含实际资源值或 Secret;禁止把 Mongoose `CastError` 等内部异常直接展示给用户。 + +### 7.9 FR-09:ChangeSet 与 Confirm + +```bash +fastgpt-workflow changeset plan --file changeset.json --dir ./flow --output plan.json +fastgpt-workflow changeset apply --plan plan.json --dir ./flow --dry-run +fastgpt-workflow changeset apply --plan plan.json --dir ./flow --confirm TARGET_CHECKSUM +``` + +门禁规则: + +- plan 记录 `baseChecksum`、命令列表、变更摘要、诊断和 `targetChecksum`。 +- 当前文档 checksum 与 `baseChecksum` 不一致时拒绝 apply。 +- 非交互环境 apply 高风险计划时必须传 `--confirm targetChecksum`。 +- plan 或目标文档发生任何变化后,旧 checksum 自动失效。 +- Confirm 是代码校验,不是在 `workflow.json` 中写一个 `confirmed: true`。 + +### 7.10 FR-10:FastGPT 服务端生命周期 + +```bash +fastgpt-workflow profile add --name prod --base-url https://fastgpt.example.com --api-key-env FASTGPT_API_KEY +fastgpt-workflow remote pull --app APP_ID --profile prod --dir ./flow +fastgpt-workflow remote meta push --app APP_ID --profile prod --dir ./flow --confirm CHECKSUM +fastgpt-workflow remote save --app APP_ID --profile prod --dir ./flow --draft +fastgpt-workflow remote publish --app APP_ID --profile prod --dir ./flow --version-name v1 --confirm CHECKSUM +fastgpt-workflow remote versions --app APP_ID --profile prod +fastgpt-workflow debug start --app APP_ID --entry NODE_ID --profile prod +fastgpt-workflow run --app APP_ID --input "你好" --profile prod +``` + +生命周期语义: + +- `remote pull`:要求能读取完整图;按当前权限行为应要求写权限。 +- PR6 远端 Template Provider 只可返回当前 profile 已鉴权、存在且可读的资源默认值;未授权、已删除或无法确认的值按未绑定处理。 +- `remote meta push`:只同步本地 name/intro 等允许字段,不修改 workflow graph。 +- `remote save --draft`:发送 `isPublish: false`、`autoSave: false`,创建一条可追踪版本;允许保存未完成草稿,但仍执行 schema 校验并输出 graph warning。Web 的后台 `autoSave: true` 语义不进入 CLI v1。 +- `remote publish`:阻断所有 publish error,并校验 debug tool 与资源权限。 +- `run`:执行完整运行前校验。 +- `debug`:保留 FastGPT 当前逐节点 runtimeNodes/runtimeEdges/variables 语义。 +- `pull/save/publish/debug` 在 API Key 契约完成前不得标记为正式可用。 + +### 7.11 FR-11:Workflow 辅助生成 + +- Workflow 编辑器提供独立聊天入口,复用普通 Chat 历史、模型选择、SSE、停止、计费和 Agent memories。 +- Workflow Builder 使用独立 Handler,不抽取或修改 Skill 辅助生成的 Handler;仅复用现有底层 Chat、Workflow Dispatch、Agent Loop 和 Sandbox 能力。 +- 每轮以前端当前 `WorkflowDocument + checksum` 为事实输入,历史由后端根据 `appId + chatId` 恢复,不建立独立修改记录模型。 +- Agent 只能通过内置 `workflow-builder` Skill 调用 `fastgpt-workflow` CLI;服务端必须对 ChangeSet 二次校验。 +- 前端只在 checksum 仍匹配时通过 Web Adapter/Core 应用已确认 ChangeSet;过期 plan 不得覆盖人工修改。 +- PR5 不支持节点选中上下文、自动保存/发布/调试或远端资源模板解析。 + +## 8. 共享规则与 UI 边界 + +### 8.1 必须进入共享核心 + +- 节点模板实例化和默认 input 引用。 +- NodeTemplateDescriptor 归一化、Automation Metadata 合并和参数校验。 +- 执行端口解析与 StoreEdge 编译。 +- VariableRef 设置和有效性检查。 +- 动态 input/output 唯一性和清边副作用。 +- add/remove/clone/insert/reconnect。 +- 父子节点、childrenNodeIdList 和嵌套约束。 +- 工具边、catch 边、分支边。 +- App 元数据、ChatConfig 和全局变量的 schema 化修改。 +- 节点配置、引用、图连通性和发布前静态校验。 +- WorkflowDocument、`workflow.json`、ChangeSet、checksum。 + +### 8.2 继续留在 Web + +- ReactFlow Node/Edge 与 Store/Document 的 UI adapter。 +- 鼠标拖拽、框选、快捷键、viewport、fitView。 +- toast、modal、错误节点高亮。 +- 节点尺寸、吸附、画布坐标交互。 +- 前端本地化显示和模板面板筛选 UI。 +- 原始 FlowNodeTemplate 的展示字段和 ReactFlow 节点持久化结构。 + +Web 调用共享核心后,负责把 `WorkflowCommandResult.document` 转回 ReactFlow 状态并展示 `warnings/diagnostics`。 + +Descriptor 接入不得改变同一模板创建出的 ReactFlow Node、StoreNode 和 StoreWorkflow。Web 是否未来展示 `examples/valueSchema` 属于独立需求,不是 CLI 参数发现能力的前置条件。 + +## 9. 写入、输出和自动化契约 + +### 9.1 本地写入 + +- 所有本地 mutation 命令默认写入。 +- 所有本地 mutation 命令统一支持 `--dry-run`。 +- `workflow.json` 使用同目录临时文件加原子 rename;失败不得留下半写入文件或覆盖原文件。 +- 不提供通用 `--write`,避免与默认写入语义冲突。 + +### 9.2 远端写入 + +- 命令名必须明确包含 `remote save` 或 `remote publish`。 +- publish 在 TTY 中展示摘要并确认;非 TTY 要求 checksum。 +- 远端更新携带 `baseVersionId`;版本变化返回冲突,不自动覆盖。 +- `--force` 不进入 v1,冲突应先 pull/diff/rebase。 + +### 9.3 结构化输出 + +所有命令支持 `--format text|json`。JSON 至少包含: + +```ts +type CliResult = { + schemaVersion: 'fastgpt-workflow-cli-result/v1'; + ok: boolean; + command: string; + changed: boolean; + checksum?: string; + result?: unknown; + changes?: WorkflowChangeSummary[]; + warnings?: WorkflowDiagnostic[]; + errors?: WorkflowDiagnostic[]; +}; +``` + +稳定退出码: + +| 退出码 | 含义 | +| --- | --- | +| 0 | 成功 | +| 2 | 参数或 schema 错误 | +| 3 | 领域命令冲突或非法操作 | +| 4 | 工作流校验失败 | +| 5 | 鉴权或权限失败 | +| 6 | 远端版本冲突 | +| 7 | 远端服务或网络错误 | + +## 10. 远端 API 前置改造 + +远端 CLI 不是简单调用现有接口即可完成,至少需要: + +1. 为详情、应用资料更新、模板 preview、发布、debug 等 CLI 所需接口明确开启并测试 `authApiKey`。 +2. 继续复用 `authApp`、写权限和资源权限,不新增旁路鉴权。 +3. 详情接口的 CLI 文档明确“拉取完整图需要写权限”。 +4. 发布 body 增加可选 `baseVersionId`,服务端在事务内比较当前版本。 +5. 冲突返回稳定 409 error code,CLI 映射为退出码 6。 +6. OpenAPI schema、路由文档和客户端类型同步更新。 +7. 所有 API 入参继续使用 `parseApiInput`。 + +在这些改造完成前,本设计只承诺本地 CLI。 + +## 11. 交付顺序 + +PR 是可审核、可回滚的增量开发单元,不等于发布单元。每个 PR 都必须保留此前行为并形成可独立演示的新增闭环;PR1 只作为内部技术 Demo,完成 PR4 后再发布本地 CLI Beta。 + +共享校验能力集中在 PR2 完成:一次性把 FastGPT Web 现有工作流规则抽取为 Web 与 CLI 共用的 Validator,并建立新旧结果等价测试。PR1 只保留保证最小 Demo 可生成、可导出的结构检查;PR3 以后只为新增图语义或远端场景补充规则,不再重复建设校验框架。 + +### PR1:最小可用 Demo CLI + +- 建立 `packages/workflow-core` 和 `packages/workflow-cli` 最小结构。 +- 定义基础 Document、Command、ExecutionPortRef、VariableRef、Descriptor 和 Diagnostic。 +- 实现 workflowStart、AI Chat、Text Editor、Assigned Answer 的模板实例化。 +- 实现 `init/build`、`template list/show`、`node list/show/add --after`、`input set/ref` 和 `validate`。 +- 实现 `workflow.json` Schema 解析、单文件原子写入、JSON 输出和基础退出码。 +- 用 Characterization tests 记录 PR2 需要复用的 Web 当前行为;PR1 只实现 Start、AI Chat、普通边和基础引用的最小结构检查。 +- 建立 `basic-ai` 和 `basic-static` 端到端测试。 +- 验收结果:CLI 可以真实构建并导出 `Start -> AI Chat`,但不作为正式用户版本发布。 + +### PR2:常用线性工作流 + +- 补齐普通节点 update/remove/clone 和普通边 connect/disconnect/reconnect。 +- 增加 App 配置、全局变量、`input available` 和基础 inspect/import。 +- 覆盖知识库搜索、问题优化、内容提取、HTTP、代码、调用应用等常用线性节点中可独立落地的部分。 +- 资源依赖节点只生成结构和安全默认值;用户未显式提供真实资源时保持空值,不得使用示例 ID 伪造可运行状态。 +- 集中抽取 FastGPT Web 现有工作流校验为共享 Validator,覆盖节点必填参数、输入输出、边合法性、变量引用、Start 可达性和删除残留关系;补充复杂参数 `valueSchema`、fixtures,并完成 Web/CLI diagnostics 等价测试。 +- 验收结果:CLI 可以构建具有实际业务价值的线性知识库问答和数据处理流程。 + +### PR3:复杂图语义 + +- 分支、source output、catch 和 tool edge。 +- insert、复杂 reconnect、动态 IO 及删除副作用。 +- loop、loopRun、batch、parallel 等嵌套容器和系统子节点。 +- 同步迁移分支、catch、工具边、动态 IO、父子关系和循环规则;逐动作迁移 Web editor 到 shared commands,并补齐复杂流程等价测试。 +- 验收结果:CLI 覆盖 FastGPT Web 编辑器的主要工作流图语义。 + +### PR4:自动化与门禁 + +- 完整 WorkflowDocument schemaVersion、单文件兼容策略和 canonical checksum。 +- ChangeSet diff/plan/apply、TTY/non-TTY Confirm。 +- 固化 local mutation、build、ChangeSet apply 的校验策略,以及 JSON envelope、错误 code、退出码、审计和 CI 用法。 +- 固化模板输入初始值优先级、资源型输入安全空值、单一结构校验和独立 Binding Collector;PR6 前本地构建产物不得被标记为远端可执行。 +- 验收结果:Agent 可以通过 Shell 安全执行计划、确认和批量修改;完成后发布本地 CLI Beta。 + +### PR5:Workflow 辅助生成 Demo + +- 在 Workflow 编辑器中提供独立可收起 ChatBox,复用模型选择、历史恢复、SSE、停止和计费基础设施。 +- 在 Pro 中实现独立 Workflow Builder API、Handler、Runtime 和 Sandbox prepare action;只模仿 Skill 辅助生成顺序,不抽取或修改 Skill Handler。 +- 按 `sourceType=app`、`sourceId=appId`、`userId`、`chatId` 归属 Sandbox,注入当前 `WorkflowDocument`、与服务端匹配的 CLI 产物和内置 `workflow-builder` Skill。 +- 恢复普通 Chat 历史和 Agent memories,不建立独立修改记录模型;前端不传 `mode` 和节点选中上下文。 +- Agent 通过 CLI 生成 ChangeSet,服务端使用 workflow-core 重新校验,前端展示 plan/diagnostics 并在用户确认后通过 Web Adapter/Core 应用。 +- checksum 不匹配时只作废当前 plan,不覆盖人工修改;PR5 不自动保存、发布或运行工作流。 +- 验收结果:用户可在 Workflow 编辑器中通过多轮对话生成可审查 ChangeSet,并安全应用到当前画布。 + +### PR6:远端只读能力 + +- profile、密钥读取和 API Key 只读鉴权契约。 +- 远端 template preview、pull 和 versions。 +- 团队应用、系统工具和远端工具 Template Provider。 +- 数据集、模型、应用和工具的只读 Resource Resolver;返回存在性、当前团队可见性、读取权限和节点所需资源快照,不返回 Secret 值。 +- 远端 Provider 返回已鉴权且已验证读取权限的资源值,并作为模板输入值来源的第二优先级;失败时保持未绑定,不回退到虚构资源。 +- 增加远端模板版本、读取权限、资源可见性和 pull 反编译校验。 +- 验收结果:CLI 可以安全读取已有 FastGPT App 和远端模板,不执行远端写入。 + +### PR7:远端写入与运行 + +- remote meta push、draft save、publish、debug 和 run。 +- `baseVersionId`、事务内版本比较和 HTTP 409 冲突。 +- 完成 runtime/publish 校验,并在服务端二次执行权限、资源、版本和发布校验及端到端测试。 +- 对 PR6 已验证资源再次检查存在性和权限,处理绑定后删除、跨团队复制和权限撤销,不信任本地 validated 状态。 +- 验收结果:CLI 可以安全操作本地或云端 FastGPT 的完整远端生命周期。 + +## 12. 验收标准 + +### 12.1 本地核心 + +以下条目是 PR1 到 PR3 的累计验收标准。PR1 只验收首批四类节点、普通 `next -> target` 执行边、基础引用、最小结构检查和 StoreWorkflow 语义往返;删除副作用、完整 Web Adapter 等价和真实工作流 import 分别在 PR2/PR3 按对应 TODO 验收。 + +- 能从空文档创建 start、AI 节点并通过 `--after` 原子连边。 +- 新建工作流默认包含唯一的系统配置节点和 WorkflowStart;系统配置节点不可删除、复制或重复添加。 +- 变量与欢迎语、问题引导、文件选择、语音、定时触发、自动执行等开关统一存储在 `chatConfig`,并通过系统配置节点在 Web 中编辑。 +- 能从内置模板生成稳定的 NodeTemplateDescriptor,Agent 无需读取 React 组件即可理解参数。 +- `input set/ref` 按 Descriptor 的类型、inputMode、可配置性和 valueSchema 校验。 +- Automation Metadata 不出现在 ReactFlow Node、StoreNode、`workflow.json` 或 StoreWorkflow 中。 +- 同一模板创建出的 Web 节点和 StoreWorkflow 在接入 Descriptor 前后语义一致。 +- 用户显式值覆盖远端值和模板默认值;显式空值不得被覆盖。 +- 环境无关的模板默认值被保留,资源型模板默认值在 PR6 验证前保持安全空值。 +- Start 默认引用只补充空输入且必须类型兼容,不得覆盖已有值。 +- 本地 `validate/build` 允许资源待绑定并返回稳定 warning;普通结构错误仍阻断,且任何构建都不得合成资源值。 +- fixtures、示例和 Agent 生成流程不得包含虚构 dataset/app/tool ID、模型名、HTTP URL 或 secret。 +- 能明确区分 `start@next -> ai@target` 与 `start.userChatInput` 引用。 +- 删除输出、节点和容器时,副作用与 Web 一致。 +- 同一命令输入在 Web adapter 与 CLI 中生成语义相同的 StoreWorkflow。 +- 现有真实工作流 import/build 后通过语义等价测试。 + +### 12.2 本地文件和 ChangeSet + +PR1 只验收 `workflow.json` 的确定性 round-trip、失败不覆盖原文件和基础 checksum。canonical checksum、ChangeSet base 校验与 Confirm 从 PR4 开始验收。 + +- `workflow.json` parse/serialize round-trip 结果确定性稳定。 +- `workflow.json` 中的规范状态变化会改变 checksum,缩进和字段顺序变化不会改变 checksum。 +- ChangeSet base 不匹配时拒绝应用。 +- Confirm 不能被简单修改 `workflow.json` 字段绕过。 + +### 12.3 远端 + +- API Key 对 pull、preview、save、publish、debug 有明确测试结果。 +- 无写权限不能拉取完整图或写入。 +- 两个客户端基于同一版本更新时,后提交者收到 409 冲突。 +- draft save 可以保存未完成图;publish 和 run 会被完整校验阻断。 + +### 12.4 测试样本 + +至少覆盖五类真实导出工作流: + +1. start -> AI 的普通流程。 +2. ifElse/userSelect 的分支流程。 +3. agent/toolCall 与工具边。 +4. loop/loopRun/batch 的嵌套流程。 +5. 动态输入输出、变量引用和 catch edge。 + +## 13. 风险与控制 + +| 风险 | 影响 | 控制措施 | +| --- | --- | --- | +| Web 与 CLI 继续各写一套规则 | 行为漂移 | 共享 command/validator,做 adapter 等价测试 | +| CLI 参数说明直接写入共享 Input Schema | Web/存储结构变化 | 使用独立 Automation Metadata,并在实例化前隔离 | +| 模板参数描述不完整 | Agent 猜测参数导致坏工作流 | Descriptor 质量门禁;复杂参数要求 valueSchema 或 warning | +| Descriptor 与模板发生漂移 | CLI 校验错误 | 普通字段从模板实时归一化,补充元数据只描述缺失信息并做 key 对齐测试 | +| Agent 或示例编造远端资源 | 本地校验通过、导入后运行失败或泄露内部异常 | 固定值来源优先级;PR6 前资源留空;Binding Collector 输出待绑定项;禁止 fixture 使用占位资源 | +| PR6 验证后的资源被删除或撤权 | debug/publish 时使用过期资源 | PR7 服务端重新验证存在性、团队边界和权限,不信任本地 validated 状态 | +| 动态模板版本变化 | 构建不可复现 | `workflow.json` 保存完整节点快照;远端模板解析结果进入变更摘要和审计日志 | +| 语义端口覆盖不完整 | 导入丢边 | golden round-trip;未知 handle 导入时阻断并报告,不静默丢弃 | +| 本地 JSON 被当作校验器 | 可绕过 | 所有门禁在代码中重新计算 | +| 远端覆盖他人修改 | 数据丢失 | baseVersionId 事务内比较,无 `--force` | +| CLI 保存与发布语义混淆 | 未完成图被发布 | 分离 draft save 和 publish 命令 | +| MVP 范围过宽 | 无法形成闭环 | PR1 只做内部技术 Demo,PR2/PR3 增量补齐操作面,PR4 后再发布本地 CLI Beta | + +## 14. MECE 核查 + +### 14.1 操作面完整性 + +- 状态载体:WorkflowDocument、`workflow.json`、StoreWorkflow。 +- 构建来源:模板、导入、ChangeSet。 +- 参数发现:Template Descriptor、Automation Metadata、机器可读 Schema。 +- 输入初始化:用户显式值、PR6 已验证值、模板安全默认值、资源安全空值。 +- 图操作:节点、执行边、变量引用、工具、嵌套。 +- 生命周期:校验、build、draft save、publish、debug、run。 +- 自动化:dry-run、JSON、退出码、checksum、并发控制。 + +### 14.2 边界互斥性 + +- 执行边不承担变量引用。 +- `workflow.json` 不承担约束执行。 +- ChangeSet 不承担完整状态存储。 +- ReactFlow 不承担共享领域模型。 +- Automation Metadata 不承担运行时节点状态,也不进入 StoreWorkflow。 +- 模板值来源优先级只负责实例化;PR6 资源读取验证与 PR7 运行/发布复验职责互不替代。 +- 本地 build 只表示结构可编译,不等于资源已解析、可调试或可发布。 +- draft save 不等于 publish。 +- 本地 checksum 不替代远端 baseVersionId。 + +### 14.3 最终评审结论 + +该方案可以作为实现基线,但必须严格按 PR1 到 PR7 增量落地。PR1 要以最小可运行 CLI 证明从模板、Command、Document、Validator、`workflow.json` 到 StoreWorkflow 的完整链路;PR5 只在 PR4 契约上增加独立的 Workflow 辅助生成产品入口,不得引入第二套修改规则。后续 PR 只能扩展能力,不能破坏已固化的基础契约和端到端测试。分片 Manifest 不进入初期开发范围,只有真实实验数据证明单文件方案存在瓶颈后再单独立项。 diff --git a/packages/global/core/workflow/constants.ts b/packages/global/core/workflow/constants.ts index 2642692ff5a6..e4e94064c158 100644 --- a/packages/global/core/workflow/constants.ts +++ b/packages/global/core/workflow/constants.ts @@ -372,7 +372,7 @@ export enum VariableInputEnum { internal = 'internal' } -type VariableConfigType = { +export type VariableConfigType = { icon: string; label: string; value: VariableInputEnum; diff --git a/packages/global/core/workflow/type/io.ts b/packages/global/core/workflow/type/io.ts index 5e6244999959..2399750a0843 100644 --- a/packages/global/core/workflow/type/io.ts +++ b/packages/global/core/workflow/type/io.ts @@ -379,6 +379,15 @@ export const FlowNodeOutputItemTypeSchema = z.object({ }); export type FlowNodeOutputItemType = z.infer; +/** + * 工作流持久化输出结构。`invalidCondition` 只用于 Web 模板的可用性计算,不能进入 + * StoreWorkflow 或 WorkflowDocument。 + */ +export const StoreNodeOutputItemTypeSchema = FlowNodeOutputItemTypeSchema.omit({ + invalidCondition: true +}); +export type StoreNodeOutputItemType = z.infer; + /* Reference */ export const ReferenceItemValueTypeSchema = z.tuple([z.string(), z.string().optional()]); export type ReferenceItemValueType = z.infer; diff --git a/packages/global/core/workflow/type/node.ts b/packages/global/core/workflow/type/node.ts index 1138fd109c8f..7f988feae673 100644 --- a/packages/global/core/workflow/type/node.ts +++ b/packages/global/core/workflow/type/node.ts @@ -1,5 +1,9 @@ import { FlowNodeTypeEnum, NodeColorSchemaEnum } from '../node/constant'; -import { FlowNodeInputItemTypeSchema, FlowNodeOutputItemTypeSchema } from './io'; +import { + FlowNodeInputItemTypeSchema, + FlowNodeOutputItemTypeSchema, + StoreNodeOutputItemTypeSchema +} from './io'; import { HttpToolConfigTypeSchema } from '../../app/tool/httpTool/type'; import { McpToolConfigSchema } from '../../app/tool/mcpTool/type'; import { ParentIdSchema } from '../../../common/parentFolder/type'; @@ -303,6 +307,8 @@ export type FlowNodeItemType = z.infer; // store node type export const StoreNodeItemTypeSchema = FlowNodeCommonTypeSchema.extend({ nodeId: z.string(), + outputs: z.array(StoreNodeOutputItemTypeSchema), + isFolded: BoolSchema.optional(), position: z .object({ x: NumSchema, diff --git a/packages/global/openapi/core/workflow/node.ts b/packages/global/openapi/core/workflow/node.ts index 5013c4632a62..a65f14d84c41 100644 --- a/packages/global/openapi/core/workflow/node.ts +++ b/packages/global/openapi/core/workflow/node.ts @@ -1,7 +1,7 @@ import z from 'zod'; import { FlowNodeInputItemTypeSchema, - FlowNodeOutputItemTypeSchema + StoreNodeOutputItemTypeSchema } from '../../../core/workflow/type/io'; import { NodeToolConfigTypeSchema, @@ -58,12 +58,7 @@ export const OpenAPIFlowNodeInputItemTypeSchema = FlowNodeInputItemTypeSchema.om description: '工作流节点输入配置' }); -// `invalidCondition` in FlowNodeOutputItemTypeSchema is a Zod function schema used only -// by the editor to validate outputs; function schemas cannot be represented in JSON -// Schema, so we strip it before exposing via OpenAPI. -export const OpenAPIFlowNodeOutputItemTypeSchema = FlowNodeOutputItemTypeSchema.omit({ - invalidCondition: true -}).meta({ +export const OpenAPIFlowNodeOutputItemTypeSchema = StoreNodeOutputItemTypeSchema.meta({ description: '工作流节点输出配置' }); diff --git a/packages/web/i18n/en/workflow.json b/packages/web/i18n/en/workflow.json index 9e35096f537e..fd568e5d95d5 100644 --- a/packages/web/i18n/en/workflow.json +++ b/packages/web/i18n/en/workflow.json @@ -30,6 +30,11 @@ "classification_result": "Classification Result", "click_to_change_reference": "Click to switch input mode", "click_to_change_value": "Click to switch Variable citation mode", + "cli.input.ai_model": "Model used by this AI node", + "cli.input.answer": "Fixed answer text or an upstream output reference", + "cli.input.system_prompt": "Instructions that define the assistant's role and response rules", + "cli.input.text_editor": "Static text or text assembled from upstream variables", + "cli.input.user_question": "User question supplied by the workflow start node", "code.Reset template": "Reset Template", "code.Reset template confirm": "Confirm reset code template? This will reset all inputs and outputs to template values. Please save your current code.", "code.Switch language confirm": "Switching the language will reset the code, will it continue?", @@ -273,5 +278,6 @@ "workflow_local_draft_auth_expired_notice": "Your login has expired. The current edits have been automatically saved locally. Do not close this page. After signing in again in this tab, your workflow edits can be restored.", "workflow_local_draft_auth_expired_title": "Automatically saved", "workflow_local_draft_relogin": "Sign in again", - "workflow.exit_tips": "Your changes have not been saved. 'Exit directly' will not save your edits." + "workflow.exit_tips": "Your changes have not been saved. 'Exit directly' will not save your edits.", + "connection_invalid": "This connection violates workflow rules" } diff --git a/packages/web/i18n/zh-CN/workflow.json b/packages/web/i18n/zh-CN/workflow.json index 11b779db6c9d..6220dbc2d85f 100644 --- a/packages/web/i18n/zh-CN/workflow.json +++ b/packages/web/i18n/zh-CN/workflow.json @@ -30,6 +30,11 @@ "classification_result": "分类结果", "click_to_change_reference": "点击切换输入模式", "click_to_change_value": "点击切换变量引用模式", + "cli.input.ai_model": "该 AI 节点使用的模型", + "cli.input.answer": "固定回答文本或上游输出引用", + "cli.input.system_prompt": "定义助手角色和回答规则的指令", + "cli.input.text_editor": "静态文本或由上游变量拼接的文本", + "cli.input.user_question": "由工作流开始节点提供的用户问题", "code.Reset template": "还原模板", "code.Reset template confirm": "确认还原代码模板?将会重置所有输入和输出至模板值,请注意保存当前代码。", "code.Switch language confirm": "切换语言将重置代码,是否继续?", @@ -273,5 +278,6 @@ "workflow_local_draft_auth_expired_notice": "登录已过期,当前编辑内容已自动保存至本地。请不要关闭页面,在此标签页重新登录后,即可恢复编排内容。", "workflow_local_draft_auth_expired_title": "已自动保存", "workflow_local_draft_relogin": "重新登录", - "workflow.exit_tips": "您的更改尚未保存,「直接退出」将不会保存您的编辑记录。" + "workflow.exit_tips": "您的更改尚未保存,「直接退出」将不会保存您的编辑记录。", + "connection_invalid": "该连接不符合工作流规则" } diff --git a/packages/web/i18n/zh-Hant/workflow.json b/packages/web/i18n/zh-Hant/workflow.json index 957d7bf55d41..88614df2a410 100644 --- a/packages/web/i18n/zh-Hant/workflow.json +++ b/packages/web/i18n/zh-Hant/workflow.json @@ -30,6 +30,11 @@ "classification_result": "分類結果", "click_to_change_reference": "點擊切換輸入模式", "click_to_change_value": "點擊切換變量引用模式", + "cli.input.ai_model": "此 AI 節點使用的模型", + "cli.input.answer": "固定回答文字或上游輸出引用", + "cli.input.system_prompt": "定義助手角色和回答規則的指令", + "cli.input.text_editor": "靜態文字或由上游變數組合的文字", + "cli.input.user_question": "由工作流程開始節點提供的使用者問題", "code.Reset template": "重設範本", "code.Reset template confirm": "確定要重設程式碼範本嗎?這將會把所有輸入和輸出重設為範本值。請儲存您目前的程式碼。", "code.Switch language confirm": "切換語言將重設代碼,是否繼續?", @@ -273,5 +278,6 @@ "workflow_local_draft_auth_expired_notice": "登入已過期,當前編輯內容已自動儲存至本機。請不要關閉頁面,在此分頁重新登入後,即可恢復編排內容。", "workflow_local_draft_auth_expired_title": "已自動儲存", "workflow_local_draft_relogin": "重新登入", - "workflow.exit_tips": "您的變更尚未儲存,「直接結束」將不會儲存您的編輯紀錄。" + "workflow.exit_tips": "您的變更尚未儲存,「直接結束」將不會儲存您的編輯紀錄。", + "connection_invalid": "此連線不符合工作流程規則" } diff --git a/packages/workflow-cli/package.json b/packages/workflow-cli/package.json new file mode 100644 index 000000000000..8e3585f55a2f --- /dev/null +++ b/packages/workflow-cli/package.json @@ -0,0 +1,37 @@ +{ + "name": "@fastgpt/workflow-cli", + "version": "0.1.0", + "private": true, + "type": "module", + "main": "./dist/index.js", + "bin": { + "fastgpt-workflow": "./dist/cli.js" + }, + "exports": { + ".": { + "import": "./dist/index.js" + } + }, + "files": [ + "dist" + ], + "sideEffects": false, + "scripts": { + "build": "tsdown", + "test": "vitest run --config ./vitest.config.ts", + "test:bin": "pnpm --filter @fastgpt/workflow-core build && pnpm build && node test/bin-smoke.mjs", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@fastgpt/web": "workspace:*", + "@fastgpt/workflow-core": "workspace:*", + "zod": "catalog:" + }, + "devDependencies": { + "@types/node": "catalog:", + "tsdown": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:", + "@vitest/coverage-v8": "catalog:" + } +} diff --git a/packages/workflow-cli/src/cli.ts b/packages/workflow-cli/src/cli.ts new file mode 100644 index 000000000000..bc54c28245c2 --- /dev/null +++ b/packages/workflow-cli/src/cli.ts @@ -0,0 +1,4 @@ +#!/usr/bin/env node +import { runCli } from './run'; + +process.exitCode = await runCli({ argv: process.argv.slice(2) }); diff --git a/packages/workflow-cli/src/commands/config.ts b/packages/workflow-cli/src/commands/config.ts new file mode 100644 index 000000000000..656d484e854f --- /dev/null +++ b/packages/workflow-cli/src/commands/config.ts @@ -0,0 +1,50 @@ +import { CHAT_CONFIG_PATHS, getChatConfigValue } from '@fastgpt/workflow-core'; +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { readInputValue, requireString, runMutation } from './helpers'; + +export const listConfig = async ( + _input: Record, + context: CliContext +): Promise => { + const document = await readWorkflowFile(context.dir); + return { + changed: false, + result: CHAT_CONFIG_PATHS.map((path) => ({ path, value: getChatConfigValue(document, path) })) + }; +}; + +export const getConfig = async ( + input: Record, + context: CliContext +): Promise => { + const path = requireString(input, 'path'); + return { + changed: false, + result: { path, value: getChatConfigValue(await readWorkflowFile(context.dir), path) } + }; +}; + +export const setConfig = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'config.set', + path: requireString(input, 'path'), + value: await readInputValue({ input, context }) + } + }); + +export const unsetConfig = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { type: 'config.unset', path: requireString(input, 'path') } + }); diff --git a/packages/workflow-cli/src/commands/container.ts b/packages/workflow-cli/src/commands/container.ts new file mode 100644 index 000000000000..31f6e55092fd --- /dev/null +++ b/packages/workflow-cli/src/commands/container.ts @@ -0,0 +1,15 @@ +import { listContainerChildren } from '@fastgpt/workflow-core'; +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { requireString } from './helpers'; + +export const listChildren = async ( + input: Record, + context: CliContext +): Promise => { + const document = await readWorkflowFile(context.dir); + return { + changed: false, + result: listContainerChildren(document, requireString(input, 'node')) + }; +}; diff --git a/packages/workflow-cli/src/commands/document.ts b/packages/workflow-cli/src/commands/document.ts new file mode 100644 index 000000000000..4fee8f036124 --- /dev/null +++ b/packages/workflow-cli/src/commands/document.ts @@ -0,0 +1,152 @@ +import { + builtinTemplateProvider, + collectWorkflowBindings, + compileStoreWorkflow, + createDefaultWorkflowDocument, + decompileStoreWorkflow, + ensureSystemConfigNode, + getWorkflowBindingDiagnostics, + getWorkflowChecksum, + validateWorkflow +} from '@fastgpt/workflow-core'; +import { access, readFile } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { CliArgumentError } from '../error'; +import { createTranslator } from '../i18n'; +import { + getWorkflowFilePath, + readWorkflowFile, + writeJsonFileAtomic, + writeWorkflowFileAtomic +} from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { assertNoValidationErrors, requireString } from './helpers'; + +export const initDocument = async ( + input: Record, + context: CliContext +): Promise => { + const filePath = getWorkflowFilePath(context.dir); + const exists = await access(filePath).then( + () => true, + () => false + ); + if (exists) throw new CliArgumentError('workflow.json already exists', { filePath }); + + const result = await createDefaultWorkflowDocument({ + app: typeof input.name === 'string' ? { name: input.name } : {}, + dependencies: { + templateProvider: builtinTemplateProvider, + locale: context.locale, + translate: createTranslator(context.locale) + } + }); + if (input.dryRun !== true) await writeWorkflowFileAtomic(context.dir, result.document); + return { + changed: true, + checksum: getWorkflowChecksum(result.document), + changes: result.nodeIds.map((nodeId) => ({ type: 'node.add', nodeId })), + result: { dryRun: input.dryRun === true }, + warnings: result.warnings + }; +}; + +export const buildDocument = async ( + input: Record, + context: CliContext +): Promise => { + const output = requireString(input, 'output'); + const document = await readWorkflowFile(context.dir); + const diagnostics = validateWorkflow(document); + assertNoValidationErrors(diagnostics); + const bindings = collectWorkflowBindings(document); + const bindingDiagnostics = getWorkflowBindingDiagnostics(bindings); + const workflow = compileStoreWorkflow(document); + const outputPath = resolve(context.cwd, output); + await writeJsonFileAtomic(outputPath, workflow); + return { + changed: false, + result: { output: outputPath, workflow, diagnostics, bindings }, + warnings: bindingDiagnostics + }; +}; + +export const importDocument = async ( + input: Record, + context: CliContext +): Promise => { + const inputPath = resolve(context.cwd, requireString(input, 'input')); + let raw: unknown; + try { + raw = JSON.parse(await readFile(inputPath, 'utf8')); + } catch (error) { + if (error instanceof SyntaxError) { + throw new CliArgumentError('Import file must contain valid JSON', { inputPath }); + } + throw error; + } + + const currentApp = await readWorkflowFile(context.dir).then( + (document) => document.app, + () => ({}) + ); + const document = decompileStoreWorkflow({ workflow: raw as never, app: currentApp }); + const systemConfigResult = await ensureSystemConfigNode({ + document, + dependencies: { + templateProvider: builtinTemplateProvider, + locale: context.locale, + translate: createTranslator(context.locale) + } + }); + if (input.dryRun !== true) await writeWorkflowFileAtomic(context.dir, document); + return { + changed: true, + checksum: getWorkflowChecksum(document), + changes: systemConfigResult.nodeIds.map((nodeId) => ({ type: 'node.add', nodeId })), + result: { input: inputPath, dryRun: input.dryRun === true, document }, + warnings: systemConfigResult.warnings + }; +}; + +export const inspectDocument = async ( + _input: Record, + context: CliContext +): Promise => { + const document = await readWorkflowFile(context.dir); + const diagnostics = validateWorkflow(document); + const bindings = collectWorkflowBindings(document); + const bindingDiagnostics = getWorkflowBindingDiagnostics(bindings); + const allDiagnostics = [...diagnostics, ...bindingDiagnostics]; + const references = document.nodes.flatMap((node) => + node.inputs.flatMap((input) => + Array.isArray(input.value) && + input.value.length === 2 && + typeof input.value[0] === 'string' && + typeof input.value[1] === 'string' + ? [{ nodeId: node.nodeId, inputKey: input.key, from: input.value }] + : [] + ) + ); + return { + changed: false, + result: { + app: document.app, + nodes: document.nodes.map((node) => ({ + nodeId: node.nodeId, + name: node.name, + flowNodeType: node.flowNodeType + })), + edges: document.executionEdges, + references, + bindings, + chatConfig: document.chatConfig, + diagnostics: { + errorCount: allDiagnostics.filter((item) => item.severity === 'error').length, + warningCount: allDiagnostics.filter((item) => item.severity === 'warning').length, + items: allDiagnostics + } + }, + warnings: bindingDiagnostics + }; +}; diff --git a/packages/workflow-cli/src/commands/edge.ts b/packages/workflow-cli/src/commands/edge.ts new file mode 100644 index 000000000000..4182d9ad3216 --- /dev/null +++ b/packages/workflow-cli/src/commands/edge.ts @@ -0,0 +1,72 @@ +import { + parseExecutionSourcePortRef, + parseExecutionTargetPortRef, + type WorkflowExecutionEdge +} from '@fastgpt/workflow-core'; +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { requireString, runMutation } from './helpers'; + +const parseEdge = (from: string, to: string): WorkflowExecutionEdge => ({ + source: parseExecutionSourcePortRef(from), + target: parseExecutionTargetPortRef(to) +}); + +export const listEdges = async ( + input: Record, + context: CliContext +): Promise => { + const document = await readWorkflowFile(context.dir); + return { + changed: false, + result: document.executionEdges.filter( + (edge) => + (input.node === undefined || + edge.source.nodeId === input.node || + edge.target.nodeId === input.node) && + (input.kind === undefined || edge.source.kind === input.kind) + ) + }; +}; + +export const connectEdge = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'edge.connect', + edge: parseEdge(requireString(input, 'from'), requireString(input, 'to')) + } + }); + +export const disconnectEdge = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'edge.disconnect', + edge: parseEdge(requireString(input, 'from'), requireString(input, 'to')) + } + }); + +export const reconnectEdge = async ( + input: Record, + context: CliContext +): Promise => { + const from = requireString(input, 'from'); + return runMutation({ + input, + context, + command: { + type: 'edge.reconnect', + oldEdge: parseEdge(from, requireString(input, 'oldTo')), + newEdge: parseEdge(from, requireString(input, 'to')) + } + }); +}; diff --git a/packages/workflow-cli/src/commands/helpers.ts b/packages/workflow-cli/src/commands/helpers.ts new file mode 100644 index 000000000000..0d3e584ee51a --- /dev/null +++ b/packages/workflow-cli/src/commands/helpers.ts @@ -0,0 +1,123 @@ +import { + WorkflowValidationError, + applyWorkflowCommand, + builtinTemplateProvider, + type WorkflowCommand +} from '@fastgpt/workflow-core'; +import { readFile } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { CliArgumentError } from '../error'; +import { createTranslator } from '../i18n'; +import { readWorkflowFile, writeWorkflowFileAtomic } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; + +export const requireString = (input: Record, key: string) => { + const value = input[key]; + if (typeof value !== 'string' || !value) { + throw new CliArgumentError(`Missing --${key}`, { option: key }); + } + return value; +}; + +export const runMutation = async ({ + command, + input, + context +}: { + command: WorkflowCommand; + input: Record; + context: CliContext; +}): Promise => { + const document = await readWorkflowFile(context.dir); + const result = await applyWorkflowCommand({ + document, + command, + dependencies: { + templateProvider: builtinTemplateProvider, + locale: context.locale, + translate: createTranslator(context.locale) + } + }); + if (input.dryRun !== true) { + await writeWorkflowFileAtomic(context.dir, result.document); + } + return { + changed: true, + checksum: result.checksum, + changes: result.changes, + result: { dryRun: input.dryRun === true }, + warnings: result.warnings + }; +}; + +export const assertNoValidationErrors = ( + diagnostics: ReturnType +) => { + if (diagnostics.some((item) => item.severity === 'error')) { + throw new WorkflowValidationError(diagnostics); + } +}; + +export const readInputValue = async ({ + input, + context, + valueType +}: { + input: Record; + context: CliContext; + valueType?: string; +}) => { + const valueOptions = ['value', 'valueJson', 'valueFile', 'valueEnv'].filter( + (key) => input[key] !== undefined + ); + if (valueOptions.length !== 1) { + throw new CliArgumentError('Exactly one value option is required', { valueOptions }); + } + + if (typeof input.valueJson === 'string') { + try { + return JSON.parse(input.valueJson); + } catch { + throw new CliArgumentError('--value-json must contain valid JSON'); + } + } + const rawValue = (() => { + if (typeof input.value === 'string') return input.value; + if (typeof input.valueEnv === 'string') { + const value = context.env[input.valueEnv]; + if (value === undefined) { + throw new CliArgumentError('Environment variable is not defined', { + name: input.valueEnv + }); + } + return value; + } + return undefined; + })(); + const fileValue = + typeof input.valueFile === 'string' + ? input.valueFile === '-' + ? await context.readStdin() + : await readFile(resolve(context.cwd, input.valueFile), 'utf8') + : undefined; + const value = rawValue ?? fileValue; + + if (valueType === 'number') { + const numberValue = Number(value); + if (!Number.isFinite(numberValue)) throw new CliArgumentError('Value must be a number'); + return numberValue; + } + if (valueType === 'boolean') { + if (value === 'true') return true; + if (value === 'false') return false; + throw new CliArgumentError('Value must be true or false'); + } + if (valueType?.startsWith('array') || valueType === 'object') { + try { + return JSON.parse(value ?? ''); + } catch { + throw new CliArgumentError('Structured input must contain valid JSON'); + } + } + return value; +}; diff --git a/packages/workflow-cli/src/commands/input.ts b/packages/workflow-cli/src/commands/input.ts new file mode 100644 index 000000000000..a88374e811a3 --- /dev/null +++ b/packages/workflow-cli/src/commands/input.ts @@ -0,0 +1,149 @@ +import type { WorkflowIOValueTypeEnum } from '@fastgpt/workflow-core'; +import { + FlowNodeInputTypeEnum, + getAvailableInputReferences, + parseVariableRef +} from '@fastgpt/workflow-core'; +import { CliArgumentError } from '../error'; +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { readInputValue, requireString, runMutation } from './helpers'; + +export const listInputs = async ( + input: Record, + context: CliContext +): Promise => { + const nodeId = requireString(input, 'node'); + const document = await readWorkflowFile(context.dir); + const node = document.nodes.find((item) => item.nodeId === nodeId); + if (!node) throw new CliArgumentError('Node not found', { nodeId }); + return { changed: false, result: node.inputs }; +}; + +export const addInput = async ( + input: Record, + context: CliContext +): Promise => { + const key = requireString(input, 'key'); + const mode = requireString(input, 'mode'); + const renderTypeList = + mode === 'reference' + ? [FlowNodeInputTypeEnum.reference] + : mode === 'both' + ? [FlowNodeInputTypeEnum.input, FlowNodeInputTypeEnum.reference] + : [FlowNodeInputTypeEnum.input]; + return runMutation({ + input, + context, + command: { + type: 'input.add', + nodeId: requireString(input, 'node'), + input: { + key, + label: typeof input.label === 'string' ? input.label : key, + description: typeof input.description === 'string' ? input.description : undefined, + valueType: requireString(input, 'valueType') as WorkflowIOValueTypeEnum, + renderTypeList, + required: input.required === true, + canEdit: true + } + } + }); +}; + +export const removeInput = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'input.remove', + nodeId: requireString(input, 'node'), + inputKey: requireString(input, 'key') + } + }); + +export const setInput = async ( + input: Record, + context: CliContext +): Promise => { + const nodeId = requireString(input, 'node'); + const inputKey = requireString(input, 'key'); + const document = await readWorkflowFile(context.dir); + const nodeInput = document.nodes + .find((node) => node.nodeId === nodeId) + ?.inputs.find((item) => item.key === inputKey); + const value = await readInputValue({ input, context, valueType: nodeInput?.valueType }); + return runMutation({ + input, + context, + command: { type: 'input.set', nodeId, inputKey, value } + }); +}; + +export const refInput = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'input.ref', + nodeId: requireString(input, 'node'), + inputKey: requireString(input, 'key'), + ref: parseVariableRef(requireString(input, 'from')) + } + }); + +const findInput = async (input: Record, context: CliContext) => { + const nodeId = requireString(input, 'node'); + const inputKey = requireString(input, 'key'); + const document = await readWorkflowFile(context.dir); + const nodeInput = document.nodes + .find((node) => node.nodeId === nodeId) + ?.inputs.find((item) => item.key === inputKey); + if (!nodeInput) throw new CliArgumentError('Input not found', { nodeId, inputKey }); + return { document, nodeId, inputKey, nodeInput }; +}; + +export const showInput = async ( + input: Record, + context: CliContext +): Promise => { + const { nodeInput } = await findInput(input, context); + const isSecret = nodeInput.renderTypeList.includes(FlowNodeInputTypeEnum.password); + return { + changed: false, + result: isSecret + ? { ...nodeInput, value: undefined, configured: nodeInput.value !== undefined } + : nodeInput + }; +}; + +export const unsetInputValue = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'input.unset', + nodeId: requireString(input, 'node'), + inputKey: requireString(input, 'key') + } + }); + +export const listAvailableInputReferences = async ( + input: Record, + context: CliContext +): Promise => { + const { document, nodeId, inputKey } = await findInput(input, context); + return { + changed: false, + result: getAvailableInputReferences({ document, nodeId, inputKey }) + }; +}; diff --git a/packages/workflow-cli/src/commands/meta.ts b/packages/workflow-cli/src/commands/meta.ts new file mode 100644 index 000000000000..c3c50955ce95 --- /dev/null +++ b/packages/workflow-cli/src/commands/meta.ts @@ -0,0 +1,25 @@ +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { runMutation } from './helpers'; + +export const showMeta = async ( + _input: Record, + context: CliContext +): Promise => ({ + changed: false, + result: (await readWorkflowFile(context.dir)).app +}); + +export const setMeta = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'meta.update', + name: typeof input.name === 'string' ? input.name : undefined, + intro: typeof input.intro === 'string' ? input.intro : undefined + } + }); diff --git a/packages/workflow-cli/src/commands/node.ts b/packages/workflow-cli/src/commands/node.ts new file mode 100644 index 000000000000..a3b157d308a2 --- /dev/null +++ b/packages/workflow-cli/src/commands/node.ts @@ -0,0 +1,162 @@ +import { + parseExecutionSourcePortRef, + parseExecutionTargetPortRef, + parseNodeTemplateRef +} from '@fastgpt/workflow-core'; +import { CliArgumentError } from '../error'; +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { requireString, runMutation } from './helpers'; +import { findDescriptorForNode } from './template'; + +export const listNodes = async ( + input: Record, + context: CliContext +): Promise => { + const document = await readWorkflowFile(context.dir); + return { + changed: false, + result: document.nodes.filter( + (node) => + (input.type === undefined || node.flowNodeType === input.type) && + (input.parent === undefined || node.parentNodeId === input.parent) + ) + }; +}; + +export const showNode = async ( + input: Record, + context: CliContext +): Promise => { + const nodeId = requireString(input, 'node'); + const document = await readWorkflowFile(context.dir); + const node = document.nodes.find((item) => item.nodeId === nodeId); + if (!node) throw new CliArgumentError('Node not found', { nodeId }); + return { + changed: false, + result: { + node, + descriptor: await findDescriptorForNode(node.flowNodeType, context), + executionEdges: document.executionEdges.filter( + (edge) => edge.source.nodeId === nodeId || edge.target.nodeId === nodeId + ) + } + }; +}; + +export const parsePosition = (value: unknown) => { + if (value === undefined) return undefined; + if (typeof value !== 'string') throw new CliArgumentError('Position must be x,y'); + const [x, y, extra] = value.split(',').map(Number); + if (extra !== undefined || !Number.isFinite(x) || !Number.isFinite(y)) { + throw new CliArgumentError('Position must be x,y'); + } + return { x, y }; +}; + +export const updateNode = async ( + input: Record, + context: CliContext +): Promise => { + let catchError: boolean | undefined; + if (input.catchError === true) catchError = true; + if (input.noCatchError === true) catchError = false; + return runMutation({ + input, + context, + command: { + type: 'node.update', + nodeId: requireString(input, 'node'), + name: typeof input.name === 'string' ? input.name : undefined, + position: parsePosition(input.position), + catchError + } + }); +}; + +export const moveNode = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'node.move', + nodeId: requireString(input, 'node'), + position: parsePosition(input.position), + parentNodeId: + typeof input.parent === 'string' ? input.parent : input.root === true ? null : undefined + } + }); + +export const cloneNode = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'node.clone', + sourceNodeId: requireString(input, 'node'), + nodeId: requireString(input, 'id'), + position: parsePosition(input.position), + offset: parsePosition(input.offset) + } + }); + +export const removeNode = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { type: 'node.remove', nodeId: requireString(input, 'node') } + }); + +export const addNode = async ( + input: Record, + context: CliContext +): Promise => { + const after = input.after; + if (after !== undefined && typeof after !== 'string') { + throw new CliArgumentError('--after must be an execution source'); + } + return runMutation({ + input, + context, + command: { + type: 'node.add', + nodeId: requireString(input, 'node'), + template: parseNodeTemplateRef(requireString(input, 'template')), + name: typeof input.name === 'string' ? input.name : undefined, + position: parsePosition(input.position), + parentNodeId: typeof input.parent === 'string' ? input.parent : undefined, + connectFrom: after ? parseExecutionSourcePortRef(after) : undefined + } + }); +}; + +export const insertNode = async ( + input: Record, + context: CliContext +): Promise => { + const target = parseExecutionTargetPortRef(requireString(input, 'to')); + if (target.kind !== 'target') { + throw new CliArgumentError('node insert only supports a normal target port'); + } + return runMutation({ + input, + context, + command: { + type: 'node.insert', + nodeId: requireString(input, 'id'), + template: parseNodeTemplateRef(requireString(input, 'template')), + from: parseExecutionSourcePortRef(requireString(input, 'from')), + to: target, + position: parsePosition(input.position) + } + }); +}; diff --git a/packages/workflow-cli/src/commands/output.ts b/packages/workflow-cli/src/commands/output.ts new file mode 100644 index 000000000000..920152e535a6 --- /dev/null +++ b/packages/workflow-cli/src/commands/output.ts @@ -0,0 +1,52 @@ +import type { WorkflowIOValueTypeEnum } from '@fastgpt/workflow-core'; +import { FlowNodeOutputTypeEnum } from '@fastgpt/workflow-core'; +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { requireString, runMutation } from './helpers'; + +export const listOutputs = async ( + input: Record, + context: CliContext +): Promise => { + const nodeId = requireString(input, 'node'); + const document = await readWorkflowFile(context.dir); + const node = document.nodes.find((item) => item.nodeId === nodeId); + return { changed: false, result: node?.outputs ?? [] }; +}; + +export const addOutput = async ( + input: Record, + context: CliContext +): Promise => { + const key = requireString(input, 'key'); + return runMutation({ + input, + context, + command: { + type: 'output.add', + nodeId: requireString(input, 'node'), + output: { + id: key, + key, + type: FlowNodeOutputTypeEnum.dynamic, + valueType: requireString(input, 'valueType') as WorkflowIOValueTypeEnum, + label: typeof input.label === 'string' ? input.label : key, + description: typeof input.description === 'string' ? input.description : undefined + } + } + }); +}; + +export const removeOutput = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'output.remove', + nodeId: requireString(input, 'node'), + outputKey: requireString(input, 'key') + } + }); diff --git a/packages/workflow-cli/src/commands/template.ts b/packages/workflow-cli/src/commands/template.ts new file mode 100644 index 000000000000..3f1ff6b58207 --- /dev/null +++ b/packages/workflow-cli/src/commands/template.ts @@ -0,0 +1,46 @@ +import { + builtinTemplateProvider, + normalizeNodeTemplateDescriptor, + parseNodeTemplateRef, + type NodeTemplateRef +} from '@fastgpt/workflow-core'; +import { createTranslator } from '../i18n'; +import type { CliContext, CliResult } from '../type'; +import { requireString } from './helpers'; + +const resolveDescriptor = async (ref: NodeTemplateRef, context: CliContext) => { + const resolved = await builtinTemplateProvider.resolve(ref, { locale: context.locale }); + return normalizeNodeTemplateDescriptor({ + template: resolved.template, + templateRef: ref, + automationMeta: resolved.automationMeta, + translate: createTranslator(context.locale) + }); +}; + +export const listTemplates = async ( + _input: Record, + context: CliContext +): Promise => { + const refs = await builtinTemplateProvider.list({ locale: context.locale }); + return { + changed: false, + result: await Promise.all(refs.map((ref) => resolveDescriptor(ref, context))) + }; +}; + +export const showTemplate = async ( + input: Record, + context: CliContext +): Promise => ({ + changed: false, + result: await resolveDescriptor(parseNodeTemplateRef(requireString(input, 'template')), context) +}); + +export const findDescriptorForNode = async (flowNodeType: string, context: CliContext) => { + const refs = await builtinTemplateProvider.list({ locale: context.locale }); + for (const ref of refs) { + const descriptor = await resolveDescriptor(ref, context); + if (descriptor.flowNodeType === flowNodeType) return descriptor; + } +}; diff --git a/packages/workflow-cli/src/commands/tool.ts b/packages/workflow-cli/src/commands/tool.ts new file mode 100644 index 000000000000..1754f0d112f6 --- /dev/null +++ b/packages/workflow-cli/src/commands/tool.ts @@ -0,0 +1,54 @@ +import { parseNodeTemplateRef } from '@fastgpt/workflow-core'; +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { requireString, runMutation } from './helpers'; +import { parsePosition } from './node'; + +export const listTools = async ( + input: Record, + context: CliContext +): Promise => { + const toolCallNodeId = requireString(input, 'toolCall'); + const document = await readWorkflowFile(context.dir); + return { + changed: false, + result: document.executionEdges + .filter( + (edge) => edge.source.kind === 'selectedTools' && edge.source.nodeId === toolCallNodeId + ) + .map((edge) => document.nodes.find((node) => node.nodeId === edge.target.nodeId)) + .filter(Boolean) + }; +}; + +export const attachTool = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'tool.attach', + toolCallNodeId: requireString(input, 'toolCall'), + toolNodeId: typeof input.toolNode === 'string' ? input.toolNode : undefined, + template: + typeof input.template === 'string' ? parseNodeTemplateRef(input.template) : undefined, + newNodeId: typeof input.id === 'string' ? input.id : undefined, + position: parsePosition(input.position) + } + }); + +export const detachTool = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { + type: 'tool.detach', + toolCallNodeId: requireString(input, 'toolCall'), + toolNodeId: requireString(input, 'toolNode') + } + }); diff --git a/packages/workflow-cli/src/commands/validate.ts b/packages/workflow-cli/src/commands/validate.ts new file mode 100644 index 000000000000..cb53599e9d73 --- /dev/null +++ b/packages/workflow-cli/src/commands/validate.ts @@ -0,0 +1,24 @@ +import { + collectWorkflowBindings, + getWorkflowBindingDiagnostics, + validateWorkflow +} from '@fastgpt/workflow-core'; +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { assertNoValidationErrors } from './helpers'; + +export const validateDocument = async ( + _input: Record, + context: CliContext +): Promise => { + const document = await readWorkflowFile(context.dir); + const diagnostics = validateWorkflow(document); + assertNoValidationErrors(diagnostics); + const bindings = collectWorkflowBindings(document); + const bindingDiagnostics = getWorkflowBindingDiagnostics(bindings); + return { + changed: false, + result: { valid: true, executable: bindings.length === 0, diagnostics, bindings }, + warnings: bindingDiagnostics + }; +}; diff --git a/packages/workflow-cli/src/commands/variable.ts b/packages/workflow-cli/src/commands/variable.ts new file mode 100644 index 000000000000..a6eceb719a18 --- /dev/null +++ b/packages/workflow-cli/src/commands/variable.ts @@ -0,0 +1,247 @@ +import { + VariableItemTypeSchema, + VariableInputEnum, + WorkflowIOValueTypeEnum, + textInputVariableValueTypes, + variableMap, + type VariableItemType +} from '@fastgpt/workflow-core'; +import { readFile } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { ZodError } from 'zod'; +import { CliArgumentError } from '../error'; +import { readWorkflowFile } from '../io/workflowFile'; +import type { CliContext, CliResult } from '../type'; +import { readInputValue, requireString, runMutation } from './helpers'; + +const valueOptionKeys = ['value', 'valueJson', 'valueFile', 'valueEnv'] as const; +const hasValueOption = (input: Record) => + valueOptionKeys.some((key) => input[key] !== undefined); + +const VariableConfigSchema = VariableItemTypeSchema.partial() + .omit({ + key: true, + label: true, + description: true, + type: true, + valueType: true, + required: true, + defaultValue: true + }) + .strict(); + +const normalizeVariableInputType = (type: unknown) => { + if (type === 'external') return VariableInputEnum.custom; + return typeof type === 'string' ? (type as VariableInputEnum) : undefined; +}; + +const getVariableInputType = (valueType: WorkflowIOValueTypeEnum) => { + if (valueType === WorkflowIOValueTypeEnum.number) return VariableInputEnum.numberInput; + if (valueType === WorkflowIOValueTypeEnum.boolean) return VariableInputEnum.switch; + if (valueType === WorkflowIOValueTypeEnum.arrayString) return VariableInputEnum.multipleSelect; + return VariableInputEnum.input; +}; + +const specialOptionalTypes = new Set([ + VariableInputEnum.custom, + VariableInputEnum.internal, + VariableInputEnum.switch +]); + +/** 校验显式交互类型与数据结构,保持 CLI 和 Web 变量编辑器的约束一致。 */ +const assertVariableTypeCompatibility = ({ + type, + valueType +}: { + type: VariableInputEnum; + valueType: WorkflowIOValueTypeEnum; +}) => { + if (type === VariableInputEnum.custom || type === VariableInputEnum.internal) return; + if (type === VariableInputEnum.input) { + if (!textInputVariableValueTypes.includes(valueType)) { + throw new CliArgumentError('--type input does not support this --value-type', { + type, + valueType + }); + } + return; + } + + const config = (variableMap as Partial)[type]; + if (config && config.defaultValueType !== valueType) { + throw new CliArgumentError('--type and --value-type are incompatible', { + type, + valueType, + expectedValueType: config.defaultValueType + }); + } +}; + +const parseJson = (value: string, option: string) => { + try { + return JSON.parse(value) as unknown; + } catch { + throw new CliArgumentError(`${option} must contain valid JSON`); + } +}; + +const parseNumberOption = (input: Record, key: string) => { + if (input[key] === undefined) return undefined; + const value = Number(input[key]); + if (!Number.isFinite(value)) { + throw new CliArgumentError( + `--${key.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)} must be a number` + ); + } + return value; +}; + +/** 读取完整类型配置,并让常用快捷参数覆盖 JSON 配置中的同名字段。 */ +const readVariableConfig = async ( + input: Record, + context: CliContext +): Promise> => { + const rawConfig = await (async () => { + if (typeof input.configJson === 'string') return parseJson(input.configJson, '--config-json'); + if (typeof input.configFile === 'string') { + const content = await readFile(resolve(context.cwd, input.configFile), 'utf8'); + return parseJson(content, '--config-file'); + } + return {}; + })(); + + const maxLength = parseNumberOption(input, 'maxLength'); + if (maxLength !== undefined && (!Number.isInteger(maxLength) || maxLength < 0)) { + throw new CliArgumentError('--max-length must be a non-negative integer'); + } + + const shortcuts = { + list: + typeof input.optionsJson === 'string' + ? parseJson(input.optionsJson, '--options-json') + : undefined, + min: parseNumberOption(input, 'min'), + max: parseNumberOption(input, 'max'), + maxLength, + timeGranularity: typeof input.timeGranularity === 'string' ? input.timeGranularity : undefined + }; + + try { + return VariableConfigSchema.parse({ + ...(rawConfig as Record), + ...Object.fromEntries(Object.entries(shortcuts).filter(([, value]) => value !== undefined)) + }); + } catch (error) { + if (error instanceof ZodError) { + throw new CliArgumentError('Variable type config is invalid', { issues: error.issues }); + } + throw error; + } +}; + +const getRequired = (input: Record) => { + if (input.required === true) return true; + if (input.optional === true) return false; + return undefined; +}; + +export const listVariables = async ( + _input: Record, + context: CliContext +): Promise => ({ + changed: false, + result: (await readWorkflowFile(context.dir)).chatConfig.variables ?? [] +}); + +export const addVariable = async ( + input: Record, + context: CliContext +): Promise => { + const key = requireString(input, 'key'); + const valueType = requireString(input, 'valueType') as WorkflowIOValueTypeEnum; + const type = normalizeVariableInputType(input.type) ?? getVariableInputType(valueType); + assertVariableTypeCompatibility({ type, valueType }); + if (input.required === true && specialOptionalTypes.has(type)) { + throw new CliArgumentError('--required is not supported for this variable type', { type }); + } + const defaultValue = hasValueOption(input) + ? await readInputValue({ input, context, valueType }) + : undefined; + const config = await readVariableConfig(input, context); + const variable: VariableItemType = { + ...config, + key, + label: typeof input.label === 'string' ? input.label : key, + description: typeof input.description === 'string' ? input.description : '', + valueType, + type, + required: specialOptionalTypes.has(type) ? false : input.required === true, + defaultValue + }; + return runMutation({ input, context, command: { type: 'variable.add', variable } }); +}; + +export const updateVariable = async ( + input: Record, + context: CliContext +): Promise => { + const valueType = + typeof input.valueType === 'string' ? (input.valueType as WorkflowIOValueTypeEnum) : undefined; + const document = await readWorkflowFile(context.dir); + const currentVariable = document.chatConfig.variables?.find( + (variable) => variable.key === input.key + ); + const explicitType = normalizeVariableInputType(input.type); + const inferredType = (() => { + if (!valueType || !currentVariable?.valueType) return undefined; + if (currentVariable.type !== getVariableInputType(currentVariable.valueType)) return undefined; + return getVariableInputType(valueType); + })(); + const type = explicitType ?? inferredType; + const nextType = type ?? currentVariable?.type; + const nextValueType = valueType ?? currentVariable?.valueType; + if ((explicitType || valueType) && nextType && nextValueType) { + assertVariableTypeCompatibility({ type: nextType, valueType: nextValueType }); + } + if (input.required === true && nextType && specialOptionalTypes.has(nextType)) { + throw new CliArgumentError('--required is not supported for this variable type', { + type: nextType + }); + } + const required = (() => { + const requested = getRequired(input); + if (type && nextType && specialOptionalTypes.has(nextType)) return false; + return requested; + })(); + const config = await readVariableConfig(input, context); + const patch: Partial = { + ...config, + key: typeof input.newKey === 'string' ? input.newKey : undefined, + label: typeof input.label === 'string' ? input.label : undefined, + description: typeof input.description === 'string' ? input.description : undefined, + valueType, + type, + required, + defaultValue: hasValueOption(input) + ? await readInputValue({ input, context, valueType: nextValueType }) + : undefined + }; + const cleanPatch = Object.fromEntries( + Object.entries(patch).filter(([, value]) => value !== undefined) + ) as Partial; + return runMutation({ + input, + context, + command: { type: 'variable.update', key: requireString(input, 'key'), patch: cleanPatch } + }); +}; + +export const removeVariable = async ( + input: Record, + context: CliContext +): Promise => + runMutation({ + input, + context, + command: { type: 'variable.remove', key: requireString(input, 'key') } + }); diff --git a/packages/workflow-cli/src/error.ts b/packages/workflow-cli/src/error.ts new file mode 100644 index 000000000000..063b4e3a7892 --- /dev/null +++ b/packages/workflow-cli/src/error.ts @@ -0,0 +1,11 @@ +export class CliArgumentError extends Error { + readonly code = 'CLI_ARGUMENT_INVALID'; + + constructor( + message: string, + readonly params?: Record + ) { + super(message); + this.name = 'CliArgumentError'; + } +} diff --git a/packages/workflow-cli/src/help.ts b/packages/workflow-cli/src/help.ts new file mode 100644 index 000000000000..0ff1860031c5 --- /dev/null +++ b/packages/workflow-cli/src/help.ts @@ -0,0 +1,19 @@ +import { cliCommandRegistry, globalCliOptions, getCommandName } from './registry'; +import type { CliCommandDefinition } from './type'; + +const formatOptions = (definition?: CliCommandDefinition) => + [...globalCliOptions, ...(definition?.options ?? [])] + .filter((option) => !['--help', '--version'].includes(option.name)) + .map( + (option) => + ` ${option.name}${option.value ? ' ' : ''}${option.required ? ' (required)' : ''}\n ${option.description}` + ) + .join('\n'); + +export const renderHelp = (definition?: CliCommandDefinition) => { + if (definition) { + return `Usage: fastgpt-workflow ${getCommandName(definition)} [options]\n\nOptions:\n${formatOptions(definition)}`; + } + const commands = cliCommandRegistry.map((item) => ` ${getCommandName(item)}`).join('\n'); + return `Usage: fastgpt-workflow [options]\n\nCommands:\n${commands}\n\nGlobal options:\n${formatOptions()}`; +}; diff --git a/packages/workflow-cli/src/i18n.ts b/packages/workflow-cli/src/i18n.ts new file mode 100644 index 000000000000..768373c76dbf --- /dev/null +++ b/packages/workflow-cli/src/i18n.ts @@ -0,0 +1,29 @@ +import enApp from '@fastgpt/web/i18n/en/app.json'; +import enCommon from '@fastgpt/web/i18n/en/common.json'; +import enWorkflow from '@fastgpt/web/i18n/en/workflow.json'; +import zhCnApp from '@fastgpt/web/i18n/zh-CN/app.json'; +import zhCnCommon from '@fastgpt/web/i18n/zh-CN/common.json'; +import zhCnWorkflow from '@fastgpt/web/i18n/zh-CN/workflow.json'; +import zhHantApp from '@fastgpt/web/i18n/zh-Hant/app.json'; +import zhHantCommon from '@fastgpt/web/i18n/zh-Hant/common.json'; +import zhHantWorkflow from '@fastgpt/web/i18n/zh-Hant/workflow.json'; + +type TranslationDictionary = Record; + +const resources: Record> = { + en: { app: enApp, common: enCommon, workflow: enWorkflow }, + 'zh-CN': { app: zhCnApp, common: zhCnCommon, workflow: zhCnWorkflow }, + 'zh-Hant': { app: zhHantApp, common: zhHantCommon, workflow: zhHantWorkflow } +}; + +/** 使用现有 Web 资源解析模板 key;未知 locale/key 明确回退英文或原值。 */ +export const createTranslator = (locale: string) => { + const localeResources = resources[locale] ?? resources.en; + return (value: string) => { + const separatorIndex = value.indexOf(':'); + if (separatorIndex <= 0) return value; + const namespace = value.slice(0, separatorIndex); + const key = value.slice(separatorIndex + 1); + return localeResources[namespace]?.[key] ?? resources.en[namespace]?.[key] ?? value; + }; +}; diff --git a/packages/workflow-cli/src/index.ts b/packages/workflow-cli/src/index.ts new file mode 100644 index 000000000000..569539c074f1 --- /dev/null +++ b/packages/workflow-cli/src/index.ts @@ -0,0 +1,9 @@ +export * from './error'; +export * from './help'; +export * from './i18n'; +export * from './io/workflowFile'; +export * from './output/render'; +export * from './parser'; +export * from './registry'; +export * from './run'; +export * from './type'; diff --git a/packages/workflow-cli/src/io/workflowFile.ts b/packages/workflow-cli/src/io/workflowFile.ts new file mode 100644 index 000000000000..d63a0fc3d1b4 --- /dev/null +++ b/packages/workflow-cli/src/io/workflowFile.ts @@ -0,0 +1,59 @@ +import { + WorkflowDocumentSchema, + normalizeWorkflowDocument, + type WorkflowDocument +} from '@fastgpt/workflow-core'; +import { mkdir, open, readFile, rename, rm } from 'node:fs/promises'; +import { basename, dirname, join, resolve } from 'node:path'; +import { CliArgumentError } from '../error'; + +export const WORKFLOW_FILE_NAME = 'workflow.json'; + +export const parseWorkflowDocument = (input: unknown): WorkflowDocument => + WorkflowDocumentSchema.parse(input); + +export const serializeWorkflowDocument = (document: WorkflowDocument) => + `${JSON.stringify(normalizeWorkflowDocument(WorkflowDocumentSchema.parse(document)), null, 2)}\n`; + +export const getWorkflowFilePath = (dir: string) => join(resolve(dir), WORKFLOW_FILE_NAME); + +export const readWorkflowFile = async (dir: string): Promise => { + const content = await readFile(getWorkflowFilePath(dir), 'utf8'); + try { + return parseWorkflowDocument(JSON.parse(content)); + } catch (error) { + if (error instanceof SyntaxError) { + throw new CliArgumentError('workflow.json must contain valid JSON'); + } + throw error; + } +}; + +/** 同目录临时文件 + fsync + rename,失败时不会留下半写入目标文件。 */ +export const writeFileAtomic = async (filePath: string, content: string) => { + const absolutePath = resolve(filePath); + const directory = dirname(absolutePath); + const temporaryPath = join( + directory, + `.${basename(absolutePath)}.${process.pid}.${Date.now()}.tmp` + ); + await mkdir(directory, { recursive: true }); + + const handle = await open(temporaryPath, 'wx'); + try { + await handle.writeFile(content, 'utf8'); + await handle.sync(); + await handle.close(); + await rename(temporaryPath, absolutePath); + } catch (error) { + await handle.close().catch(() => {}); + await rm(temporaryPath, { force: true }).catch(() => {}); + throw error; + } +}; + +export const writeWorkflowFileAtomic = async (dir: string, document: WorkflowDocument) => + writeFileAtomic(getWorkflowFilePath(dir), serializeWorkflowDocument(document)); + +export const writeJsonFileAtomic = async (filePath: string, value: unknown) => + writeFileAtomic(filePath, `${JSON.stringify(value, null, 2)}\n`); diff --git a/packages/workflow-cli/src/output/render.ts b/packages/workflow-cli/src/output/render.ts new file mode 100644 index 000000000000..817482922480 --- /dev/null +++ b/packages/workflow-cli/src/output/render.ts @@ -0,0 +1,76 @@ +import type { CliFormat, CliResult } from '../type'; + +export const CLI_OUTPUT_SCHEMA_VERSION = 'fastgpt-workflow-cli-result/v1' as const; + +export type CliSuccessEnvelope = { + schemaVersion: typeof CLI_OUTPUT_SCHEMA_VERSION; + ok: true; + command: string; + changed: boolean; + checksum?: string; + result?: unknown; + changes?: unknown[]; + warnings: unknown[]; +}; + +export type CliErrorEnvelope = { + schemaVersion: typeof CLI_OUTPUT_SCHEMA_VERSION; + ok: false; + command: string; + changed: false; + errors: Array<{ code: string; diagnostics?: unknown; params?: unknown }>; +}; + +export const createSuccessEnvelope = (command: string, result: CliResult): CliSuccessEnvelope => ({ + schemaVersion: CLI_OUTPUT_SCHEMA_VERSION, + ok: true, + command, + changed: result.changed, + checksum: result.checksum, + result: result.result, + changes: result.changes, + warnings: result.warnings ?? [] +}); + +export const renderSuccess = ({ + command, + result, + format +}: { + command: string; + result: CliResult; + format: CliFormat; +}) => { + if (format === 'json') return JSON.stringify(createSuccessEnvelope(command, result)); + if (result.result !== undefined) { + return typeof result.result === 'string' + ? result.result + : JSON.stringify(result.result, null, 2); + } + return result.message ?? 'OK'; +}; + +export const renderError = ({ + command, + code, + diagnostics, + params, + format +}: { + command: string; + code: string; + diagnostics?: unknown; + params?: unknown; + format: CliFormat; +}) => { + const envelope: CliErrorEnvelope = { + schemaVersion: CLI_OUTPUT_SCHEMA_VERSION, + ok: false, + command, + changed: false, + errors: [{ code, diagnostics, params }] + }; + return format === 'json' + ? JSON.stringify(envelope) + : `${code}${diagnostics ? `\n${JSON.stringify(diagnostics, null, 2)}` : ''}`; +}; diff --git a/packages/workflow-cli/src/parser.ts b/packages/workflow-cli/src/parser.ts new file mode 100644 index 000000000000..143ae879fc5c --- /dev/null +++ b/packages/workflow-cli/src/parser.ts @@ -0,0 +1,124 @@ +import { resolve } from 'node:path'; +import { ZodError } from 'zod'; +import { CliArgumentError } from './error'; +import { cliCommandRegistry, globalCliOptions, getCommandName } from './registry'; +import type { CliCommandDefinition, CliContext, CliOptionDefinition } from './type'; + +const toInputKey = (optionName: string) => + optionName.slice(2).replace(/-([a-z])/g, (_, character: string) => character.toUpperCase()); + +const findOption = (name: string, options: readonly CliOptionDefinition[]) => + options.find((option) => option.name === name); + +export type ParsedCliCommand = { + definition: CliCommandDefinition; + input: Record; + context: CliContext; + help: boolean; +}; + +/** Registry 是命令、参数校验和帮助文本的唯一来源。 */ +export const parseCliArgs = ({ + argv, + cwd, + env +}: { + argv: string[]; + cwd: string; + env: NodeJS.ProcessEnv; +}): ParsedCliCommand => { + const positional: string[] = []; + const rawOptions: Record = {}; + for (let index = 0; index < argv.length; index += 1) { + const token = argv[index]; + if (!token.startsWith('--')) { + positional.push(token); + continue; + } + const option = findOption(token, [ + ...globalCliOptions, + ...cliCommandRegistry.flatMap((definition) => definition.options) + ]); + if (!option) throw new CliArgumentError(`Unknown option: ${token}`); + if (option.value) { + const value = argv[index + 1]; + if (value === undefined || value.startsWith('--')) { + throw new CliArgumentError(`Option requires a value: ${token}`); + } + rawOptions[toInputKey(token)] = value; + index += 1; + } else { + rawOptions[toInputKey(token)] = true; + } + } + + const definition = cliCommandRegistry.find( + (item) => + item.path.length === positional.length && + item.path.every((part, index) => positional[index] === part) + ); + if (!definition) { + throw new CliArgumentError( + positional.length === 0 ? 'Command is required' : `Unknown command: ${positional.join(' ')}` + ); + } + + const allowedCommandOptions = new Set(definition.options.map((item) => toInputKey(item.name))); + const globalOptionKeys = new Set(globalCliOptions.map((item) => toInputKey(item.name))); + for (const key of Object.keys(rawOptions)) { + if (!globalOptionKeys.has(key) && !allowedCommandOptions.has(key)) { + throw new CliArgumentError(`Option is not valid for ${getCommandName(definition)}`, { + option: key + }); + } + } + + const commandInput = Object.fromEntries( + Object.entries(rawOptions).filter(([key]) => allowedCommandOptions.has(key)) + ); + let input: Record; + if (rawOptions.help === true) { + input = {}; + } else { + try { + input = definition.inputSchema.parse(commandInput) as Record; + } catch (error) { + if (error instanceof ZodError) { + throw new CliArgumentError('Command options are invalid', { issues: error.issues }); + } + throw error; + } + } + + const format = rawOptions.format ?? env.FASTGPT_WORKFLOW_FORMAT ?? 'text'; + if (format !== 'text' && format !== 'json') { + throw new CliArgumentError('--format must be text or json'); + } + const dirValue = rawOptions.dir ?? env.FASTGPT_WORKFLOW_DIR ?? '.'; + if (typeof dirValue !== 'string') throw new CliArgumentError('--dir must be a path'); + + return { + definition, + input, + help: rawOptions.help === true, + context: { + cwd, + dir: resolve(cwd, dirValue), + format, + locale: + typeof rawOptions.locale === 'string' + ? rawOptions.locale + : (env.FASTGPT_WORKFLOW_LOCALE ?? 'en'), + quiet: rawOptions.quiet === true, + color: rawOptions.noColor !== true, + env, + readStdin: async () => { + const chunks: Buffer[] = []; + for await (const chunk of process.stdin) { + chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)); + } + return Buffer.concat(chunks).toString('utf8'); + } + } + }; +}; diff --git a/packages/workflow-cli/src/registry.ts b/packages/workflow-cli/src/registry.ts new file mode 100644 index 000000000000..55fb6d942e2b --- /dev/null +++ b/packages/workflow-cli/src/registry.ts @@ -0,0 +1,954 @@ +import z from 'zod'; +import { VariableInputEnum, WorkflowIOValueTypeEnum } from '@fastgpt/workflow-core'; +import { buildDocument, importDocument, initDocument, inspectDocument } from './commands/document'; +import { + addInput, + listAvailableInputReferences, + listInputs, + refInput, + removeInput, + setInput, + showInput, + unsetInputValue +} from './commands/input'; +import { + addNode, + cloneNode, + listNodes, + moveNode, + removeNode, + showNode, + updateNode, + insertNode +} from './commands/node'; +import { connectEdge, disconnectEdge, listEdges, reconnectEdge } from './commands/edge'; +import { setMeta, showMeta } from './commands/meta'; +import { getConfig, listConfig, setConfig, unsetConfig } from './commands/config'; +import { addVariable, listVariables, removeVariable, updateVariable } from './commands/variable'; +import { listTemplates, showTemplate } from './commands/template'; +import { validateDocument } from './commands/validate'; +import { addOutput, listOutputs, removeOutput } from './commands/output'; +import { attachTool, detachTool, listTools } from './commands/tool'; +import { listChildren } from './commands/container'; +import type { CliCommandDefinition, CliOptionDefinition } from './type'; + +const option = ( + name: string, + description: string, + config: Partial> = {} +): CliOptionDefinition => ({ + name, + description, + value: config.value ?? true, + required: config.required +}); + +const emptySchema = z.object({}).strict(); +const valueOptionShape = { + value: z.string().optional(), + valueJson: z.string().optional(), + valueFile: z.string().optional(), + valueEnv: z.string().optional() +}; +const valueOptions = [ + option('--value', 'Scalar value'), + option('--value-json', 'JSON value'), + option('--value-file', 'Read a UTF-8 value from a file'), + option('--value-env', 'Read a value from an environment variable') +]; +const getValueOptionCount = (value: Record) => + [value.value, value.valueJson, value.valueFile, value.valueEnv].filter( + (item) => item !== undefined + ).length; +const variableTypeSchema = z.enum([...Object.values(VariableInputEnum), 'external']); +const variableConfigOptionShape = { + configJson: z.string().min(1).optional(), + configFile: z.string().min(1).optional(), + optionsJson: z.string().min(1).optional(), + min: z.string().min(1).optional(), + max: z.string().min(1).optional(), + maxLength: z.string().min(1).optional(), + timeGranularity: z.enum(['day', 'hour', 'minute', 'second']).optional() +}; +const variableConfigOptions = [ + option('--config-json', 'Type-specific variable config as JSON'), + option('--config-file', 'Read type-specific variable config from a JSON file'), + option('--options-json', 'Select options as a JSON array'), + option('--min', 'Minimum numeric value'), + option('--max', 'Maximum numeric value'), + option('--max-length', 'Maximum text length'), + option('--time-granularity', 'Time granularity: day, hour, minute or second') +]; +const getVariableConfigFileOptionCount = (value: Record) => + [value.configJson, value.configFile].filter((item) => item !== undefined).length; +export const cliCommandRegistry: CliCommandDefinition[] = [ + { + path: ['init'], + introducedIn: 'PR1', + kind: 'localMutation', + inputSchema: z + .object({ name: z.string().min(1).optional(), dryRun: z.literal(true).optional() }) + .strict(), + options: [ + option('--name', 'Workflow name'), + option('--dry-run', 'Return the initialized document without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: initDocument + }, + { + path: ['build'], + introducedIn: 'PR1', + kind: 'artifact', + inputSchema: z.object({ output: z.string().min(1) }).strict(), + options: [option('--output', 'StoreWorkflow output path', { required: true })], + supportsDryRun: false, + confirm: 'none', + handler: buildDocument + }, + { + path: ['import'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ input: z.string().min(1), dryRun: z.literal(true).optional() }) + .strict(), + options: [ + option('--input', 'StoreWorkflow input path', { required: true }), + option('--dry-run', 'Return the imported document without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: importDocument + }, + { + path: ['inspect'], + introducedIn: 'PR2', + kind: 'query', + inputSchema: emptySchema, + options: [], + supportsDryRun: false, + confirm: 'none', + handler: inspectDocument + }, + { + path: ['meta', 'show'], + introducedIn: 'PR2', + kind: 'query', + inputSchema: emptySchema, + options: [], + supportsDryRun: false, + confirm: 'none', + handler: showMeta + }, + { + path: ['meta', 'set'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + name: z.string().min(1).optional(), + intro: z.string().optional(), + dryRun: z.literal(true).optional() + }) + .strict() + .refine((value) => value.name !== undefined || value.intro !== undefined), + options: [ + option('--name', 'Application name'), + option('--intro', 'Application introduction'), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: setMeta + }, + { + path: ['config', 'list'], + introducedIn: 'PR2', + kind: 'query', + inputSchema: emptySchema, + options: [], + supportsDryRun: false, + confirm: 'none', + handler: listConfig + }, + { + path: ['config', 'get'], + introducedIn: 'PR2', + kind: 'query', + inputSchema: z.object({ path: z.string().min(1) }).strict(), + options: [option('--path', 'Allowlisted ChatConfig path', { required: true })], + supportsDryRun: false, + confirm: 'none', + handler: getConfig + }, + { + path: ['config', 'set'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + path: z.string().min(1), + ...valueOptionShape, + dryRun: z.literal(true).optional() + }) + .strict() + .refine((value) => getValueOptionCount(value) === 1), + options: [ + option('--path', 'Allowlisted ChatConfig path', { required: true }), + ...valueOptions, + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: setConfig + }, + { + path: ['config', 'unset'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z.object({ path: z.string().min(1), dryRun: z.literal(true).optional() }).strict(), + options: [ + option('--path', 'Allowlisted ChatConfig path', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: unsetConfig + }, + { + path: ['variable', 'list'], + introducedIn: 'PR2', + kind: 'query', + inputSchema: emptySchema, + options: [], + supportsDryRun: false, + confirm: 'none', + handler: listVariables + }, + { + path: ['variable', 'add'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + key: z.string().min(1), + type: variableTypeSchema.optional(), + valueType: z.enum(WorkflowIOValueTypeEnum), + label: z.string().min(1).optional(), + description: z.string().optional(), + required: z.literal(true).optional(), + ...variableConfigOptionShape, + ...valueOptionShape, + dryRun: z.literal(true).optional() + }) + .strict() + .superRefine((value, context) => { + if (getValueOptionCount(value) > 1) { + context.addIssue({ code: 'custom', message: 'Value options are exclusive' }); + } + if (getVariableConfigFileOptionCount(value) > 1) { + context.addIssue({ code: 'custom', message: 'Config options are exclusive' }); + } + }), + options: [ + option('--key', 'Variable key', { required: true }), + option('--type', 'Variable input type; external is an alias for custom'), + option('--value-type', 'Workflow value type', { required: true }), + option('--label', 'Variable label'), + option('--description', 'Variable description'), + option('--required', 'Mark the variable as required', { value: false }), + ...variableConfigOptions, + ...valueOptions, + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: addVariable + }, + { + path: ['variable', 'update'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + key: z.string().min(1), + newKey: z.string().min(1).optional(), + type: variableTypeSchema.optional(), + valueType: z.enum(WorkflowIOValueTypeEnum).optional(), + label: z.string().min(1).optional(), + description: z.string().optional(), + required: z.literal(true).optional(), + optional: z.literal(true).optional(), + ...variableConfigOptionShape, + ...valueOptionShape, + dryRun: z.literal(true).optional() + }) + .strict() + .superRefine((value, context) => { + if (value.required && value.optional) { + context.addIssue({ code: 'custom', message: '--required and --optional are exclusive' }); + } + if (getValueOptionCount(value) > 1) { + context.addIssue({ code: 'custom', message: 'Value options are exclusive' }); + } + if (getVariableConfigFileOptionCount(value) > 1) { + context.addIssue({ code: 'custom', message: 'Config options are exclusive' }); + } + if ( + [ + value.newKey, + value.type, + value.valueType, + value.label, + value.description, + value.required, + value.optional, + value.configJson, + value.configFile, + value.optionsJson, + value.min, + value.max, + value.maxLength, + value.timeGranularity, + value.value, + value.valueJson, + value.valueFile, + value.valueEnv + ].every((item) => item === undefined) + ) { + context.addIssue({ code: 'custom', message: 'At least one update field is required' }); + } + }), + options: [ + option('--key', 'Existing variable key', { required: true }), + option('--new-key', 'New variable key'), + option('--type', 'Variable input type; external is an alias for custom'), + option('--value-type', 'Workflow value type'), + option('--label', 'Variable label'), + option('--description', 'Variable description'), + option('--required', 'Mark the variable as required', { value: false }), + option('--optional', 'Mark the variable as optional', { value: false }), + ...variableConfigOptions, + ...valueOptions, + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: updateVariable + }, + { + path: ['variable', 'remove'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z.object({ key: z.string().min(1), dryRun: z.literal(true).optional() }).strict(), + options: [ + option('--key', 'Variable key', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: removeVariable + }, + { + path: ['template', 'list'], + introducedIn: 'PR1', + kind: 'query', + inputSchema: z.object({ source: z.literal('builtin').optional() }).strict(), + options: [option('--source', 'Template source; PR1 supports builtin only')], + supportsDryRun: false, + confirm: 'none', + handler: listTemplates + }, + { + path: ['template', 'show'], + introducedIn: 'PR1', + kind: 'query', + inputSchema: z.object({ template: z.string().min(1) }).strict(), + options: [option('--template', 'Explicit template reference', { required: true })], + supportsDryRun: false, + confirm: 'none', + handler: showTemplate + }, + { + path: ['node', 'list'], + introducedIn: 'PR1', + kind: 'query', + inputSchema: z.object({ type: z.string().optional(), parent: z.string().optional() }).strict(), + options: [ + option('--type', 'Filter by flow node type'), + option('--parent', 'Filter by parent node') + ], + supportsDryRun: false, + confirm: 'none', + handler: listNodes + }, + { + path: ['node', 'show'], + introducedIn: 'PR1', + kind: 'query', + inputSchema: z.object({ node: z.string().min(1) }).strict(), + options: [option('--node', 'Node ID', { required: true })], + supportsDryRun: false, + confirm: 'none', + handler: showNode + }, + { + path: ['node', 'add'], + introducedIn: 'PR1', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + template: z.string().min(1), + name: z.string().min(1).optional(), + after: z.string().optional(), + parent: z.string().min(1).optional(), + position: z.string().optional(), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--node', 'New node ID', { required: true }), + option('--template', 'Template reference', { required: true }), + option('--name', 'Node name'), + option('--after', 'Connect from a semantic source port'), + option('--parent', 'Create inside a container'), + option('--position', 'Canvas position as x,y'), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: addNode + }, + { + path: ['node', 'update'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + name: z.string().min(1).optional(), + position: z.string().optional(), + catchError: z.literal(true).optional(), + noCatchError: z.literal(true).optional(), + dryRun: z.literal(true).optional() + }) + .strict() + .superRefine((value, context) => { + if (value.catchError && value.noCatchError) { + context.addIssue({ code: 'custom', message: 'Catch error options are exclusive' }); + } + if ( + value.name === undefined && + value.position === undefined && + value.catchError === undefined && + value.noCatchError === undefined + ) { + context.addIssue({ code: 'custom', message: 'At least one update is required' }); + } + }), + options: [ + option('--node', 'Node ID', { required: true }), + option('--name', 'Node name'), + option('--position', 'Canvas position as x,y'), + option('--catch-error', 'Enable catch execution port', { value: false }), + option('--no-catch-error', 'Disable catch execution port', { value: false }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: updateNode + }, + { + path: ['node', 'move'], + introducedIn: 'PR3', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + position: z.string().min(1).optional(), + parent: z.string().min(1).optional(), + root: z.literal(true).optional(), + dryRun: z.literal(true).optional() + }) + .strict() + .superRefine((value, context) => { + if (value.parent && value.root) { + context.addIssue({ code: 'custom', message: '--parent and --root are exclusive' }); + } + if (!value.position && !value.parent && !value.root) { + context.addIssue({ code: 'custom', message: 'A move target is required' }); + } + }), + options: [ + option('--node', 'Node ID', { required: true }), + option('--position', 'Canvas position as x,y'), + option('--parent', 'Move into a container'), + option('--root', 'Move to root scope', { value: false }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: moveNode + }, + { + path: ['node', 'insert'], + introducedIn: 'PR3', + kind: 'localMutation', + inputSchema: z + .object({ + from: z.string().min(1), + to: z.string().min(1), + template: z.string().min(1), + id: z.string().min(1), + position: z.string().optional(), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--from', 'Existing execution source port', { required: true }), + option('--to', 'Existing execution target port', { required: true }), + option('--template', 'Inserted node template', { required: true }), + option('--id', 'Inserted node ID', { required: true }), + option('--position', 'Canvas position as x,y'), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: insertNode + }, + { + path: ['node', 'clone'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + id: z.string().min(1), + position: z.string().optional(), + offset: z.string().optional(), + dryRun: z.literal(true).optional() + }) + .strict() + .refine((value) => !(value.position && value.offset)), + options: [ + option('--node', 'Source node ID', { required: true }), + option('--id', 'Cloned node ID', { required: true }), + option('--position', 'Absolute canvas position as x,y'), + option('--offset', 'Offset from source as x,y'), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: cloneNode + }, + { + path: ['node', 'remove'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z.object({ node: z.string().min(1), dryRun: z.literal(true).optional() }).strict(), + options: [ + option('--node', 'Node ID', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: removeNode + }, + { + path: ['edge', 'list'], + introducedIn: 'PR2', + kind: 'query', + inputSchema: z.object({ node: z.string().optional(), kind: z.string().optional() }).strict(), + options: [option('--node', 'Filter by node ID'), option('--kind', 'Filter by source kind')], + supportsDryRun: false, + confirm: 'none', + handler: listEdges + }, + { + path: ['edge', 'connect'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + from: z.string().min(1), + to: z.string().min(1), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--from', 'Execution source port', { required: true }), + option('--to', 'Execution target port', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: connectEdge + }, + { + path: ['edge', 'disconnect'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + from: z.string().min(1), + to: z.string().min(1), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--from', 'Execution source port', { required: true }), + option('--to', 'Execution target port', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: disconnectEdge + }, + { + path: ['edge', 'reconnect'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + from: z.string().min(1), + oldTo: z.string().min(1), + to: z.string().min(1), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--from', 'Execution source port', { required: true }), + option('--old-to', 'Existing execution target port', { required: true }), + option('--to', 'Replacement execution target port', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: reconnectEdge + }, + { + path: ['input', 'list'], + introducedIn: 'PR3', + kind: 'query', + inputSchema: z.object({ node: z.string().min(1) }).strict(), + options: [option('--node', 'Node ID', { required: true })], + supportsDryRun: false, + confirm: 'none', + handler: listInputs + }, + { + path: ['input', 'show'], + introducedIn: 'PR2', + kind: 'query', + inputSchema: z.object({ node: z.string().min(1), key: z.string().min(1) }).strict(), + options: [ + option('--node', 'Node ID', { required: true }), + option('--key', 'Input key', { required: true }) + ], + supportsDryRun: false, + confirm: 'none', + handler: showInput + }, + { + path: ['input', 'add'], + introducedIn: 'PR3', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + key: z.string().min(1), + valueType: z.enum(WorkflowIOValueTypeEnum), + mode: z.enum(['literal', 'reference', 'both']), + label: z.string().min(1).optional(), + description: z.string().optional(), + required: z.literal(true).optional(), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--node', 'Node ID', { required: true }), + option('--key', 'New input key', { required: true }), + option('--value-type', 'Workflow value type', { required: true }), + option('--mode', 'Input mode: literal, reference or both', { required: true }), + option('--label', 'Input label'), + option('--description', 'Input description'), + option('--required', 'Mark the input as required', { value: false }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: addInput + }, + { + path: ['input', 'remove'], + introducedIn: 'PR3', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + key: z.string().min(1), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--node', 'Node ID', { required: true }), + option('--key', 'Dynamic input key', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: removeInput + }, + { + path: ['input', 'set'], + introducedIn: 'PR1', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + key: z.string().min(1), + value: z.string().optional(), + valueJson: z.string().optional(), + valueFile: z.string().optional(), + valueEnv: z.string().optional(), + dryRun: z.literal(true).optional() + }) + .strict() + .superRefine((value, context) => { + const count = [value.value, value.valueJson, value.valueFile, value.valueEnv].filter( + (item) => item !== undefined + ).length; + if (count !== 1) { + context.addIssue({ + code: 'custom', + message: 'Exactly one of --value, --value-json, --value-file or --value-env is required' + }); + } + }), + options: [ + option('--node', 'Node ID', { required: true }), + option('--key', 'Input key', { required: true }), + option('--value', 'Scalar value'), + option('--value-json', 'JSON value'), + option('--value-file', 'Read a UTF-8 value from a file'), + option('--value-env', 'Read a value from an environment variable'), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: setInput + }, + { + path: ['input', 'ref'], + introducedIn: 'PR1', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + key: z.string().min(1), + from: z.string().min(1), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--node', 'Node ID', { required: true }), + option('--key', 'Input key', { required: true }), + option('--from', 'Variable reference as node.output', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: refInput + }, + { + path: ['input', 'unset'], + introducedIn: 'PR2', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + key: z.string().min(1), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--node', 'Node ID', { required: true }), + option('--key', 'Input key', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: unsetInputValue + }, + { + path: ['input', 'available'], + introducedIn: 'PR2', + kind: 'query', + inputSchema: z.object({ node: z.string().min(1), key: z.string().min(1) }).strict(), + options: [ + option('--node', 'Node ID', { required: true }), + option('--key', 'Input key', { required: true }) + ], + supportsDryRun: false, + confirm: 'none', + handler: listAvailableInputReferences + }, + { + path: ['output', 'list'], + introducedIn: 'PR3', + kind: 'query', + inputSchema: z.object({ node: z.string().min(1) }).strict(), + options: [option('--node', 'Node ID', { required: true })], + supportsDryRun: false, + confirm: 'none', + handler: listOutputs + }, + { + path: ['output', 'add'], + introducedIn: 'PR3', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + key: z.string().min(1), + valueType: z.enum(WorkflowIOValueTypeEnum), + label: z.string().min(1).optional(), + description: z.string().optional(), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--node', 'Node ID', { required: true }), + option('--key', 'Output key', { required: true }), + option('--value-type', 'Workflow value type', { required: true }), + option('--label', 'Output label'), + option('--description', 'Output description'), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: addOutput + }, + { + path: ['output', 'remove'], + introducedIn: 'PR3', + kind: 'localMutation', + inputSchema: z + .object({ + node: z.string().min(1), + key: z.string().min(1), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--node', 'Node ID', { required: true }), + option('--key', 'Output key', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: removeOutput + }, + { + path: ['tool', 'list'], + introducedIn: 'PR3', + kind: 'query', + inputSchema: z.object({ toolCall: z.string().min(1) }).strict(), + options: [option('--tool-call', 'Tool-call node ID', { required: true })], + supportsDryRun: false, + confirm: 'none', + handler: listTools + }, + { + path: ['tool', 'attach'], + introducedIn: 'PR3', + kind: 'localMutation', + inputSchema: z + .object({ + toolCall: z.string().min(1), + template: z.string().min(1).optional(), + toolNode: z.string().min(1).optional(), + id: z.string().min(1).optional(), + position: z.string().optional(), + dryRun: z.literal(true).optional() + }) + .strict() + .superRefine((value, context) => { + if (Boolean(value.template) === Boolean(value.toolNode)) { + context.addIssue({ code: 'custom', message: 'Use --template or --tool-node' }); + } + if (value.template && !value.id) { + context.addIssue({ code: 'custom', message: '--id is required with --template' }); + } + if (value.toolNode && value.id) { + context.addIssue({ code: 'custom', message: '--id only applies to --template' }); + } + }), + options: [ + option('--tool-call', 'Tool-call node ID', { required: true }), + option('--template', 'Create tool node from template'), + option('--tool-node', 'Attach an existing tool node'), + option('--id', 'New tool node ID'), + option('--position', 'Canvas position as x,y'), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: attachTool + }, + { + path: ['tool', 'detach'], + introducedIn: 'PR3', + kind: 'localMutation', + inputSchema: z + .object({ + toolCall: z.string().min(1), + toolNode: z.string().min(1), + dryRun: z.literal(true).optional() + }) + .strict(), + options: [ + option('--tool-call', 'Tool-call node ID', { required: true }), + option('--tool-node', 'Attached tool node ID', { required: true }), + option('--dry-run', 'Return changes without writing', { value: false }) + ], + supportsDryRun: true, + confirm: 'none', + handler: detachTool + }, + { + path: ['container', 'children'], + introducedIn: 'PR3', + kind: 'query', + inputSchema: z.object({ node: z.string().min(1) }).strict(), + options: [option('--node', 'Container node ID', { required: true })], + supportsDryRun: false, + confirm: 'none', + handler: listChildren + }, + { + path: ['validate'], + introducedIn: 'PR1', + kind: 'query', + inputSchema: emptySchema, + options: [], + supportsDryRun: false, + confirm: 'none', + handler: validateDocument + } +]; + +export const globalCliOptions: CliOptionDefinition[] = [ + option('--dir', 'Workflow directory'), + option('--format', 'Output format: text or json'), + option('--locale', 'Descriptor locale'), + option('--no-color', 'Disable ANSI color', { value: false }), + option('--quiet', 'Suppress non-result text', { value: false }), + option('--help', 'Show help', { value: false }), + option('--version', 'Show version', { value: false }) +]; + +export const getCommandName = (definition: CliCommandDefinition) => definition.path.join(' '); diff --git a/packages/workflow-cli/src/run.ts b/packages/workflow-cli/src/run.ts new file mode 100644 index 000000000000..e50d6a6db573 --- /dev/null +++ b/packages/workflow-cli/src/run.ts @@ -0,0 +1,84 @@ +import { WorkflowCommandError, WorkflowValidationError } from '@fastgpt/workflow-core'; +import { ZodError } from 'zod'; +import { CliArgumentError } from './error'; +import { renderHelp } from './help'; +import { renderError, renderSuccess } from './output/render'; +import { parseCliArgs } from './parser'; + +export const runCli = async ({ + argv, + cwd = process.cwd(), + env = process.env, + stdin, + stdout = (value) => process.stdout.write(`${value}\n`), + stderr = (value) => process.stderr.write(`${value}\n`) +}: { + argv: string[]; + cwd?: string; + env?: NodeJS.ProcessEnv; + stdin?: () => Promise; + stdout?: (value: string) => void; + stderr?: (value: string) => void; +}): Promise => { + const formatOptionIndex = argv.lastIndexOf('--format'); + const requestedFormat = formatOptionIndex >= 0 ? argv[formatOptionIndex + 1] : undefined; + let command = + argv + .filter((item) => !item.startsWith('--')) + .slice(0, 2) + .join(' ') || 'unknown'; + let format: 'text' | 'json' = + requestedFormat === 'json' || + (requestedFormat === undefined && env.FASTGPT_WORKFLOW_FORMAT === 'json') + ? 'json' + : 'text'; + try { + if (argv.length === 0 || (argv.length === 1 && argv[0] === '--help')) { + stdout(renderHelp()); + return 0; + } + if (argv.length === 1 && argv[0] === '--version') { + stdout('0.1.0'); + return 0; + } + + const parsed = parseCliArgs({ argv, cwd, env }); + if (stdin) parsed.context.readStdin = stdin; + command = parsed.definition.path.join(' '); + format = parsed.context.format; + if (parsed.help) { + stdout(renderHelp(parsed.definition)); + return 0; + } + const result = await parsed.definition.handler(parsed.input, parsed.context); + stdout(renderSuccess({ command, result, format })); + return 0; + } catch (error) { + const mapped = (() => { + if (error instanceof CliArgumentError || error instanceof ZodError) { + return { + exitCode: 2, + code: error instanceof CliArgumentError ? error.code : 'CLI_ARGUMENT_INVALID', + params: error instanceof CliArgumentError ? error.params : error.issues + }; + } + if (error instanceof WorkflowCommandError) { + return { exitCode: 3, code: error.code, diagnostics: error.diagnostics }; + } + if (error instanceof WorkflowValidationError) { + return { exitCode: 4, code: error.code, diagnostics: error.diagnostics }; + } + return { exitCode: 1, code: 'CLI_INTERNAL_ERROR' }; + })(); + stderr( + renderError({ + command, + code: mapped.code, + diagnostics: 'diagnostics' in mapped ? mapped.diagnostics : undefined, + params: 'params' in mapped ? mapped.params : undefined, + format + }) + ); + return mapped.exitCode; + } +}; diff --git a/packages/workflow-cli/src/type.ts b/packages/workflow-cli/src/type.ts new file mode 100644 index 000000000000..667000158301 --- /dev/null +++ b/packages/workflow-cli/src/type.ts @@ -0,0 +1,41 @@ +import type { z } from 'zod'; + +export type CliFormat = 'text' | 'json'; + +export type CliContext = { + cwd: string; + dir: string; + format: CliFormat; + locale: string; + quiet: boolean; + color: boolean; + env: NodeJS.ProcessEnv; + readStdin: () => Promise; +}; + +export type CliResult = { + changed: boolean; + checksum?: string; + result?: unknown; + changes?: unknown[]; + message?: string; + warnings?: unknown[]; +}; + +export type CliOptionDefinition = { + name: string; + value: boolean; + required?: boolean; + description: string; +}; + +export type CliCommandDefinition = { + path: readonly string[]; + introducedIn: 'PR1' | 'PR2' | 'PR3'; + kind: 'query' | 'localMutation' | 'artifact'; + inputSchema: z.ZodType; + options: readonly CliOptionDefinition[]; + supportsDryRun: boolean; + confirm: 'none'; + handler: (input: Record, context: CliContext) => Promise; +}; diff --git a/packages/workflow-cli/test/bin-smoke.mjs b/packages/workflow-cli/test/bin-smoke.mjs new file mode 100644 index 000000000000..c9e4af0dd468 --- /dev/null +++ b/packages/workflow-cli/test/bin-smoke.mjs @@ -0,0 +1,79 @@ +import assert from 'node:assert/strict'; +import { mkdtemp, readFile, rm } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { spawnSync } from 'node:child_process'; + +const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const cliPath = join(packageRoot, 'dist', 'cli.js'); +const workspace = await mkdtemp(join(tmpdir(), 'workflow-cli-bin-')); +const workflowDir = join(workspace, 'demo'); + +const invoke = (args, input) => { + const result = spawnSync(process.execPath, [cliPath, ...args, '--format', 'json'], { + cwd: workspace, + env: { ...process.env, NODE_ENV: 'test' }, + input, + encoding: 'utf8' + }); + assert.equal(result.status, 0, result.stderr || result.stdout); + assert.equal(result.stderr, ''); + return JSON.parse(result.stdout); +}; + +try { + invoke(['init', '--dir', workflowDir, '--name', 'Bin smoke']); + invoke([ + 'node', + 'add', + '--dir', + workflowDir, + '--node', + 'ai', + '--name', + 'CLI AI', + '--template', + 'builtin:ai-chat', + '--after', + 'start@next' + ]); + const prompt = 'Prompt only from stdin'; + const mutation = invoke( + [ + 'input', + 'set', + '--dir', + workflowDir, + '--node', + 'ai', + '--key', + 'systemPrompt', + '--value-file', + '-' + ], + prompt + ); + assert.equal(JSON.stringify(mutation).includes(prompt), false); + assert.equal(invoke(['validate', '--dir', workflowDir]).result.valid, true); + + const outputPath = join(workspace, 'workflow.generated.json'); + invoke(['build', '--dir', workflowDir, '--output', outputPath]); + const workflow = JSON.parse(await readFile(outputPath, 'utf8')); + assert.equal(workflow.nodes.find((node) => node.nodeId === 'ai').name, 'CLI AI'); + assert.equal(workflow.edges[0].sourceHandle, 'start-source-right'); + + const descriptor = invoke([ + 'template', + 'show', + '--template', + 'builtin:ai-chat', + '--locale', + 'zh-CN' + ]).result; + assert.equal(descriptor.name, 'AI 对话'); + assert.equal(JSON.stringify(descriptor).includes('workflow:cli.input'), false); + process.stdout.write('workflow-cli built bin smoke passed\n'); +} finally { + await rm(workspace, { recursive: true, force: true }); +} diff --git a/packages/workflow-cli/test/e2e.test.ts b/packages/workflow-cli/test/e2e.test.ts new file mode 100644 index 000000000000..1935eddb78a1 --- /dev/null +++ b/packages/workflow-cli/test/e2e.test.ts @@ -0,0 +1,1164 @@ +import { runCli } from '../src'; +import { access, mkdtemp, readFile, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { describe, expect, it } from 'vitest'; + +const createHarness = async () => { + const cwd = await mkdtemp(join(tmpdir(), 'workflow-cli-')); + const stdout: string[] = []; + const stderr: string[] = []; + const invoke = async ( + argv: string[], + env: NodeJS.ProcessEnv = { NODE_ENV: 'test' }, + stdinValue = '' + ) => { + stdout.length = 0; + stderr.length = 0; + const exitCode = await runCli({ + argv, + cwd, + env, + stdin: async () => stdinValue, + stdout: (value) => stdout.push(value), + stderr: (value) => stderr.push(value) + }); + return { exitCode, stdout: [...stdout], stderr: [...stderr] }; + }; + return { cwd, invoke }; +}; + +const jsonArgs = (dir: string, args: string[]) => [...args, '--dir', dir, '--format', 'json']; + +describe('PR1 through PR3 CLI end to end', () => { + it('builds basic-ai with pure JSON stdout and deterministic output', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'basic-ai'); + expect((await invoke(jsonArgs(dir, ['init', '--name', 'Demo workflow']))).exitCode).toBe(0); + const initializedDocument = JSON.parse(await readFile(join(dir, 'workflow.json'), 'utf8')); + expect(initializedDocument.nodes).toHaveLength(2); + expect(initializedDocument.nodes).toEqual( + expect.arrayContaining([ + expect.objectContaining({ nodeId: 'userGuide', flowNodeType: 'userGuide' }), + expect.objectContaining({ nodeId: 'start', flowNodeType: 'workflowStart' }) + ]) + ); + expect( + ( + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'ai', + '--template', + 'builtin:ai-chat', + '--name', + 'Answer user', + '--after', + 'start@next' + ]) + ) + ).exitCode + ).toBe(0); + await invoke( + jsonArgs(dir, [ + 'input', + 'set', + '--node', + 'ai', + '--key', + 'systemPrompt', + '--value', + 'Be concise' + ]) + ); + const inputShow = await invoke( + jsonArgs(dir, ['input', 'show', '--node', 'ai', '--key', 'systemPrompt']) + ); + expect(JSON.parse(inputShow.stdout[0]).result.value).toBe('Be concise'); + await invoke(jsonArgs(dir, ['input', 'unset', '--node', 'ai', '--key', 'systemPrompt'])); + await invoke( + jsonArgs(dir, [ + 'input', + 'set', + '--node', + 'ai', + '--key', + 'systemPrompt', + '--value', + 'Be concise' + ]) + ); + const validation = await invoke(jsonArgs(dir, ['validate'])); + expect(validation.exitCode).toBe(0); + expect(JSON.parse(validation.stdout[0])).toMatchObject({ + schemaVersion: 'fastgpt-workflow-cli-result/v1', + ok: true, + changed: false, + result: { valid: true } + }); + + const output = join(dir, 'workflow.generated.json'); + await invoke(jsonArgs(dir, ['build', '--output', output])); + const firstBuild = await readFile(output, 'utf8'); + await invoke(jsonArgs(dir, ['build', '--output', output])); + expect(await readFile(output, 'utf8')).toBe(firstBuild); + expect(JSON.parse(firstBuild).edges[0]).toEqual({ + source: 'start', + sourceHandle: 'start-source-right', + target: 'ai', + targetHandle: 'ai-target-left' + }); + + const templateList = await invoke(jsonArgs(dir, ['template', 'list', '--source', 'builtin'])); + expect(JSON.parse(templateList.stdout[0]).result).toHaveLength(22); + const nodeList = await invoke(jsonArgs(dir, ['node', 'list', '--type', 'chatNode'])); + expect(JSON.parse(nodeList.stdout[0]).result).toHaveLength(1); + const nodeShow = await invoke(jsonArgs(dir, ['node', 'show', '--node', 'ai'])); + const nodeShowResult = JSON.parse(nodeShow.stdout[0]).result; + expect(nodeShowResult.node.name).toBe('Answer user'); + expect(nodeShowResult.descriptor.template).toEqual({ + kind: 'builtin', + templateId: 'ai-chat' + }); + expect(JSON.parse(await readFile(join(dir, 'workflow.json'), 'utf8')).app.name).toBe( + 'Demo workflow' + ); + }); + + it('builds basic-static with literal and reference inputs', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'basic-static'); + await invoke(jsonArgs(dir, ['init'])); + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'text', + '--template', + 'builtin:text-editor', + '--after', + 'start@next' + ]) + ); + await invoke( + jsonArgs(dir, [ + 'input', + 'set', + '--node', + 'text', + '--key', + 'system_textareaInput', + '--value', + 'Static response' + ]) + ); + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'answer', + '--template', + 'builtin:assigned-answer', + '--after', + 'text@next' + ]) + ); + const refResult = await invoke( + jsonArgs(dir, [ + 'input', + 'ref', + '--node', + 'answer', + '--key', + 'text', + '--from', + 'text.system_text' + ]) + ); + expect(refResult.exitCode).toBe(0); + expect((await invoke(jsonArgs(dir, ['validate']))).exitCode).toBe(0); + }); + + it('builds output key references as Store output ids and imports them back as keys', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'code-reference'); + await invoke(jsonArgs(dir, ['init'])); + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'code', + '--template', + 'builtin:code', + '--after', + 'start@next' + ]) + ); + for (const inputKey of ['data1', 'data2']) { + expect( + ( + await invoke( + jsonArgs(dir, [ + 'input', + 'ref', + '--node', + 'code', + '--key', + inputKey, + '--from', + 'start.userChatInput' + ]) + ) + ).exitCode + ).toBe(0); + } + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'answer', + '--template', + 'builtin:assigned-answer', + '--after', + 'code@next' + ]) + ); + expect( + ( + await invoke( + jsonArgs(dir, [ + 'input', + 'ref', + '--node', + 'answer', + '--key', + 'text', + '--from', + 'code.result' + ]) + ) + ).exitCode + ).toBe(0); + + const document = JSON.parse(await readFile(join(dir, 'workflow.json'), 'utf8')); + expect( + document.nodes + .find((node: { nodeId: string }) => node.nodeId === 'answer') + .inputs.find((input: { key: string }) => input.key === 'text').value + ).toEqual(['code', 'result']); + + const output = join(cwd, 'code-reference-store.json'); + expect((await invoke(jsonArgs(dir, ['build', '--output', output]))).exitCode).toBe(0); + const store = JSON.parse(await readFile(output, 'utf8')); + expect( + store.nodes + .find((node: { nodeId: string }) => node.nodeId === 'answer') + .inputs.find((input: { key: string }) => input.key === 'text').value + ).toEqual(['code', 'qLUQfhG0ILRX']); + + const importedDir = join(cwd, 'code-reference-imported'); + expect((await invoke(jsonArgs(importedDir, ['import', '--input', output]))).exitCode).toBe(0); + const importedDocument = JSON.parse(await readFile(join(importedDir, 'workflow.json'), 'utf8')); + expect( + importedDocument.nodes + .find((node: { nodeId: string }) => node.nodeId === 'answer') + .inputs.find((input: { key: string }) => input.key === 'text').value + ).toEqual(['code', 'result']); + }); + + it('builds workflows with unresolved resources and reports their bindings', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'resource-bindings'); + await invoke(jsonArgs(dir, ['init'])); + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'search', + '--template', + 'builtin:dataset-search', + '--after', + 'start@next' + ]) + ); + + const validation = await invoke(jsonArgs(dir, ['validate'])); + expect(validation.exitCode).toBe(0); + expect(JSON.parse(validation.stdout[0])).toMatchObject({ + ok: true, + result: { + valid: true, + executable: false, + bindings: [ + { + nodeId: 'search', + inputKey: 'datasets', + resourceKind: 'dataset', + status: 'missing' + } + ] + }, + warnings: [ + { + code: 'WORKFLOW_BINDING_REQUIRED', + nodeId: 'search', + inputKey: 'datasets' + } + ] + }); + + const output = join(dir, 'workflow.generated.json'); + const build = await invoke(jsonArgs(dir, ['build', '--output', output])); + expect(build.exitCode).toBe(0); + expect(JSON.parse(build.stdout[0]).warnings).toMatchObject([ + { code: 'WORKFLOW_BINDING_REQUIRED', nodeId: 'search', inputKey: 'datasets' } + ]); + const workflow = JSON.parse(await readFile(output, 'utf8')); + expect( + workflow.nodes + .find((node: { nodeId: string }) => node.nodeId === 'search') + .inputs.find((input: { key: string }) => input.key === 'datasets').value + ).toEqual([]); + expect(JSON.stringify(workflow)).not.toContain('demo-dataset'); + }); + + it('keeps mutations and template queries write-free in dry-run/query mode', async () => { + const { cwd, invoke } = await createHarness(); + const dryDir = join(cwd, 'dry'); + expect((await invoke(jsonArgs(dryDir, ['init', '--dry-run']))).exitCode).toBe(0); + await expect(access(join(dryDir, 'workflow.json'))).rejects.toThrow(); + + const queryDir = join(cwd, 'query'); + const template = await invoke( + jsonArgs(queryDir, ['template', 'show', '--template', 'builtin:ai-chat', '--locale', 'zh-CN']) + ); + const descriptor = JSON.parse(template.stdout[0]).result; + expect(descriptor.name).toBe('AI 对话'); + expect(descriptor.inputs.find((input: { key: string }) => input.key === 'model')).toMatchObject( + { + defaultPolicy: 'remoteValidated', + resourceKind: 'model' + } + ); + expect(JSON.stringify(descriptor)).not.toContain('workflow:template.ai_chat'); + expect(JSON.stringify(descriptor)).not.toContain('workflow:cli.input'); + await expect(access(join(queryDir, 'workflow.json'))).rejects.toThrow(); + + const persistedDir = join(cwd, 'persisted'); + await invoke(jsonArgs(persistedDir, ['init'])); + const before = await readFile(join(persistedDir, 'workflow.json'), 'utf8'); + await invoke( + jsonArgs(persistedDir, [ + 'node', + 'add', + '--node', + 'ai', + '--template', + 'builtin:ai-chat', + '--after', + 'start@next', + '--dry-run' + ]) + ); + expect(await readFile(join(persistedDir, 'workflow.json'), 'utf8')).toBe(before); + }); + + it('configures dataset concat dynamic references and builds custom feedback', async () => { + const { cwd, invoke } = await createHarness(); + const concatDir = join(cwd, 'dataset-concat'); + await invoke(jsonArgs(concatDir, ['init'])); + await invoke( + jsonArgs(concatDir, [ + 'node', + 'add', + '--node', + 'search', + '--template', + 'builtin:dataset-search', + '--after', + 'start@next' + ]) + ); + await invoke( + jsonArgs(concatDir, [ + 'node', + 'add', + '--node', + 'concat', + '--template', + 'builtin:dataset-concat', + '--after', + 'search@next' + ]) + ); + expect( + ( + await invoke( + jsonArgs(concatDir, [ + 'input', + 'add', + '--node', + 'concat', + '--key', + 'quote_1', + '--value-type', + 'datasetQuote', + '--mode', + 'reference', + '--required' + ]) + ) + ).exitCode + ).toBe(0); + expect( + ( + await invoke( + jsonArgs(concatDir, [ + 'input', + 'ref', + '--node', + 'concat', + '--key', + 'quote_1', + '--from', + 'search.quoteQA' + ]) + ) + ).exitCode + ).toBe(0); + const inputList = await invoke(jsonArgs(concatDir, ['input', 'list', '--node', 'concat'])); + expect(JSON.parse(inputList.stdout[0]).result).toContainEqual( + expect.objectContaining({ key: 'quote_1', value: ['search', 'quoteQA'] }) + ); + expect( + ( + await invoke( + jsonArgs(concatDir, ['input', 'remove', '--node', 'concat', '--key', 'quote_1']) + ) + ).exitCode + ).toBe(0); + + const feedbackDir = join(cwd, 'custom-feedback'); + await invoke(jsonArgs(feedbackDir, ['init'])); + await invoke( + jsonArgs(feedbackDir, [ + 'node', + 'add', + '--node', + 'feedback', + '--template', + 'builtin:custom-feedback', + '--after', + 'start@next' + ]) + ); + await invoke( + jsonArgs(feedbackDir, [ + 'input', + 'set', + '--node', + 'feedback', + '--key', + 'system_textareaInput', + '--value', + 'Accurate answer' + ]) + ); + const output = join(feedbackDir, 'workflow.generated.json'); + expect((await invoke(jsonArgs(feedbackDir, ['build', '--output', output]))).exitCode).toBe(0); + expect(JSON.parse(await readFile(output, 'utf8')).nodes).toContainEqual( + expect.objectContaining({ flowNodeType: 'customFeedback' }) + ); + }); + + it('parses scalar, JSON, file and environment values from one command contract', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'values'); + await invoke(jsonArgs(dir, ['init'])); + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'ai', + '--template', + 'builtin:ai-chat', + '--after', + 'start@next' + ]) + ); + const envResult = await invoke( + jsonArgs(dir, [ + 'input', + 'set', + '--node', + 'ai', + '--key', + 'maxToken', + '--value-env', + 'MAX_TOKEN' + ]), + { NODE_ENV: 'test', MAX_TOKEN: '512' } + ); + expect(envResult.exitCode).toBe(0); + expect(envResult.stdout[0]).not.toContain('512'); + await invoke( + jsonArgs(dir, ['input', 'set', '--node', 'ai', '--key', 'temperature', '--value-json', '0.5']) + ); + await invoke( + jsonArgs(dir, [ + 'input', + 'set', + '--node', + 'ai', + '--key', + 'isResponseAnswerText', + '--value', + 'false' + ]) + ); + const promptPath = join(cwd, 'prompt.txt'); + await writeFile(promptPath, 'Prompt from file', 'utf8'); + await invoke( + jsonArgs(dir, [ + 'input', + 'set', + '--node', + 'ai', + '--key', + 'systemPrompt', + '--value-file', + promptPath + ]) + ); + await invoke( + jsonArgs(dir, ['input', 'set', '--node', 'ai', '--key', 'systemPrompt', '--value-file', '-']), + { NODE_ENV: 'test' }, + 'Prompt from stdin' + ); + const node = JSON.parse( + (await invoke(jsonArgs(dir, ['node', 'show', '--node', 'ai']))).stdout[0] + ).result.node; + const values = Object.fromEntries( + node.inputs.map((input: { key: string; value: unknown }) => [input.key, input.value]) + ); + expect(values).toMatchObject({ + maxToken: 512, + temperature: 0.5, + isResponseAnswerText: false, + systemPrompt: 'Prompt from stdin' + }); + }); + + it('maps argument, command and validation failures and never writes partial state', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'failure'); + await invoke(jsonArgs(dir, ['init'])); + const before = await readFile(join(dir, 'workflow.json'), 'utf8'); + + expect((await invoke(jsonArgs(dir, ['init']))).exitCode).toBe(2); + expect((await invoke(jsonArgs(dir, ['node', 'show', '--node', 'missing']))).exitCode).toBe(2); + expect( + ( + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'bad-position', + '--template', + 'builtin:ai-chat', + '--position', + 'invalid' + ]) + ) + ).exitCode + ).toBe(2); + + const argument = await invoke( + jsonArgs(dir, [ + 'input', + 'set', + '--node', + 'start', + '--key', + 'userChatInput', + '--value-json', + '{' + ]) + ); + expect(argument.exitCode).toBe(2); + + const command = await invoke( + jsonArgs(dir, ['node', 'add', '--node', 'broken', '--template', 'builtin:missing']) + ); + expect(command.exitCode).toBe(3); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(before); + + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'text', + '--template', + 'builtin:text-editor', + '--after', + 'start@next' + ]) + ); + expect((await invoke(jsonArgs(dir, ['validate']))).exitCode).toBe(4); + }); + + it('renders global/command help, version and text output without executing handlers', async () => { + const { invoke } = await createHarness(); + expect((await invoke(['--help'])).stdout[0]).toContain('Commands:'); + expect((await invoke(['--version'])).stdout).toEqual(['0.1.0']); + const commandHelp = await invoke(['node', 'show', '--help']); + expect(commandHelp.exitCode).toBe(0); + expect(commandHelp.stdout[0]).toContain('Usage: fastgpt-workflow node show'); + }); + + it('honors JSON output for parser failures from flags or environment', async () => { + const { invoke } = await createHarness(); + const flagFailure = await invoke(['unknown', '--format', 'json']); + expect(flagFailure.exitCode).toBe(2); + expect(JSON.parse(flagFailure.stderr[0])).toMatchObject({ ok: false, changed: false }); + + const envFailure = await invoke(['unknown'], { + NODE_ENV: 'test', + FASTGPT_WORKFLOW_FORMAT: 'json' + }); + expect(JSON.parse(envFailure.stderr[0])).toMatchObject({ ok: false, changed: false }); + }); + + it('supports the complete PR2 linear workflow command surface and import round-trip', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'pr2-linear'); + await invoke(jsonArgs(dir, ['init', '--name', 'PR2 workflow'])); + await invoke(jsonArgs(dir, ['meta', 'set', '--intro', 'Linear workflow fixture'])); + await invoke(jsonArgs(dir, ['config', 'set', '--path', 'welcomeText', '--value', 'Welcome'])); + expect( + JSON.parse((await invoke(jsonArgs(dir, ['meta', 'show']))).stdout[0]).result + ).toMatchObject({ + name: 'PR2 workflow', + intro: 'Linear workflow fixture' + }); + expect( + JSON.parse( + (await invoke(jsonArgs(dir, ['config', 'get', '--path', 'welcomeText']))).stdout[0] + ).result.value + ).toBe('Welcome'); + expect(JSON.parse((await invoke(jsonArgs(dir, ['config', 'list']))).stdout[0]).result).toEqual( + expect.arrayContaining([expect.objectContaining({ path: 'welcomeText', value: 'Welcome' })]) + ); + await invoke( + jsonArgs(dir, ['config', 'set', '--path', 'questionGuide', '--value-json', '{"open":true}']) + ); + await invoke(jsonArgs(dir, ['config', 'unset', '--path', 'questionGuide'])); + await invoke( + jsonArgs(dir, [ + 'variable', + 'add', + '--key', + 'tenantId', + '--value-type', + 'string', + '--description', + 'Tenant ID', + '--required' + ]) + ); + expect( + JSON.parse((await invoke(jsonArgs(dir, ['variable', 'list']))).stdout[0]).result + ).toHaveLength(1); + await invoke( + jsonArgs(dir, [ + 'variable', + 'update', + '--key', + 'tenantId', + '--description', + 'Current tenant ID' + ]) + ); + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'text', + '--template', + 'builtin:text-editor', + '--after', + 'start@next' + ]) + ); + await invoke( + jsonArgs(dir, [ + 'input', + 'set', + '--node', + 'text', + '--key', + 'system_textareaInput', + '--value', + 'Hello' + ]) + ); + await invoke( + jsonArgs(dir, ['node', 'clone', '--node', 'text', '--id', 'text-copy', '--offset', '320,0']) + ); + await invoke( + jsonArgs(dir, ['edge', 'connect', '--from', 'text@next', '--to', 'text-copy@target']) + ); + await invoke( + jsonArgs(dir, ['node', 'add', '--node', 'answer', '--template', 'builtin:assigned-answer']) + ); + await invoke( + jsonArgs(dir, ['edge', 'connect', '--from', 'text-copy@next', '--to', 'answer@target']) + ); + expect( + JSON.parse((await invoke(jsonArgs(dir, ['edge', 'list']))).stdout[0]).result + ).toHaveLength(3); + await invoke( + jsonArgs(dir, [ + 'input', + 'ref', + '--node', + 'answer', + '--key', + 'text', + '--from', + 'text-copy.system_text' + ]) + ); + await invoke(jsonArgs(dir, ['node', 'update', '--node', 'answer', '--name', 'Final answer'])); + await invoke(jsonArgs(dir, ['node', 'move', '--node', 'text-copy', '--position', '900,300'])); + + const available = await invoke( + jsonArgs(dir, ['input', 'available', '--node', 'answer', '--key', 'text']) + ); + expect(JSON.parse(available.stdout[0]).result).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + ref: { nodeId: 'text-copy', outputKey: 'system_text' }, + source: 'node' + }), + expect.objectContaining({ + ref: { nodeId: 'VARIABLE_NODE_ID', outputKey: 'tenantId' }, + source: 'variable' + }) + ]) + ); + expect((await invoke(jsonArgs(dir, ['validate']))).exitCode).toBe(0); + const inspect = await invoke(jsonArgs(dir, ['inspect'])); + expect(JSON.parse(inspect.stdout[0]).result.diagnostics.errorCount).toBe(0); + + await invoke(jsonArgs(dir, ['variable', 'remove', '--key', 'tenantId'])); + const output = join(cwd, 'pr2-store.json'); + expect((await invoke(jsonArgs(dir, ['build', '--output', output]))).exitCode).toBe(0); + + const importedDir = join(cwd, 'pr2-imported'); + expect((await invoke(jsonArgs(importedDir, ['import', '--input', output]))).exitCode).toBe(0); + const importedOutput = join(cwd, 'pr2-imported-store.json'); + await invoke(jsonArgs(importedDir, ['build', '--output', importedOutput])); + expect(JSON.parse(await readFile(importedOutput, 'utf8'))).toEqual( + JSON.parse(await readFile(output, 'utf8')) + ); + + const invalidStore = JSON.parse(await readFile(output, 'utf8')); + invalidStore.edges[0].sourceHandle = 'unknown-handle'; + const invalidStorePath = join(cwd, 'invalid-store.json'); + await writeFile(invalidStorePath, JSON.stringify(invalidStore), 'utf8'); + const invalidImportDir = join(cwd, 'invalid-import'); + expect( + (await invoke(jsonArgs(invalidImportDir, ['import', '--input', invalidStorePath]))).exitCode + ).toBe(3); + await expect(access(join(invalidImportDir, 'workflow.json'))).rejects.toThrow(); + + await invoke( + jsonArgs(importedDir, [ + 'edge', + 'reconnect', + '--from', + 'text-copy@next', + '--old-to', + 'answer@target', + '--to', + 'text@target' + ]) + ); + await invoke( + jsonArgs(importedDir, [ + 'edge', + 'disconnect', + '--from', + 'text-copy@next', + '--to', + 'text@target' + ]) + ); + const remove = await invoke(jsonArgs(importedDir, ['node', 'remove', '--node', 'answer'])); + expect(JSON.parse(remove.stdout[0]).changes[0]).toMatchObject({ + type: 'node.remove', + nodeId: 'answer' + }); + }); + + it('supports explicit variable input types and type-specific config', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'variable-types'); + await invoke(jsonArgs(dir, ['init'])); + + expect( + ( + await invoke( + jsonArgs(dir, [ + 'variable', + 'add', + '--key', + 'quizResults', + '--type', + 'internal', + '--value-type', + 'arrayObject', + '--value-json', + '[]' + ]) + ) + ).exitCode + ).toBe(0); + await invoke( + jsonArgs(dir, [ + 'variable', + 'add', + '--key', + 'theme', + '--type', + 'select', + '--value-type', + 'string', + '--options-json', + '[{"value":"math"},{"label":"Science","value":"science"}]' + ]) + ); + const numberConfigPath = join(cwd, 'number-variable.json'); + await writeFile(numberConfigPath, JSON.stringify({ step: 0.5, precision: 1 }), 'utf8'); + await invoke( + jsonArgs(dir, [ + 'variable', + 'add', + '--key', + 'questionCount', + '--type', + 'numberInput', + '--value-type', + 'number', + '--config-file', + numberConfigPath, + '--min', + '1', + '--max', + '20' + ]) + ); + await invoke( + jsonArgs(dir, [ + 'variable', + 'add', + '--key', + 'externalContext', + '--type', + 'external', + '--value-type', + 'object' + ]) + ); + await invoke( + jsonArgs(dir, ['variable', 'update', '--key', 'quizResults', '--value-type', 'arrayString']) + ); + + const variables = JSON.parse( + (await invoke(jsonArgs(dir, ['variable', 'list']))).stdout[0] + ).result; + expect(variables).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + key: 'quizResults', + type: 'internal', + valueType: 'arrayString', + required: false + }), + expect.objectContaining({ + key: 'theme', + type: 'select', + list: [ + { label: 'math', value: 'math' }, + { label: 'Science', value: 'science' } + ] + }), + expect.objectContaining({ + key: 'questionCount', + type: 'numberInput', + min: 1, + max: 20, + step: 0.5, + precision: 1 + }), + expect.objectContaining({ key: 'externalContext', type: 'custom', valueType: 'object' }) + ]) + ); + + expect( + ( + await invoke( + jsonArgs(dir, [ + 'variable', + 'add', + '--key', + 'invalidSwitch', + '--type', + 'switch', + '--value-type', + 'string' + ]) + ) + ).exitCode + ).toBe(2); + expect( + ( + await invoke( + jsonArgs(dir, [ + 'variable', + 'add', + '--key', + 'invalidInternal', + '--type', + 'internal', + '--value-type', + 'string', + '--required' + ]) + ) + ).exitCode + ).toBe(2); + expect( + ( + await invoke( + jsonArgs(dir, [ + 'variable', + 'add', + '--key', + 'invalidConfig', + '--value-type', + 'string', + '--config-json', + '{"type":"internal"}' + ]) + ) + ).exitCode + ).toBe(2); + }); + + it('adds system config when importing a legacy workflow without overwriting chatConfig', async () => { + const { cwd, invoke } = await createHarness(); + const sourceDir = join(cwd, 'legacy-source'); + await invoke(jsonArgs(sourceDir, ['init'])); + await invoke( + jsonArgs(sourceDir, ['config', 'set', '--path', 'welcomeText', '--value', 'Legacy welcome']) + ); + await invoke( + jsonArgs(sourceDir, ['variable', 'add', '--key', 'tenantId', '--value-type', 'string']) + ); + const sourceStorePath = join(cwd, 'legacy-store.json'); + await invoke(jsonArgs(sourceDir, ['build', '--output', sourceStorePath])); + const legacyStore = JSON.parse(await readFile(sourceStorePath, 'utf8')); + legacyStore.nodes = legacyStore.nodes.filter( + (node: { flowNodeType: string }) => node.flowNodeType !== 'userGuide' + ); + await writeFile(sourceStorePath, JSON.stringify(legacyStore), 'utf8'); + + const importedDir = join(cwd, 'legacy-imported'); + expect( + (await invoke(jsonArgs(importedDir, ['import', '--input', sourceStorePath]))).exitCode + ).toBe(0); + const importedDocument = JSON.parse(await readFile(join(importedDir, 'workflow.json'), 'utf8')); + expect(importedDocument.nodes).toContainEqual( + expect.objectContaining({ nodeId: 'userGuide', flowNodeType: 'userGuide' }) + ); + expect(importedDocument.chatConfig).toMatchObject({ + welcomeText: 'Legacy welcome', + variables: [expect.objectContaining({ key: 'tenantId' })] + }); + }); + + it('supports PR3 branch, insert, tool, output and nesting commands', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'pr3-complex'); + await invoke(jsonArgs(dir, ['init'])); + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'route', + '--template', + 'builtin:if-else', + '--after', + 'start@next' + ]) + ); + await invoke( + jsonArgs(dir, [ + 'input', + 'set', + '--node', + 'route', + '--key', + 'ifElseList', + '--value-json', + '[{"branchId":"positive","condition":"AND","list":[{"variable":["start","userChatInput"],"condition":"isNotEmpty","valueType":"input"}]}]' + ]) + ); + await invoke( + jsonArgs(dir, ['node', 'add', '--node', 'answer', '--template', 'builtin:assigned-answer']) + ); + await invoke( + jsonArgs(dir, ['input', 'set', '--node', 'answer', '--key', 'text', '--value', 'ok']) + ); + await invoke( + jsonArgs(dir, ['edge', 'connect', '--from', 'route@branch:positive', '--to', 'answer@target']) + ); + expect( + ( + await invoke( + jsonArgs(dir, [ + 'node', + 'insert', + '--from', + 'route@branch:positive', + '--to', + 'answer@target', + '--template', + 'builtin:text-editor', + '--id', + 'middle' + ]) + ) + ).exitCode + ).toBe(0); + + await invoke( + jsonArgs(dir, ['node', 'add', '--node', 'caller', '--template', 'builtin:tool-call']) + ); + expect( + ( + await invoke( + jsonArgs(dir, [ + 'tool', + 'attach', + '--tool-call', + 'caller', + '--template', + 'builtin:user-select', + '--id', + 'confirm' + ]) + ) + ).exitCode + ).toBe(0); + expect( + JSON.parse((await invoke(jsonArgs(dir, ['tool', 'list', '--tool-call', 'caller']))).stdout[0]) + .result + ).toHaveLength(1); + + await invoke(jsonArgs(dir, ['node', 'add', '--node', 'code', '--template', 'builtin:code'])); + await invoke(jsonArgs(dir, ['node', 'update', '--node', 'code', '--catch-error'])); + await invoke( + jsonArgs(dir, ['output', 'add', '--node', 'code', '--key', 'score', '--value-type', 'number']) + ); + expect( + JSON.parse((await invoke(jsonArgs(dir, ['output', 'list', '--node', 'code']))).stdout[0]) + .result + ).toEqual(expect.arrayContaining([expect.objectContaining({ key: 'score' })])); + expect( + (await invoke(jsonArgs(dir, ['output', 'remove', '--node', 'code', '--key', 'score']))) + .exitCode + ).toBe(0); + + await invoke( + jsonArgs(dir, ['node', 'add', '--node', 'loop', '--template', 'builtin:loop-run']) + ); + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'break', + '--template', + 'builtin:loop-run-break', + '--parent', + 'loop' + ]) + ); + expect( + JSON.parse( + (await invoke(jsonArgs(dir, ['container', 'children', '--node', 'loop']))).stdout[0] + ).result.map((node: { nodeId: string }) => node.nodeId) + ).toEqual(expect.arrayContaining(['loop__start', 'break'])); + expect( + (await invoke(jsonArgs(dir, ['node', 'move', '--node', 'break', '--root']))).exitCode + ).toBe(3); + }); + + it('builds a file-upload workflow after enabling file selection', async () => { + const { cwd, invoke } = await createHarness(); + const dir = join(cwd, 'file-upload'); + await invoke(jsonArgs(dir, ['init'])); + expect( + ( + await invoke( + jsonArgs(dir, [ + 'config', + 'set', + '--path', + 'fileSelectConfig', + '--value-json', + '{"maxFiles":1,"canSelectFile":true}' + ]) + ) + ).exitCode + ).toBe(0); + expect( + ( + await invoke( + jsonArgs(dir, [ + 'node', + 'add', + '--node', + 'read', + '--template', + 'builtin:read-files', + '--after', + 'start@next' + ]) + ) + ).exitCode + ).toBe(0); + expect((await invoke(jsonArgs(dir, ['validate']))).exitCode).toBe(0); + expect( + JSON.parse( + (await invoke(jsonArgs(dir, ['input', 'show', '--node', 'read', '--key', 'fileUrlList']))) + .stdout[0] + ).result.value + ).toEqual([['start', 'userFiles']]); + }); +}); diff --git a/packages/workflow-cli/test/io/workflowFile.test.ts b/packages/workflow-cli/test/io/workflowFile.test.ts new file mode 100644 index 000000000000..2548869351d6 --- /dev/null +++ b/packages/workflow-cli/test/io/workflowFile.test.ts @@ -0,0 +1,40 @@ +import { + parseWorkflowDocument, + readWorkflowFile, + serializeWorkflowDocument, + writeFileAtomic, + writeWorkflowFileAtomic +} from '../../src'; +import aiWorkflow from '../../../workflow-core/test/fixtures/basic-ai/workflow.json'; +import { mkdtemp, mkdir, readdir, readFile, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { describe, expect, it } from 'vitest'; + +describe('workflow file codec', () => { + it('round-trips with stable formatting and a trailing newline', async () => { + const document = parseWorkflowDocument(aiWorkflow); + const serialized = serializeWorkflowDocument(document); + expect(serialized.endsWith('\n')).toBe(true); + expect(parseWorkflowDocument(JSON.parse(serialized))).toEqual(document); + + const dir = await mkdtemp(join(tmpdir(), 'workflow-file-')); + await writeWorkflowFileAtomic(dir, document); + await expect(readWorkflowFile(dir)).resolves.toEqual(document); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(serialized); + }); + + it('keeps an existing directory and cleans temporary files when rename fails', async () => { + const dir = await mkdtemp(join(tmpdir(), 'workflow-atomic-')); + const targetDirectory = join(dir, 'target'); + await mkdir(targetDirectory); + await expect(writeFileAtomic(targetDirectory, 'value')).rejects.toThrow(); + expect(await readdir(dir)).toEqual(['target']); + }); + + it('reports malformed workflow JSON as a CLI argument error', async () => { + const dir = await mkdtemp(join(tmpdir(), 'workflow-invalid-')); + await writeFile(join(dir, 'workflow.json'), '{', 'utf8'); + await expect(readWorkflowFile(dir)).rejects.toMatchObject({ code: 'CLI_ARGUMENT_INVALID' }); + }); +}); diff --git a/packages/workflow-cli/test/output.test.ts b/packages/workflow-cli/test/output.test.ts new file mode 100644 index 000000000000..f00a4ee350dc --- /dev/null +++ b/packages/workflow-cli/test/output.test.ts @@ -0,0 +1,44 @@ +import { createSuccessEnvelope, renderError, renderSuccess } from '../src'; +import { describe, expect, it } from 'vitest'; + +describe('CLI output', () => { + it('renders stable success envelopes and text variants', () => { + expect(createSuccessEnvelope('validate', { changed: false, result: { valid: true } })).toEqual({ + schemaVersion: 'fastgpt-workflow-cli-result/v1', + ok: true, + command: 'validate', + changed: false, + checksum: undefined, + changes: undefined, + result: { valid: true }, + warnings: [] + }); + expect( + renderSuccess({ command: 'x', result: { changed: false, result: 'value' }, format: 'text' }) + ).toBe('value'); + expect( + renderSuccess({ + command: 'x', + result: { changed: false, result: { a: 1 } }, + format: 'text' + }) + ).toBe('{\n "a": 1\n}'); + expect( + renderSuccess({ command: 'x', result: { changed: false, message: 'done' }, format: 'text' }) + ).toBe('done'); + expect(renderSuccess({ command: 'x', result: { changed: false }, format: 'text' })).toBe('OK'); + }); + + it('renders errors as pure JSON or readable text', () => { + expect( + JSON.parse(renderError({ command: 'x', code: 'BAD', params: { key: 1 }, format: 'json' })) + ).toMatchObject({ + ok: false, + changed: false, + errors: [{ code: 'BAD', params: { key: 1 } }] + }); + expect( + renderError({ command: 'x', code: 'BAD', diagnostics: [{ code: 'D' }], format: 'text' }) + ).toContain('"code": "D"'); + }); +}); diff --git a/packages/workflow-cli/test/parser.test.ts b/packages/workflow-cli/test/parser.test.ts new file mode 100644 index 000000000000..0c667fb63aa5 --- /dev/null +++ b/packages/workflow-cli/test/parser.test.ts @@ -0,0 +1,52 @@ +import { CliArgumentError, parseCliArgs } from '../src'; +import { describe, expect, it } from 'vitest'; + +const parse = (argv: string[]) => parseCliArgs({ argv, cwd: '/tmp', env: { NODE_ENV: 'test' } }); + +describe('parseCliArgs', () => { + it('allows global options after the command and resolves context', () => { + const parsed = parse([ + 'node', + 'add', + '--node', + 'ai', + '--template', + 'builtin:ai-chat', + '--dir', + './demo', + '--format', + 'json', + '--dry-run' + ]); + expect(parsed.context.dir).toBe('/tmp/demo'); + expect(parsed.context.format).toBe('json'); + expect(parsed.input.dryRun).toBe(true); + }); + + it.each([ + [['unknown'], 'Unknown command'], + [['validate', '--output', 'x'], 'Option is not valid'], + [['validate', '--format', 'yaml'], '--format must be'], + [['node', 'show'], 'Command options are invalid'], + [['node', 'show', '--missing'], 'Unknown option'] + ] as const)('rejects invalid arguments', (argv, message) => { + expect(() => parse([...argv])).toThrowError(new RegExp(message)); + }); + + it('enforces mutually exclusive value options', () => { + expect(() => + parse([ + 'input', + 'set', + '--node', + 'ai', + '--key', + 'model', + '--value', + 'a', + '--value-json', + '"b"' + ]) + ).toThrow(CliArgumentError); + }); +}); diff --git a/packages/workflow-cli/test/registry.test.ts b/packages/workflow-cli/test/registry.test.ts new file mode 100644 index 000000000000..040bbfba08d4 --- /dev/null +++ b/packages/workflow-cli/test/registry.test.ts @@ -0,0 +1,579 @@ +import { cliCommandRegistry, renderHelp } from '../src'; +import { describe, expect, it } from 'vitest'; + +describe('cliCommandRegistry', () => { + it('registers exactly the PR1 through PR3 command surface once', () => { + const snapshot = cliCommandRegistry.map((definition) => ({ + path: definition.path.join(' '), + introducedIn: definition.introducedIn, + kind: definition.kind, + supportsDryRun: definition.supportsDryRun, + confirm: definition.confirm, + options: definition.options.map((item) => item.name) + })); + expect(new Set(snapshot.map((item) => item.path)).size).toBe(snapshot.length); + expect(snapshot).toMatchInlineSnapshot(` + [ + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "localMutation", + "options": [ + "--name", + "--dry-run", + ], + "path": "init", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "artifact", + "options": [ + "--output", + ], + "path": "build", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--input", + "--dry-run", + ], + "path": "import", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "query", + "options": [], + "path": "inspect", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "query", + "options": [], + "path": "meta show", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--name", + "--intro", + "--dry-run", + ], + "path": "meta set", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "query", + "options": [], + "path": "config list", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "query", + "options": [ + "--path", + ], + "path": "config get", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--path", + "--value", + "--value-json", + "--value-file", + "--value-env", + "--dry-run", + ], + "path": "config set", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--path", + "--dry-run", + ], + "path": "config unset", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "query", + "options": [], + "path": "variable list", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--key", + "--type", + "--value-type", + "--label", + "--description", + "--required", + "--config-json", + "--config-file", + "--options-json", + "--min", + "--max", + "--max-length", + "--time-granularity", + "--value", + "--value-json", + "--value-file", + "--value-env", + "--dry-run", + ], + "path": "variable add", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--key", + "--new-key", + "--type", + "--value-type", + "--label", + "--description", + "--required", + "--optional", + "--config-json", + "--config-file", + "--options-json", + "--min", + "--max", + "--max-length", + "--time-granularity", + "--value", + "--value-json", + "--value-file", + "--value-env", + "--dry-run", + ], + "path": "variable update", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--key", + "--dry-run", + ], + "path": "variable remove", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "query", + "options": [ + "--source", + ], + "path": "template list", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "query", + "options": [ + "--template", + ], + "path": "template show", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "query", + "options": [ + "--type", + "--parent", + ], + "path": "node list", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "query", + "options": [ + "--node", + ], + "path": "node show", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "localMutation", + "options": [ + "--node", + "--template", + "--name", + "--after", + "--parent", + "--position", + "--dry-run", + ], + "path": "node add", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--node", + "--name", + "--position", + "--catch-error", + "--no-catch-error", + "--dry-run", + ], + "path": "node update", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "localMutation", + "options": [ + "--node", + "--position", + "--parent", + "--root", + "--dry-run", + ], + "path": "node move", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "localMutation", + "options": [ + "--from", + "--to", + "--template", + "--id", + "--position", + "--dry-run", + ], + "path": "node insert", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--node", + "--id", + "--position", + "--offset", + "--dry-run", + ], + "path": "node clone", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--node", + "--dry-run", + ], + "path": "node remove", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "query", + "options": [ + "--node", + "--kind", + ], + "path": "edge list", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--from", + "--to", + "--dry-run", + ], + "path": "edge connect", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--from", + "--to", + "--dry-run", + ], + "path": "edge disconnect", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--from", + "--old-to", + "--to", + "--dry-run", + ], + "path": "edge reconnect", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "query", + "options": [ + "--node", + ], + "path": "input list", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "query", + "options": [ + "--node", + "--key", + ], + "path": "input show", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "localMutation", + "options": [ + "--node", + "--key", + "--value-type", + "--mode", + "--label", + "--description", + "--required", + "--dry-run", + ], + "path": "input add", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "localMutation", + "options": [ + "--node", + "--key", + "--dry-run", + ], + "path": "input remove", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "localMutation", + "options": [ + "--node", + "--key", + "--value", + "--value-json", + "--value-file", + "--value-env", + "--dry-run", + ], + "path": "input set", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "localMutation", + "options": [ + "--node", + "--key", + "--from", + "--dry-run", + ], + "path": "input ref", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "localMutation", + "options": [ + "--node", + "--key", + "--dry-run", + ], + "path": "input unset", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR2", + "kind": "query", + "options": [ + "--node", + "--key", + ], + "path": "input available", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "query", + "options": [ + "--node", + ], + "path": "output list", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "localMutation", + "options": [ + "--node", + "--key", + "--value-type", + "--label", + "--description", + "--dry-run", + ], + "path": "output add", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "localMutation", + "options": [ + "--node", + "--key", + "--dry-run", + ], + "path": "output remove", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "query", + "options": [ + "--tool-call", + ], + "path": "tool list", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "localMutation", + "options": [ + "--tool-call", + "--template", + "--tool-node", + "--id", + "--position", + "--dry-run", + ], + "path": "tool attach", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "localMutation", + "options": [ + "--tool-call", + "--tool-node", + "--dry-run", + ], + "path": "tool detach", + "supportsDryRun": true, + }, + { + "confirm": "none", + "introducedIn": "PR3", + "kind": "query", + "options": [ + "--node", + ], + "path": "container children", + "supportsDryRun": false, + }, + { + "confirm": "none", + "introducedIn": "PR1", + "kind": "query", + "options": [], + "path": "validate", + "supportsDryRun": false, + }, + ] + `); + }); +}); + +describe('renderHelp', () => { + it('derives global and command help from the registry', () => { + const help = renderHelp(); + expect(help).toContain('template show'); + expect(help).toContain('input ref'); + expect(help).not.toContain('changeset'); + expect( + renderHelp(cliCommandRegistry.find((item) => item.path.join(' ') === 'build')) + ).toContain('--output (required)'); + }); +}); diff --git a/packages/workflow-cli/tsconfig.json b/packages/workflow-cli/tsconfig.json new file mode 100644 index 000000000000..2304b849fa98 --- /dev/null +++ b/packages/workflow-cli/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "moduleResolution": "bundler", + "paths": { + "@fastgpt/workflow-core": ["../workflow-core/src/index.ts"] + } + }, + "include": ["src/**/*.ts", "test/**/*.ts", "vitest.config.ts", "tsdown.config.ts"] +} diff --git a/packages/workflow-cli/tsdown.config.ts b/packages/workflow-cli/tsdown.config.ts new file mode 100644 index 000000000000..a117e77c0f7e --- /dev/null +++ b/packages/workflow-cli/tsdown.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'tsdown'; + +export default defineConfig({ + entry: ['src/index.ts', 'src/cli.ts'], + format: 'esm', + platform: 'node', + target: 'node20', + deps: { + alwaysBundle: [/^@fastgpt\/workflow-core/, /^@fastgpt\/global/, /^@fastgpt\/web/], + onlyBundle: false + }, + dts: false, + outExtensions: () => ({ js: '.js', dts: '.d.ts' }) +}); diff --git a/packages/workflow-cli/vitest.config.ts b/packages/workflow-cli/vitest.config.ts new file mode 100644 index 000000000000..a5b552d5029c --- /dev/null +++ b/packages/workflow-cli/vitest.config.ts @@ -0,0 +1,20 @@ +import { resolve } from 'node:path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + resolve: { + alias: { + '@fastgpt/workflow-core': resolve('../workflow-core/src/index.ts'), + '@fastgpt': resolve('..') + } + }, + test: { + include: ['test/**/*.test.ts'], + coverage: { + enabled: true, + reporter: ['text', 'text-summary', 'json-summary'], + include: ['src/**/*.ts'], + exclude: ['src/**/type.ts', 'src/cli.ts', 'src/index.ts'] + } + } +}); diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json new file mode 100644 index 000000000000..11c1c833b6ae --- /dev/null +++ b/packages/workflow-core/package.json @@ -0,0 +1,34 @@ +{ + "name": "@fastgpt/workflow-core", + "version": "0.1.0", + "private": true, + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "files": [ + "dist" + ], + "sideEffects": false, + "scripts": { + "build": "tsdown", + "test": "vitest run --config ./vitest.config.ts", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@fastgpt/global": "workspace:*", + "zod": "catalog:" + }, + "devDependencies": { + "@types/node": "catalog:", + "tsdown": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:", + "@vitest/coverage-v8": "catalog:" + } +} diff --git a/packages/workflow-core/src/binding/service.ts b/packages/workflow-core/src/binding/service.ts new file mode 100644 index 000000000000..e40765cbb95e --- /dev/null +++ b/packages/workflow-core/src/binding/service.ts @@ -0,0 +1,53 @@ +import type { WorkflowDocument } from '../domain/document'; +import type { WorkflowDiagnostic } from '../domain/diagnostic'; +import { getInputAutomationMeta } from '../template/automationMeta'; +import { hasConfiguredValue } from '../template/defaultValue'; +import type { WorkflowBindingRequirement } from './type'; + +/** 收集无法由本地结构校验证明完整或有效的外部输入绑定,不返回实际值。 */ +export const collectWorkflowBindings = (document: WorkflowDocument): WorkflowBindingRequirement[] => + document.nodes.flatMap((node) => + node.inputs.flatMap((input) => { + const meta = getInputAutomationMeta(node.flowNodeType, input.key); + if ( + !meta || + (meta.defaultPolicy !== 'userRequired' && meta.defaultPolicy !== 'remoteValidated') + ) + return []; + + const defaultPolicy = meta.defaultPolicy; + const configured = hasConfiguredValue(input.value); + const bindingRequired = input.required === true || meta.bindingRequired === true; + const status = (() => { + if (!configured && bindingRequired) return 'missing' as const; + if (configured && defaultPolicy === 'remoteValidated') return 'unverified' as const; + })(); + if (!status) return []; + + return [ + { + nodeId: node.nodeId, + inputKey: input.key, + defaultPolicy, + resourceKind: meta.resourceKind, + status + } + ]; + }) + ); + +/** 将绑定状态转换为 CLI/Web 可统一展示的非阻断诊断。 */ +export const getWorkflowBindingDiagnostics = ( + bindings: WorkflowBindingRequirement[] +): WorkflowDiagnostic[] => + bindings.map((binding) => ({ + code: + binding.status === 'missing' ? 'WORKFLOW_BINDING_REQUIRED' : 'WORKFLOW_BINDING_UNVERIFIED', + severity: 'warning', + nodeId: binding.nodeId, + inputKey: binding.inputKey, + params: { + defaultPolicy: binding.defaultPolicy, + ...(binding.resourceKind ? { resourceKind: binding.resourceKind } : {}) + } + })); diff --git a/packages/workflow-core/src/binding/type.ts b/packages/workflow-core/src/binding/type.ts new file mode 100644 index 000000000000..4f34f92ecf33 --- /dev/null +++ b/packages/workflow-core/src/binding/type.ts @@ -0,0 +1,11 @@ +import type { WorkflowInputDefaultPolicy, WorkflowResourceKind } from '../template/type'; + +export type WorkflowBindingStatus = 'missing' | 'unverified'; + +export type WorkflowBindingRequirement = { + nodeId: string; + inputKey: string; + defaultPolicy: Exclude; + resourceKind?: WorkflowResourceKind; + status: WorkflowBindingStatus; +}; diff --git a/packages/workflow-core/src/code/io.ts b/packages/workflow-core/src/code/io.ts new file mode 100644 index 000000000000..19df88328d77 --- /dev/null +++ b/packages/workflow-core/src/code/io.ts @@ -0,0 +1,278 @@ +import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; + +export type CodeIoDefinition = { + key: string; + valueType?: WorkflowIOValueTypeEnum; +}; + +const workflowValueTypes = new Set(Object.values(WorkflowIOValueTypeEnum)); + +const toWorkflowValueType = (value: string | undefined) => + value && workflowValueTypes.has(value) ? (value as WorkflowIOValueTypeEnum) : undefined; + +const isIdentifierCharacter = (value: string | undefined) => + value !== undefined && /[\p{L}\p{N}_$]/u.test(value); + +const skipQuotedValue = (source: string, start: number) => { + const quote = source[start]; + let index = start + 1; + while (index < source.length) { + if (source[index] === '\\') { + index += 2; + continue; + } + if (source[index] === quote) return index + 1; + index += 1; + } + return source.length; +}; + +const skipComment = (source: string, start: number) => { + if (source.startsWith('//', start) || source[start] === '#') { + const end = source.indexOf('\n', start + 1); + return end < 0 ? source.length : end + 1; + } + if (source.startsWith('/*', start)) { + const end = source.indexOf('*/', start + 2); + return end < 0 ? source.length : end + 2; + } + return start; +}; + +const isRegexLiteralStart = (source: string, start: number) => { + if (source[start] !== '/' || source[start + 1] === '/' || source[start + 1] === '*') { + return false; + } + const prefix = source.slice(0, start).trimEnd(); + const previous = prefix.at(-1); + return ( + previous === undefined || + ['(', '[', '{', ':', ',', ';', '=', '!', '?', '&', '|'].includes(previous) || + /\b(?:return|case|throw|typeof|instanceof|in|of|yield)$/.test(prefix) + ); +}; + +const skipRegexLiteral = (source: string, start: number) => { + let inCharacterClass = false; + for (let index = start + 1; index < source.length; index += 1) { + if (source[index] === '\\') { + index += 1; + continue; + } + if (source[index] === '[') inCharacterClass = true; + if (source[index] === ']') inCharacterClass = false; + if (source[index] === '/' && !inCharacterClass) { + index += 1; + while (/[a-z]/i.test(source[index] ?? '')) index += 1; + return index; + } + } + return source.length; +}; + +const findMatchingCharacter = ({ + source, + start, + open, + close +}: { + source: string; + start: number; + open: string; + close: string; +}) => { + let depth = 0; + for (let index = start; index < source.length; index += 1) { + const commentEnd = skipComment(source, index); + if (commentEnd !== index) { + index = commentEnd - 1; + continue; + } + if (isRegexLiteralStart(source, index)) { + index = skipRegexLiteral(source, index) - 1; + continue; + } + if (["'", '"', '`'].includes(source[index])) { + index = skipQuotedValue(source, index) - 1; + continue; + } + if (source[index] === open) depth += 1; + if (source[index] === close) { + depth -= 1; + if (depth === 0) return index; + } + } + return -1; +}; + +const splitTopLevelItems = (value: string) => { + const items: string[] = []; + let start = 0; + let depth = 0; + for (let index = 0; index < value.length; index += 1) { + const commentEnd = skipComment(value, index); + if (commentEnd !== index) { + index = commentEnd - 1; + continue; + } + if (isRegexLiteralStart(value, index)) { + index = skipRegexLiteral(value, index) - 1; + continue; + } + if (["'", '"', '`'].includes(value[index])) { + index = skipQuotedValue(value, index) - 1; + continue; + } + if (['{', '[', '('].includes(value[index])) depth += 1; + if (['}', ']', ')'].includes(value[index])) depth -= 1; + if (value[index] === ',' && depth === 0) { + items.push(value.slice(start, index)); + start = index + 1; + } + } + items.push(value.slice(start)); + return items; +}; + +const getStaticPropertyKey = (property: string) => { + const value = property.trim(); + if (!value || value.startsWith('...') || value.startsWith('[')) return; + if (["'", '"'].includes(value[0])) { + const end = skipQuotedValue(value, 0); + if (value.slice(end).trimStart()[0] !== ':') return; + return value.slice(1, end - 1).replace(/\\([\\'"`])/g, '$1'); + } + return value.match(/^([\p{L}_$][\p{L}\p{N}_$]*)\s*(?::|=|$)/u)?.[1]; +}; + +const getDocumentedDefinitions = (code: string, tag: 'param' | 'property') => + [...code.matchAll(new RegExp(`@${tag}\\s*\\{([^}]+)\\}\\s*([^\\s-]+)\\s*-?\\s*.*`, 'g'))] + .map((match) => ({ + key: match[2].trim(), + valueType: toWorkflowValueType(match[1].trim()) + })) + .filter((item) => item.key); + +const mergeDefinitions = ({ + keys, + documented +}: { + keys: string[]; + documented: CodeIoDefinition[]; +}) => + keys + .filter((key, index) => keys.indexOf(key) === index) + .map((key, index) => ({ + key, + valueType: + documented.find((item) => item.key === key)?.valueType ?? + (documented.length === keys.length ? documented[index]?.valueType : undefined) + })); + +/** 提取 main 函数的静态参数名;无法识别动态参数对象时返回 undefined。 */ +export const extractCodeInputDefinitions = (code: string): CodeIoDefinition[] | undefined => { + const documented = getDocumentedDefinitions(code, 'param'); + const jsMatch = code.match(/(?:async\s+)?function\s+main\s*\(\s*/); + if (jsMatch?.index !== undefined) { + const paramsStart = jsMatch.index + jsMatch[0].length; + if (code[paramsStart] === ')') return []; + if (code[paramsStart] !== '{') return undefined; + const objectStart = paramsStart; + const objectEnd = findMatchingCharacter({ + source: code, + start: objectStart, + open: '{', + close: '}' + }); + if (objectEnd >= 0) { + const keys = splitTopLevelItems(code.slice(objectStart + 1, objectEnd)) + .map(getStaticPropertyKey) + .filter((key): key is string => Boolean(key)); + return mergeDefinitions({ keys, documented }); + } + } + + const pythonMatch = code.match(/def\s+main\s*\(/); + if (pythonMatch?.index !== undefined) { + const paramsStart = pythonMatch.index + pythonMatch[0].length - 1; + const paramsEnd = findMatchingCharacter({ + source: code, + start: paramsStart, + open: '(', + close: ')' + }); + if (paramsEnd >= 0) { + const keys = splitTopLevelItems(code.slice(paramsStart + 1, paramsEnd)) + .map( + (item) => + item + .trim() + .replace(/^\*+/, '') + .match(/^([\p{L}_][\p{L}\p{N}_]*)/u)?.[1] + ) + .filter((key): key is string => Boolean(key)); + return mergeDefinitions({ keys, documented }); + } + } + + return undefined; +}; + +const extractReturnedObjectKeysOrUndefined = (code: string): string[] | undefined => { + const keys: string[] = []; + let foundReturnObject = false; + for (let index = 0; index < code.length; index += 1) { + const commentEnd = skipComment(code, index); + if (commentEnd !== index) { + index = commentEnd - 1; + continue; + } + if (isRegexLiteralStart(code, index)) { + index = skipRegexLiteral(code, index) - 1; + continue; + } + if (["'", '"', '`'].includes(code[index])) { + index = skipQuotedValue(code, index) - 1; + continue; + } + if ( + !code.startsWith('return', index) || + isIdentifierCharacter(code[index - 1]) || + isIdentifierCharacter(code[index + 6]) + ) { + continue; + } + let objectStart = index + 6; + while (/\s/.test(code[objectStart] ?? '')) objectStart += 1; + if (code[objectStart] === '(') { + objectStart += 1; + while (/\s/.test(code[objectStart] ?? '')) objectStart += 1; + } + if (code[objectStart] !== '{') continue; + const objectEnd = findMatchingCharacter({ + source: code, + start: objectStart, + open: '{', + close: '}' + }); + if (objectEnd < 0) continue; + foundReturnObject = true; + splitTopLevelItems(code.slice(objectStart + 1, objectEnd)).forEach((property) => { + const key = getStaticPropertyKey(property); + if (key && !keys.includes(key)) keys.push(key); + }); + index = objectEnd; + } + return foundReturnObject ? keys : undefined; +}; + +/** 从实际 return 对象提取稳定输出 key;计算属性和展开属性不会被推断为固定输出。 */ +export const extractReturnedObjectKeys = (code: string): string[] => + extractReturnedObjectKeysOrUndefined(code) ?? []; + +/** return 对象是输出事实源,JSDoc 只补充可选的类型信息。 */ +export const extractCodeOutputDefinitions = (code: string): CodeIoDefinition[] | undefined => { + const keys = extractReturnedObjectKeysOrUndefined(code); + if (!keys) return; + return mergeDefinitions({ keys, documented: getDocumentedDefinitions(code, 'property') }); +}; diff --git a/packages/workflow-core/src/command/apply.ts b/packages/workflow-core/src/command/apply.ts new file mode 100644 index 000000000000..087aab3c5f98 --- /dev/null +++ b/packages/workflow-core/src/command/apply.ts @@ -0,0 +1,453 @@ +import { getWorkflowChecksum } from '../domain/checksum'; +import type { WorkflowDocument } from '../domain/document'; +import type { WorkflowDiagnostic } from '../domain/diagnostic'; +import { + assertExecutionEdge, + connectExecutionEdge, + disconnectExecutionEdge, + getDefaultExecutionSourcePort, + reconnectExecutionEdge +} from '../edge/service'; +import type { WorkflowExecutionEdge } from '../edge/type'; +import { setInputReference, setInputValue, unsetInput } from '../reference/service'; +import { cloneNode, removeNode, updateNode } from '../node/service'; +import { + addGlobalVariable, + removeGlobalVariable, + setChatConfigValue, + unsetChatConfigValue, + updateGlobalVariable +} from '../config/service'; +import { WorkflowCommandError } from '../domain/diagnostic'; +import type { WorkflowTemplateProvider } from '../template/type'; +import { WorkflowCommandSchema, type WorkflowChangeSummary, type WorkflowCommand } from './type'; +import { addNodeFromTemplate } from '../node/add'; +import { + addNodeInput, + addNodeOutput, + removeNodeInput, + removeNodeOutput, + syncCodeNodeIO, + syncFormInputOutputs +} from '../io/service'; +import { getDocumentNode, moveNodeToParent } from '../nesting/service'; +import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; + +export type WorkflowCommandResult = { + document: WorkflowDocument; + changes: WorkflowChangeSummary[]; + warnings: WorkflowDiagnostic[]; + checksum: string; +}; + +/** + * 对结构化副本执行一条领域命令。任何步骤失败都会丢弃副本,调用方不会拿到半成品。 + */ +export const applyWorkflowCommand = async ({ + document, + command: rawCommand, + dependencies +}: { + document: WorkflowDocument; + command: WorkflowCommand; + dependencies: { + templateProvider: WorkflowTemplateProvider; + locale?: string; + translate?: (value: string) => string; + }; +}): Promise => { + const command = WorkflowCommandSchema.parse(rawCommand); + const nextDocument = structuredClone(document); + const warnings: WorkflowDiagnostic[] = []; + const changes: WorkflowChangeSummary[] = []; + + if (command.type === 'node.add') { + const added = await addNodeFromTemplate({ + document: nextDocument, + template: command.template, + nodeId: command.nodeId, + name: command.name, + position: command.position, + parentNodeId: command.parentNodeId, + dependencies + }); + warnings.push(...added.warnings); + + for (const [inputKey, value] of Object.entries(command.inputOverrides ?? {})) { + setInputValue({ document: nextDocument, nodeId: command.nodeId, inputKey, value }); + } + + if (command.connectFrom) { + const edge: WorkflowExecutionEdge = { + source: command.connectFrom, + target: { kind: 'target', nodeId: command.nodeId } + }; + connectExecutionEdge({ document: nextDocument, edge }); + } + changes.push({ + type: command.type, + nodeId: command.nodeId, + ...(added.nodeIds.length > 1 ? { details: { nodeIds: added.nodeIds } } : {}) + }); + } + + if (command.type === 'input.set') { + const inputNode = getDocumentNode(nextDocument, command.nodeId); + let previousFormFieldKeys: string[] = []; + if ( + inputNode.flowNodeType === FlowNodeTypeEnum.formInput && + command.inputKey === NodeInputKeyEnum.userInputForms + ) { + const previousForms = + (inputNode.inputs.find((item) => item.key === command.inputKey)?.value as + | Array<{ key?: unknown }> + | undefined) ?? []; + previousFormFieldKeys = previousForms + .map((item) => item.key) + .filter((key): key is string => typeof key === 'string'); + } + setInputValue({ + document: nextDocument, + nodeId: command.nodeId, + inputKey: command.inputKey, + value: command.value + }); + syncFormInputOutputs({ + document: nextDocument, + nodeId: command.nodeId, + previousFieldKeys: previousFormFieldKeys + }); + const codeIOSync = + inputNode.flowNodeType === FlowNodeTypeEnum.code && + command.inputKey === NodeInputKeyEnum.code && + typeof command.value === 'string' + ? syncCodeNodeIO({ + document: nextDocument, + nodeId: command.nodeId, + code: command.value + }) + : undefined; + codeIOSync?.removedOutputs.forEach((output) => { + if (output.references.length === 0) return; + warnings.push({ + code: 'WORKFLOW_OUTPUT_REFERENCES_REMAIN', + severity: 'warning', + nodeId: command.nodeId, + params: { outputKey: output.outputKey, references: output.references } + }); + }); + + let removedBranchEdgeCount = 0; + nextDocument.executionEdges = nextDocument.executionEdges.filter((edge) => { + if (edge.source.kind !== 'branch' || edge.source.nodeId !== command.nodeId) return true; + try { + assertExecutionEdge(nextDocument, edge); + return true; + } catch { + removedBranchEdgeCount += 1; + return false; + } + }); + if (removedBranchEdgeCount > 0) { + warnings.push({ + code: 'WORKFLOW_BRANCH_EDGES_REMOVED', + severity: 'warning', + nodeId: command.nodeId, + params: { removedEdgeCount: removedBranchEdgeCount } + }); + } + changes.push({ + type: command.type, + nodeId: command.nodeId, + inputKey: command.inputKey, + ...(removedBranchEdgeCount > 0 || codeIOSync + ? { + details: { + ...(removedBranchEdgeCount > 0 ? { removedBranchEdgeCount } : {}), + ...(codeIOSync ? { codeIOSync } : {}) + } + } + : {}) + }); + } + + if (command.type === 'input.ref') { + setInputReference({ + document: nextDocument, + nodeId: command.nodeId, + inputKey: command.inputKey, + ref: command.ref + }); + changes.push({ type: command.type, nodeId: command.nodeId, inputKey: command.inputKey }); + } + + if (command.type === 'input.add') { + addNodeInput({ document: nextDocument, nodeId: command.nodeId, input: command.input }); + changes.push({ + type: command.type, + nodeId: command.nodeId, + inputKey: command.input.key + }); + } + + if (command.type === 'input.remove') { + removeNodeInput({ + document: nextDocument, + nodeId: command.nodeId, + inputKey: command.inputKey + }); + changes.push({ type: command.type, nodeId: command.nodeId, inputKey: command.inputKey }); + } + + if (command.type === 'node.update') { + if ( + command.name === undefined && + command.position === undefined && + command.catchError === undefined + ) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_NODE_UPDATE_EMPTY', severity: 'error', nodeId: command.nodeId } + ]); + } + updateNode({ + document: nextDocument, + nodeId: command.nodeId, + name: command.name, + position: command.position, + catchError: command.catchError + }); + let removedCatchEdgeCount = 0; + if (command.catchError === false) { + const before = nextDocument.executionEdges.length; + nextDocument.executionEdges = nextDocument.executionEdges.filter( + (edge) => !(edge.source.kind === 'catch' && edge.source.nodeId === command.nodeId) + ); + removedCatchEdgeCount = before - nextDocument.executionEdges.length; + } + changes.push({ + type: command.type, + nodeId: command.nodeId, + ...(removedCatchEdgeCount > 0 ? { details: { removedCatchEdgeCount } } : {}) + }); + } + + if (command.type === 'node.move') { + let details: Record = {}; + if (command.parentNodeId !== undefined) { + details = moveNodeToParent({ + document: nextDocument, + nodeId: command.nodeId, + parentNodeId: command.parentNodeId ?? undefined, + position: command.position + }); + } else { + updateNode({ + document: nextDocument, + nodeId: command.nodeId, + position: command.position + }); + } + changes.push({ type: command.type, nodeId: command.nodeId, details }); + } + + if (command.type === 'node.insert') { + if (command.from.kind === 'selectedTools') { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_INSERT_TOOL_EDGE_UNSUPPORTED', severity: 'error' } + ]); + } + const oldEdge: WorkflowExecutionEdge = { source: command.from, target: command.to }; + disconnectExecutionEdge({ document: nextDocument, edge: oldEdge }); + const targetNode = getDocumentNode(nextDocument, command.to.nodeId); + const added = await addNodeFromTemplate({ + document: nextDocument, + template: command.template, + nodeId: command.nodeId, + position: command.position, + parentNodeId: targetNode.parentNodeId, + dependencies + }); + warnings.push(...added.warnings); + connectExecutionEdge({ + document: nextDocument, + edge: { source: command.from, target: { kind: 'target', nodeId: command.nodeId } } + }); + connectExecutionEdge({ + document: nextDocument, + edge: { + source: getDefaultExecutionSourcePort(nextDocument, command.nodeId), + target: command.to + } + }); + changes.push({ + type: command.type, + nodeId: command.nodeId, + details: { replacedEdge: oldEdge, nodeIds: added.nodeIds } + }); + } + + if (command.type === 'node.clone') { + cloneNode({ + document: nextDocument, + sourceNodeId: command.sourceNodeId, + nodeId: command.nodeId, + position: command.position, + offset: command.offset + }); + changes.push({ + type: command.type, + nodeId: command.nodeId, + details: { sourceNodeId: command.sourceNodeId } + }); + } + + if (command.type === 'node.remove') { + const details = removeNode({ document: nextDocument, nodeId: command.nodeId }); + changes.push({ type: command.type, nodeId: command.nodeId, details }); + } + + if (command.type === 'edge.connect') { + connectExecutionEdge({ document: nextDocument, edge: command.edge }); + changes.push({ type: command.type, details: { edge: command.edge } }); + } + + if (command.type === 'edge.disconnect') { + disconnectExecutionEdge({ document: nextDocument, edge: command.edge }); + changes.push({ type: command.type, details: { edge: command.edge } }); + } + + if (command.type === 'edge.reconnect') { + reconnectExecutionEdge({ + document: nextDocument, + oldEdge: command.oldEdge, + newEdge: command.newEdge + }); + changes.push({ + type: command.type, + details: { oldEdge: command.oldEdge, newEdge: command.newEdge } + }); + } + + if (command.type === 'input.unset') { + unsetInput({ document: nextDocument, nodeId: command.nodeId, inputKey: command.inputKey }); + changes.push({ type: command.type, nodeId: command.nodeId, inputKey: command.inputKey }); + } + + if (command.type === 'output.add') { + addNodeOutput({ document: nextDocument, nodeId: command.nodeId, output: command.output }); + changes.push({ type: command.type, nodeId: command.nodeId, key: command.output.key }); + } + + if (command.type === 'output.remove') { + const details = removeNodeOutput({ + document: nextDocument, + nodeId: command.nodeId, + outputKey: command.outputKey + }); + changes.push({ + type: command.type, + nodeId: command.nodeId, + key: command.outputKey, + details + }); + if (details.references.length > 0) { + warnings.push({ + code: 'WORKFLOW_OUTPUT_REFERENCES_REMAIN', + severity: 'warning', + nodeId: command.nodeId, + params: { outputKey: command.outputKey, references: details.references } + }); + } + } + + if (command.type === 'tool.attach') { + const toolCallNode = getDocumentNode(nextDocument, command.toolCallNodeId); + let toolNodeId = command.toolNodeId; + if (command.template && command.newNodeId) { + const added = await addNodeFromTemplate({ + document: nextDocument, + template: command.template, + nodeId: command.newNodeId, + position: command.position, + parentNodeId: toolCallNode.parentNodeId, + dependencies + }); + warnings.push(...added.warnings); + toolNodeId = command.newNodeId; + } + connectExecutionEdge({ + document: nextDocument, + edge: { + source: { kind: 'selectedTools', nodeId: command.toolCallNodeId }, + target: { kind: 'selectedTools', nodeId: toolNodeId! } + } + }); + changes.push({ + type: command.type, + nodeId: command.toolCallNodeId, + details: { toolNodeId } + }); + } + + if (command.type === 'tool.detach') { + disconnectExecutionEdge({ + document: nextDocument, + edge: { + source: { kind: 'selectedTools', nodeId: command.toolCallNodeId }, + target: { kind: 'selectedTools', nodeId: command.toolNodeId } + } + }); + changes.push({ + type: command.type, + nodeId: command.toolCallNodeId, + details: { toolNodeId: command.toolNodeId } + }); + } + + if (command.type === 'meta.update') { + if (command.name === undefined && command.intro === undefined) { + throw new WorkflowCommandError([{ code: 'WORKFLOW_META_UPDATE_EMPTY', severity: 'error' }]); + } + if (command.name !== undefined) nextDocument.app.name = command.name; + if (command.intro !== undefined) nextDocument.app.intro = command.intro; + changes.push({ type: command.type }); + } + + if (command.type === 'config.set') { + setChatConfigValue({ document: nextDocument, path: command.path, value: command.value }); + changes.push({ type: command.type, path: command.path }); + } + + if (command.type === 'config.unset') { + unsetChatConfigValue({ document: nextDocument, path: command.path }); + changes.push({ type: command.type, path: command.path }); + } + + if (command.type === 'variable.add') { + addGlobalVariable({ document: nextDocument, variable: command.variable }); + changes.push({ type: command.type, key: command.variable.key }); + } + + if (command.type === 'variable.update') { + if (Object.keys(command.patch).length === 0) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_VARIABLE_UPDATE_EMPTY', severity: 'error', params: { key: command.key } } + ]); + } + updateGlobalVariable({ document: nextDocument, key: command.key, patch: command.patch }); + changes.push({ type: command.type, key: command.key }); + } + + if (command.type === 'variable.remove') { + removeGlobalVariable({ document: nextDocument, key: command.key }); + changes.push({ type: command.type, key: command.key }); + } + + return { + document: nextDocument, + changes, + warnings, + checksum: getWorkflowChecksum(nextDocument) + }; +}; diff --git a/packages/workflow-core/src/command/type.ts b/packages/workflow-core/src/command/type.ts new file mode 100644 index 000000000000..fff307919a52 --- /dev/null +++ b/packages/workflow-core/src/command/type.ts @@ -0,0 +1,222 @@ +import z from 'zod'; +import { ExecutionSourcePortRefSchema } from '../edge/type'; +import { VariableRefSchema } from '../reference/type'; +import { NodeTemplateRefSchema } from '../template/type'; +import { WorkflowExecutionEdgeSchema } from '../edge/type'; +import { VariableItemTypeSchema } from '@fastgpt/global/core/app/type'; +import { + FlowNodeInputItemTypeSchema, + FlowNodeOutputItemTypeSchema +} from '@fastgpt/global/core/workflow/type/io'; + +const NodeAddCommandSchema = z.object({ + type: z.literal('node.add'), + nodeId: z.string().min(1), + template: NodeTemplateRefSchema, + name: z.string().min(1).optional(), + position: z.object({ x: z.number(), y: z.number() }).optional(), + parentNodeId: z.string().min(1).optional(), + connectFrom: ExecutionSourcePortRefSchema.optional(), + inputOverrides: z.record(z.string(), z.unknown()).optional() +}); + +const InputSetCommandSchema = z.object({ + type: z.literal('input.set'), + nodeId: z.string().min(1), + inputKey: z.string().min(1), + value: z.any() +}); + +const InputRefCommandSchema = z.object({ + type: z.literal('input.ref'), + nodeId: z.string().min(1), + inputKey: z.string().min(1), + ref: VariableRefSchema +}); + +const PositionSchema = z.object({ x: z.number(), y: z.number() }); + +const NodeUpdateCommandSchema = z.object({ + type: z.literal('node.update'), + nodeId: z.string().min(1), + name: z.string().min(1).optional(), + position: PositionSchema.optional(), + catchError: z.boolean().optional() +}); + +const NodeMoveCommandSchema = z + .object({ + type: z.literal('node.move'), + nodeId: z.string().min(1), + position: PositionSchema.optional(), + parentNodeId: z.string().min(1).nullable().optional() + }) + .refine((value) => value.position !== undefined || value.parentNodeId !== undefined); + +const NodeInsertCommandSchema = z.object({ + type: z.literal('node.insert'), + nodeId: z.string().min(1), + template: NodeTemplateRefSchema, + from: ExecutionSourcePortRefSchema, + to: z.object({ kind: z.literal('target'), nodeId: z.string().min(1) }), + position: PositionSchema.optional() +}); + +const NodeCloneCommandSchema = z.object({ + type: z.literal('node.clone'), + sourceNodeId: z.string().min(1), + nodeId: z.string().min(1), + position: PositionSchema.optional(), + offset: PositionSchema.optional() +}); + +const NodeRemoveCommandSchema = z.object({ + type: z.literal('node.remove'), + nodeId: z.string().min(1) +}); + +const EdgeConnectCommandSchema = z.object({ + type: z.literal('edge.connect'), + edge: WorkflowExecutionEdgeSchema +}); + +const EdgeDisconnectCommandSchema = z.object({ + type: z.literal('edge.disconnect'), + edge: WorkflowExecutionEdgeSchema +}); + +const EdgeReconnectCommandSchema = z.object({ + type: z.literal('edge.reconnect'), + oldEdge: WorkflowExecutionEdgeSchema, + newEdge: WorkflowExecutionEdgeSchema +}); + +const InputUnsetCommandSchema = z.object({ + type: z.literal('input.unset'), + nodeId: z.string().min(1), + inputKey: z.string().min(1) +}); + +const InputAddCommandSchema = z.object({ + type: z.literal('input.add'), + nodeId: z.string().min(1), + input: FlowNodeInputItemTypeSchema +}); + +const InputRemoveCommandSchema = z.object({ + type: z.literal('input.remove'), + nodeId: z.string().min(1), + inputKey: z.string().min(1) +}); + +const OutputAddCommandSchema = z.object({ + type: z.literal('output.add'), + nodeId: z.string().min(1), + output: FlowNodeOutputItemTypeSchema +}); + +const OutputRemoveCommandSchema = z.object({ + type: z.literal('output.remove'), + nodeId: z.string().min(1), + outputKey: z.string().min(1) +}); + +const ToolAttachCommandSchema = z + .object({ + type: z.literal('tool.attach'), + toolCallNodeId: z.string().min(1), + toolNodeId: z.string().min(1).optional(), + template: NodeTemplateRefSchema.optional(), + newNodeId: z.string().min(1).optional(), + position: PositionSchema.optional() + }) + .superRefine((value, context) => { + const usesExistingNode = value.toolNodeId !== undefined; + const createsNode = value.template !== undefined || value.newNodeId !== undefined; + if ( + usesExistingNode === createsNode || + (createsNode && (!value.template || !value.newNodeId)) + ) { + context.addIssue({ + code: 'custom', + message: 'Use either toolNodeId or template with newNodeId' + }); + } + }); + +const ToolDetachCommandSchema = z.object({ + type: z.literal('tool.detach'), + toolCallNodeId: z.string().min(1), + toolNodeId: z.string().min(1) +}); + +const MetaUpdateCommandSchema = z.object({ + type: z.literal('meta.update'), + name: z.string().min(1).optional(), + intro: z.string().optional() +}); + +const ConfigSetCommandSchema = z.object({ + type: z.literal('config.set'), + path: z.string().min(1), + value: z.any() +}); + +const ConfigUnsetCommandSchema = z.object({ + type: z.literal('config.unset'), + path: z.string().min(1) +}); + +const VariableAddCommandSchema = z.object({ + type: z.literal('variable.add'), + variable: VariableItemTypeSchema +}); + +const VariableUpdateCommandSchema = z.object({ + type: z.literal('variable.update'), + key: z.string().min(1), + patch: VariableItemTypeSchema.partial() +}); + +const VariableRemoveCommandSchema = z.object({ + type: z.literal('variable.remove'), + key: z.string().min(1) +}); + +export const WorkflowCommandSchema = z.discriminatedUnion('type', [ + NodeAddCommandSchema, + NodeUpdateCommandSchema, + NodeMoveCommandSchema, + NodeInsertCommandSchema, + NodeCloneCommandSchema, + NodeRemoveCommandSchema, + EdgeConnectCommandSchema, + EdgeDisconnectCommandSchema, + EdgeReconnectCommandSchema, + InputSetCommandSchema, + InputRefCommandSchema, + InputUnsetCommandSchema, + InputAddCommandSchema, + InputRemoveCommandSchema, + OutputAddCommandSchema, + OutputRemoveCommandSchema, + ToolAttachCommandSchema, + ToolDetachCommandSchema, + MetaUpdateCommandSchema, + ConfigSetCommandSchema, + ConfigUnsetCommandSchema, + VariableAddCommandSchema, + VariableUpdateCommandSchema, + VariableRemoveCommandSchema +]); + +export type WorkflowCommand = z.infer; + +export type WorkflowChangeSummary = { + type: WorkflowCommand['type']; + nodeId?: string; + inputKey?: string; + path?: string; + key?: string; + details?: Record; +}; diff --git a/packages/workflow-core/src/config/service.ts b/packages/workflow-core/src/config/service.ts new file mode 100644 index 000000000000..41a0b719382b --- /dev/null +++ b/packages/workflow-core/src/config/service.ts @@ -0,0 +1,275 @@ +import { + AppChatConfigTypeSchema, + type AppChatConfigType, + VariableItemTypeSchema, + type VariableItemType +} from '@fastgpt/global/core/app/type'; +import { NodeOutputKeyEnum, VARIABLE_NODE_ID } from '@fastgpt/global/core/workflow/constants'; +import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; +import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import { userFilesInput } from '@fastgpt/global/core/workflow/template/system/workflowStart'; +import type { WorkflowDocument } from '../domain/document'; +import { WorkflowCommandError } from '../domain/diagnostic'; + +export const CHAT_CONFIG_PATHS = [ + 'welcomeText', + 'autoExecute', + 'autoExecute.open', + 'autoExecute.defaultPrompt', + 'questionGuide', + 'questionGuide.open', + 'questionGuide.model', + 'questionGuide.customPrompt', + 'ttsConfig', + 'whisperConfig', + 'scheduledTriggerConfig', + 'chatInputGuide', + 'fileSelectConfig', + 'instruction' +] as const; + +const assertConfigPath = (path: string) => { + if (!(CHAT_CONFIG_PATHS as readonly string[]).includes(path)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_CHAT_CONFIG_PATH_NOT_ALLOWED', severity: 'error', params: { path } } + ]); + } +}; + +const canUploadFiles = (fileSelectConfig: AppChatConfigType['fileSelectConfig']) => + Boolean( + fileSelectConfig?.canSelectFile || + fileSelectConfig?.canSelectImg || + fileSelectConfig?.canSelectVideo || + fileSelectConfig?.canSelectAudio || + fileSelectConfig?.canSelectCustomFileExtension + ); + +const referencesOutput = (value: unknown, nodeId: string, outputKey: string): boolean => { + if (!Array.isArray(value)) return false; + if (value.length === 2 && value[0] === nodeId && value[1] === outputKey) return true; + return value.some((item) => referencesOutput(item, nodeId, outputKey)); +}; + +/** 根据文件选择配置同步 Start 的文件输出,避免上传能力与图引用契约分离。 */ +const syncWorkflowStartFileOutput = ({ + document, + fileSelectConfig +}: { + document: WorkflowDocument; + fileSelectConfig: AppChatConfigType['fileSelectConfig']; +}) => { + const startNode = document.nodes.find( + (node) => node.flowNodeType === FlowNodeTypeEnum.workflowStart + ); + if (!startNode) return; + + const outputIndex = startNode.outputs.findIndex( + (output) => output.key === NodeOutputKeyEnum.userFiles + ); + if (canUploadFiles(fileSelectConfig)) { + if (outputIndex < 0) startNode.outputs.push(structuredClone(userFilesInput)); + return; + } + if (outputIndex < 0) return; + + const references = document.nodes.flatMap((node) => + node.inputs + .filter((input) => + referencesOutput(input.value, startNode.nodeId, NodeOutputKeyEnum.userFiles) + ) + .map((input) => ({ nodeId: node.nodeId, inputKey: input.key })) + ); + if (references.length > 0) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_FILE_OUTPUT_STILL_REFERENCED', + severity: 'error', + nodeId: startNode.nodeId, + params: { references } + } + ]); + } + startNode.outputs.splice(outputIndex, 1); +}; + +export const getChatConfigValue = (document: WorkflowDocument, path: string) => { + assertConfigPath(path); + return path.split('.').reduce((value, key) => { + if (!value || typeof value !== 'object') return undefined; + return (value as Record)[key]; + }, document.chatConfig); +}; + +export const setChatConfigValue = ({ + document, + path, + value +}: { + document: WorkflowDocument; + path: string; + value: unknown; +}) => { + assertConfigPath(path); + const keys = path.split('.'); + const next = structuredClone(document.chatConfig) as Record; + let target = next; + for (const key of keys.slice(0, -1)) { + const current = target[key]; + target[key] = current && typeof current === 'object' ? current : {}; + target = target[key] as Record; + } + target[keys.at(-1)!] = structuredClone(value); + const nextChatConfig = AppChatConfigTypeSchema.parse(next); + if (path === 'fileSelectConfig') { + syncWorkflowStartFileOutput({ + document, + fileSelectConfig: nextChatConfig.fileSelectConfig + }); + } + document.chatConfig = nextChatConfig; +}; + +export const unsetChatConfigValue = ({ + document, + path +}: { + document: WorkflowDocument; + path: string; +}) => { + assertConfigPath(path); + const keys = path.split('.'); + const next = structuredClone(document.chatConfig) as Record; + let target: Record | undefined = next; + for (const key of keys.slice(0, -1)) { + const current: unknown = target?.[key]; + target = + current && typeof current === 'object' ? (current as Record) : undefined; + } + if (target) delete target[keys.at(-1)!]; + const nextChatConfig = AppChatConfigTypeSchema.parse(next); + if (path === 'fileSelectConfig') { + syncWorkflowStartFileOutput({ + document, + fileSelectConfig: nextChatConfig.fileSelectConfig + }); + } + document.chatConfig = nextChatConfig; +}; + +const getVariables = (document: WorkflowDocument) => document.chatConfig.variables ?? []; + +export const addGlobalVariable = ({ + document, + variable +}: { + document: WorkflowDocument; + variable: VariableItemType; +}) => { + if (getVariables(document).some((item) => item.key === variable.key)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_VARIABLE_KEY_DUPLICATED', severity: 'error', params: { key: variable.key } } + ]); + } + document.chatConfig.variables = [ + ...getVariables(document), + VariableItemTypeSchema.parse(variable) + ]; +}; + +export const updateGlobalVariable = ({ + document, + key, + patch +}: { + document: WorkflowDocument; + key: string; + patch: Partial; +}) => { + const variables = getVariables(document); + const index = variables.findIndex((item) => item.key === key); + if (index < 0) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_VARIABLE_NOT_FOUND', severity: 'error', params: { key } } + ]); + } + const nextKey = patch.key ?? key; + if (nextKey !== key && variables.some((item) => item.key === nextKey)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_VARIABLE_KEY_DUPLICATED', severity: 'error', params: { key: nextKey } } + ]); + } + const nextValueType = patch.valueType ?? variables[index].valueType; + const references = document.nodes.flatMap((node) => + node.inputs + .filter( + (input) => + Array.isArray(input.value) && + input.value[0] === VARIABLE_NODE_ID && + input.value[1] === key + ) + .map((input) => ({ node, input })) + ); + const incompatibleReference = references.find( + ({ input }) => + input.valueType !== undefined && + input.valueType !== WorkflowIOValueTypeEnum.any && + nextValueType !== undefined && + nextValueType !== WorkflowIOValueTypeEnum.any && + input.valueType !== nextValueType + ); + if (incompatibleReference) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_VARIABLE_TYPE_CHANGE_INCOMPATIBLE', + severity: 'error', + nodeId: incompatibleReference.node.nodeId, + inputKey: incompatibleReference.input.key, + params: { key, valueType: nextValueType } + } + ]); + } + const next = [...variables]; + next[index] = VariableItemTypeSchema.parse({ ...variables[index], ...structuredClone(patch) }); + document.chatConfig.variables = next; + if (nextKey !== key) { + for (const { input } of references) { + input.value = [VARIABLE_NODE_ID, nextKey]; + } + } +}; + +export const removeGlobalVariable = ({ + document, + key +}: { + document: WorkflowDocument; + key: string; +}) => { + const variables = getVariables(document); + if (!variables.some((item) => item.key === key)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_VARIABLE_NOT_FOUND', severity: 'error', params: { key } } + ]); + } + const references = document.nodes.flatMap((node) => + node.inputs + .filter( + (input) => + Array.isArray(input.value) && + input.value[0] === VARIABLE_NODE_ID && + input.value[1] === key + ) + .map((input) => ({ nodeId: node.nodeId, inputKey: input.key })) + ); + if (references.length > 0) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_VARIABLE_STILL_REFERENCED', + severity: 'error', + params: { key, references } + } + ]); + } + document.chatConfig.variables = variables.filter((item) => item.key !== key); +}; diff --git a/packages/workflow-core/src/domain/checksum.ts b/packages/workflow-core/src/domain/checksum.ts new file mode 100644 index 000000000000..11428fa1c59b --- /dev/null +++ b/packages/workflow-core/src/domain/checksum.ts @@ -0,0 +1,42 @@ +import type { WorkflowDocument } from './document'; + +const sortRecord = (value: unknown): unknown => { + if (Array.isArray(value)) return value.map(sortRecord); + if (!value || typeof value !== 'object') return value; + + return Object.fromEntries( + Object.entries(value) + .sort(([left], [right]) => left.localeCompare(right)) + .map(([key, item]) => [key, sortRecord(item)]) + ); +}; + +/** 返回字段和集合顺序稳定的文档副本,供序列化、比较和基础 checksum 使用。 */ +export const normalizeWorkflowDocument = (document: WorkflowDocument): WorkflowDocument => ({ + ...structuredClone(document), + app: sortRecord(document.app) as WorkflowDocument['app'], + nodes: [...document.nodes] + .sort((left, right) => left.nodeId.localeCompare(right.nodeId)) + .map((node) => sortRecord(node) as WorkflowDocument['nodes'][number]), + executionEdges: [...document.executionEdges] + .sort((left, right) => { + const leftKey = JSON.stringify(left); + const rightKey = JSON.stringify(right); + return leftKey.localeCompare(rightKey); + }) + .map((edge) => sortRecord(edge) as WorkflowDocument['executionEdges'][number]), + chatConfig: sortRecord(document.chatConfig) as WorkflowDocument['chatConfig'] +}); + +const fnv1a = (value: string) => { + let hash = 0x811c9dc5; + for (const character of value) { + hash ^= character.charCodeAt(0); + hash = Math.imul(hash, 0x01000193); + } + return (hash >>> 0).toString(16).padStart(8, '0'); +}; + +/** PR1 的稳定变更标识;PR4 再升级为带并发语义的 canonical SHA-256。 */ +export const getWorkflowChecksum = (document: WorkflowDocument) => + `fnv1a:${fnv1a(JSON.stringify(normalizeWorkflowDocument(document)))}`; diff --git a/packages/workflow-core/src/domain/diagnostic.ts b/packages/workflow-core/src/domain/diagnostic.ts new file mode 100644 index 000000000000..106b03c4974c --- /dev/null +++ b/packages/workflow-core/src/domain/diagnostic.ts @@ -0,0 +1,32 @@ +import z from 'zod'; + +export const WorkflowDiagnosticSeveritySchema = z.enum(['error', 'warning']); + +export const WorkflowDiagnosticSchema = z.object({ + code: z.string(), + severity: WorkflowDiagnosticSeveritySchema, + path: z.array(z.union([z.string(), z.number()])).optional(), + nodeId: z.string().optional(), + inputKey: z.string().optional(), + params: z.record(z.string(), z.unknown()).optional() +}); + +export type WorkflowDiagnostic = z.infer; + +export class WorkflowCommandError extends Error { + readonly code = 'WORKFLOW_COMMAND_FAILED'; + + constructor(readonly diagnostics: WorkflowDiagnostic[]) { + super(diagnostics[0]?.code ?? 'WORKFLOW_COMMAND_FAILED'); + this.name = 'WorkflowCommandError'; + } +} + +export class WorkflowValidationError extends Error { + readonly code = 'WORKFLOW_VALIDATION_FAILED'; + + constructor(readonly diagnostics: WorkflowDiagnostic[]) { + super(diagnostics[0]?.code ?? 'WORKFLOW_VALIDATION_FAILED'); + this.name = 'WorkflowValidationError'; + } +} diff --git a/packages/workflow-core/src/domain/document.ts b/packages/workflow-core/src/domain/document.ts new file mode 100644 index 000000000000..cd7a4c4f5531 --- /dev/null +++ b/packages/workflow-core/src/domain/document.ts @@ -0,0 +1,33 @@ +import { AppChatConfigTypeSchema } from '@fastgpt/global/core/app/type'; +import { StoreNodeItemTypeSchema } from '@fastgpt/global/core/workflow/type/node'; +import z from 'zod'; +import { WorkflowExecutionEdgeSchema } from '../edge/type'; + +export const WORKFLOW_DOCUMENT_SCHEMA_VERSION = 'fastgpt-workflow/v1' as const; + +export const WorkflowDocumentSchema = z.object({ + schemaVersion: z.literal(WORKFLOW_DOCUMENT_SCHEMA_VERSION), + app: z.object({ + appId: z.string().optional(), + name: z.string().optional(), + intro: z.string().optional(), + appType: z.string().optional(), + baseVersionId: z.string().optional() + }), + nodes: z.array(StoreNodeItemTypeSchema), + executionEdges: z.array(WorkflowExecutionEdgeSchema), + chatConfig: AppChatConfigTypeSchema +}); + +export type WorkflowDocument = z.infer; + +export const createWorkflowDocument = ( + input: Partial> = {} +): WorkflowDocument => + WorkflowDocumentSchema.parse({ + schemaVersion: WORKFLOW_DOCUMENT_SCHEMA_VERSION, + app: input.app ?? {}, + nodes: input.nodes ?? [], + executionEdges: input.executionEdges ?? [], + chatConfig: input.chatConfig ?? {} + }); diff --git a/packages/workflow-core/src/edge/compiler.ts b/packages/workflow-core/src/edge/compiler.ts new file mode 100644 index 000000000000..4a9f79cd82d6 --- /dev/null +++ b/packages/workflow-core/src/edge/compiler.ts @@ -0,0 +1,165 @@ +import { NodeOutputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import { + FlowNodeOutputTypeEnum, + FlowNodeTypeEnum +} from '@fastgpt/global/core/workflow/node/constant'; +import { getHandleId } from '@fastgpt/global/core/workflow/utils'; +import type { StoreEdgeItemType } from '@fastgpt/global/core/workflow/type/edge'; +import type { WorkflowDocument } from '../domain/document'; +import { WorkflowCommandError } from '../domain/diagnostic'; +import type { ExecutionSourcePortRef, ExecutionTargetPortRef, WorkflowExecutionEdge } from './type'; + +const assertNode = (document: WorkflowDocument, nodeId: string) => { + const node = document.nodes.find((item) => item.nodeId === nodeId); + if (!node) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_NODE_NOT_FOUND', severity: 'error', nodeId } + ]); + } + return node; +}; + +const compileSourceHandle = (port: ExecutionSourcePortRef, document: WorkflowDocument): string => { + const node = assertNode(document, port.nodeId); + if (port.kind === 'next') return getHandleId(port.nodeId, 'source', 'right'); + if (port.kind === 'catch') return getHandleId(port.nodeId, 'source_catch', 'right'); + if (port.kind === 'selectedTools') return NodeOutputKeyEnum.selectedTools; + if (port.kind === 'branch') { + if ( + ![ + FlowNodeTypeEnum.ifElseNode, + FlowNodeTypeEnum.userSelect, + FlowNodeTypeEnum.classifyQuestion + ].includes(node.flowNodeType) + ) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_BRANCH_PORT_UNSUPPORTED', + severity: 'error', + nodeId: port.nodeId, + params: { branchKey: port.branchKey } + } + ]); + } + return getHandleId(port.nodeId, 'source', port.branchKey); + } + + const output = node.outputs.find((item) => item.key === port.outputKey); + if (!output || output.type !== FlowNodeOutputTypeEnum.source) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_SOURCE_OUTPUT_NOT_FOUND', + severity: 'error', + nodeId: port.nodeId, + params: { outputKey: port.outputKey } + } + ]); + } + return getHandleId(port.nodeId, 'source', port.outputKey); +}; + +const compileTargetHandle = (port: ExecutionTargetPortRef, document: WorkflowDocument): string => { + assertNode(document, port.nodeId); + return port.kind === 'selectedTools' + ? NodeOutputKeyEnum.selectedTools + : getHandleId(port.nodeId, 'target', 'left'); +}; + +/** 将稳定语义端口编译为 FastGPT 当前 StoreEdge handle。 */ +export const compileExecutionEdge = ( + edge: WorkflowExecutionEdge, + document: WorkflowDocument +): StoreEdgeItemType => ({ + source: edge.source.nodeId, + sourceHandle: compileSourceHandle(edge.source, document), + target: edge.target.nodeId, + targetHandle: compileTargetHandle(edge.target, document) +}); + +const parseSourceHandle = ({ + edge, + document +}: { + edge: StoreEdgeItemType; + document: WorkflowDocument; +}): ExecutionSourcePortRef => { + if (edge.sourceHandle === NodeOutputKeyEnum.selectedTools) { + return { kind: 'selectedTools', nodeId: edge.source }; + } + if (edge.sourceHandle === getHandleId(edge.source, 'source_catch', 'right')) { + return { kind: 'catch', nodeId: edge.source }; + } + if (edge.sourceHandle === getHandleId(edge.source, 'source', 'right')) { + return { kind: 'next', nodeId: edge.source }; + } + + const prefix = getHandleId(edge.source, 'source', ''); + if (!edge.sourceHandle.startsWith(prefix)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_EDGE_HANDLE_UNSUPPORTED', + severity: 'error', + params: { edge } + } + ]); + } + + const key = edge.sourceHandle.slice(prefix.length); + const sourceNode = assertNode(document, edge.source); + const sourceOutput = sourceNode.outputs.find( + (output) => output.key === key && output.type === FlowNodeOutputTypeEnum.source + ); + if (sourceOutput) return { kind: 'sourceOutput', nodeId: edge.source, outputKey: key }; + if ( + [ + FlowNodeTypeEnum.ifElseNode, + FlowNodeTypeEnum.userSelect, + FlowNodeTypeEnum.classifyQuestion + ].includes(sourceNode.flowNodeType) + ) { + return { kind: 'branch', nodeId: edge.source, branchKey: key }; + } + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_EDGE_HANDLE_UNSUPPORTED', + severity: 'error', + params: { edge } + } + ]); +}; + +const parseTargetHandle = (edge: StoreEdgeItemType): ExecutionTargetPortRef => { + if (edge.targetHandle === NodeOutputKeyEnum.selectedTools) { + return { kind: 'selectedTools', nodeId: edge.target }; + } + if (edge.targetHandle === getHandleId(edge.target, 'target', 'left')) { + return { kind: 'target', nodeId: edge.target }; + } + + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_EDGE_HANDLE_UNSUPPORTED', + severity: 'error', + params: { edge } + } + ]); +}; + +/** 反编译 StoreEdge;未知 handle 会阻断,避免导入时静默丢边。 */ +export const decompileStoreEdge = ( + edge: StoreEdgeItemType, + document: WorkflowDocument +): WorkflowExecutionEdge => { + assertNode(document, edge.source); + assertNode(document, edge.target); + const result = { + source: parseSourceHandle({ edge, document }), + target: parseTargetHandle(edge) + }; + if ((result.source.kind === 'selectedTools') !== (result.target.kind === 'selectedTools')) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_TOOL_EDGE_INVALID', severity: 'error', params: { edge } } + ]); + } + return result; +}; diff --git a/packages/workflow-core/src/edge/parser.ts b/packages/workflow-core/src/edge/parser.ts new file mode 100644 index 000000000000..af94971a17b2 --- /dev/null +++ b/packages/workflow-core/src/edge/parser.ts @@ -0,0 +1,51 @@ +import { WorkflowCommandError } from '../domain/diagnostic'; +import type { ExecutionSourcePortRef, ExecutionTargetPortRef } from './type'; + +/** 解析 `node@port` 形式的执行源端口。 */ +export const parseExecutionSourcePortRef = (value: string): ExecutionSourcePortRef => { + const separatorIndex = value.lastIndexOf('@'); + const nodeId = value.slice(0, separatorIndex); + const port = value.slice(separatorIndex + 1); + + if (separatorIndex <= 0 || !port) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_SOURCE_PORT_INVALID', severity: 'error', params: { value } } + ]); + } + + if (port === 'next') return { kind: 'next', nodeId }; + if (port === 'catch') return { kind: 'catch', nodeId }; + if (port === 'tools') return { kind: 'selectedTools', nodeId }; + if (port.startsWith('branch:')) { + const branchKey = port.slice('branch:'.length); + if (branchKey) return { kind: 'branch', nodeId, branchKey }; + } + if (port.startsWith('output:')) { + const outputKey = port.slice('output:'.length); + if (outputKey) return { kind: 'sourceOutput', nodeId, outputKey }; + } + + throw new WorkflowCommandError([ + { code: 'WORKFLOW_SOURCE_PORT_UNSUPPORTED', severity: 'error', params: { value } } + ]); +}; + +/** 解析 `node@target` 或 `node@tools` 形式的执行目标端口。 */ +export const parseExecutionTargetPortRef = (value: string): ExecutionTargetPortRef => { + const separatorIndex = value.lastIndexOf('@'); + const nodeId = value.slice(0, separatorIndex); + const port = value.slice(separatorIndex + 1); + + if (separatorIndex <= 0 || !port) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_TARGET_PORT_INVALID', severity: 'error', params: { value } } + ]); + } + + if (port === 'target') return { kind: 'target', nodeId }; + if (port === 'tools') return { kind: 'selectedTools', nodeId }; + + throw new WorkflowCommandError([ + { code: 'WORKFLOW_TARGET_PORT_UNSUPPORTED', severity: 'error', params: { value } } + ]); +}; diff --git a/packages/workflow-core/src/edge/service.ts b/packages/workflow-core/src/edge/service.ts new file mode 100644 index 000000000000..60a7f0ec5fd4 --- /dev/null +++ b/packages/workflow-core/src/edge/service.ts @@ -0,0 +1,214 @@ +import type { WorkflowDocument } from '../domain/document'; +import { WorkflowCommandError } from '../domain/diagnostic'; +import { compileExecutionEdge } from './compiler'; +import type { WorkflowExecutionEdge } from './type'; +import type { ExecutionSourcePortRef } from './type'; +import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import { IfElseResultEnum } from '@fastgpt/global/core/workflow/template/system/ifElse/constant'; +import { getIfElseBranchHandleKey } from '@fastgpt/global/core/workflow/template/system/ifElse/utils'; +import type { IfElseListItemType } from '@fastgpt/global/core/workflow/template/system/ifElse/type'; +import { getDocumentNode } from '../nesting/service'; + +const edgeEquals = (left: WorkflowExecutionEdge, right: WorkflowExecutionEdge) => + JSON.stringify(left) === JSON.stringify(right); + +const toolTargetTypes = new Set([ + FlowNodeTypeEnum.tool, + FlowNodeTypeEnum.toolSet, + FlowNodeTypeEnum.pluginModule, + FlowNodeTypeEnum.appModule, + FlowNodeTypeEnum.runApp, + FlowNodeTypeEnum.chatNode, + FlowNodeTypeEnum.answerNode, + FlowNodeTypeEnum.datasetSearchNode, + FlowNodeTypeEnum.contentExtract, + FlowNodeTypeEnum.httpRequest468, + FlowNodeTypeEnum.toolParams, + FlowNodeTypeEnum.userSelect, + FlowNodeTypeEnum.formInput, + FlowNodeTypeEnum.variableUpdate +]); + +const nodesWithoutNextPort = new Set([ + FlowNodeTypeEnum.ifElseNode, + FlowNodeTypeEnum.userSelect, + FlowNodeTypeEnum.classifyQuestion, + FlowNodeTypeEnum.answerNode, + FlowNodeTypeEnum.loopRunBreak, + FlowNodeTypeEnum.nestedEnd, + FlowNodeTypeEnum.pluginOutput +]); + +/** 返回节点在 insert 场景下用于承接旧 target 的默认执行出口。 */ +export const getDefaultExecutionSourcePort = ( + document: WorkflowDocument, + nodeId: string +): ExecutionSourcePortRef => { + const node = getDocumentNode(document, nodeId); + if (node.flowNodeType === FlowNodeTypeEnum.ifElseNode) { + return { kind: 'branch', nodeId, branchKey: IfElseResultEnum.ELSE }; + } + if ( + node.flowNodeType === FlowNodeTypeEnum.userSelect || + node.flowNodeType === FlowNodeTypeEnum.classifyQuestion + ) { + const inputKey = + node.flowNodeType === FlowNodeTypeEnum.userSelect + ? NodeInputKeyEnum.userSelectOptions + : NodeInputKeyEnum.agents; + const options = node.inputs.find((item) => item.key === inputKey)?.value; + const branchKey = + Array.isArray(options) && options[0] && typeof options[0].key === 'string' + ? options[0].key + : undefined; + if (branchKey) return { kind: 'branch', nodeId, branchKey }; + } + if (nodesWithoutNextPort.has(node.flowNodeType)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_NODE_HAS_NO_DEFAULT_SOURCE_PORT', severity: 'error', nodeId } + ]); + } + return { kind: 'next', nodeId }; +}; + +const assertBranchKey = (document: WorkflowDocument, edge: WorkflowExecutionEdge) => { + if (edge.source.kind !== 'branch') return; + const node = getDocumentNode(document, edge.source.nodeId); + const inputKey = + node.flowNodeType === FlowNodeTypeEnum.ifElseNode + ? NodeInputKeyEnum.ifElseList + : node.flowNodeType === FlowNodeTypeEnum.userSelect + ? NodeInputKeyEnum.userSelectOptions + : NodeInputKeyEnum.agents; + const value = node.inputs.find((item) => item.key === inputKey)?.value; + const keys = (() => { + if (!Array.isArray(value)) return []; + if (node.flowNodeType === FlowNodeTypeEnum.ifElseNode) { + return [ + ...value.map((item, index) => getIfElseBranchHandleKey(item as IfElseListItemType, index)), + IfElseResultEnum.ELSE + ]; + } + return value + .map((item) => + item && typeof item === 'object' ? (item as { key?: unknown }).key : undefined + ) + .filter((item): item is string => typeof item === 'string'); + })(); + if (!keys.includes(edge.source.branchKey)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_BRANCH_KEY_NOT_FOUND', + severity: 'error', + nodeId: edge.source.nodeId, + params: { branchKey: edge.source.branchKey } + } + ]); + } +}; + +/** 校验复杂执行边的端口配对、作用域和节点能力。 */ +export const assertExecutionEdge = (document: WorkflowDocument, edge: WorkflowExecutionEdge) => { + const sourceNode = getDocumentNode(document, edge.source.nodeId); + const targetNode = getDocumentNode(document, edge.target.nodeId); + if (sourceNode.nodeId === targetNode.nodeId) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_EDGE_SELF_CONNECTION', severity: 'error', nodeId: sourceNode.nodeId } + ]); + } + if (sourceNode.parentNodeId !== targetNode.parentNodeId) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_EDGE_CROSS_SCOPE', severity: 'error', params: { edge } } + ]); + } + const sourceIsTool = edge.source.kind === 'selectedTools'; + const targetIsTool = edge.target.kind === 'selectedTools'; + if (sourceIsTool !== targetIsTool) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_TOOL_EDGE_INVALID', severity: 'error', params: { edge } } + ]); + } + if (sourceIsTool) { + if ( + sourceNode.flowNodeType !== FlowNodeTypeEnum.toolCall || + !toolTargetTypes.has(targetNode.flowNodeType) + ) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_TOOL_EDGE_NODE_INVALID', severity: 'error', params: { edge } } + ]); + } + } else if (edge.target.kind !== 'target') { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_EDGE_TARGET_KIND_INVALID', severity: 'error', params: { edge } } + ]); + } + if (edge.source.kind === 'catch' && sourceNode.catchError !== true) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_CATCH_NOT_ENABLED', severity: 'error', nodeId: sourceNode.nodeId } + ]); + } + if (edge.source.kind === 'next' && nodesWithoutNextPort.has(sourceNode.flowNodeType)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_NEXT_PORT_UNSUPPORTED', + severity: 'error', + nodeId: sourceNode.nodeId + } + ]); + } + assertBranchKey(document, edge); + compileExecutionEdge(edge, document); +}; + +export const connectExecutionEdge = ({ + document, + edge +}: { + document: WorkflowDocument; + edge: WorkflowExecutionEdge; +}) => { + assertExecutionEdge(document, edge); + if (document.executionEdges.some((item) => edgeEquals(item, edge))) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_EDGE_DUPLICATED', severity: 'error', params: { edge } } + ]); + } + document.executionEdges.push(edge); +}; + +export const disconnectExecutionEdge = ({ + document, + edge +}: { + document: WorkflowDocument; + edge: WorkflowExecutionEdge; +}) => { + const index = document.executionEdges.findIndex((item) => edgeEquals(item, edge)); + if (index < 0) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_EDGE_NOT_FOUND', severity: 'error', params: { edge } } + ]); + } + document.executionEdges.splice(index, 1); +}; + +/** 先校验新边,再移除旧边,保证重连不会留下半成品。 */ +export const reconnectExecutionEdge = ({ + document, + oldEdge, + newEdge +}: { + document: WorkflowDocument; + oldEdge: WorkflowExecutionEdge; + newEdge: WorkflowExecutionEdge; +}) => { + assertExecutionEdge(document, newEdge); + if (document.executionEdges.some((item) => edgeEquals(item, newEdge))) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_EDGE_DUPLICATED', severity: 'error', params: { edge: newEdge } } + ]); + } + disconnectExecutionEdge({ document, edge: oldEdge }); + document.executionEdges.push(newEdge); +}; diff --git a/packages/workflow-core/src/edge/type.ts b/packages/workflow-core/src/edge/type.ts new file mode 100644 index 000000000000..b72234ba1cff --- /dev/null +++ b/packages/workflow-core/src/edge/type.ts @@ -0,0 +1,27 @@ +import z from 'zod'; + +export const ExecutionSourcePortRefSchema = z.discriminatedUnion('kind', [ + z.object({ kind: z.literal('next'), nodeId: z.string().min(1) }), + z.object({ kind: z.literal('branch'), nodeId: z.string().min(1), branchKey: z.string().min(1) }), + z.object({ + kind: z.literal('sourceOutput'), + nodeId: z.string().min(1), + outputKey: z.string().min(1) + }), + z.object({ kind: z.literal('catch'), nodeId: z.string().min(1) }), + z.object({ kind: z.literal('selectedTools'), nodeId: z.string().min(1) }) +]); + +export const ExecutionTargetPortRefSchema = z.discriminatedUnion('kind', [ + z.object({ kind: z.literal('target'), nodeId: z.string().min(1) }), + z.object({ kind: z.literal('selectedTools'), nodeId: z.string().min(1) }) +]); + +export const WorkflowExecutionEdgeSchema = z.object({ + source: ExecutionSourcePortRefSchema, + target: ExecutionTargetPortRefSchema +}); + +export type ExecutionSourcePortRef = z.infer; +export type ExecutionTargetPortRef = z.infer; +export type WorkflowExecutionEdge = z.infer; diff --git a/packages/workflow-core/src/index.ts b/packages/workflow-core/src/index.ts new file mode 100644 index 000000000000..b0fa25dc550c --- /dev/null +++ b/packages/workflow-core/src/index.ts @@ -0,0 +1,30 @@ +export * from './command/apply'; +export * from './command/type'; +export * from './code/io'; +export * from './binding/service'; +export * from './binding/type'; +export * from './domain/checksum'; +export * from './domain/diagnostic'; +export * from './domain/document'; +export * from './edge/compiler'; +export * from './edge/parser'; +export * from './edge/service'; +export * from './edge/type'; +export * from './reference/service'; +export * from './reference/type'; +export * from './node/service'; +export * from './node/add'; +export * from './io/service'; +export * from './nesting/service'; +export * from './config/service'; +export * from './store/compile'; +export * from './store/decompile'; +export * from './template/automationMeta'; +export * from './template/builtin'; +export * from './template/descriptor'; +export * from './template/defaultValue'; +export * from './template/instantiate'; +export * from './template/type'; +export * from './template/valueSchema'; +export * from './validation'; +export * from './public'; diff --git a/packages/workflow-core/src/io/service.ts b/packages/workflow-core/src/io/service.ts new file mode 100644 index 000000000000..8de7be0f9fe4 --- /dev/null +++ b/packages/workflow-core/src/io/service.ts @@ -0,0 +1,348 @@ +import { + NodeInputKeyEnum, + NodeOutputKeyEnum, + WorkflowIOValueTypeEnum +} from '@fastgpt/global/core/workflow/constants'; +import { + FlowNodeInputTypeEnum, + FlowNodeOutputTypeEnum, + FlowNodeTypeEnum +} from '@fastgpt/global/core/workflow/node/constant'; +import { + FlowNodeInputItemTypeSchema, + type FlowNodeInputItemType, + FlowNodeOutputItemTypeSchema, + type FlowNodeOutputItemType +} from '@fastgpt/global/core/workflow/type/io'; +import type { WorkflowDocument } from '../domain/document'; +import { WorkflowCommandError } from '../domain/diagnostic'; +import { getDocumentNode } from '../nesting/service'; +import { extractCodeInputDefinitions, extractCodeOutputDefinitions } from '../code/io'; + +const dynamicOutputNodeTypes = new Set([ + FlowNodeTypeEnum.code, + FlowNodeTypeEnum.contentExtract, + FlowNodeTypeEnum.httpRequest468, + FlowNodeTypeEnum.loopRun +]); + +const supportsDynamicOutputs = (node: ReturnType) => + dynamicOutputNodeTypes.has(node.flowNodeType) || + node.outputs.some((item) => item.key === NodeOutputKeyEnum.addOutputParam); + +const dynamicInputMarkerKeys = new Set([ + NodeInputKeyEnum.addInputParam, + NodeInputKeyEnum.datasetQuoteList +]); + +const supportsDynamicInputs = (node: ReturnType) => + node.inputs.some((item) => dynamicInputMarkerKeys.has(item.key)); + +/** 向带动态输入标记的节点添加一个可编辑输入。 */ +export const addNodeInput = ({ + document, + nodeId, + input +}: { + document: WorkflowDocument; + nodeId: string; + input: FlowNodeInputItemType; +}) => { + const node = getDocumentNode(document, nodeId); + if (!supportsDynamicInputs(node)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_DYNAMIC_INPUT_UNSUPPORTED', severity: 'error', nodeId } + ]); + } + if (node.inputs.some((item) => item.key === input.key)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_INPUT_KEY_DUPLICATED', + severity: 'error', + nodeId, + inputKey: input.key + } + ]); + } + const parsedInput = FlowNodeInputItemTypeSchema.parse({ + ...input, + label: input.label || input.key, + valueType: input.valueType ?? WorkflowIOValueTypeEnum.any, + renderTypeList: + input.renderTypeList.length > 0 ? input.renderTypeList : [FlowNodeInputTypeEnum.input], + canEdit: true + }); + node.inputs.push(parsedInput); +}; + +/** 删除动态输入;输入携带的引用会随输入本身一并删除。 */ +export const removeNodeInput = ({ + document, + nodeId, + inputKey +}: { + document: WorkflowDocument; + nodeId: string; + inputKey: string; +}) => { + const node = getDocumentNode(document, nodeId); + const inputIndex = node.inputs.findIndex((item) => item.key === inputKey); + if (inputIndex < 0) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_INPUT_NOT_FOUND', severity: 'error', nodeId, inputKey } + ]); + } + if ( + !supportsDynamicInputs(node) || + dynamicInputMarkerKeys.has(inputKey) || + node.inputs[inputIndex].canEdit !== true + ) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_INPUT_REMOVE_FORBIDDEN', severity: 'error', nodeId, inputKey } + ]); + } + node.inputs.splice(inputIndex, 1); +}; + +/** 向支持动态输出的节点添加一个数据输出。 */ +export const addNodeOutput = ({ + document, + nodeId, + output +}: { + document: WorkflowDocument; + nodeId: string; + output: FlowNodeOutputItemType; +}) => { + const node = getDocumentNode(document, nodeId); + if (!supportsDynamicOutputs(node)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_DYNAMIC_OUTPUT_UNSUPPORTED', severity: 'error', nodeId } + ]); + } + if (node.outputs.some((item) => item.key === output.key)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_OUTPUT_KEY_DUPLICATED', + severity: 'error', + nodeId, + params: { outputKey: output.key } + } + ]); + } + const parsedOutput = FlowNodeOutputItemTypeSchema.parse({ + ...output, + id: output.id || output.key, + label: output.label || output.key, + type: output.type ?? FlowNodeOutputTypeEnum.dynamic, + valueType: output.valueType ?? WorkflowIOValueTypeEnum.any + }); + const markerIndex = node.outputs.findIndex( + (item) => item.key === NodeOutputKeyEnum.addOutputParam + ); + if (markerIndex >= 0) node.outputs.splice(markerIndex, 0, parsedOutput); + else node.outputs.push(parsedOutput); +}; + +const isReferenceToOutput = (value: unknown, nodeId: string, outputKey: string): boolean => { + if (!Array.isArray(value)) return false; + if (value.length === 2 && value[0] === nodeId && value[1] === outputKey) return true; + return value.some((item) => isReferenceToOutput(item, nodeId, outputKey)); +}; + +/** 删除动态输出并清理其 source execution edge;数据引用保留并在结果中报告。 */ +export const removeNodeOutput = ({ + document, + nodeId, + outputKey +}: { + document: WorkflowDocument; + nodeId: string; + outputKey: string; +}) => { + const node = getDocumentNode(document, nodeId); + const outputIndex = node.outputs.findIndex((item) => item.key === outputKey); + if (outputIndex < 0) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_OUTPUT_NOT_FOUND', severity: 'error', nodeId, params: { outputKey } } + ]); + } + const output = node.outputs[outputIndex]; + if ( + output.type !== FlowNodeOutputTypeEnum.dynamic && + output.type !== FlowNodeOutputTypeEnum.source + ) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_OUTPUT_REMOVE_FORBIDDEN', severity: 'error', nodeId, params: { outputKey } } + ]); + } + node.outputs.splice(outputIndex, 1); + const before = document.executionEdges.length; + document.executionEdges = document.executionEdges.filter( + (edge) => + !( + edge.source.kind === 'sourceOutput' && + edge.source.nodeId === nodeId && + edge.source.outputKey === outputKey + ) + ); + const references = document.nodes.flatMap((item) => + item.inputs + .filter((input) => isReferenceToOutput(input.value, nodeId, outputKey)) + .map((input) => ({ nodeId: item.nodeId, inputKey: input.key })) + ); + return { removedEdgeCount: before - document.executionEdges.length, references }; +}; + +const codeSystemOutputKeys = new Set([ + NodeOutputKeyEnum.addOutputParam, + NodeOutputKeyEnum.rawResponse, + NodeOutputKeyEnum.error +]); + +/** + * 以 main 参数和 return 对象为代码节点动态 IO 的事实源。 + * 无法静态识别参数或返回对象时保留原配置,避免编辑中的不完整代码造成破坏性删除。 + */ +export const syncCodeNodeIO = ({ + document, + nodeId, + code +}: { + document: WorkflowDocument; + nodeId: string; + code: string; +}) => { + const node = getDocumentNode(document, nodeId); + if (node.flowNodeType !== FlowNodeTypeEnum.code) { + return { + addedInputKeys: [], + removedInputKeys: [], + addedOutputKeys: [], + removedOutputs: [] + }; + } + + const inputDefinitions = extractCodeInputDefinitions(code); + const addedInputKeys: string[] = []; + const removedInputKeys: string[] = []; + if (inputDefinitions) { + const nextInputKeys = new Set(inputDefinitions.map((item) => item.key)); + node.inputs + .filter( + (input) => + input.canEdit === true && + !dynamicInputMarkerKeys.has(input.key) && + !nextInputKeys.has(input.key) + ) + .forEach((input) => { + removeNodeInput({ document, nodeId, inputKey: input.key }); + removedInputKeys.push(input.key); + }); + + inputDefinitions.forEach((definition) => { + const existingInput = node.inputs.find((input) => input.key === definition.key); + if (existingInput) { + if (definition.valueType) existingInput.valueType = definition.valueType; + return; + } + addNodeInput({ + document, + nodeId, + input: FlowNodeInputItemTypeSchema.parse({ + key: definition.key, + label: definition.key, + valueType: definition.valueType ?? WorkflowIOValueTypeEnum.any, + renderTypeList: [FlowNodeInputTypeEnum.reference], + canEdit: true, + required: true, + customInputConfig: { + selectValueTypeList: Object.values(WorkflowIOValueTypeEnum), + showDescription: false, + showDefaultValue: true + } + }) + }); + addedInputKeys.push(definition.key); + }); + } + + const outputDefinitions = extractCodeOutputDefinitions(code); + const addedOutputKeys: string[] = []; + const removedOutputs: Array<{ + outputKey: string; + removedEdgeCount: number; + references: Array<{ nodeId: string; inputKey: string }>; + }> = []; + if (outputDefinitions) { + const nextOutputKeys = new Set(outputDefinitions.map((item) => item.key)); + node.outputs + .filter( + (output) => + output.type === FlowNodeOutputTypeEnum.dynamic && + !codeSystemOutputKeys.has(output.key) && + !nextOutputKeys.has(output.key) + ) + .forEach((output) => { + removedOutputs.push({ + outputKey: output.key, + ...removeNodeOutput({ document, nodeId, outputKey: output.key }) + }); + }); + + outputDefinitions.forEach((definition) => { + const existingOutput = node.outputs.find((output) => output.key === definition.key); + if (existingOutput) { + if (definition.valueType) existingOutput.valueType = definition.valueType; + return; + } + addNodeOutput({ + document, + nodeId, + output: FlowNodeOutputItemTypeSchema.parse({ + id: definition.key, + key: definition.key, + label: definition.key, + type: FlowNodeOutputTypeEnum.dynamic, + valueType: definition.valueType ?? WorkflowIOValueTypeEnum.any + }) + }); + addedOutputKeys.push(definition.key); + }); + } + + return { addedInputKeys, removedInputKeys, addedOutputKeys, removedOutputs }; +}; + +/** 表单字段是输出的事实源;字段整体更新后同步对应静态输出。 */ +export const syncFormInputOutputs = ({ + document, + nodeId, + previousFieldKeys +}: { + document: WorkflowDocument; + nodeId: string; + previousFieldKeys: string[]; +}) => { + const node = getDocumentNode(document, nodeId); + if (node.flowNodeType !== FlowNodeTypeEnum.formInput) return; + const forms = node.inputs.find((item) => item.key === NodeInputKeyEnum.userInputForms)?.value; + if (!Array.isArray(forms)) return; + const oldKeys = new Set(previousFieldKeys); + node.outputs = node.outputs.filter((output) => !oldKeys.has(output.key)); + for (const form of forms) { + if (!form || typeof form !== 'object') continue; + const field = form as { key?: unknown; label?: unknown; valueType?: unknown }; + if (typeof field.key !== 'string' || !field.key) continue; + node.outputs.push( + FlowNodeOutputItemTypeSchema.parse({ + id: field.key, + key: field.key, + label: typeof field.label === 'string' ? field.label : field.key, + type: FlowNodeOutputTypeEnum.static, + valueType: + typeof field.valueType === 'string' ? field.valueType : WorkflowIOValueTypeEnum.any + }) + ); + } +}; diff --git a/packages/workflow-core/src/nesting/service.ts b/packages/workflow-core/src/nesting/service.ts new file mode 100644 index 000000000000..b0094bf690b8 --- /dev/null +++ b/packages/workflow-core/src/nesting/service.ts @@ -0,0 +1,166 @@ +import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import { + FlowNodeTypeEnum, + isInteractiveNodeType, + isNestedChildSystemNodeType, + isNestedParentNodeType +} from '@fastgpt/global/core/workflow/node/constant'; +import type { StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node'; +import type { WorkflowDocument } from '../domain/document'; +import { WorkflowCommandError } from '../domain/diagnostic'; + +const forbiddenChildTypes = new Set([ + FlowNodeTypeEnum.workflowStart, + FlowNodeTypeEnum.loop, + FlowNodeTypeEnum.loopRun, + FlowNodeTypeEnum.parallelRun, + FlowNodeTypeEnum.pluginInput, + FlowNodeTypeEnum.pluginOutput, + FlowNodeTypeEnum.pluginConfig, + FlowNodeTypeEnum.systemConfig, + FlowNodeTypeEnum.globalVariable +]); + +export const getDocumentNode = (document: WorkflowDocument, nodeId: string) => { + const node = document.nodes.find((item) => item.nodeId === nodeId); + if (!node) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_NODE_NOT_FOUND', severity: 'error', nodeId } + ]); + } + return node; +}; + +/** 以 parentNodeId 为事实源,同步容器的 childrenNodeIdList 兼容字段。 */ +export const syncContainerChildren = (document: WorkflowDocument, parentNodeId: string) => { + const parent = getDocumentNode(document, parentNodeId); + const input = parent.inputs.find((item) => item.key === NodeInputKeyEnum.childrenNodeIdList); + if (input) { + input.value = document.nodes + .filter((item) => item.parentNodeId === parentNodeId) + .map((item) => item.nodeId); + } +}; + +/** 校验节点是否可以处于指定容器;undefined 表示根级。 */ +export const assertParentAssignment = ({ + document, + node, + parentNodeId, + allowSystemChild = false +}: { + document: WorkflowDocument; + node: StoreNodeItemType; + parentNodeId?: string; + allowSystemChild?: boolean; +}) => { + if (!parentNodeId) { + if (node.flowNodeType === FlowNodeTypeEnum.loopRunBreak) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_LOOP_BREAK_PARENT_REQUIRED', severity: 'error', nodeId: node.nodeId } + ]); + } + if (isNestedChildSystemNodeType(node.flowNodeType) && !allowSystemChild) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_SYSTEM_CHILD_MOVE_FORBIDDEN', severity: 'error', nodeId: node.nodeId } + ]); + } + return; + } + + const parent = getDocumentNode(document, parentNodeId); + if (!isNestedParentNodeType(parent.flowNodeType)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_PARENT_NOT_CONTAINER', + severity: 'error', + nodeId: node.nodeId, + params: { parentNodeId } + } + ]); + } + if (forbiddenChildTypes.has(node.flowNodeType)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_NODE_NOT_ALLOWED_IN_CONTAINER', + severity: 'error', + nodeId: node.nodeId, + params: { parentNodeId } + } + ]); + } + if ( + parent.flowNodeType === FlowNodeTypeEnum.parallelRun && + isInteractiveNodeType(node.flowNodeType) + ) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_INTERACTIVE_NODE_NOT_ALLOWED_IN_PARALLEL', + severity: 'error', + nodeId: node.nodeId, + params: { parentNodeId } + } + ]); + } + if ( + node.flowNodeType === FlowNodeTypeEnum.loopRunBreak && + parent.flowNodeType !== FlowNodeTypeEnum.loopRun + ) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_LOOP_BREAK_PARENT_INVALID', + severity: 'error', + nodeId: node.nodeId, + params: { parentNodeId } + } + ]); + } + if (isNestedChildSystemNodeType(node.flowNodeType) && !allowSystemChild) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_SYSTEM_CHILD_MOVE_FORBIDDEN', severity: 'error', nodeId: node.nodeId } + ]); + } +}; + +/** 改变父作用域时同步父子字段,并移除跨作用域执行边。 */ +export const moveNodeToParent = ({ + document, + nodeId, + parentNodeId, + position +}: { + document: WorkflowDocument; + nodeId: string; + parentNodeId?: string; + position?: { x: number; y: number }; +}) => { + const node = getDocumentNode(document, nodeId); + const previousParentNodeId = node.parentNodeId; + assertParentAssignment({ document, node, parentNodeId }); + + node.parentNodeId = parentNodeId; + if (position) node.position = position; + + let removedEdgeCount = 0; + if (previousParentNodeId !== parentNodeId) { + const before = document.executionEdges.length; + document.executionEdges = document.executionEdges.filter( + (edge) => edge.source.nodeId !== nodeId && edge.target.nodeId !== nodeId + ); + removedEdgeCount = before - document.executionEdges.length; + if (previousParentNodeId) syncContainerChildren(document, previousParentNodeId); + if (parentNodeId) syncContainerChildren(document, parentNodeId); + } + + return { previousParentNodeId, parentNodeId, removedEdgeCount }; +}; + +export const listContainerChildren = (document: WorkflowDocument, parentNodeId: string) => { + const parent = getDocumentNode(document, parentNodeId); + if (!isNestedParentNodeType(parent.flowNodeType)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_PARENT_NOT_CONTAINER', severity: 'error', nodeId: parentNodeId } + ]); + } + return document.nodes.filter((item) => item.parentNodeId === parentNodeId); +}; diff --git a/packages/workflow-core/src/node/add.ts b/packages/workflow-core/src/node/add.ts new file mode 100644 index 000000000000..306cfdb493da --- /dev/null +++ b/packages/workflow-core/src/node/add.ts @@ -0,0 +1,155 @@ +import { + FlowNodeTypeEnum, + isNestedParentNodeType +} from '@fastgpt/global/core/workflow/node/constant'; +import type { WorkflowDocument } from '../domain/document'; +import { createWorkflowDocument } from '../domain/document'; +import type { WorkflowDiagnostic } from '../domain/diagnostic'; +import { assertParentAssignment, syncContainerChildren } from '../nesting/service'; +import { instantiateNodeFromTemplate } from '../template/instantiate'; +import type { NodeTemplateRef, WorkflowTemplateProvider } from '../template/type'; + +export type AddNodeDependencies = { + templateProvider: WorkflowTemplateProvider; + locale?: string; + translate?: (value: string) => string; +}; + +export const SYSTEM_CONFIG_NODE_ID = 'userGuide'; +export const WORKFLOW_START_NODE_ID = 'start'; + +/** + * 为工作流补齐唯一的系统配置节点。 + * 配置数据仍以 chatConfig 为事实源;该节点只负责提供 Web 画布上的统一编辑入口。 + */ +export const ensureSystemConfigNode = async ({ + document, + dependencies +}: { + document: WorkflowDocument; + dependencies: AddNodeDependencies; +}) => { + if (document.nodes.some((node) => node.flowNodeType === FlowNodeTypeEnum.systemConfig)) { + return { nodeIds: [], warnings: [] }; + } + + return addNodeFromTemplate({ + document, + template: { kind: 'builtin', templateId: '__system-config' }, + nodeId: SYSTEM_CONFIG_NODE_ID, + position: { x: 260, y: -480 }, + dependencies + }); +}; + +/** 创建与 FastGPT Web 默认结构一致的空工作流。 */ +export const createDefaultWorkflowDocument = async ({ + app = {}, + dependencies +}: { + app?: WorkflowDocument['app']; + dependencies: AddNodeDependencies; +}) => { + const document = createWorkflowDocument({ app }); + const systemConfigResult = await ensureSystemConfigNode({ document, dependencies }); + const workflowStartResult = await addNodeFromTemplate({ + document, + template: { kind: 'builtin', templateId: 'workflow-start' }, + nodeId: WORKFLOW_START_NODE_ID, + position: { x: 560, y: 120 }, + dependencies + }); + + return { + document, + nodeIds: [...systemConfigResult.nodeIds, ...workflowStartResult.nodeIds], + warnings: [...systemConfigResult.warnings, ...workflowStartResult.warnings] + }; +}; + +/** 创建完整节点;容器会在同一事务内生成必需的系统子节点。 */ +export const addNodeFromTemplate = async ({ + document, + template, + nodeId, + name, + position, + parentNodeId, + dependencies +}: { + document: WorkflowDocument; + template: NodeTemplateRef; + nodeId: string; + name?: string; + position?: { x: number; y: number }; + parentNodeId?: string; + dependencies: AddNodeDependencies; +}): Promise<{ nodeIds: string[]; warnings: WorkflowDiagnostic[] }> => { + const instantiate = (params: { + templateRef: NodeTemplateRef; + childNodeId: string; + childPosition?: { x: number; y: number }; + childParentNodeId?: string; + childName?: string; + }) => + instantiateNodeFromTemplate({ + document, + templateRef: params.templateRef, + nodeId: params.childNodeId, + name: params.childName, + position: params.childPosition, + parentNodeId: params.childParentNodeId, + provider: dependencies.templateProvider, + locale: dependencies.locale ?? 'en', + translate: dependencies.translate + }); + + const instantiated = await instantiate({ + templateRef: template, + childNodeId: nodeId, + childPosition: position, + childParentNodeId: parentNodeId, + childName: name + }); + assertParentAssignment({ document, node: instantiated.node, parentNodeId }); + document.nodes.push(instantiated.node); + + const nodeIds = [nodeId]; + const warnings = [...instantiated.warnings]; + if (parentNodeId) syncContainerChildren(document, parentNodeId); + + if (!isNestedParentNodeType(instantiated.node.flowNodeType)) { + return { nodeIds, warnings }; + } + + const systemTemplates = + instantiated.node.flowNodeType === FlowNodeTypeEnum.loopRun + ? [{ templateId: '__loop-run-start', suffix: 'start', offset: { x: 60, y: 280 } }] + : [ + { templateId: '__nested-start', suffix: 'start', offset: { x: 60, y: 280 } }, + { templateId: '__nested-end', suffix: 'end', offset: { x: 420, y: 680 } } + ]; + + for (const systemTemplate of systemTemplates) { + const childNodeId = `${nodeId}__${systemTemplate.suffix}`; + const child = await instantiate({ + templateRef: { kind: 'builtin', templateId: systemTemplate.templateId }, + childNodeId, + childPosition: position + ? { x: position.x + systemTemplate.offset.x, y: position.y + systemTemplate.offset.y } + : undefined, + childParentNodeId: nodeId + }); + assertParentAssignment({ + document, + node: child.node, + parentNodeId: nodeId, + allowSystemChild: true + }); + document.nodes.push(child.node); + nodeIds.push(childNodeId); + warnings.push(...child.warnings); + } + syncContainerChildren(document, nodeId); + return { nodeIds, warnings }; +}; diff --git a/packages/workflow-core/src/node/service.ts b/packages/workflow-core/src/node/service.ts new file mode 100644 index 000000000000..05df75ea93d2 --- /dev/null +++ b/packages/workflow-core/src/node/service.ts @@ -0,0 +1,189 @@ +import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import { + FlowNodeTypeEnum, + isNestedChildSystemNodeType, + isNestedParentNodeType +} from '@fastgpt/global/core/workflow/node/constant'; +import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import type { StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node'; +import type { WorkflowDocument } from '../domain/document'; +import { WorkflowCommandError } from '../domain/diagnostic'; +import { syncContainerChildren } from '../nesting/service'; + +const getNode = (document: WorkflowDocument, nodeId: string) => { + const node = document.nodes.find((item) => item.nodeId === nodeId); + if (!node) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_NODE_NOT_FOUND', severity: 'error', nodeId } + ]); + } + return node; +}; + +export const updateNode = ({ + document, + nodeId, + name, + position, + catchError +}: { + document: WorkflowDocument; + nodeId: string; + name?: string; + position?: { x: number; y: number }; + catchError?: boolean; +}) => { + const node = getNode(document, nodeId); + if (name !== undefined) node.name = name; + if (position !== undefined) node.position = position; + if (catchError !== undefined) node.catchError = catchError; +}; + +const clearSecretInputs = (node: StoreNodeItemType) => { + for (const input of node.inputs) { + if ( + input.renderTypeList.includes(FlowNodeInputTypeEnum.password) || + input.key === NodeInputKeyEnum.headerSecret + ) { + input.value = undefined; + } + } + if (node.toolConfig?.mcpToolSet) node.toolConfig.mcpToolSet.headerSecret = undefined; + if (node.toolConfig?.httpToolSet) node.toolConfig.httpToolSet.headerSecret = undefined; +}; + +/** 克隆节点运行态结构,但不复制密码类输入,避免生成可复用凭据副本。 */ +export const cloneNode = ({ + document, + sourceNodeId, + nodeId, + position, + offset +}: { + document: WorkflowDocument; + sourceNodeId: string; + nodeId: string; + position?: { x: number; y: number }; + offset?: { x: number; y: number }; +}) => { + const source = getNode(document, sourceNodeId); + if (document.nodes.some((item) => item.nodeId === nodeId)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_NODE_ID_DUPLICATED', severity: 'error', nodeId } + ]); + } + if ( + source.flowNodeType === FlowNodeTypeEnum.workflowStart || + source.flowNodeType === FlowNodeTypeEnum.systemConfig || + isNestedParentNodeType(source.flowNodeType) || + isNestedChildSystemNodeType(source.flowNodeType) + ) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_UNIQUE_NODE_CLONE_FORBIDDEN', severity: 'error', nodeId: sourceNodeId } + ]); + } + + const clone = structuredClone(source); + clone.nodeId = nodeId; + clone.name = source.name; + clone.position = + position ?? + (source.position + ? { + x: source.position.x + (offset?.x ?? 40), + y: source.position.y + (offset?.y ?? 40) + } + : offset); + clearSecretInputs(clone); + document.nodes.push(clone); + if (clone.parentNodeId) syncContainerChildren(document, clone.parentNodeId); +}; + +const isReferenceToDeletedNode = (value: unknown, deletedNodeIds: Set): boolean => { + if (!Array.isArray(value)) return false; + if (value.length === 2 && typeof value[0] === 'string' && typeof value[1] === 'string') { + return deletedNodeIds.has(value[0]); + } + return value.some((item) => isReferenceToDeletedNode(item, deletedNodeIds)); +}; + +/** 删除节点、全部后代、相关执行边,并清除指向被删节点的基础输入引用。 */ +export const removeNode = ({ + document, + nodeId +}: { + document: WorkflowDocument; + nodeId: string; +}) => { + const node = getNode(document, nodeId); + const parentNodeId = node.parentNodeId; + if ( + node.flowNodeType === FlowNodeTypeEnum.workflowStart || + node.flowNodeType === FlowNodeTypeEnum.systemConfig || + isNestedChildSystemNodeType(node.flowNodeType) + ) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_NODE_DELETE_FORBIDDEN', severity: 'error', nodeId } + ]); + } + if (node.flowNodeType === FlowNodeTypeEnum.loopRunBreak && parentNodeId) { + const parent = getNode(document, parentNodeId); + const mode = parent.inputs.find((item) => item.key === NodeInputKeyEnum.loopRunMode)?.value; + const breakCount = document.nodes.filter( + (item) => + item.parentNodeId === parentNodeId && item.flowNodeType === FlowNodeTypeEnum.loopRunBreak + ).length; + if (mode === 'conditional' && breakCount <= 1) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_CONDITIONAL_LOOP_BREAK_REQUIRED', + severity: 'error', + nodeId: parentNodeId + } + ]); + } + } + + const deletedNodeIds = new Set([nodeId]); + let changed = true; + while (changed) { + changed = false; + for (const item of document.nodes) { + if ( + item.parentNodeId && + deletedNodeIds.has(item.parentNodeId) && + !deletedNodeIds.has(item.nodeId) + ) { + deletedNodeIds.add(item.nodeId); + changed = true; + } + } + } + + const removedEdges = document.executionEdges.filter( + (edge) => deletedNodeIds.has(edge.source.nodeId) || deletedNodeIds.has(edge.target.nodeId) + ); + document.nodes = document.nodes.filter((item) => !deletedNodeIds.has(item.nodeId)); + document.executionEdges = document.executionEdges.filter( + (edge) => !deletedNodeIds.has(edge.source.nodeId) && !deletedNodeIds.has(edge.target.nodeId) + ); + + const clearedReferences: Array<{ nodeId: string; inputKey: string }> = []; + for (const item of document.nodes) { + for (const input of item.inputs) { + if (!isReferenceToDeletedNode(input.value, deletedNodeIds)) continue; + input.value = undefined; + clearedReferences.push({ nodeId: item.nodeId, inputKey: input.key }); + } + } + + if (parentNodeId && document.nodes.some((item) => item.nodeId === parentNodeId)) { + syncContainerChildren(document, parentNodeId); + } + + return { + deletedNodeIds: [...deletedNodeIds], + removedEdgeCount: removedEdges.length, + clearedReferences + }; +}; diff --git a/packages/workflow-core/src/public.ts b/packages/workflow-core/src/public.ts new file mode 100644 index 000000000000..f54ab5aa3faa --- /dev/null +++ b/packages/workflow-core/src/public.ts @@ -0,0 +1,13 @@ +export { + VARIABLE_NODE_ID, + VariableInputEnum, + WorkflowIOValueTypeEnum, + textInputVariableValueTypes, + variableMap +} from '@fastgpt/global/core/workflow/constants'; +export { + FlowNodeInputTypeEnum, + FlowNodeOutputTypeEnum, + FlowNodeTypeEnum +} from '@fastgpt/global/core/workflow/node/constant'; +export { VariableItemTypeSchema, type VariableItemType } from '@fastgpt/global/core/app/type'; diff --git a/packages/workflow-core/src/reference/codec.ts b/packages/workflow-core/src/reference/codec.ts new file mode 100644 index 000000000000..469546f5677c --- /dev/null +++ b/packages/workflow-core/src/reference/codec.ts @@ -0,0 +1,80 @@ +import { VARIABLE_NODE_ID } from '@fastgpt/global/core/workflow/constants'; +import type { StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node'; + +const NODE_VARIABLE_PATTERN = /\{\{\$([^.]+)\.([^$]+)\$\}\}/g; + +type ReferenceCodecDirection = 'encode' | 'decode'; + +/** + * 转换 Document 和 StoreWorkflow 的输出引用命名空间。 + * Document 使用稳定的 output key,Store/Web/Runtime 使用 output id;全局变量 key 保持不变。 + */ +const transformNodeReferences = ({ + nodes, + direction +}: { + nodes: StoreNodeItemType[]; + direction: ReferenceCodecDirection; +}): StoreNodeItemType[] => { + const nodeMap = new Map(nodes.map((node) => [node.nodeId, node])); + + const transformOutputSelector = (nodeId: string, selector: string) => { + if (nodeId === VARIABLE_NODE_ID) return selector; + const node = nodeMap.get(nodeId); + if (!node) return selector; + + const output = (() => { + if (direction === 'encode') { + return ( + node.outputs.find((output) => output.key === selector) ?? + node.outputs.find((output) => output.id === selector) + ); + } + return ( + node.outputs.find((output) => output.id === selector) ?? + node.outputs.find((output) => output.key === selector) + ); + })(); + if (!output) return selector; + return direction === 'encode' ? output.id : output.key; + }; + + const transformValue = (value: unknown): unknown => { + if (typeof value === 'string') { + return value.replace(NODE_VARIABLE_PATTERN, (match, nodeId: string, selector: string) => { + const transformedSelector = transformOutputSelector(nodeId, selector); + if (transformedSelector === selector) return match; + return `{{$${nodeId}.${transformedSelector}$}}`; + }); + } + if (Array.isArray(value)) { + if (value.length === 2 && typeof value[0] === 'string' && typeof value[1] === 'string') { + const transformedSelector = transformOutputSelector(value[0], value[1]); + if (transformedSelector !== value[1]) return [value[0], transformedSelector]; + } + return value.map(transformValue); + } + if (value && typeof value === 'object') { + return Object.fromEntries( + Object.entries(value).map(([key, item]) => [key, transformValue(item)]) + ); + } + return value; + }; + + return nodes.map((node) => ({ + ...structuredClone(node), + inputs: node.inputs.map((input) => ({ + ...structuredClone(input), + value: transformValue(input.value) + })) + })); +}; + +/** 将 WorkflowDocument 的 output key 引用编码为 StoreWorkflow output id。 */ +export const encodeWorkflowNodeReferences = (nodes: StoreNodeItemType[]) => + transformNodeReferences({ nodes, direction: 'encode' }); + +/** 将 StoreWorkflow 的 output id 引用解码为 WorkflowDocument output key。 */ +export const decodeWorkflowNodeReferences = (nodes: StoreNodeItemType[]) => + transformNodeReferences({ nodes, direction: 'decode' }); diff --git a/packages/workflow-core/src/reference/service.ts b/packages/workflow-core/src/reference/service.ts new file mode 100644 index 000000000000..63f61a1cbf45 --- /dev/null +++ b/packages/workflow-core/src/reference/service.ts @@ -0,0 +1,364 @@ +import { VARIABLE_NODE_ID, WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; +import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import type { FlowNodeInputItemType } from '@fastgpt/global/core/workflow/type/io'; +import type { WorkflowDocument } from '../domain/document'; +import { WorkflowCommandError } from '../domain/diagnostic'; +import type { VariableRef } from './type'; +import { getInputAutomationMeta } from '../template/automationMeta'; +import { assertValueSchema, inputValueNeedsSchema } from '../template/valueSchema'; + +const arrayItemTypeMap: Partial> = { + [WorkflowIOValueTypeEnum.arrayString]: WorkflowIOValueTypeEnum.string, + [WorkflowIOValueTypeEnum.arrayNumber]: WorkflowIOValueTypeEnum.number, + [WorkflowIOValueTypeEnum.arrayBoolean]: WorkflowIOValueTypeEnum.boolean, + [WorkflowIOValueTypeEnum.arrayObject]: WorkflowIOValueTypeEnum.object +}; + +/** 统一判断普通引用和聚合引用的输入输出类型是否兼容。 */ +export const areWorkflowValueTypesCompatible = ({ + expected, + actual, + collection = false +}: { + expected?: string; + actual?: string; + collection?: boolean; +}) => { + if ( + expected === undefined || + actual === undefined || + expected === WorkflowIOValueTypeEnum.any || + expected === WorkflowIOValueTypeEnum.dynamic || + actual === WorkflowIOValueTypeEnum.any || + actual === WorkflowIOValueTypeEnum.dynamic + ) { + return true; + } + if (!collection) return expected === actual; + if (expected === WorkflowIOValueTypeEnum.arrayAny) return true; + return expected === actual || arrayItemTypeMap[expected] === actual; +}; + +const getInput = ({ + document, + nodeId, + inputKey +}: { + document: WorkflowDocument; + nodeId: string; + inputKey: string; +}) => { + const node = document.nodes.find((item) => item.nodeId === nodeId); + if (!node) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_NODE_NOT_FOUND', severity: 'error', nodeId } + ]); + } + const input = node.inputs.find((item) => item.key === inputKey); + if (!input) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_INPUT_NOT_FOUND', severity: 'error', nodeId, inputKey } + ]); + } + if ( + input.canEdit === false || + getInputAutomationMeta(node.flowNodeType, inputKey)?.configurable === false + ) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_INPUT_NOT_CONFIGURABLE', severity: 'error', nodeId, inputKey } + ]); + } + return input; +}; + +export const valueMatchesType = (value: unknown, valueType?: string): boolean => { + if (valueType === undefined || valueType === WorkflowIOValueTypeEnum.any) return true; + if (valueType === WorkflowIOValueTypeEnum.string) return typeof value === 'string'; + if (valueType === WorkflowIOValueTypeEnum.number) return typeof value === 'number'; + if (valueType === WorkflowIOValueTypeEnum.boolean) return typeof value === 'boolean'; + if (valueType === WorkflowIOValueTypeEnum.object) { + return typeof value === 'object' && value !== null && !Array.isArray(value); + } + if (valueType === WorkflowIOValueTypeEnum.arrayString) { + return Array.isArray(value) && value.every((item) => typeof item === 'string'); + } + if (valueType === WorkflowIOValueTypeEnum.arrayNumber) { + return Array.isArray(value) && value.every((item) => typeof item === 'number'); + } + if (valueType === WorkflowIOValueTypeEnum.arrayBoolean) { + return Array.isArray(value) && value.every((item) => typeof item === 'boolean'); + } + if ( + valueType === WorkflowIOValueTypeEnum.arrayObject || + valueType === WorkflowIOValueTypeEnum.arrayAny || + valueType === WorkflowIOValueTypeEnum.chatHistory || + valueType === WorkflowIOValueTypeEnum.datasetQuote + ) { + return Array.isArray(value) || typeof value === 'number'; + } + return true; +}; + +const assertInputMode = ({ + input, + nodeId, + mode +}: { + input: FlowNodeInputItemType; + nodeId: string; + mode: 'literal' | 'reference'; +}) => { + const hasMode = + mode === 'reference' + ? input.renderTypeList.includes(FlowNodeInputTypeEnum.reference) + : input.renderTypeList.some((type) => type !== FlowNodeInputTypeEnum.reference); + if (!hasMode) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_INPUT_MODE_NOT_ALLOWED', + severity: 'error', + nodeId, + inputKey: input.key, + params: { mode } + } + ]); + } +}; + +/** 更新固定值,并同步 Web 使用的 selectedTypeIndex。 */ +export const setInputValue = ({ + document, + nodeId, + inputKey, + value +}: { + document: WorkflowDocument; + nodeId: string; + inputKey: string; + value: unknown; +}) => { + const input = getInput({ document, nodeId, inputKey }); + assertInputMode({ input, nodeId, mode: 'literal' }); + if (!valueMatchesType(value, input.valueType)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_INPUT_VALUE_TYPE_INVALID', + severity: 'error', + nodeId, + inputKey, + params: { expected: input.valueType } + } + ]); + } + const valueSchema = getInputAutomationMeta( + document.nodes.find((item) => item.nodeId === nodeId)!.flowNodeType, + inputKey + )?.valueSchema; + const needsSchema = inputValueNeedsSchema({ value, valueType: input.valueType }); + if (needsSchema && !valueSchema) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_TEMPLATE_PARAMETER_SCHEMA_MISSING', + severity: 'error', + nodeId, + inputKey + } + ]); + } + if (valueSchema) assertValueSchema({ value, schema: valueSchema, nodeId, inputKey }); + + input.value = structuredClone(value); + const literalIndex = input.renderTypeList.findIndex( + (type) => type !== FlowNodeInputTypeEnum.reference + ); + input.selectedTypeIndex = literalIndex >= 0 ? literalIndex : undefined; +}; + +/** 设置基础节点输出引用,WorkflowDocument 使用稳定的 `[nodeId, outputKey]` 语义格式。 */ +export const setInputReference = ({ + document, + nodeId, + inputKey, + ref +}: { + document: WorkflowDocument; + nodeId: string; + inputKey: string; + ref: VariableRef; +}) => { + const input = getInput({ document, nodeId, inputKey }); + assertInputMode({ input, nodeId, mode: 'reference' }); + + if (ref.nodeId === VARIABLE_NODE_ID) { + const variable = document.chatConfig.variables?.find((item) => item.key === ref.outputKey); + if (!variable) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_REFERENCE_OUTPUT_NOT_FOUND', + severity: 'error', + nodeId, + inputKey, + params: ref + } + ]); + } + if ( + !areWorkflowValueTypesCompatible({ + expected: input.valueType, + actual: variable.valueType + }) + ) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_REFERENCE_TYPE_MISMATCH', + severity: 'error', + nodeId, + inputKey, + params: { expected: input.valueType, actual: variable.valueType } + } + ]); + } + input.value = [ref.nodeId, ref.outputKey]; + input.selectedTypeIndex = input.renderTypeList.indexOf(FlowNodeInputTypeEnum.reference); + return; + } + + const sourceNode = document.nodes.find((item) => item.nodeId === ref.nodeId); + const sourceOutput = sourceNode?.outputs.find((output) => output.key === ref.outputKey); + if (!sourceNode || !sourceOutput) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_REFERENCE_OUTPUT_NOT_FOUND', + severity: 'error', + nodeId, + inputKey, + params: ref + } + ]); + } + + const reachableNodeIds = new Set([sourceNode.nodeId]); + const pendingNodeIds = [sourceNode.nodeId]; + while (pendingNodeIds.length > 0) { + const currentNodeId = pendingNodeIds.shift()!; + for (const edge of document.executionEdges) { + if (edge.source.nodeId !== currentNodeId || reachableNodeIds.has(edge.target.nodeId)) + continue; + reachableNodeIds.add(edge.target.nodeId); + pendingNodeIds.push(edge.target.nodeId); + } + } + if (sourceNode.nodeId === nodeId || !reachableNodeIds.has(nodeId)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_REFERENCE_SOURCE_NOT_UPSTREAM', + severity: 'error', + nodeId, + inputKey, + params: ref + } + ]); + } + if ( + !areWorkflowValueTypesCompatible({ + expected: input.valueType, + actual: sourceOutput.valueType + }) + ) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_REFERENCE_TYPE_MISMATCH', + severity: 'error', + nodeId, + inputKey, + params: { expected: input.valueType, actual: sourceOutput.valueType } + } + ]); + } + + input.value = [ref.nodeId, ref.outputKey]; + input.selectedTypeIndex = input.renderTypeList.indexOf(FlowNodeInputTypeEnum.reference); +}; + +/** 清空可选且可配置的节点输入。 */ +export const unsetInput = ({ + document, + nodeId, + inputKey +}: { + document: WorkflowDocument; + nodeId: string; + inputKey: string; +}) => { + const input = getInput({ document, nodeId, inputKey }); + if (input.required === true) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_REQUIRED_INPUT_UNSET_FORBIDDEN', severity: 'error', nodeId, inputKey } + ]); + } + input.value = undefined; +}; + +/** 返回对指定输入类型兼容且在当前节点上游可达的输出和全局变量。 */ +export const getAvailableInputReferences = ({ + document, + nodeId, + inputKey +}: { + document: WorkflowDocument; + nodeId: string; + inputKey: string; +}) => { + const input = getInput({ document, nodeId, inputKey }); + assertInputMode({ input, nodeId, mode: 'reference' }); + const upstreamNodeIds = new Set(); + const pending = document.executionEdges + .filter((edge) => edge.target.nodeId === nodeId) + .map((edge) => edge.source.nodeId); + while (pending.length > 0) { + const current = pending.shift()!; + if (upstreamNodeIds.has(current)) continue; + upstreamNodeIds.add(current); + pending.push( + ...document.executionEdges + .filter((edge) => edge.target.nodeId === current) + .map((edge) => edge.source.nodeId) + ); + } + + const nodeOutputs = document.nodes + .filter((node) => upstreamNodeIds.has(node.nodeId)) + .flatMap((node) => + node.outputs + .filter( + (output) => + input.valueType === undefined || + input.valueType === WorkflowIOValueTypeEnum.any || + output.valueType === undefined || + output.valueType === WorkflowIOValueTypeEnum.any || + output.valueType === input.valueType + ) + .map((output) => ({ + ref: { nodeId: node.nodeId, outputKey: output.key }, + label: output.label, + valueType: output.valueType, + source: 'node' as const + })) + ); + const variables = (document.chatConfig.variables ?? []) + .filter( + (variable) => + input.valueType === undefined || + input.valueType === WorkflowIOValueTypeEnum.any || + variable.valueType === undefined || + variable.valueType === WorkflowIOValueTypeEnum.any || + variable.valueType === input.valueType + ) + .map((variable) => ({ + ref: { nodeId: VARIABLE_NODE_ID, outputKey: variable.key }, + label: variable.label, + valueType: variable.valueType, + source: 'variable' as const + })); + return [...variables, ...nodeOutputs]; +}; diff --git a/packages/workflow-core/src/reference/type.ts b/packages/workflow-core/src/reference/type.ts new file mode 100644 index 000000000000..1eeb6caccc92 --- /dev/null +++ b/packages/workflow-core/src/reference/type.ts @@ -0,0 +1,24 @@ +import z from 'zod'; +import { WorkflowCommandError } from '../domain/diagnostic'; + +export const VariableRefSchema = z.object({ + nodeId: z.string().min(1), + outputKey: z.string().min(1) +}); + +export type VariableRef = z.infer; + +/** 解析 `node.output`,节点 ID 可包含点,最后一个点固定分隔 output key。 */ +export const parseVariableRef = (value: string): VariableRef => { + const separatorIndex = value.lastIndexOf('.'); + if (separatorIndex <= 0 || separatorIndex === value.length - 1) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_VARIABLE_REF_INVALID', severity: 'error', params: { value } } + ]); + } + + return { + nodeId: value.slice(0, separatorIndex), + outputKey: value.slice(separatorIndex + 1) + }; +}; diff --git a/packages/workflow-core/src/store/compile.ts b/packages/workflow-core/src/store/compile.ts new file mode 100644 index 000000000000..cd89c53206ff --- /dev/null +++ b/packages/workflow-core/src/store/compile.ts @@ -0,0 +1,12 @@ +import { WorkflowTemplateBasicTypeSchema } from '@fastgpt/global/core/workflow/type'; +import type { WorkflowDocument } from '../domain/document'; +import { compileExecutionEdge } from '../edge/compiler'; +import { encodeWorkflowNodeReferences } from '../reference/codec'; + +/** 将唯一规范状态编译为 FastGPT Web/Service 可读取的 StoreWorkflow。 */ +export const compileStoreWorkflow = (document: WorkflowDocument) => + WorkflowTemplateBasicTypeSchema.parse({ + nodes: encodeWorkflowNodeReferences(document.nodes), + edges: document.executionEdges.map((edge) => compileExecutionEdge(edge, document)), + chatConfig: structuredClone(document.chatConfig) + }); diff --git a/packages/workflow-core/src/store/decompile.ts b/packages/workflow-core/src/store/decompile.ts new file mode 100644 index 000000000000..451713e8616c --- /dev/null +++ b/packages/workflow-core/src/store/decompile.ts @@ -0,0 +1,30 @@ +import { + WorkflowTemplateBasicTypeSchema, + type WorkflowTemplateBasicType +} from '@fastgpt/global/core/workflow/type'; +import { createWorkflowDocument, type WorkflowDocument } from '../domain/document'; +import { decompileStoreEdge } from '../edge/compiler'; +import { decodeWorkflowNodeReferences } from '../reference/codec'; + +/** 将 StoreWorkflow 转成语义 Document,并保留显式提供的应用绑定信息。 */ +export const decompileStoreWorkflow = ({ + workflow, + app = {} +}: { + workflow: WorkflowTemplateBasicType; + app?: WorkflowDocument['app']; +}): WorkflowDocument => { + const parsedWorkflow = WorkflowTemplateBasicTypeSchema.parse(workflow); + const documentWithoutEdges = createWorkflowDocument({ + app, + nodes: decodeWorkflowNodeReferences(parsedWorkflow.nodes), + chatConfig: parsedWorkflow.chatConfig ?? {} + }); + + return { + ...documentWithoutEdges, + executionEdges: parsedWorkflow.edges.map((edge) => + decompileStoreEdge(edge, documentWithoutEdges) + ) + }; +}; diff --git a/packages/workflow-core/src/template/automationMeta.ts b/packages/workflow-core/src/template/automationMeta.ts new file mode 100644 index 000000000000..aac1bf0d19ad --- /dev/null +++ b/packages/workflow-core/src/template/automationMeta.ts @@ -0,0 +1,277 @@ +import { + formatNodeTemplateRef, + type NodeTemplateAutomationMeta, + type NodeTemplateRef +} from './type'; +import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; + +const remoteModelInput = { + defaultPolicy: 'remoteValidated', + resourceKind: 'model' +} as const; + +const automationMetaMap: Record = { + 'builtin:ai-chat': { + inputs: { + [NodeInputKeyEnum.aiModel]: { + ...remoteModelInput, + agentHint: 'workflow:cli.input.ai_model' + }, + systemPrompt: { + agentHint: 'workflow:cli.input.system_prompt', + examples: ['You are a helpful assistant.'] + }, + userChatInput: { + agentHint: 'workflow:cli.input.user_question' + } + } + }, + 'builtin:text-editor': { + inputs: { + system_textareaInput: { + agentHint: 'workflow:cli.input.text_editor', + examples: ['Hello {{name}}'] + } + } + }, + 'builtin:assigned-answer': { + inputs: { + text: { + agentHint: 'workflow:cli.input.answer', + examples: ['Done'] + } + } + }, + 'builtin:dataset-search': { + inputs: { + [NodeInputKeyEnum.datasetSelectList]: { + defaultPolicy: 'remoteValidated', + resourceKind: 'dataset', + valueSchema: { + type: 'array', + items: { + type: 'object', + required: ['datasetId', 'name', 'avatar', 'vectorModel'], + properties: { + datasetId: { type: 'string' }, + name: { type: 'string' }, + avatar: { type: 'string' }, + vectorModel: { + type: 'object', + required: ['model'], + properties: { model: { type: 'string' } } + } + } + } + } + }, + [NodeInputKeyEnum.datasetSearchRerankModel]: remoteModelInput, + [NodeInputKeyEnum.datasetSearchExtensionModel]: remoteModelInput + } + }, + 'builtin:question-optimization': { + inputs: { + [NodeInputKeyEnum.aiModel]: remoteModelInput + } + }, + 'builtin:content-extract': { + inputs: { + [NodeInputKeyEnum.aiModel]: remoteModelInput, + [NodeInputKeyEnum.extractKeys]: { + valueSchema: { + type: 'array', + items: { + type: 'object', + required: ['key', 'valueType'], + properties: { + key: { type: 'string' }, + valueType: { type: 'string' }, + description: { type: 'string' }, + required: { type: 'boolean' }, + enum: { type: 'array', items: { type: 'string' } } + } + } + } + } + } + }, + 'builtin:http-request': { + inputs: { + [NodeInputKeyEnum.httpReqUrl]: { + defaultPolicy: 'userRequired', + bindingRequired: true + }, + [NodeInputKeyEnum.addInputParam]: { + configurable: false + }, + [NodeInputKeyEnum.httpHeaders]: { + valueSchema: { + type: 'array', + items: { + type: 'object', + required: ['key', 'value'], + properties: { key: { type: 'string' }, value: { type: 'string' } } + } + } + }, + [NodeInputKeyEnum.httpParams]: { + valueSchema: { + type: 'array', + items: { + type: 'object', + required: ['key', 'value'], + properties: { key: { type: 'string' }, value: {} } + } + } + }, + [NodeInputKeyEnum.httpFormBody]: { + valueSchema: { + type: 'array', + items: { + type: 'object', + required: ['key', 'value'], + properties: { key: { type: 'string' }, value: {} } + } + } + }, + [NodeInputKeyEnum.httpJsonBody]: { + valueSchema: { type: 'string' } + }, + [NodeInputKeyEnum.headerSecret]: { + configurable: false, + defaultPolicy: 'userRequired', + resourceKind: 'secret' + } + } + }, + 'builtin:code': { + inputs: { + [NodeInputKeyEnum.addInputParam]: { + configurable: false + } + } + }, + 'builtin:call-app': { + inputs: { + [NodeInputKeyEnum.runAppSelectApp]: { + defaultPolicy: 'remoteValidated', + resourceKind: 'app', + valueSchema: { + type: 'object', + required: ['appId'], + properties: { appId: { type: 'string' } } + } + } + } + }, + 'builtin:if-else': { + inputs: { + [NodeInputKeyEnum.ifElseList]: { + valueSchema: { + type: 'array', + items: { + type: 'object', + required: ['condition', 'list'], + properties: { + branchId: { type: 'string' }, + condition: { type: 'string', enum: ['AND', 'OR'] }, + list: { type: 'array', items: { type: 'object' } } + } + } + } + } + } + }, + 'builtin:question-classification': { + inputs: { + [NodeInputKeyEnum.aiModel]: remoteModelInput, + [NodeInputKeyEnum.agents]: { + valueSchema: { + type: 'array', + items: { + type: 'object', + required: ['key', 'value'], + properties: { key: { type: 'string' }, value: { type: 'string' } } + } + } + } + } + }, + 'builtin:user-select': { + inputs: { + [NodeInputKeyEnum.userSelectOptions]: { + valueSchema: { + type: 'array', + items: { + type: 'object', + required: ['key', 'value'], + properties: { key: { type: 'string' }, value: { type: 'string' } } + } + } + } + } + }, + 'builtin:form-input': { + inputs: { + [NodeInputKeyEnum.userInputForms]: { + valueSchema: { type: 'array', items: { type: 'object' } } + } + } + }, + 'builtin:variable-update': { + inputs: { + [NodeInputKeyEnum.updateList]: { + valueSchema: { type: 'array', items: { type: 'object' } } + } + } + }, + 'builtin:tool-call': { + inputs: { + [NodeInputKeyEnum.aiModel]: remoteModelInput + } + }, + 'builtin:dataset-concat': { + inputs: { + [NodeInputKeyEnum.datasetQuoteList]: { + configurable: false, + agentHint: 'workflow:cli.input.dataset_quotes' + } + } + }, + 'builtin:custom-feedback': { + inputs: { + [NodeInputKeyEnum.textareaInput]: { + agentHint: 'workflow:cli.input.custom_feedback' + } + } + } +}; + +const templateRefByFlowNodeType: Partial> = { + [FlowNodeTypeEnum.chatNode]: 'builtin:ai-chat', + [FlowNodeTypeEnum.textEditor]: 'builtin:text-editor', + [FlowNodeTypeEnum.answerNode]: 'builtin:assigned-answer', + [FlowNodeTypeEnum.datasetSearchNode]: 'builtin:dataset-search', + [FlowNodeTypeEnum.queryExtension]: 'builtin:question-optimization', + [FlowNodeTypeEnum.contentExtract]: 'builtin:content-extract', + [FlowNodeTypeEnum.httpRequest468]: 'builtin:http-request', + [FlowNodeTypeEnum.code]: 'builtin:code', + [FlowNodeTypeEnum.runApp]: 'builtin:call-app', + [FlowNodeTypeEnum.ifElseNode]: 'builtin:if-else', + [FlowNodeTypeEnum.classifyQuestion]: 'builtin:question-classification', + [FlowNodeTypeEnum.userSelect]: 'builtin:user-select', + [FlowNodeTypeEnum.formInput]: 'builtin:form-input', + [FlowNodeTypeEnum.variableUpdate]: 'builtin:variable-update', + [FlowNodeTypeEnum.toolCall]: 'builtin:tool-call', + [FlowNodeTypeEnum.datasetConcatNode]: 'builtin:dataset-concat', + [FlowNodeTypeEnum.customFeedback]: 'builtin:custom-feedback' +}; + +export const getAutomationMeta = (ref: NodeTemplateRef) => + automationMetaMap[formatNodeTemplateRef(ref)]; + +export const getInputAutomationMeta = (flowNodeType: string, inputKey: string) => { + const templateRef = templateRefByFlowNodeType[flowNodeType as FlowNodeTypeEnum]; + return templateRef ? automationMetaMap[templateRef]?.inputs?.[inputKey] : undefined; +}; diff --git a/packages/workflow-core/src/template/builtin.ts b/packages/workflow-core/src/template/builtin.ts new file mode 100644 index 000000000000..7b182eb908d2 --- /dev/null +++ b/packages/workflow-core/src/template/builtin.ts @@ -0,0 +1,92 @@ +import { AiChatModule } from '@fastgpt/global/core/workflow/template/system/aiChat'; +import { AssignedAnswerModule } from '@fastgpt/global/core/workflow/template/system/assignedAnswer'; +import { TextEditorNode } from '@fastgpt/global/core/workflow/template/system/textEditor'; +import { WorkflowStart } from '@fastgpt/global/core/workflow/template/system/workflowStart'; +import { SystemConfigNode } from '@fastgpt/global/core/workflow/template/system/systemConfig'; +import { DatasetSearchModule } from '@fastgpt/global/core/workflow/template/system/datasetSearch'; +import { AiQueryExtension } from '@fastgpt/global/core/workflow/template/system/queryExtension'; +import { ContextExtractModule } from '@fastgpt/global/core/workflow/template/system/contextExtract'; +import { HttpNode468 } from '@fastgpt/global/core/workflow/template/system/http468'; +import { CodeNode } from '@fastgpt/global/core/workflow/template/system/sandbox'; +import { RunAppModule } from '@fastgpt/global/core/workflow/template/system/abandoned/runApp'; +import { IfElseNode } from '@fastgpt/global/core/workflow/template/system/ifElse'; +import { ClassifyQuestionModule } from '@fastgpt/global/core/workflow/template/system/classifyQuestion'; +import { UserSelectNode } from '@fastgpt/global/core/workflow/template/system/interactive/userSelect'; +import { FormInputNode } from '@fastgpt/global/core/workflow/template/system/interactive/formInput'; +import { ToolCallNode } from '@fastgpt/global/core/workflow/template/system/toolCall'; +import { ReadFilesNode } from '@fastgpt/global/core/workflow/template/system/readFiles'; +import { VariableUpdateNode } from '@fastgpt/global/core/workflow/template/system/variableUpdate'; +import { ParallelRunNode } from '@fastgpt/global/core/workflow/template/system/parallelRun/parallelRun'; +import { LoopRunNode } from '@fastgpt/global/core/workflow/template/system/loopRun/loopRun'; +import { LoopRunBreakNode } from '@fastgpt/global/core/workflow/template/system/loopRun/loopRunBreak'; +import { LoopRunStartNode } from '@fastgpt/global/core/workflow/template/system/loopRun/loopRunStart'; +import { LoopStartNode } from '@fastgpt/global/core/workflow/template/system/loop/loopStart'; +import { LoopEndNode } from '@fastgpt/global/core/workflow/template/system/loop/loopEnd'; +import { DatasetConcatModule } from '@fastgpt/global/core/workflow/template/system/datasetConcat'; +import { CustomFeedbackNode } from '@fastgpt/global/core/workflow/template/system/customFeedback'; +import type { FlowNodeTemplateType } from '@fastgpt/global/core/workflow/type/node'; +import { WorkflowCommandError } from '../domain/diagnostic'; +import { getAutomationMeta } from './automationMeta'; +import { formatNodeTemplateRef, type NodeTemplateRef, type WorkflowTemplateProvider } from './type'; + +const builtinTemplates: Record = { + // 仅供工作流初始化自动实例化,不在 template list 中暴露。 + 'builtin:__system-config': SystemConfigNode, + 'builtin:workflow-start': WorkflowStart, + 'builtin:ai-chat': AiChatModule, + 'builtin:text-editor': TextEditorNode, + 'builtin:assigned-answer': AssignedAnswerModule, + 'builtin:dataset-search': DatasetSearchModule, + 'builtin:question-optimization': AiQueryExtension, + 'builtin:content-extract': ContextExtractModule, + 'builtin:http-request': HttpNode468, + 'builtin:code': CodeNode, + 'builtin:call-app': RunAppModule, + 'builtin:if-else': IfElseNode, + 'builtin:question-classification': ClassifyQuestionModule, + 'builtin:user-select': UserSelectNode, + 'builtin:form-input': FormInputNode, + 'builtin:tool-call': ToolCallNode, + 'builtin:read-files': ReadFilesNode, + 'builtin:variable-update': VariableUpdateNode, + 'builtin:parallel-run': ParallelRunNode, + 'builtin:loop-run': LoopRunNode, + 'builtin:loop-run-break': LoopRunBreakNode, + 'builtin:dataset-concat': DatasetConcatModule, + 'builtin:custom-feedback': CustomFeedbackNode, + // 仅供容器命令自动实例化,不在 template list 中暴露。 + 'builtin:__nested-start': LoopStartNode, + 'builtin:__nested-end': LoopEndNode, + 'builtin:__loop-run-start': LoopRunStartNode +}; + +export const builtinTemplateRefs: NodeTemplateRef[] = Object.keys(builtinTemplates) + .filter((value) => !value.startsWith('builtin:__')) + .map((value) => ({ + kind: 'builtin', + templateId: value.slice('builtin:'.length) + })); + +export const builtinTemplateProvider: WorkflowTemplateProvider = { + async list() { + return [...builtinTemplateRefs]; + }, + async resolve(ref) { + const template = + ref.kind === 'builtin' ? builtinTemplates[formatNodeTemplateRef(ref)] : undefined; + if (!template) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_TEMPLATE_NOT_FOUND', + severity: 'error', + params: { template: formatNodeTemplateRef(ref) } + } + ]); + } + return { + // invalidCondition 等函数只参与 Web 展示计算,本来就不会进入 Store JSON。 + template: JSON.parse(JSON.stringify(template)) as FlowNodeTemplateType, + automationMeta: getAutomationMeta(ref) + }; + } +}; diff --git a/packages/workflow-core/src/template/defaultValue.ts b/packages/workflow-core/src/template/defaultValue.ts new file mode 100644 index 000000000000..e762209fa89b --- /dev/null +++ b/packages/workflow-core/src/template/defaultValue.ts @@ -0,0 +1,70 @@ +import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; +import type { FlowNodeInputItemType } from '@fastgpt/global/core/workflow/type/io'; +import type { NodeInputAutomationMeta, WorkflowResourceKind } from './type'; + +const arrayValueTypes = new Set([ + WorkflowIOValueTypeEnum.arrayString, + WorkflowIOValueTypeEnum.arrayNumber, + WorkflowIOValueTypeEnum.arrayBoolean, + WorkflowIOValueTypeEnum.arrayObject, + WorkflowIOValueTypeEnum.arrayAny, + WorkflowIOValueTypeEnum.chatHistory, + WorkflowIOValueTypeEnum.datasetQuote, + WorkflowIOValueTypeEnum.selectDataset +]); + +const cloneValue = (value: T): T => (value === undefined ? value : structuredClone(value)); + +/** 返回不会伪造远端资源、且与输入值类型兼容的初始空值。 */ +export const getResourceSafeEmptyValue = ({ + valueType, + resourceKind +}: { + valueType?: string; + resourceKind?: WorkflowResourceKind; +}): unknown => { + if (resourceKind === 'dataset' || valueType === WorkflowIOValueTypeEnum.selectDataset) { + return []; + } + if (resourceKind !== undefined) return undefined; + return valueType !== undefined && arrayValueTypes.has(valueType) ? [] : undefined; +}; + +/** + * 解析模板输入的非用户初始值。用户显式覆盖由 Command 在实例化后应用, + * 因而 `[]`、空字符串、false 和 0 都不会被默认值覆盖。 + */ +export const resolveInitialInputValue = ({ + input, + meta, + validatedRemoteDefault +}: { + input: FlowNodeInputItemType; + meta?: NodeInputAutomationMeta; + validatedRemoteDefault?: { provided: true; value: unknown }; +}): unknown => { + const defaultPolicy = meta?.defaultPolicy ?? 'template'; + const acceptsRemoteDefault = defaultPolicy !== 'userRequired' && meta?.resourceKind !== 'secret'; + + if (acceptsRemoteDefault && validatedRemoteDefault?.provided === true) { + return cloneValue(validatedRemoteDefault.value); + } + + // 资源 ID 必须由远端 Provider 验证;原始模板里的资源值不能直接成为本地绑定。 + if (defaultPolicy === 'template' && meta?.resourceKind === undefined) { + const templateDefault = input.defaultValue ?? input.value; + if (templateDefault !== undefined) return cloneValue(templateDefault); + } + + return getResourceSafeEmptyValue({ + valueType: input.valueType, + resourceKind: meta?.resourceKind + }); +}; + +/** 判断模板/远端初始值是否会阻止后置的 Start 默认引用。 */ +export const hasConfiguredValue = (value: unknown): boolean => { + if (value === undefined || value === null || value === '') return false; + if (Array.isArray(value)) return value.length > 0; + return true; +}; diff --git a/packages/workflow-core/src/template/descriptor.ts b/packages/workflow-core/src/template/descriptor.ts new file mode 100644 index 000000000000..06e7660d21f6 --- /dev/null +++ b/packages/workflow-core/src/template/descriptor.ts @@ -0,0 +1,133 @@ +import { + FlowNodeInputTypeEnum, + FlowNodeOutputTypeEnum +} from '@fastgpt/global/core/workflow/node/constant'; +import type { FlowNodeTemplateType } from '@fastgpt/global/core/workflow/type/node'; +import type { + NodeTemplateAutomationMeta, + NodeTemplateRef, + WorkflowInputDefaultPolicy, + WorkflowResourceKind +} from './type'; + +export type NodeParameterInputMode = 'literal' | 'reference' | 'secret'; + +export type NodeParameterDescriptor = { + key: string; + label: string; + description: string; + valueType?: string; + required: boolean; + defaultValue?: unknown; + defaultPolicy: WorkflowInputDefaultPolicy; + resourceKind?: WorkflowResourceKind; + bindingRequired: boolean; + configurable: boolean; + inputModes: NodeParameterInputMode[]; + enum?: Array<{ label?: string; value: string; description?: string }>; + constraints?: { + min?: number; + max?: number; + minLength?: number; + maxLength?: number; + valueSchema?: Record; + }; + examples?: unknown[]; +}; + +export type NodeTemplateDescriptor = { + template: NodeTemplateRef; + name: string; + intro?: string; + flowNodeType: string; + inputs: NodeParameterDescriptor[]; + outputs: Array<{ + id: string; + key: string; + label: string; + description?: string; + valueType?: string; + required: boolean; + executable: boolean; + }>; + constraints: { + unique: boolean; + isTool: boolean; + }; +}; + +const getInputModes = (renderTypes: FlowNodeInputTypeEnum[]): NodeParameterInputMode[] => { + const modes = [ + renderTypes.some((type) => type !== FlowNodeInputTypeEnum.reference) ? 'literal' : undefined, + renderTypes.includes(FlowNodeInputTypeEnum.reference) ? 'reference' : undefined, + renderTypes.includes(FlowNodeInputTypeEnum.password) ? 'secret' : undefined + ].filter((item): item is NodeParameterInputMode => item !== undefined); + return [...new Set(modes)]; +}; + +/** 将现有模板实时归一化为 CLI/Agent 可读取的参数契约。 */ +export const normalizeNodeTemplateDescriptor = ({ + template, + templateRef, + automationMeta, + translate = (value) => value +}: { + template: FlowNodeTemplateType; + templateRef: NodeTemplateRef; + automationMeta?: NodeTemplateAutomationMeta; + translate?: (value: string) => string; +}): NodeTemplateDescriptor => ({ + template: templateRef, + name: translate(template.name), + intro: template.intro ? translate(template.intro) : undefined, + flowNodeType: template.flowNodeType, + inputs: template.inputs + .filter((input) => input.deprecated !== true) + .map((input) => { + const meta = automationMeta?.inputs?.[input.key]; + const constraints = { + min: input.min, + max: input.max, + minLength: input.minLength, + maxLength: input.maxLength, + valueSchema: meta?.valueSchema + }; + return { + key: input.key, + label: translate(input.label), + description: translate( + meta?.agentHint ?? input.toolDescription ?? input.description ?? input.label + ), + valueType: input.valueType, + required: input.required ?? false, + defaultValue: input.defaultValue ?? input.value, + defaultPolicy: meta?.defaultPolicy ?? 'template', + resourceKind: meta?.resourceKind, + bindingRequired: meta?.bindingRequired ?? false, + configurable: meta?.configurable ?? input.canEdit !== false, + inputModes: getInputModes(input.renderTypeList), + enum: input.list?.map((item) => ({ + ...item, + label: item.label ? translate(item.label) : undefined, + description: item.description ? translate(item.description) : undefined + })), + constraints, + examples: meta?.examples + }; + }), + outputs: template.outputs + .filter((output) => output.deprecated !== true) + .map((output) => ({ + id: output.id, + key: output.key, + label: translate(output.label ?? output.key), + description: output.description ? translate(output.description) : undefined, + valueType: output.valueType, + required: output.required ?? false, + executable: output.type === FlowNodeOutputTypeEnum.source + })), + constraints: { + unique: template.unique === true, + isTool: template.isTool === true + } +}); diff --git a/packages/workflow-core/src/template/instantiate.ts b/packages/workflow-core/src/template/instantiate.ts new file mode 100644 index 000000000000..4ef50ca5ac85 --- /dev/null +++ b/packages/workflow-core/src/template/instantiate.ts @@ -0,0 +1,160 @@ +import { NodeInputKeyEnum, NodeOutputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import { + FlowNodeInputTypeEnum, + FlowNodeTypeEnum +} from '@fastgpt/global/core/workflow/node/constant'; +import { + StoreNodeItemTypeSchema, + type StoreNodeItemType +} from '@fastgpt/global/core/workflow/type/node'; +import type { WorkflowDocument } from '../domain/document'; +import { WorkflowCommandError, type WorkflowDiagnostic } from '../domain/diagnostic'; +import { areWorkflowValueTypesCompatible } from '../reference/service'; +import { hasConfiguredValue, resolveInitialInputValue } from './defaultValue'; +import type { NodeTemplateRef, WorkflowTemplateProvider } from './type'; + +/** 从原始 FastGPT 模板创建完整 StoreNode,Descriptor 元数据不会进入运行时对象。 */ +export const instantiateNodeFromTemplate = async ({ + document, + templateRef, + nodeId, + name, + position, + parentNodeId, + provider, + locale, + translate = (value) => value +}: { + document: WorkflowDocument; + templateRef: NodeTemplateRef; + nodeId: string; + name?: string; + position?: { x: number; y: number }; + parentNodeId?: string; + provider: WorkflowTemplateProvider; + locale: string; + translate?: (value: string) => string; +}): Promise<{ node: StoreNodeItemType; warnings: WorkflowDiagnostic[] }> => { + if (document.nodes.some((node) => node.nodeId === nodeId)) { + throw new WorkflowCommandError([ + { code: 'WORKFLOW_NODE_ID_DUPLICATED', severity: 'error', nodeId } + ]); + } + + const { template, automationMeta, validatedInputDefaults } = await provider.resolve(templateRef, { + locale + }); + if ( + template.unique === true && + document.nodes.some( + (node) => node.flowNodeType === template.flowNodeType && node.parentNodeId === parentNodeId + ) + ) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_UNIQUE_NODE_EXISTS', + severity: 'error', + params: { flowNodeType: template.flowNodeType } + } + ]); + } + + const node = StoreNodeItemTypeSchema.parse({ + ...structuredClone(template), + name: name ?? translate(template.name), + intro: template.intro ? translate(template.intro) : undefined, + nodeId, + parentNodeId, + position, + inputs: template.inputs.map((input) => { + const meta = automationMeta?.inputs?.[input.key]; + const usesSafeDefault = + meta?.resourceKind !== undefined || + meta?.defaultPolicy === 'userRequired' || + meta?.defaultPolicy === 'remoteValidated'; + return { + ...structuredClone(input), + value: resolveInitialInputValue({ + input, + meta, + validatedRemoteDefault: validatedInputDefaults?.[input.key] + }), + ...(usesSafeDefault ? { defaultValue: undefined } : {}), + label: translate(input.label), + description: input.description ? translate(input.description) : undefined, + placeholder: input.placeholder ? translate(input.placeholder) : undefined, + debugLabel: input.debugLabel ? translate(input.debugLabel) : undefined, + toolDescription: input.toolDescription ? translate(input.toolDescription) : undefined, + list: input.list?.map((item) => ({ + ...item, + label: item.label ? translate(item.label) : item.label, + description: item.description ? translate(item.description) : undefined + })) + }; + }), + outputs: template.outputs.map((output) => ({ + ...structuredClone(output), + label: output.label ? translate(output.label) : output.label, + description: output.description ? translate(output.description) : undefined + })) + }); + + const startNode = document.nodes.find( + (item) => item.flowNodeType === FlowNodeTypeEnum.workflowStart + ); + if (startNode) { + const userInputOutput = startNode.outputs.find( + (output) => output.key === NodeOutputKeyEnum.userChatInput + ); + const userFilesOutput = startNode.outputs.find( + (output) => output.key === NodeOutputKeyEnum.userFiles + ); + for (const input of node.inputs) { + const referenceIndex = input.renderTypeList.indexOf(FlowNodeInputTypeEnum.reference); + if (referenceIndex < 0 || hasConfiguredValue(input.value)) continue; + + const referenceDefault = (() => { + if (input.key === NodeInputKeyEnum.userChatInput && userInputOutput) { + return { + value: [startNode.nodeId, userInputOutput.key], + outputs: [userInputOutput], + collection: false + }; + } + if (input.key === NodeInputKeyEnum.fileUrlList && userFilesOutput) { + return { + value: [[startNode.nodeId, userFilesOutput.key]], + outputs: [userFilesOutput], + collection: true + }; + } + if (input.key === NodeInputKeyEnum.datasetSearchInput && userInputOutput) { + return { + value: [ + [startNode.nodeId, userInputOutput.key], + ...(userFilesOutput ? [[startNode.nodeId, userFilesOutput.key]] : []) + ], + outputs: [userInputOutput, ...(userFilesOutput ? [userFilesOutput] : [])], + collection: true + }; + } + })(); + if ( + !referenceDefault || + !referenceDefault.outputs.every((output) => + areWorkflowValueTypesCompatible({ + expected: input.valueType, + actual: output.valueType, + collection: referenceDefault.collection + }) + ) + ) { + continue; + } + input.value = referenceDefault.value; + input.selectedTypeIndex = referenceIndex; + } + } + + return { node, warnings: [] }; +}; diff --git a/packages/workflow-core/src/template/type.ts b/packages/workflow-core/src/template/type.ts new file mode 100644 index 000000000000..fdd7efebe606 --- /dev/null +++ b/packages/workflow-core/src/template/type.ts @@ -0,0 +1,75 @@ +import type { FlowNodeTemplateType } from '@fastgpt/global/core/workflow/type/node'; +import z from 'zod'; + +export const NodeTemplateRefSchema = z.discriminatedUnion('kind', [ + z.object({ kind: z.literal('builtin'), templateId: z.string().min(1) }), + z.object({ + kind: z.literal('teamApp'), + appId: z.string().min(1), + versionId: z.string().optional() + }), + z.object({ + kind: z.literal('systemTool'), + toolId: z.string().min(1), + versionId: z.string().optional() + }), + z.object({ + kind: z.literal('tool'), + toolId: z.string().min(1), + parentId: z.string().optional(), + versionId: z.string().optional() + }) +]); +export type NodeTemplateRef = z.infer; + +/** CLI 字符串只在适配边界解析,Core 始终接收结构化 TemplateRef。 */ +export const parseNodeTemplateRef = (value: string): NodeTemplateRef => { + const separatorIndex = value.indexOf(':'); + const kind = value.slice(0, separatorIndex); + const id = value.slice(separatorIndex + 1); + if (separatorIndex <= 0 || !id) return NodeTemplateRefSchema.parse({ kind, templateId: '' }); + if (kind === 'builtin') return { kind, templateId: id }; + if (kind === 'teamApp') return { kind, appId: id }; + if (kind === 'systemTool') return { kind, toolId: id }; + if (kind === 'tool') return { kind, toolId: id }; + return NodeTemplateRefSchema.parse({ kind }); +}; + +export const formatNodeTemplateRef = (ref: NodeTemplateRef) => { + if (ref.kind === 'builtin') return `${ref.kind}:${ref.templateId}`; + if (ref.kind === 'teamApp') return `${ref.kind}:${ref.appId}`; + return `${ref.kind}:${ref.toolId}`; +}; + +export type WorkflowInputDefaultPolicy = 'template' | 'userRequired' | 'remoteValidated'; +export type WorkflowResourceKind = 'dataset' | 'model' | 'app' | 'tool' | 'secret'; + +export type NodeInputAutomationMeta = { + configurable?: boolean; + agentHint?: string; + valueSchema?: Record; + examples?: unknown[]; + defaultPolicy?: WorkflowInputDefaultPolicy; + resourceKind?: WorkflowResourceKind; + bindingRequired?: boolean; +}; + +export type NodeTemplateAutomationMeta = { + inputs?: Record; +}; + +export type ResolvedWorkflowTemplate = { + template: FlowNodeTemplateType; + automationMeta?: NodeTemplateAutomationMeta; + validatedInputDefaults?: Record; +}; + +export type TemplateResolveContext = { + locale: string; + translate?: (value: string) => string; +}; + +export type WorkflowTemplateProvider = { + list(context: TemplateResolveContext): Promise; + resolve(ref: NodeTemplateRef, context: TemplateResolveContext): Promise; +}; diff --git a/packages/workflow-core/src/template/valueSchema.ts b/packages/workflow-core/src/template/valueSchema.ts new file mode 100644 index 000000000000..03355b7281f7 --- /dev/null +++ b/packages/workflow-core/src/template/valueSchema.ts @@ -0,0 +1,83 @@ +import { WorkflowCommandError } from '../domain/diagnostic'; +import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; + +type JsonSchema = { + type?: string; + required?: string[]; + properties?: Record; + items?: JsonSchema; + enum?: unknown[]; + additionalProperties?: boolean; +}; + +export const inputValueNeedsSchema = ({ + value, + valueType +}: { + value: unknown; + valueType?: string; +}) => + valueType === WorkflowIOValueTypeEnum.object || + valueType === WorkflowIOValueTypeEnum.arrayObject || + valueType === WorkflowIOValueTypeEnum.arrayAny || + valueType === WorkflowIOValueTypeEnum.selectDataset || + valueType === WorkflowIOValueTypeEnum.selectApp || + (valueType === WorkflowIOValueTypeEnum.any && typeof value === 'object' && value !== null); + +export const valueMatchesSchema = (value: unknown, schema: Record): boolean => { + const parsedSchema = schema as JsonSchema; + if (parsedSchema.enum && !parsedSchema.enum.some((item) => Object.is(item, value))) return false; + if (parsedSchema.type === 'string' && typeof value !== 'string') return false; + if (parsedSchema.type === 'number' && typeof value !== 'number') return false; + if (parsedSchema.type === 'integer' && (!Number.isInteger(value) || typeof value !== 'number')) + return false; + if (parsedSchema.type === 'boolean' && typeof value !== 'boolean') return false; + if (parsedSchema.type === 'array') { + if (!Array.isArray(value)) return false; + return ( + !parsedSchema.items || + value.every((item) => valueMatchesSchema(item, parsedSchema.items as Record)) + ); + } + if (parsedSchema.type === 'object') { + if (!value || typeof value !== 'object' || Array.isArray(value)) return false; + const record = value as Record; + if (parsedSchema.required?.some((key) => record[key] === undefined)) return false; + if ( + parsedSchema.additionalProperties === false && + Object.keys(record).some((key) => !parsedSchema.properties?.[key]) + ) { + return false; + } + return Object.entries(parsedSchema.properties ?? {}).every( + ([key, itemSchema]) => + record[key] === undefined || + valueMatchesSchema(record[key], itemSchema as Record) + ); + } + return true; +}; + +/** 校验 Automation Metadata 提供的 JSON Schema 子集。 */ +export const assertValueSchema = ({ + value, + schema, + nodeId, + inputKey +}: { + value: unknown; + schema: Record; + nodeId: string; + inputKey: string; +}) => { + if (!valueMatchesSchema(value, schema)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_INPUT_VALUE_SCHEMA_INVALID', + severity: 'error', + nodeId, + inputKey + } + ]); + } +}; diff --git a/packages/workflow-core/src/validation/index.ts b/packages/workflow-core/src/validation/index.ts new file mode 100644 index 000000000000..fc5a69db3380 --- /dev/null +++ b/packages/workflow-core/src/validation/index.ts @@ -0,0 +1,562 @@ +import { NodeInputKeyEnum, VARIABLE_NODE_ID } from '@fastgpt/global/core/workflow/constants'; +import { + FlowNodeInputTypeEnum, + FlowNodeTypeEnum, + isNestedChildSystemNodeType, + isNestedParentNodeType +} from '@fastgpt/global/core/workflow/node/constant'; +import type { StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node'; +import { WorkflowDocumentSchema, type WorkflowDocument } from '../domain/document'; +import { WorkflowCommandError, type WorkflowDiagnostic } from '../domain/diagnostic'; +import { assertExecutionEdge } from '../edge/service'; +import { LoopRunModeEnum } from '@fastgpt/global/core/workflow/template/system/loopRun/loopRun'; +import { VariableConditionEnum } from '@fastgpt/global/core/workflow/template/system/ifElse/constant'; +import { assertParentAssignment } from '../nesting/service'; +import { areWorkflowValueTypesCompatible, valueMatchesType } from '../reference/service'; +import { getInputAutomationMeta } from '../template/automationMeta'; +import { inputValueNeedsSchema, valueMatchesSchema } from '../template/valueSchema'; + +const isReferenceValue = (value: unknown): value is [string, string] => + Array.isArray(value) && + value.length === 2 && + typeof value[0] === 'string' && + typeof value[1] === 'string'; + +const hasRequiredValue = (value: unknown) => + value !== undefined && + value !== null && + value !== '' && + (!Array.isArray(value) || value.length > 0); + +const getReachableNodeIds = (document: WorkflowDocument, startNodeId: string) => { + const reachable = new Set([startNodeId]); + const pending = [startNodeId]; + while (pending.length > 0) { + const current = pending.shift()!; + for (const edge of document.executionEdges) { + if (edge.source.nodeId !== current || reachable.has(edge.target.nodeId)) continue; + reachable.add(edge.target.nodeId); + pending.push(edge.target.nodeId); + } + } + return reachable; +}; + +const validateReference = ({ + document, + node, + input, + diagnostics +}: { + document: WorkflowDocument; + node: StoreNodeItemType; + input: StoreNodeItemType['inputs'][number]; + diagnostics: WorkflowDiagnostic[]; +}) => { + const references = isReferenceValue(input.value) + ? [input.value] + : Array.isArray(input.value) && input.value.every(isReferenceValue) + ? input.value + : undefined; + if (!references) { + diagnostics.push({ + code: 'WORKFLOW_REFERENCE_FORMAT_INVALID', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key + }); + return; + } + const collection = !isReferenceValue(input.value); + + for (const [sourceNodeId, outputKey] of references) { + if (sourceNodeId === VARIABLE_NODE_ID) { + const variable = document.chatConfig.variables?.find((item) => item.key === outputKey); + if (!variable) { + diagnostics.push({ + code: 'WORKFLOW_REFERENCE_OUTPUT_NOT_FOUND', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key, + params: { sourceNodeId, outputKey } + }); + } else if ( + !areWorkflowValueTypesCompatible({ + expected: input.valueType, + actual: variable.valueType, + collection + }) + ) { + diagnostics.push({ + code: 'WORKFLOW_REFERENCE_TYPE_MISMATCH', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key, + params: { expected: input.valueType, actual: variable.valueType } + }); + } + continue; + } + + const sourceNode = document.nodes.find((item) => item.nodeId === sourceNodeId); + const sourceOutput = sourceNode?.outputs.find( + (output) => output.key === outputKey || output.id === outputKey + ); + if (!sourceNode || !sourceOutput) { + diagnostics.push({ + code: 'WORKFLOW_REFERENCE_OUTPUT_NOT_FOUND', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key, + params: { sourceNodeId, outputKey } + }); + continue; + } + if ( + !areWorkflowValueTypesCompatible({ + expected: input.valueType, + actual: sourceOutput.valueType, + collection + }) + ) { + diagnostics.push({ + code: 'WORKFLOW_REFERENCE_TYPE_MISMATCH', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key, + params: { expected: input.valueType, actual: sourceOutput.valueType } + }); + } + + const downstream = getReachableNodeIds(document, sourceNodeId); + if (sourceNodeId === node.nodeId || !downstream.has(node.nodeId)) { + diagnostics.push({ + code: 'WORKFLOW_REFERENCE_SOURCE_NOT_UPSTREAM', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key, + params: { sourceNodeId } + }); + } + } +}; + +const validateNodeIO = ({ + document, + node, + diagnostics +}: { + document: WorkflowDocument; + node: StoreNodeItemType; + diagnostics: WorkflowDiagnostic[]; +}) => { + const inputKeys = new Set(); + for (const input of node.inputs) { + if (inputKeys.has(input.key)) { + diagnostics.push({ + code: 'WORKFLOW_INPUT_KEY_DUPLICATED', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key + }); + } + inputKeys.add(input.key); + + const selectedTypeIndex = input.selectedTypeIndex ?? 0; + const selectedType = input.renderTypeList[selectedTypeIndex]; + if (selectedType === undefined) { + diagnostics.push({ + code: 'WORKFLOW_INPUT_MODE_INVALID', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key + }); + continue; + } + const isUnusedConditionalLoopArray = + node.flowNodeType === FlowNodeTypeEnum.loopRun && + input.key === NodeInputKeyEnum.loopRunInputArray && + node.inputs.find((item) => item.key === NodeInputKeyEnum.loopRunMode)?.value === + LoopRunModeEnum.conditional; + const defaultPolicy = getInputAutomationMeta(node.flowNodeType, input.key)?.defaultPolicy; + const isExternalBinding = + defaultPolicy === 'userRequired' || defaultPolicy === 'remoteValidated'; + if ( + node.flowNodeType !== FlowNodeTypeEnum.workflowStart && + input.required === true && + !isUnusedConditionalLoopArray && + !isExternalBinding && + !hasRequiredValue(input.value) + ) { + diagnostics.push({ + code: 'WORKFLOW_REQUIRED_INPUT_MISSING', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key + }); + continue; + } + if (!hasRequiredValue(input.value)) continue; + + if (selectedType === FlowNodeInputTypeEnum.reference) { + validateReference({ document, node, input, diagnostics }); + } else if (!valueMatchesType(input.value, input.valueType)) { + diagnostics.push({ + code: 'WORKFLOW_INPUT_VALUE_TYPE_INVALID', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key, + params: { expected: input.valueType } + }); + } else { + const valueSchema = getInputAutomationMeta(node.flowNodeType, input.key)?.valueSchema; + if (valueSchema && !valueMatchesSchema(input.value, valueSchema)) { + diagnostics.push({ + code: 'WORKFLOW_INPUT_VALUE_SCHEMA_INVALID', + severity: 'error', + nodeId: node.nodeId, + inputKey: input.key + }); + } else if ( + !valueSchema && + inputValueNeedsSchema({ value: input.value, valueType: input.valueType }) + ) { + diagnostics.push({ + code: 'WORKFLOW_TEMPLATE_PARAMETER_SCHEMA_MISSING', + severity: 'warning', + nodeId: node.nodeId, + inputKey: input.key + }); + } + } + } + + const outputKeys = new Set(); + for (const output of node.outputs) { + if (outputKeys.has(output.key)) { + diagnostics.push({ + code: 'WORKFLOW_OUTPUT_KEY_DUPLICATED', + severity: 'error', + nodeId: node.nodeId, + params: { outputKey: output.key } + }); + } + outputKeys.add(output.key); + } +}; + +const reachabilityIgnoredNodeTypes = new Set([ + FlowNodeTypeEnum.systemConfig, + FlowNodeTypeEnum.pluginConfig, + FlowNodeTypeEnum.comment, + FlowNodeTypeEnum.globalVariable, + FlowNodeTypeEnum.emptyNode +]); + +const validateContainer = ({ + document, + node, + diagnostics +}: { + document: WorkflowDocument; + node: StoreNodeItemType; + diagnostics: WorkflowDiagnostic[]; +}) => { + if (!isNestedParentNodeType(node.flowNodeType)) return; + const children = document.nodes.filter((item) => item.parentNodeId === node.nodeId); + const listedChildren = node.inputs.find( + (item) => item.key === NodeInputKeyEnum.childrenNodeIdList + )?.value; + const actualIds = children.map((item) => item.nodeId).sort(); + const listedIds = Array.isArray(listedChildren) + ? listedChildren.filter((item): item is string => typeof item === 'string').sort() + : []; + if (JSON.stringify(actualIds) !== JSON.stringify(listedIds)) { + diagnostics.push({ + code: 'WORKFLOW_CONTAINER_CHILDREN_OUT_OF_SYNC', + severity: 'error', + nodeId: node.nodeId + }); + } + + const requiredSystemTypes = + node.flowNodeType === FlowNodeTypeEnum.loopRun + ? [FlowNodeTypeEnum.loopRunStart] + : [FlowNodeTypeEnum.nestedStart, FlowNodeTypeEnum.nestedEnd]; + for (const systemType of requiredSystemTypes) { + const count = children.filter((item) => item.flowNodeType === systemType).length; + if (count !== 1) { + diagnostics.push({ + code: 'WORKFLOW_CONTAINER_SYSTEM_CHILD_INVALID', + severity: 'error', + nodeId: node.nodeId, + params: { systemType, count } + }); + } + } + + if (node.flowNodeType === FlowNodeTypeEnum.loopRun) { + const mode = node.inputs.find((item) => item.key === NodeInputKeyEnum.loopRunMode)?.value; + if ( + mode === LoopRunModeEnum.conditional && + !children.some((item) => item.flowNodeType === FlowNodeTypeEnum.loopRunBreak) + ) { + diagnostics.push({ + code: 'WORKFLOW_CONDITIONAL_LOOP_BREAK_REQUIRED', + severity: 'error', + nodeId: node.nodeId + }); + } + } +}; + +const validateSpecialNode = ({ + document, + node, + diagnostics +}: { + document: WorkflowDocument; + node: StoreNodeItemType; + diagnostics: WorkflowDiagnostic[]; +}) => { + const getInputValue = (key: NodeInputKeyEnum) => + node.inputs.find((item) => item.key === key)?.value; + + if (node.flowNodeType === FlowNodeTypeEnum.ifElseNode) { + const branches = getInputValue(NodeInputKeyEnum.ifElseList); + const invalid = + !Array.isArray(branches) || + branches.length === 0 || + branches.some((branch) => { + if (!branch || typeof branch !== 'object') return true; + const list = (branch as { list?: unknown }).list; + return ( + !Array.isArray(list) || + list.length === 0 || + list.some((condition) => { + if (!condition || typeof condition !== 'object') return true; + const value = condition as { + variable?: unknown; + condition?: VariableConditionEnum; + value?: unknown; + }; + return ( + value.variable === undefined || + value.condition === undefined || + (value.value === undefined && + value.condition !== VariableConditionEnum.isEmpty && + value.condition !== VariableConditionEnum.isNotEmpty) + ); + }) + ); + }); + if (invalid) { + diagnostics.push({ + code: 'WORKFLOW_BRANCH_CONFIGURATION_INVALID', + severity: 'error', + nodeId: node.nodeId + }); + } + } + + if ( + node.flowNodeType === FlowNodeTypeEnum.userSelect || + node.flowNodeType === FlowNodeTypeEnum.classifyQuestion + ) { + const key = + node.flowNodeType === FlowNodeTypeEnum.userSelect + ? NodeInputKeyEnum.userSelectOptions + : NodeInputKeyEnum.agents; + const options = getInputValue(key); + const optionKeys = Array.isArray(options) + ? options.map((item) => + item && typeof item === 'object' ? (item as { key?: unknown }).key : undefined + ) + : []; + if ( + !Array.isArray(options) || + options.length === 0 || + options.some( + (item) => + !item || + typeof item !== 'object' || + typeof (item as { key?: unknown }).key !== 'string' || + typeof (item as { value?: unknown }).value !== 'string' || + !(item as { value: string }).value + ) || + new Set(optionKeys).size !== optionKeys.length + ) { + diagnostics.push({ + code: 'WORKFLOW_BRANCH_CONFIGURATION_INVALID', + severity: 'error', + nodeId: node.nodeId + }); + } + } + + if (node.flowNodeType === FlowNodeTypeEnum.formInput) { + const forms = getInputValue(NodeInputKeyEnum.userInputForms); + const formKeys = Array.isArray(forms) + ? forms.map((form) => + form && typeof form === 'object' ? (form as { key?: unknown }).key : undefined + ) + : []; + const hasInvalidField = + !Array.isArray(forms) || + forms.length === 0 || + formKeys.some((key) => typeof key !== 'string' || !key) || + new Set(formKeys).size !== formKeys.length || + formKeys.some( + (key) => typeof key === 'string' && !node.outputs.some((output) => output.key === key) + ); + if (hasInvalidField) { + diagnostics.push({ + code: 'WORKFLOW_FORM_INPUT_CONFIGURATION_INVALID', + severity: 'error', + nodeId: node.nodeId + }); + } + } + + if (node.flowNodeType === FlowNodeTypeEnum.toolCall) { + const hasTool = document.executionEdges.some( + (edge) => edge.source.kind === 'selectedTools' && edge.source.nodeId === node.nodeId + ); + const usesSandbox = getInputValue(NodeInputKeyEnum.useAgentSandbox) === true; + if (!hasTool && !usesSandbox) { + diagnostics.push({ + code: 'WORKFLOW_TOOL_REQUIRED', + severity: 'error', + nodeId: node.nodeId + }); + } + } +}; + +/** 共享 Validator:覆盖线性、分支、工具、动态 IO 和嵌套工作流。 */ +export const validateWorkflow = (document: WorkflowDocument): WorkflowDiagnostic[] => { + const schemaResult = WorkflowDocumentSchema.safeParse(document); + if (!schemaResult.success) { + return schemaResult.error.issues.map((issue) => ({ + code: 'WORKFLOW_SCHEMA_INVALID', + severity: 'error' as const, + path: issue.path.map((item) => (typeof item === 'symbol' ? item.toString() : item)) + })); + } + + const diagnostics: WorkflowDiagnostic[] = []; + const nodeIds = new Set(); + for (const node of document.nodes) { + if (nodeIds.has(node.nodeId)) { + diagnostics.push({ + code: 'WORKFLOW_NODE_ID_DUPLICATED', + severity: 'error', + nodeId: node.nodeId + }); + } + nodeIds.add(node.nodeId); + } + + const systemConfigNodes = document.nodes.filter( + (node) => node.flowNodeType === FlowNodeTypeEnum.systemConfig + ); + if (systemConfigNodes.length > 1) { + diagnostics.push({ + code: 'WORKFLOW_SYSTEM_CONFIG_NODE_DUPLICATED', + severity: 'error', + params: { count: systemConfigNodes.length } + }); + } + + for (const node of document.nodes) { + if (node.parentNodeId && !nodeIds.has(node.parentNodeId)) { + diagnostics.push({ + code: 'WORKFLOW_PARENT_NODE_NOT_FOUND', + severity: 'error', + nodeId: node.nodeId, + params: { parentNodeId: node.parentNodeId } + }); + } + if (node.parentNodeId) { + const parent = document.nodes.find((item) => item.nodeId === node.parentNodeId); + if (parent) { + try { + assertParentAssignment({ + document, + node, + parentNodeId: node.parentNodeId, + allowSystemChild: isNestedChildSystemNodeType(node.flowNodeType) + }); + } catch (error) { + if (error instanceof WorkflowCommandError) diagnostics.push(...error.diagnostics); + } + } + } else if ( + node.flowNodeType === FlowNodeTypeEnum.loopRunBreak || + isNestedChildSystemNodeType(node.flowNodeType) + ) { + diagnostics.push({ + code: 'WORKFLOW_SYSTEM_OR_BREAK_PARENT_REQUIRED', + severity: 'error', + nodeId: node.nodeId + }); + } + if (node.pluginData?.error) { + diagnostics.push({ + code: 'WORKFLOW_NODE_CONFIGURATION_INVALID', + severity: 'error', + nodeId: node.nodeId, + params: { error: node.pluginData.error } + }); + } + validateNodeIO({ document, node, diagnostics }); + validateSpecialNode({ document, node, diagnostics }); + validateContainer({ document, node, diagnostics }); + } + + const startNodes = document.nodes.filter( + (node) => node.flowNodeType === FlowNodeTypeEnum.workflowStart + ); + if (startNodes.length !== 1) { + diagnostics.push({ + code: 'WORKFLOW_START_COUNT_INVALID', + severity: 'error', + params: { count: startNodes.length } + }); + } + + const edgeKeys = new Set(); + for (const edge of document.executionEdges) { + const edgeKey = JSON.stringify(edge); + if (edgeKeys.has(edgeKey)) { + diagnostics.push({ code: 'WORKFLOW_EDGE_DUPLICATED', severity: 'error', params: { edge } }); + } + edgeKeys.add(edgeKey); + try { + assertExecutionEdge(document, edge); + } catch (error) { + if (error instanceof WorkflowCommandError) diagnostics.push(...error.diagnostics); + diagnostics.push({ code: 'WORKFLOW_EDGE_INVALID', severity: 'error', params: { edge } }); + } + } + + const startNode = startNodes[0]; + if (startNode) { + const reachableNodeIds = getReachableNodeIds(document, startNode.nodeId); + for (const node of document.nodes) { + if ( + !reachabilityIgnoredNodeTypes.has(node.flowNodeType) && + !node.parentNodeId && + !reachableNodeIds.has(node.nodeId) + ) { + diagnostics.push({ + code: 'WORKFLOW_NODE_NOT_REACHABLE', + severity: 'error', + nodeId: node.nodeId + }); + } + } + } + + return diagnostics; +}; diff --git a/packages/workflow-core/test/binding/service.test.ts b/packages/workflow-core/test/binding/service.test.ts new file mode 100644 index 000000000000..965ffeec5675 --- /dev/null +++ b/packages/workflow-core/test/binding/service.test.ts @@ -0,0 +1,119 @@ +import { + applyWorkflowCommand, + builtinTemplateProvider, + collectWorkflowBindings, + createWorkflowDocument, + getWorkflowBindingDiagnostics, + parseNodeTemplateRef +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; + +describe('collectWorkflowBindings', () => { + it('reports required and unverified bindings without exposing their values', async () => { + const start = await applyWorkflowCommand({ + document: createWorkflowDocument(), + command: { + type: 'node.add', + nodeId: 'start', + template: parseNodeTemplateRef('builtin:workflow-start') + }, + dependencies + }); + const search = await applyWorkflowCommand({ + document: start.document, + command: { + type: 'node.add', + nodeId: 'search', + template: parseNodeTemplateRef('builtin:dataset-search'), + connectFrom: { kind: 'next', nodeId: 'start' } + }, + dependencies + }); + + const missingBindings = collectWorkflowBindings(search.document); + expect(missingBindings).toEqual([ + { + nodeId: 'search', + inputKey: 'datasets', + defaultPolicy: 'remoteValidated', + resourceKind: 'dataset', + status: 'missing' + } + ]); + expect(getWorkflowBindingDiagnostics(missingBindings)).toEqual([ + { + code: 'WORKFLOW_BINDING_REQUIRED', + severity: 'warning', + nodeId: 'search', + inputKey: 'datasets', + params: { defaultPolicy: 'remoteValidated', resourceKind: 'dataset' } + } + ]); + + const datasetInput = search.document.nodes + .find((node) => node.nodeId === 'search')! + .inputs.find((input) => input.key === 'datasets')!; + datasetInput.value = [ + { + datasetId: 'dataset-id', + name: 'Dataset', + avatar: '', + vectorModel: { model: 'embedding-model' } + } + ]; + const bindings = collectWorkflowBindings(search.document); + expect(bindings).toEqual([ + { + nodeId: 'search', + inputKey: 'datasets', + defaultPolicy: 'remoteValidated', + resourceKind: 'dataset', + status: 'unverified' + } + ]); + expect(JSON.stringify(bindings)).not.toContain('dataset-id'); + expect(getWorkflowBindingDiagnostics(bindings)).toEqual([ + { + code: 'WORKFLOW_BINDING_UNVERIFIED', + severity: 'warning', + nodeId: 'search', + inputKey: 'datasets', + params: { defaultPolicy: 'remoteValidated', resourceKind: 'dataset' } + } + ]); + }); + + it('reports explicitly required user input but ignores optional secrets', async () => { + const result = await applyWorkflowCommand({ + document: createWorkflowDocument(), + command: { + type: 'node.add', + nodeId: 'http', + template: parseNodeTemplateRef('builtin:http-request') + }, + dependencies + }); + + const bindings = collectWorkflowBindings(result.document); + expect(bindings).toEqual([ + { + nodeId: 'http', + inputKey: 'system_httpReqUrl', + defaultPolicy: 'userRequired', + resourceKind: undefined, + status: 'missing' + } + ]); + expect(getWorkflowBindingDiagnostics(bindings)).toEqual([ + { + code: 'WORKFLOW_BINDING_REQUIRED', + severity: 'warning', + nodeId: 'http', + inputKey: 'system_httpReqUrl', + params: { defaultPolicy: 'userRequired' } + } + ]); + }); +}); diff --git a/packages/workflow-core/test/code/io.test.ts b/packages/workflow-core/test/code/io.test.ts new file mode 100644 index 000000000000..305b80b4477d --- /dev/null +++ b/packages/workflow-core/test/code/io.test.ts @@ -0,0 +1,67 @@ +import { + extractCodeInputDefinitions, + extractCodeOutputDefinitions, + extractReturnedObjectKeys +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +describe('code IO parser', () => { + it('extracts JavaScript inputs and return outputs with documented types', () => { + const code = ` + /** + * @param {number} amount - Amount + * @param {string} currency - Currency + * @property {number} total - Total + * @property {object} detail - Detail + */ + function main({ amount, currency = 'CNY' }) { + return { total: amount * 2, detail: { amount, currency } }; + } + `; + + expect(extractCodeInputDefinitions(code)).toEqual([ + { key: 'amount', valueType: 'number' }, + { key: 'currency', valueType: 'string' } + ]); + expect(extractCodeOutputDefinitions(code)).toEqual([ + { key: 'total', valueType: 'number' }, + { key: 'detail', valueType: 'object' } + ]); + }); + + it('extracts Python inputs and ignores non-static returned properties', () => { + const code = ` + def main(question, count=1): + # return {"ignored": True} + return {"items": [question] * count, **extra} + `; + + expect(extractCodeInputDefinitions(code)).toEqual([ + { key: 'question', valueType: undefined }, + { key: 'count', valueType: undefined } + ]); + expect(extractReturnedObjectKeys(code)).toEqual(['items']); + }); + + it('distinguishes empty static IO from code that cannot be parsed safely', () => { + expect(extractCodeInputDefinitions('function main() { return {}; }')).toEqual([]); + expect(extractCodeOutputDefinitions('function main() { return {}; }')).toEqual([]); + expect(extractCodeInputDefinitions('function main(args) { return getResult(args); }')).toBe( + undefined + ); + expect(extractCodeOutputDefinitions('function main(args) { return getResult(args); }')).toBe( + undefined + ); + }); + + it('ignores template-like characters inside regular expression literals', () => { + expect( + extractCodeOutputDefinitions(` + function main({ text }) { + const parsed = String(text).replace(/^\`\`\`json|^\`\`\`|\`\`\`$/g, ''); + return { parsed }; + } + `) + ).toEqual([{ key: 'parsed', valueType: undefined }]); + }); +}); diff --git a/packages/workflow-core/test/command/additionalBuiltins.test.ts b/packages/workflow-core/test/command/additionalBuiltins.test.ts new file mode 100644 index 000000000000..c9600387374c --- /dev/null +++ b/packages/workflow-core/test/command/additionalBuiltins.test.ts @@ -0,0 +1,185 @@ +import { + FlowNodeInputTypeEnum, + WorkflowCommandError, + WorkflowIOValueTypeEnum, + applyWorkflowCommand, + builtinTemplateProvider, + compileStoreWorkflow, + createWorkflowDocument, + decompileStoreWorkflow, + parseNodeTemplateRef +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; + +const addNode = async ({ + document, + nodeId, + template, + after +}: { + document: ReturnType; + nodeId: string; + template: string; + after?: string; +}) => + ( + await applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId, + template: parseNodeTemplateRef(template), + connectFrom: after ? { kind: 'next', nodeId: after } : undefined + }, + dependencies + }) + ).document; + +describe('additional builtin nodes', () => { + it('configures dataset concat through generic dynamic input commands', async () => { + let document = await addNode({ + document: createWorkflowDocument(), + nodeId: 'start', + template: 'builtin:workflow-start' + }); + document = await addNode({ + document, + nodeId: 'search', + template: 'builtin:dataset-search', + after: 'start' + }); + document = await addNode({ + document, + nodeId: 'concat', + template: 'builtin:dataset-concat', + after: 'search' + }); + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'input.add', + nodeId: 'concat', + input: { + key: 'quote_1', + label: 'Quote 1', + valueType: WorkflowIOValueTypeEnum.datasetQuote, + renderTypeList: [FlowNodeInputTypeEnum.reference], + required: true, + canEdit: true + } + }, + dependencies + }) + ).document; + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'input.ref', + nodeId: 'concat', + inputKey: 'quote_1', + ref: { nodeId: 'search', outputKey: 'quoteQA' } + }, + dependencies + }) + ).document; + + expect(document.nodes.find((node) => node.nodeId === 'concat')?.inputs).toContainEqual( + expect.objectContaining({ + key: 'quote_1', + value: ['search', 'quoteQA'], + canEdit: true + }) + ); + const storeWorkflow = compileStoreWorkflow(document); + expect(compileStoreWorkflow(decompileStoreWorkflow({ workflow: storeWorkflow }))).toEqual( + storeWorkflow + ); + + const removed = await applyWorkflowCommand({ + document, + command: { type: 'input.remove', nodeId: 'concat', inputKey: 'quote_1' }, + dependencies + }); + expect( + removed.document.nodes + .find((node) => node.nodeId === 'concat') + ?.inputs.some((input) => input.key === 'quote_1') + ).toBe(false); + await expect( + applyWorkflowCommand({ + document, + command: { + type: 'input.remove', + nodeId: 'concat', + inputKey: 'system_datasetQuoteList' + }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + }); + + it('creates and configures custom feedback through the standard input command', async () => { + let document = await addNode({ + document: createWorkflowDocument(), + nodeId: 'start', + template: 'builtin:workflow-start' + }); + document = await addNode({ + document, + nodeId: 'feedback', + template: 'builtin:custom-feedback', + after: 'start' + }); + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'input.set', + nodeId: 'feedback', + inputKey: 'system_textareaInput', + value: 'Accurate answer' + }, + dependencies + }) + ).document; + expect(document.nodes.find((node) => node.nodeId === 'feedback')).toMatchObject({ + flowNodeType: 'customFeedback', + inputs: [expect.objectContaining({ value: 'Accurate answer' })] + }); + }); + + it('rejects dynamic inputs on nodes without a dynamic input marker', async () => { + let document = await addNode({ + document: createWorkflowDocument(), + nodeId: 'start', + template: 'builtin:workflow-start' + }); + document = await addNode({ + document, + nodeId: 'feedback', + template: 'builtin:custom-feedback', + after: 'start' + }); + await expect( + applyWorkflowCommand({ + document, + command: { + type: 'input.add', + nodeId: 'feedback', + input: { + key: 'extra', + label: 'Extra', + valueType: WorkflowIOValueTypeEnum.string, + renderTypeList: [FlowNodeInputTypeEnum.input], + canEdit: true + } + }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + }); +}); diff --git a/packages/workflow-core/test/command/apply.test.ts b/packages/workflow-core/test/command/apply.test.ts new file mode 100644 index 000000000000..36b5dadae3a0 --- /dev/null +++ b/packages/workflow-core/test/command/apply.test.ts @@ -0,0 +1,143 @@ +import { + WorkflowCommandError, + applyWorkflowCommand, + builtinTemplateProvider, + createWorkflowDocument, + parseNodeTemplateRef +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; + +const createStartedDocument = async () => + ( + await applyWorkflowCommand({ + document: createWorkflowDocument(), + command: { + type: 'node.add', + nodeId: 'start', + template: parseNodeTemplateRef('builtin:workflow-start') + }, + dependencies + }) + ).document; + +describe('applyWorkflowCommand', () => { + it('adds and connects a node without mutating the input document', async () => { + const document = await createStartedDocument(); + const before = structuredClone(document); + const result = await applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId: 'ai', + template: parseNodeTemplateRef('builtin:ai-chat'), + connectFrom: { kind: 'next', nodeId: 'start' }, + inputOverrides: { systemPrompt: 'Be concise' } + }, + dependencies + }); + + expect(document).toEqual(before); + expect(result.document.nodes).toHaveLength(2); + expect(result.document.executionEdges).toEqual([ + { + source: { kind: 'next', nodeId: 'start' }, + target: { kind: 'target', nodeId: 'ai' } + } + ]); + expect(result.changes).toEqual([{ type: 'node.add', nodeId: 'ai' }]); + }); + + it('applies explicit empty, false and zero overrides after template and Start defaults', async () => { + const result = await applyWorkflowCommand({ + document: await createStartedDocument(), + command: { + type: 'node.add', + nodeId: 'ai', + template: parseNodeTemplateRef('builtin:ai-chat'), + inputOverrides: { + userChatInput: '', + isResponseAnswerText: false, + maxToken: 0, + fileUrlList: [] + } + }, + dependencies + }); + const ai = result.document.nodes.find((node) => node.nodeId === 'ai')!; + expect(ai.inputs.find((input) => input.key === 'userChatInput')?.value).toBe(''); + expect(ai.inputs.find((input) => input.key === 'isResponseAnswerText')?.value).toBe(false); + expect(ai.inputs.find((input) => input.key === 'maxToken')?.value).toBe(0); + expect(ai.inputs.find((input) => input.key === 'fileUrlList')?.value).toEqual([]); + }); + + it('sets literal and reference inputs through the same dispatcher', async () => { + const document = ( + await applyWorkflowCommand({ + document: await createStartedDocument(), + command: { + type: 'node.add', + nodeId: 'answer', + template: parseNodeTemplateRef('builtin:assigned-answer'), + connectFrom: { kind: 'next', nodeId: 'start' } + }, + dependencies + }) + ).document; + const literal = await applyWorkflowCommand({ + document, + command: { type: 'input.set', nodeId: 'answer', inputKey: 'text', value: 'done' }, + dependencies + }); + expect(literal.document.nodes[1].inputs[0].value).toBe('done'); + + const reference = await applyWorkflowCommand({ + document: literal.document, + command: { + type: 'input.ref', + nodeId: 'answer', + inputKey: 'text', + ref: { nodeId: 'start', outputKey: 'userChatInput' } + }, + dependencies + }); + expect(reference.document.nodes[1].inputs[0].value).toEqual(['start', 'userChatInput']); + }); + + it('does not expose a partial document when a command fails', async () => { + const document = await createStartedDocument(); + const before = structuredClone(document); + await expect( + applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId: 'ai', + template: parseNodeTemplateRef('builtin:ai-chat'), + inputOverrides: { missing: true } + }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + expect(document).toEqual(before); + }); + + it('rejects an invalid connectFrom before returning the new node', async () => { + const document = await createStartedDocument(); + const before = structuredClone(document); + await expect( + applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId: 'ai', + template: parseNodeTemplateRef('builtin:ai-chat'), + connectFrom: { kind: 'next', nodeId: 'missing' } + }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + expect(document).toEqual(before); + }); +}); diff --git a/packages/workflow-core/test/command/codeIo.test.ts b/packages/workflow-core/test/command/codeIo.test.ts new file mode 100644 index 000000000000..134d6b4262bc --- /dev/null +++ b/packages/workflow-core/test/command/codeIo.test.ts @@ -0,0 +1,168 @@ +import { + FlowNodeOutputTypeEnum, + applyWorkflowCommand, + builtinTemplateProvider, + createWorkflowDocument, + parseNodeTemplateRef +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; + +describe('code node IO synchronization', () => { + it('uses main parameters and return keys as the editable IO source of truth', async () => { + let document = createWorkflowDocument(); + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId: 'code', + template: parseNodeTemplateRef('builtin:code') + }, + dependencies + }) + ).document; + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId: 'answer', + template: parseNodeTemplateRef('builtin:assigned-answer'), + connectFrom: { kind: 'next', nodeId: 'code' } + }, + dependencies + }) + ).document; + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'input.ref', + nodeId: 'answer', + inputKey: 'text', + ref: { nodeId: 'code', outputKey: 'result' } + }, + dependencies + }) + ).document; + + const result = await applyWorkflowCommand({ + document, + command: { + type: 'input.set', + nodeId: 'code', + inputKey: 'code', + value: ` + /** + * @param {number} amount - Amount + * @property {number} total - Total + * @property {object} detail - Detail + */ + function main({ amount }) { + return { total: amount * 2, detail: { amount } }; + } + ` + }, + dependencies + }); + + const codeNode = result.document.nodes.find((node) => node.nodeId === 'code')!; + expect(codeNode.inputs.map((input) => input.key)).not.toEqual( + expect.arrayContaining(['data1', 'data2']) + ); + expect(codeNode.inputs).toContainEqual( + expect.objectContaining({ key: 'amount', valueType: 'number', canEdit: true }) + ); + expect( + codeNode.outputs + .filter( + (output) => + output.type === FlowNodeOutputTypeEnum.dynamic && output.key !== 'system_addOutputParam' + ) + .map((output) => ({ key: output.key, valueType: output.valueType })) + ).toEqual([ + { key: 'total', valueType: 'number' }, + { key: 'detail', valueType: 'object' } + ]); + expect(result.warnings).toContainEqual( + expect.objectContaining({ + code: 'WORKFLOW_OUTPUT_REFERENCES_REMAIN', + params: expect.objectContaining({ outputKey: 'result' }) + }) + ); + }); + + it('keeps existing IO when the code shape cannot be identified safely', async () => { + let document = createWorkflowDocument(); + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId: 'code', + template: parseNodeTemplateRef('builtin:code') + }, + dependencies + }) + ).document; + const previousNode = structuredClone(document.nodes.find((node) => node.nodeId === 'code')); + + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'input.set', + nodeId: 'code', + inputKey: 'code', + value: 'function main(args) { return getResult(args); }' + }, + dependencies + }) + ).document; + + const nextNode = document.nodes.find((node) => node.nodeId === 'code')!; + expect(nextNode.inputs.filter((input) => input.canEdit)).toEqual( + previousNode?.inputs.filter((input) => input.canEdit) + ); + expect(nextNode.outputs).toEqual(previousNode?.outputs); + }); + + it('removes all editable IO for an explicitly empty signature and return object', async () => { + let document = createWorkflowDocument(); + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId: 'code', + template: parseNodeTemplateRef('builtin:code') + }, + dependencies + }) + ).document; + + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'input.set', + nodeId: 'code', + inputKey: 'code', + value: 'function main() { return {}; }' + }, + dependencies + }) + ).document; + + const codeNode = document.nodes.find((node) => node.nodeId === 'code')!; + expect(codeNode.inputs.filter((input) => input.canEdit)).toHaveLength(0); + expect( + codeNode.outputs.filter( + (output) => + output.type === FlowNodeOutputTypeEnum.dynamic && output.key !== 'system_addOutputParam' + ) + ).toHaveLength(0); + }); +}); diff --git a/packages/workflow-core/test/command/pr2.test.ts b/packages/workflow-core/test/command/pr2.test.ts new file mode 100644 index 000000000000..21de02f2c79a --- /dev/null +++ b/packages/workflow-core/test/command/pr2.test.ts @@ -0,0 +1,225 @@ +import { + FlowNodeInputTypeEnum, + VARIABLE_NODE_ID, + VariableInputEnum, + WorkflowCommandError, + WorkflowIOValueTypeEnum, + applyWorkflowCommand, + builtinTemplateProvider, + createWorkflowDocument, + getAvailableInputReferences, + parseNodeTemplateRef +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; +const apply = async ( + document: ReturnType, + command: Parameters[0]['command'] +) => (await applyWorkflowCommand({ document, command, dependencies })).document; + +const createLinearDocument = async () => { + let document = createWorkflowDocument(); + document = await apply(document, { + type: 'node.add', + nodeId: 'start', + template: parseNodeTemplateRef('builtin:workflow-start') + }); + document = await apply(document, { + type: 'node.add', + nodeId: 'text', + template: parseNodeTemplateRef('builtin:text-editor'), + connectFrom: { kind: 'next', nodeId: 'start' } + }); + document = await apply(document, { + type: 'input.set', + nodeId: 'text', + inputKey: 'system_textareaInput', + value: 'hello' + }); + document = await apply(document, { + type: 'node.add', + nodeId: 'answer', + template: parseNodeTemplateRef('builtin:assigned-answer'), + connectFrom: { kind: 'next', nodeId: 'text' } + }); + return apply(document, { + type: 'input.ref', + nodeId: 'answer', + inputKey: 'text', + ref: { nodeId: 'text', outputKey: 'system_text' } + }); +}; + +describe('PR2 workflow commands', () => { + it('updates, moves, clones and removes nodes with graph side effects', async () => { + const document = await createLinearDocument(); + document.nodes + .find((node) => node.nodeId === 'text')! + .inputs[0].renderTypeList.push(FlowNodeInputTypeEnum.password); + const cloneResult = await applyWorkflowCommand({ + document, + command: { + type: 'node.clone', + sourceNodeId: 'text', + nodeId: 'text-copy', + position: { x: 400, y: 100 } + }, + dependencies + }); + expect(cloneResult.document.nodes.find((node) => node.nodeId === 'text-copy')).toMatchObject({ + nodeId: 'text-copy', + position: { x: 400, y: 100 } + }); + expect( + cloneResult.document.nodes.find((node) => node.nodeId === 'text-copy')!.inputs[0].value + ).toBeUndefined(); + + const updated = await applyWorkflowCommand({ + document: cloneResult.document, + command: { type: 'node.update', nodeId: 'answer', name: 'Final answer' }, + dependencies + }); + expect(updated.document.nodes.find((node) => node.nodeId === 'answer')?.name).toBe( + 'Final answer' + ); + + const removed = await applyWorkflowCommand({ + document: updated.document, + command: { type: 'node.remove', nodeId: 'text' }, + dependencies + }); + expect(removed.document.executionEdges).toHaveLength(0); + expect( + removed.document.nodes.find((node) => node.nodeId === 'answer')!.inputs[0].value + ).toBeUndefined(); + expect(removed.changes[0].details).toMatchObject({ removedEdgeCount: 2 }); + }); + + it('connects, disconnects and atomically reconnects normal edges', async () => { + let document = await createLinearDocument(); + document = await apply(document, { + type: 'edge.disconnect', + edge: { + source: { kind: 'next', nodeId: 'text' }, + target: { kind: 'target', nodeId: 'answer' } + } + }); + document = await apply(document, { + type: 'edge.connect', + edge: { + source: { kind: 'next', nodeId: 'start' }, + target: { kind: 'target', nodeId: 'answer' } + } + }); + document = await apply(document, { + type: 'edge.reconnect', + oldEdge: { + source: { kind: 'next', nodeId: 'start' }, + target: { kind: 'target', nodeId: 'answer' } + }, + newEdge: { + source: { kind: 'next', nodeId: 'text' }, + target: { kind: 'target', nodeId: 'answer' } + } + }); + expect(document.executionEdges).toHaveLength(2); + await expect( + applyWorkflowCommand({ + document, + command: { type: 'edge.connect', edge: document.executionEdges[0] }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + }); + + it('manages ChatConfig and global variables and blocks referenced removal', async () => { + let document = await createLinearDocument(); + document = await apply(document, { + type: 'config.set', + path: 'questionGuide.open', + value: true + }); + document = await apply(document, { + type: 'variable.add', + variable: { + key: 'tenantId', + label: 'Tenant ID', + description: 'Current tenant', + type: VariableInputEnum.input, + valueType: WorkflowIOValueTypeEnum.string, + required: true + } + }); + document = await apply(document, { + type: 'input.ref', + nodeId: 'answer', + inputKey: 'text', + ref: { nodeId: VARIABLE_NODE_ID, outputKey: 'tenantId' } + }); + expect(document.chatConfig.questionGuide?.open).toBe(true); + expect( + getAvailableInputReferences({ document, nodeId: 'answer', inputKey: 'text' }) + ).toContainEqual( + expect.objectContaining({ + ref: { nodeId: VARIABLE_NODE_ID, outputKey: 'tenantId' }, + source: 'variable' + }) + ); + document = await apply(document, { + type: 'variable.update', + key: 'tenantId', + patch: { key: 'currentTenantId' } + }); + expect(document.nodes.find((node) => node.nodeId === 'answer')!.inputs[0].value).toEqual([ + VARIABLE_NODE_ID, + 'currentTenantId' + ]); + await expect( + applyWorkflowCommand({ + document, + command: { type: 'variable.remove', key: 'currentTenantId' }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + }); + + it('validates common complex parameters and protects system-maintained inputs', async () => { + let document = await createLinearDocument(); + document = await apply(document, { + type: 'node.add', + nodeId: 'http', + template: parseNodeTemplateRef('builtin:http-request') + }); + await expect( + applyWorkflowCommand({ + document, + command: { + type: 'input.set', + nodeId: 'http', + inputKey: 'system_httpHeader', + value: { key: 'x-token', value: 'secret' } + }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + document = await apply(document, { + type: 'input.set', + nodeId: 'http', + inputKey: 'system_httpHeader', + value: [{ key: 'x-token', value: 'secret' }] + }); + await expect( + applyWorkflowCommand({ + document, + command: { + type: 'input.set', + nodeId: 'http', + inputKey: 'addInputParam', + value: [] + }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + }); +}); diff --git a/packages/workflow-core/test/command/pr3.test.ts b/packages/workflow-core/test/command/pr3.test.ts new file mode 100644 index 000000000000..cf81fa7dbfe9 --- /dev/null +++ b/packages/workflow-core/test/command/pr3.test.ts @@ -0,0 +1,272 @@ +import { FlowNodeOutputTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import { + WorkflowCommandError, + applyWorkflowCommand, + builtinTemplateProvider, + compileStoreWorkflow, + decompileStoreWorkflow, + parseNodeTemplateRef, + validateWorkflow +} from '../../src'; +import { describe, expect, it } from 'vitest'; +import { + createBranchingFixture, + createDynamicIoCatchFixture, + createNestedLoopFixture, + createToolCallToolsFixture, + pr3FixtureFactories +} from '../fixtures/pr3'; + +const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; + +describe('PR3 workflow commands', () => { + it('builds four complex golden fixtures and preserves StoreWorkflow semantics', async () => { + for (const [name, factory] of Object.entries(pr3FixtureFactories)) { + const document = await factory(); + expect(validateWorkflow(document), name).toEqual([]); + const storeWorkflow = compileStoreWorkflow(document); + expect( + compileStoreWorkflow(decompileStoreWorkflow({ workflow: storeWorkflow })), + name + ).toEqual(storeWorkflow); + } + }); + + it('connects stable branch ports and rejects unknown branch keys', async () => { + const document = await createBranchingFixture(); + await expect( + applyWorkflowCommand({ + document, + command: { + type: 'edge.connect', + edge: { + source: { kind: 'branch', nodeId: 'route', branchKey: 'missing' }, + target: { kind: 'target', nodeId: 'yes' } + } + }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + }); + + it('inserts a node atomically between an existing complex edge', async () => { + const document = await createBranchingFixture(); + const result = await applyWorkflowCommand({ + document, + command: { + type: 'node.insert', + nodeId: 'middle', + template: parseNodeTemplateRef('builtin:text-editor'), + from: { kind: 'branch', nodeId: 'route', branchKey: 'positive' }, + to: { kind: 'target', nodeId: 'yes' } + }, + dependencies + }); + expect(result.document.executionEdges).toContainEqual({ + source: { kind: 'branch', nodeId: 'route', branchKey: 'positive' }, + target: { kind: 'target', nodeId: 'middle' } + }); + expect(result.document.executionEdges).toContainEqual({ + source: { kind: 'next', nodeId: 'middle' }, + target: { kind: 'target', nodeId: 'yes' } + }); + expect(document.nodes.some((node) => node.nodeId === 'middle')).toBe(false); + + const branchInsert = await applyWorkflowCommand({ + document, + command: { + type: 'node.insert', + nodeId: 'outer-route', + template: parseNodeTemplateRef('builtin:if-else'), + from: { kind: 'next', nodeId: 'start' }, + to: { kind: 'target', nodeId: 'route' } + }, + dependencies + }); + expect(branchInsert.document.executionEdges).toContainEqual({ + source: { kind: 'branch', nodeId: 'outer-route', branchKey: 'ELSE' }, + target: { kind: 'target', nodeId: 'route' } + }); + }); + + it('attaches and detaches tool nodes through selectedTools ports', async () => { + const document = await createToolCallToolsFixture(); + expect(document.executionEdges).toContainEqual({ + source: { kind: 'selectedTools', nodeId: 'caller' }, + target: { kind: 'selectedTools', nodeId: 'confirm' } + }); + const detached = await applyWorkflowCommand({ + document, + command: { type: 'tool.detach', toolCallNodeId: 'caller', toolNodeId: 'confirm' }, + dependencies + }); + expect(detached.document.executionEdges).toHaveLength(1); + }); + + it('creates system children, moves nodes between scopes and cascades container removal', async () => { + let document = await createNestedLoopFixture(); + expect(document.nodes.find((node) => node.nodeId === 'loop__start')).toMatchObject({ + parentNodeId: 'loop', + flowNodeType: 'loopRunStart' + }); + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId: 'inside', + template: parseNodeTemplateRef('builtin:text-editor'), + parentNodeId: 'loop' + }, + dependencies + }) + ).document; + const moved = await applyWorkflowCommand({ + document, + command: { type: 'node.move', nodeId: 'inside', parentNodeId: null }, + dependencies + }); + expect( + moved.document.nodes.find((node) => node.nodeId === 'inside')?.parentNodeId + ).toBeUndefined(); + const removed = await applyWorkflowCommand({ + document: moved.document, + command: { type: 'node.remove', nodeId: 'loop' }, + dependencies + }); + expect(removed.document.nodes.map((node) => node.nodeId)).not.toContain('loop__start'); + }); + + it('removes source-output edges and reports remaining data references', async () => { + let document = await createDynamicIoCatchFixture(); + const score = document.nodes + .find((node) => node.nodeId === 'code')! + .outputs.find((output) => output.key === 'score')!; + score.type = FlowNodeOutputTypeEnum.source; + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'edge.connect', + edge: { + source: { kind: 'sourceOutput', nodeId: 'code', outputKey: 'score' }, + target: { kind: 'target', nodeId: 'recover' } + } + }, + dependencies + }) + ).document; + document.nodes.find((node) => node.nodeId === 'recover')!.inputs[0].value = ['code', 'score']; + const result = await applyWorkflowCommand({ + document, + command: { type: 'output.remove', nodeId: 'code', outputKey: 'score' }, + dependencies + }); + expect(result.document.executionEdges.some((edge) => edge.source.kind === 'sourceOutput')).toBe( + false + ); + expect(result.warnings).toContainEqual( + expect.objectContaining({ code: 'WORKFLOW_OUTPUT_REFERENCES_REMAIN' }) + ); + }); + + it('cleans branch and catch edges when their source configuration is disabled', async () => { + let branching = await createBranchingFixture(); + const branchResult = await applyWorkflowCommand({ + document: branching, + command: { + type: 'input.set', + nodeId: 'route', + inputKey: 'ifElseList', + value: [ + { + branchId: 'replacement', + condition: 'AND', + list: [ + { + variable: ['start', 'userChatInput'], + condition: 'isNotEmpty', + valueType: 'input' + } + ] + } + ] + }, + dependencies + }); + branching = branchResult.document; + expect( + branching.executionEdges.some( + (edge) => edge.source.kind === 'branch' && edge.source.branchKey === 'positive' + ) + ).toBe(false); + expect(branchResult.warnings).toContainEqual( + expect.objectContaining({ code: 'WORKFLOW_BRANCH_EDGES_REMOVED' }) + ); + + const caught = await createDynamicIoCatchFixture(); + const catchResult = await applyWorkflowCommand({ + document: caught, + command: { type: 'node.update', nodeId: 'code', catchError: false }, + dependencies + }); + expect(catchResult.document.executionEdges.some((edge) => edge.source.kind === 'catch')).toBe( + false + ); + }); + + it('synchronizes form fields to outputs and protects required system children', async () => { + let document = await createToolCallToolsFixture(); + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'node.add', + nodeId: 'form', + template: parseNodeTemplateRef('builtin:form-input') + }, + dependencies + }) + ).document; + document = ( + await applyWorkflowCommand({ + document, + command: { + type: 'input.set', + nodeId: 'form', + inputKey: 'userInputForms', + value: [ + { + type: 'input', + key: 'email', + label: 'Email', + value: '', + valueType: 'string', + required: true + } + ] + }, + dependencies + }) + ).document; + expect(document.nodes.find((node) => node.nodeId === 'form')?.outputs).toContainEqual( + expect.objectContaining({ key: 'email', valueType: 'string' }) + ); + + const nested = await createNestedLoopFixture(); + await expect( + applyWorkflowCommand({ + document: nested, + command: { type: 'node.remove', nodeId: 'loop__start' }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + await expect( + applyWorkflowCommand({ + document: nested, + command: { type: 'node.remove', nodeId: 'break' }, + dependencies + }) + ).rejects.toThrow(WorkflowCommandError); + }); +}); diff --git a/packages/workflow-core/test/command/systemConfig.test.ts b/packages/workflow-core/test/command/systemConfig.test.ts new file mode 100644 index 000000000000..bdaa731cd9dd --- /dev/null +++ b/packages/workflow-core/test/command/systemConfig.test.ts @@ -0,0 +1,104 @@ +import { + FlowNodeTypeEnum, + VariableInputEnum, + WorkflowCommandError, + WorkflowIOValueTypeEnum, + applyWorkflowCommand, + builtinTemplateProvider, + createDefaultWorkflowDocument, + createWorkflowDocument, + ensureSystemConfigNode, + validateWorkflow +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; + +describe('system config node', () => { + it('creates system config and workflow start as the default workflow structure', async () => { + const result = await createDefaultWorkflowDocument({ + app: { name: 'Default workflow' }, + dependencies + }); + + expect(result.nodeIds).toEqual(['userGuide', 'start']); + expect(result.document.nodes).toEqual([ + expect.objectContaining({ + nodeId: 'userGuide', + flowNodeType: FlowNodeTypeEnum.systemConfig + }), + expect.objectContaining({ + nodeId: 'start', + flowNodeType: FlowNodeTypeEnum.workflowStart + }) + ]); + }); + + it('keeps variables in chatConfig while the system config node provides the editor entry', async () => { + const { document } = await createDefaultWorkflowDocument({ dependencies }); + const result = await applyWorkflowCommand({ + document, + command: { + type: 'variable.add', + variable: { + key: 'tenantId', + label: 'Tenant ID', + description: '', + type: VariableInputEnum.input, + valueType: WorkflowIOValueTypeEnum.string, + required: true + } + }, + dependencies + }); + + expect(result.document.chatConfig.variables).toEqual([ + expect.objectContaining({ key: 'tenantId' }) + ]); + expect( + result.document.nodes.find((node) => node.flowNodeType === FlowNodeTypeEnum.systemConfig) + ?.inputs + ).toEqual([]); + }); + + it('adds a missing system config node once without overwriting chatConfig', async () => { + const document = createWorkflowDocument({ chatConfig: { welcomeText: 'Keep me' } }); + + const first = await ensureSystemConfigNode({ document, dependencies }); + const second = await ensureSystemConfigNode({ document, dependencies }); + + expect(first.nodeIds).toEqual(['userGuide']); + expect(second.nodeIds).toEqual([]); + expect(document.chatConfig.welcomeText).toBe('Keep me'); + expect( + document.nodes.filter((node) => node.flowNodeType === FlowNodeTypeEnum.systemConfig) + ).toHaveLength(1); + }); + + it.each(['node.remove', 'node.clone'] as const)('rejects %s for system config', async (type) => { + const { document } = await createDefaultWorkflowDocument({ dependencies }); + const command = + type === 'node.remove' + ? ({ type, nodeId: 'userGuide' } as const) + : ({ type, sourceNodeId: 'userGuide', nodeId: 'userGuide-copy' } as const); + + await expect(applyWorkflowCommand({ document, command, dependencies })).rejects.toThrow( + WorkflowCommandError + ); + }); + + it('reports duplicate system config nodes as a validation error', async () => { + const { document } = await createDefaultWorkflowDocument({ dependencies }); + const systemConfigNode = document.nodes.find( + (node) => node.flowNodeType === FlowNodeTypeEnum.systemConfig + )!; + document.nodes.push({ ...structuredClone(systemConfigNode), nodeId: 'userGuide-copy' }); + + expect(validateWorkflow(document)).toContainEqual( + expect.objectContaining({ + code: 'WORKFLOW_SYSTEM_CONFIG_NODE_DUPLICATED', + severity: 'error' + }) + ); + }); +}); diff --git a/packages/workflow-core/test/config/service.test.ts b/packages/workflow-core/test/config/service.test.ts new file mode 100644 index 000000000000..c9a8b2e1ba88 --- /dev/null +++ b/packages/workflow-core/test/config/service.test.ts @@ -0,0 +1,125 @@ +import { NodeOutputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import { + applyWorkflowCommand, + builtinTemplateProvider, + createWorkflowDocument, + parseNodeTemplateRef +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; +const apply = async ( + document: ReturnType, + command: Parameters[0]['command'] +) => applyWorkflowCommand({ document, command, dependencies }); + +const createDocument = async () => + ( + await apply(createWorkflowDocument(), { + type: 'node.add', + nodeId: 'start', + template: parseNodeTemplateRef('builtin:workflow-start') + }) + ).document; + +describe('fileSelectConfig output synchronization', () => { + it.each([ + 'canSelectFile', + 'canSelectImg', + 'canSelectVideo', + 'canSelectAudio', + 'canSelectCustomFileExtension' + ] as const)('adds one userFiles output when %s is enabled', async (key) => { + let document = await createDocument(); + document = ( + await apply(document, { + type: 'config.set', + path: 'fileSelectConfig', + value: { [key]: true } + }) + ).document; + document = ( + await apply(document, { + type: 'config.set', + path: 'fileSelectConfig', + value: { [key]: true, maxFiles: 1 } + }) + ).document; + + expect( + document.nodes + .find((node) => node.nodeId === 'start') + ?.outputs.filter((output) => output.key === NodeOutputKeyEnum.userFiles) + ).toHaveLength(1); + }); + + it('removes an unreferenced userFiles output when file upload is disabled or unset', async () => { + let document = await createDocument(); + document = ( + await apply(document, { + type: 'config.set', + path: 'fileSelectConfig', + value: { canSelectFile: true } + }) + ).document; + document = ( + await apply(document, { + type: 'config.set', + path: 'fileSelectConfig', + value: { canSelectFile: false } + }) + ).document; + expect( + document.nodes[0].outputs.some((output) => output.key === NodeOutputKeyEnum.userFiles) + ).toBe(false); + + document = ( + await apply(document, { + type: 'config.set', + path: 'fileSelectConfig', + value: { canSelectFile: true } + }) + ).document; + document = (await apply(document, { type: 'config.unset', path: 'fileSelectConfig' })).document; + expect(document.chatConfig.fileSelectConfig).toBeUndefined(); + expect( + document.nodes[0].outputs.some((output) => output.key === NodeOutputKeyEnum.userFiles) + ).toBe(false); + }); + + it('atomically blocks disabling file upload while userFiles is referenced', async () => { + let document = await createDocument(); + document = ( + await apply(document, { + type: 'config.set', + path: 'fileSelectConfig', + value: { canSelectFile: true } + }) + ).document; + document = ( + await apply(document, { + type: 'node.add', + nodeId: 'read', + template: parseNodeTemplateRef('builtin:read-files'), + connectFrom: { kind: 'next', nodeId: 'start' } + }) + ).document; + + const before = structuredClone(document); + await expect( + apply(document, { + type: 'config.set', + path: 'fileSelectConfig', + value: { canSelectFile: false } + }) + ).rejects.toMatchObject({ + diagnostics: [ + expect.objectContaining({ + code: 'WORKFLOW_FILE_OUTPUT_STILL_REFERENCED', + nodeId: 'start' + }) + ] + }); + expect(document).toEqual(before); + }); +}); diff --git a/packages/workflow-core/test/edge/compiler.test.ts b/packages/workflow-core/test/edge/compiler.test.ts new file mode 100644 index 000000000000..08632679f733 --- /dev/null +++ b/packages/workflow-core/test/edge/compiler.test.ts @@ -0,0 +1,166 @@ +import { + WorkflowDocumentSchema, + WorkflowCommandError, + compileExecutionEdge, + createWorkflowDocument, + decompileStoreEdge +} from '../../src'; +import aiWorkflow from '../fixtures/basic-ai/workflow.json'; +import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import { describe, expect, it } from 'vitest'; + +const document = createWorkflowDocument(aiWorkflow as Parameters[0]); + +describe('compileExecutionEdge', () => { + it('compiles and decompiles a normal edge', () => { + const edge = document.executionEdges[0]; + const stored = compileExecutionEdge(edge, document); + expect(stored).toEqual({ + source: 'start', + sourceHandle: 'start-source-right', + target: 'ai', + targetHandle: 'ai-target-left' + }); + expect(decompileStoreEdge(stored, document)).toEqual(edge); + }); + + it('rejects missing nodes and unsupported handles', () => { + expect(() => + compileExecutionEdge( + { source: { kind: 'next', nodeId: 'missing' }, target: { kind: 'target', nodeId: 'ai' } }, + document + ) + ).toThrow(WorkflowCommandError); + expect(() => + decompileStoreEdge( + { source: 'start', sourceHandle: 'legacy', target: 'ai', targetHandle: 'ai-target-left' }, + document + ) + ).toThrow(WorkflowCommandError); + expect(() => + decompileStoreEdge( + { + source: 'start', + sourceHandle: 'start-source-right', + target: 'ai', + targetHandle: 'legacy' + }, + document + ) + ).toThrow(WorkflowCommandError); + expect(() => + decompileStoreEdge( + { + source: 'start', + sourceHandle: 'start-source-unknown', + target: 'ai', + targetHandle: 'ai-target-left' + }, + document + ) + ).toThrow(WorkflowCommandError); + }); + + it('maps catch, branch, source output and tool handles', () => { + const expanded = WorkflowDocumentSchema.parse({ + ...document, + nodes: document.nodes.map((node) => + node.nodeId === 'start' + ? { + ...node, + outputs: [ + ...node.outputs, + { id: 'execute', key: 'execute', type: 'source', valueType: 'string' } + ] + } + : node + ) + }); + const branchDocument = WorkflowDocumentSchema.parse({ + ...expanded, + nodes: expanded.nodes.map((node) => + node.nodeId === 'start' ? { ...node, flowNodeType: FlowNodeTypeEnum.ifElseNode } : node + ) + }); + const cases = [ + { + semantic: { + source: { kind: 'catch' as const, nodeId: 'start' }, + target: { kind: 'target' as const, nodeId: 'ai' } + }, + sourceHandle: 'start-source_catch-right', + targetHandle: 'ai-target-left' + }, + { + semantic: { + source: { kind: 'branch' as const, nodeId: 'start', branchKey: 'yes' }, + target: { kind: 'target' as const, nodeId: 'ai' } + }, + sourceHandle: 'start-source-yes', + targetHandle: 'ai-target-left', + document: branchDocument + }, + { + semantic: { + source: { kind: 'sourceOutput' as const, nodeId: 'start', outputKey: 'execute' }, + target: { kind: 'target' as const, nodeId: 'ai' } + }, + sourceHandle: 'start-source-execute', + targetHandle: 'ai-target-left' + }, + { + semantic: { + source: { kind: 'selectedTools' as const, nodeId: 'start' }, + target: { kind: 'selectedTools' as const, nodeId: 'ai' } + }, + sourceHandle: 'selectedTools', + targetHandle: 'selectedTools' + } + ]; + + for (const item of cases) { + const caseDocument = item.document ?? expanded; + const stored = compileExecutionEdge(item.semantic, caseDocument); + expect(stored).toMatchObject({ + sourceHandle: item.sourceHandle, + targetHandle: item.targetHandle + }); + expect(decompileStoreEdge(stored, caseDocument)).toEqual(item.semantic); + } + }); + + it('rejects branch ports on non-branch nodes and mismatched tool handles', () => { + expect(() => + compileExecutionEdge( + { + source: { kind: 'branch', nodeId: 'start', branchKey: 'yes' }, + target: { kind: 'target', nodeId: 'ai' } + }, + document + ) + ).toThrow(WorkflowCommandError); + expect(() => + decompileStoreEdge( + { + source: 'start', + sourceHandle: 'selectedTools', + target: 'ai', + targetHandle: 'ai-target-left' + }, + document + ) + ).toThrow(WorkflowCommandError); + }); + + it('rejects a semantic source output that is not executable', () => { + expect(() => + compileExecutionEdge( + { + source: { kind: 'sourceOutput', nodeId: 'start', outputKey: 'userChatInput' }, + target: { kind: 'target', nodeId: 'ai' } + }, + document + ) + ).toThrow(WorkflowCommandError); + }); +}); diff --git a/packages/workflow-core/test/edge/parser.test.ts b/packages/workflow-core/test/edge/parser.test.ts new file mode 100644 index 000000000000..9f81853b8fc8 --- /dev/null +++ b/packages/workflow-core/test/edge/parser.test.ts @@ -0,0 +1,53 @@ +import { + WorkflowCommandError, + parseExecutionSourcePortRef, + parseExecutionTargetPortRef, + parseVariableRef +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +describe('parseExecutionSourcePortRef', () => { + it.each([ + ['start@next', { kind: 'next', nodeId: 'start' }], + ['route@branch:yes', { kind: 'branch', nodeId: 'route', branchKey: 'yes' }], + ['source@output:done', { kind: 'sourceOutput', nodeId: 'source', outputKey: 'done' }], + ['node@catch', { kind: 'catch', nodeId: 'node' }], + ['caller@tools', { kind: 'selectedTools', nodeId: 'caller' }] + ])('parses %s', (value, expected) => { + expect(parseExecutionSourcePortRef(value)).toEqual(expected); + }); + + it.each(['start', '@next', 'start@unknown', 'start@branch:', 'start@output:'])( + 'rejects %s', + (value) => { + expect(() => parseExecutionSourcePortRef(value)).toThrow(WorkflowCommandError); + } + ); +}); + +describe('parseExecutionTargetPortRef', () => { + it('parses normal and tool targets', () => { + expect(parseExecutionTargetPortRef('ai@target')).toEqual({ kind: 'target', nodeId: 'ai' }); + expect(parseExecutionTargetPortRef('tool@tools')).toEqual({ + kind: 'selectedTools', + nodeId: 'tool' + }); + }); + + it.each(['ai', '@target', 'ai@next'])('rejects %s', (value) => { + expect(() => parseExecutionTargetPortRef(value)).toThrow(WorkflowCommandError); + }); +}); + +describe('parseVariableRef', () => { + it('uses the last dot as separator', () => { + expect(parseVariableRef('group.node.output')).toEqual({ + nodeId: 'group.node', + outputKey: 'output' + }); + }); + + it.each(['node', '.output', 'node.'])('rejects %s', (value) => { + expect(() => parseVariableRef(value)).toThrow(WorkflowCommandError); + }); +}); diff --git a/packages/workflow-core/test/fixtures/basic-ai/expected-diagnostics.json b/packages/workflow-core/test/fixtures/basic-ai/expected-diagnostics.json new file mode 100644 index 000000000000..fe51488c7066 --- /dev/null +++ b/packages/workflow-core/test/fixtures/basic-ai/expected-diagnostics.json @@ -0,0 +1 @@ +[] diff --git a/packages/workflow-core/test/fixtures/basic-ai/store-workflow.json b/packages/workflow-core/test/fixtures/basic-ai/store-workflow.json new file mode 100644 index 000000000000..121a3a5748f3 --- /dev/null +++ b/packages/workflow-core/test/fixtures/basic-ai/store-workflow.json @@ -0,0 +1,248 @@ +{ + "nodes": [ + { + "flowNodeType": "chatNode", + "avatar": "core/workflow/template/aiChat", + "avatarLinear": "core/workflow/template/aiChatLinear", + "colorSchema": "blueDark", + "name": "AI Chat", + "intro": "AI Large Model Chat", + "showStatus": true, + "version": "4.9.7", + "catchError": false, + "inputs": [ + { + "key": "model", + "label": "AI Model", + "valueType": "string", + "renderTypeList": ["settingLLMModel", "reference"] + }, + { + "key": "temperature", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + }, + { + "key": "maxToken", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + }, + { + "key": "isResponseAnswerText", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatQuoteRole", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"], + "value": "system" + }, + { + "key": "quoteTemplate", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "quotePrompt", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatVision", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatAudio", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": false + }, + { + "key": "aiChatVideo", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": false + }, + { + "key": "aiChatExtractFiles", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatReasoning", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatReasoningEffort", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatTopP", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatStopSign", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatResponseFormat", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatJsonSchema", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "systemPrompt", + "label": "Prompt", + "valueType": "string", + "isRichText": true, + "placeholder": "Enter a prompt here", + "maxLength": 100000, + "selectedTypeIndex": 0, + "renderTypeList": ["textarea", "reference"], + "value": "You are a helpful assistant", + "description": "Fixed guide words for the model. By adjusting this content, you can guide the model's chat direction. This content will be fixed at the beginning of the context. You can use / to insert variables.\nIf a Dataset is associated, you can also guide the model when to call the Dataset search by appropriate description. For example:\nYou are an assistant for the movie 'Interstellar'. When users ask about content related to 'Interstellar', please search the Dataset and answer based on the search results." + }, + { + "key": "history", + "label": "Chat History", + "valueType": "chatHistory", + "required": true, + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "value": 6, + "description": "Maximum Number of Dialog Rounds" + }, + { + "key": "quoteQA", + "label": "", + "valueType": "datasetQuote", + "renderTypeList": ["settingDatasetQuotePrompt"], + "debugLabel": "Dataset Reference" + }, + { + "key": "fileUrlList", + "label": "File Link", + "valueType": "arrayString", + "renderTypeList": ["reference", "input"], + "debugLabel": "File Link", + "description": "Links to documents and images uploaded by users." + }, + { + "key": "userChatInput", + "label": "User Question", + "valueType": "string", + "required": true, + "selectedTypeIndex": 0, + "renderTypeList": ["reference", "textarea"], + "value": ["start", "userChatInput"], + "toolDescription": "User Question" + } + ], + "outputs": [ + { + "id": "history", + "key": "history", + "type": "static", + "valueType": "chatHistory", + "valueDesc": "{\n obj: System | Human | AI;\n value: string;\n}[]", + "label": "New Context", + "description": "Splice the current reply content with the history records and return it as the new context", + "required": true + }, + { + "id": "answerText", + "key": "answerText", + "type": "static", + "valueType": "string", + "label": "AI Response Content", + "description": "Will be triggered after the stream reply is completed", + "required": true + }, + { + "id": "reasoningText", + "key": "reasoningText", + "type": "static", + "valueType": "string", + "label": "Thinking text", + "required": false, + "invalid": true + }, + { + "id": "system_error_text", + "key": "system_error_text", + "type": "error", + "valueType": "string", + "label": "Error text" + } + ], + "nodeId": "ai" + }, + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "Start", + "inputs": [ + { + "key": "userChatInput", + "label": "User Question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "User Question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "User Question" + } + ], + "nodeId": "start" + } + ], + "edges": [ + { + "source": "start", + "sourceHandle": "start-source-right", + "target": "ai", + "targetHandle": "ai-target-left" + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/basic-ai/workflow.json b/packages/workflow-core/test/fixtures/basic-ai/workflow.json new file mode 100644 index 000000000000..69c418dade80 --- /dev/null +++ b/packages/workflow-core/test/fixtures/basic-ai/workflow.json @@ -0,0 +1,254 @@ +{ + "schemaVersion": "fastgpt-workflow/v1", + "app": {}, + "nodes": [ + { + "avatar": "core/workflow/template/aiChat", + "avatarLinear": "core/workflow/template/aiChatLinear", + "catchError": false, + "colorSchema": "blueDark", + "flowNodeType": "chatNode", + "inputs": [ + { + "key": "model", + "label": "AI Model", + "renderTypeList": ["settingLLMModel", "reference"], + "valueType": "string" + }, + { + "key": "temperature", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "number" + }, + { + "key": "maxToken", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "number" + }, + { + "key": "isResponseAnswerText", + "label": "", + "renderTypeList": ["hidden"], + "value": true, + "valueType": "boolean" + }, + { + "key": "aiChatQuoteRole", + "label": "", + "renderTypeList": ["hidden"], + "value": "system", + "valueType": "string" + }, + { + "key": "quoteTemplate", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "string" + }, + { + "key": "quotePrompt", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "string" + }, + { + "key": "aiChatVision", + "label": "", + "renderTypeList": ["hidden"], + "value": true, + "valueType": "boolean" + }, + { + "key": "aiChatAudio", + "label": "", + "renderTypeList": ["hidden"], + "value": false, + "valueType": "boolean" + }, + { + "key": "aiChatVideo", + "label": "", + "renderTypeList": ["hidden"], + "value": false, + "valueType": "boolean" + }, + { + "key": "aiChatExtractFiles", + "label": "", + "renderTypeList": ["hidden"], + "value": true, + "valueType": "boolean" + }, + { + "key": "aiChatReasoning", + "label": "", + "renderTypeList": ["hidden"], + "value": true, + "valueType": "boolean" + }, + { + "key": "aiChatReasoningEffort", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "string" + }, + { + "key": "aiChatTopP", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "number" + }, + { + "key": "aiChatStopSign", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "string" + }, + { + "key": "aiChatResponseFormat", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "string" + }, + { + "key": "aiChatJsonSchema", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "string" + }, + { + "description": "Fixed guide words for the model. By adjusting this content, you can guide the model's chat direction. This content will be fixed at the beginning of the context. You can use / to insert variables.\nIf a Dataset is associated, you can also guide the model when to call the Dataset search by appropriate description. For example:\nYou are an assistant for the movie 'Interstellar'. When users ask about content related to 'Interstellar', please search the Dataset and answer based on the search results.", + "isRichText": true, + "key": "systemPrompt", + "label": "Prompt", + "maxLength": 100000, + "placeholder": "Enter a prompt here", + "renderTypeList": ["textarea", "reference"], + "selectedTypeIndex": 0, + "value": "You are a helpful assistant", + "valueType": "string" + }, + { + "description": "Maximum Number of Dialog Rounds", + "key": "history", + "label": "Chat History", + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "required": true, + "value": 6, + "valueType": "chatHistory" + }, + { + "debugLabel": "Dataset Reference", + "key": "quoteQA", + "label": "", + "renderTypeList": ["settingDatasetQuotePrompt"], + "valueType": "datasetQuote" + }, + { + "debugLabel": "File Link", + "description": "Links to documents and images uploaded by users.", + "key": "fileUrlList", + "label": "File Link", + "renderTypeList": ["reference", "input"], + "valueType": "arrayString" + }, + { + "key": "userChatInput", + "label": "User Question", + "renderTypeList": ["reference", "textarea"], + "required": true, + "selectedTypeIndex": 0, + "toolDescription": "User Question", + "value": ["start", "userChatInput"], + "valueType": "string" + } + ], + "intro": "AI Large Model Chat", + "name": "AI Chat", + "nodeId": "ai", + "outputs": [ + { + "description": "Splice the current reply content with the history records and return it as the new context", + "id": "history", + "key": "history", + "label": "New Context", + "required": true, + "type": "static", + "valueDesc": "{\n obj: System | Human | AI;\n value: string;\n}[]", + "valueType": "chatHistory" + }, + { + "description": "Will be triggered after the stream reply is completed", + "id": "answerText", + "key": "answerText", + "label": "AI Response Content", + "required": true, + "type": "static", + "valueType": "string" + }, + { + "id": "reasoningText", + "invalid": true, + "key": "reasoningText", + "label": "Thinking text", + "required": false, + "type": "static", + "valueType": "string" + }, + { + "id": "system_error_text", + "key": "system_error_text", + "label": "Error text", + "type": "error", + "valueType": "string" + } + ], + "showStatus": true, + "version": "4.9.7" + }, + { + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "flowNodeType": "workflowStart", + "inputs": [ + { + "key": "userChatInput", + "label": "User Question", + "renderTypeList": ["reference", "textarea"], + "required": true, + "toolDescription": "User Question", + "valueType": "string" + } + ], + "name": "Start", + "nodeId": "start", + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "label": "User Question", + "type": "static", + "valueType": "string" + } + ] + } + ], + "executionEdges": [ + { + "source": { + "kind": "next", + "nodeId": "start" + }, + "target": { + "kind": "target", + "nodeId": "ai" + } + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/basic-static/expected-diagnostics.json b/packages/workflow-core/test/fixtures/basic-static/expected-diagnostics.json new file mode 100644 index 000000000000..fe51488c7066 --- /dev/null +++ b/packages/workflow-core/test/fixtures/basic-static/expected-diagnostics.json @@ -0,0 +1 @@ +[] diff --git a/packages/workflow-core/test/fixtures/basic-static/store-workflow.json b/packages/workflow-core/test/fixtures/basic-static/store-workflow.json new file mode 100644 index 000000000000..b34b7ac1f577 --- /dev/null +++ b/packages/workflow-core/test/fixtures/basic-static/store-workflow.json @@ -0,0 +1,101 @@ +{ + "nodes": [ + { + "flowNodeType": "answerNode", + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "name": "Assigned Reply", + "intro": "This module can directly reply with a specified content. Commonly used for guidance or prompts. Non-string content will be converted to string for output.", + "inputs": [ + { + "key": "text", + "label": "Response Content", + "valueType": "any", + "required": true, + "isRichText": false, + "placeholder": "You can use \\n to achieve continuous line breaks.\nYou can achieve replies through external module input, and the content filled in here will be overwritten by external module input.\nIf non-string type data is passed in, it will be automatically converted to a string", + "maxLength": 100000, + "selectedTypeIndex": 1, + "renderTypeList": ["textarea", "reference"], + "value": ["text", "system_text"], + "description": "You can use \\n to achieve continuous line breaks.\nYou can achieve replies through external module input, and the content filled in here will be overwritten by external module input.\nIf non-string type data is passed in, it will be automatically converted to a string" + } + ], + "outputs": [], + "nodeId": "answer" + }, + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "Start", + "inputs": [ + { + "key": "userChatInput", + "label": "User Question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "User Question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "User Question" + } + ], + "nodeId": "start" + }, + { + "flowNodeType": "textEditor", + "avatar": "core/workflow/template/textConcat", + "avatarLinear": "core/workflow/template/textConcatLinear", + "colorSchema": "orange", + "name": "Text Editor", + "intro": "Can process and output fixed or incoming text. Non-string type data will be converted to string type.", + "inputs": [ + { + "key": "system_textareaInput", + "label": "Concatenation Text", + "valueType": "string", + "required": true, + "placeholder": "Type / to invoke variable list", + "selectedTypeIndex": 0, + "renderTypeList": ["textarea"], + "value": "Static response" + } + ], + "outputs": [ + { + "id": "system_text", + "key": "system_text", + "type": "static", + "valueType": "string", + "label": "Concatenation Result" + } + ], + "nodeId": "text" + } + ], + "edges": [ + { + "source": "start", + "sourceHandle": "start-source-right", + "target": "text", + "targetHandle": "text-target-left" + }, + { + "source": "text", + "sourceHandle": "text-source-right", + "target": "answer", + "targetHandle": "answer-target-left" + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/basic-static/workflow.json b/packages/workflow-core/test/fixtures/basic-static/workflow.json new file mode 100644 index 000000000000..14bb6bc1221b --- /dev/null +++ b/packages/workflow-core/test/fixtures/basic-static/workflow.json @@ -0,0 +1,111 @@ +{ + "schemaVersion": "fastgpt-workflow/v1", + "app": {}, + "nodes": [ + { + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "flowNodeType": "answerNode", + "inputs": [ + { + "description": "You can use \\n to achieve continuous line breaks.\nYou can achieve replies through external module input, and the content filled in here will be overwritten by external module input.\nIf non-string type data is passed in, it will be automatically converted to a string", + "isRichText": false, + "key": "text", + "label": "Response Content", + "maxLength": 100000, + "placeholder": "You can use \\n to achieve continuous line breaks.\nYou can achieve replies through external module input, and the content filled in here will be overwritten by external module input.\nIf non-string type data is passed in, it will be automatically converted to a string", + "renderTypeList": ["textarea", "reference"], + "required": true, + "selectedTypeIndex": 1, + "value": ["text", "system_text"], + "valueType": "any" + } + ], + "intro": "This module can directly reply with a specified content. Commonly used for guidance or prompts. Non-string content will be converted to string for output.", + "name": "Assigned Reply", + "nodeId": "answer", + "outputs": [] + }, + { + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "flowNodeType": "workflowStart", + "inputs": [ + { + "key": "userChatInput", + "label": "User Question", + "renderTypeList": ["reference", "textarea"], + "required": true, + "toolDescription": "User Question", + "valueType": "string" + } + ], + "name": "Start", + "nodeId": "start", + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "label": "User Question", + "type": "static", + "valueType": "string" + } + ] + }, + { + "avatar": "core/workflow/template/textConcat", + "avatarLinear": "core/workflow/template/textConcatLinear", + "colorSchema": "orange", + "flowNodeType": "textEditor", + "inputs": [ + { + "key": "system_textareaInput", + "label": "Concatenation Text", + "placeholder": "Type / to invoke variable list", + "renderTypeList": ["textarea"], + "required": true, + "selectedTypeIndex": 0, + "value": "Static response", + "valueType": "string" + } + ], + "intro": "Can process and output fixed or incoming text. Non-string type data will be converted to string type.", + "name": "Text Editor", + "nodeId": "text", + "outputs": [ + { + "id": "system_text", + "key": "system_text", + "label": "Concatenation Result", + "type": "static", + "valueType": "string" + } + ] + } + ], + "executionEdges": [ + { + "source": { + "kind": "next", + "nodeId": "start" + }, + "target": { + "kind": "target", + "nodeId": "text" + } + }, + { + "source": { + "kind": "next", + "nodeId": "text" + }, + "target": { + "kind": "target", + "nodeId": "answer" + } + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/branching/expected-diagnostics.json b/packages/workflow-core/test/fixtures/branching/expected-diagnostics.json new file mode 100644 index 000000000000..fe51488c7066 --- /dev/null +++ b/packages/workflow-core/test/fixtures/branching/expected-diagnostics.json @@ -0,0 +1 @@ +[] diff --git a/packages/workflow-core/test/fixtures/branching/store-workflow.json b/packages/workflow-core/test/fixtures/branching/store-workflow.json new file mode 100644 index 000000000000..2983c17adcef --- /dev/null +++ b/packages/workflow-core/test/fixtures/branching/store-workflow.json @@ -0,0 +1,143 @@ +{ + "nodes": [ + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "workflow:template.workflow_start", + "inputs": [ + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "workflow:user_question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "common:core.module.input.label.user question" + } + ], + "nodeId": "start" + }, + { + "flowNodeType": "ifElseNode", + "avatar": "core/workflow/template/ifelse", + "avatarLinear": "core/workflow/template/ifelseLinear", + "colorSchema": "greenLight", + "name": "workflow:condition_checker", + "intro": "workflow:execute_different_branches_based_on_conditions", + "showStatus": true, + "inputs": [ + { + "key": "ifElseList", + "label": "", + "valueType": "any", + "selectedTypeIndex": 0, + "renderTypeList": ["hidden"], + "value": [ + { + "branchId": "positive", + "condition": "AND", + "list": [ + { + "variable": ["start", "userChatInput"], + "condition": "isNotEmpty", + "valueType": "input" + } + ] + } + ] + } + ], + "outputs": [ + { + "id": "ifElseResult", + "key": "ifElseResult", + "type": "static", + "valueType": "string", + "label": "workflow:judgment_result" + } + ], + "nodeId": "route" + }, + { + "flowNodeType": "answerNode", + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "name": "workflow:assigned_reply", + "intro": "workflow:intro_assigned_reply", + "inputs": [ + { + "key": "text", + "label": "common:core.module.input.label.Response content", + "valueType": "any", + "required": true, + "isRichText": false, + "placeholder": "common:core.module.input.description.Response content", + "maxLength": 100000, + "selectedTypeIndex": 0, + "renderTypeList": ["textarea", "reference"], + "value": "yes", + "description": "common:core.module.input.description.Response content" + } + ], + "outputs": [], + "nodeId": "yes" + }, + { + "flowNodeType": "answerNode", + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "name": "workflow:assigned_reply", + "intro": "workflow:intro_assigned_reply", + "inputs": [ + { + "key": "text", + "label": "common:core.module.input.label.Response content", + "valueType": "any", + "required": true, + "isRichText": false, + "placeholder": "common:core.module.input.description.Response content", + "maxLength": 100000, + "selectedTypeIndex": 0, + "renderTypeList": ["textarea", "reference"], + "value": "fallback", + "description": "common:core.module.input.description.Response content" + } + ], + "outputs": [], + "nodeId": "fallback" + } + ], + "edges": [ + { + "source": "start", + "sourceHandle": "start-source-right", + "target": "route", + "targetHandle": "route-target-left" + }, + { + "source": "route", + "sourceHandle": "route-source-positive", + "target": "yes", + "targetHandle": "yes-target-left" + }, + { + "source": "route", + "sourceHandle": "route-source-ELSE", + "target": "fallback", + "targetHandle": "fallback-target-left" + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/branching/workflow.json b/packages/workflow-core/test/fixtures/branching/workflow.json new file mode 100644 index 000000000000..1afbc6611218 --- /dev/null +++ b/packages/workflow-core/test/fixtures/branching/workflow.json @@ -0,0 +1,159 @@ +{ + "schemaVersion": "fastgpt-workflow/v1", + "app": {}, + "nodes": [ + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "workflow:template.workflow_start", + "inputs": [ + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "workflow:user_question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "common:core.module.input.label.user question" + } + ], + "nodeId": "start" + }, + { + "flowNodeType": "ifElseNode", + "avatar": "core/workflow/template/ifelse", + "avatarLinear": "core/workflow/template/ifelseLinear", + "colorSchema": "greenLight", + "name": "workflow:condition_checker", + "intro": "workflow:execute_different_branches_based_on_conditions", + "showStatus": true, + "inputs": [ + { + "key": "ifElseList", + "label": "", + "valueType": "any", + "renderTypeList": ["hidden"], + "value": [ + { + "branchId": "positive", + "condition": "AND", + "list": [ + { + "variable": ["start", "userChatInput"], + "condition": "isNotEmpty", + "valueType": "input" + } + ] + } + ], + "selectedTypeIndex": 0 + } + ], + "outputs": [ + { + "id": "ifElseResult", + "key": "ifElseResult", + "type": "static", + "valueType": "string", + "label": "workflow:judgment_result" + } + ], + "nodeId": "route" + }, + { + "flowNodeType": "answerNode", + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "name": "workflow:assigned_reply", + "intro": "workflow:intro_assigned_reply", + "inputs": [ + { + "key": "text", + "label": "common:core.module.input.label.Response content", + "valueType": "any", + "required": true, + "isRichText": false, + "placeholder": "common:core.module.input.description.Response content", + "maxLength": 100000, + "renderTypeList": ["textarea", "reference"], + "description": "common:core.module.input.description.Response content", + "value": "yes", + "selectedTypeIndex": 0 + } + ], + "outputs": [], + "nodeId": "yes" + }, + { + "flowNodeType": "answerNode", + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "name": "workflow:assigned_reply", + "intro": "workflow:intro_assigned_reply", + "inputs": [ + { + "key": "text", + "label": "common:core.module.input.label.Response content", + "valueType": "any", + "required": true, + "isRichText": false, + "placeholder": "common:core.module.input.description.Response content", + "maxLength": 100000, + "renderTypeList": ["textarea", "reference"], + "description": "common:core.module.input.description.Response content", + "value": "fallback", + "selectedTypeIndex": 0 + } + ], + "outputs": [], + "nodeId": "fallback" + } + ], + "executionEdges": [ + { + "source": { + "kind": "next", + "nodeId": "start" + }, + "target": { + "kind": "target", + "nodeId": "route" + } + }, + { + "source": { + "kind": "branch", + "nodeId": "route", + "branchKey": "positive" + }, + "target": { + "kind": "target", + "nodeId": "yes" + } + }, + { + "source": { + "kind": "branch", + "nodeId": "route", + "branchKey": "ELSE" + }, + "target": { + "kind": "target", + "nodeId": "fallback" + } + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/common-linear/expected-diagnostics.json b/packages/workflow-core/test/fixtures/common-linear/expected-diagnostics.json new file mode 100644 index 000000000000..fe51488c7066 --- /dev/null +++ b/packages/workflow-core/test/fixtures/common-linear/expected-diagnostics.json @@ -0,0 +1 @@ +[] diff --git a/packages/workflow-core/test/fixtures/common-linear/store-workflow.json b/packages/workflow-core/test/fixtures/common-linear/store-workflow.json new file mode 100644 index 000000000000..55116aec1fe5 --- /dev/null +++ b/packages/workflow-core/test/fixtures/common-linear/store-workflow.json @@ -0,0 +1,860 @@ +{ + "nodes": [ + { + "flowNodeType": "answerNode", + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "name": "Assigned Reply", + "intro": "This module can directly reply with a specified content. Commonly used for guidance or prompts. Non-string content will be converted to string for output.", + "inputs": [ + { + "key": "text", + "label": "Response Content", + "valueType": "any", + "required": true, + "isRichText": false, + "placeholder": "You can use \\n to achieve continuous line breaks.\nYou can achieve replies through external module input, and the content filled in here will be overwritten by external module input.\nIf non-string type data is passed in, it will be automatically converted to a string", + "maxLength": 100000, + "selectedTypeIndex": 1, + "renderTypeList": ["textarea", "reference"], + "value": ["call", "answerText"], + "description": "You can use \\n to achieve continuous line breaks.\nYou can achieve replies through external module input, and the content filled in here will be overwritten by external module input.\nIf non-string type data is passed in, it will be automatically converted to a string" + } + ], + "outputs": [], + "nodeId": "answer", + "position": { + "x": 2240, + "y": 0 + } + }, + { + "flowNodeType": "app", + "avatar": "core/workflow/template/runApp", + "name": "Application Call", + "intro": "You can choose another application to call", + "showStatus": true, + "inputs": [ + { + "key": "app", + "label": "Select an Application", + "valueType": "selectApp", + "required": true, + "selectedTypeIndex": 0, + "renderTypeList": ["selectApp", "reference"], + "value": { + "appId": "app-demo" + }, + "description": "Select another application to call" + }, + { + "key": "history", + "label": "Chat History", + "valueType": "chatHistory", + "required": true, + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "value": 6, + "description": "Maximum Number of Dialog Rounds" + }, + { + "key": "userChatInput", + "label": "User Question", + "valueType": "string", + "required": true, + "selectedTypeIndex": 0, + "renderTypeList": ["reference", "textarea"], + "value": ["query", "system_text"], + "toolDescription": "User Question" + } + ], + "outputs": [ + { + "id": "history", + "key": "history", + "type": "static", + "valueType": "chatHistory", + "valueDesc": "{\n obj: System | Human | AI;\n value: string;\n}[]", + "label": "New Context", + "description": "Append the application's reply to the history as new context", + "required": true + }, + { + "id": "answerText", + "key": "answerText", + "type": "static", + "valueType": "string", + "label": "Reply Text", + "description": "Will be triggered after the application is fully completed" + } + ], + "nodeId": "call", + "position": { + "x": 1920, + "y": 0 + } + }, + { + "flowNodeType": "code", + "avatar": "core/workflow/template/codeRun", + "avatarLinear": "core/workflow/template/codeRunLinear", + "colorSchema": "lime", + "name": "Code Sandbox", + "intro": "Executing a script code in the sandbox can be used to perform complex data processing, but the syntax and available dependencies will be limited.", + "showStatus": true, + "catchError": false, + "inputs": [ + { + "key": "system_addInputParam", + "label": "", + "valueType": "dynamic", + "required": false, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "renderTypeList": ["addInputParam"], + "description": "These variables will be input parameters for code execution" + }, + { + "key": "data1", + "label": "data1", + "valueType": "string", + "required": true, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "selectedTypeIndex": 0, + "renderTypeList": ["reference"], + "value": ["query", "system_text"], + "canEdit": true + }, + { + "key": "data2", + "label": "data2", + "valueType": "string", + "required": true, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "selectedTypeIndex": 0, + "renderTypeList": ["reference"], + "value": ["extract", "fields"], + "canEdit": true + }, + { + "key": "codeType", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"], + "value": "js" + }, + { + "key": "code", + "label": "", + "valueType": "string", + "renderTypeList": ["custom"], + "value": "function main({data1, data2}){\n \n return {\n result: data1,\n data2\n }\n}" + } + ], + "outputs": [ + { + "id": "system_addOutputParam", + "key": "system_addOutputParam", + "type": "dynamic", + "valueType": "dynamic", + "label": "", + "description": "Pass the object returned in the code as output to the next nodes. The variable name needs to correspond to the return key.", + "customFieldConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": false, + "showDescription": false + } + }, + { + "id": "system_rawResponse", + "key": "system_rawResponse", + "type": "static", + "valueType": "object", + "label": "Full Response Data" + }, + { + "id": "qLUQfhG0ILRX", + "key": "result", + "type": "dynamic", + "valueType": "string", + "label": "result" + }, + { + "id": "gR0mkQpJ4Og8", + "key": "data2", + "type": "dynamic", + "valueType": "string", + "label": "data2" + }, + { + "id": "error", + "key": "error", + "type": "error", + "valueType": "string", + "label": "Error text" + } + ], + "nodeId": "code", + "position": { + "x": 1600, + "y": 0 + } + }, + { + "flowNodeType": "contentExtract", + "avatar": "core/workflow/template/extractJson", + "avatarLinear": "core/workflow/template/extractJsonLinear", + "colorSchema": "teal", + "name": "Text Extract", + "intro": "Can extract specified data from text, such as SQL statements, search keywords, code, etc.", + "showStatus": true, + "version": "4.9.2", + "catchError": false, + "inputs": [ + { + "key": "model", + "label": "AI Model", + "valueType": "string", + "required": true, + "selectedTypeIndex": 0, + "renderTypeList": ["selectLLMModel", "reference"], + "value": "gpt-4.1" + }, + { + "key": "description", + "label": "Extraction Requirements Description", + "valueType": "string", + "placeholder": "For example: 1. The current time is: {{cTime}}. \nYou are a laboratory reservation assistant. Your task is to help users make laboratory reservations and obtain the corresponding reservation information from the text.\n\n2. You are the Google Search Assistant and need to extract appropriate search terms from text.", + "renderTypeList": ["textarea", "reference"], + "description": "Provide AI with some background knowledge or requirements to guide it in completing the task better.\\nThis input box can use global variables." + }, + { + "key": "history", + "label": "Chat History", + "valueType": "chatHistory", + "required": true, + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "value": 6, + "description": "Maximum Number of Dialog Rounds" + }, + { + "key": "content", + "label": "Text to Extract", + "valueType": "string", + "required": true, + "selectedTypeIndex": 0, + "renderTypeList": ["reference", "textarea"], + "value": ["query", "system_text"], + "toolDescription": "Content to Retrieve" + }, + { + "key": "extractKeys", + "label": "", + "valueType": "any", + "selectedTypeIndex": 0, + "renderTypeList": ["custom"], + "value": [ + { + "description": "Summary", + "key": "summary", + "required": true, + "valueType": "string" + } + ], + "description": "A target field consists of 'description' and 'key'. Multiple target fields can be extracted." + } + ], + "outputs": [ + { + "id": "success", + "key": "success", + "type": "static", + "valueType": "boolean", + "label": "Full Field Extraction", + "description": "Returns true when all fields are fully extracted (success includes model extraction or using default values)", + "required": true + }, + { + "id": "fields", + "key": "fields", + "type": "static", + "valueType": "string", + "label": "Complete Extraction Result", + "description": "A JSON string, e.g., {\"name\":\"YY\",\"Time\":\"2023/7/2 18:00\"}", + "required": true + }, + { + "id": "system_error_text", + "key": "system_error_text", + "type": "error", + "valueType": "string", + "label": "Error text" + } + ], + "nodeId": "extract", + "position": { + "x": 960, + "y": 0 + } + }, + { + "flowNodeType": "httpRequest468", + "avatar": "core/workflow/template/httpRequest", + "avatarLinear": "core/workflow/template/httpRequestLinear", + "colorSchema": "indigo", + "name": "HTTP", + "intro": "Can send an HTTP request to perform more complex operations (network search, database query, etc.)", + "showStatus": true, + "catchError": false, + "inputs": [ + { + "key": "system_addInputParam", + "label": "", + "valueType": "dynamic", + "required": false, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "renderTypeList": ["addInputParam"], + "description": "Receive the output value of the previous node as a variable, which can be used by the HTTP request parameters.", + "deprecated": false + }, + { + "key": "system_httpMethod", + "label": "", + "valueType": "string", + "required": true, + "renderTypeList": ["custom"], + "value": "POST" + }, + { + "key": "system_httpTimeout", + "label": "", + "valueType": "number", + "required": true, + "max": 600, + "min": 5, + "renderTypeList": ["custom"], + "value": 30 + }, + { + "key": "system_httpReqUrl", + "label": "", + "valueType": "string", + "required": false, + "placeholder": "https://api.ai.com/getInventory", + "selectedTypeIndex": 0, + "renderTypeList": ["hidden"], + "value": "https://example.com/api", + "description": "New HTTP request address. If there are two 'request addresses', you can delete this module and re-add it to pull the latest module configuration." + }, + { + "key": "system_header_secret", + "label": "", + "valueType": "object", + "required": false, + "renderTypeList": ["hidden"] + }, + { + "key": "system_httpHeader", + "label": "", + "valueType": "any", + "required": false, + "placeholder": "Custom request headers, please strictly fill in the JSON string.\n1. Ensure that the last attribute has no comma\n2. Ensure that the key contains double quotes\nFor example: {\"Authorization\":\"Bearer xxx\"}", + "renderTypeList": ["custom"], + "value": [], + "description": "Custom request headers, please strictly fill in the JSON string.\n1. Ensure that the last attribute has no comma\n2. Ensure that the key contains double quotes\nFor example: {\"Authorization\":\"Bearer xxx\"}" + }, + { + "key": "system_httpParams", + "label": "", + "valueType": "any", + "required": false, + "renderTypeList": ["hidden"], + "value": [] + }, + { + "key": "system_httpJsonBody", + "label": "", + "valueType": "any", + "required": false, + "renderTypeList": ["hidden"], + "value": "" + }, + { + "key": "system_httpFormBody", + "label": "", + "valueType": "any", + "required": false, + "renderTypeList": ["hidden"], + "value": [] + }, + { + "key": "system_httpContentType", + "label": "", + "valueType": "string", + "required": false, + "renderTypeList": ["hidden"], + "value": "json" + } + ], + "outputs": [ + { + "id": "system_addOutputParam", + "key": "system_addOutputParam", + "type": "dynamic", + "valueType": "dynamic", + "label": "Output field extraction", + "description": "Specified fields in the response value can be extracted through JSONPath syntax", + "customFieldConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": false, + "showDescription": false + } + }, + { + "id": "httpRawResponse", + "key": "httpRawResponse", + "type": "static", + "valueType": "any", + "label": "Raw Response", + "description": "Raw HTTP response. Only accepts string or JSON type response data.", + "required": true + }, + { + "id": "system_httpRawError", + "key": "system_httpRawError", + "type": "error", + "valueType": "object", + "label": "Full error", + "description": "Complete error object when the HTTP request fails, including message, status, code, data, and other fields." + }, + { + "id": "error", + "key": "error", + "type": "error", + "valueType": "string", + "label": "Error text" + } + ], + "nodeId": "http", + "position": { + "x": 1280, + "y": 0 + } + }, + { + "flowNodeType": "cfr", + "avatar": "core/workflow/template/queryExtension", + "avatarLinear": "core/workflow/template/queryExtensionLinear", + "colorSchema": "indigo", + "name": "Query extension", + "intro": "Using question optimization can improve the accuracy of Dataset searches during continuous conversations. After using this function, AI will first construct one or more new search terms based on the context, which are more conducive to Dataset searches. This module is already built into the Dataset search module. If you only perform a single Dataset search, you can directly use the built-in completion function of the Dataset.", + "showStatus": true, + "version": "481", + "inputs": [ + { + "key": "model", + "label": "AI Model", + "valueType": "string", + "required": true, + "selectedTypeIndex": 0, + "renderTypeList": ["selectLLMModel", "reference"], + "value": "gpt-4.1" + }, + { + "key": "systemPrompt", + "label": "Conversation Background Description", + "valueType": "string", + "placeholder": "For example:\nQuestions about the introduction and use of Python.\nThe current conversation is related to the game 'GTA5'.", + "max": 300, + "selectedTypeIndex": 1, + "renderTypeList": ["textarea", "reference"], + "value": ["VARIABLE_NODE_ID", "tenantId"], + "description": "Describe the scope of the current conversation to help the AI complete and extend the current question. The content you fill in is usually for this assistant." + }, + { + "key": "history", + "label": "Chat History", + "valueType": "chatHistory", + "required": true, + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "value": 6, + "description": "Maximum Number of Dialog Rounds" + }, + { + "key": "userChatInput", + "label": "User Question", + "valueType": "string", + "required": true, + "selectedTypeIndex": 0, + "renderTypeList": ["reference", "textarea"], + "value": ["start", "userChatInput"], + "toolDescription": "user question" + } + ], + "outputs": [ + { + "id": "system_text", + "key": "system_text", + "type": "static", + "valueType": "string", + "label": "Optimization Result", + "description": "Output as a string array, which can be directly connected to the 'User Question' of 'Dataset Search'. It is recommended not to connect to the 'User Question' of 'AI Chat'" + } + ], + "nodeId": "query", + "position": { + "x": 320, + "y": 0 + } + }, + { + "flowNodeType": "datasetSearchNode", + "avatar": "core/workflow/template/datasetSearch", + "avatarLinear": "core/workflow/template/datasetSearchLinear", + "colorSchema": "blueLight", + "name": "Dataset Search", + "intro": "Use 'semantic search' and 'full-text search' capabilities to find potentially relevant reference content from the 'Dataset'.", + "showStatus": true, + "version": "4.9.2", + "catchError": false, + "inputs": [ + { + "key": "datasets", + "label": "Select Dataset", + "valueType": "selectDataset", + "required": true, + "selectedTypeIndex": 0, + "renderTypeList": ["selectDataset", "reference"], + "valueDesc": "[\n {\n \"datasetId\": \"6693a4a6b69b7a9b0e37d9b0\"\n }\n]", + "value": [ + { + "avatar": "", + "datasetId": "dataset-demo", + "name": "Demo", + "vectorModel": { + "model": "text-embedding" + } + } + ] + }, + { + "key": "similarity", + "label": "", + "valueType": "number", + "renderTypeList": ["selectDatasetParamsModal"], + "value": 0.4 + }, + { + "key": "limit", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"], + "value": 5000 + }, + { + "key": "searchMode", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"], + "value": "embedding" + }, + { + "key": "embeddingWeight", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"], + "value": 0.5 + }, + { + "key": "usingReRank", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": false + }, + { + "key": "rerankModel", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "rerankWeight", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"], + "value": 0.5 + }, + { + "key": "datasetSearchUsingExtensionQuery", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "datasetSearchExtensionModel", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "datasetSearchExtensionBg", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"], + "value": "" + }, + { + "key": "authTmbId", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": false + }, + { + "key": "datasetSearchInput", + "label": "Search content", + "valueType": "arrayString", + "required": true, + "selectedTypeIndex": 1, + "renderTypeList": ["reference", "textarea"], + "value": ["hello"], + "toolDescription": "Search term or search statement" + }, + { + "key": "collectionFilterMatch", + "label": "Collection Metadata Filter", + "valueType": "string", + "renderTypeList": ["textarea", "reference"], + "description": "Currently supports filtering by tags, creation time, and collection IDs. Fill in the format as follows:\n{\n \"tags\": {\n \"$and\": [\"Tag 1\",\"Tag 2\"],\n \"$or\": [\"When there are $and tags, and is effective, or is not effective\"]\n },\n \"createTime\": {\n \"$gte\": \"YYYY-MM-DD HH:mm format, collection creation time greater than this time\",\n \"$lte\": \"YYYY-MM-DD HH:mm format, collection creation time less than this time, can be used with $gte\"\n },\n \"collectionIds\": [\"collectionId1\", \"collectionId2\", \"Folder IDs are supported and will automatically expand to get all sub-collections\"]\n}", + "isPro": true + } + ], + "outputs": [ + { + "id": "quoteQA", + "key": "quoteQA", + "type": "static", + "valueType": "datasetQuote", + "valueDesc": "{\n id: string;\n datasetId: string;\n collectionId: string;\n sourceName: string;\n sourceId?: string;\n q: string;\n a: string\n}[]", + "label": "Dataset Quote", + "description": "Special array format, returns an empty array when the search result is empty." + }, + { + "id": "system_error_text", + "key": "system_error_text", + "type": "error", + "valueType": "string", + "label": "Error text" + } + ], + "nodeId": "search", + "position": { + "x": 640, + "y": 0 + } + }, + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "Start", + "inputs": [ + { + "key": "userChatInput", + "label": "User Question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "User Question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "User Question" + } + ], + "nodeId": "start" + } + ], + "edges": [ + { + "source": "call", + "sourceHandle": "call-source-right", + "target": "answer", + "targetHandle": "answer-target-left" + }, + { + "source": "code", + "sourceHandle": "code-source-right", + "target": "call", + "targetHandle": "call-target-left" + }, + { + "source": "extract", + "sourceHandle": "extract-source-right", + "target": "http", + "targetHandle": "http-target-left" + }, + { + "source": "http", + "sourceHandle": "http-source-right", + "target": "code", + "targetHandle": "code-target-left" + }, + { + "source": "query", + "sourceHandle": "query-source-right", + "target": "search", + "targetHandle": "search-target-left" + }, + { + "source": "search", + "sourceHandle": "search-source-right", + "target": "extract", + "targetHandle": "extract-target-left" + }, + { + "source": "start", + "sourceHandle": "start-source-right", + "target": "query", + "targetHandle": "query-target-left" + } + ], + "chatConfig": { + "welcomeText": "Welcome", + "variables": [ + { + "key": "tenantId", + "label": "tenantId", + "valueType": "string", + "required": true, + "type": "input", + "description": "Tenant ID" + } + ] + } +} diff --git a/packages/workflow-core/test/fixtures/common-linear/workflow.json b/packages/workflow-core/test/fixtures/common-linear/workflow.json new file mode 100644 index 000000000000..b46cacb057d1 --- /dev/null +++ b/packages/workflow-core/test/fixtures/common-linear/workflow.json @@ -0,0 +1,893 @@ +{ + "schemaVersion": "fastgpt-workflow/v1", + "app": { + "intro": "Covers common linear nodes", + "name": "Common linear PR2" + }, + "nodes": [ + { + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "flowNodeType": "answerNode", + "inputs": [ + { + "description": "You can use \\n to achieve continuous line breaks.\nYou can achieve replies through external module input, and the content filled in here will be overwritten by external module input.\nIf non-string type data is passed in, it will be automatically converted to a string", + "isRichText": false, + "key": "text", + "label": "Response Content", + "maxLength": 100000, + "placeholder": "You can use \\n to achieve continuous line breaks.\nYou can achieve replies through external module input, and the content filled in here will be overwritten by external module input.\nIf non-string type data is passed in, it will be automatically converted to a string", + "renderTypeList": ["textarea", "reference"], + "required": true, + "selectedTypeIndex": 1, + "value": ["call", "answerText"], + "valueType": "any" + } + ], + "intro": "This module can directly reply with a specified content. Commonly used for guidance or prompts. Non-string content will be converted to string for output.", + "name": "Assigned Reply", + "nodeId": "answer", + "outputs": [], + "position": { + "x": 2240, + "y": 0 + } + }, + { + "avatar": "core/workflow/template/runApp", + "flowNodeType": "app", + "inputs": [ + { + "description": "Select another application to call", + "key": "app", + "label": "Select an Application", + "renderTypeList": ["selectApp", "reference"], + "required": true, + "selectedTypeIndex": 0, + "value": { + "appId": "app-demo" + }, + "valueType": "selectApp" + }, + { + "description": "Maximum Number of Dialog Rounds", + "key": "history", + "label": "Chat History", + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "required": true, + "value": 6, + "valueType": "chatHistory" + }, + { + "key": "userChatInput", + "label": "User Question", + "renderTypeList": ["reference", "textarea"], + "required": true, + "selectedTypeIndex": 0, + "toolDescription": "User Question", + "value": ["query", "system_text"], + "valueType": "string" + } + ], + "intro": "You can choose another application to call", + "name": "Application Call", + "nodeId": "call", + "outputs": [ + { + "description": "Append the application's reply to the history as new context", + "id": "history", + "key": "history", + "label": "New Context", + "required": true, + "type": "static", + "valueDesc": "{\n obj: System | Human | AI;\n value: string;\n}[]", + "valueType": "chatHistory" + }, + { + "description": "Will be triggered after the application is fully completed", + "id": "answerText", + "key": "answerText", + "label": "Reply Text", + "type": "static", + "valueType": "string" + } + ], + "position": { + "x": 1920, + "y": 0 + }, + "showStatus": true + }, + { + "avatar": "core/workflow/template/codeRun", + "avatarLinear": "core/workflow/template/codeRunLinear", + "catchError": false, + "colorSchema": "lime", + "flowNodeType": "code", + "inputs": [ + { + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "description": "These variables will be input parameters for code execution", + "key": "system_addInputParam", + "label": "", + "renderTypeList": ["addInputParam"], + "required": false, + "valueType": "dynamic" + }, + { + "canEdit": true, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "key": "data1", + "label": "data1", + "renderTypeList": ["reference"], + "required": true, + "selectedTypeIndex": 0, + "value": ["query", "system_text"], + "valueType": "string" + }, + { + "canEdit": true, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "key": "data2", + "label": "data2", + "renderTypeList": ["reference"], + "required": true, + "selectedTypeIndex": 0, + "value": ["extract", "fields"], + "valueType": "string" + }, + { + "key": "codeType", + "label": "", + "renderTypeList": ["hidden"], + "value": "js", + "valueType": "string" + }, + { + "key": "code", + "label": "", + "renderTypeList": ["custom"], + "value": "function main({data1, data2}){\n \n return {\n result: data1,\n data2\n }\n}", + "valueType": "string" + } + ], + "intro": "Executing a script code in the sandbox can be used to perform complex data processing, but the syntax and available dependencies will be limited.", + "name": "Code Sandbox", + "nodeId": "code", + "outputs": [ + { + "customFieldConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": false, + "showDescription": false + }, + "description": "Pass the object returned in the code as output to the next nodes. The variable name needs to correspond to the return key.", + "id": "system_addOutputParam", + "key": "system_addOutputParam", + "label": "", + "type": "dynamic", + "valueType": "dynamic" + }, + { + "id": "system_rawResponse", + "key": "system_rawResponse", + "label": "Full Response Data", + "type": "static", + "valueType": "object" + }, + { + "id": "qLUQfhG0ILRX", + "key": "result", + "label": "result", + "type": "dynamic", + "valueType": "string" + }, + { + "id": "gR0mkQpJ4Og8", + "key": "data2", + "label": "data2", + "type": "dynamic", + "valueType": "string" + }, + { + "id": "error", + "key": "error", + "label": "Error text", + "type": "error", + "valueType": "string" + } + ], + "position": { + "x": 1600, + "y": 0 + }, + "showStatus": true + }, + { + "avatar": "core/workflow/template/extractJson", + "avatarLinear": "core/workflow/template/extractJsonLinear", + "catchError": false, + "colorSchema": "teal", + "flowNodeType": "contentExtract", + "inputs": [ + { + "key": "model", + "label": "AI Model", + "renderTypeList": ["selectLLMModel", "reference"], + "required": true, + "selectedTypeIndex": 0, + "value": "gpt-4.1", + "valueType": "string" + }, + { + "description": "Provide AI with some background knowledge or requirements to guide it in completing the task better.\\nThis input box can use global variables.", + "key": "description", + "label": "Extraction Requirements Description", + "placeholder": "For example: 1. The current time is: {{cTime}}. \nYou are a laboratory reservation assistant. Your task is to help users make laboratory reservations and obtain the corresponding reservation information from the text.\n\n2. You are the Google Search Assistant and need to extract appropriate search terms from text.", + "renderTypeList": ["textarea", "reference"], + "valueType": "string" + }, + { + "description": "Maximum Number of Dialog Rounds", + "key": "history", + "label": "Chat History", + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "required": true, + "value": 6, + "valueType": "chatHistory" + }, + { + "key": "content", + "label": "Text to Extract", + "renderTypeList": ["reference", "textarea"], + "required": true, + "selectedTypeIndex": 0, + "toolDescription": "Content to Retrieve", + "value": ["query", "system_text"], + "valueType": "string" + }, + { + "description": "A target field consists of 'description' and 'key'. Multiple target fields can be extracted.", + "key": "extractKeys", + "label": "", + "renderTypeList": ["custom"], + "selectedTypeIndex": 0, + "value": [ + { + "description": "Summary", + "key": "summary", + "required": true, + "valueType": "string" + } + ], + "valueType": "any" + } + ], + "intro": "Can extract specified data from text, such as SQL statements, search keywords, code, etc.", + "name": "Text Extract", + "nodeId": "extract", + "outputs": [ + { + "description": "Returns true when all fields are fully extracted (success includes model extraction or using default values)", + "id": "success", + "key": "success", + "label": "Full Field Extraction", + "required": true, + "type": "static", + "valueType": "boolean" + }, + { + "description": "A JSON string, e.g., {\"name\":\"YY\",\"Time\":\"2023/7/2 18:00\"}", + "id": "fields", + "key": "fields", + "label": "Complete Extraction Result", + "required": true, + "type": "static", + "valueType": "string" + }, + { + "id": "system_error_text", + "key": "system_error_text", + "label": "Error text", + "type": "error", + "valueType": "string" + } + ], + "position": { + "x": 960, + "y": 0 + }, + "showStatus": true, + "version": "4.9.2" + }, + { + "avatar": "core/workflow/template/httpRequest", + "avatarLinear": "core/workflow/template/httpRequestLinear", + "catchError": false, + "colorSchema": "indigo", + "flowNodeType": "httpRequest468", + "inputs": [ + { + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "deprecated": false, + "description": "Receive the output value of the previous node as a variable, which can be used by the HTTP request parameters.", + "key": "system_addInputParam", + "label": "", + "renderTypeList": ["addInputParam"], + "required": false, + "valueType": "dynamic" + }, + { + "key": "system_httpMethod", + "label": "", + "renderTypeList": ["custom"], + "required": true, + "value": "POST", + "valueType": "string" + }, + { + "key": "system_httpTimeout", + "label": "", + "max": 600, + "min": 5, + "renderTypeList": ["custom"], + "required": true, + "value": 30, + "valueType": "number" + }, + { + "description": "New HTTP request address. If there are two 'request addresses', you can delete this module and re-add it to pull the latest module configuration.", + "key": "system_httpReqUrl", + "label": "", + "placeholder": "https://api.ai.com/getInventory", + "renderTypeList": ["hidden"], + "required": false, + "selectedTypeIndex": 0, + "value": "https://example.com/api", + "valueType": "string" + }, + { + "key": "system_header_secret", + "label": "", + "renderTypeList": ["hidden"], + "required": false, + "valueType": "object" + }, + { + "description": "Custom request headers, please strictly fill in the JSON string.\n1. Ensure that the last attribute has no comma\n2. Ensure that the key contains double quotes\nFor example: {\"Authorization\":\"Bearer xxx\"}", + "key": "system_httpHeader", + "label": "", + "placeholder": "Custom request headers, please strictly fill in the JSON string.\n1. Ensure that the last attribute has no comma\n2. Ensure that the key contains double quotes\nFor example: {\"Authorization\":\"Bearer xxx\"}", + "renderTypeList": ["custom"], + "required": false, + "value": [], + "valueType": "any" + }, + { + "key": "system_httpParams", + "label": "", + "renderTypeList": ["hidden"], + "required": false, + "value": [], + "valueType": "any" + }, + { + "key": "system_httpJsonBody", + "label": "", + "renderTypeList": ["hidden"], + "required": false, + "value": "", + "valueType": "any" + }, + { + "key": "system_httpFormBody", + "label": "", + "renderTypeList": ["hidden"], + "required": false, + "value": [], + "valueType": "any" + }, + { + "key": "system_httpContentType", + "label": "", + "renderTypeList": ["hidden"], + "required": false, + "value": "json", + "valueType": "string" + } + ], + "intro": "Can send an HTTP request to perform more complex operations (network search, database query, etc.)", + "name": "HTTP", + "nodeId": "http", + "outputs": [ + { + "customFieldConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": false, + "showDescription": false + }, + "description": "Specified fields in the response value can be extracted through JSONPath syntax", + "id": "system_addOutputParam", + "key": "system_addOutputParam", + "label": "Output field extraction", + "type": "dynamic", + "valueType": "dynamic" + }, + { + "description": "Raw HTTP response. Only accepts string or JSON type response data.", + "id": "httpRawResponse", + "key": "httpRawResponse", + "label": "Raw Response", + "required": true, + "type": "static", + "valueType": "any" + }, + { + "description": "Complete error object when the HTTP request fails, including message, status, code, data, and other fields.", + "id": "system_httpRawError", + "key": "system_httpRawError", + "label": "Full error", + "type": "error", + "valueType": "object" + }, + { + "id": "error", + "key": "error", + "label": "Error text", + "type": "error", + "valueType": "string" + } + ], + "position": { + "x": 1280, + "y": 0 + }, + "showStatus": true + }, + { + "avatar": "core/workflow/template/queryExtension", + "avatarLinear": "core/workflow/template/queryExtensionLinear", + "colorSchema": "indigo", + "flowNodeType": "cfr", + "inputs": [ + { + "key": "model", + "label": "AI Model", + "renderTypeList": ["selectLLMModel", "reference"], + "required": true, + "selectedTypeIndex": 0, + "value": "gpt-4.1", + "valueType": "string" + }, + { + "description": "Describe the scope of the current conversation to help the AI complete and extend the current question. The content you fill in is usually for this assistant.", + "key": "systemPrompt", + "label": "Conversation Background Description", + "max": 300, + "placeholder": "For example:\nQuestions about the introduction and use of Python.\nThe current conversation is related to the game 'GTA5'.", + "renderTypeList": ["textarea", "reference"], + "selectedTypeIndex": 1, + "value": ["VARIABLE_NODE_ID", "tenantId"], + "valueType": "string" + }, + { + "description": "Maximum Number of Dialog Rounds", + "key": "history", + "label": "Chat History", + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "required": true, + "value": 6, + "valueType": "chatHistory" + }, + { + "key": "userChatInput", + "label": "User Question", + "renderTypeList": ["reference", "textarea"], + "required": true, + "selectedTypeIndex": 0, + "toolDescription": "user question", + "value": ["start", "userChatInput"], + "valueType": "string" + } + ], + "intro": "Using question optimization can improve the accuracy of Dataset searches during continuous conversations. After using this function, AI will first construct one or more new search terms based on the context, which are more conducive to Dataset searches. This module is already built into the Dataset search module. If you only perform a single Dataset search, you can directly use the built-in completion function of the Dataset.", + "name": "Query extension", + "nodeId": "query", + "outputs": [ + { + "description": "Output as a string array, which can be directly connected to the 'User Question' of 'Dataset Search'. It is recommended not to connect to the 'User Question' of 'AI Chat'", + "id": "system_text", + "key": "system_text", + "label": "Optimization Result", + "type": "static", + "valueType": "string" + } + ], + "position": { + "x": 320, + "y": 0 + }, + "showStatus": true, + "version": "481" + }, + { + "avatar": "core/workflow/template/datasetSearch", + "avatarLinear": "core/workflow/template/datasetSearchLinear", + "catchError": false, + "colorSchema": "blueLight", + "flowNodeType": "datasetSearchNode", + "inputs": [ + { + "key": "datasets", + "label": "Select Dataset", + "renderTypeList": ["selectDataset", "reference"], + "required": true, + "selectedTypeIndex": 0, + "value": [ + { + "avatar": "", + "datasetId": "dataset-demo", + "name": "Demo", + "vectorModel": { + "model": "text-embedding" + } + } + ], + "valueDesc": "[\n {\n \"datasetId\": \"6693a4a6b69b7a9b0e37d9b0\"\n }\n]", + "valueType": "selectDataset" + }, + { + "key": "similarity", + "label": "", + "renderTypeList": ["selectDatasetParamsModal"], + "value": 0.4, + "valueType": "number" + }, + { + "key": "limit", + "label": "", + "renderTypeList": ["hidden"], + "value": 5000, + "valueType": "number" + }, + { + "key": "searchMode", + "label": "", + "renderTypeList": ["hidden"], + "value": "embedding", + "valueType": "string" + }, + { + "key": "embeddingWeight", + "label": "", + "renderTypeList": ["hidden"], + "value": 0.5, + "valueType": "number" + }, + { + "key": "usingReRank", + "label": "", + "renderTypeList": ["hidden"], + "value": false, + "valueType": "boolean" + }, + { + "key": "rerankModel", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "string" + }, + { + "key": "rerankWeight", + "label": "", + "renderTypeList": ["hidden"], + "value": 0.5, + "valueType": "number" + }, + { + "key": "datasetSearchUsingExtensionQuery", + "label": "", + "renderTypeList": ["hidden"], + "value": true, + "valueType": "boolean" + }, + { + "key": "datasetSearchExtensionModel", + "label": "", + "renderTypeList": ["hidden"], + "valueType": "string" + }, + { + "key": "datasetSearchExtensionBg", + "label": "", + "renderTypeList": ["hidden"], + "value": "", + "valueType": "string" + }, + { + "key": "authTmbId", + "label": "", + "renderTypeList": ["hidden"], + "value": false, + "valueType": "boolean" + }, + { + "key": "datasetSearchInput", + "label": "Search content", + "renderTypeList": ["reference", "textarea"], + "required": true, + "selectedTypeIndex": 1, + "toolDescription": "Search term or search statement", + "value": ["hello"], + "valueType": "arrayString" + }, + { + "description": "Currently supports filtering by tags, creation time, and collection IDs. Fill in the format as follows:\n{\n \"tags\": {\n \"$and\": [\"Tag 1\",\"Tag 2\"],\n \"$or\": [\"When there are $and tags, and is effective, or is not effective\"]\n },\n \"createTime\": {\n \"$gte\": \"YYYY-MM-DD HH:mm format, collection creation time greater than this time\",\n \"$lte\": \"YYYY-MM-DD HH:mm format, collection creation time less than this time, can be used with $gte\"\n },\n \"collectionIds\": [\"collectionId1\", \"collectionId2\", \"Folder IDs are supported and will automatically expand to get all sub-collections\"]\n}", + "isPro": true, + "key": "collectionFilterMatch", + "label": "Collection Metadata Filter", + "renderTypeList": ["textarea", "reference"], + "valueType": "string" + } + ], + "intro": "Use 'semantic search' and 'full-text search' capabilities to find potentially relevant reference content from the 'Dataset'.", + "name": "Dataset Search", + "nodeId": "search", + "outputs": [ + { + "description": "Special array format, returns an empty array when the search result is empty.", + "id": "quoteQA", + "key": "quoteQA", + "label": "Dataset Quote", + "type": "static", + "valueDesc": "{\n id: string;\n datasetId: string;\n collectionId: string;\n sourceName: string;\n sourceId?: string;\n q: string;\n a: string\n}[]", + "valueType": "datasetQuote" + }, + { + "id": "system_error_text", + "key": "system_error_text", + "label": "Error text", + "type": "error", + "valueType": "string" + } + ], + "position": { + "x": 640, + "y": 0 + }, + "showStatus": true, + "version": "4.9.2" + }, + { + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "flowNodeType": "workflowStart", + "inputs": [ + { + "key": "userChatInput", + "label": "User Question", + "renderTypeList": ["reference", "textarea"], + "required": true, + "toolDescription": "User Question", + "valueType": "string" + } + ], + "name": "Start", + "nodeId": "start", + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "label": "User Question", + "type": "static", + "valueType": "string" + } + ] + } + ], + "executionEdges": [ + { + "source": { + "kind": "next", + "nodeId": "call" + }, + "target": { + "kind": "target", + "nodeId": "answer" + } + }, + { + "source": { + "kind": "next", + "nodeId": "code" + }, + "target": { + "kind": "target", + "nodeId": "call" + } + }, + { + "source": { + "kind": "next", + "nodeId": "extract" + }, + "target": { + "kind": "target", + "nodeId": "http" + } + }, + { + "source": { + "kind": "next", + "nodeId": "http" + }, + "target": { + "kind": "target", + "nodeId": "code" + } + }, + { + "source": { + "kind": "next", + "nodeId": "query" + }, + "target": { + "kind": "target", + "nodeId": "search" + } + }, + { + "source": { + "kind": "next", + "nodeId": "search" + }, + "target": { + "kind": "target", + "nodeId": "extract" + } + }, + { + "source": { + "kind": "next", + "nodeId": "start" + }, + "target": { + "kind": "target", + "nodeId": "query" + } + } + ], + "chatConfig": { + "variables": [ + { + "description": "Tenant ID", + "key": "tenantId", + "label": "tenantId", + "required": true, + "type": "input", + "valueType": "string" + } + ], + "welcomeText": "Welcome" + } +} diff --git a/packages/workflow-core/test/fixtures/dynamic-io-catch/expected-diagnostics.json b/packages/workflow-core/test/fixtures/dynamic-io-catch/expected-diagnostics.json new file mode 100644 index 000000000000..fe51488c7066 --- /dev/null +++ b/packages/workflow-core/test/fixtures/dynamic-io-catch/expected-diagnostics.json @@ -0,0 +1 @@ +[] diff --git a/packages/workflow-core/test/fixtures/dynamic-io-catch/store-workflow.json b/packages/workflow-core/test/fixtures/dynamic-io-catch/store-workflow.json new file mode 100644 index 000000000000..9725b4d6a736 --- /dev/null +++ b/packages/workflow-core/test/fixtures/dynamic-io-catch/store-workflow.json @@ -0,0 +1,255 @@ +{ + "nodes": [ + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "workflow:template.workflow_start", + "inputs": [ + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "workflow:user_question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "common:core.module.input.label.user question" + } + ], + "nodeId": "start" + }, + { + "flowNodeType": "code", + "avatar": "core/workflow/template/codeRun", + "avatarLinear": "core/workflow/template/codeRunLinear", + "colorSchema": "lime", + "name": "workflow:code_execution", + "intro": "workflow:code_sandbox_intro", + "showStatus": true, + "catchError": true, + "inputs": [ + { + "key": "system_addInputParam", + "label": "", + "valueType": "dynamic", + "required": false, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "renderTypeList": ["addInputParam"], + "description": "workflow:these_variables_will_be_input_parameters_for_code_execution" + }, + { + "key": "data1", + "label": "data1", + "valueType": "string", + "required": true, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "selectedTypeIndex": 0, + "renderTypeList": ["reference"], + "value": ["start", "userChatInput"], + "canEdit": true + }, + { + "key": "data2", + "label": "data2", + "valueType": "string", + "required": true, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "selectedTypeIndex": 0, + "renderTypeList": ["reference"], + "value": ["start", "userChatInput"], + "canEdit": true + }, + { + "key": "codeType", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"], + "value": "js" + }, + { + "key": "code", + "label": "", + "valueType": "string", + "renderTypeList": ["custom"], + "value": "function main({data1, data2}){\n \n return {\n result: data1,\n data2\n }\n}" + } + ], + "outputs": [ + { + "id": "score", + "key": "score", + "type": "dynamic", + "valueType": "number", + "label": "Score" + }, + { + "id": "system_addOutputParam", + "key": "system_addOutputParam", + "type": "dynamic", + "valueType": "dynamic", + "label": "", + "description": "workflow:pass_returned_object_as_output_to_next_nodes", + "customFieldConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": false, + "showDescription": false + } + }, + { + "id": "system_rawResponse", + "key": "system_rawResponse", + "type": "static", + "valueType": "object", + "label": "workflow:full_response_data" + }, + { + "id": "qLUQfhG0ILRX", + "key": "result", + "type": "dynamic", + "valueType": "string", + "label": "result" + }, + { + "id": "gR0mkQpJ4Og8", + "key": "data2", + "type": "dynamic", + "valueType": "string", + "label": "data2" + }, + { + "id": "error", + "key": "error", + "type": "error", + "valueType": "string", + "label": "workflow:error_text" + } + ], + "nodeId": "code" + }, + { + "flowNodeType": "answerNode", + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "name": "workflow:assigned_reply", + "intro": "workflow:intro_assigned_reply", + "inputs": [ + { + "key": "text", + "label": "common:core.module.input.label.Response content", + "valueType": "any", + "required": true, + "isRichText": false, + "placeholder": "common:core.module.input.description.Response content", + "maxLength": 100000, + "selectedTypeIndex": 0, + "renderTypeList": ["textarea", "reference"], + "value": "recover", + "description": "common:core.module.input.description.Response content" + } + ], + "outputs": [], + "nodeId": "recover" + } + ], + "edges": [ + { + "source": "start", + "sourceHandle": "start-source-right", + "target": "code", + "targetHandle": "code-target-left" + }, + { + "source": "code", + "sourceHandle": "code-source_catch-right", + "target": "recover", + "targetHandle": "recover-target-left" + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/dynamic-io-catch/workflow.json b/packages/workflow-core/test/fixtures/dynamic-io-catch/workflow.json new file mode 100644 index 000000000000..a72a81274c4c --- /dev/null +++ b/packages/workflow-core/test/fixtures/dynamic-io-catch/workflow.json @@ -0,0 +1,265 @@ +{ + "schemaVersion": "fastgpt-workflow/v1", + "app": {}, + "nodes": [ + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "workflow:template.workflow_start", + "inputs": [ + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "workflow:user_question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "common:core.module.input.label.user question" + } + ], + "nodeId": "start" + }, + { + "flowNodeType": "code", + "avatar": "core/workflow/template/codeRun", + "avatarLinear": "core/workflow/template/codeRunLinear", + "colorSchema": "lime", + "name": "workflow:code_execution", + "intro": "workflow:code_sandbox_intro", + "showStatus": true, + "catchError": true, + "inputs": [ + { + "key": "system_addInputParam", + "label": "", + "valueType": "dynamic", + "required": false, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "renderTypeList": ["addInputParam"], + "description": "workflow:these_variables_will_be_input_parameters_for_code_execution" + }, + { + "key": "data1", + "label": "data1", + "valueType": "string", + "required": true, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "renderTypeList": ["reference"], + "canEdit": true, + "value": ["start", "userChatInput"], + "selectedTypeIndex": 0 + }, + { + "key": "data2", + "label": "data2", + "valueType": "string", + "required": true, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": true, + "showDescription": false + }, + "renderTypeList": ["reference"], + "canEdit": true, + "value": ["start", "userChatInput"], + "selectedTypeIndex": 0 + }, + { + "key": "codeType", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"], + "value": "js" + }, + { + "key": "code", + "label": "", + "valueType": "string", + "renderTypeList": ["custom"], + "value": "function main({data1, data2}){\n \n return {\n result: data1,\n data2\n }\n}" + } + ], + "outputs": [ + { + "id": "score", + "key": "score", + "type": "dynamic", + "valueType": "number", + "label": "Score" + }, + { + "id": "system_addOutputParam", + "key": "system_addOutputParam", + "type": "dynamic", + "valueType": "dynamic", + "label": "", + "description": "workflow:pass_returned_object_as_output_to_next_nodes", + "customFieldConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": false, + "showDescription": false + } + }, + { + "id": "system_rawResponse", + "key": "system_rawResponse", + "type": "static", + "valueType": "object", + "label": "workflow:full_response_data" + }, + { + "id": "qLUQfhG0ILRX", + "key": "result", + "type": "dynamic", + "valueType": "string", + "label": "result" + }, + { + "id": "gR0mkQpJ4Og8", + "key": "data2", + "type": "dynamic", + "valueType": "string", + "label": "data2" + }, + { + "id": "error", + "key": "error", + "type": "error", + "valueType": "string", + "label": "workflow:error_text" + } + ], + "nodeId": "code" + }, + { + "flowNodeType": "answerNode", + "avatar": "core/workflow/template/reply", + "avatarLinear": "core/workflow/template/replyLinear", + "colorSchema": "blue", + "name": "workflow:assigned_reply", + "intro": "workflow:intro_assigned_reply", + "inputs": [ + { + "key": "text", + "label": "common:core.module.input.label.Response content", + "valueType": "any", + "required": true, + "isRichText": false, + "placeholder": "common:core.module.input.description.Response content", + "maxLength": 100000, + "renderTypeList": ["textarea", "reference"], + "description": "common:core.module.input.description.Response content", + "value": "recover", + "selectedTypeIndex": 0 + } + ], + "outputs": [], + "nodeId": "recover" + } + ], + "executionEdges": [ + { + "source": { + "kind": "next", + "nodeId": "start" + }, + "target": { + "kind": "target", + "nodeId": "code" + } + }, + { + "source": { + "kind": "catch", + "nodeId": "code" + }, + "target": { + "kind": "target", + "nodeId": "recover" + } + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/nested-loop/expected-diagnostics.json b/packages/workflow-core/test/fixtures/nested-loop/expected-diagnostics.json new file mode 100644 index 000000000000..fe51488c7066 --- /dev/null +++ b/packages/workflow-core/test/fixtures/nested-loop/expected-diagnostics.json @@ -0,0 +1 @@ +[] diff --git a/packages/workflow-core/test/fixtures/nested-loop/store-workflow.json b/packages/workflow-core/test/fixtures/nested-loop/store-workflow.json new file mode 100644 index 000000000000..805efc98e888 --- /dev/null +++ b/packages/workflow-core/test/fixtures/nested-loop/store-workflow.json @@ -0,0 +1,229 @@ +{ + "nodes": [ + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "workflow:template.workflow_start", + "inputs": [ + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "workflow:user_question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "common:core.module.input.label.user question" + } + ], + "nodeId": "start" + }, + { + "flowNodeType": "loopRun", + "avatar": "core/workflow/template/loopRun", + "avatarLinear": "core/workflow/template/loopRunLinear", + "colorSchema": "loopRun", + "name": "workflow:loop_run", + "intro": "workflow:intro_loop_run", + "showStatus": true, + "catchError": false, + "inputs": [ + { + "key": "loopRunMode", + "label": "workflow:loop_run_mode", + "valueType": "string", + "required": true, + "list": [ + { + "label": "workflow:loop_run_mode_array", + "value": "array", + "icon": "core/workflow/inputType/array", + "description": "workflow:loop_run_mode_array_desc" + }, + { + "label": "workflow:loop_run_mode_conditional", + "value": "conditional", + "icon": "core/workflow/inputType/conditional", + "description": "workflow:loop_run_mode_conditional_desc" + } + ], + "selectedTypeIndex": 0, + "renderTypeList": ["select"], + "value": "conditional", + "description": "workflow:loop_run_mode_tip" + }, + { + "key": "loopRunInputArray", + "label": "workflow:loop_run_input_array", + "valueType": "arrayAny", + "required": true, + "renderTypeList": ["reference"], + "value": [] + }, + { + "key": "loopCustomOutputs", + "label": "workflow:loop_custom_outputs", + "valueType": "dynamic", + "required": false, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": false, + "showDescription": false, + "hideBottomDivider": true + }, + "renderTypeList": ["addInputParam"], + "description": "workflow:loop_custom_outputs_tip" + }, + { + "key": "childrenNodeIdList", + "label": "", + "valueType": "arrayString", + "renderTypeList": ["hidden"], + "value": ["loop__start", "break"] + }, + { + "key": "nodeWidth", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"], + "value": 900 + }, + { + "key": "nodeHeight", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"], + "value": 500 + }, + { + "key": "loopNodeInputHeight", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"], + "value": 320 + } + ], + "outputs": [ + { + "id": "system_error_text", + "key": "system_error_text", + "type": "error", + "valueType": "string", + "label": "workflow:error_text" + } + ], + "nodeId": "loop" + }, + { + "parentNodeId": "loop", + "flowNodeType": "loopRunStart", + "avatar": "core/workflow/template/loopRunStart", + "avatarLinear": "core/workflow/template/loopRunStartLinear", + "colorSchema": "loopRun", + "name": "workflow:loop_run_start", + "showStatus": false, + "inputs": [ + { + "key": "loopRunMode", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"], + "value": "array" + }, + { + "key": "loopStartInput", + "label": "", + "valueType": "any", + "renderTypeList": ["hidden"], + "value": "" + }, + { + "key": "loopStartIndex", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + } + ], + "outputs": [ + { + "id": "currentIndex", + "key": "currentIndex", + "type": "static", + "valueType": "number", + "label": "workflow:current_index", + "description": "workflow:current_index_desc" + }, + { + "id": "currentItem", + "key": "currentItem", + "type": "static", + "valueType": "any", + "label": "workflow:current_item", + "description": "workflow:current_item_desc" + }, + { + "id": "currentIteration", + "key": "currentIteration", + "type": "static", + "valueType": "number", + "label": "workflow:current_iteration", + "description": "workflow:current_iteration_desc" + } + ], + "nodeId": "loop__start" + }, + { + "parentNodeId": "loop", + "flowNodeType": "loopRunBreak", + "avatar": "core/workflow/template/loopRunBreak", + "avatarLinear": "core/workflow/template/loopRunBreakLinear", + "colorSchema": "loopRun", + "name": "workflow:loop_run_break", + "intro": "workflow:loop_run_break_tip", + "showStatus": false, + "inputs": [], + "outputs": [], + "nodeId": "break" + } + ], + "edges": [ + { + "source": "start", + "sourceHandle": "start-source-right", + "target": "loop", + "targetHandle": "loop-target-left" + }, + { + "source": "loop__start", + "sourceHandle": "loop__start-source-right", + "target": "break", + "targetHandle": "break-target-left" + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/nested-loop/workflow.json b/packages/workflow-core/test/fixtures/nested-loop/workflow.json new file mode 100644 index 000000000000..fe3ee9092ed2 --- /dev/null +++ b/packages/workflow-core/test/fixtures/nested-loop/workflow.json @@ -0,0 +1,239 @@ +{ + "schemaVersion": "fastgpt-workflow/v1", + "app": {}, + "nodes": [ + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "workflow:template.workflow_start", + "inputs": [ + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "workflow:user_question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "common:core.module.input.label.user question" + } + ], + "nodeId": "start" + }, + { + "flowNodeType": "loopRun", + "avatar": "core/workflow/template/loopRun", + "avatarLinear": "core/workflow/template/loopRunLinear", + "colorSchema": "loopRun", + "name": "workflow:loop_run", + "intro": "workflow:intro_loop_run", + "showStatus": true, + "catchError": false, + "inputs": [ + { + "key": "loopRunMode", + "label": "workflow:loop_run_mode", + "valueType": "string", + "required": true, + "list": [ + { + "label": "workflow:loop_run_mode_array", + "value": "array", + "icon": "core/workflow/inputType/array", + "description": "workflow:loop_run_mode_array_desc" + }, + { + "label": "workflow:loop_run_mode_conditional", + "value": "conditional", + "icon": "core/workflow/inputType/conditional", + "description": "workflow:loop_run_mode_conditional_desc" + } + ], + "renderTypeList": ["select"], + "value": "conditional", + "description": "workflow:loop_run_mode_tip", + "selectedTypeIndex": 0 + }, + { + "key": "loopRunInputArray", + "label": "workflow:loop_run_input_array", + "valueType": "arrayAny", + "required": true, + "renderTypeList": ["reference"], + "value": [] + }, + { + "key": "loopCustomOutputs", + "label": "workflow:loop_custom_outputs", + "valueType": "dynamic", + "required": false, + "customInputConfig": { + "selectValueTypeList": [ + "string", + "number", + "boolean", + "object", + "arrayString", + "arrayNumber", + "arrayBoolean", + "arrayObject", + "arrayAny", + "any", + "chatHistory", + "datasetQuote", + "dynamic", + "selectDataset", + "selectApp" + ], + "showDefaultValue": false, + "showDescription": false, + "hideBottomDivider": true + }, + "renderTypeList": ["addInputParam"], + "description": "workflow:loop_custom_outputs_tip" + }, + { + "key": "childrenNodeIdList", + "label": "", + "valueType": "arrayString", + "renderTypeList": ["hidden"], + "value": ["loop__start", "break"] + }, + { + "key": "nodeWidth", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"], + "value": 900 + }, + { + "key": "nodeHeight", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"], + "value": 500 + }, + { + "key": "loopNodeInputHeight", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"], + "value": 320 + } + ], + "outputs": [ + { + "id": "system_error_text", + "key": "system_error_text", + "type": "error", + "valueType": "string", + "label": "workflow:error_text" + } + ], + "nodeId": "loop" + }, + { + "parentNodeId": "loop", + "flowNodeType": "loopRunStart", + "avatar": "core/workflow/template/loopRunStart", + "avatarLinear": "core/workflow/template/loopRunStartLinear", + "colorSchema": "loopRun", + "name": "workflow:loop_run_start", + "showStatus": false, + "inputs": [ + { + "key": "loopRunMode", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"], + "value": "array" + }, + { + "key": "loopStartInput", + "label": "", + "valueType": "any", + "renderTypeList": ["hidden"], + "value": "" + }, + { + "key": "loopStartIndex", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + } + ], + "outputs": [ + { + "id": "currentIndex", + "key": "currentIndex", + "type": "static", + "valueType": "number", + "label": "workflow:current_index", + "description": "workflow:current_index_desc" + }, + { + "id": "currentItem", + "key": "currentItem", + "type": "static", + "valueType": "any", + "label": "workflow:current_item", + "description": "workflow:current_item_desc" + }, + { + "id": "currentIteration", + "key": "currentIteration", + "type": "static", + "valueType": "number", + "label": "workflow:current_iteration", + "description": "workflow:current_iteration_desc" + } + ], + "nodeId": "loop__start" + }, + { + "parentNodeId": "loop", + "flowNodeType": "loopRunBreak", + "avatar": "core/workflow/template/loopRunBreak", + "avatarLinear": "core/workflow/template/loopRunBreakLinear", + "colorSchema": "loopRun", + "name": "workflow:loop_run_break", + "intro": "workflow:loop_run_break_tip", + "showStatus": false, + "inputs": [], + "outputs": [], + "nodeId": "break" + } + ], + "executionEdges": [ + { + "source": { + "kind": "next", + "nodeId": "start" + }, + "target": { + "kind": "target", + "nodeId": "loop" + } + }, + { + "source": { + "kind": "next", + "nodeId": "loop__start" + }, + "target": { + "kind": "target", + "nodeId": "break" + } + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/pr3.ts b/packages/workflow-core/test/fixtures/pr3.ts new file mode 100644 index 000000000000..8fcbc4381fe5 --- /dev/null +++ b/packages/workflow-core/test/fixtures/pr3.ts @@ -0,0 +1,195 @@ +import { + applyWorkflowCommand, + builtinTemplateProvider, + createWorkflowDocument, + FlowNodeOutputTypeEnum, + parseNodeTemplateRef, + WorkflowIOValueTypeEnum, + type WorkflowCommand, + type WorkflowDocument +} from '../../src'; +import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import { VariableConditionEnum } from '@fastgpt/global/core/workflow/template/system/ifElse/constant'; +import { LoopRunModeEnum } from '@fastgpt/global/core/workflow/template/system/loopRun/loopRun'; + +const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; + +const apply = async (document: WorkflowDocument, command: WorkflowCommand) => + (await applyWorkflowCommand({ document, command, dependencies })).document; + +const addStart = () => + apply(createWorkflowDocument(), { + type: 'node.add', + nodeId: 'start', + template: parseNodeTemplateRef('builtin:workflow-start') + }); + +const addAnswer = async ({ + document, + nodeId, + source +}: { + document: WorkflowDocument; + nodeId: string; + source: WorkflowCommand & { type: 'edge.connect' }; +}) => { + let next = await apply(document, { + type: 'node.add', + nodeId, + template: parseNodeTemplateRef('builtin:assigned-answer') + }); + next = await apply(next, source); + return apply(next, { + type: 'input.set', + nodeId, + inputKey: NodeInputKeyEnum.answerText, + value: nodeId + }); +}; + +export const createBranchingFixture = async () => { + let document = await addStart(); + document = await apply(document, { + type: 'node.add', + nodeId: 'route', + template: parseNodeTemplateRef('builtin:if-else'), + connectFrom: { kind: 'next', nodeId: 'start' } + }); + document = await apply(document, { + type: 'input.set', + nodeId: 'route', + inputKey: NodeInputKeyEnum.ifElseList, + value: [ + { + branchId: 'positive', + condition: 'AND', + list: [ + { + variable: ['start', 'userChatInput'], + condition: VariableConditionEnum.isNotEmpty, + valueType: 'input' + } + ] + } + ] + }); + document = await addAnswer({ + document, + nodeId: 'yes', + source: { + type: 'edge.connect', + edge: { + source: { kind: 'branch', nodeId: 'route', branchKey: 'positive' }, + target: { kind: 'target', nodeId: 'yes' } + } + } + }); + return addAnswer({ + document, + nodeId: 'fallback', + source: { + type: 'edge.connect', + edge: { + source: { kind: 'branch', nodeId: 'route', branchKey: 'ELSE' }, + target: { kind: 'target', nodeId: 'fallback' } + } + } + }); +}; + +export const createToolCallToolsFixture = async () => { + let document = await addStart(); + document = await apply(document, { + type: 'node.add', + nodeId: 'caller', + template: parseNodeTemplateRef('builtin:tool-call'), + connectFrom: { kind: 'next', nodeId: 'start' } + }); + return apply(document, { + type: 'tool.attach', + toolCallNodeId: 'caller', + template: parseNodeTemplateRef('builtin:user-select'), + newNodeId: 'confirm' + }); +}; + +export const createNestedLoopFixture = async () => { + let document = await addStart(); + document = await apply(document, { + type: 'node.add', + nodeId: 'loop', + template: parseNodeTemplateRef('builtin:loop-run'), + connectFrom: { kind: 'next', nodeId: 'start' } + }); + document = await apply(document, { + type: 'input.set', + nodeId: 'loop', + inputKey: NodeInputKeyEnum.loopRunMode, + value: LoopRunModeEnum.conditional + }); + document = await apply(document, { + type: 'node.add', + nodeId: 'break', + template: parseNodeTemplateRef('builtin:loop-run-break'), + parentNodeId: 'loop' + }); + return apply(document, { + type: 'edge.connect', + edge: { + source: { kind: 'next', nodeId: 'loop__start' }, + target: { kind: 'target', nodeId: 'break' } + } + }); +}; + +export const createDynamicIoCatchFixture = async () => { + let document = await addStart(); + document = await apply(document, { + type: 'node.add', + nodeId: 'code', + template: parseNodeTemplateRef('builtin:code'), + connectFrom: { kind: 'next', nodeId: 'start' } + }); + document = await apply(document, { + type: 'node.update', + nodeId: 'code', + catchError: true + }); + for (const inputKey of ['data1', 'data2']) { + document = await apply(document, { + type: 'input.ref', + nodeId: 'code', + inputKey, + ref: { nodeId: 'start', outputKey: 'userChatInput' } + }); + } + document = await apply(document, { + type: 'output.add', + nodeId: 'code', + output: { + id: 'score', + key: 'score', + label: 'Score', + type: FlowNodeOutputTypeEnum.dynamic, + valueType: WorkflowIOValueTypeEnum.number + } + }); + return addAnswer({ + document, + nodeId: 'recover', + source: { + type: 'edge.connect', + edge: { + source: { kind: 'catch', nodeId: 'code' }, + target: { kind: 'target', nodeId: 'recover' } + } + } + }); +}; + +export const pr3FixtureFactories = { + branching: createBranchingFixture, + 'tool-call-tools': createToolCallToolsFixture, + 'nested-loop': createNestedLoopFixture, + 'dynamic-io-catch': createDynamicIoCatchFixture +}; diff --git a/packages/workflow-core/test/fixtures/tool-call-tools/expected-diagnostics.json b/packages/workflow-core/test/fixtures/tool-call-tools/expected-diagnostics.json new file mode 100644 index 000000000000..fe51488c7066 --- /dev/null +++ b/packages/workflow-core/test/fixtures/tool-call-tools/expected-diagnostics.json @@ -0,0 +1 @@ +[] diff --git a/packages/workflow-core/test/fixtures/tool-call-tools/store-workflow.json b/packages/workflow-core/test/fixtures/tool-call-tools/store-workflow.json new file mode 100644 index 000000000000..f4952b824162 --- /dev/null +++ b/packages/workflow-core/test/fixtures/tool-call-tools/store-workflow.json @@ -0,0 +1,265 @@ +{ + "nodes": [ + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "workflow:template.workflow_start", + "inputs": [ + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "workflow:user_question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "common:core.module.input.label.user question" + } + ], + "nodeId": "start" + }, + { + "flowNodeType": "tools", + "avatar": "core/workflow/template/toolCall", + "avatarLinear": "core/workflow/template/toolCallLinear", + "colorSchema": "indigo", + "name": "workflow:template.agent", + "intro": "workflow:template.agent_intro", + "showStatus": true, + "version": "4.9.2", + "catchError": false, + "inputs": [ + { + "key": "model", + "label": "common:core.module.input.label.aiModel", + "valueType": "string", + "renderTypeList": ["settingLLMModel", "reference"] + }, + { + "key": "temperature", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + }, + { + "key": "maxToken", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + }, + { + "key": "isResponseAnswerText", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatVision", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatAudio", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": false + }, + { + "key": "aiChatVideo", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": false + }, + { + "key": "aiChatExtractFiles", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatReasoning", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatReasoningEffort", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatTopP", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatStopSign", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatResponseFormat", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatJsonSchema", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "useAgentSandbox", + "label": "app:use_agent_sandbox", + "valueType": "boolean", + "renderTypeList": ["switch"], + "value": false, + "description": "app:use_computer_desc" + }, + { + "key": "sandboxEntrypoint", + "label": "", + "valueType": "string", + "renderTypeList": ["custom"] + }, + { + "key": "systemPrompt", + "label": "common:core.ai.Prompt", + "valueType": "string", + "isRichText": true, + "placeholder": "common:core.app.tip.chatNodeSystemPromptTip", + "maxLength": 100000, + "renderTypeList": ["textarea", "reference"], + "description": "common:core.app.tip.systemPromptTip" + }, + { + "key": "history", + "label": "common:core.module.input.label.chat history", + "valueType": "chatHistory", + "required": true, + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "value": 6, + "description": "workflow:max_dialog_rounds" + }, + { + "key": "fileUrlList", + "label": "app:workflow.user_file_input", + "valueType": "arrayString", + "renderTypeList": ["reference", "input"], + "debugLabel": "app:workflow.user_file_input", + "description": "app:workflow.user_file_input_desc" + }, + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "selectedTypeIndex": 0, + "renderTypeList": ["reference", "textarea"], + "value": ["start", "userChatInput"], + "toolDescription": "user question" + } + ], + "outputs": [ + { + "id": "answerText", + "key": "answerText", + "type": "static", + "valueType": "string", + "label": "common:core.module.output.label.Ai response content", + "description": "common:core.module.output.description.Ai response content" + }, + { + "id": "system_error_text", + "key": "system_error_text", + "type": "error", + "valueType": "string", + "label": "workflow:error_text" + } + ], + "nodeId": "caller" + }, + { + "flowNodeType": "userSelect", + "avatar": "core/workflow/template/userSelect", + "avatarLinear": "core/workflow/template/userSelectLinear", + "colorSchema": "green", + "name": "app:workflow.user_select", + "intro": "app:workflow.user_select_tip", + "inputs": [ + { + "key": "description", + "label": "app:workflow.select_description", + "valueType": "string", + "placeholder": "app:workflow.select_description_placeholder", + "renderTypeList": ["textarea"], + "description": "app:workflow.select_description_tip" + }, + { + "key": "userSelectOptions", + "label": "", + "valueType": "any", + "renderTypeList": ["custom"], + "value": [ + { + "value": "Confirm", + "key": "option1" + }, + { + "value": "Cancel", + "key": "option2" + } + ] + } + ], + "outputs": [ + { + "id": "selectResult", + "key": "selectResult", + "type": "static", + "valueType": "string", + "label": "app:workflow.select_result", + "required": true + } + ], + "nodeId": "confirm" + } + ], + "edges": [ + { + "source": "start", + "sourceHandle": "start-source-right", + "target": "caller", + "targetHandle": "caller-target-left" + }, + { + "source": "caller", + "sourceHandle": "selectedTools", + "target": "confirm", + "targetHandle": "selectedTools" + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/fixtures/tool-call-tools/workflow.json b/packages/workflow-core/test/fixtures/tool-call-tools/workflow.json new file mode 100644 index 000000000000..f74d06f0e874 --- /dev/null +++ b/packages/workflow-core/test/fixtures/tool-call-tools/workflow.json @@ -0,0 +1,275 @@ +{ + "schemaVersion": "fastgpt-workflow/v1", + "app": {}, + "nodes": [ + { + "flowNodeType": "workflowStart", + "avatar": "core/workflow/template/workflowStart", + "avatarLinear": "core/workflow/template/workflowStartLinear", + "colorSchema": "blue", + "name": "workflow:template.workflow_start", + "inputs": [ + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "workflow:user_question" + } + ], + "outputs": [ + { + "id": "userChatInput", + "key": "userChatInput", + "type": "static", + "valueType": "string", + "label": "common:core.module.input.label.user question" + } + ], + "nodeId": "start" + }, + { + "flowNodeType": "tools", + "avatar": "core/workflow/template/toolCall", + "avatarLinear": "core/workflow/template/toolCallLinear", + "colorSchema": "indigo", + "name": "workflow:template.agent", + "intro": "workflow:template.agent_intro", + "showStatus": true, + "version": "4.9.2", + "catchError": false, + "inputs": [ + { + "key": "model", + "label": "common:core.module.input.label.aiModel", + "valueType": "string", + "renderTypeList": ["settingLLMModel", "reference"] + }, + { + "key": "temperature", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + }, + { + "key": "maxToken", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + }, + { + "key": "isResponseAnswerText", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatVision", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatAudio", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": false + }, + { + "key": "aiChatVideo", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": false + }, + { + "key": "aiChatExtractFiles", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatReasoning", + "label": "", + "valueType": "boolean", + "renderTypeList": ["hidden"], + "value": true + }, + { + "key": "aiChatReasoningEffort", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatTopP", + "label": "", + "valueType": "number", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatStopSign", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatResponseFormat", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "aiChatJsonSchema", + "label": "", + "valueType": "string", + "renderTypeList": ["hidden"] + }, + { + "key": "useAgentSandbox", + "label": "app:use_agent_sandbox", + "valueType": "boolean", + "renderTypeList": ["switch"], + "value": false, + "description": "app:use_computer_desc" + }, + { + "key": "sandboxEntrypoint", + "label": "", + "valueType": "string", + "renderTypeList": ["custom"] + }, + { + "key": "systemPrompt", + "label": "common:core.ai.Prompt", + "valueType": "string", + "isRichText": true, + "placeholder": "common:core.app.tip.chatNodeSystemPromptTip", + "maxLength": 100000, + "renderTypeList": ["textarea", "reference"], + "description": "common:core.app.tip.systemPromptTip" + }, + { + "key": "history", + "label": "common:core.module.input.label.chat history", + "valueType": "chatHistory", + "required": true, + "max": 50, + "min": 0, + "renderTypeList": ["numberInput", "reference"], + "value": 6, + "description": "workflow:max_dialog_rounds" + }, + { + "key": "fileUrlList", + "label": "app:workflow.user_file_input", + "valueType": "arrayString", + "renderTypeList": ["reference", "input"], + "debugLabel": "app:workflow.user_file_input", + "description": "app:workflow.user_file_input_desc" + }, + { + "key": "userChatInput", + "label": "workflow:user_question", + "valueType": "string", + "required": true, + "renderTypeList": ["reference", "textarea"], + "toolDescription": "user question", + "value": ["start", "userChatInput"], + "selectedTypeIndex": 0 + } + ], + "outputs": [ + { + "id": "answerText", + "key": "answerText", + "type": "static", + "valueType": "string", + "label": "common:core.module.output.label.Ai response content", + "description": "common:core.module.output.description.Ai response content" + }, + { + "id": "system_error_text", + "key": "system_error_text", + "type": "error", + "valueType": "string", + "label": "workflow:error_text" + } + ], + "nodeId": "caller" + }, + { + "flowNodeType": "userSelect", + "avatar": "core/workflow/template/userSelect", + "avatarLinear": "core/workflow/template/userSelectLinear", + "colorSchema": "green", + "name": "app:workflow.user_select", + "intro": "app:workflow.user_select_tip", + "inputs": [ + { + "key": "description", + "label": "app:workflow.select_description", + "valueType": "string", + "placeholder": "app:workflow.select_description_placeholder", + "renderTypeList": ["textarea"], + "description": "app:workflow.select_description_tip" + }, + { + "key": "userSelectOptions", + "label": "", + "valueType": "any", + "renderTypeList": ["custom"], + "value": [ + { + "value": "Confirm", + "key": "option1" + }, + { + "value": "Cancel", + "key": "option2" + } + ] + } + ], + "outputs": [ + { + "id": "selectResult", + "key": "selectResult", + "type": "static", + "valueType": "string", + "label": "app:workflow.select_result", + "required": true + } + ], + "nodeId": "confirm" + } + ], + "executionEdges": [ + { + "source": { + "kind": "next", + "nodeId": "start" + }, + "target": { + "kind": "target", + "nodeId": "caller" + } + }, + { + "source": { + "kind": "selectedTools", + "nodeId": "caller" + }, + "target": { + "kind": "selectedTools", + "nodeId": "confirm" + } + } + ], + "chatConfig": {} +} diff --git a/packages/workflow-core/test/reference/codec.test.ts b/packages/workflow-core/test/reference/codec.test.ts new file mode 100644 index 000000000000..763fe2f92e6c --- /dev/null +++ b/packages/workflow-core/test/reference/codec.test.ts @@ -0,0 +1,70 @@ +import { VARIABLE_NODE_ID } from '@fastgpt/global/core/workflow/constants'; +import { WorkflowDocumentSchema } from '../../src'; +import { + decodeWorkflowNodeReferences, + encodeWorkflowNodeReferences +} from '../../src/reference/codec'; +import commonLinearWorkflow from '../fixtures/common-linear/workflow.json'; +import { describe, expect, it } from 'vitest'; + +describe('workflow reference codec', () => { + const createNodes = () => { + const document = WorkflowDocumentSchema.parse(commonLinearWorkflow); + const answerInput = document.nodes + .find((node) => node.nodeId === 'answer')! + .inputs.find((input) => input.key === 'text')!; + answerInput.value = ['code', 'result']; + + const httpHeaderInput = document.nodes + .find((node) => node.nodeId === 'http')! + .inputs.find((input) => input.key === 'system_httpHeader')!; + httpHeaderInput.value = [ + { + key: 'x-result', + value: + 'Result: {{$code.result$}}; Global: {{$VARIABLE_NODE_ID.globalResult$}}; Missing: {{$missing.result$}}', + nested: { + refs: [ + ['code', 'result'], + [VARIABLE_NODE_ID, 'globalResult'], + ['missing', 'result'] + ] + } + } + ]; + return document.nodes; + }; + + it('encodes output keys recursively without mutating the document nodes', () => { + const nodes = createNodes(); + const encodedNodes = encodeWorkflowNodeReferences(nodes); + const encodedAnswerInput = encodedNodes + .find((node) => node.nodeId === 'answer')! + .inputs.find((input) => input.key === 'text')!; + const encodedHeaders = encodedNodes + .find((node) => node.nodeId === 'http')! + .inputs.find((input) => input.key === 'system_httpHeader')!.value as Array<{ + value: string; + nested: { refs: string[][] }; + }>; + + expect(encodedAnswerInput.value).toEqual(['code', 'qLUQfhG0ILRX']); + expect(encodedHeaders[0].value).toBe( + 'Result: {{$code.qLUQfhG0ILRX$}}; Global: {{$VARIABLE_NODE_ID.globalResult$}}; Missing: {{$missing.result$}}' + ); + expect(encodedHeaders[0].nested.refs).toEqual([ + ['code', 'qLUQfhG0ILRX'], + [VARIABLE_NODE_ID, 'globalResult'], + ['missing', 'result'] + ]); + expect( + nodes.find((node) => node.nodeId === 'answer')!.inputs.find((input) => input.key === 'text')! + .value + ).toEqual(['code', 'result']); + }); + + it('decodes output ids back to stable output keys', () => { + const nodes = createNodes(); + expect(decodeWorkflowNodeReferences(encodeWorkflowNodeReferences(nodes))).toEqual(nodes); + }); +}); diff --git a/packages/workflow-core/test/reference/service.test.ts b/packages/workflow-core/test/reference/service.test.ts new file mode 100644 index 000000000000..e7c39f4fb3d1 --- /dev/null +++ b/packages/workflow-core/test/reference/service.test.ts @@ -0,0 +1,104 @@ +import { + WorkflowCommandError, + WorkflowDocumentSchema, + WorkflowIOValueTypeEnum, + areWorkflowValueTypesCompatible, + setInputReference, + setInputValue +} from '../../src'; +import aiWorkflow from '../fixtures/basic-ai/workflow.json'; +import { beforeEach, describe, expect, it } from 'vitest'; + +describe('input mutation services', () => { + let document: ReturnType; + + beforeEach(() => { + document = WorkflowDocumentSchema.parse(aiWorkflow); + }); + + it('validates node, input, configurability, mode and scalar type', () => { + expect(() => + setInputValue({ document, nodeId: 'missing', inputKey: 'model', value: 'x' }) + ).toThrow(WorkflowCommandError); + expect(() => + setInputValue({ document, nodeId: 'ai', inputKey: 'missing', value: 'x' }) + ).toThrow(WorkflowCommandError); + + const model = document.nodes.find((node) => node.nodeId === 'ai')!.inputs[0]; + model.canEdit = false; + expect(() => + setInputValue({ document, nodeId: 'ai', inputKey: model.key, value: 'x' }) + ).toThrow(WorkflowCommandError); + model.canEdit = true; + + expect(() => + setInputValue({ document, nodeId: 'ai', inputKey: 'maxToken', value: '100' }) + ).toThrow(WorkflowCommandError); + setInputValue({ document, nodeId: 'ai', inputKey: 'maxToken', value: 100 }); + expect( + document.nodes + .find((node) => node.nodeId === 'ai')! + .inputs.find((input) => input.key === 'maxToken')?.value + ).toBe(100); + }); + + it('validates reference mode, source output and value type', () => { + expect(() => + setInputReference({ + document, + nodeId: 'ai', + inputKey: 'maxToken', + ref: { nodeId: 'start', outputKey: 'userChatInput' } + }) + ).toThrow(WorkflowCommandError); + expect(() => + setInputReference({ + document, + nodeId: 'ai', + inputKey: 'userChatInput', + ref: { nodeId: 'start', outputKey: 'missing' } + }) + ).toThrow(WorkflowCommandError); + expect(() => + setInputReference({ + document, + nodeId: 'ai', + inputKey: 'fileUrlList', + ref: { nodeId: 'start', outputKey: 'userChatInput' } + }) + ).toThrow(WorkflowCommandError); + expect(() => + setInputReference({ + document, + nodeId: 'ai', + inputKey: 'userChatInput', + ref: { nodeId: 'ai', outputKey: 'answerText' } + }) + ).toThrow(WorkflowCommandError); + }); +}); + +describe('areWorkflowValueTypesCompatible', () => { + it('accepts scalar items only for aggregate references', () => { + expect( + areWorkflowValueTypesCompatible({ + expected: WorkflowIOValueTypeEnum.arrayString, + actual: WorkflowIOValueTypeEnum.string, + collection: true + }) + ).toBe(true); + expect( + areWorkflowValueTypesCompatible({ + expected: WorkflowIOValueTypeEnum.arrayString, + actual: WorkflowIOValueTypeEnum.string + }) + ).toBe(false); + expect( + areWorkflowValueTypesCompatible({ + expected: WorkflowIOValueTypeEnum.arrayString, + actual: WorkflowIOValueTypeEnum.number, + collection: true + }) + ).toBe(false); + }); +}); diff --git a/packages/workflow-core/test/store/roundtrip.test.ts b/packages/workflow-core/test/store/roundtrip.test.ts new file mode 100644 index 000000000000..f280f89eaf64 --- /dev/null +++ b/packages/workflow-core/test/store/roundtrip.test.ts @@ -0,0 +1,90 @@ +import { + WorkflowDocumentSchema, + compileStoreWorkflow, + decompileStoreWorkflow, + getWorkflowChecksum, + normalizeWorkflowDocument, + validateWorkflow +} from '../../src'; +import { WorkflowTemplateBasicTypeSchema } from '@fastgpt/global/core/workflow/type'; +import aiStore from '../fixtures/basic-ai/store-workflow.json'; +import aiWorkflow from '../fixtures/basic-ai/workflow.json'; +import staticStore from '../fixtures/basic-static/store-workflow.json'; +import staticWorkflow from '../fixtures/basic-static/workflow.json'; +import commonLinearStore from '../fixtures/common-linear/store-workflow.json'; +import commonLinearWorkflow from '../fixtures/common-linear/workflow.json'; +import branchingStore from '../fixtures/branching/store-workflow.json'; +import branchingWorkflow from '../fixtures/branching/workflow.json'; +import toolCallToolsStore from '../fixtures/tool-call-tools/store-workflow.json'; +import toolCallToolsWorkflow from '../fixtures/tool-call-tools/workflow.json'; +import nestedLoopStore from '../fixtures/nested-loop/store-workflow.json'; +import nestedLoopWorkflow from '../fixtures/nested-loop/workflow.json'; +import dynamicIoCatchStore from '../fixtures/dynamic-io-catch/store-workflow.json'; +import dynamicIoCatchWorkflow from '../fixtures/dynamic-io-catch/workflow.json'; +import { describe, expect, it } from 'vitest'; + +describe('StoreWorkflow round-trip', () => { + it.each([ + ['basic-ai', aiStore, aiWorkflow], + ['basic-static', staticStore, staticWorkflow], + ['common-linear', commonLinearStore, commonLinearWorkflow], + ['branching', branchingStore, branchingWorkflow], + ['tool-call-tools', toolCallToolsStore, toolCallToolsWorkflow], + ['nested-loop', nestedLoopStore, nestedLoopWorkflow], + ['dynamic-io-catch', dynamicIoCatchStore, dynamicIoCatchWorkflow] + ])('preserves %s semantics', (_name, store, workflow) => { + const parsedStore = WorkflowTemplateBasicTypeSchema.parse(store); + const parsedWorkflow = WorkflowDocumentSchema.parse(workflow); + const document = decompileStoreWorkflow({ workflow: parsedStore, app: parsedWorkflow.app }); + expect(compileStoreWorkflow(document)).toEqual(parsedStore); + expect(normalizeWorkflowDocument(document)).toEqual(normalizeWorkflowDocument(parsedWorkflow)); + expect(validateWorkflow(document)).toEqual([]); + }); + + it('computes the same checksum regardless of node and edge order', () => { + const parsedWorkflow = WorkflowDocumentSchema.parse(aiWorkflow); + const reversed = { + ...parsedWorkflow, + nodes: [...parsedWorkflow.nodes].reverse(), + executionEdges: [...parsedWorkflow.executionEdges].reverse() + }; + expect(getWorkflowChecksum(parsedWorkflow)).toBe(getWorkflowChecksum(reversed)); + }); + + it('compiles semantic output keys to Store output ids and decompiles them back', () => { + const document = WorkflowDocumentSchema.parse(commonLinearWorkflow); + const answerInput = document.nodes + .find((node) => node.nodeId === 'answer')! + .inputs.find((input) => input.key === 'text')!; + answerInput.value = ['code', 'result']; + + const requestUrlInput = document.nodes + .find((node) => node.nodeId === 'http')! + .inputs.find((input) => input.key === 'system_httpReqUrl')!; + requestUrlInput.value = 'https://example.com/{{$code.result$}}'; + + const store = compileStoreWorkflow(document); + expect( + store.nodes + .find((node) => node.nodeId === 'answer')! + .inputs.find((input) => input.key === 'text')!.value + ).toEqual(['code', 'qLUQfhG0ILRX']); + expect( + store.nodes + .find((node) => node.nodeId === 'http')! + .inputs.find((input) => input.key === 'system_httpReqUrl')!.value + ).toBe('https://example.com/{{$code.qLUQfhG0ILRX$}}'); + + const roundTripDocument = decompileStoreWorkflow({ workflow: store }); + expect( + roundTripDocument.nodes + .find((node) => node.nodeId === 'answer')! + .inputs.find((input) => input.key === 'text')!.value + ).toEqual(['code', 'result']); + expect( + roundTripDocument.nodes + .find((node) => node.nodeId === 'http')! + .inputs.find((input) => input.key === 'system_httpReqUrl')!.value + ).toBe('https://example.com/{{$code.result$}}'); + }); +}); diff --git a/packages/workflow-core/test/template/defaultValue.test.ts b/packages/workflow-core/test/template/defaultValue.test.ts new file mode 100644 index 000000000000..941907b838b2 --- /dev/null +++ b/packages/workflow-core/test/template/defaultValue.test.ts @@ -0,0 +1,80 @@ +import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; +import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import type { FlowNodeInputItemType } from '@fastgpt/global/core/workflow/type/io'; +import { getResourceSafeEmptyValue, hasConfiguredValue, resolveInitialInputValue } from '../../src'; +import { describe, expect, it } from 'vitest'; + +const createInput = (patch: Partial = {}): FlowNodeInputItemType => ({ + key: 'value', + label: 'Value', + renderTypeList: [FlowNodeInputTypeEnum.input], + valueType: WorkflowIOValueTypeEnum.string, + ...patch +}); + +describe('resolveInitialInputValue', () => { + it.each([ + { value: '', name: 'empty string' }, + { value: false, name: 'false' }, + { value: 0, name: 'zero' }, + { value: [], name: 'empty array' } + ])('keeps a validated remote $name instead of the template default', ({ value }) => { + expect( + resolveInitialInputValue({ + input: createInput({ value: 'template' }), + meta: { defaultPolicy: 'remoteValidated', resourceKind: 'model' }, + validatedRemoteDefault: { provided: true, value } + }) + ).toEqual(value); + }); + + it.each([ + { value: '', name: 'empty string' }, + { value: false, name: 'false' }, + { value: 0, name: 'zero' } + ])('keeps a safe template $name', ({ value }) => { + expect(resolveInitialInputValue({ input: createInput({ value }) })).toEqual(value); + }); + + it('never accepts template or remote defaults for user-required secrets', () => { + expect( + resolveInitialInputValue({ + input: createInput({ value: 'template-secret' }), + meta: { defaultPolicy: 'userRequired', resourceKind: 'secret' }, + validatedRemoteDefault: { provided: true, value: 'remote-secret' } + }) + ).toBeUndefined(); + }); + + it('maps unverified resources and array inputs to type-safe empty values', () => { + expect( + resolveInitialInputValue({ + input: createInput({ + value: [{ datasetId: 'template-dataset' }], + valueType: WorkflowIOValueTypeEnum.selectDataset + }), + meta: { defaultPolicy: 'remoteValidated', resourceKind: 'dataset' } + }) + ).toEqual([]); + expect( + resolveInitialInputValue({ + input: createInput({ value: 'template-model' }), + meta: { defaultPolicy: 'remoteValidated', resourceKind: 'model' } + }) + ).toBeUndefined(); + expect(getResourceSafeEmptyValue({ valueType: WorkflowIOValueTypeEnum.arrayString })).toEqual( + [] + ); + }); +}); + +describe('hasConfiguredValue', () => { + it('treats template empty values as available for deterministic Start references', () => { + expect(hasConfiguredValue(undefined)).toBe(false); + expect(hasConfiguredValue(null)).toBe(false); + expect(hasConfiguredValue('')).toBe(false); + expect(hasConfiguredValue([])).toBe(false); + expect(hasConfiguredValue(false)).toBe(true); + expect(hasConfiguredValue(0)).toBe(true); + }); +}); diff --git a/packages/workflow-core/test/template/template.test.ts b/packages/workflow-core/test/template/template.test.ts new file mode 100644 index 000000000000..f0b38c639972 --- /dev/null +++ b/packages/workflow-core/test/template/template.test.ts @@ -0,0 +1,292 @@ +import { + FlowNodeInputTypeEnum, + WorkflowIOValueTypeEnum, + WorkflowCommandError, + builtinTemplateProvider, + createWorkflowDocument, + formatNodeTemplateRef, + instantiateNodeFromTemplate, + normalizeNodeTemplateDescriptor, + parseNodeTemplateRef +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +describe('builtinTemplateProvider', () => { + it('exposes the PR1 through PR3 builtin templates', async () => { + await expect(builtinTemplateProvider.list({ locale: 'en' })).resolves.toEqual([ + { kind: 'builtin', templateId: 'workflow-start' }, + { kind: 'builtin', templateId: 'ai-chat' }, + { kind: 'builtin', templateId: 'text-editor' }, + { kind: 'builtin', templateId: 'assigned-answer' }, + { kind: 'builtin', templateId: 'dataset-search' }, + { kind: 'builtin', templateId: 'question-optimization' }, + { kind: 'builtin', templateId: 'content-extract' }, + { kind: 'builtin', templateId: 'http-request' }, + { kind: 'builtin', templateId: 'code' }, + { kind: 'builtin', templateId: 'call-app' }, + { kind: 'builtin', templateId: 'if-else' }, + { kind: 'builtin', templateId: 'question-classification' }, + { kind: 'builtin', templateId: 'user-select' }, + { kind: 'builtin', templateId: 'form-input' }, + { kind: 'builtin', templateId: 'tool-call' }, + { kind: 'builtin', templateId: 'read-files' }, + { kind: 'builtin', templateId: 'variable-update' }, + { kind: 'builtin', templateId: 'parallel-run' }, + { kind: 'builtin', templateId: 'loop-run' }, + { kind: 'builtin', templateId: 'loop-run-break' }, + { kind: 'builtin', templateId: 'dataset-concat' }, + { kind: 'builtin', templateId: 'custom-feedback' } + ]); + await expect( + builtinTemplateProvider.resolve(parseNodeTemplateRef('builtin:missing'), { locale: 'en' }) + ).rejects.toThrow(WorkflowCommandError); + }); + + it('publishes value schemas for common complex PR2 parameters', async () => { + const ref = parseNodeTemplateRef('builtin:http-request'); + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + const descriptor = normalizeNodeTemplateDescriptor({ + ...resolved, + templateRef: ref + }); + expect( + descriptor.inputs.find((input) => input.key === 'system_httpHeader')?.constraints?.valueSchema + ).toMatchObject({ type: 'array' }); + expect( + descriptor.inputs.find((input) => input.key === 'system_addInputParam')?.configurable + ).toBe(false); + }); + + it('keeps automation metadata aligned with template inputs and explicit for resources', async () => { + const resourceRenderTypes = new Map([ + [FlowNodeInputTypeEnum.selectDataset, 'dataset'], + [FlowNodeInputTypeEnum.selectLLMModel, 'model'], + [FlowNodeInputTypeEnum.settingLLMModel, 'model'], + [FlowNodeInputTypeEnum.selectApp, 'app'], + [FlowNodeInputTypeEnum.password, 'secret'] + ]); + for (const ref of await builtinTemplateProvider.list({ locale: 'en' })) { + const templateName = formatNodeTemplateRef(ref); + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + const inputKeys = new Set(resolved.template.inputs.map((input) => input.key)); + for (const [inputKey, meta] of Object.entries(resolved.automationMeta?.inputs ?? {})) { + expect(inputKeys.has(inputKey), `${templateName}.${inputKey}`).toBe(true); + if (meta.resourceKind !== undefined) { + expect(meta.defaultPolicy, `${templateName}.${inputKey}`).toBeDefined(); + } + if (meta.resourceKind === 'secret') { + expect(meta.defaultPolicy, `${templateName}.${inputKey}`).toBe('userRequired'); + } + } + for (const input of resolved.template.inputs) { + const resourceKind = input.renderTypeList + .map((renderType) => resourceRenderTypes.get(renderType)) + .find((value) => value !== undefined); + if (resourceKind !== undefined) { + expect( + resolved.automationMeta?.inputs?.[input.key], + `${templateName}.${input.key}` + ).toMatchObject({ resourceKind }); + } + } + } + }); +}); + +describe('normalizeNodeTemplateDescriptor', () => { + it('normalizes current template fields and automation metadata', async () => { + const ref = parseNodeTemplateRef('builtin:ai-chat'); + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + const descriptor = normalizeNodeTemplateDescriptor({ + ...resolved, + templateRef: ref, + translate: (value) => `translated:${value}` + }); + const userInput = descriptor.inputs.find((input) => input.key === 'userChatInput'); + const promptInput = descriptor.inputs.find((input) => input.key === 'systemPrompt'); + const modelInput = descriptor.inputs.find((input) => input.key === 'model'); + + expect(descriptor.name).toMatch(/^translated:/); + expect(userInput?.inputModes).toEqual(['literal', 'reference']); + expect(promptInput?.examples).toEqual(['You are a helpful assistant.']); + expect(modelInput).toMatchObject({ + defaultPolicy: 'remoteValidated', + resourceKind: 'model', + bindingRequired: false + }); + expect(modelInput?.examples).toBeUndefined(); + expect(descriptor.constraints.isTool).toBe(true); + expect(JSON.stringify(resolved.template)).not.toContain('invalidCondition'); + }); + + it('exposes explicit binding requirements without storing metadata in nodes', async () => { + const ref = parseNodeTemplateRef('builtin:http-request'); + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + const descriptor = normalizeNodeTemplateDescriptor({ + ...resolved, + templateRef: ref + }); + + expect(descriptor.inputs.find((input) => input.key === 'system_httpReqUrl')).toMatchObject({ + required: true, + bindingRequired: true, + defaultPolicy: 'userRequired' + }); + }); +}); + +describe('instantiateNodeFromTemplate', () => { + it('creates a complete store node with the current default reference', async () => { + const start = await instantiateNodeFromTemplate({ + document: createWorkflowDocument(), + templateRef: parseNodeTemplateRef('builtin:workflow-start'), + nodeId: 'start', + provider: builtinTemplateProvider, + locale: 'en' + }); + const document = createWorkflowDocument({ nodes: [start.node] }); + const ai = await instantiateNodeFromTemplate({ + document, + templateRef: parseNodeTemplateRef('builtin:ai-chat'), + nodeId: 'ai', + provider: builtinTemplateProvider, + locale: 'en' + }); + + expect(ai.node.inputs.length).toBeGreaterThan(10); + expect(ai.node.inputs.find((input) => input.key === 'userChatInput')?.value).toEqual([ + 'start', + 'userChatInput' + ]); + expect(JSON.stringify(ai.node)).not.toContain('agentHint'); + expect(JSON.stringify(ai.node)).not.toContain('examples'); + }); + + it('uses validated remote defaults and clears unverified resource template values', async () => { + const ref = parseNodeTemplateRef('builtin:ai-chat'); + const provider = { + list: builtinTemplateProvider.list, + resolve: async () => { + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + const template = structuredClone(resolved.template); + template.inputs.find((input) => input.key === 'model')!.value = 'template-model'; + return { + ...resolved, + template, + validatedInputDefaults: { + model: { provided: true as const, value: 'validated-model' } + } + }; + } + }; + const node = await instantiateNodeFromTemplate({ + document: createWorkflowDocument(), + templateRef: ref, + nodeId: 'ai', + provider, + locale: 'en' + }); + expect(node.node.inputs.find((input) => input.key === 'model')).toMatchObject({ + value: 'validated-model' + }); + + const localNode = await instantiateNodeFromTemplate({ + document: createWorkflowDocument(), + templateRef: ref, + nodeId: 'local-ai', + provider: { + ...provider, + resolve: async () => { + const resolved = await provider.resolve(); + return { ...resolved, validatedInputDefaults: undefined }; + } + }, + locale: 'en' + }); + const localModel = localNode.node.inputs.find((input) => input.key === 'model'); + expect(localModel?.value).toBeUndefined(); + expect(localModel?.defaultValue).toBeUndefined(); + }); + + it('does not create a mismatched Start reference for an array input', async () => { + const start = await instantiateNodeFromTemplate({ + document: createWorkflowDocument(), + templateRef: parseNodeTemplateRef('builtin:workflow-start'), + nodeId: 'start', + provider: builtinTemplateProvider, + locale: 'en' + }); + const ref = parseNodeTemplateRef('builtin:ai-chat'); + const provider = { + list: builtinTemplateProvider.list, + resolve: async () => { + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + const template = structuredClone(resolved.template); + const userInput = template.inputs.find((input) => input.key === 'userChatInput')!; + userInput.valueType = WorkflowIOValueTypeEnum.arrayString; + return { ...resolved, template }; + } + }; + const ai = await instantiateNodeFromTemplate({ + document: createWorkflowDocument({ nodes: [start.node] }), + templateRef: ref, + nodeId: 'ai', + provider, + locale: 'en' + }); + const userInput = ai.node.inputs.find((input) => input.key === 'userChatInput'); + expect(userInput?.value).toEqual([]); + expect(userInput?.selectedTypeIndex).toBeUndefined(); + }); + + it('keeps the composite Start reference for the array search input', async () => { + const start = await instantiateNodeFromTemplate({ + document: createWorkflowDocument(), + templateRef: parseNodeTemplateRef('builtin:workflow-start'), + nodeId: 'start', + provider: builtinTemplateProvider, + locale: 'en' + }); + const search = await instantiateNodeFromTemplate({ + document: createWorkflowDocument({ nodes: [start.node] }), + templateRef: parseNodeTemplateRef('builtin:dataset-search'), + nodeId: 'search', + provider: builtinTemplateProvider, + locale: 'en' + }); + expect(search.node.inputs.find((input) => input.key === 'datasetSearchInput')?.value).toEqual([ + ['start', 'userChatInput'] + ]); + expect(search.node.inputs.find((input) => input.key === 'datasets')?.value).toEqual([]); + }); + + it('rejects duplicate IDs and unique templates', async () => { + const start = await instantiateNodeFromTemplate({ + document: createWorkflowDocument(), + templateRef: parseNodeTemplateRef('builtin:workflow-start'), + nodeId: 'start', + provider: builtinTemplateProvider, + locale: 'en' + }); + const document = createWorkflowDocument({ nodes: [start.node] }); + + await expect( + instantiateNodeFromTemplate({ + document, + templateRef: parseNodeTemplateRef('builtin:ai-chat'), + nodeId: 'start', + provider: builtinTemplateProvider, + locale: 'en' + }) + ).rejects.toThrow(WorkflowCommandError); + await expect( + instantiateNodeFromTemplate({ + document, + templateRef: parseNodeTemplateRef('builtin:workflow-start'), + nodeId: 'other-start', + provider: builtinTemplateProvider, + locale: 'en' + }) + ).rejects.toThrow(WorkflowCommandError); + }); +}); diff --git a/packages/workflow-core/test/validation/validation.test.ts b/packages/workflow-core/test/validation/validation.test.ts new file mode 100644 index 000000000000..9a1c8a93b2c9 --- /dev/null +++ b/packages/workflow-core/test/validation/validation.test.ts @@ -0,0 +1,124 @@ +import { + VARIABLE_NODE_ID, + FlowNodeInputTypeEnum, + VariableInputEnum, + WorkflowDocumentSchema, + WorkflowIOValueTypeEnum, + applyWorkflowCommand, + builtinTemplateProvider, + createWorkflowDocument, + parseNodeTemplateRef, + type WorkflowDocument, + validateWorkflow +} from '../../src'; +import aiWorkflow from '../fixtures/basic-ai/workflow.json'; +import staticWorkflow from '../fixtures/basic-static/workflow.json'; +import commonLinearWorkflow from '../fixtures/common-linear/workflow.json'; +import { describe, expect, it } from 'vitest'; + +describe('validateWorkflow', () => { + it.each([aiWorkflow, staticWorkflow, commonLinearWorkflow])( + 'accepts a golden workflow', + (workflow) => { + expect(validateWorkflow(WorkflowDocumentSchema.parse(workflow))).toEqual([]); + } + ); + + it('reports duplicate IDs, missing start, unreachable nodes and required inputs', () => { + const broken: WorkflowDocument = structuredClone(WorkflowDocumentSchema.parse(staticWorkflow)); + broken.nodes = broken.nodes.filter((node) => node.nodeId !== 'start'); + broken.nodes[0].inputs[0].value = undefined; + broken.nodes.push({ ...broken.nodes[0], nodeId: broken.nodes[0].nodeId }); + broken.executionEdges = []; + const codes = validateWorkflow(broken).map((item) => item.code); + expect(codes).toContain('WORKFLOW_NODE_ID_DUPLICATED'); + expect(codes).toContain('WORKFLOW_START_COUNT_INVALID'); + expect(codes).toContain('WORKFLOW_REQUIRED_INPUT_MISSING'); + }); + + it('reports malformed and non-upstream references', () => { + const malformed: WorkflowDocument = structuredClone(WorkflowDocumentSchema.parse(aiWorkflow)); + const input = malformed.nodes + .find((node) => node.nodeId === 'ai')! + .inputs.find((item) => item.key === 'userChatInput')!; + input.value = ['missing']; + expect(validateWorkflow(malformed).map((item) => item.code)).toContain( + 'WORKFLOW_REFERENCE_FORMAT_INVALID' + ); + + input.value = ['ai', 'answerText']; + expect(validateWorkflow(malformed).map((item) => item.code)).toContain( + 'WORKFLOW_REFERENCE_SOURCE_NOT_UPSTREAM' + ); + }); + + it('accepts missing external bindings and aggregate Start references', async () => { + const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; + const start = await applyWorkflowCommand({ + document: createWorkflowDocument(), + command: { + type: 'node.add', + nodeId: 'start', + template: parseNodeTemplateRef('builtin:workflow-start') + }, + dependencies + }); + const search = await applyWorkflowCommand({ + document: start.document, + command: { + type: 'node.add', + nodeId: 'search', + template: parseNodeTemplateRef('builtin:dataset-search'), + connectFrom: { kind: 'next', nodeId: 'start' } + }, + dependencies + }); + + expect(validateWorkflow(search.document)).toEqual([]); + }); + + it('returns schema diagnostics instead of throwing', () => { + expect(validateWorkflow({ schemaVersion: 'wrong' } as never)[0]?.code).toBe( + 'WORKFLOW_SCHEMA_INVALID' + ); + }); + + it('reports duplicate and invalid execution edges', () => { + const broken: WorkflowDocument = structuredClone(WorkflowDocumentSchema.parse(aiWorkflow)); + broken.executionEdges.push(structuredClone(broken.executionEdges[0])); + broken.executionEdges.push({ + source: { kind: 'next', nodeId: 'missing' }, + target: { kind: 'target', nodeId: 'ai' } + }); + const codes = validateWorkflow(broken).map((item) => item.code); + expect(codes).toContain('WORKFLOW_EDGE_DUPLICATED'); + expect(codes).toContain('WORKFLOW_EDGE_INVALID'); + }); + + it('validates global references, reference types and deleted relation leftovers', () => { + const broken: WorkflowDocument = structuredClone(WorkflowDocumentSchema.parse(staticWorkflow)); + broken.chatConfig.variables = [ + { + key: 'count', + label: 'Count', + description: 'Counter', + type: VariableInputEnum.numberInput, + valueType: WorkflowIOValueTypeEnum.number + } + ]; + const answer = broken.nodes.find((node) => node.nodeId === 'answer')!; + answer.parentNodeId = 'deleted-parent'; + const textInput = broken.nodes.find((node) => node.nodeId === 'text')!.inputs[0]; + textInput.renderTypeList.push(FlowNodeInputTypeEnum.reference); + textInput.value = [VARIABLE_NODE_ID, 'count']; + textInput.selectedTypeIndex = textInput.renderTypeList.indexOf(FlowNodeInputTypeEnum.reference); + const codes = validateWorkflow(broken).map((item) => item.code); + expect(codes).toContain('WORKFLOW_PARENT_NODE_NOT_FOUND'); + expect(codes).toContain('WORKFLOW_REFERENCE_TYPE_MISMATCH'); + + textInput.value = [VARIABLE_NODE_ID, 'deleted-variable']; + expect(validateWorkflow(broken).map((item) => item.code)).toContain( + 'WORKFLOW_REFERENCE_OUTPUT_NOT_FOUND' + ); + }); +}); diff --git a/packages/workflow-core/tsconfig.json b/packages/workflow-core/tsconfig.json new file mode 100644 index 000000000000..d359844513cd --- /dev/null +++ b/packages/workflow-core/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, + "include": ["src/**/*.ts", "test/**/*.ts", "vitest.config.ts", "tsdown.config.ts"] +} diff --git a/packages/workflow-core/tsdown.config.ts b/packages/workflow-core/tsdown.config.ts new file mode 100644 index 000000000000..cba3cda5aaf3 --- /dev/null +++ b/packages/workflow-core/tsdown.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsdown'; + +export default defineConfig({ + entry: 'src/index.ts', + format: 'esm', + dts: { + enabled: true, + sourcemap: false + }, + outExtensions: () => ({ js: '.js', dts: '.d.ts' }) +}); diff --git a/packages/workflow-core/vitest.config.ts b/packages/workflow-core/vitest.config.ts new file mode 100644 index 000000000000..f0f11ab93bfa --- /dev/null +++ b/packages/workflow-core/vitest.config.ts @@ -0,0 +1,19 @@ +import { resolve } from 'node:path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + resolve: { + alias: { + '@fastgpt': resolve('..') + } + }, + test: { + include: ['test/**/*.test.ts'], + coverage: { + enabled: true, + reporter: ['text', 'text-summary', 'json-summary'], + include: ['src/**/*.ts'], + exclude: ['src/**/type.ts', 'src/**/schema.ts', 'src/index.ts'] + } + } +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0c4a469dfacf..d70f61f6cf1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -920,6 +920,59 @@ importers: specifier: ^18 version: 18.3.0 + packages/workflow-cli: + dependencies: + '@fastgpt/web': + specifier: workspace:* + version: link:../web + '@fastgpt/workflow-core': + specifier: workspace:* + version: link:../workflow-core + zod: + specifier: 'catalog:' + version: 4.1.12 + devDependencies: + '@types/node': + specifier: 'catalog:' + version: 20.17.24 + '@vitest/coverage-v8': + specifier: 'catalog:' + version: 4.1.5(vitest@4.1.5) + tsdown: + specifier: 'catalog:' + version: 0.21.10(typescript@6.0.3) + typescript: + specifier: 'catalog:' + version: 6.0.3 + vitest: + specifier: 'catalog:' + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.4)) + + packages/workflow-core: + dependencies: + '@fastgpt/global': + specifier: workspace:* + version: link:../global + zod: + specifier: 'catalog:' + version: 4.1.12 + devDependencies: + '@types/node': + specifier: 'catalog:' + version: 20.17.24 + '@vitest/coverage-v8': + specifier: 'catalog:' + version: 4.1.5(vitest@4.1.5) + tsdown: + specifier: 'catalog:' + version: 0.21.10(typescript@6.0.3) + typescript: + specifier: 'catalog:' + version: 6.0.3 + vitest: + specifier: 'catalog:' + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.4)) + pro/admin: dependencies: '@alicloud/dysmsapi20170525': @@ -1370,6 +1423,9 @@ importers: '@fastgpt/web': specifier: workspace:* version: link:../../packages/web + '@fastgpt/workflow-core': + specifier: workspace:* + version: link:../../packages/workflow-core '@fortaine/fetch-event-source': specifier: ^3.0.6 version: 3.0.6 diff --git a/projects/app/package.json b/projects/app/package.json index 80e5043b52a5..500bb0514935 100644 --- a/projects/app/package.json +++ b/projects/app/package.json @@ -47,6 +47,7 @@ "@fastgpt/next": "workspace:*", "@fastgpt/service": "workspace:*", "@fastgpt/web": "workspace:*", + "@fastgpt/workflow-core": "workspace:*", "@fortaine/fetch-event-source": "^3.0.6", "@llamaindex/liteparse-wasm": "catalog:", "@modelcontextprotocol/sdk": "catalog:", diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/NodeTemplatesPopover.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/NodeTemplatesPopover.tsx index 114ee9896421..976d4044c408 100644 --- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/NodeTemplatesPopover.tsx +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/NodeTemplatesPopover.tsx @@ -19,6 +19,7 @@ import NodeTemplateListHeader from './components/NodeTemplates/header'; import NodeTemplateList from './components/NodeTemplates/list'; import { useNodeTemplates } from './components/NodeTemplates/useNodeTemplates'; import { popoverHeight, popoverWidth } from './hooks/useWorkflow'; +import { validateConnectionWithCore } from '../adapters/command'; const NodeTemplatesPopover = () => { const { handleParams, setHandleParams } = useContextSelector(WorkflowModalContext, (v) => v); @@ -91,7 +92,22 @@ const NodeTemplatesPopover = () => { target: node.id, targetHandle: isToolHandle ? 'selectedTools' : `${node.id}-target-left`, type: EDGE_TYPE - })); + })) + .filter((edge) => { + const result = validateConnectionWithCore({ + nodes: [...nodes, ...newNodes], + edges, + connection: edge + }); + if (result.status === 'adapter-error') { + console.error( + '[Workflow Core Adapter] Failed to validate auto connection, falling back to Web behavior', + result.error + ); + return true; + } + return result.status === 'success'; + }); setEdges((state) => { const newState = state.concat(newEdges); diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useDebug.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useDebug.tsx index f8aa0f444783..4619706e6b21 100644 --- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useDebug.tsx +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useDebug.tsx @@ -10,6 +10,7 @@ import { getNodeAllSource } from '@/web/core/workflow/utils'; import { checkWorkflowBeforeRunOrPublish } from '@/web/core/workflow/workflowCheck'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { uiWorkflow2StoreWorkflow } from '../../utils'; +import { checkWorkflowNodeAndConnection } from '../../adapters/validation'; import { type RuntimeNodeItemType } from '@fastgpt/global/core/workflow/runtime/type'; import dynamic from 'next/dynamic'; @@ -105,11 +106,22 @@ export const useDebug = () => { const flowData2StoreDataAndCheck = useCallback(async () => { const nodes = getNodes(); - const { issueMap, hasError, firstErrorNodeId } = checkWorkflowBeforeRunOrPublish({ + const coreErrorNodeIds = checkWorkflowNodeAndConnection({ + nodes, + edges, + chatConfig: appDetail.chatConfig + }); + const { + issueMap, + hasError: hasWebError, + firstErrorNodeId: firstWebErrorNodeId + } = checkWorkflowBeforeRunOrPublish({ nodes, edges, t: workflowT }); + const hasError = hasWebError || !!coreErrorNodeIds?.length; + const firstErrorNodeId = firstWebErrorNodeId ?? coreErrorNodeIds?.[0]; if (!hasError) { onRemoveError(); @@ -121,7 +133,6 @@ export const useDebug = () => { return JSON.stringify(storeNodes); } - onSyncWorkflowCheckIssues(issueMap); if (firstErrorNodeId) { diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useWorkflow.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useWorkflow.tsx index 885266113d80..55df8c6a800f 100644 --- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useWorkflow.tsx +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useWorkflow.tsx @@ -43,6 +43,7 @@ import { WorkflowUIContext } from '../../context/workflowUIContext'; import { WorkflowModalContext } from '../../context/workflowModalContext'; import { WorkflowLayoutContext } from '../../context/workflowComputeContext'; import { type HelperLinesController } from '../components/HelperLines'; +import { getRemovalNodeIdsWithCore, validateConnectionWithCore } from '../../adapters/command'; /* 限定容量的最大堆,根为当前最大距离。保留为通用最近邻筛选工具, @@ -587,23 +588,34 @@ export const useWorkflow = ({ helperLinesRef }: UseWorkflowParams) => { /* node */ // Remove change node and its child nodes and edges const handleRemoveNode = useCallback( - (change: NodeRemoveChange, nodeId: string) => { - // If the node has child nodes, remove the child nodes - const deletedNodeIdList = [nodeId]; - const deletedEdgeIdList = edges - .filter((edge) => edge.source === nodeId || edge.target === nodeId) - .map((edge) => edge.id); - - const childNodes = nodes.filter((n) => n.data.parentNodeId === nodeId); - if (childNodes.length > 0) { - const childNodeIds = childNodes.map((node) => node.id); - deletedNodeIdList.push(...childNodeIds); + (_change: NodeRemoveChange, nodeId: string) => { + const removalResult = getRemovalNodeIdsWithCore({ + nodes, + edges, + nodeId, + chatConfig: appDetail.chatConfig + }); + const deletedNodeIdList = (() => { + if (removalResult.status === 'success') return removalResult.data; + if (removalResult.status === 'domain-error') return []; - const childEdges = edges.filter( - (edge) => childNodeIds.includes(edge.source) || childNodeIds.includes(edge.target) + console.error( + '[Workflow Core Adapter] Failed to remove node with Core, falling back to Web behavior', + removalResult.error ); - deletedEdgeIdList.push(...childEdges.map((edge) => edge.id)); - } + return [ + nodeId, + ...nodes.filter((node) => node.data.parentNodeId === nodeId).map((node) => node.id) + ]; + })(); + if (deletedNodeIdList.length === 0) return; + + const deletedEdgeIdList = edges + .filter( + (edge) => + deletedNodeIdList.includes(edge.source) || deletedNodeIdList.includes(edge.target) + ) + .map((edge) => edge.id); onNodesChange( deletedNodeIdList.map((id) => ({ @@ -618,7 +630,7 @@ export const useWorkflow = ({ helperLinesRef }: UseWorkflowParams) => { })) ); }, - [edges, nodes, onNodesChange, onEdgesChange] + [appDetail.chatConfig, edges, nodes, onNodesChange, onEdgesChange] ); const handleSelectNode = useMemoizedFn((change: NodeSelectionChange) => { // If the node is not selected and the Ctrl key is pressed, select the node @@ -939,11 +951,30 @@ export const useWorkflow = ({ helperLinesRef }: UseWorkflowParams) => { }); } + const connectionResult = validateConnectionWithCore({ + nodes, + edges, + connection: connect, + chatConfig: appDetail.chatConfig + }); + if (connectionResult.status === 'domain-error') { + return toast({ + status: 'warning', + title: t('workflow:connection_invalid') + }); + } + if (connectionResult.status === 'adapter-error') { + console.error( + '[Workflow Core Adapter] Failed to validate connection, falling back to Web behavior', + connectionResult.error + ); + } + onConnect({ connect }); }, - [onConnect, t, toast] + [appDetail.chatConfig, edges, nodes, onConnect, t, toast] ); /* edge */ diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/Copilot.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/Copilot.tsx index a0e76714ed50..784287792908 100644 --- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/Copilot.tsx +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/Copilot.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useRef, useState } from 'react'; +import React, { useMemo, useRef, useState } from 'react'; import { Box, Button, CloseButton, Flex } from '@chakra-ui/react'; import { useContextSelector } from 'use-context-selector'; import { useRequest } from '@fastgpt/web/hooks/useRequest'; @@ -68,7 +68,6 @@ const NodeCopilot = ({ const [optimizerInput, setOptimizerInput] = useState(''); const [codeResult, setCodeResult] = useState(''); const [selectedModel, setSelectedModel] = useState(defaultModels.llm?.model || ''); - const [conversationHistory, setConversationHistory] = useState([]); const [abortController, setAbortController] = useState(null); const closePopoverRef = useRef<() => void>(); @@ -103,10 +102,10 @@ const NodeCopilot = ({ }; }, [realTimeInputs, realTimeOutputs]); - useEffect(() => { - if (conversationHistory.length === 0) { - const configMessage = { - role: 'user' as const, + const [conversationHistory, setConversationHistory] = useState( + () => [ + { + role: 'user', content: t('app:copilot_config_message', { codeType, code, @@ -120,20 +119,16 @@ const NodeCopilot = ({ }) .join('\n'), outputs: dynamicOutputs - .map((output) => `- ${output.label} (${output.valueType})`) + .map((output) => `- ${output.key} (${output.valueType})`) .join('\n') }) - }; - - const confirmMessage = { - role: 'assistant' as const, + }, + { + role: 'assistant', content: t('app:copilot_confirm_message') - }; - - const initialConversationHistory = [configMessage, confirmMessage]; - setConversationHistory(initialConversationHistory); - } - }, [conversationHistory, codeType, code, dynamicInputs, dynamicOutputs, t]); + } + ] + ); const modelOptions = useMemo(() => { return llmModelList.map((model) => ({ @@ -266,25 +261,25 @@ const NodeCopilot = ({ }); }); const existingOutputIdMap = new Map(dynamicOutputs.map((output) => [output.key, output.id])); - const nextOutputKeys = new Set(outputs.map((output) => output.label)); + const nextOutputKeys = new Set(outputs.map((output) => output.key)); dynamicOutputs.forEach((output) => { if (!nextOutputKeys.has(output.key)) { onChangeNode({ nodeId, type: 'delOutput', key: output.key }); } }); outputs.forEach((output) => { - const existingId = existingOutputIdMap.get(output.label); + const existingId = existingOutputIdMap.get(output.key); if (existingId) { onChangeNode({ nodeId, type: 'updateOutput', - key: output.label, + key: output.key, value: { id: existingId, type: FlowNodeOutputTypeEnum.dynamic, - key: output.label, + key: output.key, valueType: output.type as WorkflowIOValueTypeEnum, - label: output.label, + label: output.key, valueDesc: '', description: '' } @@ -296,9 +291,9 @@ const NodeCopilot = ({ value: { id: nanoid(), type: FlowNodeOutputTypeEnum.dynamic, - key: output.label, + key: output.key, valueType: output.type as WorkflowIOValueTypeEnum, - label: output.label, + label: output.key, valueDesc: '', description: '' } @@ -311,7 +306,7 @@ const NodeCopilot = ({ status: 'success', title: t('app:code_applied_successfully') }); - } catch (error) { + } catch { toast({ status: 'error', title: t('app:apply_code_failed') diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/parser.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/parser.ts index 916bccc27364..3f32c05809f0 100644 --- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/parser.ts +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/parser.ts @@ -1,13 +1,17 @@ +import { extractCodeOutputDefinitions } from '@fastgpt/workflow-core'; + +export { extractReturnedObjectKeys } from '@fastgpt/workflow-core'; + export const extractCodeFromMarkdown = ( markdownContent: string ): { code: string; inputs: Array<{ label: string; type: string; reference?: string }>; - outputs: Array<{ label: string; type: string }>; + outputs: Array<{ key: string; type: string }>; } => { const codeBlockRegex = /```(?:\w+\n)?([\s\S]*?)```/; const codeMatch = markdownContent.match(codeBlockRegex); - let code = codeMatch ? codeMatch[1].trim() : markdownContent.trim(); + const code = codeMatch ? codeMatch[1].trim() : markdownContent.trim(); // Enhanced regex to capture reference information in square brackets const paramMatches = [ @@ -19,11 +23,19 @@ export const extractCodeFromMarkdown = ( reference: paramMatch[3] ? paramMatch[3].trim() : undefined })); - const propertyMatches = [...code.matchAll(/@property\s*\{([^}]+)\}\s*(\w+)\s*-?\s*.*/g)]; - const outputs = propertyMatches.map((propertyMatch) => ({ - label: propertyMatch[2].trim(), + const documentedOutputs = [ + ...code.matchAll(/@property\s*\{([^}]+)\}\s*([^\s-]+)\s*-?\s*.*/g) + ].map((propertyMatch) => ({ + key: propertyMatch[2].trim(), type: propertyMatch[1].trim() })); + const returnedOutputs = extractCodeOutputDefinitions(code); + const outputs = returnedOutputs + ? returnedOutputs.map((output) => ({ + key: output.key, + type: output.valueType ?? 'any' + })) + : documentedOutputs; // Remove comments from code before returning const cleanCode = code.replace(/\/\*\*[\s\S]*?\*\//g, '').trim(); diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.tsx index 883cfc899a6b..c35924e741ef 100644 --- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.tsx +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.tsx @@ -1,9 +1,9 @@ -import React, { useCallback, useMemo } from 'react'; +import React, { useCallback, useEffect, useMemo } from 'react'; import NodeCard from '../render/NodeCard'; import { useTranslation } from 'next-i18next'; import { Box, Button, Flex } from '@chakra-ui/react'; import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; -import { type NodeProps, Position } from 'reactflow'; +import { type NodeProps, Position, useUpdateNodeInternals } from 'reactflow'; import { type FlowNodeItemType } from '@fastgpt/global/core/workflow/type/node'; import { type IfElseListItemType } from '@fastgpt/global/core/workflow/template/system/ifElse/type'; import { @@ -23,6 +23,7 @@ import { WorkflowActionsContext } from '../../../context/workflowActionsContext' const NodeIfElse = ({ data, selected }: NodeProps) => { const { t } = useTranslation(); const { nodeId, inputs = [] } = data; + const updateNodeInternals = useUpdateNodeInternals(); const onChangeNode = useContextSelector(WorkflowActionsContext, (v) => v.onChangeNode); const elseHandleId = getHandleId(nodeId, 'source', IfElseResultEnum.ELSE); @@ -32,6 +33,16 @@ const NodeIfElse = ({ data, selected }: NodeProps) => { ?.value as IfElseListItemType[]) || [], [inputs] ); + const branchHandleKeys = useMemo( + () => JSON.stringify(ifElseList.map((item, index) => getIfElseBranchHandleKey(item, index))), + [ifElseList] + ); + + useEffect(() => { + // 条件分支的 Handle 是动态渲染的。导入或调整分支后需要通知 ReactFlow + // 重新测量,否则边数据虽然存在,画布仍可能因找不到 Handle 而不显示连线。 + updateNodeInternals(nodeId); + }, [branchHandleKeys, nodeId, updateNodeInternals]); const onUpdateIfElseList = useCallback( (value: IfElseListItemType[]) => { diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/command.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/command.ts new file mode 100644 index 000000000000..5a42d48b3ca4 --- /dev/null +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/command.ts @@ -0,0 +1,85 @@ +import type { AppChatConfigType } from '@fastgpt/global/core/app/type'; +import type { StoreEdgeItemType } from '@fastgpt/global/core/workflow/type/edge'; +import type { FlowNodeItemType } from '@fastgpt/global/core/workflow/type/node'; +import { + WorkflowCommandError, + connectExecutionEdge, + decompileStoreEdge, + removeNode, + type WorkflowDiagnostic +} from '@fastgpt/workflow-core'; +import type { Connection, Edge, Node } from 'reactflow'; +import { reactFlowStateToWorkflowDocument } from './document'; + +export type WorkflowCoreAdapterResult = + | { status: 'success'; data: T } + | { status: 'domain-error'; diagnostics: WorkflowDiagnostic[] } + | { status: 'adapter-error'; error: unknown }; + +const executeWorkflowCoreAction = (action: () => T): WorkflowCoreAdapterResult => { + try { + return { status: 'success', data: action() }; + } catch (error) { + if (error instanceof WorkflowCommandError) { + return { status: 'domain-error', diagnostics: error.diagnostics }; + } + return { status: 'adapter-error', error }; + } +}; + +/** 在 Web 写入 ReactFlow edge 前,复用 Core 的复杂端口和作用域规则。 */ +export const validateConnectionWithCore = ({ + nodes, + edges, + connection, + chatConfig +}: { + nodes: Node[]; + edges: Edge[]; + connection: Connection; + chatConfig?: AppChatConfigType; +}): WorkflowCoreAdapterResult => { + if ( + !connection.source || + !connection.target || + !connection.sourceHandle || + !connection.targetHandle + ) { + return { + status: 'domain-error', + diagnostics: [{ code: 'WORKFLOW_EDGE_HANDLE_UNSUPPORTED', severity: 'error' }] + }; + } + + return executeWorkflowCoreAction(() => { + const document = reactFlowStateToWorkflowDocument({ nodes, edges, chatConfig }); + const storeEdge: StoreEdgeItemType = { + source: connection.source!, + sourceHandle: connection.sourceHandle!, + target: connection.target!, + targetHandle: connection.targetHandle! + }; + connectExecutionEdge({ + document, + edge: decompileStoreEdge(storeEdge, document) + }); + return undefined; + }); +}; + +/** 复用 Core 的递归删除语义,供 ReactFlow 生成完整 remove change 集合。 */ +export const getRemovalNodeIdsWithCore = ({ + nodes, + edges, + nodeId, + chatConfig +}: { + nodes: Node[]; + edges: Edge[]; + nodeId: string; + chatConfig?: AppChatConfigType; +}): WorkflowCoreAdapterResult => + executeWorkflowCoreAction(() => { + const document = reactFlowStateToWorkflowDocument({ nodes, edges, chatConfig }); + return removeNode({ document, nodeId }).deletedNodeIds; + }); diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/document.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/document.ts new file mode 100644 index 000000000000..807a9593fd41 --- /dev/null +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/document.ts @@ -0,0 +1,22 @@ +import type { AppChatConfigType } from '@fastgpt/global/core/app/type'; +import type { FlowNodeItemType } from '@fastgpt/global/core/workflow/type/node'; +import { decompileStoreWorkflow, type WorkflowDocument } from '@fastgpt/workflow-core'; +import type { Edge, Node } from 'reactflow'; +import { uiWorkflow2StoreWorkflow } from '../utils'; + +/** + * 将 ReactFlow 编辑状态投影为唯一的 WorkflowDocument 领域状态。 + * ReactFlow 外层状态和模板函数在 Store 投影阶段被移除,后续 Web 命令统一复用该入口。 + */ +export const reactFlowStateToWorkflowDocument = ({ + nodes, + edges, + chatConfig = {} +}: { + nodes: Node[]; + edges: Edge[]; + chatConfig?: AppChatConfigType; +}): WorkflowDocument => { + const storeWorkflow = uiWorkflow2StoreWorkflow({ nodes, edges }); + return decompileStoreWorkflow({ workflow: { ...storeWorkflow, chatConfig } }); +}; diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/validation.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/validation.ts new file mode 100644 index 000000000000..a890fd0cea7c --- /dev/null +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/validation.ts @@ -0,0 +1,129 @@ +import { checkWorkflowBeforeRunOrPublish } from '@/web/core/workflow/workflowCheck'; +import type { AppChatConfigType } from '@fastgpt/global/core/app/type'; +import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import type { FlowNodeItemType } from '@fastgpt/global/core/workflow/type/node'; +import { + validateWorkflow, + WorkflowCommandError, + type WorkflowDiagnostic +} from '@fastgpt/workflow-core'; +import type { Edge, Node } from 'reactflow'; +import { reactFlowStateToWorkflowDocument } from './document'; + +const sharedWorkflowNodeTypes = new Set([ + FlowNodeTypeEnum.workflowStart, + FlowNodeTypeEnum.chatNode, + FlowNodeTypeEnum.textEditor, + FlowNodeTypeEnum.answerNode, + FlowNodeTypeEnum.datasetSearchNode, + FlowNodeTypeEnum.queryExtension, + FlowNodeTypeEnum.contentExtract, + FlowNodeTypeEnum.httpRequest468, + FlowNodeTypeEnum.code, + FlowNodeTypeEnum.runApp, + FlowNodeTypeEnum.ifElseNode, + FlowNodeTypeEnum.classifyQuestion, + FlowNodeTypeEnum.userSelect, + FlowNodeTypeEnum.formInput, + FlowNodeTypeEnum.toolCall, + FlowNodeTypeEnum.readFiles, + FlowNodeTypeEnum.variableUpdate, + FlowNodeTypeEnum.parallelRun, + FlowNodeTypeEnum.loopRun, + FlowNodeTypeEnum.loopRunStart, + FlowNodeTypeEnum.loopRunBreak, + FlowNodeTypeEnum.loop, + FlowNodeTypeEnum.nestedStart, + FlowNodeTypeEnum.nestedEnd, + FlowNodeTypeEnum.tool, + FlowNodeTypeEnum.toolSet, + FlowNodeTypeEnum.toolParams, + FlowNodeTypeEnum.pluginModule, + FlowNodeTypeEnum.appModule +]); + +const validateWorkflowWithWebRules = ({ + nodes, + edges +}: { + nodes: Node[]; + edges: Edge[]; +}) => { + const { errorNodeIds } = checkWorkflowBeforeRunOrPublish({ nodes, edges }); + return errorNodeIds.length > 0 ? errorNodeIds : undefined; +}; + +const diagnosticsToNodeIds = ({ + diagnostics, + nodes +}: { + diagnostics: WorkflowDiagnostic[]; + nodes: Node[]; +}) => { + const nodeIds = new Set(); + for (const diagnostic of diagnostics) { + if (diagnostic.severity !== 'error') continue; + if (diagnostic.nodeId) nodeIds.add(diagnostic.nodeId); + const edge = diagnostic.params?.edge as + | { source?: { nodeId?: string }; target?: { nodeId?: string } } + | undefined; + if (edge?.source?.nodeId) nodeIds.add(edge.source.nodeId); + if (edge?.target?.nodeId) nodeIds.add(edge.target.nodeId); + } + if (diagnostics.some((item) => item.severity === 'error') && nodeIds.size === 0) { + nodes.forEach((node) => nodeIds.add(node.data.nodeId)); + } + return [...nodeIds]; +}; + +/** + * Web 校验适配器。已支持节点使用共享 Core Validator,未知节点和适配异常回退旧实现。 + */ +export const validateWorkflowForWeb = ({ + nodes, + edges, + chatConfig = {} +}: { + nodes: Node[]; + edges: Edge[]; + chatConfig?: AppChatConfigType; +}): { + nodeIds?: string[]; + diagnostics?: WorkflowDiagnostic[]; + source: 'shared' | 'legacy'; + adapterError?: unknown; +} => { + if (nodes.some((node) => !sharedWorkflowNodeTypes.has(node.data.flowNodeType))) { + return { nodeIds: validateWorkflowWithWebRules({ nodes, edges }), source: 'legacy' }; + } + + try { + const document = reactFlowStateToWorkflowDocument({ nodes, edges, chatConfig }); + const diagnostics = validateWorkflow(document); + const nodeIds = diagnosticsToNodeIds({ diagnostics, nodes }); + return { + nodeIds: nodeIds.length > 0 ? nodeIds : undefined, + diagnostics, + source: 'shared' + }; + } catch (error) { + if (error instanceof WorkflowCommandError) { + return { + nodeIds: diagnosticsToNodeIds({ diagnostics: error.diagnostics, nodes }), + diagnostics: error.diagnostics, + source: 'shared' + }; + } + + console.error('[Workflow Core Adapter] Failed to create WorkflowDocument', error); + return { + nodeIds: validateWorkflowWithWebRules({ nodes, edges }), + source: 'legacy', + adapterError: error + }; + } +}; + +export const checkWorkflowNodeAndConnection = ( + input: Parameters[0] +) => validateWorkflowForWeb(input).nodeIds; diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowUtilsContext.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowUtilsContext.tsx index 4f777aa21fd8..b722a89d7a50 100644 --- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowUtilsContext.tsx +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowUtilsContext.tsx @@ -10,6 +10,7 @@ import { checkWorkflowNodeIssues } from '@/web/core/workflow/workflowCheck'; import { uiWorkflow2StoreWorkflow } from '../utils'; +import { checkWorkflowNodeAndConnection } from '../adapters/validation'; import { FlowNodeOutputTypeEnum, FlowNodeTypeEnum @@ -222,11 +223,22 @@ export const WorkflowUtilsProvider = ({ children }: { children: ReactNode }) => return; } - const { issueMap, hasError, firstErrorNodeId } = checkWorkflowBeforeRunOrPublish({ + const coreErrorNodeIds = checkWorkflowNodeAndConnection({ + nodes, + edges, + chatConfig: appDetail.chatConfig + }); + const { + issueMap, + hasError: hasWebError, + firstErrorNodeId: firstWebErrorNodeId + } = checkWorkflowBeforeRunOrPublish({ nodes, edges, t }); + const hasError = hasWebError || !!coreErrorNodeIds?.length; + const firstErrorNodeId = firstWebErrorNodeId ?? coreErrorNodeIds?.[0]; if (!hasError) { onRemoveError(); diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/utils.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/utils.ts index 6dbad5dcc58d..e28675596be1 100644 --- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/utils.ts +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/utils.ts @@ -15,6 +15,7 @@ import type { ReferenceItemValueType, ReferenceValueType } from '@fastgpt/global/core/workflow/type/io'; +import { StoreNodeOutputItemTypeSchema } from '@fastgpt/global/core/workflow/type/io'; import { getSelectedInputRenderType, nodeInputIsReference @@ -103,14 +104,13 @@ export const uiWorkflow2StoreWorkflow = ({ getNodeById, childrenNodeIdListMap }), - outputs: item.data.outputs, + outputs: item.data.outputs.map((output) => StoreNodeOutputItemTypeSchema.parse(output)), isFolded: item.data.isFolded, pluginId: item.data.pluginId, toolConfig: item.data.toolConfig, catchError: item.data.catchError }; }); - const nodeIdSet = new Set(formatNodes.map((node) => node.nodeId)); const formatEdges: StoreEdgeItemType[] = edges .map((item) => ({ diff --git a/projects/app/src/pages/api/core/workflow/optimizeCode.ts b/projects/app/src/pages/api/core/workflow/optimizeCode.ts index 7a85068adfae..3cd8671c8feb 100644 --- a/projects/app/src/pages/api/core/workflow/optimizeCode.ts +++ b/projects/app/src/pages/api/core/workflow/optimizeCode.ts @@ -38,6 +38,7 @@ const getPromptNodeCopilotSystemPrompt = () => { - 参数名不可以是嵌套的,例如:paramName.a.b - 注意参数的数据类型 - 对返回对象的每个属性使用 @property {类型} 属性名 - 属性描述 + - 属性名必须与 return 对象中的 key 完全一致,不得翻译、改写或使用业务描述代替 - 数据类型严格限制为以下值,不可多选,也不可使用额外的数据类型,超出以下值的类型使用any: - string - number diff --git a/projects/app/test/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/parser.test.ts b/projects/app/test/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/parser.test.ts new file mode 100644 index 000000000000..82859b4c094a --- /dev/null +++ b/projects/app/test/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/parser.test.ts @@ -0,0 +1,72 @@ +import { + extractCodeFromMarkdown, + extractReturnedObjectKeys +} from '@/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode/parser'; +import { describe, expect, it } from 'vitest'; + +describe('extractReturnedObjectKeys', () => { + it('extracts JavaScript shorthand and explicit keys from the returned object', () => { + expect( + extractReturnedObjectKeys(` + function main() { + const plan = [{ id: 1, title: 'a,b' }]; + return { plan, result: JSON.stringify({ plan, ok: true }) }; + } + `) + ).toEqual(['plan', 'result']); + }); + + it('extracts static Python dictionary keys', () => { + expect( + extractReturnedObjectKeys(` + def main(): + return {"plan": [1, 2], 'result': {"ok": True}} + `) + ).toEqual(['plan', 'result']); + }); + + it('ignores return text in comments, strings and computed or spread properties', () => { + expect( + extractReturnedObjectKeys(` + // return { ignored: true } + const text = "return { alsoIgnored: true }"; + function main() { + return { visible: 1, ...other, [dynamicKey]: 2 }; + } + `) + ).toEqual(['visible']); + }); +}); + +describe('extractCodeFromMarkdown', () => { + it('uses return keys as output names and JSDoc only as the type source', () => { + const result = extractCodeFromMarkdown(` +\`\`\`javascript +/** + * @property {arrayString} 题目计划 - 业务说明 + * @property {string} 返回文本 - 业务说明 + */ +function main() { + const plan = ['one']; + return { plan, result: JSON.stringify(plan) }; +} +\`\`\` + `); + + expect(result.outputs).toEqual([ + { key: 'plan', type: 'arrayString' }, + { key: 'result', type: 'string' } + ]); + expect(result.code).not.toContain('@property'); + }); + + it('keeps documented outputs as a compatibility fallback when no return object is found', () => { + const result = extractCodeFromMarkdown(` +/** @property {number} total - total value */ +function main() { + return getResult(); +} + `); + expect(result.outputs).toEqual([{ key: 'total', type: 'number' }]); + }); +}); diff --git a/projects/app/test/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.test.ts b/projects/app/test/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.test.ts new file mode 100644 index 000000000000..ca5d6f1b70e8 --- /dev/null +++ b/projects/app/test/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.test.ts @@ -0,0 +1,110 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; + +const mocks = vi.hoisted(() => ({ + updateNodeInternals: vi.fn(), + onChangeNode: vi.fn(), + effectDependencies: [] as unknown[][] +})); + +vi.mock('react', async () => { + const actual = await vi.importActual('react'); + + return { + ...actual, + useCallback: (callback: T) => callback, + useEffect: (effect: () => void, dependencies: unknown[]) => { + mocks.effectDependencies.push(dependencies); + effect(); + }, + useMemo: (factory: () => T) => factory() + }; +}); +vi.mock('reactflow', () => ({ + Position: { Right: 'right' }, + useUpdateNodeInternals: () => mocks.updateNodeInternals +})); +vi.mock('next-i18next', () => ({ + useTranslation: () => ({ t: (key: string) => key }) +})); +vi.mock('@chakra-ui/react', () => ({ Box: 'div', Button: 'button', Flex: 'div' })); +vi.mock('use-context-selector', () => ({ + useContextSelector: (_context: unknown, selector: (value: any) => unknown) => + selector({ onChangeNode: mocks.onChangeNode }) +})); +vi.mock('@/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/NodeCard', () => ({ + default: 'div' +})); +vi.mock('@/pageComponents/app/detail/WorkflowComponents/components/Container', () => ({ + default: 'div' +})); +vi.mock('@fastgpt/web/components/common/DndDrag/index', () => ({ + default: 'div', + Draggable: 'div' +})); +vi.mock('@/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle', () => ({ + MySourceHandle: 'div' +})); +vi.mock('@/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/ListItem', () => ({ + default: 'div' +})); +vi.mock('@fastgpt/web/components/common/Icon', () => ({ default: 'span' })); +vi.mock('@/pageComponents/app/detail/WorkflowComponents/context/workflowActionsContext', () => ({ + WorkflowActionsContext: {} +})); + +import NodeIfElse from '@/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse'; + +const renderNode = ({ + branchId = 'similar', + condition = 'isNotEmpty' +}: { + branchId?: string; + condition?: string; +} = {}) => { + const Component = (NodeIfElse as unknown as { type: (props: any) => unknown }).type; + + Component({ + data: { + nodeId: 'similarity-route', + inputs: [ + { + key: NodeInputKeyEnum.ifElseList, + value: [ + { + branchId, + condition: 'AND', + list: [{ condition, valueType: 'input' }] + } + ] + } + ] + }, + selected: false + }); +}; + +describe('NodeIfElse dynamic handles', () => { + beforeEach(() => { + mocks.updateNodeInternals.mockClear(); + mocks.effectDependencies.length = 0; + }); + + it('should refresh ReactFlow handle measurements after the node renders', () => { + renderNode(); + + expect(mocks.updateNodeInternals).toHaveBeenCalledTimes(1); + expect(mocks.updateNodeInternals).toHaveBeenCalledWith('similarity-route'); + }); + + it('should depend on branch handle identities instead of condition values', () => { + renderNode({ condition: 'isNotEmpty' }); + const initialHandleKeys = mocks.effectDependencies[0][0]; + + mocks.effectDependencies.length = 0; + renderNode({ condition: 'isEmpty' }); + + expect(mocks.effectDependencies[0][0]).toBe(initialHandleKeys); + expect(initialHandleKeys).toBe('["similar"]'); + }); +}); diff --git a/projects/app/test/pageComponents/app/detail/WorkflowComponents/adapters/document.test.ts b/projects/app/test/pageComponents/app/detail/WorkflowComponents/adapters/document.test.ts new file mode 100644 index 000000000000..73cfea903b31 --- /dev/null +++ b/projects/app/test/pageComponents/app/detail/WorkflowComponents/adapters/document.test.ts @@ -0,0 +1,44 @@ +import { reactFlowStateToWorkflowDocument } from '@/pageComponents/app/detail/WorkflowComponents/adapters/document'; +import { storeEdge2RenderEdge, storeNode2FlowNode } from '@/web/core/workflow/utils'; +import { + WorkflowDocumentSchema, + compileStoreWorkflow, + type WorkflowDocument +} from '@fastgpt/workflow-core'; +import basicAiWorkflowFixture from '@fastgpt/workflow-core/test/fixtures/basic-ai/workflow.json'; +import { describe, expect, it } from 'vitest'; + +const toWebGraph = (document: WorkflowDocument) => { + const workflow = compileStoreWorkflow(document); + return { + nodes: workflow.nodes.map((node) => + storeNode2FlowNode({ item: node, t: ((value: string) => value) as any }) + ), + edges: workflow.edges.map((edge) => storeEdge2RenderEdge({ edge })) + }; +}; + +describe('reactFlowStateToWorkflowDocument', () => { + it('removes Web template functions before creating WorkflowDocument', () => { + const sourceDocument = WorkflowDocumentSchema.parse(basicAiWorkflowFixture); + const graph = toWebGraph(sourceDocument); + const aiNode = graph.nodes.find((node) => node.data.nodeId === 'ai')!; + const reasoningOutput = aiNode.data.outputs.find((output) => output.key === 'reasoningText')!; + expect(reasoningOutput.invalidCondition).toBeTypeOf('function'); + + aiNode.data.isFolded = true; + const document = reactFlowStateToWorkflowDocument({ + ...graph, + chatConfig: sourceDocument.chatConfig + }); + const storedAiNode = document.nodes.find((node) => node.nodeId === 'ai')!; + + expect(storedAiNode.isFolded).toBe(true); + expect(storedAiNode.outputs.some((output) => 'invalidCondition' in output)).toBe(false); + expect(() => structuredClone(document)).not.toThrow(); + expect(() => JSON.stringify(document)).not.toThrow(); + expect(compileStoreWorkflow(document).nodes.map((node) => node.nodeId)).toEqual( + expect.arrayContaining(['start', 'ai']) + ); + }); +}); diff --git a/projects/app/test/web/core/app/workflow/workflowCorePr1Equivalence.test.ts b/projects/app/test/web/core/app/workflow/workflowCorePr1Equivalence.test.ts new file mode 100644 index 000000000000..cb9d6d41011b --- /dev/null +++ b/projects/app/test/web/core/app/workflow/workflowCorePr1Equivalence.test.ts @@ -0,0 +1,86 @@ +import { checkWorkflowNodeAndConnection } from '@/web/core/workflow/utils'; +import { + WorkflowDocumentSchema, + compileStoreWorkflow, + type WorkflowDocument, + validateWorkflow +} from '@fastgpt/workflow-core/src/index'; +import aiWorkflowFixture from '@fastgpt/workflow-core/test/fixtures/basic-ai/workflow.json'; +import staticWorkflowFixture from '@fastgpt/workflow-core/test/fixtures/basic-static/workflow.json'; +import type { FlowNodeItemType } from '@fastgpt/global/core/workflow/type/node'; +import type { Edge, Node } from 'reactflow'; +import { describe, expect, it } from 'vitest'; + +const toWebGraph = (document: WorkflowDocument) => { + const workflow = compileStoreWorkflow(document); + return { + nodes: workflow.nodes.map>((node) => ({ + id: node.nodeId, + type: node.flowNodeType, + data: node, + position: node.position ?? { x: 0, y: 0 } + })), + edges: workflow.edges.map((edge, index) => ({ + id: `edge-${index}`, + ...edge + })) + }; +}; + +const getCoreErrorNodeIds = (document: WorkflowDocument) => + validateWorkflow(document) + .filter((diagnostic) => diagnostic.severity === 'error' && diagnostic.nodeId) + .map((diagnostic) => diagnostic.nodeId as string); + +const getWebErrorNodeIds = (document: WorkflowDocument) => + checkWorkflowNodeAndConnection(toWebGraph(document)) ?? []; + +describe('PR1 Workflow Core validation characterization', () => { + const aiWorkflow = WorkflowDocumentSchema.parse(aiWorkflowFixture); + const staticWorkflow = WorkflowDocumentSchema.parse(staticWorkflowFixture); + + it.each([ + ['basic-ai', aiWorkflow], + ['basic-static', staticWorkflow] + ])('keeps valid %s accepted by both validators', (_name, workflow) => { + expect(getWebErrorNodeIds(structuredClone(workflow))).toEqual([]); + expect(getCoreErrorNodeIds(structuredClone(workflow))).toEqual([]); + }); + + it.each([ + [ + 'required input', + (document: WorkflowDocument) => { + const textInput = document.nodes + .find((node) => node.nodeId === 'text')! + .inputs.find((input) => input.key === 'system_textareaInput')!; + textInput.value = undefined; + }, + 'text' + ], + [ + 'unreachable node', + (document: WorkflowDocument) => { + document.executionEdges = document.executionEdges.filter( + (edge) => edge.target.nodeId !== 'answer' + ); + }, + 'answer' + ] + ] as const)('reports the same node for %s', (_name, mutate, expectedNodeId) => { + const document = structuredClone(staticWorkflow); + mutate(document); + expect(getWebErrorNodeIds(structuredClone(document))).toContain(expectedNodeId); + expect(getCoreErrorNodeIds(structuredClone(document))).toContain(expectedNodeId); + }); + + it('reports the same node for an invalid string reference', () => { + const document = structuredClone(aiWorkflow); + const userInput = document.nodes + .find((node) => node.nodeId === 'ai')! + .inputs.find((input) => input.key === 'userChatInput')!; + userInput.value = ['missing', 'output']; + expect(getWebErrorNodeIds(structuredClone(document))).toContain('ai'); + expect(getCoreErrorNodeIds(structuredClone(document))).toContain('ai'); + }); +}); diff --git a/projects/app/test/web/core/app/workflow/workflowCorePr2Adapter.test.ts b/projects/app/test/web/core/app/workflow/workflowCorePr2Adapter.test.ts new file mode 100644 index 000000000000..9e5538900006 --- /dev/null +++ b/projects/app/test/web/core/app/workflow/workflowCorePr2Adapter.test.ts @@ -0,0 +1,92 @@ +import { storeEdge2RenderEdge, storeNode2FlowNode } from '@/web/core/workflow/utils'; +import { checkWorkflowBeforeRunOrPublish } from '@/web/core/workflow/workflowCheck'; +import { validateWorkflowForWeb } from '@/pageComponents/app/detail/WorkflowComponents/adapters/validation'; +import { + WorkflowDocumentSchema, + compileStoreWorkflow, + type WorkflowDocument +} from '@fastgpt/workflow-core'; +import staticWorkflowFixture from '@fastgpt/workflow-core/test/fixtures/basic-static/workflow.json'; +import commonLinearWorkflowFixture from '@fastgpt/workflow-core/test/fixtures/common-linear/workflow.json'; +import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import { describe, expect, it, vi } from 'vitest'; + +const toWebGraph = (document: WorkflowDocument) => { + const workflow = compileStoreWorkflow(document); + return { + nodes: workflow.nodes.map((node) => + storeNode2FlowNode({ item: node, t: ((value: string) => value) as any }) + ), + edges: workflow.edges.map((edge) => storeEdge2RenderEdge({ edge })) + }; +}; + +const validateWorkflowWithWebRules = (graph: ReturnType) => { + const { errorNodeIds } = checkWorkflowBeforeRunOrPublish(graph); + return errorNodeIds.length > 0 ? errorNodeIds : undefined; +}; + +describe('PR2 Web Validation Adapter', () => { + const fixture = WorkflowDocumentSchema.parse(staticWorkflowFixture); + const commonLinearFixture = WorkflowDocumentSchema.parse(commonLinearWorkflowFixture); + + it.each([ + ['basic-static', fixture], + ['common-linear', commonLinearFixture] + ])('routes %s workflows to the shared validator', (_name, document) => { + const graph = toWebGraph(document); + const legacyNodeIds = validateWorkflowWithWebRules(graph); + const result = validateWorkflowForWeb({ ...graph, chatConfig: document.chatConfig }); + expect(result.source).toBe('shared'); + expect(result.nodeIds).toEqual(legacyNodeIds); + expect(result.diagnostics).toEqual([]); + }); + + it('keeps required-input failures equivalent to the legacy validator', () => { + const document = structuredClone(fixture); + document.nodes + .find((node) => node.nodeId === 'text')! + .inputs.find((input) => input.key === 'system_textareaInput')!.value = undefined; + const graph = toWebGraph(document); + const legacyNodeIds = validateWorkflowWithWebRules(graph); + const result = validateWorkflowForWeb({ ...graph, chatConfig: document.chatConfig }); + expect(result.source).toBe('shared'); + expect(result.nodeIds).toEqual(legacyNodeIds); + expect(result.diagnostics?.map((item) => item.code)).toContain( + 'WORKFLOW_REQUIRED_INPUT_MISSING' + ); + }); + + it('keeps malformed linear handles inside shared diagnostics', () => { + const graph = toWebGraph(fixture); + graph.edges[0].sourceHandle = 'unknown-handle'; + const result = validateWorkflowForWeb({ ...graph, chatConfig: fixture.chatConfig }); + expect(result.source).toBe('shared'); + expect(result.nodeIds).toEqual(expect.arrayContaining(['start', 'text', 'answer'])); + expect(result.diagnostics?.[0]?.code).toBe('WORKFLOW_EDGE_HANDLE_UNSUPPORTED'); + }); + + it('falls back to legacy validation for unsupported Web node types', () => { + const graph = toWebGraph(fixture); + graph.nodes[0].data.flowNodeType = FlowNodeTypeEnum.agent; + + expect(validateWorkflowForWeb({ ...graph, chatConfig: fixture.chatConfig }).source).toBe( + 'legacy' + ); + }); + + it('falls back to legacy validation when Document conversion fails', () => { + const graph = toWebGraph(fixture); + const nodeWithInput = graph.nodes.find((node) => node.data.inputs.length > 0)!; + nodeWithInput.data.inputs[0].value = () => undefined; + const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {}); + + try { + const result = validateWorkflowForWeb({ ...graph, chatConfig: fixture.chatConfig }); + expect(result.source).toBe('legacy'); + expect(result.adapterError).toBeInstanceOf(Error); + } finally { + consoleError.mockRestore(); + } + }); +}); diff --git a/projects/app/test/web/core/app/workflow/workflowCorePr3Adapter.test.ts b/projects/app/test/web/core/app/workflow/workflowCorePr3Adapter.test.ts new file mode 100644 index 000000000000..a5eceff6cc09 --- /dev/null +++ b/projects/app/test/web/core/app/workflow/workflowCorePr3Adapter.test.ts @@ -0,0 +1,109 @@ +import { storeEdge2RenderEdge, storeNode2FlowNode } from '@/web/core/workflow/utils'; +import { checkWorkflowBeforeRunOrPublish } from '@/web/core/workflow/workflowCheck'; +import { validateWorkflowForWeb } from '@/pageComponents/app/detail/WorkflowComponents/adapters/validation'; +import { + getRemovalNodeIdsWithCore, + validateConnectionWithCore +} from '@/pageComponents/app/detail/WorkflowComponents/adapters/command'; +import { compileStoreWorkflow, type WorkflowDocument } from '@fastgpt/workflow-core'; +import { + createBranchingFixture, + createDynamicIoCatchFixture, + createNestedLoopFixture, + createToolCallToolsFixture +} from '@fastgpt/workflow-core/test/fixtures/pr3'; +import { describe, expect, it } from 'vitest'; + +const toWebGraph = (document: WorkflowDocument) => { + const workflow = compileStoreWorkflow(document); + return { + nodes: workflow.nodes.map((node) => + storeNode2FlowNode({ item: node, t: ((value: string) => value) as any }) + ), + edges: workflow.edges.map((edge) => storeEdge2RenderEdge({ edge })) + }; +}; + +const validateWorkflowWithWebRules = (graph: ReturnType) => { + const { errorNodeIds } = checkWorkflowBeforeRunOrPublish(graph); + return errorNodeIds.length > 0 ? errorNodeIds : undefined; +}; + +describe('PR3 Web shared workflow adapters', () => { + it.each([ + ['branching', createBranchingFixture], + ['tool-call-tools', createToolCallToolsFixture], + ['nested-loop', createNestedLoopFixture], + ['dynamic-io-catch', createDynamicIoCatchFixture] + ])('keeps %s validation on the shared path', async (_name, factory) => { + const document = await factory(); + const graph = toWebGraph(document); + const result = validateWorkflowForWeb({ ...graph, chatConfig: document.chatConfig }); + expect(result.source).toBe('shared'); + expect(result.diagnostics).toEqual([]); + expect(result.nodeIds).toEqual(validateWorkflowWithWebRules(graph)); + }); + + it('checks branch connections with the same Core edge rules', async () => { + const document = await createBranchingFixture(); + const graph = toWebGraph(document); + const result = validateConnectionWithCore({ + ...graph, + connection: { + source: 'route', + sourceHandle: 'route-source-missing', + target: 'yes', + targetHandle: 'yes-target-left' + } + }); + expect(result.status).toBe('domain-error'); + if (result.status === 'domain-error') { + expect(result.diagnostics.map((item) => item.code)).toContain( + 'WORKFLOW_BRANCH_KEY_NOT_FOUND' + ); + } + }); + + it('accepts valid connections after real Web node initialization', async () => { + const document = await createBranchingFixture(); + const graph = toWebGraph(document); + const edge = graph.edges.find((edge) => edge.source === 'route' && edge.target === 'yes')!; + + const result = validateConnectionWithCore({ + nodes: graph.nodes, + edges: graph.edges.filter((item) => item.id !== edge.id), + connection: edge + }); + + expect(result.status).toBe('success'); + }); + + it('returns recursive container removal IDs for ReactFlow changes', async () => { + const document = await createNestedLoopFixture(); + const graph = toWebGraph(document); + const result = getRemovalNodeIdsWithCore({ ...graph, nodeId: 'loop' }); + expect(result.status).toBe('success'); + if (result.status === 'success') { + expect(result.data).toEqual(expect.arrayContaining(['loop', 'loop__start', 'break'])); + } + }); + + it('separates Web adapter failures from Core domain diagnostics', async () => { + const document = await createBranchingFixture(); + const graph = toWebGraph(document); + const nodeWithInput = graph.nodes.find((node) => node.data.inputs.length > 0)!; + nodeWithInput.data.inputs[0].value = () => undefined; + + const result = validateConnectionWithCore({ + ...graph, + connection: { + source: 'route', + sourceHandle: 'route-source-yes', + target: 'yes', + targetHandle: 'yes-target-left' + } + }); + + expect(result.status).toBe('adapter-error'); + }); +}); From d53244699a767a2f716d6b4b0b0e71caa516712e Mon Sep 17 00:00:00 2001 From: xxyyh <2289112474@qq.com> Date: Mon, 27 Jul 2026 10:29:54 +0800 Subject: [PATCH 02/18] fix(workflow): complete runtime node contracts --- .../test/templateContract.test.ts | 41 +++ packages/workflow-core/src/edge/service.ts | 34 +-- packages/workflow-core/src/io/service.ts | 21 +- packages/workflow-core/src/nesting/service.ts | 15 +- .../src/template/automationMeta.ts | 236 ++++++++++++++++-- .../workflow-core/src/template/contract.ts | 214 ++++++++++++++++ .../workflow-core/src/template/descriptor.ts | 139 ++++++----- packages/workflow-core/src/template/type.ts | 1 + .../workflow-core/src/template/valueSchema.ts | 143 +++++++++-- .../test/template/template.test.ts | 114 +++++++++ .../test/template/valueSchema.test.ts | 131 ++++++++++ 11 files changed, 932 insertions(+), 157 deletions(-) create mode 100644 packages/workflow-cli/test/templateContract.test.ts create mode 100644 packages/workflow-core/src/template/contract.ts create mode 100644 packages/workflow-core/test/template/valueSchema.test.ts diff --git a/packages/workflow-cli/test/templateContract.test.ts b/packages/workflow-cli/test/templateContract.test.ts new file mode 100644 index 000000000000..45e5dda89130 --- /dev/null +++ b/packages/workflow-cli/test/templateContract.test.ts @@ -0,0 +1,41 @@ +import { listTemplates, showTemplate } from '../src/commands/template'; +import type { CliContext } from '../src/type'; +import { describe, expect, it } from 'vitest'; + +const context = { + locale: 'en', + format: 'json' +} as CliContext; + +describe('template contract commands', () => { + it('returns versioned contracts for all builtin templates', async () => { + const result = await listTemplates({}, context); + const descriptors = result.result as Array>; + + expect(descriptors).toHaveLength(22); + expect( + descriptors.every((item) => item.schemaVersion === 'fastgpt-workflow-node-contract/v1') + ).toBe(true); + }); + + it('returns branch semantics through template show', async () => { + const result = await showTemplate({ template: 'builtin:if-else' }, context); + + expect(result.result).toMatchObject({ + schemaVersion: 'fastgpt-workflow-node-contract/v1', + template: { kind: 'builtin', templateId: 'if-else' }, + execution: { + sourceKinds: ['branch'], + targetKinds: ['target'], + terminal: false, + branch: { + inputKey: 'ifElseList', + keyField: 'branchId', + keyFieldRequiredForNewValues: true, + fallbackKey: 'ELSE', + configureBeforeConnect: true + } + } + }); + }); +}); diff --git a/packages/workflow-core/src/edge/service.ts b/packages/workflow-core/src/edge/service.ts index 60a7f0ec5fd4..d6ff52b186f2 100644 --- a/packages/workflow-core/src/edge/service.ts +++ b/packages/workflow-core/src/edge/service.ts @@ -9,37 +9,11 @@ import { IfElseResultEnum } from '@fastgpt/global/core/workflow/template/system/ import { getIfElseBranchHandleKey } from '@fastgpt/global/core/workflow/template/system/ifElse/utils'; import type { IfElseListItemType } from '@fastgpt/global/core/workflow/template/system/ifElse/type'; import { getDocumentNode } from '../nesting/service'; +import { NODE_TYPES_WITHOUT_NEXT_PORT, TOOL_TARGET_NODE_TYPES } from '../template/contract'; const edgeEquals = (left: WorkflowExecutionEdge, right: WorkflowExecutionEdge) => JSON.stringify(left) === JSON.stringify(right); -const toolTargetTypes = new Set([ - FlowNodeTypeEnum.tool, - FlowNodeTypeEnum.toolSet, - FlowNodeTypeEnum.pluginModule, - FlowNodeTypeEnum.appModule, - FlowNodeTypeEnum.runApp, - FlowNodeTypeEnum.chatNode, - FlowNodeTypeEnum.answerNode, - FlowNodeTypeEnum.datasetSearchNode, - FlowNodeTypeEnum.contentExtract, - FlowNodeTypeEnum.httpRequest468, - FlowNodeTypeEnum.toolParams, - FlowNodeTypeEnum.userSelect, - FlowNodeTypeEnum.formInput, - FlowNodeTypeEnum.variableUpdate -]); - -const nodesWithoutNextPort = new Set([ - FlowNodeTypeEnum.ifElseNode, - FlowNodeTypeEnum.userSelect, - FlowNodeTypeEnum.classifyQuestion, - FlowNodeTypeEnum.answerNode, - FlowNodeTypeEnum.loopRunBreak, - FlowNodeTypeEnum.nestedEnd, - FlowNodeTypeEnum.pluginOutput -]); - /** 返回节点在 insert 场景下用于承接旧 target 的默认执行出口。 */ export const getDefaultExecutionSourcePort = ( document: WorkflowDocument, @@ -64,7 +38,7 @@ export const getDefaultExecutionSourcePort = ( : undefined; if (branchKey) return { kind: 'branch', nodeId, branchKey }; } - if (nodesWithoutNextPort.has(node.flowNodeType)) { + if (NODE_TYPES_WITHOUT_NEXT_PORT.has(node.flowNodeType)) { throw new WorkflowCommandError([ { code: 'WORKFLOW_NODE_HAS_NO_DEFAULT_SOURCE_PORT', severity: 'error', nodeId } ]); @@ -132,7 +106,7 @@ export const assertExecutionEdge = (document: WorkflowDocument, edge: WorkflowEx if (sourceIsTool) { if ( sourceNode.flowNodeType !== FlowNodeTypeEnum.toolCall || - !toolTargetTypes.has(targetNode.flowNodeType) + !TOOL_TARGET_NODE_TYPES.has(targetNode.flowNodeType) ) { throw new WorkflowCommandError([ { code: 'WORKFLOW_TOOL_EDGE_NODE_INVALID', severity: 'error', params: { edge } } @@ -148,7 +122,7 @@ export const assertExecutionEdge = (document: WorkflowDocument, edge: WorkflowEx { code: 'WORKFLOW_CATCH_NOT_ENABLED', severity: 'error', nodeId: sourceNode.nodeId } ]); } - if (edge.source.kind === 'next' && nodesWithoutNextPort.has(sourceNode.flowNodeType)) { + if (edge.source.kind === 'next' && NODE_TYPES_WITHOUT_NEXT_PORT.has(sourceNode.flowNodeType)) { throw new WorkflowCommandError([ { code: 'WORKFLOW_NEXT_PORT_UNSUPPORTED', diff --git a/packages/workflow-core/src/io/service.ts b/packages/workflow-core/src/io/service.ts index 8de7be0f9fe4..bb65b287abdb 100644 --- a/packages/workflow-core/src/io/service.ts +++ b/packages/workflow-core/src/io/service.ts @@ -18,25 +18,14 @@ import type { WorkflowDocument } from '../domain/document'; import { WorkflowCommandError } from '../domain/diagnostic'; import { getDocumentNode } from '../nesting/service'; import { extractCodeInputDefinitions, extractCodeOutputDefinitions } from '../code/io'; - -const dynamicOutputNodeTypes = new Set([ - FlowNodeTypeEnum.code, - FlowNodeTypeEnum.contentExtract, - FlowNodeTypeEnum.httpRequest468, - FlowNodeTypeEnum.loopRun -]); +import { DYNAMIC_INPUT_MARKER_KEYS, DYNAMIC_OUTPUT_NODE_TYPES } from '../template/contract'; const supportsDynamicOutputs = (node: ReturnType) => - dynamicOutputNodeTypes.has(node.flowNodeType) || + DYNAMIC_OUTPUT_NODE_TYPES.has(node.flowNodeType) || node.outputs.some((item) => item.key === NodeOutputKeyEnum.addOutputParam); -const dynamicInputMarkerKeys = new Set([ - NodeInputKeyEnum.addInputParam, - NodeInputKeyEnum.datasetQuoteList -]); - const supportsDynamicInputs = (node: ReturnType) => - node.inputs.some((item) => dynamicInputMarkerKeys.has(item.key)); + node.inputs.some((item) => DYNAMIC_INPUT_MARKER_KEYS.has(item.key)); /** 向带动态输入标记的节点添加一个可编辑输入。 */ export const addNodeInput = ({ @@ -94,7 +83,7 @@ export const removeNodeInput = ({ } if ( !supportsDynamicInputs(node) || - dynamicInputMarkerKeys.has(inputKey) || + DYNAMIC_INPUT_MARKER_KEYS.has(inputKey) || node.inputs[inputIndex].canEdit !== true ) { throw new WorkflowCommandError([ @@ -232,7 +221,7 @@ export const syncCodeNodeIO = ({ .filter( (input) => input.canEdit === true && - !dynamicInputMarkerKeys.has(input.key) && + !DYNAMIC_INPUT_MARKER_KEYS.has(input.key) && !nextInputKeys.has(input.key) ) .forEach((input) => { diff --git a/packages/workflow-core/src/nesting/service.ts b/packages/workflow-core/src/nesting/service.ts index b0094bf690b8..2a5c7b796055 100644 --- a/packages/workflow-core/src/nesting/service.ts +++ b/packages/workflow-core/src/nesting/service.ts @@ -8,18 +8,7 @@ import { import type { StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node'; import type { WorkflowDocument } from '../domain/document'; import { WorkflowCommandError } from '../domain/diagnostic'; - -const forbiddenChildTypes = new Set([ - FlowNodeTypeEnum.workflowStart, - FlowNodeTypeEnum.loop, - FlowNodeTypeEnum.loopRun, - FlowNodeTypeEnum.parallelRun, - FlowNodeTypeEnum.pluginInput, - FlowNodeTypeEnum.pluginOutput, - FlowNodeTypeEnum.pluginConfig, - FlowNodeTypeEnum.systemConfig, - FlowNodeTypeEnum.globalVariable -]); +import { ROOT_ONLY_NODE_TYPES } from '../template/contract'; export const getDocumentNode = (document: WorkflowDocument, nodeId: string) => { const node = document.nodes.find((item) => item.nodeId === nodeId); @@ -79,7 +68,7 @@ export const assertParentAssignment = ({ } ]); } - if (forbiddenChildTypes.has(node.flowNodeType)) { + if (ROOT_ONLY_NODE_TYPES.has(node.flowNodeType)) { throw new WorkflowCommandError([ { code: 'WORKFLOW_NODE_NOT_ALLOWED_IN_CONTAINER', diff --git a/packages/workflow-core/src/template/automationMeta.ts b/packages/workflow-core/src/template/automationMeta.ts index aac1bf0d19ad..9350ee622b4d 100644 --- a/packages/workflow-core/src/template/automationMeta.ts +++ b/packages/workflow-core/src/template/automationMeta.ts @@ -3,15 +3,75 @@ import { type NodeTemplateAutomationMeta, type NodeTemplateRef } from './type'; -import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; -import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import { NodeInputKeyEnum, WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; +import { + FlowNodeInputTypeEnum, + FlowNodeTypeEnum +} from '@fastgpt/global/core/workflow/node/constant'; +import { VariableConditionEnum } from '@fastgpt/global/core/workflow/template/system/ifElse/constant'; const remoteModelInput = { defaultPolicy: 'remoteValidated', resourceKind: 'model' } as const; +const referenceItemSchema = { + type: 'array', + minItems: 1, + maxItems: 2, + items: { type: 'string' } +} as const; + +const inputOptionSchema = { + type: 'object', + required: ['key', 'value'], + additionalProperties: false, + properties: { + key: { type: 'string', minLength: 1 }, + value: { type: 'string', minLength: 1 } + } +} as const; + +const dynamicFieldSchema = { + type: 'object', + required: ['key', 'label', 'valueType'], + properties: { + key: { type: 'string', minLength: 1 }, + label: { type: 'string', minLength: 1 }, + valueType: { type: 'string', enum: Object.values(WorkflowIOValueTypeEnum) }, + required: { type: 'boolean' }, + description: { type: 'string' }, + defaultValue: {} + } +} as const; + +const containerSystemInputs = { + [NodeInputKeyEnum.childrenNodeIdList]: { + configurable: false, + agentHint: 'System-maintained child node IDs.' + }, + [NodeInputKeyEnum.nodeWidth]: { + configurable: false, + agentHint: 'Web layout width; managed by the editor.' + }, + [NodeInputKeyEnum.nodeHeight]: { + configurable: false, + agentHint: 'Web layout height; managed by the editor.' + }, + [NodeInputKeyEnum.nestedNodeInputHeight]: { + configurable: false, + agentHint: 'Web layout input height; managed by the editor.' + } +} satisfies NonNullable; + const automationMetaMap: Record = { + 'builtin:workflow-start': { + inputs: { + [NodeInputKeyEnum.userChatInput]: { + agentHint: 'Initial user question accepted by the workflow.' + } + } + }, 'builtin:ai-chat': { inputs: { [NodeInputKeyEnum.aiModel]: { @@ -39,6 +99,7 @@ const automationMetaMap: Record = { inputs: { text: { agentHint: 'workflow:cli.input.answer', + valueSchema: {}, examples: ['Done'] } } @@ -84,9 +145,10 @@ const automationMetaMap: Record = { items: { type: 'object', required: ['key', 'valueType'], + additionalProperties: false, properties: { - key: { type: 'string' }, - valueType: { type: 'string' }, + key: { type: 'string', minLength: 1 }, + valueType: { type: 'string', enum: Object.values(WorkflowIOValueTypeEnum) }, description: { type: 'string' }, required: { type: 'boolean' }, enum: { type: 'array', items: { type: 'string' } } @@ -100,44 +162,65 @@ const automationMetaMap: Record = { inputs: { [NodeInputKeyEnum.httpReqUrl]: { defaultPolicy: 'userRequired', - bindingRequired: true + bindingRequired: true, + configurable: true, + inputModes: ['literal'], + agentHint: 'Absolute HTTP or HTTPS request URL.' }, [NodeInputKeyEnum.addInputParam]: { configurable: false }, [NodeInputKeyEnum.httpHeaders]: { + agentHint: 'HTTP headers as key/value entries.', valueSchema: { type: 'array', items: { type: 'object', required: ['key', 'value'], + additionalProperties: false, properties: { key: { type: 'string' }, value: { type: 'string' } } } } }, [NodeInputKeyEnum.httpParams]: { + configurable: true, + inputModes: ['literal'], + agentHint: 'URL query parameters as key/value entries.', valueSchema: { type: 'array', items: { type: 'object', required: ['key', 'value'], + additionalProperties: false, properties: { key: { type: 'string' }, value: {} } } } }, [NodeInputKeyEnum.httpFormBody]: { + configurable: true, + inputModes: ['literal'], + agentHint: 'Form body fields as key/value entries.', valueSchema: { type: 'array', items: { type: 'object', required: ['key', 'value'], + additionalProperties: false, properties: { key: { type: 'string' }, value: {} } } } }, [NodeInputKeyEnum.httpJsonBody]: { + configurable: true, + inputModes: ['literal'], + agentHint: 'JSON request body serialized as a string.', valueSchema: { type: 'string' } }, + [NodeInputKeyEnum.httpContentType]: { + configurable: true, + inputModes: ['literal'], + agentHint: 'HTTP request body content type.' + }, [NodeInputKeyEnum.headerSecret]: { configurable: false, defaultPolicy: 'userRequired', @@ -149,6 +232,13 @@ const automationMetaMap: Record = { inputs: { [NodeInputKeyEnum.addInputParam]: { configurable: false + }, + [NodeInputKeyEnum.codeType]: { + agentHint: 'Code language identifier supported by the sandbox.' + }, + [NodeInputKeyEnum.code]: { + agentHint: + 'Complete sandbox function source. Parameters define dynamic inputs and returned object keys define outputs.' } } }, @@ -168,15 +258,39 @@ const automationMetaMap: Record = { 'builtin:if-else': { inputs: { [NodeInputKeyEnum.ifElseList]: { + configurable: true, + inputModes: ['literal'], + agentHint: + 'Ordered conditional branches. Configure branches before connecting branch edges.', valueSchema: { type: 'array', + minItems: 1, items: { type: 'object', required: ['condition', 'list'], + additionalProperties: false, properties: { - branchId: { type: 'string' }, + branchId: { type: 'string', minLength: 1 }, condition: { type: 'string', enum: ['AND', 'OR'] }, - list: { type: 'array', items: { type: 'object' } } + list: { + type: 'array', + minItems: 1, + items: { + type: 'object', + additionalProperties: false, + properties: { + variable: referenceItemSchema, + condition: { + type: 'string', + enum: Object.values(VariableConditionEnum) + }, + value: { + anyOf: [{ type: 'string' }, referenceItemSchema] + }, + valueType: { type: 'string', enum: ['input', 'reference'] } + } + } + } } } } @@ -187,13 +301,11 @@ const automationMetaMap: Record = { inputs: { [NodeInputKeyEnum.aiModel]: remoteModelInput, [NodeInputKeyEnum.agents]: { + agentHint: 'Classification branches. Each key is also the execution branch key.', valueSchema: { type: 'array', - items: { - type: 'object', - required: ['key', 'value'], - properties: { key: { type: 'string' }, value: { type: 'string' } } - } + minItems: 1, + items: inputOptionSchema } } } @@ -201,13 +313,11 @@ const automationMetaMap: Record = { 'builtin:user-select': { inputs: { [NodeInputKeyEnum.userSelectOptions]: { + agentHint: 'User choices. Each key is also the execution branch key.', valueSchema: { type: 'array', - items: { - type: 'object', - required: ['key', 'value'], - properties: { key: { type: 'string' }, value: { type: 'string' } } - } + minItems: 1, + items: inputOptionSchema } } } @@ -215,14 +325,69 @@ const automationMetaMap: Record = { 'builtin:form-input': { inputs: { [NodeInputKeyEnum.userInputForms]: { - valueSchema: { type: 'array', items: { type: 'object' } } + agentHint: 'Form fields. Field keys become dynamic node output keys.', + valueSchema: { + type: 'array', + minItems: 1, + items: { + ...dynamicFieldSchema, + required: ['type', 'key', 'label', 'value', 'valueType', 'required'], + properties: { + ...dynamicFieldSchema.properties, + type: { type: 'string', enum: Object.values(FlowNodeInputTypeEnum) }, + value: {}, + maxLength: { type: 'number' }, + minLength: { type: 'number' }, + max: { type: 'number' }, + min: { type: 'number' }, + list: { + type: 'array', + items: { + type: 'object', + required: ['label', 'value'], + additionalProperties: false, + properties: { + label: { type: 'string' }, + value: { type: 'string' } + } + } + } + } + } + } } } }, 'builtin:variable-update': { inputs: { [NodeInputKeyEnum.updateList]: { - valueSchema: { type: 'array', items: { type: 'object' } } + configurable: true, + inputModes: ['literal'], + agentHint: + 'Variable updates. renderType determines whether value is literal or a node reference.', + valueSchema: { + type: 'array', + minItems: 1, + items: { + type: 'object', + required: ['renderType'], + additionalProperties: false, + properties: { + variable: referenceItemSchema, + value: { + anyOf: [referenceItemSchema, { type: 'array', items: referenceItemSchema }] + }, + valueType: { type: 'string', enum: Object.values(WorkflowIOValueTypeEnum) }, + renderType: { + type: 'string', + enum: [FlowNodeInputTypeEnum.input, FlowNodeInputTypeEnum.reference] + }, + numberOperator: { type: 'string', enum: ['+', '-', '*', '/', '='] }, + booleanMode: { type: 'string', enum: ['true', 'false', 'negate'] }, + arrayMode: { type: 'string', enum: ['append', 'clear', 'equal'] } + } + } + } } } }, @@ -231,6 +396,34 @@ const automationMetaMap: Record = { [NodeInputKeyEnum.aiModel]: remoteModelInput } }, + 'builtin:read-files': { + inputs: { + [NodeInputKeyEnum.fileUrlList]: { + agentHint: 'Reference an upstream Array containing file URLs.' + } + } + }, + 'builtin:parallel-run': { + inputs: { + [NodeInputKeyEnum.nestedInputArray]: { + agentHint: 'Reference the array processed concurrently by child nodes.' + }, + ...containerSystemInputs + } + }, + 'builtin:loop-run': { + inputs: { + [NodeInputKeyEnum.loopRunInputArray]: { + agentHint: 'Reference the array iterated by child nodes.' + }, + [NodeInputKeyEnum.loopCustomOutputs]: { + configurable: false, + agentHint: 'Dynamic output marker. Use output add/remove commands instead of input set.' + }, + ...containerSystemInputs + } + }, + 'builtin:loop-run-break': { inputs: {} }, 'builtin:dataset-concat': { inputs: { [NodeInputKeyEnum.datasetQuoteList]: { @@ -249,6 +442,7 @@ const automationMetaMap: Record = { }; const templateRefByFlowNodeType: Partial> = { + [FlowNodeTypeEnum.workflowStart]: 'builtin:workflow-start', [FlowNodeTypeEnum.chatNode]: 'builtin:ai-chat', [FlowNodeTypeEnum.textEditor]: 'builtin:text-editor', [FlowNodeTypeEnum.answerNode]: 'builtin:assigned-answer', @@ -264,6 +458,10 @@ const templateRefByFlowNodeType: Partial> = { [FlowNodeTypeEnum.formInput]: 'builtin:form-input', [FlowNodeTypeEnum.variableUpdate]: 'builtin:variable-update', [FlowNodeTypeEnum.toolCall]: 'builtin:tool-call', + [FlowNodeTypeEnum.readFiles]: 'builtin:read-files', + [FlowNodeTypeEnum.parallelRun]: 'builtin:parallel-run', + [FlowNodeTypeEnum.loopRun]: 'builtin:loop-run', + [FlowNodeTypeEnum.loopRunBreak]: 'builtin:loop-run-break', [FlowNodeTypeEnum.datasetConcatNode]: 'builtin:dataset-concat', [FlowNodeTypeEnum.customFeedback]: 'builtin:custom-feedback' }; diff --git a/packages/workflow-core/src/template/contract.ts b/packages/workflow-core/src/template/contract.ts new file mode 100644 index 000000000000..1823ca062b05 --- /dev/null +++ b/packages/workflow-core/src/template/contract.ts @@ -0,0 +1,214 @@ +import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; +import { + FlowNodeTypeEnum, + isInteractiveNodeType, + isNestedChildSystemNodeType, + isNestedParentNodeType +} from '@fastgpt/global/core/workflow/node/constant'; +import type { FlowNodeTemplateType } from '@fastgpt/global/core/workflow/type/node'; + +export type NodeExecutionSourceKind = + | 'next' + | 'branch' + | 'sourceOutput' + | 'catch' + | 'selectedTools'; +export type NodeExecutionTargetKind = 'target' | 'selectedTools'; + +export type NodeRuntimeContract = { + execution: { + sourceKinds: NodeExecutionSourceKind[]; + targetKinds: NodeExecutionTargetKind[]; + terminal: boolean; + branch?: { + inputKey: string; + keyField: 'branchId' | 'key'; + keyFieldRequiredForNewValues: boolean; + fallbackKey?: string; + configureBeforeConnect: true; + }; + }; + dynamicIO: { + inputs: { + manual: boolean; + derivedFromInputKeys: string[]; + }; + outputs: { + manual: boolean; + derivedFromInputKeys: string[]; + }; + }; + container: { + kind: 'none' | 'parallel' | 'loop'; + rootAllowed: boolean; + allowedParentTypes: string[]; + }; + effects: string[]; +}; + +export const NODE_TYPES_WITHOUT_NEXT_PORT: ReadonlySet = new Set([ + FlowNodeTypeEnum.ifElseNode, + FlowNodeTypeEnum.userSelect, + FlowNodeTypeEnum.classifyQuestion, + FlowNodeTypeEnum.answerNode, + FlowNodeTypeEnum.loopRunBreak, + FlowNodeTypeEnum.nestedEnd, + FlowNodeTypeEnum.pluginOutput +]); + +export const TOOL_TARGET_NODE_TYPES: ReadonlySet = new Set([ + FlowNodeTypeEnum.tool, + FlowNodeTypeEnum.toolSet, + FlowNodeTypeEnum.pluginModule, + FlowNodeTypeEnum.appModule, + FlowNodeTypeEnum.runApp, + FlowNodeTypeEnum.chatNode, + FlowNodeTypeEnum.answerNode, + FlowNodeTypeEnum.datasetSearchNode, + FlowNodeTypeEnum.contentExtract, + FlowNodeTypeEnum.httpRequest468, + FlowNodeTypeEnum.toolParams, + FlowNodeTypeEnum.userSelect, + FlowNodeTypeEnum.formInput, + FlowNodeTypeEnum.variableUpdate +]); + +export const DYNAMIC_OUTPUT_NODE_TYPES: ReadonlySet = new Set([ + FlowNodeTypeEnum.code, + FlowNodeTypeEnum.contentExtract, + FlowNodeTypeEnum.httpRequest468, + FlowNodeTypeEnum.loopRun +]); + +export const DYNAMIC_INPUT_MARKER_KEYS: ReadonlySet = new Set([ + NodeInputKeyEnum.addInputParam, + NodeInputKeyEnum.datasetQuoteList +]); + +export const ROOT_ONLY_NODE_TYPES: ReadonlySet = new Set([ + FlowNodeTypeEnum.workflowStart, + FlowNodeTypeEnum.loop, + FlowNodeTypeEnum.loopRun, + FlowNodeTypeEnum.parallelRun, + FlowNodeTypeEnum.pluginInput, + FlowNodeTypeEnum.pluginOutput, + FlowNodeTypeEnum.pluginConfig, + FlowNodeTypeEnum.systemConfig, + FlowNodeTypeEnum.globalVariable +]); + +const CONTAINER_NODE_TYPES = [ + FlowNodeTypeEnum.loop, + FlowNodeTypeEnum.parallelRun, + FlowNodeTypeEnum.loopRun +]; + +const getNodePlacement = (flowNodeType: FlowNodeTypeEnum) => { + if (flowNodeType === FlowNodeTypeEnum.loopRunBreak) { + return { rootAllowed: false, allowedParentTypes: [FlowNodeTypeEnum.loopRun] }; + } + if (isNestedChildSystemNodeType(flowNodeType)) { + return { rootAllowed: false, allowedParentTypes: CONTAINER_NODE_TYPES }; + } + if (ROOT_ONLY_NODE_TYPES.has(flowNodeType)) { + return { rootAllowed: true, allowedParentTypes: [] }; + } + return { + rootAllowed: true, + allowedParentTypes: isInteractiveNodeType(flowNodeType) + ? [FlowNodeTypeEnum.loop, FlowNodeTypeEnum.loopRun] + : CONTAINER_NODE_TYPES + }; +}; + +const getBranchContract = (flowNodeType: FlowNodeTypeEnum) => { + if (flowNodeType === FlowNodeTypeEnum.ifElseNode) { + return { + inputKey: NodeInputKeyEnum.ifElseList, + keyField: 'branchId' as const, + keyFieldRequiredForNewValues: true, + fallbackKey: 'ELSE', + configureBeforeConnect: true as const + }; + } + if (flowNodeType === FlowNodeTypeEnum.userSelect) { + return { + inputKey: NodeInputKeyEnum.userSelectOptions, + keyField: 'key' as const, + keyFieldRequiredForNewValues: true, + configureBeforeConnect: true as const + }; + } + if (flowNodeType === FlowNodeTypeEnum.classifyQuestion) { + return { + inputKey: NodeInputKeyEnum.agents, + keyField: 'key' as const, + keyFieldRequiredForNewValues: true, + configureBeforeConnect: true as const + }; + } +}; + +/** + * 从模板和共享节点集合生成可供 Validator、CLI 和 Agent 共用的运行时契约。 + * 模板展示字段只决定当前节点实例是否开放 target/catch;节点类型集合承载稳定领域规则。 + */ +export const getNodeRuntimeContract = (template: FlowNodeTemplateType): NodeRuntimeContract => { + const flowNodeType = template.flowNodeType; + const branch = getBranchContract(flowNodeType); + const sourceKinds: NodeExecutionSourceKind[] = [ + !NODE_TYPES_WITHOUT_NEXT_PORT.has(flowNodeType) && template.showSourceHandle !== false + ? 'next' + : undefined, + branch ? 'branch' : undefined, + template.outputs.some((output) => output.type === 'source') ? 'sourceOutput' : undefined, + template.catchError !== undefined ? 'catch' : undefined, + flowNodeType === FlowNodeTypeEnum.toolCall ? 'selectedTools' : undefined + ].filter((kind): kind is NodeExecutionSourceKind => kind !== undefined); + const targetKinds: NodeExecutionTargetKind[] = [ + template.showTargetHandle !== false ? 'target' : undefined, + TOOL_TARGET_NODE_TYPES.has(flowNodeType) ? 'selectedTools' : undefined + ].filter((kind): kind is NodeExecutionTargetKind => kind !== undefined); + const dynamicInputs = template.inputs.some((input) => DYNAMIC_INPUT_MARKER_KEYS.has(input.key)); + const dynamicOutputs = + DYNAMIC_OUTPUT_NODE_TYPES.has(flowNodeType) || + template.outputs.some((output) => output.key === 'system_addOutputParam'); + const derivedInputKeys = flowNodeType === FlowNodeTypeEnum.code ? [NodeInputKeyEnum.code] : []; + const derivedOutputKeys = + flowNodeType === FlowNodeTypeEnum.code + ? [NodeInputKeyEnum.code] + : flowNodeType === FlowNodeTypeEnum.formInput + ? [NodeInputKeyEnum.userInputForms] + : []; + const effects = [ + branch ? 'prune-invalid-branch-edges' : undefined, + flowNodeType === FlowNodeTypeEnum.code ? 'sync-code-inputs-and-outputs' : undefined, + flowNodeType === FlowNodeTypeEnum.formInput ? 'sync-form-field-outputs' : undefined, + isNestedParentNodeType(flowNodeType) ? 'sync-container-children' : undefined, + dynamicOutputs ? 'prune-removed-output-edges' : undefined + ].filter((effect): effect is string => effect !== undefined); + const placement = getNodePlacement(flowNodeType); + + return { + execution: { + sourceKinds, + targetKinds, + terminal: sourceKinds.length === 0, + branch + }, + dynamicIO: { + inputs: { manual: dynamicInputs, derivedFromInputKeys: derivedInputKeys }, + outputs: { manual: dynamicOutputs, derivedFromInputKeys: derivedOutputKeys } + }, + container: { + kind: + flowNodeType === FlowNodeTypeEnum.parallelRun + ? 'parallel' + : flowNodeType === FlowNodeTypeEnum.loopRun + ? 'loop' + : 'none', + ...placement + }, + effects + }; +}; diff --git a/packages/workflow-core/src/template/descriptor.ts b/packages/workflow-core/src/template/descriptor.ts index 06e7660d21f6..9d7366c4d751 100644 --- a/packages/workflow-core/src/template/descriptor.ts +++ b/packages/workflow-core/src/template/descriptor.ts @@ -9,6 +9,7 @@ import type { WorkflowInputDefaultPolicy, WorkflowResourceKind } from './type'; +import { getNodeRuntimeContract, type NodeRuntimeContract } from './contract'; export type NodeParameterInputMode = 'literal' | 'reference' | 'secret'; @@ -36,6 +37,7 @@ export type NodeParameterDescriptor = { }; export type NodeTemplateDescriptor = { + schemaVersion: 'fastgpt-workflow-node-contract/v1'; template: NodeTemplateRef; name: string; intro?: string; @@ -54,11 +56,21 @@ export type NodeTemplateDescriptor = { unique: boolean; isTool: boolean; }; + execution: NodeRuntimeContract['execution']; + dynamicIO: NodeRuntimeContract['dynamicIO']; + container: NodeRuntimeContract['container']; + effects: NodeRuntimeContract['effects']; }; const getInputModes = (renderTypes: FlowNodeInputTypeEnum[]): NodeParameterInputMode[] => { + const literalRenderTypes = renderTypes.filter( + (type) => + type !== FlowNodeInputTypeEnum.reference && + type !== FlowNodeInputTypeEnum.hidden && + type !== FlowNodeInputTypeEnum.addInputParam + ); const modes = [ - renderTypes.some((type) => type !== FlowNodeInputTypeEnum.reference) ? 'literal' : undefined, + literalRenderTypes.length > 0 ? 'literal' : undefined, renderTypes.includes(FlowNodeInputTypeEnum.reference) ? 'reference' : undefined, renderTypes.includes(FlowNodeInputTypeEnum.password) ? 'secret' : undefined ].filter((item): item is NodeParameterInputMode => item !== undefined); @@ -76,58 +88,73 @@ export const normalizeNodeTemplateDescriptor = ({ templateRef: NodeTemplateRef; automationMeta?: NodeTemplateAutomationMeta; translate?: (value: string) => string; -}): NodeTemplateDescriptor => ({ - template: templateRef, - name: translate(template.name), - intro: template.intro ? translate(template.intro) : undefined, - flowNodeType: template.flowNodeType, - inputs: template.inputs - .filter((input) => input.deprecated !== true) - .map((input) => { - const meta = automationMeta?.inputs?.[input.key]; - const constraints = { - min: input.min, - max: input.max, - minLength: input.minLength, - maxLength: input.maxLength, - valueSchema: meta?.valueSchema - }; - return { - key: input.key, - label: translate(input.label), - description: translate( - meta?.agentHint ?? input.toolDescription ?? input.description ?? input.label - ), - valueType: input.valueType, - required: input.required ?? false, - defaultValue: input.defaultValue ?? input.value, - defaultPolicy: meta?.defaultPolicy ?? 'template', - resourceKind: meta?.resourceKind, - bindingRequired: meta?.bindingRequired ?? false, - configurable: meta?.configurable ?? input.canEdit !== false, - inputModes: getInputModes(input.renderTypeList), - enum: input.list?.map((item) => ({ - ...item, - label: item.label ? translate(item.label) : undefined, - description: item.description ? translate(item.description) : undefined - })), - constraints, - examples: meta?.examples - }; - }), - outputs: template.outputs - .filter((output) => output.deprecated !== true) - .map((output) => ({ - id: output.id, - key: output.key, - label: translate(output.label ?? output.key), - description: output.description ? translate(output.description) : undefined, - valueType: output.valueType, - required: output.required ?? false, - executable: output.type === FlowNodeOutputTypeEnum.source - })), - constraints: { - unique: template.unique === true, - isTool: template.isTool === true - } -}); +}): NodeTemplateDescriptor => { + const runtimeContract = getNodeRuntimeContract(template); + return { + schemaVersion: 'fastgpt-workflow-node-contract/v1', + template: templateRef, + name: translate(template.name), + intro: template.intro ? translate(template.intro) : undefined, + flowNodeType: template.flowNodeType, + inputs: template.inputs + .filter((input) => input.deprecated !== true) + .map((input) => { + const meta = automationMeta?.inputs?.[input.key]; + const constraints = { + min: input.min, + max: input.max, + minLength: input.minLength, + maxLength: input.maxLength, + valueSchema: meta?.valueSchema + }; + return { + key: input.key, + label: translate(input.label), + description: translate( + [ + meta?.agentHint, + input.toolDescription, + input.description, + input.label, + input.key + ].find((value) => typeof value === 'string' && value.trim().length > 0) as string + ), + valueType: input.valueType, + required: input.required ?? false, + defaultValue: input.defaultValue ?? input.value, + defaultPolicy: meta?.defaultPolicy ?? 'template', + resourceKind: meta?.resourceKind, + bindingRequired: meta?.bindingRequired ?? false, + configurable: + meta?.configurable ?? + (input.canEdit !== false && + !input.renderTypeList.includes(FlowNodeInputTypeEnum.hidden) && + !input.renderTypeList.includes(FlowNodeInputTypeEnum.addInputParam)), + inputModes: meta?.inputModes ?? getInputModes(input.renderTypeList), + enum: input.list?.map((item) => ({ + ...item, + label: item.label ? translate(item.label) : undefined, + description: item.description ? translate(item.description) : undefined + })), + constraints, + examples: meta?.examples + }; + }), + outputs: template.outputs + .filter((output) => output.deprecated !== true) + .map((output) => ({ + id: output.id, + key: output.key, + label: translate(output.label ?? output.key), + description: output.description ? translate(output.description) : undefined, + valueType: output.valueType, + required: output.required ?? false, + executable: output.type === FlowNodeOutputTypeEnum.source + })), + constraints: { + unique: template.unique === true, + isTool: template.isTool === true + }, + ...runtimeContract + }; +}; diff --git a/packages/workflow-core/src/template/type.ts b/packages/workflow-core/src/template/type.ts index fdd7efebe606..dfd3d3dad2f1 100644 --- a/packages/workflow-core/src/template/type.ts +++ b/packages/workflow-core/src/template/type.ts @@ -52,6 +52,7 @@ export type NodeInputAutomationMeta = { defaultPolicy?: WorkflowInputDefaultPolicy; resourceKind?: WorkflowResourceKind; bindingRequired?: boolean; + inputModes?: Array<'literal' | 'reference' | 'secret'>; }; export type NodeTemplateAutomationMeta = { diff --git a/packages/workflow-core/src/template/valueSchema.ts b/packages/workflow-core/src/template/valueSchema.ts index 03355b7281f7..a733b85dfce7 100644 --- a/packages/workflow-core/src/template/valueSchema.ts +++ b/packages/workflow-core/src/template/valueSchema.ts @@ -2,12 +2,41 @@ import { WorkflowCommandError } from '../domain/diagnostic'; import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; type JsonSchema = { - type?: string; + type?: string | string[]; + const?: unknown; required?: string[]; properties?: Record; - items?: JsonSchema; + items?: JsonSchema | JsonSchema[] | false; + prefixItems?: JsonSchema[]; enum?: unknown[]; - additionalProperties?: boolean; + anyOf?: JsonSchema[]; + oneOf?: JsonSchema[]; + allOf?: JsonSchema[]; + not?: JsonSchema; + additionalProperties?: boolean | JsonSchema; + minItems?: number; + maxItems?: number; + uniqueItems?: boolean; + minLength?: number; + maxLength?: number; + pattern?: string; + minimum?: number; + maximum?: number; +}; + +const valuesEqual = (left: unknown, right: unknown) => + Object.is(left, right) || JSON.stringify(left) === JSON.stringify(right); + +const valueMatchesType = (value: unknown, type: string) => { + if (type === 'null') return value === null; + if (type === 'string') return typeof value === 'string'; + if (type === 'number') return typeof value === 'number' && Number.isFinite(value); + if (type === 'integer') return typeof value === 'number' && Number.isInteger(value); + if (type === 'boolean') return typeof value === 'boolean'; + if (type === 'array') return Array.isArray(value); + if (type === 'object') + return value !== null && typeof value === 'object' && !Array.isArray(value); + return true; }; export const inputValueNeedsSchema = ({ @@ -26,34 +55,102 @@ export const inputValueNeedsSchema = ({ export const valueMatchesSchema = (value: unknown, schema: Record): boolean => { const parsedSchema = schema as JsonSchema; - if (parsedSchema.enum && !parsedSchema.enum.some((item) => Object.is(item, value))) return false; - if (parsedSchema.type === 'string' && typeof value !== 'string') return false; - if (parsedSchema.type === 'number' && typeof value !== 'number') return false; - if (parsedSchema.type === 'integer' && (!Number.isInteger(value) || typeof value !== 'number')) + if (parsedSchema.const !== undefined && !valuesEqual(parsedSchema.const, value)) return false; + if (parsedSchema.enum && !parsedSchema.enum.some((item) => valuesEqual(item, value))) + return false; + if (parsedSchema.anyOf && !parsedSchema.anyOf.some((item) => valueMatchesSchema(value, item))) { + return false; + } + if ( + parsedSchema.oneOf && + parsedSchema.oneOf.filter((item) => valueMatchesSchema(value, item)).length !== 1 + ) { + return false; + } + if (parsedSchema.allOf && !parsedSchema.allOf.every((item) => valueMatchesSchema(value, item))) { return false; - if (parsedSchema.type === 'boolean' && typeof value !== 'boolean') return false; - if (parsedSchema.type === 'array') { - if (!Array.isArray(value)) return false; - return ( - !parsedSchema.items || - value.every((item) => valueMatchesSchema(item, parsedSchema.items as Record)) - ); } - if (parsedSchema.type === 'object') { - if (!value || typeof value !== 'object' || Array.isArray(value)) return false; + if (parsedSchema.not && valueMatchesSchema(value, parsedSchema.not)) return false; + if (parsedSchema.type) { + const types = Array.isArray(parsedSchema.type) ? parsedSchema.type : [parsedSchema.type]; + if (!types.some((type) => valueMatchesType(value, type))) return false; + } + if (typeof value === 'string') { + if (parsedSchema.minLength !== undefined && value.length < parsedSchema.minLength) return false; + if (parsedSchema.maxLength !== undefined && value.length > parsedSchema.maxLength) return false; + if (parsedSchema.pattern !== undefined && !new RegExp(parsedSchema.pattern).test(value)) + return false; + } + if (typeof value === 'number') { + if (parsedSchema.minimum !== undefined && value < parsedSchema.minimum) return false; + if (parsedSchema.maximum !== undefined && value > parsedSchema.maximum) return false; + } + if (Array.isArray(value)) { + if (parsedSchema.minItems !== undefined && value.length < parsedSchema.minItems) return false; + if (parsedSchema.maxItems !== undefined && value.length > parsedSchema.maxItems) return false; + if ( + parsedSchema.uniqueItems && + value.some((item, index) => value.slice(0, index).some((other) => valuesEqual(item, other))) + ) { + return false; + } + if ( + parsedSchema.prefixItems?.some( + (itemSchema, index) => index < value.length && !valueMatchesSchema(value[index], itemSchema) + ) + ) { + return false; + } + if (parsedSchema.items === false && value.length > (parsedSchema.prefixItems?.length ?? 0)) { + return false; + } + if (Array.isArray(parsedSchema.items)) { + if ( + parsedSchema.items.some( + (itemSchema, index) => + index < value.length && !valueMatchesSchema(value[index], itemSchema) + ) + ) { + return false; + } + } else if (parsedSchema.items && typeof parsedSchema.items === 'object') { + const startIndex = parsedSchema.prefixItems?.length ?? 0; + if ( + value + .slice(startIndex) + .some((item) => !valueMatchesSchema(item, parsedSchema.items as JsonSchema)) + ) { + return false; + } + } + } + if (value !== null && typeof value === 'object' && !Array.isArray(value)) { const record = value as Record; if (parsedSchema.required?.some((key) => record[key] === undefined)) return false; + const additionalKeys = Object.keys(record).filter((key) => !parsedSchema.properties?.[key]); + if (parsedSchema.additionalProperties === false && additionalKeys.length > 0) return false; + if ( + parsedSchema.additionalProperties && + typeof parsedSchema.additionalProperties === 'object' && + additionalKeys.some( + (key) => + !valueMatchesSchema( + record[key], + parsedSchema.additionalProperties as Record + ) + ) + ) { + return false; + } if ( - parsedSchema.additionalProperties === false && - Object.keys(record).some((key) => !parsedSchema.properties?.[key]) + Object.entries(parsedSchema.properties ?? {}).some( + ([key, itemSchema]) => + record[key] !== undefined && + !valueMatchesSchema(record[key], itemSchema as Record) + ) ) { return false; } - return Object.entries(parsedSchema.properties ?? {}).every( - ([key, itemSchema]) => - record[key] === undefined || - valueMatchesSchema(record[key], itemSchema as Record) - ); } return true; }; diff --git a/packages/workflow-core/test/template/template.test.ts b/packages/workflow-core/test/template/template.test.ts index f0b38c639972..a8ab770d864c 100644 --- a/packages/workflow-core/test/template/template.test.ts +++ b/packages/workflow-core/test/template/template.test.ts @@ -69,6 +69,7 @@ describe('builtinTemplateProvider', () => { const templateName = formatNodeTemplateRef(ref); const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); const inputKeys = new Set(resolved.template.inputs.map((input) => input.key)); + expect(resolved.automationMeta, templateName).toBeDefined(); for (const [inputKey, meta] of Object.entries(resolved.automationMeta?.inputs ?? {})) { expect(inputKeys.has(inputKey), `${templateName}.${inputKey}`).toBe(true); if (meta.resourceKind !== undefined) { @@ -91,6 +92,62 @@ describe('builtinTemplateProvider', () => { } } }); + + it('publishes a complete machine contract for every exposed builtin template', async () => { + const structuredValueTypes = new Set([ + WorkflowIOValueTypeEnum.object, + WorkflowIOValueTypeEnum.arrayObject, + WorkflowIOValueTypeEnum.arrayAny, + WorkflowIOValueTypeEnum.selectDataset, + WorkflowIOValueTypeEnum.selectApp, + WorkflowIOValueTypeEnum.dynamic + ]); + const systemInputKeys = new Set([ + 'system_addInputParam', + 'childrenNodeIdList', + 'nodeWidth', + 'nodeHeight', + 'loopNodeInputHeight', + 'loopCustomOutputs' + ]); + + for (const ref of await builtinTemplateProvider.list({ locale: 'en' })) { + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + const descriptor = normalizeNodeTemplateDescriptor({ ...resolved, templateRef: ref }); + const templateName = formatNodeTemplateRef(ref); + + expect(descriptor.schemaVersion, templateName).toBe('fastgpt-workflow-node-contract/v1'); + expect(descriptor.execution.sourceKinds, templateName).toEqual( + expect.arrayContaining( + descriptor.execution.sourceKinds.filter((kind) => + ['next', 'branch', 'sourceOutput', 'catch', 'selectedTools'].includes(kind) + ) + ) + ); + expect(descriptor.execution.terminal, templateName).toBe( + descriptor.execution.sourceKinds.length === 0 + ); + for (const input of descriptor.inputs) { + if (input.configurable) { + expect(input.description.trim().length, `${templateName}.${input.key}`).toBeGreaterThan( + 0 + ); + expect(input.inputModes.length, `${templateName}.${input.key}`).toBeGreaterThan(0); + } + if ( + input.configurable && + input.inputModes.includes('literal') && + input.valueType && + structuredValueTypes.has(input.valueType as WorkflowIOValueTypeEnum) + ) { + expect(input.constraints?.valueSchema, `${templateName}.${input.key}`).toBeDefined(); + } + if (systemInputKeys.has(input.key)) { + expect(input.configurable, `${templateName}.${input.key}`).toBe(false); + } + } + } + }); }); describe('normalizeNodeTemplateDescriptor', () => { @@ -107,6 +164,7 @@ describe('normalizeNodeTemplateDescriptor', () => { const modelInput = descriptor.inputs.find((input) => input.key === 'model'); expect(descriptor.name).toMatch(/^translated:/); + expect(descriptor.schemaVersion).toBe('fastgpt-workflow-node-contract/v1'); expect(userInput?.inputModes).toEqual(['literal', 'reference']); expect(promptInput?.examples).toEqual(['You are a helpful assistant.']); expect(modelInput).toMatchObject({ @@ -116,9 +174,65 @@ describe('normalizeNodeTemplateDescriptor', () => { }); expect(modelInput?.examples).toBeUndefined(); expect(descriptor.constraints.isTool).toBe(true); + expect(descriptor.execution).toMatchObject({ + sourceKinds: expect.arrayContaining(['next']), + targetKinds: expect.arrayContaining(['target', 'selectedTools']), + terminal: false + }); expect(JSON.stringify(resolved.template)).not.toContain('invalidCondition'); }); + it('describes branch, terminal, container and dynamic IO capabilities', async () => { + const getDescriptor = async (templateId: string) => { + const ref = parseNodeTemplateRef(`builtin:${templateId}`); + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + return normalizeNodeTemplateDescriptor({ ...resolved, templateRef: ref }); + }; + + await expect(getDescriptor('if-else')).resolves.toMatchObject({ + execution: { + sourceKinds: ['branch'], + targetKinds: ['target'], + terminal: false, + branch: { + inputKey: 'ifElseList', + keyField: 'branchId', + keyFieldRequiredForNewValues: true, + fallbackKey: 'ELSE', + configureBeforeConnect: true + } + }, + effects: expect.arrayContaining(['prune-invalid-branch-edges']) + }); + await expect(getDescriptor('assigned-answer')).resolves.toMatchObject({ + execution: { sourceKinds: [], terminal: true } + }); + await expect(getDescriptor('loop-run-break')).resolves.toMatchObject({ + execution: { sourceKinds: [], targetKinds: ['target'], terminal: true }, + container: { rootAllowed: false, allowedParentTypes: ['loopRun'] } + }); + await expect(getDescriptor('parallel-run')).resolves.toMatchObject({ + container: { kind: 'parallel', rootAllowed: true, allowedParentTypes: [] }, + dynamicIO: { + inputs: { manual: false, derivedFromInputKeys: [] }, + outputs: { manual: false, derivedFromInputKeys: [] } + } + }); + await expect(getDescriptor('code')).resolves.toMatchObject({ + dynamicIO: { + inputs: { manual: true, derivedFromInputKeys: ['code'] }, + outputs: { manual: true, derivedFromInputKeys: ['code'] } + } + }); + await expect(getDescriptor('form-input')).resolves.toMatchObject({ + container: { rootAllowed: true, allowedParentTypes: ['loop', 'loopRun'] }, + dynamicIO: { + inputs: { manual: false }, + outputs: { manual: false, derivedFromInputKeys: ['userInputForms'] } + } + }); + }); + it('exposes explicit binding requirements without storing metadata in nodes', async () => { const ref = parseNodeTemplateRef('builtin:http-request'); const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); diff --git a/packages/workflow-core/test/template/valueSchema.test.ts b/packages/workflow-core/test/template/valueSchema.test.ts new file mode 100644 index 000000000000..75aa054288c2 --- /dev/null +++ b/packages/workflow-core/test/template/valueSchema.test.ts @@ -0,0 +1,131 @@ +import { getAutomationMeta, parseNodeTemplateRef, valueMatchesSchema } from '../../src'; +import { describe, expect, it } from 'vitest'; + +describe('valueMatchesSchema', () => { + it('validates nested objects, arrays and scalar constraints', () => { + const schema = { + type: 'array', + minItems: 1, + maxItems: 2, + uniqueItems: true, + items: { + type: 'object', + required: ['key', 'score'], + additionalProperties: false, + properties: { + key: { type: 'string', minLength: 2, maxLength: 5, pattern: '^[a-z]+$' }, + score: { type: 'number', minimum: 0, maximum: 1 } + } + } + }; + + expect(valueMatchesSchema([{ key: 'ok', score: 0.5 }], schema)).toBe(true); + expect(valueMatchesSchema([], schema)).toBe(false); + expect(valueMatchesSchema([{ key: 'A', score: 2 }], schema)).toBe(false); + expect(valueMatchesSchema([{ key: 'ok', score: 0.5, extra: true }], schema)).toBe(false); + expect( + valueMatchesSchema( + [ + { key: 'ok', score: 0.5 }, + { key: 'ok', score: 0.5 } + ], + schema + ) + ).toBe(false); + }); + + it('validates unions, constants, tuples and additional property schemas', () => { + expect(valueMatchesSchema('x', { anyOf: [{ type: 'string' }, { type: 'number' }] })).toBe(true); + expect(valueMatchesSchema(true, { oneOf: [{ type: 'boolean' }, { const: true }] })).toBe(false); + expect(valueMatchesSchema(2, { allOf: [{ type: 'integer' }, { minimum: 1 }] })).toBe(true); + expect(valueMatchesSchema('blocked', { not: { const: 'blocked' } })).toBe(false); + expect( + valueMatchesSchema(['node', 'output'], { + type: 'array', + prefixItems: [{ type: 'string' }, { type: 'string' }], + items: false + }) + ).toBe(true); + expect( + valueMatchesSchema(['node', 'output', 'extra'], { + type: 'array', + prefixItems: [{ type: 'string' }, { type: 'string' }], + items: false + }) + ).toBe(false); + expect( + valueMatchesSchema( + { known: 'x', extra: 1 }, + { + type: 'object', + properties: { known: { type: 'string' } }, + additionalProperties: { type: 'integer' } + } + ) + ).toBe(true); + }); + + it('validates the complete branching, form and variable-update contracts', () => { + const getInputSchema = (templateId: string, inputKey: string) => + getAutomationMeta(parseNodeTemplateRef(`builtin:${templateId}`))?.inputs?.[inputKey] + ?.valueSchema as Record; + + const ifElseSchema = getInputSchema('if-else', 'ifElseList'); + expect( + valueMatchesSchema( + [ + { + branchId: 'matched', + condition: 'AND', + list: [ + { + variable: ['start', 'userChatInput'], + condition: 'equalTo', + value: ['', 'hello'], + valueType: 'input' + } + ] + } + ], + ifElseSchema + ) + ).toBe(true); + expect( + valueMatchesSchema([{ condition: 'XOR', list: [{ condition: 'unknown' }] }], ifElseSchema) + ).toBe(false); + + const formSchema = getInputSchema('form-input', 'userInputForms'); + expect( + valueMatchesSchema( + [ + { + type: 'input', + key: 'name', + label: 'Name', + value: '', + valueType: 'string', + required: true + } + ], + formSchema + ) + ).toBe(true); + expect(valueMatchesSchema([{ key: 'name' }], formSchema)).toBe(false); + + const updateSchema = getInputSchema('variable-update', 'updateList'); + expect( + valueMatchesSchema( + [ + { + variable: ['globalVariable', 'answer'], + value: ['', 'done'], + valueType: 'string', + renderType: 'input' + } + ], + updateSchema + ) + ).toBe(true); + expect(valueMatchesSchema([{ renderType: 'textarea' }], updateSchema)).toBe(false); + }); +}); From c067c5c5239e68db867c860893ea70de264a4cbe Mon Sep 17 00:00:00 2001 From: xxyyh <2289112474@qq.com> Date: Tue, 28 Jul 2026 23:29:03 +0800 Subject: [PATCH 03/18] chore(workflow-builder): checkpoint before single sandbox --- ...low-builder-single-sandbox-architecture.md | 305 +++++++++++++ ...00\345\217\221\346\226\207\346\241\243.md" | 131 ++++-- ...76\350\256\241\346\226\207\346\241\243.md" | 119 ++++-- .../context-compression-algorithm.excalidraw | 1 + diagrams/context-compression-algorithm.mmd | 63 +++ diagrams/context-compression-algorithm.png | Bin 0 -> 509674 bytes diagrams/context-compression-algorithm.svg | 1 + ...ow-builder-current-architecture.excalidraw | 1 + .../workflow-builder-current-architecture.mmd | 37 ++ .../workflow-builder-current-architecture.png | Bin 0 -> 101510 bytes .../workflow-builder-current-architecture.svg | 1 + package.json | 5 +- packages/global/common/system/types/index.ts | 1 + .../global/core/workflow/builder/constants.ts | 20 + .../global/core/workflow/runtime/constants.ts | 5 +- packages/global/core/workflow/runtime/sse.ts | 12 + packages/global/core/workflow/utils.ts | 84 ++++ .../openapi/core/workflow/builder/api.ts | 121 ++++++ .../openapi/core/workflow/builder/index.ts | 33 ++ packages/global/openapi/path.ts | 8 +- packages/global/openapi/tag.ts | 2 + .../global/test/core/workflow/utils.test.ts | 401 ++++++++++++++++++ .../core/ai/llm/agentLoop/domain/runtime.ts | 13 + .../llm/agentLoop/provider/fastAgent/index.ts | 14 +- .../agentLoop/provider/fastAgent/loop/type.ts | 1 + .../dispatch/ai/agent/sub/sandbox/index.ts | 3 +- .../llm/agentLoop/fastAgentProvider.test.ts | 40 ++ .../ai/llm/agentLoop/piAgentProvider.test.ts | 38 ++ .../core/ai/llm/agentLoop/runtime.test.ts | 76 ++++ packages/web/i18n/en/workflow.json | 6 + packages/web/i18n/zh-CN/workflow.json | 6 + packages/web/i18n/zh-Hant/workflow.json | 6 + packages/workflow-cli/package.json | 10 +- .../workflow-cli/src/commands/changeSet.ts | 233 ++++++++++ .../workflow-cli/src/commands/document.ts | 5 +- packages/workflow-cli/src/error.ts | 5 +- packages/workflow-cli/src/io/workflowFile.ts | 22 +- packages/workflow-cli/src/output/render.ts | 6 +- packages/workflow-cli/src/parser.ts | 2 + packages/workflow-cli/src/registry.ts | 36 ++ packages/workflow-cli/src/run.ts | 30 +- packages/workflow-cli/src/type.ts | 34 +- packages/workflow-cli/test/bin-smoke.mjs | 16 + packages/workflow-cli/test/changeSet.test.ts | 301 +++++++++++++ packages/workflow-cli/test/e2e.test.ts | 4 +- .../workflow-cli/test/io/workflowFile.test.ts | 17 + packages/workflow-cli/test/output.test.ts | 3 +- packages/workflow-cli/test/package-smoke.mjs | 89 ++++ packages/workflow-cli/test/registry.test.ts | 28 +- .../test/templateContract.test.ts | 18 + packages/workflow-cli/tsdown.config.ts | 2 +- packages/workflow-core/src/command/apply.ts | 2 +- .../src/command/applyChangeSet.ts | 94 ++++ packages/workflow-core/src/command/type.ts | 58 ++- packages/workflow-core/src/domain/checksum.ts | 34 +- packages/workflow-core/src/domain/document.ts | 34 ++ packages/workflow-core/src/index.ts | 5 + .../workflow-core/src/reference/service.ts | 43 +- .../src/template/automationMeta.ts | 5 +- .../workflow-core/src/template/descriptor.ts | 13 +- .../workflow-core/src/template/instantiate.ts | 14 +- .../workflow-core/src/validation/index.ts | 11 +- .../test/command/changeSet.test.ts | 90 ++++ .../test/domain/checksum.test.ts | 29 ++ .../test/domain/document.test.ts | 26 ++ .../test/reference/service.test.ts | 96 ++++- .../test/store/roundtrip.test.ts | 4 +- .../test/template/template.test.ts | 57 ++- pnpm-lock.yaml | 15 +- pro | 2 +- projects/app/Dockerfile | 1 + .../ChatBox/hooks/useChatGenerate.ts | 4 + .../core/chat/ChatContainer/ChatBox/index.tsx | 4 + .../ChatContainer/ChatBox/utils/resume.ts | 1 + .../core/chat/ChatContainer/type.ts | 2 + .../app/detail/Workflow/index.tsx | 6 +- .../Flow/components/ContextMenu.tsx | 9 +- .../detail/WorkflowComponents/Flow/index.tsx | 4 +- .../Flow/utils/workflowAutoLayout.ts | 17 + .../WorkflowBuilder/ChatPanel.tsx | 286 +++++++++++++ .../WorkflowComponents/WorkflowBuilder/api.ts | 42 ++ .../WorkflowBuilder/index.tsx | 188 ++++++++ .../WorkflowComponents/adapters/document.ts | 19 +- projects/app/src/web/common/api/fetch.ts | 49 ++- projects/app/src/web/core/workflow/utils.ts | 63 +-- .../chat/ChatContainer/ChatBox/resume.test.ts | 1 + .../core/app/workflow/workflowBuilder.test.ts | 127 ++++++ .../workflowCorePr1Equivalence.test.ts | 2 +- 88 files changed, 3583 insertions(+), 289 deletions(-) create mode 100644 .agents/design/core/workflow/workflow-builder-single-sandbox-architecture.md create mode 100644 diagrams/context-compression-algorithm.excalidraw create mode 100644 diagrams/context-compression-algorithm.mmd create mode 100644 diagrams/context-compression-algorithm.png create mode 100644 diagrams/context-compression-algorithm.svg create mode 100644 diagrams/workflow-builder-current-architecture.excalidraw create mode 100644 diagrams/workflow-builder-current-architecture.mmd create mode 100644 diagrams/workflow-builder-current-architecture.png create mode 100644 diagrams/workflow-builder-current-architecture.svg create mode 100644 packages/global/core/workflow/builder/constants.ts create mode 100644 packages/global/openapi/core/workflow/builder/api.ts create mode 100644 packages/global/openapi/core/workflow/builder/index.ts create mode 100644 packages/service/test/core/ai/llm/agentLoop/runtime.test.ts create mode 100644 packages/workflow-cli/src/commands/changeSet.ts create mode 100644 packages/workflow-cli/test/changeSet.test.ts create mode 100644 packages/workflow-cli/test/package-smoke.mjs create mode 100644 packages/workflow-core/src/command/applyChangeSet.ts create mode 100644 packages/workflow-core/test/command/changeSet.test.ts create mode 100644 packages/workflow-core/test/domain/checksum.test.ts create mode 100644 packages/workflow-core/test/domain/document.test.ts create mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/utils/workflowAutoLayout.ts create mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/ChatPanel.tsx create mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/api.ts create mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/index.tsx create mode 100644 projects/app/test/web/core/app/workflow/workflowBuilder.test.ts diff --git a/.agents/design/core/workflow/workflow-builder-single-sandbox-architecture.md b/.agents/design/core/workflow/workflow-builder-single-sandbox-architecture.md new file mode 100644 index 000000000000..89912562528a --- /dev/null +++ b/.agents/design/core/workflow/workflow-builder-single-sandbox-architecture.md @@ -0,0 +1,305 @@ +# Workflow Builder 单 Sandbox 架构设计 + +## 1. 背景与目标 + +Workflow Builder 当前在同一个 Builder 对话中创建两个物理 Sandbox: + +1. 研究 Sandbox:注入内置 Skill、用户文件,并作为 Agent 通用 Sandbox tool 的执行环境。 +2. 事务 Sandbox:保存当前 `workflow.json`、注入 Workflow CLI,并由服务端执行 `changeset plan` 与 `changeset apply`。 + +两个 Sandbox 的物理 ID 不同,因此首次工作流生成通常需要额外创建或恢复一次实例、获取一次初始化租约、准备一次文件系统。CLI 的纯计算成本很低,但这部分运行环境成本会直接计入 `Workflow CLI Apply` 的工具耗时。 + +本功能将 Builder 改为每个 `(appId, userId, builderChatId)` 只使用一个物理 Sandbox。在同一实例中提供两个逻辑能力:研究能力与事务执行能力。 + +### 1.1 目标 + +- 一个 Builder 对话最多只创建或恢复一个物理 Sandbox。 +- Agent 可以研究 Skill、用户文件和外部资料,但不能直接读取或修改当前工作流事务文件。 +- 当前工作流仍然只能通过 `workflow_cli_query` 与 `workflow_cli_apply` 访问和修改。 +- 保留 Workflow Core、CLI、base checksum、target checksum、`appId` 和最终 `WorkflowDocument` 校验。 +- 不保留双 Sandbox、旧 transaction chatId、旧 Builder fallback 或 feature flag 分支。 +- 不修改 Workflow Core 和 Workflow CLI 的领域契约。 + +### 1.2 非目标 + +- 不改变普通 Agent、Skill Debug 或非 Builder 对话的 Sandbox 行为。 +- 不让模型直接调用 CLI、导入 JSON、保存、发布或运行工作流。 +- 不把工作流事务状态持久化为跨轮固定文件。 +- 不以提示词作为访问控制。 + +## 2. 当前实现与根因 + +当前 `runWorkflowBuilder` 会先准备研究 Sandbox,并将原始 `SandboxClient` 注入 Agent Loop 的 `systemTools.sandbox`。随后第一次 `workflow_cli_query` 或 `workflow_cli_apply` 再以 `chatId:workflow-builder-transaction` 准备第二个事务 Sandbox。 + +```text +Builder 对话 + ├── research sandboxId + │ └── Agent 可使用读写文件、搜索和 Shell 工具 + └── transaction sandboxId + └── 服务端写 workflow.json 并执行 Workflow CLI +``` + +不能只把两个 sandboxId 改成相同。当前通用 Sandbox 工具含有 `sandbox_shell`、`sandbox_read_file`、`sandbox_write_file` 等能力;如果 Agent 与事务文件共享无权限隔离的文件系统,模型可以绕过 `workflow_cli_apply` 直接读写 `workflow.json`。 + +## 3. 目标架构 + +### 3.1 一个物理实例、两种能力 + +```text +一个 Builder Sandbox + ├── research/ owner: workflow_builder_research + │ ├── skills/ + │ ├── user_files/ + │ └── scratch/ + │ + └── transaction/ owner: workflow_builder_transaction + ├── workflow.json + ├── workflow-cli/ + ├── runs/ + └── .lock +``` + +同一物理 Sandbox 内建立两个非特权 Linux 用户: + +| 身份 | 可访问目录 | 调用者 | 权限 | +| --- | --- | --- | --- | +| `workflow_builder_research` | `research/` | Agent 的研究工具 | 读取、写入、Shell、网络访问 | +| `workflow_builder_transaction` | `transaction/` | 服务端 CLI Runner | Workflow CLI 查询、Plan、Apply | + +目录权限必须由 Sandbox 内的 OS 权限保证:`research/` 与 `transaction/` 分别 `0700`,互不具备读取、写入或执行权限。事务目录、CLI bundle 和 `workflow.json` 不可被研究身份读取。 + +### 3.2 两个逻辑入口 + +```text +Agent + └── WorkflowBuilderResearchExecutor + └── 以 workflow_builder_research 身份执行受控研究工具 + +服务端 Workflow CLI Gateway + └── WorkflowBuilderTransactionRunner + └── 以 workflow_builder_transaction 身份执行 CLI +``` + +这里的“两个入口”不代表两个 Sandbox 或两个通用 Adapter。 + +- `WorkflowBuilderResearchExecutor` 是新的 Agent 工具执行器。它替代 Builder 当前直接暴露的原始 `SandboxClient`。 +- `WorkflowBuilderTransactionRunner` 是现有 `createWorkflowCliGateway`、`applyWorkflowBuilderPlanInSandbox`、CLI plan/apply 链路的收敛名称和职责,不向 Agent 暴露。 + +两者共享同一个底层 `ISandbox` 和同一个 sandboxId,但拥有不同 OS 身份、目录根和调用权限。 + +### 3.3 为什么不能只依赖路径前缀 + +仅在程序里要求“研究工具只能传 `research/` 路径”不构成边界:绝对路径、`../`、软链接和 Shell 都可能绕过前缀判断。 + +因此 Research Executor 必须同时满足: + +1. 不向 Agent 暴露底层 `ISandbox` 或完整 `SandboxClient`。 +2. 文件读取、写入、搜索、列目录、编辑和 Shell 都以 `workflow_builder_research` 身份运行。 +3. 所有路径结果必须归一化到 `research/`;文件 URL 仅允许来自该目录。 +4. 事务目录仅允许 `workflow_builder_transaction` 及服务端初始化过程访问。 +5. Sandbox 镜像中不得给研究身份配置 `sudo`、CAP_DAC_OVERRIDE 或可提权入口。 + +## 4. 运行流程 + +### 4.1 初始化 + +```text +Builder 请求到达 + → 以 builderChatId 获取一个 SandboxClient + → 获取一次 Sandbox 初始化租约 + → 创建两个 Linux 用户和两个 0700 目录 + → 复制内置 workflow-builder Skill 与用户文件到 research/ + → 注入固定版本 Workflow CLI 到 transaction/ + → 写入本轮前端传入的 WorkflowDocument 到 transaction/workflow.json + → 返回 SharedWorkflowBuilderSandboxContext +``` + +`SharedWorkflowBuilderSandboxContext` 至少包含: + +```ts +type SharedWorkflowBuilderSandboxContext = { + sandboxClient: SandboxClient; + sandbox: ISandbox; + researchDirectory: string; + transactionDirectory: string; + transactionRunDirectory: string; + transactionLauncherFile: string; +}; +``` + +本轮只初始化一次。研究工具和 CLI 工具都从这个 Context 取底层 Sandbox,不再调用第二次 `ensureAgentSandboxRuntime`。 + +### 4.2 Agent 研究 + +```text +模型调用 sandbox_read_file / sandbox_shell 等研究工具 + → Agent Loop 调用 WorkflowBuilderResearchExecutor + → Executor 验证参数和研究目录路径 + → 以 workflow_builder_research 身份执行 + → 返回研究结果 +``` + +`sandbox_shell` 不允许继续调用现有的裸 `SandboxClient.exec`。它必须强制以研究身份执行,并使用研究目录作为工作目录。即使模型提交 `cat ../transaction/workflow.json`,OS 权限也必须拒绝。 + +### 4.3 Workflow CLI 查询 + +```text +模型调用 workflow_cli_query + → Gateway 取得 SharedWorkflowBuilderSandboxContext + → TransactionRunner 以 workflow_builder_transaction 身份运行 CLI inspect/list/show + → 返回结构化只读结果 +``` + +### 4.4 Workflow CLI Apply + +```text +模型调用 workflow_cli_apply(ChangeSet) + → Gateway 写 transaction/runs//changeset.json + → TransactionRunner 执行 changeset plan + → 服务端 Core 校验 WorkflowPlan + → LLM 语义审查 + → TransactionRunner 执行 changeset apply + → 服务端读取 transaction/workflow.json + → 校验 appId、Schema、base/target checksum + → 返回验证后的 WorkflowDocument 给画布 +``` + +事务执行前必须用本轮前端传入的 WorkflowDocument 覆盖 `transaction/workflow.json`。这样同一 Sandbox 的历史文件不能成为下一轮的工作流事实来源。 + +`workflow_cli_apply` 必须在 `transaction/.lock` 上获取独占锁,覆盖写入、Plan、Apply、读取结果和清理临时目录处于同一个锁范围内。 + +## 5. 开发流程 + +### 阶段 0:前置验证 + +目的:确认所有当前 Sandbox provider 镜像可执行多用户隔离。 + +1. 对当前支持的 OpenSandbox、Sealos Devbox、E2B 镜像执行最小探针。 +2. 验证可创建非特权用户、设置目录 owner/mode,并以指定用户执行命令。 +3. 验证研究身份无法读取、列出、软链接访问或 Shell 访问事务目录。 +4. 验证事务身份不能读取研究目录中的用户文件,除非服务端显式复制需要的输入。 +5. 若任一 provider 不支持 OS 用户隔离,该 provider 不得进入该版本的 Builder 支持范围;不能退回双 Sandbox 或提示词隔离。 + +交付物:provider 能力矩阵和最小集成测试。 + +### 阶段 1:定义共享 Context 与目录初始化 + +修改 `pro/admin/src/service/core/ai/workflowBuilder/sandbox.ts`: + +1. 删除 transaction chatId 派生和第二个 Sandbox prepare action。 +2. 新建单 Sandbox 初始化函数,返回 `SharedWorkflowBuilderSandboxContext`。 +3. 创建 `research/`、`transaction/`、运行目录和锁文件。 +4. 设置不同 owner、`0700` 权限和只读 CLI bundle 权限。 +5. 把 Skill、用户文件复制到研究目录;把 CLI、当前 WorkflowDocument 写入事务目录。 +6. 所有临时 ChangeSet 和 Plan 文件放在 `transaction/runs//`,在 finally 中删除。 + +完成标准:一个 Builder 请求中只有一次 `prepareAgentSandboxRuntime`、一次初始化租约和一个 sandboxId。 + +### 阶段 2:引入 Research Executor + +当前 Agent Loop 的 `systemTools.sandbox` 只接受 `SandboxClient`,两种 provider 都会直接调用 `runSandboxTools`。这无法安全表达 Builder 的受限研究身份。 + +修改共享 Agent Loop 接口,但不改变非 Builder 的产品行为: + +1. 在 `packages/service/core/ai/llm/agentLoop/domain/tool.ts` 定义 `AgentLoopSandboxExecutor`。 +2. 让 `AgentLoopSystemTools.sandbox` 接收 executor,而不是直接接收 `SandboxClient`。 +3. 将现有 `runSandboxTools({ sandboxClient })` 封装为普通 Agent 使用的默认 executor。 +4. 在 fastAgent 与 piAgent 的 Sandbox tool 分发处统一调用 executor,不能保留一条 Builder 专用旁路。 +5. 在 Pro 新建 `WorkflowBuilderResearchExecutor`,实现同一套 Sandbox 工具协议,但所有操作都通过研究身份和研究目录执行。 + +Research Executor 必须覆盖当前已注册的工具: + +- `sandbox_read_file` +- `sandbox_write_file` +- `sandbox_edit_file` +- `sandbox_ls` +- `sandbox_find` +- `sandbox_grep` +- `sandbox_shell` +- `sandbox_get_file_url` + +完成标准:Builder 的 Agent Loop 不再持有完整 `SandboxClient`;普通 Agent 的 Sandbox 工具测试保持通过。 + +### 阶段 3:收敛事务 Runner + +修改 Builder 服务层: + +1. `runner.ts` 只准备一次共享 Context,并把 Research Executor 注入 Agent Loop。 +2. `cliGateway.ts` 从共享 Context 获取 TransactionRunner;删除 `getTransactionSandbox`。 +3. `apply.ts` 不得再次调用 `ensureAgentSandboxRuntime`;只使用 TransactionRunner 运行 CLI Apply。 +4. `handler.ts` 只接收最终验证后的 `WorkflowDocument`,不感知研究目录或事务目录。 +5. `sandbox.ts` 中 CLI query、plan、apply 使用 transaction 用户和 transaction 目录。 + +完成标准:从 Builder Handler 到 CLI Apply 的完整链路不再出现 `:workflow-builder-transaction`。 + +### 阶段 4:删除双 Sandbox 实现 + +这是替换,不是兼容。 + +1. 删除 `getWorkflowBuilderTransactionChatId`。 +2. 删除独立 transaction Sandbox 的创建、恢复、初始化和测试桩。 +3. 删除 Builder 代码中任何“旧 Sandbox 不存在时创建第二个 Sandbox”的 fallback。 +4. 不增加开关、环境变量、版本字段、双读写或运行时迁移逻辑。 +5. 已存在的旧 transaction Sandbox 不迁移、不读取;由现有资源归档机制自然回收。 +6. 已打开的 Builder 聊天下一次请求按新模型准备单 Sandbox;历史聊天文本继续保留,但不恢复旧事务文件。 + +完成标准:代码库中 Workflow Builder 不再出现第二个派生 transaction chatId 或第二次 runtime prepare。 + +### 阶段 5:验证与观测 + +新增或更新测试: + +1. 同一 Builder 对话只创建一个 sandboxId。 +2. 研究身份不能读取、写入、列出、软链接访问 transaction 目录。 +3. 事务身份不能读取研究用户文件。 +4. Agent 仍可读取 Skill、用户文件并进行受限 Shell/网络研究。 +5. `workflow_cli_query` 只能读取 transaction/workflow.json。 +6. `workflow_cli_apply` 仍能完成 Plan、Core 校验、语义审查、CLI Apply 和目标 checksum 校验。 +7. 并发 Builder 请求无法交叉覆盖 transaction/workflow.json。 +8. fastAgent 和 piAgent 都使用新的 Sandbox executor。 +9. 普通 Agent Sandbox 工具回归测试通过。 + +增加 Builder 阶段耗时日志: + +```text +sandboxPrepareMs +researchToolMs +cliPlanMs +coreValidateMs +semanticReviewMs +cliApplyMs +workflowReadbackMs +``` + +增加每轮 `sandboxInstanceCount`。单 Builder 对话的目标值为 `1`。 + +## 6. 文件改动清单 + +| 文件或目录 | 改动 | +| --- | --- | +| `pro/admin/src/service/core/ai/workflowBuilder/sandbox.ts` | 单实例初始化、目录与 OS 用户隔离、Research Executor、TransactionRunner | +| `pro/admin/src/service/core/ai/workflowBuilder/runner.ts` | 一次 Sandbox 准备,注入 Research Executor,删除 transaction promise | +| `pro/admin/src/service/core/ai/workflowBuilder/cliGateway.ts` | 复用共享 Context 的事务执行能力 | +| `pro/admin/src/service/core/ai/workflowBuilder/apply.ts` | 删除第二次 runtime prepare,只执行事务 Apply 与最终校验 | +| `pro/admin/src/service/core/ai/workflowBuilder/handler.ts` | 删除 transaction Sandbox 参数传递,仅保留最终文档应用 | +| `packages/service/core/ai/llm/agentLoop/domain/tool.ts` | 定义 Sandbox Executor 领域接口 | +| `packages/service/core/ai/llm/agentLoop/provider/fastAgent/*` | 使用 Sandbox Executor 调度工具 | +| `packages/service/core/ai/llm/agentLoop/provider/piAgent/*` | 使用 Sandbox Executor 调度工具 | +| `packages/service/core/ai/sandbox/application/toolCall/*` | 提供普通 Agent 的默认 executor 工厂 | +| `pro/admin/test/core/ai/workflowBuilder/*` | 单实例、权限、CLI 事务与性能观测测试 | +| `packages/service/test/core/ai/llm/agentLoop/*` | fastAgent/piAgent executor 回归测试 | + +## 7. 验收标准 + +- Builder 普通问答、文件研究、CLI 查询、CLI 生成和 Apply 都只关联一个物理 sandboxId。 +- `transaction/workflow.json` 无法通过任何 Agent 可见工具读取或修改。 +- 模型即使输出绝对路径、`../`、软链接、Shell 命令,也不能跨越研究目录。 +- CLI Apply 成功后画布拿到的仍是服务端验证后的 WorkflowDocument。 +- 不存在双 Sandbox 分支、旧 transaction chatId、兼容开关或 fallback。 +- 运行详情可分段展示耗时,能够证明 Sandbox 启动和 CLI/LLM 各自的时间占比。 + +## 8. 风险与决策 + +最大风险不是代码改动,而是 provider 是否支持可靠的同实例多用户权限隔离。若 provider 镜像不能提供该能力,不能用提示词或路径字符串替代;应先补齐镜像能力,再发布单 Sandbox Builder。 + +该方案会改动 Agent Loop 对 Sandbox tool 的执行接口,因此必须同时覆盖 fastAgent 和 piAgent。这里的共享接口改造是为了支持“受限执行器”这一新能力,不是为了保留旧 Builder 方案。Builder 本身不会保留双 Sandbox 或兼容逻辑。 diff --git "a/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" "b/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" index d7f144a027ce..366fdd17db90 100644 --- "a/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" +++ "b/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" @@ -2,8 +2,8 @@ ## 0. 文档标识 -- 文档状态:方案评审稿 -- 修订日期:2026-07-20 +- 文档状态:开发中 +- 修订日期:2026-07-22 - 关联需求文档:`workflow-cli-builder-需求设计文档.md` - 实施原则:先共享领域核心,再接 Web 和 CLI,最后接远端 - 文档范围:模块设计、实施任务、测试与发布方案 @@ -979,6 +979,12 @@ serializeWorkflowDocument(document: WorkflowDocument): string; `serializeWorkflowDocument()` 只负责稳定 JSON 序列化,不执行节点、边、权限或确认规则。 +PR4 兼容策略固定为: + +- 当前只接受 `fastgpt-workflow/v1`,因为此前没有已发布的历史 WorkflowDocument schema 可迁移。 +- 缺失、旧于或新于当前版本的 `schemaVersion` 都返回 `WORKFLOW_DOCUMENT_VERSION_UNSUPPORTED` 和迁移指引,不猜测格式、不静默升降级。 +- 后续增加 v2 时必须注册显式的逐版本迁移器并保留 v1 fixture;不能通过改写版本字符串冒充迁移。 + ### 5.2 Workflow File IO workflow-cli 负责单文件 IO: @@ -1016,7 +1022,7 @@ checksum 输入: - `workflow.generated.json` - plan 的 approvedAt 等审计元数据 -推荐流程:稳定 JSON canonicalize 后计算 SHA-256。 +实现使用稳定 JSON canonicalize、UTF-8 编码和 Web Crypto `SHA-256`,返回 `sha256:<64 lowercase hex>`。API 为异步,以保持 workflow-core 在 Node 和 Browser 中使用同一实现,不引入 Node-only `crypto`。 ### 5.4 ChangeSet plan @@ -1033,10 +1039,19 @@ type WorkflowPlan = { `apply` 时重新执行 ChangeSet 并重新计算 targetChecksum,不直接信任 plan 中的目标文档。 -Agent 默认不生成 ChangeSet 或 Plan 文件。`changeset plan --input -` 从 stdin 读取 `WorkflowChangeSetSchema`,JSON 结果通过 stdout 返回;用户确认后,`changeset apply --plan -` 从 stdin 读取原始 WorkflowPlan。Agent 在两次调用之间保留结构化对象,Apply 成功后只持久化 `workflow.json`。 +Agent 默认不生成 ChangeSet 或 Plan 文件。`changeset plan --input -` 从 stdin 读取 `WorkflowChangeSetSchema`,JSON 结果通过 stdout 返回;调用方完成校验后,`changeset apply --plan -` 从 stdin 读取原始 WorkflowPlan。Workflow Builder Gateway 在单次原子工具调用内编排两个阶段,Apply 成功后只持久化 `workflow.json`。 文件只是 Git/CI/跨人审批的可选载体,不是 Agent mutation 的前置条件。stdin 和文件输入必须进入同一个 parser 和 Schema;不得维护两套 ChangeSet 业务逻辑。 +### 5.5 ChangeSet Confirm + +- `changeset plan --input ` 校验 `baseChecksum` 后在内存执行,允许把存在 error diagnostics 的计划输出给审阅方,但不写 `workflow.json`。 +- `changeset apply --plan ` 不信任 plan 摘要,必须重新执行 ChangeSet、重新计算 targetChecksum 并执行完整工作流校验。 +- `--dry-run` 完成上述全部计算但不要求确认、不写盘。 +- 非 TTY 真实写入必须传 `--confirm `;TTY 无参数时只接受完整 `yes`,提示写入 stderr。 +- base、target、Confirm 任一不匹配都保持原文件字节不变;不提供 `--yes`、`--force` 或跳过校验入口。 +- apply 还必须比较重算后的 changes 和 diagnostics,防止 plan 审阅摘要被篡改后仍执行隐藏命令。 + ## 6. workflow-cli 实现 ### 6.1 CLI 入口 @@ -1281,7 +1296,6 @@ PR5 在 Workflow 编辑器内增加独立辅助生成模块。前端可以复用 projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/ ├── index.tsx ├── ChatPanel.tsx -├── WorkflowPlanCard.tsx └── api.ts ``` @@ -1290,25 +1304,32 @@ Pro 拥有 Workflow Builder 的产品编排、Sandbox 上下文和内置 Skill ```text pro/admin/src/pages/api/core/workflow/builder/chat.ts pro/admin/src/service/core/ai/workflowBuilder/ +├── apply.ts +├── cliGateway.ts ├── handler.ts -├── runtime.ts +├── runner.ts ├── sandbox.ts ├── schema.ts └── index.ts pro/admin/src/service/core/ai/skill/builtin/workflow-builder/SKILL.md ``` -`handleWorkflowBuilderChat` 是独立 Handler。它只模仿 `handleSkillDebugChat` 的顺序,直接调用已有底层能力,不抽取 Skill 辅助生成的公共业务 Runner: +`handleWorkflowBuilderChat` 是独立 Handler,`runWorkflowBuilder` 是独立 Runner。二者直接复用已有 Chat、Agent Loop、AgentLoopCore 和 Sandbox 原子能力,不构造只有 `WorkflowStart -> Agent` 的假工作流,不抽取 Skill 辅助生成的公共业务 Runner: 1. 用 `authApp` 验证当前成员对 App 的写权限并执行聊天频控。 -2. 将前端当前轮 `messages` 转换为 ChatItem,通过 `getChatItems` 恢复同 `appId + chatId` 的历史和 memories。 -3. 调用 `preChatRound`,构造 `WorkflowStart -> Agent` 最小 Runtime,并通过 `dispatchWorkFlow` 进入现有 Agent Loop。 -4. 按 `sourceType=app`、`sourceId=appId`、`userId`、`chatId` 创建或恢复 App Sandbox,不使用 `skillEdit` 或 `chatAgentHelper` source。 -5. Sandbox prepare action 每轮写入前端当前 `WorkflowDocument`,注入与服务端版本一致的 `fastgpt-workflow` 构建产物,并同步内置 `workflow-builder` Skill。 -6. Skill 必须要求 Agent 先查询 Descriptor,只使用 `--format json` 的 CLI 命令,不直接编辑 `workflow.json` 或 StoreWorkflow。 -7. Agent 产出 ChangeSet 后,Handler 重新验证 Schema、`baseChecksum`、graph 和 reference,禁止直接信任 Sandbox 输出。 -8. 通过现有 Workflow SSE 输出文本、plan 和 diagnostics,并使用 `finalizeChatRound` / `updateInteractiveChat` 持久化普通聊天历史。 -9. 前端确认时对当前画布重新计算 checksum;匹配后通过 Web Adapter/Core 应用 ChangeSet,不匹配则只作废当前 plan。 +2. 将前端当前轮 `messages` 转换为 ChatItem,通过 `getChatItems` 恢复同 `appId + chatId` 的历史和 memories;只有 ask/interactive continuation 恢复未完成 AgentPlan,普通新请求不继承旧的未完成 AgentPlan。 +3. 调用 `preChatRound`,然后由 `runWorkflowBuilder` 直接调用公共 Agent Loop;AgentLoopCore 继续负责 SSE、AgentPlan、ask、assistantResponses、nodeResponses 和 requestId 转换。 +4. 研究 Sandbox 按 `sourceType=app + sourceId=appId + userId + chatId` 寻址,注入内置 `workflow-builder` Skill、用户文件和普通 Sandbox tools。 +5. 事务 Sandbox 使用由 Builder chatId 稳定派生的 transaction chatId,每轮写入前端当前 `WorkflowDocument`并注入版本一致的 CLI;该 SandboxClient 不注入 Agent Loop system tools。 +6. `workflow_cli_query` 只接收结构化 action 和参数,Gateway 映射为白名单 CLI 查询,所有值使用 `shellQuote`,模型不得传递 Shell 或全局 CLI flags。 +7. `workflow_cli_apply` 直接接收 `WorkflowChangeSet`;Gateway 以 tool call ID 生成临时文件,执行 `changeset plan --input --format json`,无论成功失败都在 `finally` 删除。 +8. Gateway 解析 CLI JSON envelope,再通过 workflow-core 重算 WorkflowPlan。校验失败时返回结构化 diagnostics 并最多重试三次。 +9. Plan 校验成功后,Gateway 立即调用 Handler 注入的 apply 回调,以本轮 `WorkflowDocument` 为 base 执行 `changeset apply --confirm --format json`。 +10. Apply 回调清理临时 plan,读取 CLI 产出的目标 `workflow.json`,重新执行 Schema、appId 和 target checksum 校验;只有成功后工具才返回 `state=applied`。 +11. 工具返回 `stop=true` 只结束变更循环;Runner 紧接着启动一次禁用所有工具的主 Agent 收尾,由 Agent 根据权威 tool result 判断已完成或具体失败问题。 +12. Handler 使用 `finalizeChatRound` / `updateInteractiveChat` 持久化普通聊天历史,并通过 `workflowBuilderApplied` SSE 只返回验证后的目标 WorkflowDocument。 +13. 前端通过 Web Adapter 用目标 Document 覆盖当前内存画布,等待 ReactFlow 完成节点测量后复用现有 dagre 布局和 `fitView`。该操作不自动调用保存、发布或运行 API。 +14. 收尾 Agent 的终态回答同时写入 SSE 和 ChatItem;固定成功/失败摘要只在收尾模型异常或返回空内容时兜底。 请求 Schema 位于共享 OpenAPI 目录,只包含当前轮消息和当前画布事实: @@ -1324,10 +1345,21 @@ type WorkflowBuilderChatBody = { checksum: string; }; }; + +type WorkflowBuilderApplied = { + document: WorkflowDocument; + checksum: string; +}; ``` +`AgentPlan` 与 `WorkflowPlan` 是两个独立协议。Agent 只有在网络检索、文档读取或复杂多步分析确有需要时才创建 AgentPlan;SKILL 中列出的 CLI 操作顺序不得机械映射为 AgentPlan 步骤。WorkflowPlan 是 Gateway 的服务端内部校验契约,不形成待确认状态;apply 完成后必须再调用一次无工具主 Agent 生成最终结论。 + 不向前端开放 `systemPrompt` 和 `mode`;不单独传输完整历史、修改记录或节点选中上下文。PR5 只支持当前 CLI 已暴露的内置节点和本地静态校验,不自动保存、发布、调试或调用 PR6/PR7 远端命令。 +Workflow Builder 后端仍使用 `sourceType=app`,以复用普通 Chat round 和 App Sandbox 资源模型;研究 Sandbox 使用 Builder chatId,事务 Sandbox 使用派生 transaction chatId。前端必须使用独立的 Workflow Builder chatId 缓存键,不得复用普通应用对话的 chatId。入口由 `feConfigs.show_workflow_builder` 独立开关控制,关闭后不注册 UI 入口,不影响手工画布编辑。 + +Workflow Builder 必须隔离“工作流事实”和“辅助对话运行配置”:`WorkflowDocument.chatConfig` 仍作为当前画布事实写入事务 Sandbox,但 Builder 前端 `ChatBox` 和后端 Runner 只能使用共享的最小 Builder ChatConfig,不得继承当前工作流的 `welcomeText`、`variables`、`autoExecute`、`questionGuide`、语音、定时触发或输入引导配置。Builder 保留本次辅助 Agent 的运行详情,并允许通过 `llmRequestIds` 查看本次 LLM 请求体和响应体;该详情不得引用当前工作流的旧运行记录。 + ## 8. 远端 API 实现 该部分分为 PR6 的远端只读能力和 PR7 的远端写入与运行,不应混入本地 CLI MVP 或 PR5 Workflow 辅助生成 Demo。 @@ -1538,13 +1570,21 @@ PR1 不接入 Web Adapter,也不要求复刻当前 Web 校验器的短路顺 ### 9.6 Workflow 辅助生成测试 - Workflow Builder 前端只发送当前轮 message、model、WorkflowDocument 和 checksum。 -- Handler 按 `appId + chatId` 恢复历史 ChatItem、memories、active plan 和 ask 交互。 -- 显式 model 与默认 model 路径均进入现有 Agent Loop,usage 只计费一次。 -- 不同 `chatId` 使用独立 App Sandbox,同一会话可恢复并继续使用原 Sandbox。 -- prepare action 每轮写入当前 WorkflowDocument,CLI 产物版本与服务端匹配,内置 Skill 不写入用户工作区。 -- Agent 不直接编辑 `workflow.json`,生成的 ChangeSet 必须经 workflow-core 二次校验。 -- base checksum 匹配时可应用到当前画布;人工修改导致不匹配时保留画布并只作废当前 plan。 -- 刷新页面后恢复聊天、生成状态和待确认 plan;Skill 辅助生成现有 API、历史和 Sandbox 测试保持不变。 +- Builder ChatBox 和 Handler 使用同一份最小 ChatConfig,不继承 WorkflowDocument 中的欢迎语、变量、自动执行或语音等运行配置。 +- Builder 展示本次 Agent 运行详情;存在 `llmRequestIds` 时可打开 LLM 请求详情并查看请求体,不读取普通工作流对话的运行详情。 +- Handler 按 `appId + chatId` 恢复历史 ChatItem 和 memories;ask 交互恢复 active plan,普通新请求不恢复未完成 active plan。 +- 显式 model 与默认 model 路径均进入公共 Agent Loop,不调用 `dispatchWorkFlow`,usage 只计费一次。 +- 不同 `chatId` 使用独立研究 Sandbox 和事务 Sandbox,同一会话稳定恢复,两类 Sandbox 物理 ID 不同。 +- prepare action 每轮只向事务 Sandbox 写入当前 WorkflowDocument 和 CLI,内置 Skill 只注入研究 Sandbox,不写入用户工作区。 +- `workflow_cli_query` 拒绝 mutation、artifact、apply、未知 action 和路径/全局 flag 注入。 +- `workflow_cli_apply` 拒绝非法 ChangeSet,每次使用唯一临时文件,无论 CLI 成功或失败都清理;第三次校验失败终止变更阶段。 +- 有效 WorkflowPlan 必须在 Gateway 内立即 apply;tool result 只返回 `applied` 或失败诊断,不交付待确认 metadata。 +- tool 终止后必须出现一次无工具主 Agent 调用;执行详情不得以 `Workflow CLI Apply` 工具作为最后一项。 +- base checksum 匹配时,Gateway 通过 Sandbox CLI Confirm 门禁自动应用,并通过 SSE 返回服务端验证后的目标 Document。 +- 目标 Document 允许覆盖生成期间的人工画布修改;导入后必须复用现有 dagre 布局能力自动对齐并执行 `fitView`。 +- 篡改 plan、target checksum 不一致、CLI 输出非法、同一 Sandbox 并发写入时均不得替换当前画布。 +- 刷新页面后恢复聊天和生成状态;不存在待确认 plan、plan 状态接口或本地 plan 存储。 +- 刷新恢复后仍能看到本轮主 Agent 终态;收尾失败时的兜底摘要包含实际变更或未应用原因。 ### 9.7 远端契约测试 @@ -1590,6 +1630,8 @@ type CliAuditEvent = { FastGPT 服务端已有 audit log 继续作为远端写入审计源;CLI 日志不替代服务端审计。 +PR4 的本地 plan/apply 在 JSON success envelope 中增加可选 `audit` 字段,只记录 command、appId、base/target checksum、变更节点 ID、边变更数、耗时和结果;不得把 ChangeSet 的输入值复制到 audit。 + ## 11. 质量门禁 每个 PR 至少执行: @@ -1600,6 +1642,7 @@ pnpm --filter @fastgpt/workflow-core build pnpm --filter @fastgpt/workflow-cli test pnpm --filter @fastgpt/workflow-cli build pnpm --filter @fastgpt/workflow-cli test:bin +pnpm --filter @fastgpt/workflow-cli test:ci ``` 涉及 Web adapter 时增加相关 app 单测和类型检查;涉及 API 时增加 OpenAPI、路由和权限测试。最终合并前再执行仓库要求的全量检查。 @@ -1696,27 +1739,43 @@ i18n 要求: ### PR4:自动化与门禁 -- [ ] T27 完善 WorkflowDocument schemaVersion 兼容策略和 `workflow.json` 迁移指引。 -- [ ] T28 实现基于规范化 WorkflowDocument 的 canonical checksum。 -- [ ] T29 实现 stdin ChangeSet plan/apply、单命令/多命令统一编排和 baseChecksum。 -- [ ] T30 实现 TTY/non-TTY Confirm gate。 +- [x] T27 完善 WorkflowDocument schemaVersion 兼容策略和 `workflow.json` 迁移指引。 +- [x] T28 实现基于规范化 WorkflowDocument 的 canonical checksum。 +- [x] T29 实现 stdin ChangeSet plan/apply、单命令/多命令统一编排和 baseChecksum。 +- [x] T30 实现 TTY/non-TTY Confirm gate。 - [x] T31 固化模板输入值来源优先级、资源安全空值、Start 引用不覆盖、共享引用类型兼容规则、单一结构校验和独立 Binding Collector;CLI validate/build 输出稳定 warning 且不合成资源值。 -- [ ] T32 增加 workflow file/ChangeSet/Confirm/CI、审计字段和失败零写入测试,并补齐本地 CLI Beta 端到端验收。 -- [ ] T33 完成本地 CLI Beta 的安装、升级、回滚和端到端验收。 +- [x] T32 增加 workflow file/ChangeSet/Confirm/CI、审计字段和失败零写入测试,并补齐本地 CLI Beta 端到端验收。 +- [x] T33 完成本地 CLI Beta 的安装、升级、回滚和端到端验收。 ### PR5:Workflow 辅助生成 Demo -- [ ] T34 定义 `WorkflowBuilderChatBodySchema` 和 Workflow Builder SSE/ChangeSet 输出契约,只接收当前轮 messages、model、WorkflowDocument 和 checksum。 -- [ ] T35 在 Pro 中实现独立 `handleWorkflowBuilderChat`、Runtime 构造和 API route,复用底层 Chat/Workflow 能力但不抽取或修改 Skill Handler。 -- [ ] T36 实现 App Sandbox prepare action,每轮写入当前 `workflow.json`,注入版本匹配的 CLI 构建产物,并确保不同 chatId 的 Sandbox 隔离。 -- [ ] T37 实现 Pro 内置 `workflow-builder` Skill,约束 Agent 先查询 Descriptor、只调用 JSON CLI、不直接编辑 Document/StoreWorkflow。 -- [ ] T38 恢复普通 Chat 历史、memories、plan/ask、模型选择、SSE、停止和 usage,并通过现有 Chat round 流程持久化。 -- [ ] T39 在 Handler 中对 Sandbox 输出的 ChangeSet 执行 Schema、base checksum、graph 和 reference 二次校验,禁止未确认的远端保存/发布。 -- [ ] T40 在 Workflow 编辑器接入独立 ChatBox、模型选择、历史恢复和最小 WorkflowPlanCard,不实现节点选中上下文和复杂 diff UI。 -- [ ] T41 用 Web Adapter/Core 将已确认 ChangeSet 应用到当前画布,覆盖 checksum 过期、人工修改保留、刷新恢复、计费单次上报和 Skill 路径零回归。 +- [x] T34 定义 `WorkflowBuilderChatBodySchema` 和 Workflow Builder SSE/ChangeSet 输出契约,只接收当前轮 messages、model、WorkflowDocument 和 checksum。 +- [x] T35 在 Pro 中实现独立 `handleWorkflowBuilderChat`、Runtime 构造和 API route,复用底层 Chat/Workflow 能力但不抽取或修改 Skill Handler。 +- [x] T36 实现 App Sandbox prepare action,每轮写入当前 `workflow.json`,注入版本匹配的 CLI 构建产物,并确保不同 chatId 的 Sandbox 隔离。 +- [x] T37 实现 Pro 内置 `workflow-builder` Skill,约束 Agent 先查询 Descriptor、只调用 JSON CLI、不直接编辑 Document/StoreWorkflow。 +- [x] T38 恢复普通 Chat 历史、memories、plan/ask、模型选择、SSE、停止和 usage,并通过现有 Chat round 流程持久化。 +- [x] T39 在 Handler 中对 Sandbox 输出的 ChangeSet 执行 Schema、base checksum、graph 和 reference 二次校验,禁止未确认的远端保存/发布。 +- [x] T40 在 Workflow 编辑器接入独立 ChatBox、模型选择和历史恢复,不实现节点选中上下文、确认卡片和复杂 diff UI。 +- [x] T41 Handler 在同一轮通过事务 Sandbox 调用 CLI Confirm Apply,再把服务端验证的目标 Document 通过 Web Adapter 映射到当前画布并自动对齐;覆盖目标 checksum、计费单次上报和 Skill 路径零回归。 +- [x] T41.1 隔离 Workflow Builder ChatConfig 与 WorkflowDocument ChatConfig,并展示本次 Builder Agent 的运行详情和 LLM 请求体详情。 +- [x] T41.2 区分可选 AgentPlan 与必选 WorkflowPlan:普通新请求不继承旧 active plan,ask continuation 保持可恢复,WorkflowPlan 成功后不再调用模型并自动 Apply。 +- [x] T41.3 将 `dispatchWorkFlow + WorkflowStart -> Agent` 替换为独立 `WorkflowBuilderRunner`,直接复用 Agent Loop/AgentLoopCore 协议和 Chat round 生命周期。 +- [x] T41.4 实现 `WorkflowCliGateway`:查询白名单、结构化 ChangeSet plan、三次失败门禁、tool metadata plan 交付和 `stop=true`。 +- [x] T41.5 物理隔离研究 Sandbox 与事务 Sandbox,移除固定 `workflow-plan.json` 和模型管理中间文件的协议。 +- [x] T41.6 迁移 Skill、Handler 和自动 Apply,补齐普通问答、ask 恢复、成功 plan 立即停止并应用、三次失败、临时文件清理、Sandbox 隔离和计费/requestId 测试。 ### PR6:远端只读能力 +#### Core/CLI 节点运行时契约修复 + +- [x] T42.1 盘点 `template list` 暴露的全部 22 个内置节点及其输入、输出、执行端口、容器和动态 IO 行为。 +- [x] T42.2 在 workflow-core 建立版本化节点能力定义,并让 Edge、Nesting 与 Descriptor 共用同一事实源。 +- [x] T42.3 补齐所有节点的 Automation Metadata:系统维护字段不可配置,可配置字段有说明,复杂输入有结构化 Schema。 +- [x] T42.4 扩展 JSON Schema 子集校验,支持长度、常量、组合 Schema、tuple 和对象附加属性 Schema。 +- [x] T42.5 让 CLI `template list/show` 原样输出完整节点契约,不在 CLI 复制节点规则。 +- [x] T42.6 增加 22 节点全量质量门禁、复杂输入正反例、执行端口一致性和 CLI JSON 契约测试。 +- [x] T42.7 运行 workflow-core/workflow-cli 单测、typecheck、build 和 package smoke,确认现有合法工作流无行为迁移。 + - [ ] T42 设计 profile 和密钥读取,不在配置文件明文保存 key。 - [ ] T43 为 detail、preview、versions 和 dataset/model/app/tool 资源解析增加 API Key 只读契约与权限测试,所有响应禁止包含 Secret 值。 - [ ] T44 实现 team app/system tool/remote tool provider 和只读 Resource Resolver,返回远端参数 Schema/Descriptor;仅把当前 profile 已鉴权且具有读取权限的非 Secret 资源写入 `validatedInputDefaults`。 diff --git "a/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" "b/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" index 9eb9d0d884f5..a3f906e90081 100644 --- "a/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" +++ "b/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" @@ -2,8 +2,8 @@ ## 0. 文档标识 -- 文档状态:方案评审稿 -- 修订日期:2026-07-20 +- 文档状态:开发中 +- 修订日期:2026-07-22 - 目标仓库:FastGPT - 目标对象:FastGPT Workflow 的本地构建、自动化修改、Web 辅助生成、远端保存、发布与调试 - 关联开发文档:`workflow-cli-builder-功能开发文档.md` @@ -197,9 +197,11 @@ FastGPT API / Service -> Schema、权限、资源、运行和发布校验 ### 4.4 档位 D:Workflow 辅助生成 Demo - Workflow 编辑器内的独立聊天入口。 -- 复用普通聊天的历史恢复、模型选择、SSE、停止、计费和 Agent Loop。 -- 使用 App 归属 Sandbox,注入当前 `workflow.json`、固定版本 CLI 和内置 `workflow-builder` Skill。 -- Agent 只生成可预览、可确认的 `WorkflowChangeSet`,由 Web Adapter/Core 应用到当前画布。 +- 建立独立 `WorkflowBuilderRunner`,直接复用公共 Agent Loop 协议,不再构造 `WorkflowStart -> Agent` 假工作流。 +- 使用研究 Sandbox 承载 Skill、文档和通用分析;使用隔离的事务 Sandbox 承载当前 `workflow.json` 和固定版本 CLI。 +- Agent 只通过 `workflow_cli_query` 和 `workflow_cli_apply` 访问事务 Sandbox,不获得该 Sandbox 的 Shell 权限。 +- `workflow_cli_apply` 直接接收 `WorkflowChangeSet`,由 Gateway 完成 CLI plan、Core 二次校验和原子 apply,不产生待确认中间态。 +- 应用成功或失败终止后,Runner 必须进入一次禁用工具的主 Agent 收尾,再由 Web Adapter 覆盖当前画布并自动对齐。 - PR5 不自动保存、发布或调试,不支持节点选中上下文、文件上传或复杂 diff 编辑。 ### 4.5 档位 E:远端生命周期 @@ -496,23 +498,42 @@ Agent 只能提出和调用结构化动作。checksum、权限、发布校验和 ### 5.12 PR5 Workflow 辅助生成接入 -PR5 是独立产品模块,只模仿 Skill 辅助生成的运行顺序,不抽取、改造或共用 `handleSkillDebugChat` 的业务 Handler。它可以直接复用现有底层函数和组件,包括 `ChatBox`、`getChatItems`、`preChatRound`、`dispatchWorkFlow`、Agent Loop、Sandbox tools、usage 和 `finalizeChatRound`。 +PR5 是独立产品模块,不抽取、改造或共用 `handleSkillDebugChat` 的业务 Handler。它复用 `ChatBox`、`getChatItems`、`preChatRound`、公共 Agent Loop、AgentLoopCore 事件适配、Sandbox runtime、usage 和 `finalizeChatRound`,但不再通过 `dispatchWorkFlow` 构造假 Workflow runtime。 ```text Workflow ChatBox -> independent Workflow Builder API/Handler -> restore normal chat histories and Agent memories - -> build WorkflowStart -> Agent runtime - -> prepare App sandbox - -> write current workflow.json - -> inject version-matched fastgpt-workflow CLI - -> inject builtin workflow-builder Skill - -> Agent Loop calls CLI - -> server revalidates WorkflowChangeSet - -> SSE returns plan/diagnostics - -> Web Adapter/Core applies confirmed ChangeSet to current canvas + -> only resume unfinished AgentPlan for ask/interactive continuation + -> ordinary new requests do not inherit stale unfinished AgentPlan + -> WorkflowBuilderRunner + -> prepare research sandbox with builtin workflow-builder Skill + -> prepare isolated transaction sandbox with current workflow.json and version-matched CLI + -> run public Agent Loop with plan/ask/research tools and two Builder runtime tools + -> workflow_cli_query + -> validate a discriminated read-only query + -> execute an allowlisted CLI query in transaction sandbox + -> workflow_cli_apply + -> validate WorkflowChangeSetSchema + -> write a server-owned per-call temporary ChangeSet + -> execute CLI changeset plan and parse JSON stdout + -> revalidate plan through workflow-core + -> execute CLI changeset apply and validate target WorkflowDocument + -> delete the temporary file in finally + -> return authoritative applied or failed result with stop=true + -> WorkflowBuilderRunner starts one tool-free main Agent finalization turn + -> SSE returns the validated target WorkflowDocument + -> Web Adapter overwrites the current canvas and runs the existing auto-layout ``` +Workflow Builder 中存在三个不同层次,禁止混为同一个 plan: + +- `AgentPlan`:Agent 为完成复杂检索、文档读取或多步分析而自主创建的内部执行计划;简单修改不要求创建。 +- `WorkflowPlan`:每次实际修改画布前必须生成的内部校验契约,由服务端和 CLI 共同验证,不作为待确认 UI 状态。 +- `WorkflowDocument`:CLI Apply 并经服务端校验后得到的唯一工作流状态。 + +本阶段用于验证 CLI 在 FastGPT 对话流程中的完整可用性,不增加用户确认轮次。服务端以本轮请求携带的画布事实为 base 调用 CLI Confirm 门禁,验证成功后直接把目标文档返回画布;生成期间发生的人工画布修改允许被该目标文档覆盖。 + PR5 请求只携带当前轮消息、模型和画布事实;历史对话、Agent memories、计费和生成状态继续按普通 Chat 机制恢复: ```ts @@ -527,9 +548,20 @@ type WorkflowBuilderChatBody = { checksum: string; }; }; + +type WorkflowBuilderApplied = { + document: WorkflowDocument; + checksum: string; +}; ``` -PR5 不传入 `mode`、不单独建模“修改记录”、不传节点选中上下文。Sandbox 只修改当前 Document 的副本;未经用户确认时不得更新画布或调用保存/发布 API。应用时必须重新比较 `baseChecksum`,用户人工修改导致过期时只作废当前 plan,不限制之后继续使用辅助生成。 +PR5 不传入 `mode`、不单独建模“修改记录”、不传节点选中上下文。事务 Sandbox 只修改本轮请求 Document 的副本;校验成功后允许覆盖内存画布,但不得自动调用保存、发布或运行 API。 + +Agent 与事务执行层之间的结构化交接仅通过 `workflow_cli_apply`:服务端在事务 Sandbox 中创建每次调用唯一的临时 ChangeSet 文件,Gateway 先生成并重算 WorkflowPlan,再调用注入的 apply 回调完成 CLI 应用和目标文档校验。tool result 只暴露 `applied` 或结构化失败诊断,不暴露待确认 plan 生命周期。模型不得指定输入/输出路径,不得直接访问事务 Sandbox Shell,不存在跨轮固定 WorkflowPlan 文件。 + +Workflow Builder 专用状态为 `reasoning -> clarification_pending | drafting_changeset -> validating -> applying -> finalizing -> applied | failed`。普通问答可在 `reasoning` 直接结束;AgentPlan 只是当前任务的实时推理进度,只有 ask continuation 可恢复;`workflow_cli_apply` 结束变更阶段后,Runner 立即启动一次无工具主 Agent 收尾。每轮最多三次校验失败,apply 失败则直接进入收尾并报告真实问题。 + +Workflow Builder 复用 Chat 基础设施不等于继承工作流运行配置。当前 `WorkflowDocument.chatConfig` 仅作为 Agent 可读取和修改的画布事实;Builder ChatBox 与 Builder Handler 必须使用独立最小 ChatConfig,禁止继承原工作流的欢迎语、启动变量、自动执行、问题引导、语音和定时触发等配置。Builder 需要保留本次辅助 Agent 的运行详情;当详情包含 `llmRequestIds` 时,用户可继续查看对应的 LLM 请求体与响应体。 ### 5.13 Workflow Core 抽取与阶段交付 @@ -1074,8 +1106,8 @@ CLI 不猜测字符串是否为 JSON、文件或变量引用,也不允许通 | 命令 | 必填参数 | 可选参数与关键约束 | | --- | --- | --- | -| `changeset plan` | `--file `、`--output ` | `--dir`;输出 base/target checksum、changes 和 diagnostics | -| `changeset apply` | `--plan ` | `--dir`、`--dry-run`、`--confirm`;非 TTY 写入必须提供 target checksum | +| `changeset plan` | `--input ` | `--dir`、可选 `--output `;stdin 和文件共用同一 Schema,输出 base/target checksum、changes 和 diagnostics | +| `changeset apply` | `--plan ` | `--dir`、`--dry-run`、`--confirm`;非 TTY 写入必须提供 target checksum | | `profile list` | 无 | 只显示名称、base URL 和 credential 来源,不显示密钥 | | `profile show` | `--name` | secret 只显示来源和配置状态 | | `profile add` | `--name`、`--base-url` 与 credential 来源 | credential 使用 `--api-key-env`,不接受明文 `--api-key` | @@ -1314,7 +1346,8 @@ fastgpt-workflow input available --node ai --key userChatInput --dir ./flow ### 7.9 FR-09:ChangeSet 与 Confirm ```bash -fastgpt-workflow changeset plan --file changeset.json --dir ./flow --output plan.json +fastgpt-workflow changeset plan --input changeset.json --dir ./flow --output plan.json +cat changeset.json | fastgpt-workflow changeset plan --input - --dir ./flow --format json fastgpt-workflow changeset apply --plan plan.json --dir ./flow --dry-run fastgpt-workflow changeset apply --plan plan.json --dir ./flow --confirm TARGET_CHECKSUM ``` @@ -1326,6 +1359,18 @@ fastgpt-workflow changeset apply --plan plan.json --dir ./flow --confirm TARGET_ - 非交互环境 apply 高风险计划时必须传 `--confirm targetChecksum`。 - plan 或目标文档发生任何变化后,旧 checksum 自动失效。 - Confirm 是代码校验,不是在 `workflow.json` 中写一个 `confirmed: true`。 +- `--dry-run` 会重新执行、校验 base/target checksum 和完整图,但不要求 Confirm,也不写盘。 +- TTY 仅接受完整单词 `yes`;交互提示写到 stderr,JSON stdout 保持单一结构化结果。 + +本地 Beta 使用打包后的 tarball 安装,不要求安装 FastGPT monorepo 内部 package: + +```bash +pnpm --filter @fastgpt/workflow-cli test:package +npm install -g ./fastgpt-workflow-cli-0.2.0-beta.1.tgz +fastgpt-workflow --version +``` + +升级时安装新的明确版本 tarball;回滚时重新安装留存的上一版本 tarball。`workflow.json` 在 Beta 期间仍保持 `fastgpt-workflow/v1`,CLI 不允许静默重写未知 schemaVersion;执行升级或回滚前应由 Git 或文件备份保存工作流。 ### 7.10 FR-10:FastGPT 服务端生命周期 @@ -1354,10 +1399,16 @@ fastgpt-workflow run --app APP_ID --input "你好" --profile prod ### 7.11 FR-11:Workflow 辅助生成 - Workflow 编辑器提供独立聊天入口,复用普通 Chat 历史、模型选择、SSE、停止、计费和 Agent memories。 -- Workflow Builder 使用独立 Handler,不抽取或修改 Skill 辅助生成的 Handler;仅复用现有底层 Chat、Workflow Dispatch、Agent Loop 和 Sandbox 能力。 +- Workflow Builder 使用独立 Handler 和 Runner,不抽取或修改 Skill 辅助生成的 Handler;仅复用现有底层 Chat、Agent Loop、AgentLoopCore 事件适配和 Sandbox 能力。 - 每轮以前端当前 `WorkflowDocument + checksum` 为事实输入,历史由后端根据 `appId + chatId` 恢复,不建立独立修改记录模型。 -- Agent 只能通过内置 `workflow-builder` Skill 调用 `fastgpt-workflow` CLI;服务端必须对 ChangeSet 二次校验。 -- 前端只在 checksum 仍匹配时通过 Web Adapter/Core 应用已确认 ChangeSet;过期 plan 不得覆盖人工修改。 +- Agent 只能通过内置 `workflow-builder` Skill 调用 `workflow_cli_query` 和 `workflow_cli_apply`;Gateway 必须执行查询白名单、ChangeSet Schema、CLI JSON envelope、Core 二次校验和原子 apply。 +- 研究 Sandbox 与事务 Sandbox 必须物理寻址隔离,Agent 的通用 Sandbox tools 不得读写事务 Sandbox。 +- `workflow_cli_apply` 必须以 `WorkflowChangeSet` 作为结构化入参;临时文件由服务端生成和清理,模型不得管理文件路径。 +- WorkflowPlan 只作为服务端内部校验对象,不持久化为待确认 Artifact,也不直接返回原始 ChangeSet JSON。 +- Gateway 在同一工具调用中注入 CLI `changeset apply --confirm ` 能力,不向 Agent 暴露直接 apply 命令。 +- 服务端必须用本轮请求的 WorkflowDocument 覆盖 Sandbox 副本,重新校验 base/target/plan 内容,读取并校验 CLI 产生的目标 WorkflowDocument 后才返回。 +- 前端通过 Web Adapter 覆盖当前内存画布,等待节点尺寸就绪后复用现有 dagre 自动布局和 `fitView`。 +- 服务端必须在工具终态后再调用一次无工具主 Agent,并把其基于真实执行结果生成的终态回答持久化进 ChatItem;固定摘要只作为收尾模型失败时的兜底。 - PR5 不支持节点选中上下文、自动保存/发布/调试或远端资源模板解析。 ## 8. 共享规则与 UI 边界 @@ -1497,9 +1548,10 @@ PR 是可审核、可回滚的增量开发单元,不等于发布单元。每 - 在 Pro 中实现独立 Workflow Builder API、Handler、Runtime 和 Sandbox prepare action;只模仿 Skill 辅助生成顺序,不抽取或修改 Skill Handler。 - 按 `sourceType=app`、`sourceId=appId`、`userId`、`chatId` 归属 Sandbox,注入当前 `WorkflowDocument`、与服务端匹配的 CLI 产物和内置 `workflow-builder` Skill。 - 恢复普通 Chat 历史和 Agent memories,不建立独立修改记录模型;前端不传 `mode` 和节点选中上下文。 -- Agent 通过 CLI 生成 ChangeSet,服务端使用 workflow-core 重新校验,前端展示 plan/diagnostics 并在用户确认后通过 Web Adapter/Core 应用。 -- checksum 不匹配时只作废当前 plan,不覆盖人工修改;PR5 不自动保存、发布或运行工作流。 -- 验收结果:用户可在 Workflow 编辑器中通过多轮对话生成可审查 ChangeSet,并安全应用到当前画布。 +- Builder 使用独立最小 ChatConfig,不继承原工作流运行前置配置;保留本次辅助 Agent 的运行详情和 LLM 请求体查看能力。 +- Agent 通过 CLI 生成 ChangeSet,服务端使用 workflow-core 重新校验并自动 Apply,前端通过 Web Adapter 覆盖画布并自动对齐。 +- 允许覆盖生成期间的人工画布修改;PR5 不自动保存、发布或运行工作流。 +- 验收结果:用户可在 Workflow 编辑器中通过多轮对话直接生成并应用工作流,以验证 CLI 在 FastGPT 链路中的完整可用性。 ### PR6:远端只读能力 @@ -1570,6 +1622,23 @@ PR1 只验收 `workflow.json` 的确定性 round-trip、失败不覆盖原文件 ## 13. 风险与控制 +### 12.5 运行时节点契约补全(2026-07-24) + +Workflow Builder 的真实调用证明,仅暴露输入参数不足以让 Agent 稳定生成可运行工作流。`ifElse` 分支键、交互节点没有普通 `next` 出口、容器系统字段和动态 IO 都属于节点执行能力,不能只依赖自然语言提示。 + +所有在 `template list` 中公开的内置节点必须通过同一份版本化 `NodeTemplateDescriptor` 暴露完整机器契约: + +1. `schemaVersion` 固定为 `fastgpt-workflow-node-contract/v1`。 +2. `execution` 描述可接受的目标端口、允许的源端口、终止节点和动态分支配置来源。 +3. `container` 描述是否为容器、允许的父容器类型和禁止的子节点类型。 +4. `dynamicIO` 描述输入变更会同步哪些动态输入、输出或执行分支。 +5. `effects` 描述输入更新会清理失效引用、执行边或同步兼容字段等副作用。 +6. 所有 `configurable=true` 的输入必须有非空说明;对象、对象数组和结构化 `any` 必须有 `valueSchema`。 +7. `hidden`、布局尺寸、`childrenNodeIdList` 等系统维护字段默认不可配置;确需由 Agent 设置的隐藏字段必须在 Automation Metadata 中显式开放。 +8. Descriptor 的执行能力必须复用 Core 校验的同一事实源,不允许在模板说明和 `assertExecutionEdge()` 中维护两份节点集合。 + +本次补全覆盖当前公开的全部 22 个内置节点,不只处理 `ifElse`。CLI 仍只负责透传 `template show` 的 Descriptor 和执行 WorkflowCommand,不复制 Core 业务规则。现有合法 `workflow.json`、StoreWorkflow 和 Web 模板结构不迁移;非法输入会更早在命令边界失败。 + | 风险 | 影响 | 控制措施 | | --- | --- | --- | | Web 与 CLI 继续各写一套规则 | 行为漂移 | 共享 command/validator,做 adapter 等价测试 | diff --git a/diagrams/context-compression-algorithm.excalidraw b/diagrams/context-compression-algorithm.excalidraw new file mode 100644 index 000000000000..f0aef86f4f63 --- /dev/null +++ b/diagrams/context-compression-algorithm.excalidraw @@ -0,0 +1 @@ +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"JxwmAAKVZnGxs7t3DMeXG","type":"rectangle","x":0,"y":393.953125,"width":1581.99609375,"height":2200.734375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_P"],"frameId":null,"index":"a0","roundness":null,"seed":1590798903,"version":2,"versionNonce":193284089,"isDeleted":false,"boundElements":[{"type":"text","id":"Ms_3eIvoC-DvrDSmsxAqD"}],"updated":1784604332917,"link":null,"locked":false},{"id":"QoI19-hPqQ_Na338ppA0g","type":"rectangle","x":906.30078125,"y":1476.65625,"width":655.6953125,"height":1093.03125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"a1","roundness":null,"seed":1881045177,"version":2,"versionNonce":1347293207,"isDeleted":false,"boundElements":[{"type":"text","id":"YtNucRV9E6ri8No-X-6TH"}],"updated":1784604332917,"link":null,"locked":false},{"id":"XxLasSXV7BMBbUT1jfDxI","type":"rectangle","x":469.5546875,"y":418.953125,"width":716.33203125,"height":973.703125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"a2","roundness":null,"seed":28134231,"version":2,"versionNonce":795599065,"isDeleted":false,"boundElements":[{"type":"text","id":"ISnUa3iiW0JcQsK-k4b37"}],"updated":1784604332917,"link":null,"locked":false},{"id":"eJbYVzK9xiUIxaJ-HY-0I","type":"rectangle","x":20,"y":1733.65625,"width":578.8046875,"height":836.03125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"a3","roundness":null,"seed":857799065,"version":2,"versionNonce":912389431,"isDeleted":false,"boundElements":[{"type":"text","id":"YsMWxedjlVfzsD7vgq8Su"}],"updated":1784604332917,"link":null,"locked":false},{"id":"z8SldMJq6898TEigUX7SD","type":"rectangle","x":511.82421875,"y":0,"width":505.125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":1186449527,"version":3,"versionNonce":450813785,"isDeleted":false,"boundElements":[{"type":"text","id":"eyuaCaHtlX9nDIPLqRmBM"},{"id":"yqei_gyBwB_5MPC7IAXHN","type":"arrow"}],"updated":1784604332918,"link":null,"locked":false},{"id":"614IHkUargeftY_8-i-HM","type":"diamond","x":656.41015625,"y":99,"width":215.953125,"height":215.953125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":2011192953,"version":6,"versionNonce":1367615865,"isDeleted":false,"boundElements":[{"type":"text","id":"8nkIP2T4bmAgAYC1Wiuaj"},{"id":"yqei_gyBwB_5MPC7IAXHN","type":"arrow"},{"id":"tMcfRqKjUv_cKUHIeo3IM","type":"arrow"},{"id":"DfjE2H91t44j_utSmO850","type":"arrow"},{"id":"CBpRdyCYHEi3hWlioe0jW","type":"arrow"}],"updated":1784604332919,"link":null,"locked":false},{"id":"kJP-EMfds6qSeuTfcEHD0","type":"diamond","x":117.46484375,"y":1758.65625,"width":319.03125,"height":319.03125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"a6","roundness":null,"seed":1001759127,"version":5,"versionNonce":298993913,"isDeleted":false,"boundElements":[{"type":"text","id":"MCLdYGvrm3BUT4UU7UqRw"},{"id":"tMcfRqKjUv_cKUHIeo3IM","type":"arrow"},{"id":"TxsrjnZro4sZkotlEu-oU","type":"arrow"},{"id":"_J956U40hlZmo9uu0pO0s","type":"arrow"}],"updated":1784604332918,"link":null,"locked":false},{"id":"inFLSHH7HfN9jzIPQxUV3","type":"rectangle","x":105.6796875,"y":2478.6875,"width":116.3125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"a7","roundness":null,"seed":1025517401,"version":4,"versionNonce":1509373529,"isDeleted":false,"boundElements":[{"type":"text","id":"PIIG_kpe-JlyeNp8Y-PWc"},{"id":"TxsrjnZro4sZkotlEu-oU","type":"arrow"},{"id":"zLfVH4qCAsMI77LK9SsuP","type":"arrow"}],"updated":1784604332918,"link":null,"locked":false},{"id":"AvbT0_tV-uz2Vh6ci3mNr","type":"rectangle","x":245.25,"y":2161.6875,"width":289.75,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"a8","roundness":null,"seed":1104893623,"version":4,"versionNonce":1452089017,"isDeleted":false,"boundElements":[{"type":"text","id":"bVQ06KfpRXmV0fkdLDWvX"},{"id":"_J956U40hlZmo9uu0pO0s","type":"arrow"},{"id":"2xio8eTyM5tDRid3FSF-R","type":"arrow"}],"updated":1784604332918,"link":null,"locked":false},{"id":"EmRt518gn0ZcM5cxOC9Os","type":"rectangle","x":216.4453125,"y":2328.6875,"width":347.359375,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"a9","roundness":null,"seed":1563677753,"version":4,"versionNonce":1667073145,"isDeleted":false,"boundElements":[{"type":"text","id":"mhWjmDrYueWVVGyLkV9YI"},{"id":"2xio8eTyM5tDRid3FSF-R","type":"arrow"},{"id":"-MVGuEIhpI5X6PTiP96uB","type":"arrow"}],"updated":1784604332918,"link":null,"locked":false},{"id":"Hn7GZHXrAxPyz29njFxyh","type":"rectangle","x":271.9921875,"y":2464.1875,"width":236.265625,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"aA","roundness":null,"seed":533555159,"version":4,"versionNonce":1008695865,"isDeleted":false,"boundElements":[{"type":"text","id":"XneMW9OXQeqvQuXk79pgJ"},{"id":"-MVGuEIhpI5X6PTiP96uB","type":"arrow"},{"id":"EvFZRiggmcjl4z4dGo3EQ","type":"arrow"}],"updated":1784604332918,"link":null,"locked":false},{"id":"CkCubu1ygFYYvvUmt49Nt","type":"diamond","x":594.04296875,"y":443.953125,"width":340.6875,"height":340.6875,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"aB","roundness":null,"seed":469689625,"version":5,"versionNonce":1682272217,"isDeleted":false,"boundElements":[{"type":"text","id":"mIZJc4o1Qdqr1W_87OtJ6"},{"id":"DfjE2H91t44j_utSmO850","type":"arrow"},{"id":"ex3VaMwtMLqmggueeha52","type":"arrow"},{"id":"jygSh1PJahBk6wGdXjU9C","type":"arrow"}],"updated":1784604332918,"link":null,"locked":false},{"id":"jZbASbs5XmA6Roev43RNF","type":"rectangle","x":560.6484375,"y":1160.1484375,"width":116.3125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"aC","roundness":null,"seed":1403016439,"version":4,"versionNonce":1858531641,"isDeleted":false,"boundElements":[{"type":"text","id":"HIY0gwQ04DTZrsRbhqoZK"},{"id":"ex3VaMwtMLqmggueeha52","type":"arrow"},{"id":"NJ5PkKR-0tT__LWtkSl3e","type":"arrow"}],"updated":1784604332918,"link":null,"locked":false},{"id":"eJTWPbadobq1KTjy-yTw6","type":"rectangle","x":705.734375,"y":868.640625,"width":408.46875,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"aD","roundness":null,"seed":1962203641,"version":4,"versionNonce":1472990617,"isDeleted":false,"boundElements":[{"type":"text","id":"rWs4E3-QqreoFf2Eh4Ks9"},{"id":"jygSh1PJahBk6wGdXjU9C","type":"arrow"},{"id":"dxlWEHw9c7XkXKTX_mUHw","type":"arrow"}],"updated":1784604332918,"link":null,"locked":false},{"id":"GVRrbqBqo3JqWZttTtC8Y","type":"diamond","x":726.9609375,"y":1001.640625,"width":366.015625,"height":366.015625,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"aE","roundness":null,"seed":618176023,"version":5,"versionNonce":1600472793,"isDeleted":false,"boundElements":[{"type":"text","id":"QnsV9lFwuqoHo46cxgfOt"},{"id":"dxlWEHw9c7XkXKTX_mUHw","type":"arrow"},{"id":"gVH4NPLJT_-NnUibNefkP","type":"arrow"},{"id":"dPwyQ7mSw-adRPJ9cqf68","type":"arrow"}],"updated":1784604332919,"link":null,"locked":false},{"id":"6x7GmpcCZs7k1blkGg5Up","type":"rectangle","x":1041.96484375,"y":1501.65625,"width":365.890625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"aF","roundness":null,"seed":689517273,"version":5,"versionNonce":849403705,"isDeleted":false,"boundElements":[{"type":"text","id":"MVuYjf7_UdzYyepopS-pJ"},{"id":"dPwyQ7mSw-adRPJ9cqf68","type":"arrow"},{"id":"CBpRdyCYHEi3hWlioe0jW","type":"arrow"},{"id":"XJUd9E9vPWV0Xu9zUN0HF","type":"arrow"}],"updated":1784604332919,"link":null,"locked":false},{"id":"oH00IFBvSPzKPj_kXRL8o","type":"rectangle","x":999.97265625,"y":1600.65625,"width":449.875,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"aG","roundness":null,"seed":1986708279,"version":4,"versionNonce":1423647993,"isDeleted":false,"boundElements":[{"type":"text","id":"jpnJ-o2uDdFZVKQ4_gm0I"},{"id":"XJUd9E9vPWV0Xu9zUN0HF","type":"arrow"},{"id":"hOwUdfkT25wHcuPeoSHEo","type":"arrow"}],"updated":1784604332919,"link":null,"locked":false},{"id":"nxe1TkgmzbL9mhcgVh85k","type":"diamond","x":1104.26953125,"y":1797.53125,"width":241.28125,"height":241.28125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"aH","roundness":null,"seed":218066873,"version":5,"versionNonce":1909675577,"isDeleted":false,"boundElements":[{"type":"text","id":"j9F0WWDpjY96udr6MkZ18"},{"id":"hOwUdfkT25wHcuPeoSHEo","type":"arrow"},{"id":"C8dHEYPw9HR1-RNDNuOaG","type":"arrow"},{"id":"-DsXnn3sTvyoj94quP5cz","type":"arrow"}],"updated":1784604332919,"link":null,"locked":false},{"id":"UMXcshmTu89EQP8ycTxJY","type":"rectangle","x":1194.34375,"y":2161.6875,"width":268.25,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"aI","roundness":null,"seed":1488667735,"version":4,"versionNonce":1696324601,"isDeleted":false,"boundElements":[{"type":"text","id":"d_zPziRCQnDE1-FK9Tyn2"},{"id":"-DsXnn3sTvyoj94quP5cz","type":"arrow"},{"id":"_OI4OtTSFkazucrqjKdYk","type":"arrow"}],"updated":1784604332919,"link":null,"locked":false},{"id":"J8XfmWHRO1QSsgtsYPZph","type":"rectangle","x":1196.9453125,"y":2328.6875,"width":263.046875,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"aJ","roundness":null,"seed":382406809,"version":4,"versionNonce":1020129721,"isDeleted":false,"boundElements":[{"type":"text","id":"3VamqjLTSaphtdDLLzjG2"},{"id":"_OI4OtTSFkazucrqjKdYk","type":"arrow"},{"id":"vRY2seFAxoTfqPRPEyyKv","type":"arrow"}],"updated":1784604332919,"link":null,"locked":false},{"id":"djNZaSv5Qs_d9a3fMMrAT","type":"rectangle","x":1156.3515625,"y":2461.6875,"width":344.234375,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"aK","roundness":null,"seed":1537122679,"version":4,"versionNonce":2009438073,"isDeleted":false,"boundElements":[{"type":"text","id":"jUBd01dm0NQoVZmyKAim1"},{"id":"vRY2seFAxoTfqPRPEyyKv","type":"arrow"},{"id":"tkK_Ak-NmbzhAIOh-QCWs","type":"arrow"}],"updated":1784604332919,"link":null,"locked":false},{"id":"MBKHAdeCyHXGCXGRb8gUi","type":"rectangle","x":437.69921875,"y":2644.6875,"width":394.875,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":null,"seed":741315961,"version":8,"versionNonce":1576419417,"isDeleted":false,"boundElements":[{"type":"text","id":"RWPWnj-m3a-Fwzd-DrmLC"},{"id":"zLfVH4qCAsMI77LK9SsuP","type":"arrow"},{"id":"EvFZRiggmcjl4z4dGo3EQ","type":"arrow"},{"id":"NJ5PkKR-0tT__LWtkSl3e","type":"arrow"},{"id":"gVH4NPLJT_-NnUibNefkP","type":"arrow"},{"id":"C8dHEYPw9HR1-RNDNuOaG","type":"arrow"},{"id":"tkK_Ak-NmbzhAIOh-QCWs","type":"arrow"}],"updated":1784604332919,"link":null,"locked":false},{"id":"yqei_gyBwB_5MPC7IAXHN","type":"arrow","x":764.387,"y":49,"width":0.39600000000007185,"height":45.20099999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":542726807,"version":4,"versionNonce":780410551,"isDeleted":false,"boundElements":null,"updated":1784604332918,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[-0.10399999999992815,44.70099999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"z8SldMJq6898TEigUX7SD","focus":-0.00000111358574587753,"gap":1},"endBinding":{"elementId":"614IHkUargeftY_8-i-HM","focus":0.024144308802249406,"gap":4.813461692162319},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"tMcfRqKjUv_cKUHIeo3IM","type":"arrow","x":681.992,"y":232.558,"width":405.01199999999994,"height":1521.299,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":812678745,"version":4,"versionNonce":97936919,"isDeleted":false,"boundElements":[{"type":"text","id":"HfY3A3Fre-X6hPspskVsB"}],"updated":1784604332918,"link":null,"locked":false,"points":[[0.5,0.5],[-405.01199999999994,121.89499999999998],[-405.01199999999994,161.39499999999998],[-405.01199999999994,186.39499999999998],[-405.01199999999994,381.73900000000003],[-405.01199999999994,594.083],[-405.01199999999994,677.583],[-405.01199999999994,744.083],[-405.01199999999994,952.0899999999999],[-405.01199999999994,1160.098],[-405.01199999999994,1202.098],[-405.01199999999994,1244.098],[-405.01199999999994,1293.598],[-405.01199999999994,1343.098],[-405.01199999999994,1409.598],[-405.01199999999994,1476.098],[-405.01199999999994,1501.098],[-405.11499999999995,1520.799]],"lastCommittedPoint":null,"startBinding":{"elementId":"614IHkUargeftY_8-i-HM","focus":-0.0072552444010693445,"gap":1},"endBinding":{"elementId":"kJP-EMfds6qSeuTfcEHD0","focus":0.022729610911174578,"gap":4.800053862918034},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"TxsrjnZro4sZkotlEu-oU","type":"arrow","x":220.122,"y":2020.829,"width":56.286,"height":452.55899999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"aO","roundness":{"type":2},"seed":731901879,"version":4,"versionNonce":890333559,"isDeleted":false,"boundElements":[{"type":"text","id":"sVn-hfga1uNDpBZ59K3aa"}],"updated":1784604332918,"link":null,"locked":false,"points":[[0,0.5],[-56.286,98.85900000000015],[-56.286,182.35900000000015],[-56.286,265.85900000000015],[-56.286,349.35900000000015],[-56.286,415.85900000000015],[-56.286,452.05899999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"kJP-EMfds6qSeuTfcEHD0","focus":-0.00996778754254823,"gap":1},"endBinding":{"elementId":"inFLSHH7HfN9jzIPQxUV3","focus":0.0000010746910273381049,"gap":5.29950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"zLfVH4qCAsMI77LK9SsuP","type":"arrow","x":163.836,"y":2527.688,"width":268.592,"height":120.20899999999983,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":1382107961,"version":4,"versionNonce":1291892663,"isDeleted":false,"boundElements":null,"updated":1784604332918,"link":null,"locked":false,"points":[[0.5,0.5],[0,42],[0,67],[0,92],[268.092,119.70899999999983]],"lastCommittedPoint":null,"startBinding":{"elementId":"inFLSHH7HfN9jzIPQxUV3","focus":-0.0000010746910273381049,"gap":1},"endBinding":{"elementId":"MBKHAdeCyHXGCXGRb8gUi","focus":0.000020389169167842218,"gap":5.271218750000003},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"_J956U40hlZmo9uu0pO0s","type":"arrow","x":334.839,"y":2020.829,"width":55.286,"height":135.55899999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":2006376663,"version":4,"versionNonce":1645059863,"isDeleted":false,"boundElements":[{"type":"text","id":"CbjEauhnKR4p9zoOE0L2V"}],"updated":1784604332918,"link":null,"locked":false,"points":[[0,0.5],[55.286,98.85900000000015],[55.286,135.05899999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"kJP-EMfds6qSeuTfcEHD0","focus":-0.002811412726012514,"gap":1},"endBinding":{"elementId":"AvbT0_tV-uz2Vh6ci3mNr","focus":0,"gap":5.29950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"2xio8eTyM5tDRid3FSF-R","type":"arrow","x":390.125,"y":2244.688,"width":0,"height":78.69999999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"aR","roundness":{"type":2},"seed":442858521,"version":4,"versionNonce":2070152535,"isDeleted":false,"boundElements":null,"updated":1784604332918,"link":null,"locked":false,"points":[[0,0.5],[0,42],[0,78.19999999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"AvbT0_tV-uz2Vh6ci3mNr","focus":0,"gap":1},"endBinding":{"elementId":"EmRt518gn0ZcM5cxOC9Os","focus":0,"gap":5.29950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"-MVGuEIhpI5X6PTiP96uB","type":"arrow","x":390.125,"y":2411.688,"width":0,"height":47.19999999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"aS","roundness":{"type":2},"seed":1171434999,"version":4,"versionNonce":780524439,"isDeleted":false,"boundElements":null,"updated":1784604332918,"link":null,"locked":false,"points":[[0,0.5],[0,25],[0,46.69999999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"EmRt518gn0ZcM5cxOC9Os","focus":0,"gap":1},"endBinding":{"elementId":"Hn7GZHXrAxPyz29njFxyh","focus":0,"gap":5.29950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"EvFZRiggmcjl4z4dGo3EQ","type":"arrow","x":390.125,"y":2542.188,"width":118.548,"height":101.44999999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":946901241,"version":4,"versionNonce":861348311,"isDeleted":false,"boundElements":null,"updated":1784604332918,"link":null,"locked":false,"points":[[0.5,0.5],[0,27.5],[0,52.5],[0,77.5],[118.048,100.94999999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"Hn7GZHXrAxPyz29njFxyh","focus":0,"gap":1},"endBinding":{"elementId":"MBKHAdeCyHXGCXGRb8gUi","focus":0.000004724444104673181,"gap":1.04950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"DfjE2H91t44j_utSmO850","type":"arrow","x":764.887,"y":315.453,"width":0.5,"height":123.70100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":827840279,"version":4,"versionNonce":1037483319,"isDeleted":false,"boundElements":[{"type":"text","id":"VY3PmniqSBWJ6irmk67yc"}],"updated":1784604332918,"link":null,"locked":false,"points":[[0.5,0.5],[-0.5,39],[-0.5,78.5],[-0.5,103.5],[-0.6039999999999281,123.20100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"614IHkUargeftY_8-i-HM","focus":-0.017513104361812755,"gap":1},"endBinding":{"elementId":"CkCubu1ygFYYvvUmt49Nt","focus":0.022481630635779657,"gap":4.806161099734547},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"ex3VaMwtMLqmggueeha52","type":"arrow","x":695.601,"y":715.855,"width":76.79600000000005,"height":438.99299999999994,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"aV","roundness":{"type":2},"seed":302385625,"version":4,"versionNonce":1942983831,"isDeleted":false,"boundElements":[{"type":"text","id":"IpIVkcW8KB8zhYE3zGfoo"}],"updated":1784604332918,"link":null,"locked":false,"points":[[0,0.5],[-76.79600000000005,110.78599999999994],[-76.79600000000005,194.28599999999994],[-76.79600000000005,260.78599999999994],[-76.79600000000005,438.49299999999994]],"lastCommittedPoint":null,"startBinding":{"elementId":"CkCubu1ygFYYvvUmt49Nt","focus":-0.009472549086993836,"gap":1},"endBinding":{"elementId":"jZbASbs5XmA6Roev43RNF","focus":0.000005373455132494069,"gap":5.300437500000044},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"NJ5PkKR-0tT__LWtkSl3e","type":"arrow","x":618.805,"y":1209.148,"width":6.588000000000079,"height":1430.506,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":10148919,"version":4,"versionNonce":2051447511,"isDeleted":false,"boundElements":null,"updated":1784604332918,"link":null,"locked":false,"points":[[0.5,0.5],[0,183.50800000000004],[0,225.50800000000004],[0,267.50800000000004],[0,317.00800000000004],[0,366.50800000000004],[0,433.00800000000004],[0,499.50800000000004],[0,524.508],[0,709.0240000000001],[0,910.5400000000002],[0,994.0400000000002],[0,1077.5400000000002],[0,1161.0400000000002],[0,1227.5400000000002],[0,1294.0400000000002],[0,1360.5400000000002],[0,1385.5400000000002],[0,1410.5400000000002],[6.088000000000079,1430.006]],"lastCommittedPoint":null,"startBinding":{"elementId":"jZbASbs5XmA6Roev43RNF","focus":-0.000005373455132494069,"gap":1},"endBinding":{"elementId":"MBKHAdeCyHXGCXGRb8gUi","focus":0.000005753567621975564,"gap":5.033500000000004},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"jygSh1PJahBk6wGdXjU9C","type":"arrow","x":834.172,"y":715.855,"width":75.79700000000003,"height":147.486,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"aX","roundness":{"type":2},"seed":272197305,"version":4,"versionNonce":15521335,"isDeleted":false,"boundElements":[{"type":"text","id":"ueiABsylHAlXfvikfN_UQ"}],"updated":1784604332918,"link":null,"locked":false,"points":[[0,0.5],[75.79700000000003,110.78599999999994],[75.79700000000003,146.986]],"lastCommittedPoint":null,"startBinding":{"elementId":"CkCubu1ygFYYvvUmt49Nt","focus":-0.0017714865738975812,"gap":1},"endBinding":{"elementId":"eJTWPbadobq1KTjy-yTw6","focus":0.0000012240838499302847,"gap":5.299624999999992},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"dxlWEHw9c7XkXKTX_mUHw","type":"arrow","x":909.969,"y":951.641,"width":0.39599999999995816,"height":45.20100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"aY","roundness":{"type":2},"seed":931151191,"version":4,"versionNonce":1693971575,"isDeleted":false,"boundElements":null,"updated":1784604332918,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[-0.10400000000004184,44.70100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"eJTWPbadobq1KTjy-yTw6","focus":-0.0000012240838500389094,"gap":1},"endBinding":{"elementId":"GVRrbqBqo3JqWZttTtC8Y","focus":0.022282205613729695,"gap":4.835487916904703},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"gVH4NPLJT_-NnUibNefkP","type":"arrow","x":840.333,"y":1298.021,"width":128.12299999999993,"height":1344.9600000000003,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":{"type":2},"seed":766388121,"version":4,"versionNonce":795677655,"isDeleted":false,"boundElements":[{"type":"text","id":"zfNPxrdaWiywOPBiCaA1L"}],"updated":1784604332919,"link":null,"locked":false,"points":[[-0.5,0.5],[-59.61399999999992,94.63499999999999],[-59.61399999999992,136.635],[-59.61399999999992,178.635],[-59.61399999999992,228.135],[-59.61399999999992,277.635],[-59.61399999999992,344.135],[-59.61399999999992,410.635],[-59.61399999999992,435.635],[-59.61399999999992,620.1510000000001],[-59.61399999999992,821.6670000000001],[-59.61399999999992,905.1670000000001],[-59.61399999999992,988.6670000000001],[-59.61399999999992,1072.1670000000001],[-59.61399999999992,1138.6670000000001],[-59.61399999999992,1205.1670000000001],[-59.61399999999992,1271.6670000000001],[-59.61399999999992,1296.6670000000001],[-59.61399999999992,1321.6670000000001],[-127.62299999999993,1344.4600000000003]],"lastCommittedPoint":null,"startBinding":{"elementId":"GVRrbqBqo3JqWZttTtC8Y","focus":-0.009735740028627878,"gap":1},"endBinding":{"elementId":"MBKHAdeCyHXGCXGRb8gUi","focus":-0.000018027951832005587,"gap":1.706499999999778},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"dPwyQ7mSw-adRPJ9cqf68","type":"arrow","x":986.036,"y":1292.589,"width":150.32000000000005,"height":207.57500000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":{"type":2},"seed":1767668343,"version":4,"versionNonce":697954103,"isDeleted":false,"boundElements":[{"type":"text","id":"pLGlr78-m7aQM5CRI_vGR"}],"updated":1784604332919,"link":null,"locked":false,"points":[[0.5,0.5],[70.23400000000004,100.06700000000001],[70.23400000000004,142.067],[70.23400000000004,184.067],[149.82000000000005,207.07500000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"GVRrbqBqo3JqWZttTtC8Y","focus":-0.0016777135020703635,"gap":1},"endBinding":{"elementId":"6x7GmpcCZs7k1blkGg5Up","focus":-0.00001848564456542663,"gap":1.4922500000000127},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"CBpRdyCYHEi3hWlioe0jW","type":"arrow","x":852.345,"y":227.995,"width":540.6589999999999,"height":1272.1640000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":{"type":2},"seed":1150798969,"version":4,"versionNonce":390596247,"isDeleted":false,"boundElements":[{"type":"text","id":"JGt_Q5x-aFvENiaBwb6XT"}],"updated":1784604332919,"link":null,"locked":false,"points":[[-0.5,0.5],[540.6589999999999,126.45799999999997],[540.6589999999999,165.95799999999997],[540.6589999999999,190.95799999999997],[540.6589999999999,386.302],[540.6589999999999,598.646],[540.6589999999999,682.146],[540.6589999999999,748.646],[540.6589999999999,956.6529999999999],[540.6589999999999,1164.661],[540.6589999999999,1206.661],[540.6589999999999,1248.661],[461.347,1271.6640000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"614IHkUargeftY_8-i-HM","focus":0.0041244476775408375,"gap":1},"endBinding":{"elementId":"6x7GmpcCZs7k1blkGg5Up","focus":-6.94361988445479e-7,"gap":1.4972499999998945},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"XJUd9E9vPWV0Xu9zUN0HF","type":"arrow","x":1224.91,"y":1550.656,"width":0,"height":44.700000000000045,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"ac","roundness":{"type":2},"seed":1257509783,"version":4,"versionNonce":1808436439,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"points":[[0,0.5],[0,44.200000000000045]],"lastCommittedPoint":null,"startBinding":{"elementId":"6x7GmpcCZs7k1blkGg5Up","focus":8.540803686736847e-7,"gap":1},"endBinding":{"elementId":"oH00IFBvSPzKPj_kXRL8o","focus":-6.946373999031106e-7,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"hOwUdfkT25wHcuPeoSHEo","type":"arrow","x":1224.91,"y":1683.656,"width":0.45899999999983265,"height":109.07500000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"ad","roundness":{"type":2},"seed":481940825,"version":4,"versionNonce":1435534103,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[0,50],[-0.04100000000016735,108.57500000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"oH00IFBvSPzKPj_kXRL8o","focus":6.946373999031106e-7,"gap":1},"endBinding":{"elementId":"nxe1TkgmzbL9mhcgVh85k","focus":0.011882334621356282,"gap":4.801280464076911},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"C8dHEYPw9HR1-RNDNuOaG","type":"arrow","x":1170.447,"y":1984.349,"width":332.6089999999999,"height":661.0130000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":{"type":2},"seed":75204791,"version":4,"versionNonce":1808049783,"isDeleted":false,"boundElements":[{"type":"text","id":"Gqc5DOIgg1cmpLgx-b5zI"}],"updated":1784604332919,"link":null,"locked":false,"points":[[-0.5,0.5],[-114.17699999999991,135.33900000000017],[-114.17699999999991,218.83900000000017],[-114.17699999999991,302.33900000000017],[-114.17699999999991,385.83900000000017],[-114.17699999999991,452.33900000000017],[-114.17699999999991,518.8390000000002],[-114.17699999999991,585.3390000000002],[-114.17699999999991,610.3390000000002],[-114.17699999999991,635.3390000000002],[-332.1089999999999,660.5130000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"nxe1TkgmzbL9mhcgVh85k","focus":-0.011325545181593968,"gap":1},"endBinding":{"elementId":"MBKHAdeCyHXGCXGRb8gUi","focus":-0.00000949285462288856,"gap":5.263781249999965},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"-DsXnn3sTvyoj94quP5cz","type":"arrow","x":1266.362,"y":1998.361,"width":62.10699999999997,"height":158.02699999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"af","roundness":{"type":2},"seed":963101241,"version":4,"versionNonce":1214186967,"isDeleted":false,"boundElements":[{"type":"text","id":"dcANhUERbjGzi1JMx0XID"}],"updated":1784604332919,"link":null,"locked":false,"points":[[0,0.5],[62.10699999999997,121.327],[62.10699999999997,157.52699999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"nxe1TkgmzbL9mhcgVh85k","focus":-0.0033423499964427327,"gap":1},"endBinding":{"elementId":"UMXcshmTu89EQP8ycTxJY","focus":0.0000018639328984732834,"gap":5.29950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"_OI4OtTSFkazucrqjKdYk","type":"arrow","x":1328.469,"y":2244.688,"width":0,"height":78.69999999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"ag","roundness":{"type":2},"seed":1133992407,"version":4,"versionNonce":1880800279,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"points":[[0,0.5],[0,42],[0,78.19999999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"UMXcshmTu89EQP8ycTxJY","focus":-0.0000018639328984732834,"gap":1},"endBinding":{"elementId":"J8XfmWHRO1QSsgtsYPZph","focus":0.0000019008019029857496,"gap":5.29950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"vRY2seFAxoTfqPRPEyyKv","type":"arrow","x":1328.469,"y":2411.688,"width":0,"height":44.69999999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"ah","roundness":{"type":2},"seed":1736774425,"version":4,"versionNonce":881713751,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"points":[[0,0.5],[0,44.19999999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"J8XfmWHRO1QSsgtsYPZph","focus":-0.0000019008019029857496,"gap":1},"endBinding":{"elementId":"djNZaSv5Qs_d9a3fMMrAT","focus":0.0000014524987519471568,"gap":5.29950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"tkK_Ak-NmbzhAIOh-QCWs","type":"arrow","x":1328.469,"y":2544.688,"width":490.60800000000006,"height":110.02599999999984,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":{"type":2},"seed":224134903,"version":4,"versionNonce":43808919,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"points":[[-0.5,0.5],[0,25],[0,50],[0,75],[-490.10800000000006,109.52599999999984]],"lastCommittedPoint":null,"startBinding":{"elementId":"djNZaSv5Qs_d9a3fMMrAT","focus":-0.0000014524987519471568,"gap":1},"endBinding":{"elementId":"MBKHAdeCyHXGCXGRb8gUi","focus":-0.000010256637501254456,"gap":5.28678124999999},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Ms_3eIvoC-DvrDSmsxAqD","type":"text","x":730.998046875,"y":398.953125,"width":120,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_P"],"frameId":null,"index":"aj","roundness":null,"seed":1524810967,"version":3,"versionNonce":1406094775,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"三类压缩路径","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"top","containerId":"JxwmAAKVZnGxs7t3DMeXG","originalText":"三类压缩路径","autoResize":true,"lineHeight":1.25},{"id":"YtNucRV9E6ri8No-X-6TH","type":"text","x":1164.1484375,"y":1481.65625,"width":140,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"ak","roundness":null,"seed":503452151,"version":3,"versionNonce":232705337,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"通用大文本压缩","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"top","containerId":"QoI19-hPqQ_Na338ppA0g","originalText":"通用大文本压缩","autoResize":true,"lineHeight":1.25},{"id":"ISnUa3iiW0JcQsK-k4b37","type":"text","x":768.7021484375,"y":423.953125,"width":118.037109375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"al","roundness":null,"seed":368753431,"version":3,"versionNonce":1579843287,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"Tool Response","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"top","containerId":"XxLasSXV7BMBbUT1jfDxI","originalText":"Tool Response","autoResize":true,"lineHeight":1.25},{"id":"YsMWxedjlVfzsD7vgq8Su","type":"text","x":213.0302734375,"y":1738.65625,"width":192.744140625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"am","roundness":null,"seed":390152247,"version":3,"versionNonce":1323482649,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"历史上下文 checkpoint","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"top","containerId":"eJbYVzK9xiUIxaJ-HY-0I","originalText":"历史上下文 checkpoint","autoResize":true,"lineHeight":1.25},{"id":"eyuaCaHtlX9nDIPLqRmBM","type":"text","x":579.8115234375,"y":12,"width":369.150390625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":1941578071,"version":3,"versionNonce":339905527,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"输入:历史上下文 / Tool Response / 大文本","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"z8SldMJq6898TEigUX7SD","originalText":"输入:历史上下文 / Tool Response / 大文本","autoResize":true,"lineHeight":1.25},{"id":"8nkIP2T4bmAgAYC1Wiuaj","type":"text","x":724.3984375,"y":181.98828125,"width":80,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":1287249527,"version":3,"versionNonce":804623097,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"识别压缩\n场景","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"614IHkUargeftY_8-i-HM","originalText":"识别压缩场景","autoResize":true,"lineHeight":1.25},{"id":"MCLdYGvrm3BUT4UU7UqRw","type":"text","x":208.1650390625,"y":1880.9140625,"width":138.115234375,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"ap","roundness":null,"seed":621082519,"version":3,"versionNonce":572257559,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"messages +\ntools
是否超\n过上下文 80%","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"kJP-EMfds6qSeuTfcEHD0","originalText":"messages + tools
是否超过上下文 80%","autoResize":true,"lineHeight":1.25},{"id":"PIIG_kpe-JlyeNp8Y-PWc","type":"text","x":123.8359375,"y":2490.6875,"width":80,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"aq","roundness":null,"seed":852487351,"version":3,"versionNonce":362466265,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"原样返回","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"inFLSHH7HfN9jzIPQxUV3","originalText":"原样返回","autoResize":true,"lineHeight":1.25},{"id":"bVQ06KfpRXmV0fkdLDWvX","type":"text","x":253.03515625,"y":2178.1875,"width":274.1796875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"ar","roundness":null,"seed":1908358615,"version":3,"versionNonce":1059797559,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"保留 system / developer
序列\n化 active plan","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"AvbT0_tV-uz2Vh6ci3mNr","originalText":"保留 system / developer
序列化 active plan","autoResize":true,"lineHeight":1.25},{"id":"mhWjmDrYueWVVGyLkV9YI","type":"text","x":229.96875,"y":2345.1875,"width":320.3125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"as","roundness":null,"seed":1961323255,"version":3,"versionNonce":132507833,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"绑定 tool_calls 与 tool results
提取\n目标、约束和精确锚点","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"EmRt518gn0ZcM5cxOC9Os","originalText":"绑定 tool_calls 与 tool results
提取目标、约束和精确锚点","autoResize":true,"lineHeight":1.25},{"id":"XneMW9OXQeqvQuXk79pgJ","type":"text","x":292.2099609375,"y":2478.1875,"width":195.830078125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"at","roundness":null,"seed":2026697751,"version":3,"versionNonce":1079302999,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"LLM 生成隐藏的\n
context_checkpoint","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Hn7GZHXrAxPyz29njFxyh","originalText":"LLM 生成隐藏的
context_checkpoint","autoResize":true,"lineHeight":1.25},{"id":"mIZJc4o1Qdqr1W_87OtJ6","type":"text","x":684.21484375,"y":589.125,"width":160,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"au","roundness":null,"seed":895768887,"version":3,"versionNonce":1081764249,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"响应是否超过上下\n文 20%","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"CkCubu1ygFYYvvUmt49Nt","originalText":"响应是否超过上下文 20%","autoResize":true,"lineHeight":1.25},{"id":"HIY0gwQ04DTZrsRbhqoZK","type":"text","x":578.8046875,"y":1172.1484375,"width":80,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"av","roundness":null,"seed":1880234583,"version":3,"versionNonce":1777162359,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"原样返回","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jZbASbs5XmA6Roev43RNF","originalText":"原样返回","autoResize":true,"lineHeight":1.25},{"id":"rWs4E3-QqreoFf2Eh4Ks9","type":"text","x":711.7412109375,"y":885.140625,"width":396.455078125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"aw","roundness":null,"seed":1303033719,"version":3,"versionNonce":2022428281,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"本地轻量压缩
JSON minify / 结构摘要 / 文\n本清理","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"eJTWPbadobq1KTjy-yTw6","originalText":"本地轻量压缩
JSON minify / 结构摘要 / 文本清理","autoResize":true,"lineHeight":1.25},{"id":"QnsV9lFwuqoHo46cxgfOt","type":"text","x":829.96484375,"y":1159.64453125,"width":160,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"ax","roundness":null,"seed":1685237911,"version":3,"versionNonce":28914071,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"处理后是否超过上\n下文 50%","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"GVRrbqBqo3JqWZttTtC8Y","originalText":"处理后是否超过上下文 50%","autoResize":true,"lineHeight":1.25},{"id":"MVuYjf7_UdzYyepopS-pJ","type":"text","x":1095.4912109375,"y":1513.65625,"width":258.837890625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"ay","roundness":null,"seed":236881335,"version":3,"versionNonce":1994233689,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"真实 tokenizer 计算 token 预算","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"6x7GmpcCZs7k1blkGg5Up","originalText":"真实 tokenizer 计算 token 预算","autoResize":true,"lineHeight":1.25},{"id":"jpnJ-o2uDdFZVKQ4_gm0I","type":"text","x":1006.4189453125,"y":1629.65625,"width":436.982421875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"az","roundness":null,"seed":2043852503,"version":3,"versionNonce":552396471,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"规则清理
URL / Base64 / 图片 / 路径 / ID / 空白","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"oH00IFBvSPzKPj_kXRL8o","originalText":"规则清理
URL / Base64 / 图片 / 路径 / ID / 空白","autoResize":true,"lineHeight":1.25},{"id":"j9F0WWDpjY96udr6MkZ18","type":"text","x":1175.08984375,"y":1893.3515625,"width":100,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"b00","roundness":null,"seed":2116273143,"version":3,"versionNonce":1573078073,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"是否仍然超\n预算","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"nxe1TkgmzbL9mhcgVh85k","originalText":"是否仍然超预算","autoResize":true,"lineHeight":1.25},{"id":"d_zPziRCQnDE1-FK9Tyn2","type":"text","x":1202.7509765625,"y":2178.1875,"width":251.435546875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"b01","roundness":null,"seed":722873623,"version":3,"versionNonce":1177352151,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"分块并行 LLM 压缩
按总\n预算分配每块输出","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"UMXcshmTu89EQP8ycTxJY","originalText":"分块并行 LLM 压缩
按总预算分配每块输出","autoResize":true,"lineHeight":1.25},{"id":"3VamqjLTSaphtdDLLzjG2","type":"text","x":1204.142578125,"y":2345.1875,"width":248.65234375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"b02","roundness":null,"seed":471757367,"version":3,"versionNonce":958420249,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"合并并重新计算 token
最\n多两轮合并压缩","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"J8XfmWHRO1QSsgtsYPZph","originalText":"合并并重新计算 token
最多两轮合并压缩","autoResize":true,"lineHeight":1.25},{"id":"jUBd01dm0NQoVZmyKAim1","type":"text","x":1161.37890625,"y":2478.1875,"width":334.1796875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"b03","roundness":null,"seed":169939799,"version":3,"versionNonce":663610615,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"仍超限:head-tail 截断
过短:补原\n文摘录和精确锚点","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"djNZaSv5Qs_d9a3fMMrAT","originalText":"仍超限:head-tail 截断
过短:补原文摘录和精确锚点","autoResize":true,"lineHeight":1.25},{"id":"RWPWnj-m3a-Fwzd-DrmLC","type":"text","x":485.13671875,"y":2656.6875,"width":300,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b04","roundness":null,"seed":494047351,"version":3,"versionNonce":1281903097,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"输出:更短且可继续执行的上下文","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"MBKHAdeCyHXGCXGRb8gUi","originalText":"输出:更短且可继续执行的上下文","autoResize":true,"lineHeight":1.25},{"id":"HfY3A3Fre-X6hPspskVsB","type":"text","x":199.94178373264384,"y":1278.0552414181184,"width":153.30078125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b05","roundness":null,"seed":203239383,"version":3,"versionNonce":1150561815,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"checkpoint_history","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"tMcfRqKjUv_cKUHIeo3IM","originalText":"checkpoint_history","autoResize":true,"lineHeight":1.25},{"id":"sVn-hfga1uNDpBZ59K3aa","type":"text","x":153.836,"y":2274.188,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"b06","roundness":null,"seed":74418999,"version":3,"versionNonce":547267289,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"TxsrjnZro4sZkotlEu-oU","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"CbjEauhnKR4p9zoOE0L2V","type":"text","x":380.125,"y":2107.188,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_H","subgraph_group_P"],"frameId":null,"index":"b07","roundness":null,"seed":1100916951,"version":3,"versionNonce":942953271,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"_J956U40hlZmo9uu0pO0s","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"VY3PmniqSBWJ6irmk67yc","type":"text","x":708.840125,"y":381.453,"width":111.09375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b08","roundness":null,"seed":31641335,"version":3,"versionNonce":1381425081,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"tool_response","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"DfjE2H91t44j_utSmO850","originalText":"tool_response","autoResize":true,"lineHeight":1.25},{"id":"IpIVkcW8KB8zhYE3zGfoo","type":"text","x":608.805,"y":897.641,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"b09","roundness":null,"seed":77069911,"version":3,"versionNonce":1255330903,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ex3VaMwtMLqmggueeha52","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"ueiABsylHAlXfvikfN_UQ","type":"text","x":899.969,"y":814.141,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_T","subgraph_group_P"],"frameId":null,"index":"b0A","roundness":null,"seed":242952183,"version":3,"versionNonce":531923097,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jygSh1PJahBk6wGdXjU9C","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"zfNPxrdaWiywOPBiCaA1L","type":"text","x":769.6830199746205,"y":2007.7604645469512,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0B","roundness":null,"seed":2031111575,"version":3,"versionNonce":1145319799,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"gVH4NPLJT_-NnUibNefkP","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"pLGlr78-m7aQM5CRI_vGR","type":"text","x":965.439921875,"y":1422.156,"width":181.66015625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0C","roundness":null,"seed":711622903,"version":3,"versionNonce":912983417,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"是,目标压回约 20%","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"dPwyQ7mSw-adRPJ9cqf68","originalText":"是,目标压回约 20%","autoResize":true,"lineHeight":1.25},{"id":"JGt_Q5x-aFvENiaBwb6XT","type":"text","x":1338.7608359375,"y":897.641,"width":108.486328125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0D","roundness":null,"seed":891613271,"version":3,"versionNonce":2110581399,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"large_content","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"CBpRdyCYHEi3hWlioe0jW","originalText":"large_content","autoResize":true,"lineHeight":1.25},{"id":"Gqc5DOIgg1cmpLgx-b5zI","type":"text","x":1046.27,"y":2424.188,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0E","roundness":null,"seed":1893599287,"version":3,"versionNonce":1102966361,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"C8dHEYPw9HR1-RNDNuOaG","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"dcANhUERbjGzi1JMx0XID","type":"text","x":1318.469,"y":2107.188,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":["subgraph_group_L","subgraph_group_P"],"frameId":null,"index":"b0F","roundness":null,"seed":662093719,"version":3,"versionNonce":874610615,"isDeleted":false,"boundElements":null,"updated":1784604332919,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"-DsXnn3sTvyoj94quP5cz","originalText":"是","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/context-compression-algorithm.mmd b/diagrams/context-compression-algorithm.mmd new file mode 100644 index 000000000000..4eeba7414634 --- /dev/null +++ b/diagrams/context-compression-algorithm.mmd @@ -0,0 +1,63 @@ +flowchart TB + A["输入:历史上下文 / Tool Response / 大文本"] --> B{"识别压缩场景"} + + subgraph P["三类压缩路径"] + direction LR + + subgraph H["历史上下文 checkpoint"] + direction TB + H1{"messages + tools
是否超过上下文 80%"} + H2["原样返回"] + H3["保留 system / developer
序列化 active plan"] + H4["绑定 tool_calls 与 tool results
提取目标、约束和精确锚点"] + H5["LLM 生成隐藏的
context_checkpoint"] + end + + subgraph T["Tool Response"] + direction TB + T1{"响应是否超过上下文 20%"} + T2["原样返回"] + T3["本地轻量压缩
JSON minify / 结构摘要 / 文本清理"] + T4{"处理后是否超过上下文 50%"} + end + + subgraph L["通用大文本压缩"] + direction TB + L1["真实 tokenizer 计算 token 预算"] + L2["规则清理
URL / Base64 / 图片 / 路径 / ID / 空白"] + L3{"是否仍然超预算"} + L4["分块并行 LLM 压缩
按总预算分配每块输出"] + L5["合并并重新计算 token
最多两轮合并压缩"] + L6["仍超限:head-tail 截断
过短:补原文摘录和精确锚点"] + end + + end + + Z["输出:更短且可继续执行的上下文"] + + B -->|"checkpoint_history"| H1 + H1 -->|"否"| H2 --> Z + H1 -->|"是"| H3 --> H4 --> H5 --> Z + + B -->|"tool_response"| T1 + T1 -->|"否"| T2 --> Z + T1 -->|"是"| T3 --> T4 + T4 -->|"否"| Z + T4 -->|"是,目标压回约 20%"| L1 + + B -->|"large_content"| L1 + L1 --> L2 --> L3 + L3 -->|"否"| Z + L3 -->|"是"| L4 --> L5 --> L6 --> Z + + classDef input fill:#1f2937,color:#ffffff,stroke:#111827,stroke-width:2px; + classDef decision fill:#fff7d6,color:#3f3210,stroke:#d6a700,stroke-width:2px; + classDef local fill:#e8f3ff,color:#173b5f,stroke:#4d8fc9,stroke-width:1.5px; + classDef llm fill:#f3e8ff,color:#4b256d,stroke:#9560bd,stroke-width:1.5px; + classDef output fill:#e6f7ed,color:#174b2b,stroke:#3a9b62,stroke-width:2px; + + class A input; + class B,H1,T1,T4,L3 decision; + class H2,H3,H4,T2,T3,L1,L2 local; + class H5,L4,L5,L6 llm; + class Z output; diff --git a/diagrams/context-compression-algorithm.png b/diagrams/context-compression-algorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..39204703bfd4e7af27d48599d529e990e8c3e250 GIT binary patch literal 509674 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�{xgSXj`|1IwVGZJjL&{L(b~|% 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

`wUj2fyiW60GVD(7c16(Cd2th#ON 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

b(&c` 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%0Dllq( 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/diagrams/context-compression-algorithm.svg b/diagrams/context-compression-algorithm.svg new file mode 100644 index 000000000000..03d9bfb9bdd2 --- /dev/null +++ b/diagrams/context-compression-algorithm.svg @@ -0,0 +1 @@ +三类压缩路径通用大文本压缩Tool Response历史上下文 checkpointcheckpoint_historytool_response是,目标压回约 20%large_content输入:历史上下文 / ToolResponse / 大文本识别压缩场景messages + tools是否超过上下文 80%原样返回保留 system / developer序列化 active plan绑定 tool_calls toolresults提取目标、约束和精确锚点LLM 生成隐藏的context_checkpoint响应是否超过上下文 20%原样返回本地轻量压缩JSON minify / 结构摘要 /文本清理处理后是否超过上下文 50%真实 tokenizer 计算 token预算规则清理URL / Base64 / 图片 / 路径 /ID / 空白是否仍然超预算分块并行 LLM 压缩按总预算分配每块输出合并并重新计算 token最多两轮合并压缩仍超限:head-tail 截断过短:补原文摘录和精确锚输出:更短且可继续执行的上下文 \ No newline at end of file diff --git a/diagrams/workflow-builder-current-architecture.excalidraw b/diagrams/workflow-builder-current-architecture.excalidraw new file mode 100644 index 000000000000..af4f2ea2585a --- /dev/null +++ b/diagrams/workflow-builder-current-architecture.excalidraw @@ -0,0 +1 @@ +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"jrF4A1ZPp-3X2VRN18r5j","type":"rectangle","x":0,"y":318.37109375,"width":65.65625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":1827964959,"version":3,"versionNonce":675518097,"isDeleted":false,"boundElements":[{"type":"text","id":"Maduf2kCa_m7-oy520nKq"},{"id":"ZVELPHbGmzbyxPMIWO0xL","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"Lg6stHVMD7MKbCRduGh19","type":"rectangle","x":115.65625,"y":318.37109375,"width":315.484375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":1888406865,"version":5,"versionNonce":1767200625,"isDeleted":false,"boundElements":[{"type":"text","id":"Jq9MmmN6PajMh961hCupH"},{"id":"ZVELPHbGmzbyxPMIWO0xL","type":"arrow"},{"id":"bK99zuFTz47-EWVTAq43i","type":"arrow"},{"id":"LkF2bx57N7MK1Tv_ZmC3l","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"hew6LIv5UuSJRvuLkFUdK","type":"rectangle","x":481.140625,"y":248.5,"width":335.78125,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":1049373759,"version":5,"versionNonce":1603253713,"isDeleted":false,"boundElements":[{"type":"text","id":"7RGBCv1CZqUSD18nACqmA"},{"id":"bK99zuFTz47-EWVTAq43i","type":"arrow"},{"id":"CnMEDcNcbbdoC7dvG1UJW","type":"arrow"},{"id":"BjCtSCxuP6SKUdh3eb-Y-","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"Zf7pMX6c0bUNxWyzp9D9Z","type":"rectangle","x":875.9453125,"y":120.9921875,"width":251.765625,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":1623915313,"version":6,"versionNonce":1870140049,"isDeleted":false,"boundElements":[{"type":"text","id":"egKwUt6SFKxt-YhEKXU4w"},{"id":"CnMEDcNcbbdoC7dvG1UJW","type":"arrow"},{"id":"xqiB0lP4IF8kiqnNUwQWK","type":"arrow"},{"id":"YcbmoWOMDnsoqk0KzGXSu","type":"arrow"},{"id":"64GfX2wN3GPUhK0mJfQj1","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"DJ0Onw8NrS2V1tNAC2xbC","type":"rectangle","x":866.921875,"y":283.11328125,"width":269.8125,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":567954527,"version":3,"versionNonce":10146737,"isDeleted":false,"boundElements":[{"type":"text","id":"khRact1FvY2t0l-9x4wla"},{"id":"BjCtSCxuP6SKUdh3eb-Y-","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"D680c8IxgwFZfbP9an3S9","type":"rectangle","x":1186.734375,"y":0,"width":234.359375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":956722449,"version":4,"versionNonce":931882257,"isDeleted":false,"boundElements":[{"type":"text","id":"MSo9BR6uRf6t8YMehVeWX"},{"id":"xqiB0lP4IF8kiqnNUwQWK","type":"arrow"},{"id":"JSxxJQTUNlbt8a0iViqC-","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"cHykidLP3op7UMxWqqzRm","type":"rectangle","x":1188.0234375,"y":166.25,"width":231.78125,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":313485439,"version":4,"versionNonce":1343231185,"isDeleted":false,"boundElements":[{"type":"text","id":"deyKrkh0J1w9z1ijj4AVF"},{"id":"YcbmoWOMDnsoqk0KzGXSu","type":"arrow"},{"id":"j89WM0BZTk6x81E5PAbhB","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"PwLImBertAlcJEBwd9mec","type":"rectangle","x":1471.09375,"y":75.4921875,"width":349.9375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":1085842161,"version":7,"versionNonce":1460962129,"isDeleted":false,"boundElements":[{"type":"text","id":"Rhth9FhDmoCwtyOHwIEKh"},{"id":"JSxxJQTUNlbt8a0iViqC-","type":"arrow"},{"id":"j89WM0BZTk6x81E5PAbhB","type":"arrow"},{"id":"PV3I-AyJX-cY5Vi6fDTzk","type":"arrow"},{"id":"0jI_xXIO9jXZbzNyrxgpp","type":"arrow"},{"id":"kr9qvX-jwltkO3pe_NLMR","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"3gqmCry0y16WQAY0SUsY-","type":"rectangle","x":1871.03125,"y":23.25,"width":317.125,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":1053556895,"version":4,"versionNonce":1800053841,"isDeleted":false,"boundElements":[{"type":"text","id":"OKhQDlzzYlzsjA2SOhwvL"},{"id":"PV3I-AyJX-cY5Vi6fDTzk","type":"arrow"},{"id":"hgLv2leLChu27Sjp8GRVy","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"nAWrOSIY5z6NpEUl8C13h","type":"rectangle","x":2238.15625,"y":28.25,"width":272.1875,"height":73,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":1684610257,"version":4,"versionNonce":2046329873,"isDeleted":false,"boundElements":[{"type":"text","id":"wOcyKvDoJO8oRtYirey-Q"},{"id":"hgLv2leLChu27Sjp8GRVy","type":"arrow"},{"id":"zxPRULzo8TMY15ClpuEZg","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"g7nwjHcoon3LTleRYBLTy","type":"rectangle","x":2585.671875,"y":28.25,"width":379.0625,"height":73,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":1205900479,"version":4,"versionNonce":50426833,"isDeleted":false,"boundElements":[{"type":"text","id":"KRjIcFEmxjWOysssc4jE8"},{"id":"zxPRULzo8TMY15ClpuEZg","type":"arrow"},{"id":"kKq-eDdNbN9V7VOjCzIOl","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"ayHv_SpE8brT_9A5WOex2","type":"rectangle","x":3014.734375,"y":41.12890625,"width":405.328125,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":330259121,"version":4,"versionNonce":1457615761,"isDeleted":false,"boundElements":[{"type":"text","id":"L7JBLPG7hvpX4k9HGOSxa"},{"id":"kKq-eDdNbN9V7VOjCzIOl","type":"arrow"},{"id":"0jI_xXIO9jXZbzNyrxgpp","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"jnDYux8DG2hWjwNspbnsC","type":"rectangle","x":1918.9921875,"y":199.12109375,"width":221.203125,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":1166910687,"version":4,"versionNonce":907453201,"isDeleted":false,"boundElements":[{"type":"text","id":"k6iUviORQUm-6OLUZ7uGl"},{"id":"kr9qvX-jwltkO3pe_NLMR","type":"arrow"},{"id":"qbviDTSIjX5XVQHP7fKuJ","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"1k7u5tWdURt2-8-5aj2fW","type":"diamond","x":2287.0078125,"y":191.62890625,"width":174.484375,"height":174.484375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":1597168785,"version":5,"versionNonce":63922769,"isDeleted":false,"boundElements":[{"type":"text","id":"R8XFD_QYsjrU2f-aIt97I"},{"id":"qbviDTSIjX5XVQHP7fKuJ","type":"arrow"},{"id":"64GfX2wN3GPUhK0mJfQj1","type":"arrow"},{"id":"ty7QqilHyTg3aZZymRK0r","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"nfOBkX1LEj8PSRuWbHxa8","type":"rectangle","x":2653.734375,"y":239.87109375,"width":242.9375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":123973887,"version":4,"versionNonce":1793442321,"isDeleted":false,"boundElements":[{"type":"text","id":"1k31OEZUyZ0nNvAoilD0Y"},{"id":"ty7QqilHyTg3aZZymRK0r","type":"arrow"},{"id":"XdwlmjohNMAB_JbRHCG7Z","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"A-NA0KuNeRUJgkJDQN_ls","type":"rectangle","x":3081.84375,"y":239.87109375,"width":271.109375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":null,"seed":1454056049,"version":4,"versionNonce":741814737,"isDeleted":false,"boundElements":[{"type":"text","id":"50CR22Y81GDLOK-AKph2L"},{"id":"XdwlmjohNMAB_JbRHCG7Z","type":"arrow"},{"id":"oXDZwUxjo4G3bqzuL576b","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"8sZEBjzoecQoCuzfJbV84","type":"rectangle","x":3470.0625,"y":343.75,"width":271.84375,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":null,"seed":383990047,"version":4,"versionNonce":541045137,"isDeleted":false,"boundElements":[{"type":"text","id":"iKZQB226Mi-zNVQGU6Jli"},{"id":"oXDZwUxjo4G3bqzuL576b","type":"arrow"},{"id":"LkF2bx57N7MK1Tv_ZmC3l","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"ZVELPHbGmzbyxPMIWO0xL","type":"arrow","x":65.656,"y":342.871,"width":44.69999999999999,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":{"type":2},"seed":652192849,"version":4,"versionNonce":542349055,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999999,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"jrF4A1ZPp-3X2VRN18r5j","focus":-0.000003826530613766349,"gap":1},"endBinding":{"elementId":"Lg6stHVMD7MKbCRduGh19","focus":0.000003826530613389124,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"bK99zuFTz47-EWVTAq43i","type":"arrow","x":335.263,"y":318.371,"width":140.57800000000003,"height":47.87099999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":{"type":2},"seed":2038218047,"version":4,"versionNonce":1479222079,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[120.87800000000004,-47.87099999999998],[140.07800000000003,-47.87099999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"Lg6stHVMD7MKbCRduGh19","focus":-3.672551259526698e-7,"gap":1},"endBinding":{"elementId":"hew6LIv5UuSJRvuLkFUdK","focus":0,"gap":5.299624999999992},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"CnMEDcNcbbdoC7dvG1UJW","type":"arrow","x":687.432,"y":248.5,"width":183.21299999999997,"height":88.50800000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":{"type":2},"seed":2007497265,"version":4,"versionNonce":742170495,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[154.49,-88.50800000000001],[182.71299999999997,-88.50800000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"hew6LIv5UuSJRvuLkFUdK","focus":-3.515633759277487e-7,"gap":1},"endBinding":{"elementId":"Zf7pMX6c0bUNxWyzp9D9Z","focus":0.00000480769230743232,"gap":5.300312500000018},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"BjCtSCxuP6SKUdh3eb-Y-","type":"arrow","x":727.452,"y":292.5,"width":134.16999999999996,"height":32.113,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":{"type":2},"seed":848346463,"version":4,"versionNonce":1791757247,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[114.47000000000003,32.113],[133.66999999999996,32.113]],"lastCommittedPoint":null,"startBinding":{"elementId":"hew6LIv5UuSJRvuLkFUdK","focus":0.0000018275087522630768,"gap":1},"endBinding":{"elementId":"DJ0Onw8NrS2V1tNAC2xbC","focus":0.000006777108433237629,"gap":5.299875000000043},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"xqiB0lP4IF8kiqnNUwQWK","type":"arrow","x":1053.371,"y":120.992,"width":128.06299999999987,"height":81.992,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":{"type":2},"seed":166431761,"version":4,"versionNonce":555575295,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[108.36299999999983,-81.992],[127.56299999999987,-81.992]],"lastCommittedPoint":null,"startBinding":{"elementId":"Zf7pMX6c0bUNxWyzp9D9Z","focus":-0.000005080656910222277,"gap":1},"endBinding":{"elementId":"D680c8IxgwFZfbP9an3S9","focus":0,"gap":5.300375000000031},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"YcbmoWOMDnsoqk0KzGXSu","type":"arrow","x":1127.711,"y":195.62,"width":55.011999999999944,"height":9.629999999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":91208063,"version":4,"versionNonce":1534374975,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[34.02299999999991,9.629999999999995],[54.511999999999944,9.629999999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"Zf7pMX6c0bUNxWyzp9D9Z","focus":-0.00003427194708760437,"gap":1},"endBinding":{"elementId":"cHykidLP3op7UMxWqqzRm","focus":0,"gap":5.300437500000044},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"JSxxJQTUNlbt8a0iViqC-","type":"arrow","x":1421.094,"y":39,"width":116.70399999999995,"height":34.620000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":362930673,"version":4,"versionNonce":1695936639,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0.5],[25,0],[116.20399999999995,34.120000000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"D680c8IxgwFZfbP9an3S9","focus":0,"gap":1},"endBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":0.0000027084119707854352,"gap":1.8721874999999955},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"j89WM0BZTk6x81E5PAbhB","type":"arrow","x":1419.805,"y":205.25,"width":135.50199999999995,"height":49.56700000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":{"type":2},"seed":2002399647,"version":4,"versionNonce":138747071,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,-0.5],[26.288999999999987,0],[135.00199999999995,-49.06700000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"cHykidLP3op7UMxWqqzRm","focus":0,"gap":1},"endBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":-0.000007294864387017946,"gap":2.1908124999999927},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"PV3I-AyJX-cY5Vi6fDTzk","type":"arrow","x":1802.847,"y":75.492,"width":62.884000000000015,"height":10.742000000000004,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":1741847505,"version":4,"versionNonce":1313224959,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[43.18399999999997,-10.742000000000004],[62.384000000000015,-10.742000000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":-0.0000014024787680164616,"gap":1},"endBinding":{"elementId":"3gqmCry0y16WQAY0SUsY-","focus":0,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"hgLv2leLChu27Sjp8GRVy","type":"arrow","x":2188.156,"y":64.75,"width":44.70000000000027,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":293643711,"version":4,"versionNonce":1063077183,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[44.20000000000027,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"3gqmCry0y16WQAY0SUsY-","focus":0,"gap":1},"endBinding":{"elementId":"nAWrOSIY5z6NpEUl8C13h","focus":0,"gap":5.300249999999778},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"zxPRULzo8TMY15ClpuEZg","type":"arrow","x":2510.344,"y":64.75,"width":70.02799999999979,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":1083496881,"version":4,"versionNonce":583942527,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0],[37.66399999999976,0],[69.52799999999979,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"nAWrOSIY5z6NpEUl8C13h","focus":0,"gap":1},"endBinding":{"elementId":"g7nwjHcoon3LTleRYBLTy","focus":0,"gap":5.299875000000156},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kKq-eDdNbN9V7VOjCzIOl","type":"arrow","x":2964.734,"y":64.75,"width":44.71199999999999,"height":1.3319999999999936,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":1661179359,"version":4,"versionNonce":1054682559,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0.5],[44.21199999999999,0.8319999999999936]],"lastCommittedPoint":null,"startBinding":{"elementId":"g7nwjHcoon3LTleRYBLTy","focus":-0.13396799041945182,"gap":1},"endBinding":{"elementId":"ayHv_SpE8brT_9A5WOex2","focus":0.1743406383430122,"gap":5.288375000000087},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"0jI_xXIO9jXZbzNyrxgpp","type":"arrow","x":3072.131,"y":119.129,"width":1245.8469999999998,"height":22.120999999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":1896905617,"version":4,"versionNonce":416156159,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[-0.5,-0.5],[-82.39699999999993,22.120999999999995],[-296.9279999999999,22.120999999999995],[-524.123,22.120999999999995],[-697.8809999999999,22.120999999999995],[-858.9749999999999,22.120999999999995],[-1042.5369999999998,22.120999999999995],[-1245.3469999999998,19.979]],"lastCommittedPoint":null,"startBinding":{"elementId":"ayHv_SpE8brT_9A5WOex2","focus":-0.00000386400804687875,"gap":1},"endBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":0.5275476190052368,"gap":5.2527500000001055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kr9qvX-jwltkO3pe_NLMR","type":"arrow","x":1707.894,"y":153.492,"width":205.798,"height":87.12900000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":1123254783,"version":4,"versionNonce":887412287,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0],[138.13699999999994,87.12900000000002],[205.298,87.12900000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":1.6276140467197388e-8,"gap":1},"endBinding":{"elementId":"jnDYux8DG2hWjwNspbnsC","focus":0.000002259036143916433,"gap":5.300187499999993},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"qbviDTSIjX5XVQHP7fKuJ","type":"arrow","x":2140.195,"y":240.621,"width":158.90099999999984,"height":20.765000000000015,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":964485489,"version":4,"versionNonce":1449497215,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0.5],[72.96099999999979,0],[158.40099999999984,20.265000000000015]],"lastCommittedPoint":null,"startBinding":{"elementId":"jnDYux8DG2hWjwNspbnsC","focus":-0.000002259036143916433,"gap":1},"endBinding":{"elementId":"1k7u5tWdURt2-8-5aj2fW","focus":-0.007722991704066925,"gap":4.352043364420972},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"64GfX2wN3GPUhK0mJfQj1","type":"arrow","x":2305.761,"y":297.624,"width":1261.589,"height":118.73400000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":1381034527,"version":4,"versionNonce":490475231,"isDeleted":false,"boundElements":[{"type":"text","id":"C6zfwL_Lf92L9wmhfmzRS"}],"updated":1785228653160,"link":null,"locked":false,"points":[[-0.5,-0.5],[-92.60500000000002,23.867999999999995],[-276.1669999999999,23.867999999999995],[-459.73,23.867999999999995],[-659.6979999999999,23.867999999999995],[-859.6669999999999,23.867999999999995],[-1001.847,23.867999999999995],[-1144.027,23.867999999999995],[-1261.089,-94.36600000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"1k7u5tWdURt2-8-5aj2fW","focus":-0.012615006732754107,"gap":1},"endBinding":{"elementId":"Zf7pMX6c0bUNxWyzp9D9Z","focus":-0.0000011880879308537412,"gap":3.7658125000000098},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"ty7QqilHyTg3aZZymRK0r","type":"arrow","x":2461.992,"y":279.371,"width":186.442,"height":0.5,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":1730251601,"version":4,"versionNonce":1829463871,"isDeleted":false,"boundElements":[{"type":"text","id":"QCjylscr862Vu9E7tPTjs"}],"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0],[86.01599999999962,-0.5],[185.942,-0.5]],"lastCommittedPoint":null,"startBinding":{"elementId":"1k7u5tWdURt2-8-5aj2fW","focus":0.01157627171043888,"gap":1},"endBinding":{"elementId":"nfOBkX1LEj8PSRuWbHxa8","focus":0.0000024038461548698115,"gap":5.3003749999998035},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"XdwlmjohNMAB_JbRHCG7Z","type":"arrow","x":2896.672,"y":278.871,"width":179.87199999999984,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":{"type":2},"seed":1040993855,"version":4,"versionNonce":1893458815,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0],[93.0619999999999,0],[179.37199999999984,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"nfOBkX1LEj8PSRuWbHxa8","focus":-0.0000024038461548698115,"gap":1},"endBinding":{"elementId":"A-NA0KuNeRUJgkJDQN_ls","focus":0.000002403846152426935,"gap":5.299750000000131},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"oXDZwUxjo4G3bqzuL576b","type":"arrow","x":3352.953,"y":278.871,"width":185.83199999999988,"height":61.95600000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":{"type":2},"seed":844495153,"version":4,"versionNonce":996822975,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0.5],[92.11000000000013,0],[185.33199999999988,61.45600000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"A-NA0KuNeRUJgkJDQN_ls","focus":-0.000002403846152426935,"gap":1},"endBinding":{"elementId":"8sZEBjzoecQoCuzfJbV84","focus":6.440364486529198e-7,"gap":2.923000000000002},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"LkF2bx57N7MK1Tv_ZmC3l","type":"arrow","x":3470.063,"y":398.649,"width":3114.743,"height":32.132000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":{"type":2},"seed":1090924127,"version":4,"versionNonce":1241164799,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[-0.5,-0.5],[-25,2.4639999999999986],[-252.66499999999996,2.4639999999999986],[-480.3290000000002,2.4639999999999986],[-694.8600000000001,2.4639999999999986],[-922.0550000000003,2.4639999999999986],[-1095.813,2.4639999999999986],[-1256.9070000000002,2.4639999999999986],[-1440.469,2.4639999999999986],[-1624.0320000000002,2.4639999999999986],[-1824,2.4639999999999986],[-2023.969,2.4639999999999986],[-2166.1490000000003,2.4639999999999986],[-2308.329,2.4639999999999986],[-2468.235,2.4639999999999986],[-2628.141,2.4639999999999986],[-2821.032,2.4639999999999986],[-3013.922,2.4639999999999986],[-3114.243,-29.168000000000006]],"lastCommittedPoint":null,"startBinding":{"elementId":"8sZEBjzoecQoCuzfJbV84","focus":-0.000047166611473702,"gap":1},"endBinding":{"elementId":"Lg6stHVMD7MKbCRduGh19","focus":0.00001634393229482912,"gap":1.6099062499999945},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Maduf2kCa_m7-oy520nKq","type":"text","x":12.828125,"y":330.37109375,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":null,"seed":1058724031,"version":3,"versionNonce":48419871,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"用户","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jrF4A1ZPp-3X2VRN18r5j","originalText":"用户","autoResize":true,"lineHeight":1.25},{"id":"Jq9MmmN6PajMh961hCupH","type":"text","x":158.6474609375,"y":330.37109375,"width":229.501953125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":null,"seed":1692362975,"version":3,"versionNonce":813384017,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Workflow Builder 聊天窗口","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Lg6stHVMD7MKbCRduGh19","originalText":"Workflow Builder 聊天窗口","autoResize":true,"lineHeight":1.25},{"id":"7RGBCv1CZqUSD18nACqmA","type":"text","x":528.4501953125,"y":258,"width":241.162109375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":null,"seed":1608316159,"version":3,"versionNonce":416348223,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Pro Workflow Builder Runner","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"hew6LIv5UuSJRvuLkFUdK","originalText":"Pro Workflow Builder Runner","autoResize":true,"lineHeight":1.25},{"id":"egKwUt6SFKxt-YhEKXU4w","type":"text","x":902.2333984375,"y":134.9921875,"width":199.189453125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":null,"seed":395574559,"version":3,"versionNonce":1393094449,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Agent Loop Core
主\nAgent + AgentPlan","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Zf7pMX6c0bUNxWyzp9D9Z","originalText":"Agent Loop Core
主 Agent + AgentPlan","autoResize":true,"lineHeight":1.25},{"id":"khRact1FvY2t0l-9x4wla","type":"text","x":872.765625,"y":299.61328125,"width":258.125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":null,"seed":796197183,"version":3,"versionNonce":1906677855,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"研究 Sandbox
Skill / 文档 /\n用户文件","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"DJ0Onw8NrS2V1tNAC2xbC","originalText":"研究 Sandbox
Skill / 文档 / 用户文件","autoResize":true,"lineHeight":1.25},{"id":"MSo9BR6uRf6t8YMehVeWX","type":"text","x":1193.2060546875,"y":14,"width":221.416015625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":null,"seed":148930911,"version":3,"versionNonce":392552721,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"workflow_cli_query
只\n读查询","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"D680c8IxgwFZfbP9an3S9","originalText":"workflow_cli_query
只读查询","autoResize":true,"lineHeight":1.25},{"id":"deyKrkh0J1w9z1ijj4AVF","type":"text","x":1197.087890625,"y":180.25,"width":213.65234375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":null,"seed":86441343,"version":3,"versionNonce":1664169087,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"workflow_cli_apply
C\nhangeSet 提交","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"cHykidLP3op7UMxWqqzRm","originalText":"workflow_cli_apply
ChangeSet 提交","autoResize":true,"lineHeight":1.25},{"id":"Rhth9FhDmoCwtyOHwIEKh","type":"text","x":1476.7509765625,"y":89.4921875,"width":338.623046875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":null,"seed":126416287,"version":3,"versionNonce":185177841,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"CLI Gateway
白名单 / 参数校验 / 重\n试计数","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"PwLImBertAlcJEBwd9mec","originalText":"CLI Gateway
白名单 / 参数校验 / 重试计数","autoResize":true,"lineHeight":1.25},{"id":"OKhQDlzzYlzsjA2SOhwvL","type":"text","x":1922.484375,"y":39.75,"width":214.21875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":null,"seed":926345663,"version":3,"versionNonce":892619935,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"事务 Sandbox
隔离的\nworkflow.json + CLI","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"3gqmCry0y16WQAY0SUsY-","originalText":"事务 Sandbox
隔离的 workflow.json + CLI","autoResize":true,"lineHeight":1.25},{"id":"wOcyKvDoJO8oRtYirey-Q","type":"text","x":2256.8525390625,"y":39.75,"width":234.794921875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":null,"seed":22108639,"version":3,"versionNonce":544968913,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Workflow CLI
changeset\nplan / apply","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"nAWrOSIY5z6NpEUl8C13h","originalText":"Workflow CLI
changeset plan / apply","autoResize":true,"lineHeight":1.25},{"id":"KRjIcFEmxjWOysssc4jE8","type":"text","x":2607.5224609375,"y":39.75,"width":335.361328125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":null,"seed":1525204479,"version":3,"versionNonce":1667195071,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Workflow Core
Schema / Command /\nValidation","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"g7nwjHcoon3LTleRYBLTy","originalText":"Workflow Core
Schema / Command / Validation","autoResize":true,"lineHeight":1.25},{"id":"L7JBLPG7hvpX4k9HGOSxa","type":"text","x":3047.212890625,"y":55.12890625,"width":340.37109375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":null,"seed":1123921439,"version":3,"versionNonce":223563441,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"WorkflowPlan
目标文档 / checksum /\ndiagnostics","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ayHv_SpE8brT_9A5WOex2","originalText":"WorkflowPlan
目标文档 / checksum / diagnostics","autoResize":true,"lineHeight":1.25},{"id":"k6iUviORQUm-6OLUZ7uGl","type":"text","x":1929.984375,"y":215.62109375,"width":199.21875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":75534911,"version":3,"versionNonce":525529311,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"服务端语义审查
无\n工具 Agent 回合","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jnDYux8DG2hWjwNspbnsC","originalText":"服务端语义审查
无工具 Agent 回合","autoResize":true,"lineHeight":1.25},{"id":"R8XFD_QYsjrU2f-aIt97I","type":"text","x":2344.12890625,"y":253.75,"width":60,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":944894559,"version":3,"versionNonce":1748521105,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"审查通\n过?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"1k7u5tWdURt2-8-5aj2fW","originalText":"审查通过?","autoResize":true,"lineHeight":1.25},{"id":"1k31OEZUyZ0nNvAoilD0Y","type":"text","x":2663.0595703125,"y":253.87109375,"width":224.287109375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":null,"seed":121785983,"version":3,"versionNonce":312442111,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"ApplyWorkflowPlan
再\n次校验并原子应用","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"nfOBkX1LEj8PSRuWbHxa8","originalText":"ApplyWorkflowPlan
再次校验并原子应用","autoResize":true,"lineHeight":1.25},{"id":"50CR22Y81GDLOK-AKph2L","type":"text","x":3096.3779296875,"y":253.87109375,"width":242.041015625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":null,"seed":739387039,"version":3,"versionNonce":115480177,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"WorkflowDocument
映射\n到实际画布 / 保存","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"A-NA0KuNeRUJgkJDQN_ls","originalText":"WorkflowDocument
映射到实际画布 / 保存","autoResize":true,"lineHeight":1.25},{"id":"iKZQB226Mi-zNVQGU6Jli","type":"text","x":3476.9365234375,"y":360.25,"width":258.095703125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":null,"seed":896662207,"version":3,"versionNonce":1623557407,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"最终无工具 Agent 回合
向\n用户报告完成或失败","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"8sZEBjzoecQoCuzfJbV84","originalText":"最终无工具 Agent 回合
向用户报告完成或失败","autoResize":true,"lineHeight":1.25},{"id":"C6zfwL_Lf92L9wmhfmzRS","type":"text","x":1636.063,"y":308.992,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"as","roundness":null,"seed":1043131039,"version":3,"versionNonce":471343185,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"64GfX2wN3GPUhK0mJfQj1","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"QCjylscr862Vu9E7tPTjs","type":"text","x":2538.008,"y":266.371,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"at","roundness":null,"seed":1907677951,"version":3,"versionNonce":1765116223,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ty7QqilHyTg3aZZymRK0r","originalText":"是","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/workflow-builder-current-architecture.mmd b/diagrams/workflow-builder-current-architecture.mmd new file mode 100644 index 000000000000..11d538e573c0 --- /dev/null +++ b/diagrams/workflow-builder-current-architecture.mmd @@ -0,0 +1,37 @@ +%% 当前 Workflow Builder 实际架构 +graph LR + U[用户] --> UI[Workflow Builder 聊天窗口] + UI --> R[Pro Workflow Builder Runner] + + R --> L[Agent Loop Core
主 Agent + AgentPlan] + R --> S[研究 Sandbox
Skill / 文档 / 用户文件] + L --> Q[workflow_cli_query
只读查询] + L --> A[workflow_cli_apply
ChangeSet 提交] + + Q --> G[CLI Gateway
白名单 / 参数校验 / 重试计数] + A --> G + G --> T[事务 Sandbox
隔离的 workflow.json + CLI] + T --> C[Workflow CLI
changeset plan / apply] + C --> W[Workflow Core
Schema / Command / Validation] + + W --> P[WorkflowPlan
目标文档 / checksum / diagnostics] + P --> G + G --> V[服务端语义审查
无工具 Agent 回合] + V --> X{审查通过?} + X -->|否| L + X -->|是| D[ApplyWorkflowPlan
再次校验并原子应用] + D --> CANVAS[WorkflowDocument
映射到实际画布 / 保存] + CANVAS --> F[最终无工具 Agent 回合
向用户报告完成或失败] + F --> UI + + classDef user fill:#e8f1ff,stroke:#2f7df6,color:#102a56; + classDef agent fill:#fff4dc,stroke:#d88a00,color:#4d3000; + classDef boundary fill:#e9f8ef,stroke:#2f9e5b,color:#123d24; + classDef core fill:#f1eaff,stroke:#845ef7,color:#29134d; + classDef output fill:#e8faf8,stroke:#12a594,color:#073d38; + + class U,UI user; + class R,L,S,Q,A,V,F agent; + class G,T,C boundary; + class W,P core; + class D,CANVAS,X output; diff --git a/diagrams/workflow-builder-current-architecture.png b/diagrams/workflow-builder-current-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..25eaaed659a6b3067519db81c23a93083a4c1b38 GIT binary patch literal 101510 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 z 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用户Workflow Builder 聊天窗口Pro Workflow BuilderRunnerAgent Loop Core Agent + AgentPlan研究 SandboxSkill / 文档 / 用户文件workflow_cli_query只读查询workflow_cli_applyChangeSet 提交CLI Gateway白名单 / 参数校验 /重试计数事务 Sandbox隔离的 workflow.json + CLIWorkflow CLIchangeset plan / applyWorkflow CoreSchema / Command /ValidationWorkflowPlan目标文档 / checksum /diagnostics服务端语义审查无工具 Agent 回合审查通过?ApplyWorkflowPlan再次校验并原子应用WorkflowDocument映射到实际画布 / 保存最终无工具 Agent 回合向用户报告完成或失败 \ No newline at end of file diff --git a/package.json b/package.json index ba5ca06c8b01..15a9c2f27a53 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "prepare": "husky install", "gen:theme-typings": "chakra-cli tokens packages/web/styles/theme.ts --out node_modules/.pnpm/node_modules/@chakra-ui/styled-system/dist/theming.types.d.ts", "gen:deploy": "node ./deploy/init.mjs", - "postinstall": "pnpm gen:theme-typings && pnpm run build:sdks", + "postinstall": "pnpm gen:theme-typings && pnpm run build:sdks && pnpm run build:workflow-packages", "initIcon": "node ./scripts/icon/init.js && prettier --config \"./.prettierrc.js\" --write \"packages/web/components/common/Icon/constants.ts\"", "previewIcon": "node ./scripts/icon/index.js", "lint": "turbo run lint", @@ -29,7 +29,8 @@ "generate:i18n-loaders": "node scripts/generate-i18n-resource-loaders.mjs", "check:i18n-loaders": "node scripts/check-i18n-resource-loaders.mjs", "test:vector": "turbo run test:integration --filter=@fastgpt/service", - "build:sdks": "pnpm -r --filter @fastgpt-sdk/storage --filter @fastgpt-sdk/otel --filter @fastgpt-sdk/sandbox-adapter build" + "build:sdks": "pnpm -r --filter @fastgpt-sdk/storage --filter @fastgpt-sdk/otel --filter @fastgpt-sdk/sandbox-adapter build", + "build:workflow-packages": "pnpm --filter @fastgpt/workflow-core build && pnpm --filter @fastgpt/workflow-cli build" }, "devDependencies": { "@chakra-ui/cli": "^2.4.1", diff --git a/packages/global/common/system/types/index.ts b/packages/global/common/system/types/index.ts index 63420a0deb7b..580de9ff811c 100644 --- a/packages/global/common/system/types/index.ts +++ b/packages/global/common/system/types/index.ts @@ -92,6 +92,7 @@ export type FastGPTFeConfigsType = { show_publish_offiaccount?: boolean; show_publish_wechat?: boolean; show_agent_sandbox?: boolean; + show_workflow_builder?: boolean; pluginRemoteDebug?: boolean; enable_team_plugin_upload?: boolean; diff --git a/packages/global/core/workflow/builder/constants.ts b/packages/global/core/workflow/builder/constants.ts new file mode 100644 index 000000000000..63cf36d656e7 --- /dev/null +++ b/packages/global/core/workflow/builder/constants.ts @@ -0,0 +1,20 @@ +import type { AppChatConfigType } from '../../app/type'; + +/** + * Workflow Builder 的独立对话配置。 + * + * Builder 可以通过 WorkflowDocument 读取和修改原工作流的 chatConfig, + * 但其自身对话不得继承这些运行前置配置。 + */ +export const WORKFLOW_BUILDER_CHAT_CONFIG = { + fileSelectConfig: { + maxFiles: 0, + canSelectFile: false, + canSelectImg: false, + customPdfParse: false, + canSelectVideo: false, + canSelectAudio: false, + canSelectCustomFileExtension: false, + customFileExtensionList: [] + } +} satisfies AppChatConfigType; diff --git a/packages/global/core/workflow/runtime/constants.ts b/packages/global/core/workflow/runtime/constants.ts index bb5164a1e2a4..33714f0b1734 100644 --- a/packages/global/core/workflow/runtime/constants.ts +++ b/packages/global/core/workflow/runtime/constants.ts @@ -24,7 +24,10 @@ export enum SseResponseEventEnum { // Sandbox lifecycle sandboxStatus = 'sandboxStatus', // sandbox lifecycle phase notification - skillCall = 'skillCall' // skill invocation announce (when SKILL.md is loaded) + skillCall = 'skillCall', // skill invocation announce (when SKILL.md is loaded) + + // Workflow Builder + workflowBuilderApplied = 'workflowBuilderApplied' } export const StreamResumePhaseEvent = 'resumePhase'; diff --git a/packages/global/core/workflow/runtime/sse.ts b/packages/global/core/workflow/runtime/sse.ts index 97946855633c..03bc71fd63e2 100644 --- a/packages/global/core/workflow/runtime/sse.ts +++ b/packages/global/core/workflow/runtime/sse.ts @@ -6,6 +6,7 @@ import type { } from '../../chat/type'; import type { AgentPlanStatusType, AgentPlanType } from '../../ai/agent/type'; import type { WorkflowInteractiveResponseType } from '../template/system/interactive/type'; +import type { WorkflowBuilderApplied } from '../../../openapi/core/workflow/builder/api'; import { SseResponseEventEnum } from './constants'; import { textAdaptGptResponse } from './utils'; @@ -35,6 +36,7 @@ export type WorkflowSsePayloadMap = { [SseResponseEventEnum.planStatus]: { planStatus: AgentPlanStatusType }; [SseResponseEventEnum.sandboxStatus]: SandboxStatusItemType; [SseResponseEventEnum.skillCall]: { skill: SkillModuleResponseItemType }; + [SseResponseEventEnum.workflowBuilderApplied]: WorkflowBuilderApplied; }; export type WorkflowTypedSseEvent< @@ -148,6 +150,16 @@ export const workflowSseEvent = { }; }, + /** 输出经 CLI Apply 和 checksum 校验后的目标工作流文档。 */ + workflowBuilderApplied( + result: WorkflowBuilderApplied + ): WorkflowTypedSseEvent { + return { + event: SseResponseEventEnum.workflowBuilderApplied, + data: result + }; + }, + /** * 输出工作流节点运行状态,前端据此展示当前正在执行的节点名称。 */ diff --git a/packages/global/core/workflow/utils.ts b/packages/global/core/workflow/utils.ts index 25901932f693..ef9218ab8bc7 100644 --- a/packages/global/core/workflow/utils.ts +++ b/packages/global/core/workflow/utils.ts @@ -89,6 +89,90 @@ export const nodeInputIsReference = (input: FlowNodeInputItemType) => { return false; }; +const workflowReferenceSourceTypeMap: Record = { + [WorkflowIOValueTypeEnum.string]: [WorkflowIOValueTypeEnum.string], + [WorkflowIOValueTypeEnum.number]: [WorkflowIOValueTypeEnum.number], + [WorkflowIOValueTypeEnum.boolean]: [WorkflowIOValueTypeEnum.boolean], + [WorkflowIOValueTypeEnum.object]: [WorkflowIOValueTypeEnum.object], + [WorkflowIOValueTypeEnum.arrayString]: [ + WorkflowIOValueTypeEnum.string, + WorkflowIOValueTypeEnum.arrayString, + WorkflowIOValueTypeEnum.arrayAny + ], + [WorkflowIOValueTypeEnum.arrayNumber]: [ + WorkflowIOValueTypeEnum.number, + WorkflowIOValueTypeEnum.arrayNumber, + WorkflowIOValueTypeEnum.arrayAny + ], + [WorkflowIOValueTypeEnum.arrayBoolean]: [ + WorkflowIOValueTypeEnum.boolean, + WorkflowIOValueTypeEnum.arrayBoolean, + WorkflowIOValueTypeEnum.arrayAny + ], + [WorkflowIOValueTypeEnum.arrayObject]: [ + WorkflowIOValueTypeEnum.object, + WorkflowIOValueTypeEnum.arrayObject, + WorkflowIOValueTypeEnum.arrayAny, + WorkflowIOValueTypeEnum.chatHistory, + WorkflowIOValueTypeEnum.datasetQuote, + WorkflowIOValueTypeEnum.dynamic, + WorkflowIOValueTypeEnum.selectDataset, + WorkflowIOValueTypeEnum.selectApp + ], + [WorkflowIOValueTypeEnum.chatHistory]: [ + WorkflowIOValueTypeEnum.chatHistory, + WorkflowIOValueTypeEnum.arrayAny + ], + [WorkflowIOValueTypeEnum.datasetQuote]: [ + WorkflowIOValueTypeEnum.datasetQuote, + WorkflowIOValueTypeEnum.arrayAny + ], + [WorkflowIOValueTypeEnum.dynamic]: [ + WorkflowIOValueTypeEnum.dynamic, + WorkflowIOValueTypeEnum.arrayAny + ], + [WorkflowIOValueTypeEnum.selectDataset]: [ + WorkflowIOValueTypeEnum.selectDataset, + WorkflowIOValueTypeEnum.arrayAny + ], + [WorkflowIOValueTypeEnum.selectApp]: [ + WorkflowIOValueTypeEnum.selectApp, + WorkflowIOValueTypeEnum.arrayAny + ], + [WorkflowIOValueTypeEnum.arrayAny]: Object.values(WorkflowIOValueTypeEnum), + [WorkflowIOValueTypeEnum.any]: Object.values(WorkflowIOValueTypeEnum) +}; + +/** + * 返回 Web 引用选择器和 Workflow Core 共同接受的上游输出类型。 + * 数组输入允许引用同类型数组、通用数组或一个元素类型,运行时会按目标类型完成格式化。 + */ +export const getWorkflowReferenceSourceValueTypes = ( + expected?: string +): WorkflowIOValueTypeEnum[] => { + if (expected === undefined) return Object.values(WorkflowIOValueTypeEnum); + const acceptedTypes = workflowReferenceSourceTypeMap[expected as WorkflowIOValueTypeEnum] ?? []; + return [...new Set([...acceptedTypes, WorkflowIOValueTypeEnum.any])]; +}; + +/** 判断一个上游输出类型能否作为目标输入的完整引用值。 */ +export const areWorkflowValueTypesCompatible = ({ + expected, + actual +}: { + expected?: string; + actual?: string; +}) => { + if (expected === undefined || actual === undefined || actual === WorkflowIOValueTypeEnum.any) { + return true; + } + return getWorkflowReferenceSourceValueTypes(expected).includes(actual as WorkflowIOValueTypeEnum); +}; + +/* node */ +export const getGuideModule = (nodes: StoreNodeItemType[]) => + nodes.find((item) => item.flowNodeType === FlowNodeTypeEnum.systemConfig); + /** 判断 App 工作流是否有 Agent 或 ToolCall 节点开启 Sandbox。 */ export const isAppSandboxEnabledInNodes = (nodes: StoreNodeItemType[]) => nodes.some( diff --git a/packages/global/openapi/core/workflow/builder/api.ts b/packages/global/openapi/core/workflow/builder/api.ts new file mode 100644 index 000000000000..e1a5f07d83be --- /dev/null +++ b/packages/global/openapi/core/workflow/builder/api.ts @@ -0,0 +1,121 @@ +import { z } from 'zod'; +import { AppChatConfigTypeSchema } from '../../../../core/app/type'; +import { ChatCompletionMessageParamSchema } from '../../../../core/ai/llm/type'; +import { StoreNodeItemTypeSchema } from '../../../../core/workflow/type/node'; +import { ObjectIdSchema } from '../../../../common/type/mongo'; + +/* ============================================================================ + * API: Workflow Builder 辅助生成对话 + * Route: POST /api/proApi/core/workflow/builder/chat + * Method: POST + * Description: 基于当前 WorkflowDocument 生成并自动应用工作流,通过 SSE 返回目标文档 + * Tags: ['Workflow Builder'] + * ============================================================================ */ + +const WorkflowChecksumSchema = z + .string() + .regex(/^sha256:[a-f0-9]{64}$/) + .meta({ + description: 'WorkflowDocument 的 SHA-256 checksum', + example: `sha256:${'0'.repeat(64)}` + }); + +const ExecutionSourcePortRefSchema = z.discriminatedUnion('kind', [ + z.object({ kind: z.literal('next'), nodeId: z.string().min(1) }), + z.object({ + kind: z.literal('branch'), + nodeId: z.string().min(1), + branchKey: z.string().min(1) + }), + z.object({ + kind: z.literal('sourceOutput'), + nodeId: z.string().min(1), + outputKey: z.string().min(1) + }), + z.object({ kind: z.literal('catch'), nodeId: z.string().min(1) }), + z.object({ kind: z.literal('selectedTools'), nodeId: z.string().min(1) }) +]); + +const ExecutionTargetPortRefSchema = z.discriminatedUnion('kind', [ + z.object({ kind: z.literal('target'), nodeId: z.string().min(1) }), + z.object({ kind: z.literal('selectedTools'), nodeId: z.string().min(1) }) +]); + +/** + * Workflow Builder 请求的传输层 Document Schema。 + * + * Handler 还会用 workflow-core 再次执行版本和领域校验;这里只负责 API + * 边界的完整结构约束,避免 global package 反向依赖 workflow-core。 + */ +export const WorkflowBuilderDocumentSchema = z + .object({ + schemaVersion: z.literal('fastgpt-workflow/v1').meta({ + description: 'WorkflowDocument schema 版本', + example: 'fastgpt-workflow/v1' + }), + app: z + .object({ + appId: z.string().optional(), + name: z.string().optional(), + intro: z.string().optional(), + appType: z.string().optional(), + baseVersionId: z.string().optional() + }) + .meta({ description: '应用元数据' }), + nodes: z.array(StoreNodeItemTypeSchema).meta({ description: '工作流节点' }), + executionEdges: z + .array( + z.object({ + source: ExecutionSourcePortRefSchema, + target: ExecutionTargetPortRefSchema + }) + ) + .meta({ description: '语义执行边' }), + chatConfig: AppChatConfigTypeSchema.meta({ description: '工作流对话配置' }) + }) + .strict(); + +export const WorkflowBuilderChatBodySchema = z + .object({ + appId: ObjectIdSchema.meta({ + description: '当前 Workflow 应用 ID', + example: '67f4c91c79a4d61b1f116b2a' + }), + chatId: z.string().min(1).meta({ + description: 'Workflow Builder 独立会话 ID', + example: 'workflow-builder-chat-id' + }), + responseChatItemId: z.string().min(1).optional().meta({ + description: '当前轮 AI 消息 ID', + example: 'response-chat-item-id' + }), + messages: z.array(ChatCompletionMessageParamSchema).min(1).meta({ + description: '当前轮 ChatBox 消息' + }), + model: z.string().min(1).optional().meta({ + description: 'Workflow Builder 使用的 LLM 模型', + example: 'gpt-5' + }), + workflowContext: z + .object({ + document: WorkflowBuilderDocumentSchema, + checksum: WorkflowChecksumSchema + }) + .strict() + .meta({ description: '当前画布事实和对应 checksum' }) + }) + .strict(); + +export type WorkflowBuilderChatBody = z.infer; + +/** CLI Apply 完成后通过 SSE 返回给画布的目标文档。 */ +export const WorkflowBuilderAppliedSchema = z + .object({ + document: WorkflowBuilderDocumentSchema.meta({ + description: 'CLI Apply 后经服务端校验的目标 WorkflowDocument' + }), + checksum: WorkflowChecksumSchema.meta({ description: '目标 WorkflowDocument checksum' }) + }) + .strict(); + +export type WorkflowBuilderApplied = z.infer; diff --git a/packages/global/openapi/core/workflow/builder/index.ts b/packages/global/openapi/core/workflow/builder/index.ts new file mode 100644 index 000000000000..b2e68da3b620 --- /dev/null +++ b/packages/global/openapi/core/workflow/builder/index.ts @@ -0,0 +1,33 @@ +import type { OpenAPIPath } from '../../../type'; +import { DevApiTagsMap } from '../../../tag'; +import { WorkflowBuilderChatBodySchema } from './api'; + +export const WorkflowBuilderPath: OpenAPIPath = { + '/core/workflow/builder/chat': { + post: { + summary: 'Workflow Builder 辅助生成对话', + description: + '基于当前 WorkflowDocument 运行 Agent + CLI,自动应用经服务端验证的变更,并通过 SSE 返回目标文档。', + tags: [DevApiTagsMap.workflowBuilder], + requestBody: { + content: { + 'application/json': { + schema: WorkflowBuilderChatBodySchema + } + } + }, + responses: { + 200: { + description: '返回 text/event-stream Workflow Builder 事件流', + content: { + 'text/event-stream': { + schema: { + type: 'string' + } + } + } + } + } + } + } +}; diff --git a/packages/global/openapi/path.ts b/packages/global/openapi/path.ts index 33858980e709..9d9a9492c96a 100644 --- a/packages/global/openapi/path.ts +++ b/packages/global/openapi/path.ts @@ -1,5 +1,6 @@ import { AIPath } from './core/ai'; import { SkillPath } from './core/ai/skill'; +import { WorkflowBuilderPath } from './core/workflow/builder'; import { AppPath } from './core/app'; import { ChatPath } from './core/chat'; import { DatasetPath } from './core/dataset'; @@ -23,7 +24,8 @@ export const openAPIPaths: NonNullable = { ...CommonPath, ...InvokePath, ...AIPath, - ...SkillPath + ...SkillPath, + ...WorkflowBuilderPath }; export const openAPITagGroups = [ @@ -153,6 +155,10 @@ export const openAPITagGroups = [ { name: '管理员-插件管理', tags: [DevApiTagsMap.pluginAdmin, DevApiTagsMap.pluginToolAdmin] + }, + { + name: '系统接口', + tags: [DevApiTagsMap.chatAgentHelper, DevApiTagsMap.workflowBuilder] } ]; diff --git a/packages/global/openapi/tag.ts b/packages/global/openapi/tag.ts index a1af95af43b5..7c972e51aef2 100644 --- a/packages/global/openapi/tag.ts +++ b/packages/global/openapi/tag.ts @@ -80,6 +80,8 @@ export const DevApiTagsMap = { commonFile: '文件管理', commonSystem: '系统接口', commonOther: '基础功能其他', + chatAgentHelper: 'Chat Agent 辅助生成', + workflowBuilder: 'Workflow Builder', /* 通用-反向调用 */ reverseInvokePlugin: '插件', diff --git a/packages/global/test/core/workflow/utils.test.ts b/packages/global/test/core/workflow/utils.test.ts index 740e4d2deec6..bba6dfa2b3d0 100644 --- a/packages/global/test/core/workflow/utils.test.ts +++ b/packages/global/test/core/workflow/utils.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it } from 'vitest'; import { + areWorkflowValueTypesCompatible, + getWorkflowReferenceSourceValueTypes, getHandleId, getSelectedInputRenderType, nodeInputIsReference, @@ -268,6 +270,405 @@ describe('nodeInputIsReference', () => { }); }); +describe('workflow reference value type compatibility', () => { + it('matches the reference selector contract for scalar, array and special values', () => { + expect(getWorkflowReferenceSourceValueTypes(WorkflowIOValueTypeEnum.arrayString)).toEqual([ + WorkflowIOValueTypeEnum.string, + WorkflowIOValueTypeEnum.arrayString, + WorkflowIOValueTypeEnum.arrayAny, + WorkflowIOValueTypeEnum.any + ]); + expect( + areWorkflowValueTypesCompatible({ + expected: WorkflowIOValueTypeEnum.arrayString, + actual: WorkflowIOValueTypeEnum.string + }) + ).toBe(true); + expect( + areWorkflowValueTypesCompatible({ + expected: WorkflowIOValueTypeEnum.arrayObject, + actual: WorkflowIOValueTypeEnum.datasetQuote + }) + ).toBe(true); + expect( + areWorkflowValueTypesCompatible({ + expected: WorkflowIOValueTypeEnum.string, + actual: WorkflowIOValueTypeEnum.arrayString + }) + ).toBe(false); + }); +}); + +describe('getGuideModule', () => { + it('should find systemConfig node', () => { + const nodes: StoreNodeItemType[] = [ + { + nodeId: 'node1', + flowNodeType: FlowNodeTypeEnum.systemConfig, + name: 'System Config', + inputs: [], + outputs: [] + }, + { + nodeId: 'node2', + flowNodeType: FlowNodeTypeEnum.chatNode, + name: 'Chat', + inputs: [], + outputs: [] + } + ]; + const result = getGuideModule(nodes); + expect(result?.nodeId).toBe('node1'); + }); + + it('should return undefined when no systemConfig node exists', () => { + const nodes: StoreNodeItemType[] = [ + { + nodeId: 'node1', + flowNodeType: FlowNodeTypeEnum.chatNode, + name: 'Chat', + inputs: [], + outputs: [] + } + ]; + const result = getGuideModule(nodes); + expect(result).toBeUndefined(); + }); + + it('should handle empty nodes array', () => { + const result = getGuideModule([]); + expect(result).toBeUndefined(); + }); +}); + +describe('splitGuideModule', () => { + it('should return default values when guideModules is undefined', () => { + const result = splitGuideModule(undefined); + expect(result.welcomeText).toBe(''); + expect(result.variables).toEqual([]); + expect(result.questionGuide).toEqual(defaultQGConfig); + expect(result.ttsConfig).toEqual(defaultTTSConfig); + expect(result.whisperConfig).toEqual(defaultWhisperConfig); + expect(result.scheduledTriggerConfig).toBeUndefined(); + expect(result.chatInputGuide).toEqual(defaultChatInputGuideConfig); + expect(result.instruction).toBe(''); + expect(result.autoExecute).toEqual(defaultAutoExecuteConfig); + }); + + it('should extract welcomeText from inputs', () => { + const guideModule: StoreNodeItemType = { + nodeId: 'guide', + flowNodeType: FlowNodeTypeEnum.systemConfig, + name: 'Guide', + inputs: [ + { + key: NodeInputKeyEnum.welcomeText, + label: 'Welcome', + value: 'Hello World', + renderTypeList: [FlowNodeInputTypeEnum.input] + } + ], + outputs: [] + }; + const result = splitGuideModule(guideModule); + expect(result.welcomeText).toBe('Hello World'); + }); + + it('should extract welcomeQuestions from inputs', () => { + const guideModule: StoreNodeItemType = { + nodeId: 'guide', + flowNodeType: FlowNodeTypeEnum.systemConfig, + name: 'Guide', + inputs: [ + { + key: NodeInputKeyEnum.welcomeQuestions, + label: 'Welcome Questions', + value: ['Question 1'], + renderTypeList: [FlowNodeInputTypeEnum.input] + } + ], + outputs: [] + }; + const result = splitGuideModule(guideModule); + expect(result.welcomeQuestions).toEqual(['Question 1']); + }); + + it('should extract variables from inputs', () => { + const variables = [{ key: 'var1', label: 'Variable 1', type: VariableInputEnum.input }]; + const guideModule: StoreNodeItemType = { + nodeId: 'guide', + flowNodeType: FlowNodeTypeEnum.systemConfig, + name: 'Guide', + inputs: [ + { + key: NodeInputKeyEnum.variables, + label: 'Variables', + value: variables, + renderTypeList: [FlowNodeInputTypeEnum.hidden] + } + ], + outputs: [] + }; + const result = splitGuideModule(guideModule); + expect(result.variables).toEqual(variables); + }); + + it('should adapt old boolean questionGuide format', () => { + const guideModule: StoreNodeItemType = { + nodeId: 'guide', + flowNodeType: FlowNodeTypeEnum.systemConfig, + name: 'Guide', + inputs: [ + { + key: NodeInputKeyEnum.questionGuide, + label: 'Question Guide', + value: true, + renderTypeList: [FlowNodeInputTypeEnum.switch] + } + ], + outputs: [] + }; + const result = splitGuideModule(guideModule); + expect(result.questionGuide.open).toBe(true); + }); + + it('should use new questionGuide object format', () => { + const questionGuideConfig = { open: true, model: 'gpt-4', customPrompt: 'test' }; + const guideModule: StoreNodeItemType = { + nodeId: 'guide', + flowNodeType: FlowNodeTypeEnum.systemConfig, + name: 'Guide', + inputs: [ + { + key: NodeInputKeyEnum.questionGuide, + label: 'Question Guide', + value: questionGuideConfig, + renderTypeList: [FlowNodeInputTypeEnum.hidden] + } + ], + outputs: [] + }; + const result = splitGuideModule(guideModule); + expect(result.questionGuide).toEqual(questionGuideConfig); + }); + + it('should extract ttsConfig from inputs', () => { + const ttsConfig = { type: 'edge' as const }; + const guideModule: StoreNodeItemType = { + nodeId: 'guide', + flowNodeType: FlowNodeTypeEnum.systemConfig, + name: 'Guide', + inputs: [ + { + key: NodeInputKeyEnum.tts, + label: 'TTS', + value: ttsConfig, + renderTypeList: [FlowNodeInputTypeEnum.hidden] + } + ], + outputs: [] + }; + const result = splitGuideModule(guideModule); + expect(result.ttsConfig).toEqual(ttsConfig); + }); + + it('should extract instruction from inputs', () => { + const guideModule: StoreNodeItemType = { + nodeId: 'guide', + flowNodeType: FlowNodeTypeEnum.systemConfig, + name: 'Guide', + inputs: [ + { + key: NodeInputKeyEnum.instruction, + label: 'Instruction', + value: 'Test instruction', + renderTypeList: [FlowNodeInputTypeEnum.textarea] + } + ], + outputs: [] + }; + const result = splitGuideModule(guideModule); + expect(result.instruction).toBe('Test instruction'); + }); +}); + +describe('normalizeWorkflowConfig', () => { + const createSystemConfigNode = ( + inputs: Array<[NodeInputKeyEnum, unknown]> = [], + nodeId = 'system' + ): StoreNodeItemType => ({ + nodeId, + flowNodeType: FlowNodeTypeEnum.systemConfig, + name: 'System config', + inputs: inputs.map(([key, value]) => ({ + key, + label: key, + value, + renderTypeList: [FlowNodeInputTypeEnum.hidden] + })), + outputs: [] + }); + + const legacyInputs: Array<[NodeInputKeyEnum, unknown]> = [ + [NodeInputKeyEnum.welcomeText, 'Legacy welcome'], + [NodeInputKeyEnum.welcomeQuestions, ['Legacy question']], + [ + NodeInputKeyEnum.variables, + [{ key: 'legacy', label: 'Legacy', type: VariableInputEnum.input }] + ], + [NodeInputKeyEnum.questionGuide, true], + [NodeInputKeyEnum.tts, { type: 'web' }], + [NodeInputKeyEnum.whisper, { open: true, autoSend: true, autoTTSResponse: false }], + [ + NodeInputKeyEnum.scheduleTrigger, + { cronString: '0 0 * * *', timezone: 'UTC', defaultPrompt: 'Run' } + ], + [NodeInputKeyEnum.chatInputGuide, { open: true, customUrl: 'https://example.com' }], + [NodeInputKeyEnum.autoExecute, { open: true, defaultPrompt: 'Run automatically' }], + [NodeInputKeyEnum.instruction, 'Legacy instruction'] + ]; + + it('should migrate every legacy system config field into chatConfig', () => { + const result = normalizeWorkflowConfig({ + nodes: [createSystemConfigNode(legacyInputs)] + }); + + expect(result.nodes).toEqual([]); + expect(result.chatConfig).toMatchObject({ + welcomeText: 'Legacy welcome', + welcomeConfig: { + welcomeText: 'Legacy welcome', + welcomeQuestions: ['Legacy question'] + }, + variables: [{ key: 'legacy', label: 'Legacy', type: VariableInputEnum.input }], + questionGuide: { ...defaultQGConfig, open: true }, + ttsConfig: { type: 'web' }, + whisperConfig: { open: true, autoSend: true, autoTTSResponse: false }, + scheduledTriggerConfig: { + cronString: '0 0 * * *', + timezone: 'UTC', + defaultPrompt: 'Run' + }, + chatInputGuide: { open: true, customUrl: 'https://example.com' }, + autoExecute: { open: true, defaultPrompt: 'Run automatically' }, + instruction: 'Legacy instruction' + }); + }); + + it('should move workflow tool config instruction into chatConfig', () => { + const pluginConfigNode: StoreNodeItemType = { + ...createSystemConfigNode( + [[NodeInputKeyEnum.instruction, 'Plugin instruction']], + 'plugin-config' + ), + flowNodeType: FlowNodeTypeEnum.pluginConfig + }; + + const result = normalizeWorkflowConfig({ + nodes: [pluginConfigNode], + chatConfig: {} + }); + + expect(result.nodes).toEqual([]); + expect(result.chatConfig.instruction).toBe('Plugin instruction'); + }); + + it('should preserve explicit current values instead of overwriting them', () => { + const result = normalizeWorkflowConfig({ + nodes: [createSystemConfigNode(legacyInputs)], + chatConfig: { + welcomeConfig: { + welcomeText: '', + welcomeQuestions: [] + }, + variables: [], + questionGuide: { open: false }, + scheduledTriggerConfig: { + cronString: '0 9 * * *', + timezone: 'Asia/Shanghai', + defaultPrompt: '' + }, + instruction: '' + } + }); + + expect(result.chatConfig.welcomeConfig).toEqual({ + welcomeText: '', + welcomeQuestions: [] + }); + expect(result.chatConfig.welcomeText).toBe(''); + expect(result.chatConfig.variables).toEqual([]); + expect(result.chatConfig.questionGuide).toEqual({ open: false }); + expect(result.chatConfig.scheduledTriggerConfig).toEqual({ + cronString: '0 9 * * *', + timezone: 'Asia/Shanghai', + defaultPrompt: '' + }); + expect(result.chatConfig.instruction).toBe(''); + }); + + it('should remove all system config nodes and their connected edges', () => { + const nodes: StoreNodeItemType[] = [ + createSystemConfigNode([], 'system-1'), + createSystemConfigNode([], 'system-2'), + { + nodeId: 'chat', + flowNodeType: FlowNodeTypeEnum.chatNode, + name: 'Chat', + inputs: [], + outputs: [] + } + ]; + + const edges = [ + { + source: 'system-1', + sourceHandle: 'system-1-source-right', + target: 'chat', + targetHandle: 'chat-target-left' + }, + { + source: 'chat', + sourceHandle: 'chat-source-right', + target: 'system-2', + targetHandle: 'system-2-target-left' + }, + { + source: 'chat', + sourceHandle: 'chat-source-right', + target: 'answer', + targetHandle: 'answer-target-left' + } + ]; + + const result = normalizeWorkflowConfig({ nodes, edges }); + + expect(result.nodes).toEqual([nodes[2]]); + expect(result.edges).toEqual([edges[2]]); + }); + + it('should be pure and idempotent', () => { + const systemConfigNode = createSystemConfigNode([ + [NodeInputKeyEnum.welcomeText, 'Legacy welcome'] + ]); + const nodes = [systemConfigNode]; + const chatConfig = { + welcomeConfig: { + welcomeQuestions: ['Current question'] + } + }; + const first = normalizeWorkflowConfig({ nodes, chatConfig }); + + expect(normalizeWorkflowConfig(first)).toEqual(first); + expect(nodes).toEqual([systemConfigNode]); + expect(chatConfig).toEqual({ + welcomeConfig: { + welcomeQuestions: ['Current question'] + } + }); + }); +}); + describe('getAppChatConfig', () => { it('should return config with default values when no params provided', () => { const result = getAppChatConfig({ isPublicFetch: false }); diff --git a/packages/service/core/ai/llm/agentLoop/domain/runtime.ts b/packages/service/core/ai/llm/agentLoop/domain/runtime.ts index f863dee0780a..ed8713514ada 100644 --- a/packages/service/core/ai/llm/agentLoop/domain/runtime.ts +++ b/packages/service/core/ai/llm/agentLoop/domain/runtime.ts @@ -50,3 +50,16 @@ export type AgentLoopRuntime = { usagePush?: (usages: AgentLoopUsage[]) => void; emitEvent?: (event: AgentLoopEvent) => void; }; + +/** + * 判断 Agent 是否拥有能执行实际业务动作的工具。 + * ask/plan 只负责交互和状态维护,不应让主提示词误认为可以执行外部任务。 + */ +export const hasAgentLoopExecutableTools = ({ + toolCatalog, + systemTools +}: Pick) => + toolCatalog.runtimeTools.length > 0 || + systemTools?.sandbox?.enabled === true || + systemTools?.readFile?.enabled === true || + systemTools?.datasetSearch?.enabled === true; diff --git a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/index.ts b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/index.ts index 992b7fe7f870..427837cea44b 100644 --- a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/index.ts +++ b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/index.ts @@ -1,10 +1,11 @@ import { runFastAgentMainLoop } from './loop'; -import type { - AgentLoopInput, - AgentLoopProvider, - AgentLoopResult, - AgentLoopRuntime, - AgentLoopUsage +import { + hasAgentLoopExecutableTools, + type AgentLoopInput, + type AgentLoopProvider, + type AgentLoopResult, + type AgentLoopRuntime, + type AgentLoopUsage } from '../../domain'; import type { AgentLoopRuntime as FastAgentInternalRuntime } from './loop/type'; import { createAskUserAgentTool } from '../../domain/systemTool/ask'; @@ -80,6 +81,7 @@ export const runFastAgentLoop = async ({ useVideo: runtime.llmParams.useVideo, extractFiles: runtime.llmParams.extractFiles, lang: runtime.lang, + hasExecutableTools: hasAgentLoopExecutableTools(runtime), maxRunAgentTimes: runtime.maxRunAgentTimes, batchToolSize: runtime.toolCatalog.batchToolSize, checkIsStopping: runtime.checkIsStopping, diff --git a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/type.ts b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/type.ts index d290ae7f01d5..0e266480c9cf 100644 --- a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/type.ts +++ b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/type.ts @@ -46,6 +46,7 @@ export type AgentLoopRuntime = { useVideo?: boolean; extractFiles?: boolean; lang?: localeType; + hasExecutableTools: boolean; maxRunAgentTimes?: number; batchToolSize?: number; checkIsStopping?: () => boolean; diff --git a/packages/service/core/workflow/dispatch/ai/agent/sub/sandbox/index.ts b/packages/service/core/workflow/dispatch/ai/agent/sub/sandbox/index.ts index 0f4bf50c9665..8da1cafc70af 100644 --- a/packages/service/core/workflow/dispatch/ai/agent/sub/sandbox/index.ts +++ b/packages/service/core/workflow/dispatch/ai/agent/sub/sandbox/index.ts @@ -1,5 +1,6 @@ export { createBuiltinSkillPrepareAction, ensureAgentSandboxRuntime, - type AgentSandboxPrepareAction + type AgentSandboxPrepareAction, + type AgentSandboxPrepareContext } from './prepare'; diff --git a/packages/service/test/core/ai/llm/agentLoop/fastAgentProvider.test.ts b/packages/service/test/core/ai/llm/agentLoop/fastAgentProvider.test.ts index 8801c188819b..be9a3c8e278d 100644 --- a/packages/service/test/core/ai/llm/agentLoop/fastAgentProvider.test.ts +++ b/packages/service/test/core/ai/llm/agentLoop/fastAgentProvider.test.ts @@ -207,6 +207,46 @@ describe('runFastAgentLoop', () => { expect(toolNames.some((name: string) => name.startsWith('sandbox_'))).toBe(true); }); + it('does not disable executable tools for a sandbox-only runtime', async () => { + mockCreateLLMResponseQueue(createLLMResponseMock, [ + text({ + requestId: 'req_sandbox_only', + content: 'direct answer' + }) + ]); + + await runFastAgentLoop({ + input: { + messages: [ + { + role: ChatCompletionRequestMessageRoleEnum.User, + content: 'inspect workspace' + } + ], + systemPrompt: 'Sandbox is available.' + }, + runtime: createRuntime({ + toolCatalog: { + runtimeTools: [] + }, + systemTools: { + sandbox: { + enabled: true, + client: {} as any + } + } + }) + }); + + const systemMessage = createLLMResponseMock.mock.calls[0][0].body.messages.find( + (message: { role: string }) => message.role === ChatCompletionRequestMessageRoleEnum.System + ); + expect(systemMessage.content).toContain( + '\nSandbox is available.\n' + ); + expect(systemMessage.content).not.toContain(''); + }); + it('initializes runtime plan from history without changing request messages', async () => { const activePlan = { planId: 'plan_resume', diff --git a/packages/service/test/core/ai/llm/agentLoop/piAgentProvider.test.ts b/packages/service/test/core/ai/llm/agentLoop/piAgentProvider.test.ts index eb865feba690..1f9947925aa4 100644 --- a/packages/service/test/core/ai/llm/agentLoop/piAgentProvider.test.ts +++ b/packages/service/test/core/ai/llm/agentLoop/piAgentProvider.test.ts @@ -646,6 +646,44 @@ describe('runPiAgentLoop', () => { ]); }); + it('does not disable executable tools for a sandbox-only runtime', async () => { + await runPiAgentLoop({ + input: { + messages: [{ role: 'user', content: 'inspect workspace' }], + systemPrompt: 'Sandbox is available.' + }, + runtime: { + teamId: 'team_1', + llmParams: { + model: 'gpt-5' + }, + systemTools: { + sandbox: { + enabled: true, + client: {} as any + } + }, + toolCatalog: { + runtimeTools: [] + }, + executeTool: vi.fn(), + checkIsStopping: vi.fn(() => false) + } + }); + + expect(agentConstructorArgs.at(-1).initialState.systemPrompt).toContain( + '\nSandbox is available.\n' + ); + expect(agentConstructorArgs.at(-1).initialState.systemPrompt).not.toContain( + '' + ); + expect( + agentConstructorArgs + .at(-1) + .initialState.tools.some((tool: { name: string }) => tool.name === 'sandbox_read_file') + ).toBe(true); + }); + it('emits one successful plan operation with the complete plan', async () => { const events: any[] = []; agentToolToExecute.value = { diff --git a/packages/service/test/core/ai/llm/agentLoop/runtime.test.ts b/packages/service/test/core/ai/llm/agentLoop/runtime.test.ts new file mode 100644 index 000000000000..14b9f8a3fd31 --- /dev/null +++ b/packages/service/test/core/ai/llm/agentLoop/runtime.test.ts @@ -0,0 +1,76 @@ +import { describe, expect, it, vi } from 'vitest'; +import { + hasAgentLoopExecutableTools, + type AgentLoopRuntime +} from '@fastgpt/service/core/ai/llm/agentLoop/interface'; + +const createRuntime = ( + overrides?: Pick +): Pick => ({ + toolCatalog: { + runtimeTools: [] + }, + ...overrides +}); + +describe('hasAgentLoopExecutableTools', () => { + it('recognizes business and executable system tools', () => { + expect( + hasAgentLoopExecutableTools( + createRuntime({ + toolCatalog: { + runtimeTools: [ + { + type: 'function', + function: { + name: 'search', + description: 'Search', + parameters: {} + } + } + ] + } + }) + ) + ).toBe(true); + expect( + hasAgentLoopExecutableTools( + createRuntime({ + toolCatalog: { runtimeTools: [] }, + systemTools: { sandbox: { enabled: true, client: {} as any } } + }) + ) + ).toBe(true); + expect( + hasAgentLoopExecutableTools( + createRuntime({ + toolCatalog: { runtimeTools: [] }, + systemTools: { readFile: { enabled: true, execute: vi.fn() } } + }) + ) + ).toBe(true); + expect( + hasAgentLoopExecutableTools( + createRuntime({ + toolCatalog: { runtimeTools: [] }, + systemTools: { datasetSearch: { enabled: true, execute: vi.fn() } } + }) + ) + ).toBe(true); + }); + + it('does not treat plan and ask controls as executable tools', () => { + expect( + hasAgentLoopExecutableTools( + createRuntime({ + toolCatalog: { runtimeTools: [] }, + systemTools: { + plan: { enabled: true }, + ask: { enabled: true } + } + }) + ) + ).toBe(false); + expect(hasAgentLoopExecutableTools(createRuntime())).toBe(false); + }); +}); diff --git a/packages/web/i18n/en/workflow.json b/packages/web/i18n/en/workflow.json index fd568e5d95d5..7ea3a528ad26 100644 --- a/packages/web/i18n/en/workflow.json +++ b/packages/web/i18n/en/workflow.json @@ -279,5 +279,11 @@ "workflow_local_draft_auth_expired_title": "Automatically saved", "workflow_local_draft_relogin": "Sign in again", "workflow.exit_tips": "Your changes have not been saved. 'Exit directly' will not save your edits.", + "workflow_builder_title": "Workflow Builder", + "workflow_builder_collapse": "Collapse", + "workflow_builder_clear_history": "Clear history", + "workflow_builder_clear_history_confirm": "Clear this Workflow Builder conversation? The workflow canvas and model selection will not be changed.", + "workflow_builder_apply_failed": "The generated workflow could not be applied", + "workflow_builder_applied": "Applied to the current canvas", "connection_invalid": "This connection violates workflow rules" } diff --git a/packages/web/i18n/zh-CN/workflow.json b/packages/web/i18n/zh-CN/workflow.json index 6220dbc2d85f..a0e7da120d91 100644 --- a/packages/web/i18n/zh-CN/workflow.json +++ b/packages/web/i18n/zh-CN/workflow.json @@ -279,5 +279,11 @@ "workflow_local_draft_auth_expired_title": "已自动保存", "workflow_local_draft_relogin": "重新登录", "workflow.exit_tips": "您的更改尚未保存,「直接退出」将不会保存您的编辑记录。", + "workflow_builder_title": "Workflow Builder", + "workflow_builder_collapse": "收起", + "workflow_builder_clear_history": "清除历史记录", + "workflow_builder_clear_history_confirm": "确认清除当前 Workflow Builder 对话?工作流画布和模型选择不会受到影响。", + "workflow_builder_apply_failed": "无法应用生成的工作流", + "workflow_builder_applied": "已应用到当前画布", "connection_invalid": "该连接不符合工作流规则" } diff --git a/packages/web/i18n/zh-Hant/workflow.json b/packages/web/i18n/zh-Hant/workflow.json index 88614df2a410..a8940fdd1154 100644 --- a/packages/web/i18n/zh-Hant/workflow.json +++ b/packages/web/i18n/zh-Hant/workflow.json @@ -279,5 +279,11 @@ "workflow_local_draft_auth_expired_title": "已自動儲存", "workflow_local_draft_relogin": "重新登入", "workflow.exit_tips": "您的變更尚未儲存,「直接結束」將不會儲存您的編輯紀錄。", + "workflow_builder_title": "Workflow Builder", + "workflow_builder_collapse": "收起", + "workflow_builder_clear_history": "清除歷史記錄", + "workflow_builder_clear_history_confirm": "確認清除目前的 Workflow Builder 對話?工作流程畫布和模型選擇不會受到影響。", + "workflow_builder_apply_failed": "無法套用產生的工作流程", + "workflow_builder_applied": "已套用到目前畫布", "connection_invalid": "此連線不符合工作流程規則" } diff --git a/packages/workflow-cli/package.json b/packages/workflow-cli/package.json index 8e3585f55a2f..f2dc5f84aae1 100644 --- a/packages/workflow-cli/package.json +++ b/packages/workflow-cli/package.json @@ -1,6 +1,6 @@ { "name": "@fastgpt/workflow-cli", - "version": "0.1.0", + "version": "0.2.0-beta.2", "private": true, "type": "module", "main": "./dist/index.js", @@ -20,14 +20,14 @@ "build": "tsdown", "test": "vitest run --config ./vitest.config.ts", "test:bin": "pnpm --filter @fastgpt/workflow-core build && pnpm build && node test/bin-smoke.mjs", + "test:package": "pnpm test:bin && node test/package-smoke.mjs", + "test:ci": "pnpm typecheck && pnpm test && pnpm test:package", "typecheck": "tsc --noEmit" }, - "dependencies": { + "devDependencies": { "@fastgpt/web": "workspace:*", "@fastgpt/workflow-core": "workspace:*", - "zod": "catalog:" - }, - "devDependencies": { + "zod": "catalog:", "@types/node": "catalog:", "tsdown": "catalog:", "typescript": "catalog:", diff --git a/packages/workflow-cli/src/commands/changeSet.ts b/packages/workflow-cli/src/commands/changeSet.ts new file mode 100644 index 000000000000..25d40b3dc101 --- /dev/null +++ b/packages/workflow-cli/src/commands/changeSet.ts @@ -0,0 +1,233 @@ +import { + WorkflowChangeSetSchema, + WorkflowCommandError, + WorkflowPlanSchema, + WorkflowValidationError, + builtinTemplateProvider, + getWorkflowChecksum, + planWorkflowChangeSet, + type WorkflowDocument, + type WorkflowPlan +} from '@fastgpt/workflow-core'; +import { readFile } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { CliArgumentError } from '../error'; +import { createTranslator } from '../i18n'; +import { readWorkflowFile, writeJsonFileAtomic, writeWorkflowFileAtomic } from '../io/workflowFile'; +import type { CliAuditEvent, CliContext, CliResult } from '../type'; +import { requireString } from './helpers'; + +const readJsonInput = async ({ + source, + context, + label +}: { + source: string; + context: CliContext; + label: string; +}) => { + const content = + source === '-' + ? await context.readStdin() + : await readFile(resolve(context.cwd, source), 'utf8'); + try { + return JSON.parse(content) as unknown; + } catch { + throw new CliArgumentError(`${label} must contain valid JSON`); + } +}; + +const getChangedNodeIds = (plan: WorkflowPlan) => [ + ...new Set(plan.changes.flatMap((change) => (change.nodeId ? [change.nodeId] : []))) +]; + +const getChangedEdgeCount = (base: WorkflowDocument, target: WorkflowDocument) => { + const baseEdges = new Set(base.executionEdges.map((edge) => JSON.stringify(edge))); + const targetEdges = new Set(target.executionEdges.map((edge) => JSON.stringify(edge))); + return ( + [...baseEdges].filter((edge) => !targetEdges.has(edge)).length + + [...targetEdges].filter((edge) => !baseEdges.has(edge)).length + ); +}; + +const createDependencies = (context: CliContext) => ({ + templateProvider: builtinTemplateProvider, + locale: context.locale, + translate: createTranslator(context.locale) +}); + +const createAuditEvent = ({ + command, + document, + targetDocument, + plan, + startedAt +}: { + command: string; + document: WorkflowDocument; + targetDocument: WorkflowDocument; + plan: WorkflowPlan; + startedAt: number; +}): CliAuditEvent => ({ + command, + appId: document.app.appId, + baseChecksum: plan.baseChecksum, + targetChecksum: plan.targetChecksum, + changedNodeIds: getChangedNodeIds(plan), + changedEdgeCount: getChangedEdgeCount(document, targetDocument), + durationMs: Date.now() - startedAt, + result: 'success' +}); + +const assertBaseChecksumUnchanged = async ({ + context, + expectedChecksum +}: { + context: CliContext; + expectedChecksum: string; +}) => { + const latestDocument = await readWorkflowFile(context.dir); + const actualChecksum = await getWorkflowChecksum(latestDocument); + if (actualChecksum !== expectedChecksum) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_BASE_CHECKSUM_MISMATCH', + severity: 'error', + params: { expected: expectedChecksum, actual: actualChecksum } + } + ]); + } +}; + +/** 从版本化 JSON 生成计划;stdin 与文件输入共用同一 Schema 和领域编排。 */ +export const planChangeSet = async ( + input: Record, + context: CliContext +): Promise => { + const startedAt = Date.now(); + const source = requireString(input, 'input'); + const changeSet = WorkflowChangeSetSchema.parse( + await readJsonInput({ source, context, label: 'ChangeSet input' }) + ); + const document = await readWorkflowFile(context.dir); + const result = await planWorkflowChangeSet({ + document, + changeSet, + dependencies: createDependencies(context) + }); + if (typeof input.output === 'string') { + await writeJsonFileAtomic(resolve(context.cwd, input.output), result.plan); + } + return { + changed: false, + checksum: result.plan.targetChecksum, + result: result.plan, + changes: result.plan.changes, + warnings: result.warnings, + audit: createAuditEvent({ + command: 'changeset plan', + document, + targetDocument: result.document, + plan: result.plan, + startedAt + }) + }; +}; + +/** 重新执行计划并校验 base/target checksum,通过确认门禁后才原子写入 workflow.json。 */ +export const applyChangeSetPlan = async ( + input: Record, + context: CliContext +): Promise => { + const startedAt = Date.now(); + const source = requireString(input, 'plan'); + const suppliedPlan = WorkflowPlanSchema.parse( + await readJsonInput({ source, context, label: 'Workflow plan' }) + ); + const document = await readWorkflowFile(context.dir); + const recomputed = await planWorkflowChangeSet({ + document, + changeSet: suppliedPlan.changeSet, + dependencies: createDependencies(context) + }); + if (recomputed.plan.targetChecksum !== suppliedPlan.targetChecksum) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_TARGET_CHECKSUM_MISMATCH', + severity: 'error', + params: { + expected: suppliedPlan.targetChecksum, + actual: recomputed.plan.targetChecksum + } + } + ]); + } + if (JSON.stringify(recomputed.plan) !== JSON.stringify(suppliedPlan)) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_PLAN_CONTENT_MISMATCH', + severity: 'error', + params: { targetChecksum: recomputed.plan.targetChecksum } + } + ]); + } + if (recomputed.plan.diagnostics.some((diagnostic) => diagnostic.severity === 'error')) { + throw new WorkflowValidationError(recomputed.plan.diagnostics); + } + + const dryRun = input.dryRun === true; + if (!dryRun) { + const targetChecksum = recomputed.plan.targetChecksum; + if (typeof input.confirm === 'string' && input.confirm !== targetChecksum) { + throw new CliArgumentError( + '--confirm must equal the recomputed target checksum', + { expected: targetChecksum, actual: input.confirm }, + 'CLI_CONFIRM_CHECKSUM_MISMATCH' + ); + } + if (input.confirm === undefined) { + if (!context.isTTY) { + throw new CliArgumentError( + 'Non-interactive apply requires --confirm with the target checksum', + { targetChecksum }, + 'CLI_CONFIRM_REQUIRED' + ); + } + if (!(await context.requestConfirmation(targetChecksum))) { + throw new CliArgumentError( + 'Workflow plan was not confirmed', + { targetChecksum }, + 'CLI_CONFIRM_REJECTED' + ); + } + } + await assertBaseChecksumUnchanged({ + context, + expectedChecksum: recomputed.plan.baseChecksum + }); + await writeWorkflowFileAtomic(context.dir, recomputed.document); + } + + return { + changed: true, + checksum: recomputed.plan.targetChecksum, + result: { + dryRun, + baseChecksum: recomputed.plan.baseChecksum, + targetChecksum: recomputed.plan.targetChecksum, + diagnostics: recomputed.plan.diagnostics + }, + changes: recomputed.plan.changes, + warnings: [ + ...recomputed.warnings, + ...recomputed.plan.diagnostics.filter((diagnostic) => diagnostic.severity === 'warning') + ], + audit: createAuditEvent({ + command: 'changeset apply', + document, + targetDocument: recomputed.document, + plan: recomputed.plan, + startedAt + }) + }; +}; diff --git a/packages/workflow-cli/src/commands/document.ts b/packages/workflow-cli/src/commands/document.ts index 4fee8f036124..cb4ddef0aa7d 100644 --- a/packages/workflow-cli/src/commands/document.ts +++ b/packages/workflow-cli/src/commands/document.ts @@ -44,7 +44,7 @@ export const initDocument = async ( if (input.dryRun !== true) await writeWorkflowFileAtomic(context.dir, result.document); return { changed: true, - checksum: getWorkflowChecksum(result.document), + checksum: await getWorkflowChecksum(result.document), changes: result.nodeIds.map((nodeId) => ({ type: 'node.add', nodeId })), result: { dryRun: input.dryRun === true }, warnings: result.warnings @@ -102,7 +102,7 @@ export const importDocument = async ( if (input.dryRun !== true) await writeWorkflowFileAtomic(context.dir, document); return { changed: true, - checksum: getWorkflowChecksum(document), + checksum: await getWorkflowChecksum(document), changes: systemConfigResult.nodeIds.map((nodeId) => ({ type: 'node.add', nodeId })), result: { input: inputPath, dryRun: input.dryRun === true, document }, warnings: systemConfigResult.warnings @@ -130,6 +130,7 @@ export const inspectDocument = async ( ); return { changed: false, + checksum: await getWorkflowChecksum(document), result: { app: document.app, nodes: document.nodes.map((node) => ({ diff --git a/packages/workflow-cli/src/error.ts b/packages/workflow-cli/src/error.ts index 063b4e3a7892..cd7eb1867b26 100644 --- a/packages/workflow-cli/src/error.ts +++ b/packages/workflow-cli/src/error.ts @@ -1,9 +1,8 @@ export class CliArgumentError extends Error { - readonly code = 'CLI_ARGUMENT_INVALID'; - constructor( message: string, - readonly params?: Record + readonly params?: Record, + readonly code = 'CLI_ARGUMENT_INVALID' ) { super(message); this.name = 'CliArgumentError'; diff --git a/packages/workflow-cli/src/io/workflowFile.ts b/packages/workflow-cli/src/io/workflowFile.ts index d63a0fc3d1b4..6b85d8c6a70c 100644 --- a/packages/workflow-cli/src/io/workflowFile.ts +++ b/packages/workflow-cli/src/io/workflowFile.ts @@ -1,6 +1,8 @@ import { - WorkflowDocumentSchema, + WORKFLOW_DOCUMENT_MIGRATION_GUIDANCE, + WorkflowDocumentVersionError, normalizeWorkflowDocument, + parseCompatibleWorkflowDocument, type WorkflowDocument } from '@fastgpt/workflow-core'; import { mkdir, open, readFile, rename, rm } from 'node:fs/promises'; @@ -9,11 +11,23 @@ import { CliArgumentError } from '../error'; export const WORKFLOW_FILE_NAME = 'workflow.json'; -export const parseWorkflowDocument = (input: unknown): WorkflowDocument => - WorkflowDocumentSchema.parse(input); +export const parseWorkflowDocument = (input: unknown): WorkflowDocument => { + try { + return parseCompatibleWorkflowDocument(input); + } catch (error) { + if (error instanceof WorkflowDocumentVersionError) { + throw new CliArgumentError(error.message, { + code: error.code, + foundVersion: error.foundVersion, + guidance: WORKFLOW_DOCUMENT_MIGRATION_GUIDANCE + }); + } + throw error; + } +}; export const serializeWorkflowDocument = (document: WorkflowDocument) => - `${JSON.stringify(normalizeWorkflowDocument(WorkflowDocumentSchema.parse(document)), null, 2)}\n`; + `${JSON.stringify(normalizeWorkflowDocument(parseCompatibleWorkflowDocument(document)), null, 2)}\n`; export const getWorkflowFilePath = (dir: string) => join(resolve(dir), WORKFLOW_FILE_NAME); diff --git a/packages/workflow-cli/src/output/render.ts b/packages/workflow-cli/src/output/render.ts index 817482922480..9aa03b1ba1ff 100644 --- a/packages/workflow-cli/src/output/render.ts +++ b/packages/workflow-cli/src/output/render.ts @@ -1,4 +1,4 @@ -import type { CliFormat, CliResult } from '../type'; +import type { CliAuditEvent, CliFormat, CliResult } from '../type'; export const CLI_OUTPUT_SCHEMA_VERSION = 'fastgpt-workflow-cli-result/v1' as const; @@ -11,6 +11,7 @@ export type CliSuccessEnvelope = { result?: unknown; changes?: unknown[]; warnings: unknown[]; + audit?: CliAuditEvent; }; export type CliErrorEnvelope = { @@ -29,7 +30,8 @@ export const createSuccessEnvelope = (command: string, result: CliResult): CliSu checksum: result.checksum, result: result.result, changes: result.changes, - warnings: result.warnings ?? [] + warnings: result.warnings ?? [], + audit: result.audit }); export const renderSuccess = ({ diff --git a/packages/workflow-cli/src/parser.ts b/packages/workflow-cli/src/parser.ts index 143ae879fc5c..f86c3bc5f506 100644 --- a/packages/workflow-cli/src/parser.ts +++ b/packages/workflow-cli/src/parser.ts @@ -112,6 +112,8 @@ export const parseCliArgs = ({ quiet: rawOptions.quiet === true, color: rawOptions.noColor !== true, env, + isTTY: false, + requestConfirmation: async () => false, readStdin: async () => { const chunks: Buffer[] = []; for await (const chunk of process.stdin) { diff --git a/packages/workflow-cli/src/registry.ts b/packages/workflow-cli/src/registry.ts index 55fb6d942e2b..1f7c6e4a7ace 100644 --- a/packages/workflow-cli/src/registry.ts +++ b/packages/workflow-cli/src/registry.ts @@ -30,6 +30,7 @@ import { validateDocument } from './commands/validate'; import { addOutput, listOutputs, removeOutput } from './commands/output'; import { attachTool, detachTool, listTools } from './commands/tool'; import { listChildren } from './commands/container'; +import { applyChangeSetPlan, planChangeSet } from './commands/changeSet'; import type { CliCommandDefinition, CliOptionDefinition } from './type'; const option = ( @@ -938,6 +939,41 @@ export const cliCommandRegistry: CliCommandDefinition[] = [ supportsDryRun: false, confirm: 'none', handler: validateDocument + }, + { + path: ['changeset', 'plan'], + introducedIn: 'PR4', + kind: 'artifact', + inputSchema: z + .object({ input: z.string().min(1), output: z.string().min(1).optional() }) + .strict(), + options: [ + option('--input', 'ChangeSet JSON path or - for stdin', { required: true }), + option('--output', 'Optional plan output path') + ], + supportsDryRun: false, + confirm: 'none', + handler: planChangeSet + }, + { + path: ['changeset', 'apply'], + introducedIn: 'PR4', + kind: 'localMutation', + inputSchema: z + .object({ + plan: z.string().min(1), + dryRun: z.literal(true).optional(), + confirm: z.string().min(1).optional() + }) + .strict(), + options: [ + option('--plan', 'Workflow plan JSON path or - for stdin', { required: true }), + option('--dry-run', 'Recompute and validate without writing', { value: false }), + option('--confirm', 'Recomputed target checksum') + ], + supportsDryRun: true, + confirm: 'checksum', + handler: applyChangeSetPlan } ]; diff --git a/packages/workflow-cli/src/run.ts b/packages/workflow-cli/src/run.ts index e50d6a6db573..2d8d111d69c1 100644 --- a/packages/workflow-cli/src/run.ts +++ b/packages/workflow-cli/src/run.ts @@ -1,22 +1,29 @@ import { WorkflowCommandError, WorkflowValidationError } from '@fastgpt/workflow-core'; import { ZodError } from 'zod'; +import { createInterface } from 'node:readline/promises'; import { CliArgumentError } from './error'; import { renderHelp } from './help'; import { renderError, renderSuccess } from './output/render'; import { parseCliArgs } from './parser'; +export const CLI_VERSION = '0.2.0-beta.2' as const; + export const runCli = async ({ argv, cwd = process.cwd(), env = process.env, + isTTY = Boolean(process.stdin.isTTY && process.stderr.isTTY), stdin, + requestConfirmation, stdout = (value) => process.stdout.write(`${value}\n`), stderr = (value) => process.stderr.write(`${value}\n`) }: { argv: string[]; cwd?: string; env?: NodeJS.ProcessEnv; + isTTY?: boolean; stdin?: () => Promise; + requestConfirmation?: (targetChecksum: string) => Promise; stdout?: (value: string) => void; stderr?: (value: string) => void; }): Promise => { @@ -38,19 +45,36 @@ export const runCli = async ({ return 0; } if (argv.length === 1 && argv[0] === '--version') { - stdout('0.1.0'); + stdout(CLI_VERSION); return 0; } const parsed = parseCliArgs({ argv, cwd, env }); - if (stdin) parsed.context.readStdin = stdin; + const context = { + ...parsed.context, + isTTY, + ...(stdin ? { readStdin: stdin } : {}), + requestConfirmation: + requestConfirmation ?? + (async (targetChecksum: string) => { + const readline = createInterface({ input: process.stdin, output: process.stderr }); + try { + const answer = await readline.question( + `Apply workflow plan ${targetChecksum}? Type "yes" to continue: ` + ); + return answer.trim().toLowerCase() === 'yes'; + } finally { + readline.close(); + } + }) + }; command = parsed.definition.path.join(' '); format = parsed.context.format; if (parsed.help) { stdout(renderHelp(parsed.definition)); return 0; } - const result = await parsed.definition.handler(parsed.input, parsed.context); + const result = await parsed.definition.handler(parsed.input, context); stdout(renderSuccess({ command, result, format })); return 0; } catch (error) { diff --git a/packages/workflow-cli/src/type.ts b/packages/workflow-cli/src/type.ts index 667000158301..de0084e06535 100644 --- a/packages/workflow-cli/src/type.ts +++ b/packages/workflow-cli/src/type.ts @@ -3,14 +3,27 @@ import type { z } from 'zod'; export type CliFormat = 'text' | 'json'; export type CliContext = { - cwd: string; - dir: string; - format: CliFormat; - locale: string; - quiet: boolean; - color: boolean; - env: NodeJS.ProcessEnv; - readStdin: () => Promise; + readonly cwd: string; + readonly dir: string; + readonly format: CliFormat; + readonly locale: string; + readonly quiet: boolean; + readonly color: boolean; + readonly env: NodeJS.ProcessEnv; + readonly isTTY: boolean; + readonly readStdin: () => Promise; + readonly requestConfirmation: (targetChecksum: string) => Promise; +}; + +export type CliAuditEvent = { + command: string; + appId?: string; + baseChecksum?: string; + targetChecksum?: string; + changedNodeIds?: string[]; + changedEdgeCount?: number; + durationMs: number; + result: 'success' | 'rejected' | 'conflict' | 'failed'; }; export type CliResult = { @@ -20,6 +33,7 @@ export type CliResult = { changes?: unknown[]; message?: string; warnings?: unknown[]; + audit?: CliAuditEvent; }; export type CliOptionDefinition = { @@ -31,11 +45,11 @@ export type CliOptionDefinition = { export type CliCommandDefinition = { path: readonly string[]; - introducedIn: 'PR1' | 'PR2' | 'PR3'; + introducedIn: 'PR1' | 'PR2' | 'PR3' | 'PR4'; kind: 'query' | 'localMutation' | 'artifact'; inputSchema: z.ZodType; options: readonly CliOptionDefinition[]; supportsDryRun: boolean; - confirm: 'none'; + confirm: 'none' | 'checksum'; handler: (input: Record, context: CliContext) => Promise; }; diff --git a/packages/workflow-cli/test/bin-smoke.mjs b/packages/workflow-cli/test/bin-smoke.mjs index c9e4af0dd468..6f19e3acf7d7 100644 --- a/packages/workflow-cli/test/bin-smoke.mjs +++ b/packages/workflow-cli/test/bin-smoke.mjs @@ -57,6 +57,22 @@ try { assert.equal(JSON.stringify(mutation).includes(prompt), false); assert.equal(invoke(['validate', '--dir', workflowDir]).result.valid, true); + const inspected = invoke(['inspect', '--dir', workflowDir]); + const changeSet = { + schemaVersion: 'fastgpt-workflow-changeset/v1', + baseChecksum: inspected.checksum, + commands: [{ type: 'meta.update', name: 'Changed by built bin' }] + }; + const plan = invoke( + ['changeset', 'plan', '--dir', workflowDir, '--input', '-'], + JSON.stringify(changeSet) + ).result; + invoke( + ['changeset', 'apply', '--dir', workflowDir, '--plan', '-', '--confirm', plan.targetChecksum], + JSON.stringify(plan) + ); + assert.equal(invoke(['inspect', '--dir', workflowDir]).result.app.name, 'Changed by built bin'); + const outputPath = join(workspace, 'workflow.generated.json'); invoke(['build', '--dir', workflowDir, '--output', outputPath]); const workflow = JSON.parse(await readFile(outputPath, 'utf8')); diff --git a/packages/workflow-cli/test/changeSet.test.ts b/packages/workflow-cli/test/changeSet.test.ts new file mode 100644 index 000000000000..99ab33d3062d --- /dev/null +++ b/packages/workflow-cli/test/changeSet.test.ts @@ -0,0 +1,301 @@ +import { runCli } from '../src'; +import { mkdtemp, readFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { describe, expect, it } from 'vitest'; + +const createHarness = async () => { + const cwd = await mkdtemp(join(tmpdir(), 'workflow-cli-changeset-')); + const dir = join(cwd, 'workflow'); + const invoke = async ({ + args, + stdin = '', + isTTY = false, + requestConfirmation + }: { + args: string[]; + stdin?: string; + isTTY?: boolean; + requestConfirmation?: (targetChecksum: string) => Promise; + }) => { + const stdout: string[] = []; + const stderr: string[] = []; + const exitCode = await runCli({ + argv: [...args, '--dir', dir, '--format', 'json'], + cwd, + env: { NODE_ENV: 'test' }, + isTTY, + stdin: async () => stdin, + requestConfirmation, + stdout: (value) => stdout.push(value), + stderr: (value) => stderr.push(value) + }); + return { + exitCode, + stdout: stdout[0] ? JSON.parse(stdout[0]) : undefined, + stderr: stderr[0] ? JSON.parse(stderr[0]) : undefined + }; + }; + await invoke({ args: ['init', '--name', 'Initial'] }); + return { cwd, dir, invoke }; +}; + +const createChangeSet = ({ baseChecksum, name }: { baseChecksum: string; name: string }) => ({ + schemaVersion: 'fastgpt-workflow-changeset/v1', + baseChecksum, + commands: [{ type: 'meta.update', name }] +}); + +const inspect = async (invoke: Awaited>['invoke']) => + invoke({ args: ['inspect'] }); + +const plan = async ({ + invoke, + baseChecksum, + name, + output +}: { + invoke: Awaited>['invoke']; + baseChecksum: string; + name: string; + output?: string; +}) => + invoke({ + args: ['changeset', 'plan', '--input', '-', ...(output ? ['--output', output] : [])], + stdin: JSON.stringify(createChangeSet({ baseChecksum, name })) + }); + +describe('PR4 ChangeSet CLI', () => { + it('plans through stdin, supports an optional file, and applies only after checksum confirmation', async () => { + const { cwd, dir, invoke } = await createHarness(); + const before = await readFile(join(dir, 'workflow.json'), 'utf8'); + const baseChecksum = (await inspect(invoke)).stdout.checksum as string; + const planned = await plan({ + invoke, + baseChecksum, + name: 'Applied', + output: 'workflow.plan.json' + }); + expect(planned.exitCode).toBe(0); + expect(planned.stdout).toMatchObject({ + command: 'changeset plan', + changed: false, + result: { + schemaVersion: 'fastgpt-workflow-plan/v1', + baseChecksum, + targetChecksum: expect.stringMatching(/^sha256:[a-f0-9]{64}$/) + }, + audit: { + command: 'changeset plan', + baseChecksum, + result: 'success' + } + }); + expect(JSON.parse(await readFile(join(cwd, 'workflow.plan.json'), 'utf8'))).toEqual( + planned.stdout.result + ); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(before); + + const dryRun = await invoke({ + args: ['changeset', 'apply', '--plan', '-', '--dry-run'], + stdin: JSON.stringify(planned.stdout.result) + }); + expect(dryRun.exitCode).toBe(0); + expect(dryRun.stdout.result.dryRun).toBe(true); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(before); + + const missingConfirm = await invoke({ + args: ['changeset', 'apply', '--plan', '-'], + stdin: JSON.stringify(planned.stdout.result) + }); + expect(missingConfirm).toMatchObject({ + exitCode: 2, + stderr: { errors: [{ code: 'CLI_CONFIRM_REQUIRED' }] } + }); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(before); + + const wrongConfirm = await invoke({ + args: ['changeset', 'apply', '--plan', '-', '--confirm', `sha256:${'0'.repeat(64)}`], + stdin: JSON.stringify(planned.stdout.result) + }); + expect(wrongConfirm).toMatchObject({ + exitCode: 2, + stderr: { errors: [{ code: 'CLI_CONFIRM_CHECKSUM_MISMATCH' }] } + }); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(before); + + const applied = await invoke({ + args: [ + 'changeset', + 'apply', + '--plan', + '-', + '--confirm', + planned.stdout.result.targetChecksum + ], + stdin: JSON.stringify(planned.stdout.result) + }); + expect(applied.exitCode).toBe(0); + expect(applied.stdout).toMatchObject({ + changed: true, + checksum: planned.stdout.result.targetChecksum, + result: { dryRun: false }, + audit: { command: 'changeset apply', result: 'success' } + }); + expect((await inspect(invoke)).stdout.result.app.name).toBe('Applied'); + }); + + it('invalidates an old plan after a manual mutation', async () => { + const { dir, invoke } = await createHarness(); + const baseChecksum = (await inspect(invoke)).stdout.checksum as string; + const planned = await plan({ invoke, baseChecksum, name: 'Automated' }); + await invoke({ args: ['meta', 'set', '--name', 'Manual'] }); + const manuallyChanged = await readFile(join(dir, 'workflow.json'), 'utf8'); + + const result = await invoke({ + args: [ + 'changeset', + 'apply', + '--plan', + '-', + '--confirm', + planned.stdout.result.targetChecksum + ], + stdin: JSON.stringify(planned.stdout.result) + }); + expect(result).toMatchObject({ + exitCode: 3, + stderr: { + errors: [ + { + diagnostics: [expect.objectContaining({ code: 'WORKFLOW_BASE_CHECKSUM_MISMATCH' })] + } + ] + } + }); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(manuallyChanged); + }); + + it('rejects a plan whose review summary was tampered with', async () => { + const { dir, invoke } = await createHarness(); + const baseChecksum = (await inspect(invoke)).stdout.checksum as string; + const planned = await plan({ invoke, baseChecksum, name: 'Hidden change' }); + const before = await readFile(join(dir, 'workflow.json'), 'utf8'); + planned.stdout.result.changes = []; + const result = await invoke({ + args: [ + 'changeset', + 'apply', + '--plan', + '-', + '--confirm', + planned.stdout.result.targetChecksum + ], + stdin: JSON.stringify(planned.stdout.result) + }); + expect(result.exitCode).toBe(3); + expect(result.stderr.errors[0].diagnostics).toEqual( + expect.arrayContaining([expect.objectContaining({ code: 'WORKFLOW_PLAN_CONTENT_MISMATCH' })]) + ); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(before); + }); + + it('prompts only in TTY mode and preserves the file when confirmation is rejected', async () => { + const { dir, invoke } = await createHarness(); + const baseChecksum = (await inspect(invoke)).stdout.checksum as string; + const planned = await plan({ invoke, baseChecksum, name: 'TTY applied' }); + const before = await readFile(join(dir, 'workflow.json'), 'utf8'); + let promptedChecksum = ''; + + const rejected = await invoke({ + args: ['changeset', 'apply', '--plan', '-'], + stdin: JSON.stringify(planned.stdout.result), + isTTY: true, + requestConfirmation: async (targetChecksum) => { + promptedChecksum = targetChecksum; + return false; + } + }); + expect(promptedChecksum).toBe(planned.stdout.result.targetChecksum); + expect(rejected).toMatchObject({ + exitCode: 2, + stderr: { errors: [{ code: 'CLI_CONFIRM_REJECTED' }] } + }); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(before); + + const accepted = await invoke({ + args: ['changeset', 'apply', '--plan', '-'], + stdin: JSON.stringify(planned.stdout.result), + isTTY: true, + requestConfirmation: async () => true + }); + expect(accepted.exitCode).toBe(0); + expect((await inspect(invoke)).stdout.result.app.name).toBe('TTY applied'); + }); + + it('rechecks the base checksum after an interactive confirmation', async () => { + const { dir, invoke } = await createHarness(); + const baseChecksum = (await inspect(invoke)).stdout.checksum as string; + const planned = await plan({ invoke, baseChecksum, name: 'Must not overwrite' }); + const result = await invoke({ + args: ['changeset', 'apply', '--plan', '-'], + stdin: JSON.stringify(planned.stdout.result), + isTTY: true, + requestConfirmation: async () => { + expect( + (await invoke({ args: ['meta', 'set', '--name', 'Concurrent edit'] })).exitCode + ).toBe(0); + return true; + } + }); + expect(result.exitCode).toBe(3); + expect(result.stderr.errors[0].diagnostics).toEqual( + expect.arrayContaining([expect.objectContaining({ code: 'WORKFLOW_BASE_CHECKSUM_MISMATCH' })]) + ); + expect(JSON.parse(await readFile(join(dir, 'workflow.json'), 'utf8')).app.name).toBe( + 'Concurrent edit' + ); + }); + + it('rejects malformed stdin and validation failures without writing', async () => { + const { dir, invoke } = await createHarness(); + expect(await invoke({ args: ['changeset', 'plan', '--input', '-'], stdin: '{' })).toMatchObject( + { exitCode: 2 } + ); + + const before = await readFile(join(dir, 'workflow.json'), 'utf8'); + const baseChecksum = (await inspect(invoke)).stdout.checksum as string; + const invalidChangeSet = { + schemaVersion: 'fastgpt-workflow-changeset/v1', + baseChecksum, + commands: [ + { + type: 'node.add', + nodeId: 'unreachable-answer', + template: { kind: 'builtin', templateId: 'assigned-answer' } + } + ] + }; + const planned = await invoke({ + args: ['changeset', 'plan', '--input', '-'], + stdin: JSON.stringify(invalidChangeSet) + }); + expect(planned.exitCode).toBe(0); + expect(planned.stdout.result.diagnostics).toEqual( + expect.arrayContaining([expect.objectContaining({ severity: 'error' })]) + ); + const applied = await invoke({ + args: [ + 'changeset', + 'apply', + '--plan', + '-', + '--confirm', + planned.stdout.result.targetChecksum + ], + stdin: JSON.stringify(planned.stdout.result) + }); + expect(applied.exitCode).toBe(4); + expect(await readFile(join(dir, 'workflow.json'), 'utf8')).toBe(before); + }); +}); diff --git a/packages/workflow-cli/test/e2e.test.ts b/packages/workflow-cli/test/e2e.test.ts index 1935eddb78a1..d72b32759730 100644 --- a/packages/workflow-cli/test/e2e.test.ts +++ b/packages/workflow-cli/test/e2e.test.ts @@ -30,7 +30,7 @@ const createHarness = async () => { const jsonArgs = (dir: string, args: string[]) => [...args, '--dir', dir, '--format', 'json']; -describe('PR1 through PR3 CLI end to end', () => { +describe('PR1 through PR4 CLI end to end', () => { it('builds basic-ai with pure JSON stdout and deterministic output', async () => { const { cwd, invoke } = await createHarness(); const dir = join(cwd, 'basic-ai'); @@ -620,7 +620,7 @@ describe('PR1 through PR3 CLI end to end', () => { it('renders global/command help, version and text output without executing handlers', async () => { const { invoke } = await createHarness(); expect((await invoke(['--help'])).stdout[0]).toContain('Commands:'); - expect((await invoke(['--version'])).stdout).toEqual(['0.1.0']); + expect((await invoke(['--version'])).stdout).toEqual(['0.2.0-beta.2']); const commandHelp = await invoke(['node', 'show', '--help']); expect(commandHelp.exitCode).toBe(0); expect(commandHelp.stdout[0]).toContain('Usage: fastgpt-workflow node show'); diff --git a/packages/workflow-cli/test/io/workflowFile.test.ts b/packages/workflow-cli/test/io/workflowFile.test.ts index 2548869351d6..0201f31f759c 100644 --- a/packages/workflow-cli/test/io/workflowFile.test.ts +++ b/packages/workflow-cli/test/io/workflowFile.test.ts @@ -37,4 +37,21 @@ describe('workflow file codec', () => { await writeFile(join(dir, 'workflow.json'), '{', 'utf8'); await expect(readWorkflowFile(dir)).rejects.toMatchObject({ code: 'CLI_ARGUMENT_INVALID' }); }); + + it('reports unsupported schema versions with migration guidance', async () => { + const dir = await mkdtemp(join(tmpdir(), 'workflow-version-')); + await writeFile( + join(dir, 'workflow.json'), + JSON.stringify({ ...aiWorkflow, schemaVersion: 'fastgpt-workflow/v2' }), + 'utf8' + ); + await expect(readWorkflowFile(dir)).rejects.toMatchObject({ + code: 'CLI_ARGUMENT_INVALID', + params: { + code: 'WORKFLOW_DOCUMENT_VERSION_UNSUPPORTED', + foundVersion: 'fastgpt-workflow/v2', + guidance: expect.stringContaining('migrate one version at a time') + } + }); + }); }); diff --git a/packages/workflow-cli/test/output.test.ts b/packages/workflow-cli/test/output.test.ts index f00a4ee350dc..ee79318c4dc9 100644 --- a/packages/workflow-cli/test/output.test.ts +++ b/packages/workflow-cli/test/output.test.ts @@ -11,7 +11,8 @@ describe('CLI output', () => { checksum: undefined, changes: undefined, result: { valid: true }, - warnings: [] + warnings: [], + audit: undefined }); expect( renderSuccess({ command: 'x', result: { changed: false, result: 'value' }, format: 'text' }) diff --git a/packages/workflow-cli/test/package-smoke.mjs b/packages/workflow-cli/test/package-smoke.mjs new file mode 100644 index 000000000000..cb9e1ca8b5db --- /dev/null +++ b/packages/workflow-cli/test/package-smoke.mjs @@ -0,0 +1,89 @@ +import assert from 'node:assert/strict'; +import { mkdir, mkdtemp, readFile, readdir, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { spawnSync } from 'node:child_process'; + +const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const workspace = await mkdtemp(join(tmpdir(), 'workflow-cli-package-')); +const packDirectory = join(workspace, 'pack'); +const previousSourceDirectory = join(workspace, 'previous-source'); +const previousPackDirectory = join(workspace, 'previous-pack'); +const installDirectory = join(workspace, 'install'); +const workflowDirectory = join(workspace, 'workflow'); + +const run = (command, args, options = {}) => { + const result = spawnSync(command, args, { + cwd: packageRoot, + env: { ...process.env, NODE_ENV: 'test' }, + encoding: 'utf8', + ...options + }); + assert.equal(result.status, 0, result.stderr || result.stdout); + return result.stdout.trim(); +}; + +try { + await mkdir(packDirectory, { recursive: true }); + run('pnpm', ['pack', '--pack-destination', packDirectory]); + const tarballName = (await readdir(packDirectory)).find((file) => file.endsWith('.tgz')); + assert.ok(tarballName); + const tarballPath = join(packDirectory, tarballName); + + await mkdir(previousSourceDirectory, { recursive: true }); + await mkdir(previousPackDirectory, { recursive: true }); + run('tar', ['-xzf', tarballPath, '-C', previousSourceDirectory]); + const previousPackageRoot = join(previousSourceDirectory, 'package'); + const previousPackageJsonPath = join(previousPackageRoot, 'package.json'); + const previousPackageJson = JSON.parse(await readFile(previousPackageJsonPath, 'utf8')); + previousPackageJson.version = '0.2.0-beta.0'; + await writeFile(previousPackageJsonPath, `${JSON.stringify(previousPackageJson, null, 2)}\n`); + const previousDistDirectory = join(previousPackageRoot, 'dist'); + for (const file of await readdir(previousDistDirectory)) { + if (!file.endsWith('.js')) continue; + const filePath = join(previousDistDirectory, file); + const content = await readFile(filePath, 'utf8'); + await writeFile(filePath, content.replaceAll('0.2.0-beta.2', '0.2.0-beta.0')); + } + run('npm', ['pack', '--pack-destination', previousPackDirectory], { + cwd: previousPackageRoot + }); + const previousTarballName = (await readdir(previousPackDirectory)).find((file) => + file.endsWith('.tgz') + ); + assert.ok(previousTarballName); + const previousTarballPath = join(previousPackDirectory, previousTarballName); + + const install = (packagePath) => + run('npm', [ + 'install', + '--prefix', + installDirectory, + '--ignore-scripts', + '--offline', + packagePath + ]); + + const binPath = join(installDirectory, 'node_modules', '.bin', 'fastgpt-workflow'); + install(previousTarballPath); + assert.equal(run(binPath, ['--version']), '0.2.0-beta.0'); + run(binPath, ['init', '--dir', workflowDirectory, '--format', 'json']); + + install(tarballPath); + assert.equal(run(binPath, ['--version']), '0.2.0-beta.2'); + const inspected = JSON.parse( + run(binPath, ['inspect', '--dir', workflowDirectory, '--format', 'json']) + ); + assert.match(inspected.checksum, /^sha256:[a-f0-9]{64}$/); + + install(previousTarballPath); + assert.equal(run(binPath, ['--version']), '0.2.0-beta.0'); + JSON.parse(run(binPath, ['inspect', '--dir', workflowDirectory, '--format', 'json'])); + + install(tarballPath); + assert.equal(run(binPath, ['--version']), '0.2.0-beta.2'); + process.stdout.write('workflow-cli package install, upgrade and rollback smoke passed\n'); +} finally { + await rm(workspace, { recursive: true, force: true }); +} diff --git a/packages/workflow-cli/test/registry.test.ts b/packages/workflow-cli/test/registry.test.ts index 040bbfba08d4..ffdc8e7b6afc 100644 --- a/packages/workflow-cli/test/registry.test.ts +++ b/packages/workflow-cli/test/registry.test.ts @@ -2,7 +2,7 @@ import { cliCommandRegistry, renderHelp } from '../src'; import { describe, expect, it } from 'vitest'; describe('cliCommandRegistry', () => { - it('registers exactly the PR1 through PR3 command surface once', () => { + it('registers exactly the PR1 through PR4 command surface once', () => { const snapshot = cliCommandRegistry.map((definition) => ({ path: definition.path.join(' '), introducedIn: definition.introducedIn, @@ -561,6 +561,29 @@ describe('cliCommandRegistry', () => { "path": "validate", "supportsDryRun": false, }, + { + "confirm": "none", + "introducedIn": "PR4", + "kind": "artifact", + "options": [ + "--input", + "--output", + ], + "path": "changeset plan", + "supportsDryRun": false, + }, + { + "confirm": "checksum", + "introducedIn": "PR4", + "kind": "localMutation", + "options": [ + "--plan", + "--dry-run", + "--confirm", + ], + "path": "changeset apply", + "supportsDryRun": true, + }, ] `); }); @@ -571,7 +594,8 @@ describe('renderHelp', () => { const help = renderHelp(); expect(help).toContain('template show'); expect(help).toContain('input ref'); - expect(help).not.toContain('changeset'); + expect(help).toContain('changeset plan'); + expect(help).toContain('changeset apply'); expect( renderHelp(cliCommandRegistry.find((item) => item.path.join(' ') === 'build')) ).toContain('--output (required)'); diff --git a/packages/workflow-cli/test/templateContract.test.ts b/packages/workflow-cli/test/templateContract.test.ts index 45e5dda89130..3de615c40710 100644 --- a/packages/workflow-cli/test/templateContract.test.ts +++ b/packages/workflow-cli/test/templateContract.test.ts @@ -38,4 +38,22 @@ describe('template contract commands', () => { } }); }); + + it('returns Core reference compatibility through template show', async () => { + const result = await showTemplate({ template: 'builtin:dataset-search' }, context); + const descriptor = result.result as { + inputs: Array<{ + valueType?: string; + referencePolicy?: { acceptedSourceValueTypes: string[] }; + }>; + }; + const searchInput = descriptor.inputs.find((input) => input.valueType === 'arrayString'); + + expect(searchInput?.referencePolicy?.acceptedSourceValueTypes).toEqual([ + 'string', + 'arrayString', + 'arrayAny', + 'any' + ]); + }); }); diff --git a/packages/workflow-cli/tsdown.config.ts b/packages/workflow-cli/tsdown.config.ts index a117e77c0f7e..41115f7ab7e5 100644 --- a/packages/workflow-cli/tsdown.config.ts +++ b/packages/workflow-cli/tsdown.config.ts @@ -6,7 +6,7 @@ export default defineConfig({ platform: 'node', target: 'node20', deps: { - alwaysBundle: [/^@fastgpt\/workflow-core/, /^@fastgpt\/global/, /^@fastgpt\/web/], + alwaysBundle: [/^@fastgpt\/workflow-core/, /^@fastgpt\/global/, /^@fastgpt\/web/, /^zod/], onlyBundle: false }, dts: false, diff --git a/packages/workflow-core/src/command/apply.ts b/packages/workflow-core/src/command/apply.ts index 087aab3c5f98..fddc3bbad5e0 100644 --- a/packages/workflow-core/src/command/apply.ts +++ b/packages/workflow-core/src/command/apply.ts @@ -448,6 +448,6 @@ export const applyWorkflowCommand = async ({ document: nextDocument, changes, warnings, - checksum: getWorkflowChecksum(nextDocument) + checksum: await getWorkflowChecksum(nextDocument) }; }; diff --git a/packages/workflow-core/src/command/applyChangeSet.ts b/packages/workflow-core/src/command/applyChangeSet.ts new file mode 100644 index 000000000000..48c7cf1f5a41 --- /dev/null +++ b/packages/workflow-core/src/command/applyChangeSet.ts @@ -0,0 +1,94 @@ +import { getWorkflowChecksum } from '../domain/checksum'; +import { WorkflowCommandError, type WorkflowDiagnostic } from '../domain/diagnostic'; +import type { WorkflowDocument } from '../domain/document'; +import type { WorkflowTemplateProvider } from '../template/type'; +import { validateWorkflow } from '../validation'; +import { applyWorkflowCommand } from './apply'; +import { + WORKFLOW_PLAN_SCHEMA_VERSION, + WorkflowChangeSetSchema, + WorkflowPlanSchema, + type WorkflowChangeSet, + type WorkflowChangeSummary, + type WorkflowPlan +} from './type'; + +export type WorkflowChangeSetResult = { + document: WorkflowDocument; + changes: WorkflowChangeSummary[]; + warnings: WorkflowDiagnostic[]; + diagnostics: WorkflowDiagnostic[]; + checksum: string; +}; + +type ChangeSetDependencies = { + templateProvider: WorkflowTemplateProvider; + locale?: string; + translate?: (value: string) => string; +}; + +/** + * 在内存副本中按顺序执行 ChangeSet。任一命令失败时不返回中间文档,所有领域修改仍复用单命令 dispatcher。 + */ +export const applyWorkflowChangeSet = async ({ + document, + changeSet: rawChangeSet, + dependencies +}: { + document: WorkflowDocument; + changeSet: WorkflowChangeSet; + dependencies: ChangeSetDependencies; +}): Promise => { + const changeSet = WorkflowChangeSetSchema.parse(rawChangeSet); + const baseChecksum = await getWorkflowChecksum(document); + if (changeSet.baseChecksum !== baseChecksum) { + throw new WorkflowCommandError([ + { + code: 'WORKFLOW_BASE_CHECKSUM_MISMATCH', + severity: 'error', + params: { expected: changeSet.baseChecksum, actual: baseChecksum } + } + ]); + } + + let nextDocument = structuredClone(document); + const changes: WorkflowChangeSummary[] = []; + const warnings: WorkflowDiagnostic[] = []; + for (const command of changeSet.commands) { + const result = await applyWorkflowCommand({ document: nextDocument, command, dependencies }); + nextDocument = result.document; + changes.push(...result.changes); + warnings.push(...result.warnings); + } + + const diagnostics = validateWorkflow(nextDocument); + return { + document: nextDocument, + changes, + warnings, + diagnostics, + checksum: await getWorkflowChecksum(nextDocument) + }; +}; + +/** 生成可审阅计划但不写入文档;apply 阶段必须重新执行并比较 targetChecksum。 */ +export const planWorkflowChangeSet = async ({ + document, + changeSet, + dependencies +}: { + document: WorkflowDocument; + changeSet: WorkflowChangeSet; + dependencies: ChangeSetDependencies; +}): Promise<{ plan: WorkflowPlan; document: WorkflowDocument; warnings: WorkflowDiagnostic[] }> => { + const result = await applyWorkflowChangeSet({ document, changeSet, dependencies }); + const plan = WorkflowPlanSchema.parse({ + schemaVersion: WORKFLOW_PLAN_SCHEMA_VERSION, + baseChecksum: changeSet.baseChecksum, + targetChecksum: result.checksum, + changeSet, + changes: result.changes, + diagnostics: result.diagnostics + }); + return { plan, document: result.document, warnings: result.warnings }; +}; diff --git a/packages/workflow-core/src/command/type.ts b/packages/workflow-core/src/command/type.ts index fff307919a52..0bc7aede29fe 100644 --- a/packages/workflow-core/src/command/type.ts +++ b/packages/workflow-core/src/command/type.ts @@ -8,6 +8,7 @@ import { FlowNodeInputItemTypeSchema, FlowNodeOutputItemTypeSchema } from '@fastgpt/global/core/workflow/type/io'; +import { WorkflowDiagnosticSchema } from '../domain/diagnostic'; const NodeAddCommandSchema = z.object({ type: z.literal('node.add'), @@ -212,11 +213,52 @@ export const WorkflowCommandSchema = z.discriminatedUnion('type', [ export type WorkflowCommand = z.infer; -export type WorkflowChangeSummary = { - type: WorkflowCommand['type']; - nodeId?: string; - inputKey?: string; - path?: string; - key?: string; - details?: Record; -}; +const workflowCommandTypes = new Set( + WorkflowCommandSchema.options.map((option) => option.shape.type.value) +); +export const WorkflowCommandTypeSchema = z.custom( + (value) => typeof value === 'string' && workflowCommandTypes.has(value) +); + +export const WorkflowChangeSummarySchema = z.object({ + type: WorkflowCommandTypeSchema, + nodeId: z.string().optional(), + inputKey: z.string().optional(), + path: z.string().optional(), + key: z.string().optional(), + details: z.record(z.string(), z.unknown()).optional() +}); + +export type WorkflowChangeSummary = z.infer; + +export const WORKFLOW_CHANGESET_SCHEMA_VERSION = 'fastgpt-workflow-changeset/v1' as const; +export const WORKFLOW_PLAN_SCHEMA_VERSION = 'fastgpt-workflow-plan/v1' as const; + +const WorkflowChecksumSchema = z.string().regex(/^sha256:[a-f0-9]{64}$/); + +export const WorkflowChangeSetSchema = z + .object({ + schemaVersion: z.literal(WORKFLOW_CHANGESET_SCHEMA_VERSION), + baseChecksum: WorkflowChecksumSchema, + commands: z.array(WorkflowCommandSchema).min(1) + }) + .strict(); + +export type WorkflowChangeSet = z.infer; + +export const WorkflowPlanSchema = z + .object({ + schemaVersion: z.literal(WORKFLOW_PLAN_SCHEMA_VERSION), + baseChecksum: WorkflowChecksumSchema, + targetChecksum: WorkflowChecksumSchema, + changeSet: WorkflowChangeSetSchema, + changes: z.array(WorkflowChangeSummarySchema), + diagnostics: z.array(WorkflowDiagnosticSchema) + }) + .strict() + .refine((plan) => plan.baseChecksum === plan.changeSet.baseChecksum, { + message: 'Plan baseChecksum must match ChangeSet baseChecksum', + path: ['baseChecksum'] + }); + +export type WorkflowPlan = z.infer; diff --git a/packages/workflow-core/src/domain/checksum.ts b/packages/workflow-core/src/domain/checksum.ts index 11428fa1c59b..7c31e9607fc5 100644 --- a/packages/workflow-core/src/domain/checksum.ts +++ b/packages/workflow-core/src/domain/checksum.ts @@ -6,37 +6,37 @@ const sortRecord = (value: unknown): unknown => { return Object.fromEntries( Object.entries(value) - .sort(([left], [right]) => left.localeCompare(right)) + .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0)) .map(([key, item]) => [key, sortRecord(item)]) ); }; /** 返回字段和集合顺序稳定的文档副本,供序列化、比较和基础 checksum 使用。 */ export const normalizeWorkflowDocument = (document: WorkflowDocument): WorkflowDocument => ({ - ...structuredClone(document), + schemaVersion: document.schemaVersion, app: sortRecord(document.app) as WorkflowDocument['app'], nodes: [...document.nodes] - .sort((left, right) => left.nodeId.localeCompare(right.nodeId)) + .sort((left, right) => (left.nodeId < right.nodeId ? -1 : left.nodeId > right.nodeId ? 1 : 0)) .map((node) => sortRecord(node) as WorkflowDocument['nodes'][number]), executionEdges: [...document.executionEdges] + .map((edge) => sortRecord(edge) as WorkflowDocument['executionEdges'][number]) .sort((left, right) => { const leftKey = JSON.stringify(left); const rightKey = JSON.stringify(right); - return leftKey.localeCompare(rightKey); - }) - .map((edge) => sortRecord(edge) as WorkflowDocument['executionEdges'][number]), + return leftKey < rightKey ? -1 : leftKey > rightKey ? 1 : 0; + }), chatConfig: sortRecord(document.chatConfig) as WorkflowDocument['chatConfig'] }); -const fnv1a = (value: string) => { - let hash = 0x811c9dc5; - for (const character of value) { - hash ^= character.charCodeAt(0); - hash = Math.imul(hash, 0x01000193); - } - return (hash >>> 0).toString(16).padStart(8, '0'); +/** 对规范化后的 UTF-8 JSON 计算跨 Node/Browser 一致的 SHA-256。 */ +export const getWorkflowChecksum = async (document: WorkflowDocument) => { + const canonicalDocument = JSON.stringify(normalizeWorkflowDocument(document)); + const digest = await globalThis.crypto.subtle.digest( + 'SHA-256', + new TextEncoder().encode(canonicalDocument) + ); + const checksum = Array.from(new Uint8Array(digest), (byte) => + byte.toString(16).padStart(2, '0') + ).join(''); + return `sha256:${checksum}`; }; - -/** PR1 的稳定变更标识;PR4 再升级为带并发语义的 canonical SHA-256。 */ -export const getWorkflowChecksum = (document: WorkflowDocument) => - `fnv1a:${fnv1a(JSON.stringify(normalizeWorkflowDocument(document)))}`; diff --git a/packages/workflow-core/src/domain/document.ts b/packages/workflow-core/src/domain/document.ts index cd7a4c4f5531..ec0570c4851d 100644 --- a/packages/workflow-core/src/domain/document.ts +++ b/packages/workflow-core/src/domain/document.ts @@ -4,6 +4,11 @@ import z from 'zod'; import { WorkflowExecutionEdgeSchema } from '../edge/type'; export const WORKFLOW_DOCUMENT_SCHEMA_VERSION = 'fastgpt-workflow/v1' as const; +export const WORKFLOW_DOCUMENT_SUPPORTED_SCHEMA_VERSIONS = [ + WORKFLOW_DOCUMENT_SCHEMA_VERSION +] as const; +export const WORKFLOW_DOCUMENT_MIGRATION_GUIDANCE = + 'Use a CLI version that supports the source schema, migrate one version at a time, and never remove or rewrite schemaVersion manually.'; export const WorkflowDocumentSchema = z.object({ schemaVersion: z.literal(WORKFLOW_DOCUMENT_SCHEMA_VERSION), @@ -21,6 +26,35 @@ export const WorkflowDocumentSchema = z.object({ export type WorkflowDocument = z.infer; +export class WorkflowDocumentVersionError extends Error { + readonly code = 'WORKFLOW_DOCUMENT_VERSION_UNSUPPORTED'; + + constructor(readonly foundVersion: string | undefined) { + super( + foundVersion === undefined + ? 'workflow.json is missing schemaVersion' + : `Unsupported workflow schemaVersion: ${foundVersion}` + ); + this.name = 'WorkflowDocumentVersionError'; + } +} + +/** + * 解析版本化工作流文档。当前没有历史迁移器,因此只接受 v1,并为缺失、旧版或新版文档返回明确迁移指引。 + */ +export const parseCompatibleWorkflowDocument = (input: unknown): WorkflowDocument => { + const schemaVersion = + input && typeof input === 'object' && !Array.isArray(input) && 'schemaVersion' in input + ? (input as { schemaVersion?: unknown }).schemaVersion + : undefined; + if (schemaVersion !== WORKFLOW_DOCUMENT_SCHEMA_VERSION) { + throw new WorkflowDocumentVersionError( + typeof schemaVersion === 'string' ? schemaVersion : undefined + ); + } + return WorkflowDocumentSchema.parse(input); +}; + export const createWorkflowDocument = ( input: Partial> = {} ): WorkflowDocument => diff --git a/packages/workflow-core/src/index.ts b/packages/workflow-core/src/index.ts index b0fa25dc550c..0cc9351ca7b4 100644 --- a/packages/workflow-core/src/index.ts +++ b/packages/workflow-core/src/index.ts @@ -1,4 +1,5 @@ export * from './command/apply'; +export * from './command/applyChangeSet'; export * from './command/type'; export * from './code/io'; export * from './binding/service'; @@ -28,3 +29,7 @@ export * from './template/type'; export * from './template/valueSchema'; export * from './validation'; export * from './public'; +export { + areWorkflowValueTypesCompatible, + getWorkflowReferenceSourceValueTypes +} from '@fastgpt/global/core/workflow/utils'; diff --git a/packages/workflow-core/src/reference/service.ts b/packages/workflow-core/src/reference/service.ts index 63f61a1cbf45..198c08138910 100644 --- a/packages/workflow-core/src/reference/service.ts +++ b/packages/workflow-core/src/reference/service.ts @@ -1,44 +1,13 @@ import { VARIABLE_NODE_ID, WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; import type { FlowNodeInputItemType } from '@fastgpt/global/core/workflow/type/io'; +import { areWorkflowValueTypesCompatible } from '@fastgpt/global/core/workflow/utils'; import type { WorkflowDocument } from '../domain/document'; import { WorkflowCommandError } from '../domain/diagnostic'; import type { VariableRef } from './type'; import { getInputAutomationMeta } from '../template/automationMeta'; import { assertValueSchema, inputValueNeedsSchema } from '../template/valueSchema'; -const arrayItemTypeMap: Partial> = { - [WorkflowIOValueTypeEnum.arrayString]: WorkflowIOValueTypeEnum.string, - [WorkflowIOValueTypeEnum.arrayNumber]: WorkflowIOValueTypeEnum.number, - [WorkflowIOValueTypeEnum.arrayBoolean]: WorkflowIOValueTypeEnum.boolean, - [WorkflowIOValueTypeEnum.arrayObject]: WorkflowIOValueTypeEnum.object -}; - -/** 统一判断普通引用和聚合引用的输入输出类型是否兼容。 */ -export const areWorkflowValueTypesCompatible = ({ - expected, - actual, - collection = false -}: { - expected?: string; - actual?: string; - collection?: boolean; -}) => { - if ( - expected === undefined || - actual === undefined || - expected === WorkflowIOValueTypeEnum.any || - expected === WorkflowIOValueTypeEnum.dynamic || - actual === WorkflowIOValueTypeEnum.any || - actual === WorkflowIOValueTypeEnum.dynamic - ) { - return true; - } - if (!collection) return expected === actual; - if (expected === WorkflowIOValueTypeEnum.arrayAny) return true; - return expected === actual || arrayItemTypeMap[expected] === actual; -}; - const getInput = ({ document, nodeId, @@ -336,7 +305,10 @@ export const getAvailableInputReferences = ({ input.valueType === WorkflowIOValueTypeEnum.any || output.valueType === undefined || output.valueType === WorkflowIOValueTypeEnum.any || - output.valueType === input.valueType + areWorkflowValueTypesCompatible({ + expected: input.valueType, + actual: output.valueType + }) ) .map((output) => ({ ref: { nodeId: node.nodeId, outputKey: output.key }, @@ -352,7 +324,10 @@ export const getAvailableInputReferences = ({ input.valueType === WorkflowIOValueTypeEnum.any || variable.valueType === undefined || variable.valueType === WorkflowIOValueTypeEnum.any || - variable.valueType === input.valueType + areWorkflowValueTypesCompatible({ + expected: input.valueType, + actual: variable.valueType + }) ) .map((variable) => ({ ref: { nodeId: VARIABLE_NODE_ID, outputKey: variable.key }, diff --git a/packages/workflow-core/src/template/automationMeta.ts b/packages/workflow-core/src/template/automationMeta.ts index 9350ee622b4d..3787e1963ea1 100644 --- a/packages/workflow-core/src/template/automationMeta.ts +++ b/packages/workflow-core/src/template/automationMeta.ts @@ -90,8 +90,9 @@ const automationMetaMap: Record = { 'builtin:text-editor': { inputs: { system_textareaInput: { - agentHint: 'workflow:cli.input.text_editor', - examples: ['Hello {{name}}'] + agentHint: + 'workflow:cli.input.text_editor. This is a literal text field. Use {{name}} only for a global variable, and use {{$nodeId.outputKey$}} for a node output embedded in text. Never use {{nodeId.outputKey}} for a node reference.', + examples: ['Plain text', 'Hello {{name}}', 'Topic: {{$validateCode.topic$}}'] } } }, diff --git a/packages/workflow-core/src/template/descriptor.ts b/packages/workflow-core/src/template/descriptor.ts index 9d7366c4d751..223477962535 100644 --- a/packages/workflow-core/src/template/descriptor.ts +++ b/packages/workflow-core/src/template/descriptor.ts @@ -2,7 +2,9 @@ import { FlowNodeInputTypeEnum, FlowNodeOutputTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; +import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants'; import type { FlowNodeTemplateType } from '@fastgpt/global/core/workflow/type/node'; +import { getWorkflowReferenceSourceValueTypes } from '@fastgpt/global/core/workflow/utils'; import type { NodeTemplateAutomationMeta, NodeTemplateRef, @@ -25,6 +27,9 @@ export type NodeParameterDescriptor = { bindingRequired: boolean; configurable: boolean; inputModes: NodeParameterInputMode[]; + referencePolicy?: { + acceptedSourceValueTypes: WorkflowIOValueTypeEnum[]; + }; enum?: Array<{ label?: string; value: string; description?: string }>; constraints?: { min?: number; @@ -100,6 +105,7 @@ export const normalizeNodeTemplateDescriptor = ({ .filter((input) => input.deprecated !== true) .map((input) => { const meta = automationMeta?.inputs?.[input.key]; + const inputModes = meta?.inputModes ?? getInputModes(input.renderTypeList); const constraints = { min: input.min, max: input.max, @@ -130,7 +136,12 @@ export const normalizeNodeTemplateDescriptor = ({ (input.canEdit !== false && !input.renderTypeList.includes(FlowNodeInputTypeEnum.hidden) && !input.renderTypeList.includes(FlowNodeInputTypeEnum.addInputParam)), - inputModes: meta?.inputModes ?? getInputModes(input.renderTypeList), + inputModes, + referencePolicy: inputModes.includes('reference') + ? { + acceptedSourceValueTypes: getWorkflowReferenceSourceValueTypes(input.valueType) + } + : undefined, enum: input.list?.map((item) => ({ ...item, label: item.label ? translate(item.label) : undefined, diff --git a/packages/workflow-core/src/template/instantiate.ts b/packages/workflow-core/src/template/instantiate.ts index 4ef50ca5ac85..33beafc0171d 100644 --- a/packages/workflow-core/src/template/instantiate.ts +++ b/packages/workflow-core/src/template/instantiate.ts @@ -7,9 +7,9 @@ import { StoreNodeItemTypeSchema, type StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node'; +import { areWorkflowValueTypesCompatible } from '@fastgpt/global/core/workflow/utils'; import type { WorkflowDocument } from '../domain/document'; import { WorkflowCommandError, type WorkflowDiagnostic } from '../domain/diagnostic'; -import { areWorkflowValueTypesCompatible } from '../reference/service'; import { hasConfiguredValue, resolveInitialInputValue } from './defaultValue'; import type { NodeTemplateRef, WorkflowTemplateProvider } from './type'; @@ -117,15 +117,13 @@ export const instantiateNodeFromTemplate = async ({ if (input.key === NodeInputKeyEnum.userChatInput && userInputOutput) { return { value: [startNode.nodeId, userInputOutput.key], - outputs: [userInputOutput], - collection: false + outputs: [userInputOutput] }; } if (input.key === NodeInputKeyEnum.fileUrlList && userFilesOutput) { return { value: [[startNode.nodeId, userFilesOutput.key]], - outputs: [userFilesOutput], - collection: true + outputs: [userFilesOutput] }; } if (input.key === NodeInputKeyEnum.datasetSearchInput && userInputOutput) { @@ -134,8 +132,7 @@ export const instantiateNodeFromTemplate = async ({ [startNode.nodeId, userInputOutput.key], ...(userFilesOutput ? [[startNode.nodeId, userFilesOutput.key]] : []) ], - outputs: [userInputOutput, ...(userFilesOutput ? [userFilesOutput] : [])], - collection: true + outputs: [userInputOutput, ...(userFilesOutput ? [userFilesOutput] : [])] }; } })(); @@ -144,8 +141,7 @@ export const instantiateNodeFromTemplate = async ({ !referenceDefault.outputs.every((output) => areWorkflowValueTypesCompatible({ expected: input.valueType, - actual: output.valueType, - collection: referenceDefault.collection + actual: output.valueType }) ) ) { diff --git a/packages/workflow-core/src/validation/index.ts b/packages/workflow-core/src/validation/index.ts index fc5a69db3380..b63acd874f1c 100644 --- a/packages/workflow-core/src/validation/index.ts +++ b/packages/workflow-core/src/validation/index.ts @@ -6,13 +6,14 @@ import { isNestedParentNodeType } from '@fastgpt/global/core/workflow/node/constant'; import type { StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node'; +import { areWorkflowValueTypesCompatible } from '@fastgpt/global/core/workflow/utils'; import { WorkflowDocumentSchema, type WorkflowDocument } from '../domain/document'; import { WorkflowCommandError, type WorkflowDiagnostic } from '../domain/diagnostic'; import { assertExecutionEdge } from '../edge/service'; import { LoopRunModeEnum } from '@fastgpt/global/core/workflow/template/system/loopRun/loopRun'; import { VariableConditionEnum } from '@fastgpt/global/core/workflow/template/system/ifElse/constant'; import { assertParentAssignment } from '../nesting/service'; -import { areWorkflowValueTypesCompatible, valueMatchesType } from '../reference/service'; +import { valueMatchesType } from '../reference/service'; import { getInputAutomationMeta } from '../template/automationMeta'; import { inputValueNeedsSchema, valueMatchesSchema } from '../template/valueSchema'; @@ -67,8 +68,6 @@ const validateReference = ({ }); return; } - const collection = !isReferenceValue(input.value); - for (const [sourceNodeId, outputKey] of references) { if (sourceNodeId === VARIABLE_NODE_ID) { const variable = document.chatConfig.variables?.find((item) => item.key === outputKey); @@ -83,8 +82,7 @@ const validateReference = ({ } else if ( !areWorkflowValueTypesCompatible({ expected: input.valueType, - actual: variable.valueType, - collection + actual: variable.valueType }) ) { diagnostics.push({ @@ -115,8 +113,7 @@ const validateReference = ({ if ( !areWorkflowValueTypesCompatible({ expected: input.valueType, - actual: sourceOutput.valueType, - collection + actual: sourceOutput.valueType }) ) { diagnostics.push({ diff --git a/packages/workflow-core/test/command/changeSet.test.ts b/packages/workflow-core/test/command/changeSet.test.ts new file mode 100644 index 000000000000..5003007200e4 --- /dev/null +++ b/packages/workflow-core/test/command/changeSet.test.ts @@ -0,0 +1,90 @@ +import staticWorkflowFixture from '../fixtures/basic-static/workflow.json'; +import { + WORKFLOW_CHANGESET_SCHEMA_VERSION, + WorkflowDocumentSchema, + applyWorkflowChangeSet, + applyWorkflowCommand, + builtinTemplateProvider, + getWorkflowChecksum, + normalizeWorkflowDocument, + planWorkflowChangeSet, + type WorkflowChangeSet +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +const dependencies = { templateProvider: builtinTemplateProvider }; + +const createChangeSet = async ( + commands: WorkflowChangeSet['commands'], + document = WorkflowDocumentSchema.parse(staticWorkflowFixture) +): Promise => ({ + schemaVersion: WORKFLOW_CHANGESET_SCHEMA_VERSION, + baseChecksum: await getWorkflowChecksum(document), + commands +}); + +describe('WorkflowChangeSet', () => { + it('keeps a one-command ChangeSet equivalent to the command dispatcher', async () => { + const document = WorkflowDocumentSchema.parse(staticWorkflowFixture); + const command = { type: 'meta.update', name: 'Changed' } as const; + const changeSetResult = await applyWorkflowChangeSet({ + document, + changeSet: await createChangeSet([command], document), + dependencies + }); + const commandResult = await applyWorkflowCommand({ document, command, dependencies }); + expect(normalizeWorkflowDocument(changeSetResult.document)).toEqual( + normalizeWorkflowDocument(commandResult.document) + ); + }); + + it('applies multiple commands in memory and returns a versioned plan', async () => { + const document = WorkflowDocumentSchema.parse(staticWorkflowFixture); + const changeSet = await createChangeSet( + [ + { type: 'meta.update', name: 'Batch changed' }, + { + type: 'input.set', + nodeId: 'text', + inputKey: 'system_textareaInput', + value: 'Changed by ChangeSet' + } + ], + document + ); + const result = await planWorkflowChangeSet({ document, changeSet, dependencies }); + expect(result.plan).toMatchObject({ + schemaVersion: 'fastgpt-workflow-plan/v1', + baseChecksum: changeSet.baseChecksum, + targetChecksum: result.plan.targetChecksum, + changes: [{ type: 'meta.update' }, { type: 'input.set', nodeId: 'text' }] + }); + expect(result.document.app.name).toBe('Batch changed'); + expect(document.app.name).not.toBe('Batch changed'); + }); + + it('rejects a stale base checksum before executing commands', async () => { + const document = WorkflowDocumentSchema.parse(staticWorkflowFixture); + const changeSet = await createChangeSet([{ type: 'meta.update', name: 'Changed' }], document); + changeSet.baseChecksum = `sha256:${'0'.repeat(64)}`; + await expect( + applyWorkflowChangeSet({ document, changeSet, dependencies }) + ).rejects.toMatchObject({ + diagnostics: [expect.objectContaining({ code: 'WORKFLOW_BASE_CHECKSUM_MISMATCH' })] + }); + expect(document.app.name).not.toBe('Changed'); + }); + + it('does not expose a partially changed document when a later command fails', async () => { + const document = WorkflowDocumentSchema.parse(staticWorkflowFixture); + const changeSet = await createChangeSet( + [ + { type: 'meta.update', name: 'Should roll back' }, + { type: 'node.remove', nodeId: 'missing-node' } + ], + document + ); + await expect(applyWorkflowChangeSet({ document, changeSet, dependencies })).rejects.toThrow(); + expect(document.app.name).not.toBe('Should roll back'); + }); +}); diff --git a/packages/workflow-core/test/domain/checksum.test.ts b/packages/workflow-core/test/domain/checksum.test.ts new file mode 100644 index 000000000000..85897eacf7f8 --- /dev/null +++ b/packages/workflow-core/test/domain/checksum.test.ts @@ -0,0 +1,29 @@ +import { createWorkflowDocument, getWorkflowChecksum, normalizeWorkflowDocument } from '../../src'; +import { describe, expect, it } from 'vitest'; + +describe('canonical workflow checksum', () => { + it('uses SHA-256 over canonical UTF-8 JSON', async () => { + const document = createWorkflowDocument(); + expect(JSON.stringify(normalizeWorkflowDocument(document))).toBe( + '{"schemaVersion":"fastgpt-workflow/v1","app":{},"nodes":[],"executionEdges":[],"chatConfig":{}}' + ); + expect(await getWorkflowChecksum(document)).toBe( + 'sha256:f22ba5bcf46d3006db695d6fe21e290c0321357c294d74b9c2b726c3fac4e5cd' + ); + }); + + it('normalizes object key order without changing array semantics', async () => { + const left = createWorkflowDocument({ + app: { name: 'Demo', intro: 'Intro' }, + chatConfig: { variables: [] } + }); + const right = { + chatConfig: left.chatConfig, + executionEdges: left.executionEdges, + nodes: left.nodes, + app: { intro: left.app.intro, name: left.app.name }, + schemaVersion: left.schemaVersion + }; + expect(await getWorkflowChecksum(left)).toBe(await getWorkflowChecksum(right)); + }); +}); diff --git a/packages/workflow-core/test/domain/document.test.ts b/packages/workflow-core/test/domain/document.test.ts new file mode 100644 index 000000000000..269a6f7aca50 --- /dev/null +++ b/packages/workflow-core/test/domain/document.test.ts @@ -0,0 +1,26 @@ +import { + WORKFLOW_DOCUMENT_MIGRATION_GUIDANCE, + WORKFLOW_DOCUMENT_SCHEMA_VERSION, + WorkflowDocumentVersionError, + createWorkflowDocument, + parseCompatibleWorkflowDocument +} from '../../src'; +import { describe, expect, it } from 'vitest'; + +describe('WorkflowDocument compatibility', () => { + it('accepts the current schema version', () => { + const document = createWorkflowDocument(); + expect(parseCompatibleWorkflowDocument(document).schemaVersion).toBe( + WORKFLOW_DOCUMENT_SCHEMA_VERSION + ); + }); + + it.each([undefined, 'fastgpt-workflow/v0', 'fastgpt-workflow/v2'])( + 'rejects unsupported schemaVersion %s without silently rewriting it', + (schemaVersion) => { + const input = { ...createWorkflowDocument(), schemaVersion }; + expect(() => parseCompatibleWorkflowDocument(input)).toThrow(WorkflowDocumentVersionError); + expect(WORKFLOW_DOCUMENT_MIGRATION_GUIDANCE).toContain('migrate one version at a time'); + } + ); +}); diff --git a/packages/workflow-core/test/reference/service.test.ts b/packages/workflow-core/test/reference/service.test.ts index e7c39f4fb3d1..c8c2b2097965 100644 --- a/packages/workflow-core/test/reference/service.test.ts +++ b/packages/workflow-core/test/reference/service.test.ts @@ -1,10 +1,14 @@ import { + VARIABLE_NODE_ID, + VariableInputEnum, WorkflowCommandError, WorkflowDocumentSchema, WorkflowIOValueTypeEnum, areWorkflowValueTypesCompatible, + getAvailableInputReferences, setInputReference, - setInputValue + setInputValue, + validateWorkflow } from '../../src'; import aiWorkflow from '../fixtures/basic-ai/workflow.json'; import { beforeEach, describe, expect, it } from 'vitest'; @@ -59,13 +63,44 @@ describe('input mutation services', () => { ref: { nodeId: 'start', outputKey: 'missing' } }) ).toThrow(WorkflowCommandError); - expect(() => - setInputReference({ - document, - nodeId: 'ai', - inputKey: 'fileUrlList', - ref: { nodeId: 'start', outputKey: 'userChatInput' } + setInputReference({ + document, + nodeId: 'ai', + inputKey: 'fileUrlList', + ref: { nodeId: 'start', outputKey: 'userChatInput' } + }); + expect(document.nodes.find((node) => node.nodeId === 'ai')?.inputs).toContainEqual( + expect.objectContaining({ + key: 'fileUrlList', + value: ['start', 'userChatInput'] + }) + ); + document.chatConfig.variables = [ + { + key: 'fileUrl', + label: 'File URL', + description: '', + type: VariableInputEnum.input, + valueType: WorkflowIOValueTypeEnum.string + } + ]; + setInputReference({ + document, + nodeId: 'ai', + inputKey: 'fileUrlList', + ref: { nodeId: VARIABLE_NODE_ID, outputKey: 'fileUrl' } + }); + expect(document.nodes.find((node) => node.nodeId === 'ai')?.inputs).toContainEqual( + expect.objectContaining({ + key: 'fileUrlList', + value: [VARIABLE_NODE_ID, 'fileUrl'] }) + ); + expect(validateWorkflow(document).map((diagnostic) => diagnostic.code)).not.toContain( + 'WORKFLOW_REFERENCE_TYPE_MISMATCH' + ); + expect(() => + setInputValue({ document, nodeId: 'ai', inputKey: 'fileUrlList', value: 'not-an-array' }) ).toThrow(WorkflowCommandError); expect(() => setInputReference({ @@ -75,16 +110,34 @@ describe('input mutation services', () => { ref: { nodeId: 'ai', outputKey: 'answerText' } }) ).toThrow(WorkflowCommandError); + + expect( + getAvailableInputReferences({ + document, + nodeId: 'ai', + inputKey: 'fileUrlList' + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + ref: { nodeId: 'start', outputKey: 'userChatInput' }, + valueType: WorkflowIOValueTypeEnum.string + }), + expect.objectContaining({ + ref: { nodeId: VARIABLE_NODE_ID, outputKey: 'fileUrl' }, + valueType: WorkflowIOValueTypeEnum.string + }) + ]) + ); }); }); describe('areWorkflowValueTypesCompatible', () => { - it('accepts scalar items only for aggregate references', () => { + it('accepts scalar items for array references without widening reverse types', () => { expect( areWorkflowValueTypesCompatible({ expected: WorkflowIOValueTypeEnum.arrayString, - actual: WorkflowIOValueTypeEnum.string, - collection: true + actual: WorkflowIOValueTypeEnum.string }) ).toBe(true); expect( @@ -92,13 +145,30 @@ describe('areWorkflowValueTypesCompatible', () => { expected: WorkflowIOValueTypeEnum.arrayString, actual: WorkflowIOValueTypeEnum.string }) - ).toBe(false); + ).toBe(true); expect( areWorkflowValueTypesCompatible({ expected: WorkflowIOValueTypeEnum.arrayString, - actual: WorkflowIOValueTypeEnum.number, - collection: true + actual: WorkflowIOValueTypeEnum.arrayString + }) + ).toBe(true); + expect( + areWorkflowValueTypesCompatible({ + expected: WorkflowIOValueTypeEnum.arrayString, + actual: WorkflowIOValueTypeEnum.number + }) + ).toBe(false); + expect( + areWorkflowValueTypesCompatible({ + expected: WorkflowIOValueTypeEnum.string, + actual: WorkflowIOValueTypeEnum.arrayString }) ).toBe(false); + expect( + areWorkflowValueTypesCompatible({ + expected: WorkflowIOValueTypeEnum.arrayAny, + actual: WorkflowIOValueTypeEnum.string + }) + ).toBe(true); }); }); diff --git a/packages/workflow-core/test/store/roundtrip.test.ts b/packages/workflow-core/test/store/roundtrip.test.ts index f280f89eaf64..d97003c2c11c 100644 --- a/packages/workflow-core/test/store/roundtrip.test.ts +++ b/packages/workflow-core/test/store/roundtrip.test.ts @@ -41,14 +41,14 @@ describe('StoreWorkflow round-trip', () => { expect(validateWorkflow(document)).toEqual([]); }); - it('computes the same checksum regardless of node and edge order', () => { + it('computes the same checksum regardless of node and edge order', async () => { const parsedWorkflow = WorkflowDocumentSchema.parse(aiWorkflow); const reversed = { ...parsedWorkflow, nodes: [...parsedWorkflow.nodes].reverse(), executionEdges: [...parsedWorkflow.executionEdges].reverse() }; - expect(getWorkflowChecksum(parsedWorkflow)).toBe(getWorkflowChecksum(reversed)); + expect(await getWorkflowChecksum(parsedWorkflow)).toBe(await getWorkflowChecksum(reversed)); }); it('compiles semantic output keys to Store output ids and decompiles them back', () => { diff --git a/packages/workflow-core/test/template/template.test.ts b/packages/workflow-core/test/template/template.test.ts index a8ab770d864c..f8bc0a886209 100644 --- a/packages/workflow-core/test/template/template.test.ts +++ b/packages/workflow-core/test/template/template.test.ts @@ -57,6 +57,23 @@ describe('builtinTemplateProvider', () => { ).toBe(false); }); + it('documents distinct text and node-reference formats for text editor inputs', async () => { + const ref = parseNodeTemplateRef('builtin:text-editor'); + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + const descriptor = normalizeNodeTemplateDescriptor({ + ...resolved, + templateRef: ref + }); + const input = descriptor.inputs.find((item) => item.key === 'system_textareaInput'); + + expect(input?.examples).toEqual([ + 'Plain text', + 'Hello {{name}}', + 'Topic: {{$validateCode.topic$}}' + ]); + expect(input?.description).toContain('Never use {{nodeId.outputKey}} for a node reference.'); + }); + it('keeps automation metadata aligned with template inputs and explicit for resources', async () => { const resourceRenderTypes = new Map([ [FlowNodeInputTypeEnum.selectDataset, 'dataset'], @@ -134,6 +151,14 @@ describe('builtinTemplateProvider', () => { ); expect(input.inputModes.length, `${templateName}.${input.key}`).toBeGreaterThan(0); } + if (input.inputModes.includes('reference')) { + expect( + input.referencePolicy?.acceptedSourceValueTypes.length, + `${templateName}.${input.key}` + ).toBeGreaterThan(0); + } else { + expect(input.referencePolicy, `${templateName}.${input.key}`).toBeUndefined(); + } if ( input.configurable && input.inputModes.includes('literal') && @@ -166,6 +191,9 @@ describe('normalizeNodeTemplateDescriptor', () => { expect(descriptor.name).toMatch(/^translated:/); expect(descriptor.schemaVersion).toBe('fastgpt-workflow-node-contract/v1'); expect(userInput?.inputModes).toEqual(['literal', 'reference']); + expect(userInput?.referencePolicy?.acceptedSourceValueTypes).toEqual( + expect.arrayContaining([WorkflowIOValueTypeEnum.string, WorkflowIOValueTypeEnum.any]) + ); expect(promptInput?.examples).toEqual(['You are a helpful assistant.']); expect(modelInput).toMatchObject({ defaultPolicy: 'remoteValidated', @@ -182,6 +210,27 @@ describe('normalizeNodeTemplateDescriptor', () => { expect(JSON.stringify(resolved.template)).not.toContain('invalidCondition'); }); + it('publishes the same scalar-to-array reference contract used by the editor', async () => { + const ref = parseNodeTemplateRef('builtin:dataset-search'); + const resolved = await builtinTemplateProvider.resolve(ref, { locale: 'en' }); + const descriptor = normalizeNodeTemplateDescriptor({ ...resolved, templateRef: ref }); + const searchInput = descriptor.inputs.find( + (input) => input.valueType === WorkflowIOValueTypeEnum.arrayString + ); + + expect(searchInput).toMatchObject({ + inputModes: expect.arrayContaining(['reference']), + referencePolicy: { + acceptedSourceValueTypes: [ + WorkflowIOValueTypeEnum.string, + WorkflowIOValueTypeEnum.arrayString, + WorkflowIOValueTypeEnum.arrayAny, + WorkflowIOValueTypeEnum.any + ] + } + }); + }); + it('describes branch, terminal, container and dynamic IO capabilities', async () => { const getDescriptor = async (templateId: string) => { const ref = parseNodeTemplateRef(`builtin:${templateId}`); @@ -322,7 +371,7 @@ describe('instantiateNodeFromTemplate', () => { expect(localModel?.defaultValue).toBeUndefined(); }); - it('does not create a mismatched Start reference for an array input', async () => { + it('keeps the scalar Start reference for an array input', async () => { const start = await instantiateNodeFromTemplate({ document: createWorkflowDocument(), templateRef: parseNodeTemplateRef('builtin:workflow-start'), @@ -349,8 +398,10 @@ describe('instantiateNodeFromTemplate', () => { locale: 'en' }); const userInput = ai.node.inputs.find((input) => input.key === 'userChatInput'); - expect(userInput?.value).toEqual([]); - expect(userInput?.selectedTypeIndex).toBeUndefined(); + expect(userInput?.value).toEqual(['start', 'userChatInput']); + expect(userInput?.selectedTypeIndex).toBe( + userInput?.renderTypeList.indexOf(FlowNodeInputTypeEnum.reference) + ); }); it('keeps the composite Start reference for the array search input', async () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d70f61f6cf1e..36d4a5dd8f47 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -921,17 +921,13 @@ importers: version: 18.3.0 packages/workflow-cli: - dependencies: + devDependencies: '@fastgpt/web': specifier: workspace:* version: link:../web '@fastgpt/workflow-core': specifier: workspace:* version: link:../workflow-core - zod: - specifier: 'catalog:' - version: 4.1.12 - devDependencies: '@types/node': specifier: 'catalog:' version: 20.17.24 @@ -947,6 +943,9 @@ importers: vitest: specifier: 'catalog:' version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@20.17.24)(@vitest/coverage-v8@4.1.5)(jsdom@26.1.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@6.2.2(@types/node@20.17.24)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.85.1)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.4)) + zod: + specifier: 'catalog:' + version: 4.1.12 packages/workflow-core: dependencies: @@ -1005,6 +1004,9 @@ importers: '@fastgpt-sdk/otel': specifier: workspace:* version: link:../../sdk/otel + '@fastgpt-sdk/sandbox-adapter': + specifier: workspace:* + version: link:../../sdk/sandbox-adapter '@fastgpt-sdk/storage': specifier: workspace:* version: link:../../sdk/storage @@ -1023,6 +1025,9 @@ importers: '@fastgpt/web': specifier: workspace:* version: link:../../packages/web + '@fastgpt/workflow-core': + specifier: workspace:* + version: link:../../packages/workflow-core '@kubernetes/client-node': specifier: ^1.4.0 version: 1.4.0(bufferutil@4.1.0)(encoding@0.1.13)(utf-8-validate@5.0.10) diff --git a/pro b/pro index f89709447d69..54c2eff0e201 160000 --- a/pro +++ b/pro @@ -1 +1 @@ -Subproject commit f89709447d69bb1a7a94459fa7e23ee2a1f668ab +Subproject commit 54c2eff0e201c0ba18f672f4be3cfc2467b08c04 diff --git a/projects/app/Dockerfile b/projects/app/Dockerfile index 292eeac6f2de..fa89934e1883 100644 --- a/projects/app/Dockerfile +++ b/projects/app/Dockerfile @@ -46,6 +46,7 @@ ENV NEXT_PUBLIC_BASE_URL=$base_url # Build SDK workspace packages first so subpath exports like # @fastgpt-sdk/otel/logger have generated dist type files. RUN pnpm build:sdks +RUN pnpm --filter @fastgpt/workflow-core build RUN pnpm --filter=app build # Remove build-time-only packages from standalone output before copying to runner. diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/hooks/useChatGenerate.ts b/projects/app/src/components/core/chat/ChatContainer/ChatBox/hooks/useChatGenerate.ts index 0aebf7b5bf5d..a86813d64871 100644 --- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/hooks/useChatGenerate.ts +++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/hooks/useChatGenerate.ts @@ -84,6 +84,7 @@ type QueuedGeneratingMessage = generatingMessageProps & { type UseChatGenerateProps = { onStartChat?: (e: StartChatFnProps) => Promise<{ responseText: string; isNewChat?: boolean }>; + onStreamMessage?: (message: generatingMessageProps) => void; isRoundPending: boolean; chatControllerRef: MutableRefObject; questionGuideControllerRef: MutableRefObject; @@ -128,6 +129,7 @@ const isAbortByLeave = (reason: unknown) => { */ export const useChatGenerate = ({ onStartChat, + onStreamMessage, isRoundPending, chatControllerRef, questionGuideControllerRef, @@ -594,6 +596,8 @@ export const useChatGenerate = ({ const generatingMessage = useMemoizedFn( (message: generatingMessageProps & { autoTTSResponse?: boolean }) => { + onStreamMessage?.(message); + if (message.event === SseResponseEventEnum.chatTitle && message.title) { setChatBoxData((state) => state.sourceKey === sourceKey && state.chatId === chatId diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/index.tsx b/projects/app/src/components/core/chat/ChatContainer/ChatBox/index.tsx index 81bb02165e5c..04de7a1df34c 100644 --- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/index.tsx +++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/index.tsx @@ -85,6 +85,8 @@ type Props = OutLinkChatAuthProps & isNewChat?: boolean; } >; + /** 监听普通生成和恢复生成的原始 SSE 消息,不介入 ChatBox 内部渲染。 */ + onStreamMessage?: (message: Parameters[0]) => void; onTriggerRefresh?: () => void; /** 已读标记由外部页面注入,ChatBox 不直接耦合普通 App history 接口。 */ onMarkChatRead?: (data: MarkChatReadBodyType) => Promise; @@ -139,6 +141,7 @@ const ChatBox = ({ active = true, disabledSendTip, onStartChat, + onStreamMessage, chatType, onTriggerRefresh, onMarkChatRead, @@ -349,6 +352,7 @@ const ChatBox = ({ const { abortRequest, flushGeneratingMessages, generatingMessage, sendPrompt } = useChatGenerate({ onStartChat, + onStreamMessage, isRoundPending, chatControllerRef: chatController, questionGuideControllerRef: questionGuideController, diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/utils/resume.ts b/projects/app/src/components/core/chat/ChatContainer/ChatBox/utils/resume.ts index e98e8ba8cf00..cc6d22f2f602 100644 --- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/utils/resume.ts +++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/utils/resume.ts @@ -40,6 +40,7 @@ export const shouldCreateResumeAiPlaceholder = (event: string) => { SseResponseEventEnum.interactive, SseResponseEventEnum.plan, SseResponseEventEnum.planStatus, + SseResponseEventEnum.workflowBuilderApplied, SseResponseEventEnum.workflowDuration ]).has(event); }; diff --git a/projects/app/src/components/core/chat/ChatContainer/type.ts b/projects/app/src/components/core/chat/ChatContainer/type.ts index 61278cc7946d..0119c0c73205 100644 --- a/projects/app/src/components/core/chat/ChatContainer/type.ts +++ b/projects/app/src/components/core/chat/ChatContainer/type.ts @@ -12,6 +12,7 @@ import type { WorkflowInteractiveResponseType } from '@fastgpt/global/core/workf import type { ChatAgentConfigFormDataType } from '@fastgpt/global/core/ai/auxiliaryGeneration/type'; import type { AuxiliaryGenerationEventEnum } from '@fastgpt/global/core/ai/auxiliaryGeneration/constants'; import type { AgentPlanStatusType, AgentPlanType } from '@fastgpt/global/core/ai/agent/type'; +import type { WorkflowBuilderApplied } from '@fastgpt/global/openapi/core/workflow/builder/api'; type BaseGeneratingMessageProps = { responseValueId?: string; @@ -33,6 +34,7 @@ type BaseGeneratingMessageProps = { // Sandbox sandboxStatus?: SandboxStatusItemType; skill?: SkillModuleResponseItemType; + workflowBuilderApplied?: WorkflowBuilderApplied; formData?: ChatAgentConfigFormDataType; }; diff --git a/projects/app/src/pageComponents/app/detail/Workflow/index.tsx b/projects/app/src/pageComponents/app/detail/Workflow/index.tsx index 0e1f2f86056a..e7e22d80892c 100644 --- a/projects/app/src/pageComponents/app/detail/Workflow/index.tsx +++ b/projects/app/src/pageComponents/app/detail/Workflow/index.tsx @@ -13,6 +13,7 @@ import { cloneDeep } from 'lodash-es'; import Flow from '../WorkflowComponents/Flow'; import { ReactFlowCustomProvider } from '../WorkflowComponents/context/index'; import { WorkflowUtilsContext } from '../WorkflowComponents/context/workflowUtilsContext'; +import WorkflowBuilder from '../WorkflowComponents/WorkflowBuilder'; const Logs = dynamic(() => import('../Logs/index')); const PublishChannel = dynamic(() => import('../Publish')); @@ -38,7 +39,10 @@ const WorkflowEdit = () => {

{currentTab === TabEnum.appEdit ? ( - + <> + + + ) : ( { const { t } = useTranslation(); - const menu = useContextSelector(WorkflowUIContext, (v) => v.menu!); + const menu = useContextSelector(WorkflowUIContext, (v) => v.menu); const setMenu = useContextSelector(WorkflowUIContext, (ctx) => ctx.setMenu); const { setNodes, setEdges, allNodeFolded } = useContextSelector( WorkflowBufferDataContext, @@ -343,6 +344,8 @@ const ContextMenu = () => { }); }, [fitView, getNodes, getParentNodeSizeAndPosition, setEdges, setNodes]); + useEffect(() => registerWorkflowAutoLayout(onLayout), [onLayout]); + const onAddComment = useCallback(() => { // Compensate for menu position offset (set in onPaneContextMenu) // menu.left = e.clientX - 12, menu.top = e.clientY + 6 @@ -419,6 +422,8 @@ const ContextMenu = () => { [setMenu] ); + if (!menu) return null; + return ( { const nodes = useContextSelector(WorkflowInitContext, (v) => v.nodes); const edges = useContextSelector(WorkflowBufferDataContext, (v) => v.edges); const helperLinesRef = useRef(null); - const { reactFlowWrapperCallback, workflowControlMode, menu } = useContextSelector( + const { reactFlowWrapperCallback, workflowControlMode } = useContextSelector( WorkflowUIContext, (v) => v ); @@ -217,7 +217,7 @@ const Workflow = () => { setMovingCanvas(false); }} > - {!!menu && } + diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/utils/workflowAutoLayout.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/utils/workflowAutoLayout.ts new file mode 100644 index 000000000000..36aed0649d35 --- /dev/null +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/utils/workflowAutoLayout.ts @@ -0,0 +1,17 @@ +type WorkflowAutoLayoutHandler = () => void; + +const handlers = new Set(); + +/** 注册当前画布的布局能力,供画布外的 Builder 等入口复用。 */ +export const registerWorkflowAutoLayout = (handler: WorkflowAutoLayoutHandler) => { + handlers.add(handler); + return () => { + handlers.delete(handler); + }; +}; + +/** 触发当前已挂载工作流画布的统一自动布局。 */ +export const requestWorkflowAutoLayout = () => { + handlers.forEach((handler) => handler()); + return handlers.size > 0; +}; diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/ChatPanel.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/ChatPanel.tsx new file mode 100644 index 000000000000..2e7dabc65ff5 --- /dev/null +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/ChatPanel.tsx @@ -0,0 +1,286 @@ +import React, { useEffect, useImperativeHandle, useMemo } from 'react'; +import { Box } from '@chakra-ui/react'; +import { useContextSelector } from 'use-context-selector'; +import { useLocalStorageState, useMemoizedFn } from 'ahooks'; +import ChatBox from '@/components/core/chat/ChatContainer/ChatBox'; +import { ChatTypeEnum } from '@/components/core/chat/ChatContainer/ChatBox/constants'; +import type { + StartChatFnProps, + generatingMessageProps +} from '@/components/core/chat/ChatContainer/type'; +import ChatItemContextProvider, { ChatItemContext } from '@/web/core/chat/context/chatItemContext'; +import ChatRecordContextProvider from '@/web/core/chat/context/chatRecordContext'; +import ChatAIModelSelector from '@/pageComponents/chat/ChatWindow/ChatAIModelSelector'; +import { useSystemStore } from '@/web/common/system/useSystemStore'; +import { useUserStore } from '@/web/support/user/useUserStore'; +import { useChatStore } from '@/web/core/chat/context/useChatStore'; +import { getChatSourceKey, type ChatSourceTarget } from '@/web/core/chat/utils'; +import { getInitChatInfo } from '@/web/core/chat/api'; +import { useRequest } from '@fastgpt/web/hooks/useRequest'; +import { ChatSourceTypeEnum } from '@fastgpt/global/core/chat/constants'; +import type { AppDetailType } from '@fastgpt/global/core/app/type'; +import { WORKFLOW_BUILDER_CHAT_CONFIG } from '@fastgpt/global/core/workflow/builder/constants'; +import { WorkflowBufferDataContext } from '../context/workflowInitContext'; +import { + appDetailToWorkflowDocumentApp, + reactFlowStateToWorkflowDocument +} from '../adapters/document'; +import { + WorkflowBuilderAppliedSchema, + type WorkflowBuilderApplied +} from '@fastgpt/global/openapi/core/workflow/builder/api'; +import { getWorkflowChecksum } from '@fastgpt/workflow-core'; +import { clearWorkflowBuilderChatHistory, streamWorkflowBuilderChat } from './api'; + +export type WorkflowBuilderChatPanelRef = { + clearHistory: () => Promise; +}; + +const WorkflowBuilderChatContent = ({ + appId, + appDetail, + chatId, + sourceTarget, + onWorkflowApplied, + onRestart, + chatPanelRef +}: { + appId: string; + appDetail: AppDetailType; + chatId: string; + sourceTarget: ChatSourceTarget; + onWorkflowApplied: (result: WorkflowBuilderApplied) => Promise; + onRestart: () => void; + chatPanelRef: React.ForwardedRef; +}) => { + const { llmModelList, defaultModels } = useSystemStore(); + const sourceKey = useMemo(() => getChatSourceKey(sourceTarget), [sourceTarget]); + const setChatBoxData = useContextSelector(ChatItemContext, (value) => value.setChatBoxData); + const clearChatRecords = useContextSelector(ChatItemContext, (value) => value.clearChatRecords); + const getNodes = useContextSelector(WorkflowBufferDataContext, (value) => value.getNodes); + const edges = useContextSelector(WorkflowBufferDataContext, (value) => value.edges); + const modelList = useMemo( + () => llmModelList.map((model) => ({ label: model.name, value: model.model })), + [llmModelList] + ); + const defaultModel = defaultModels.llm?.model || llmModelList[0]?.model || ''; + const modelStorageKey = `fastgpt:workflow-builder:model:${appId}`; + const [storedModel, setStoredModel] = useLocalStorageState(modelStorageKey, { + defaultValue: defaultModel + }); + const availableModels = useMemo( + () => new Set(llmModelList.map((model) => model.model)), + [llmModelList] + ); + const selectedModel = + storedModel && availableModels.has(storedModel) ? storedModel : defaultModel; + useImperativeHandle(chatPanelRef, () => ({ + clearHistory: () => + clearWorkflowBuilderChatHistory({ + appId, + chatId, + clearChatRecords, + restartChat: onRestart + }) + })); + + useEffect(() => { + setChatBoxData((previous) => { + const isSameChat = previous.sourceKey === sourceKey && previous.chatId === chatId; + return { + ...previous, + sourceKey, + appId, + chatId, + title: isSameChat ? previous.title : undefined, + chatGenerateStatus: isSameChat ? previous.chatGenerateStatus : undefined, + hasBeenRead: isSameChat ? previous.hasBeenRead : undefined, + app: { + name: appDetail.name, + avatar: appDetail.avatar, + intro: appDetail.intro, + type: appDetail.type, + pluginInputs: [], + chatConfig: WORKFLOW_BUILDER_CHAT_CONFIG + } + }; + }); + }, [appDetail, appId, chatId, setChatBoxData, sourceKey]); + + useRequest( + async () => { + const result = await getInitChatInfo({ + appId, + chatId, + sourceType: ChatSourceTypeEnum.app + }); + setChatBoxData((previous) => ({ + ...previous, + sourceKey, + appId, + chatId: result.chatId || chatId, + title: result.title, + chatGenerateStatus: result.chatGenerateStatus, + hasBeenRead: result.hasBeenRead + })); + }, + { + manual: false, + refreshDeps: [appId, chatId, sourceKey], + errorToast: '' + } + ); + + const onStartChat = useMemoizedFn( + async ({ messages, responseChatItemId, controller, generatingMessage }: StartChatFnProps) => { + const document = reactFlowStateToWorkflowDocument({ + nodes: getNodes(), + edges, + chatConfig: appDetail.chatConfig, + app: appDetailToWorkflowDocumentApp(appDetail) + }); + const checksum = await getWorkflowChecksum(document); + const { responseText } = await streamWorkflowBuilderChat({ + data: { + appId, + chatId, + responseChatItemId, + messages: messages.slice(-1), + model: selectedModel || undefined, + workflowContext: { document, checksum } + }, + onMessage: generatingMessage, + abortCtrl: controller + }); + return { responseText }; + } + ); + + const onStreamMessage = useMemoizedFn((event: generatingMessageProps) => { + if (!event.workflowBuilderApplied) return; + void onWorkflowApplied(WorkflowBuilderAppliedSchema.parse(event.workflowBuilderApplied)); + }); + + const ModelSelector = useMemo( + () => ( + { + setStoredModel(model); + }} + /> + ), + [modelList, selectedModel, setStoredModel] + ); + + return ( + + + + + + ); +}; + +const ChatPanel = React.forwardRef< + WorkflowBuilderChatPanelRef, + { + appId: string; + appDetail: AppDetailType; + onWorkflowApplied: (result: WorkflowBuilderApplied) => Promise; + } +>(({ appId, appDetail, onWorkflowApplied }, ref) => { + const tmbId = useUserStore((state) => state.userInfo?.team?.tmbId ?? ''); + const sourceTarget = useMemo( + () => ({ sourceType: ChatSourceTypeEnum.app, sourceId: appId }), + [appId] + ); + const chatIdCacheKey = useMemo( + () => (tmbId ? `workflow-builder:${getChatSourceKey(sourceTarget)}:${tmbId}` : ''), + [sourceTarget, tmbId] + ); + const chatId = useChatStore((state) => state.sourceChatIdMap[chatIdCacheKey] || ''); + const ensureSourceChatId = useChatStore((state) => state.ensureSourceChatId); + const setSourceChatId = useChatStore((state) => state.setSourceChatId); + + useEffect(() => { + if (chatIdCacheKey && !chatId) ensureSourceChatId(chatIdCacheKey); + }, [chatId, chatIdCacheKey, ensureSourceChatId]); + + const chatRecordProviderParams = useMemo( + () => ({ + chatId, + appId, + sourceType: ChatSourceTypeEnum.app as const + }), + [appId, chatId] + ); + const onRestart = useMemoizedFn(() => { + setSourceChatId(chatIdCacheKey); + }); + + return ( + + {chatId && ( + + + + )} + + ); +}); + +ChatPanel.displayName = 'WorkflowBuilderChatPanel'; + +export default React.memo(ChatPanel); diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/api.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/api.ts new file mode 100644 index 000000000000..852f697d8793 --- /dev/null +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/api.ts @@ -0,0 +1,42 @@ +import { streamRawFetch } from '@/web/common/api/fetch'; +import { batchDeleteChatHistories } from '@/web/core/chat/history/api'; +import { ChatSourceTypeEnum } from '@fastgpt/global/core/chat/constants'; +import type { StartChatFnProps } from '@/components/core/chat/ChatContainer/type'; +import type { WorkflowBuilderChatBody } from '@fastgpt/global/openapi/core/workflow/builder/api'; + +export const streamWorkflowBuilderChat = ({ + data, + onMessage, + abortCtrl +}: { + data: WorkflowBuilderChatBody; + onMessage: StartChatFnProps['generatingMessage']; + abortCtrl: AbortController; +}) => + streamRawFetch({ + url: '/api/proApi/core/workflow/builder/chat', + data, + onMessage, + abortCtrl + }); + +/** 服务端历史删除成功后重建 Builder 会话。 */ +export const clearWorkflowBuilderChatHistory = async ({ + appId, + chatId, + clearChatRecords, + restartChat +}: { + appId: string; + chatId: string; + clearChatRecords: () => void; + restartChat: () => void; +}) => { + await batchDeleteChatHistories({ + appId, + sourceType: ChatSourceTypeEnum.app, + chatIds: [chatId] + }); + clearChatRecords(); + restartChat(); +}; diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/index.tsx new file mode 100644 index 000000000000..f879523c04e0 --- /dev/null +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/index.tsx @@ -0,0 +1,188 @@ +import React, { useRef, useState } from 'react'; +import { Box, Flex, IconButton, Text, useBreakpointValue } from '@chakra-ui/react'; +import { useContextSelector } from 'use-context-selector'; +import { useReactFlow } from 'reactflow'; +import { useTranslation } from 'next-i18next'; +import MyIcon from '@fastgpt/web/components/common/Icon'; +import MyTooltip from '@fastgpt/web/components/common/MyTooltip'; +import { useToast } from '@fastgpt/web/hooks/useToast'; +import { useConfirm } from '@fastgpt/web/hooks/useConfirm'; +import { useSystemStore } from '@/web/common/system/useSystemStore'; +import { removeUnauthModels } from '@fastgpt/global/core/workflow/utils'; +import { AppTypeEnum } from '@fastgpt/global/core/app/constants'; +import { parseWorkflowImportConfig } from '@/pageComponents/dashboard/agent/utils/appTemplateParse'; +import { AppContext } from '../../context'; +import { WorkflowUtilsContext } from '../context/workflowUtilsContext'; +import { + compileStoreWorkflow, + getWorkflowChecksum, + parseCompatibleWorkflowDocument +} from '@fastgpt/workflow-core'; +import type { WorkflowBuilderApplied } from '@fastgpt/global/openapi/core/workflow/builder/api'; +import ChatPanel, { type WorkflowBuilderChatPanelRef } from './ChatPanel'; +import { requestWorkflowAutoLayout } from '../Flow/utils/workflowAutoLayout'; + +const WorkflowBuilder = () => { + const { t } = useTranslation('workflow'); + const { toast } = useToast(); + const { openConfirm, ConfirmModal } = useConfirm({ + type: 'delete', + title: t('workflow_builder_clear_history'), + content: t('workflow_builder_clear_history_confirm') + }); + const { fitView, getNodes } = useReactFlow(); + const feConfigs = useSystemStore((state) => state.feConfigs); + const getMyModelList = useSystemStore((state) => state.getMyModelList); + const appId = useContextSelector(AppContext, (value) => value.appId); + const appDetail = useContextSelector(AppContext, (value) => value.appDetail); + const setAppDetail = useContextSelector(AppContext, (value) => value.setAppDetail); + const initData = useContextSelector(WorkflowUtilsContext, (value) => value.initData); + const [isOpen, setIsOpen] = useState(false); + const chatPanelRef = useRef(null); + const panelWidth = useBreakpointValue({ base: '100%', md: '420px' }) || '420px'; + + const enabled = + !!feConfigs?.isPlus && + !!feConfigs.show_agent_sandbox && + feConfigs.show_workflow_builder !== false && + !!appDetail.permission?.hasWritePer; + if (!enabled) return null; + + /** 将服务端 CLI Apply 后的目标文档导入当前画布,并复用画布统一布局能力。 */ + const onWorkflowApplied = async (result: WorkflowBuilderApplied) => { + try { + const targetDocument = parseCompatibleWorkflowDocument(result.document); + if ((await getWorkflowChecksum(targetDocument)) !== result.checksum) { + throw new Error('Workflow Builder apply response checksum mismatch'); + } + const workflowConfig = parseWorkflowImportConfig({ + config: compileStoreWorkflow(targetDocument), + appType: + appDetail.type === AppTypeEnum.workflowTool + ? AppTypeEnum.workflowTool + : AppTypeEnum.workflow, + t + }); + await removeUnauthModels({ + modules: workflowConfig.nodes, + allowedModels: await getMyModelList() + }); + await initData(workflowConfig); + setAppDetail((current) => ({ + ...current, + name: targetDocument.app?.name ?? current.name, + intro: targetDocument.app?.intro ?? current.intro + })); + + let nodeDimensionsReady = false; + for (let attempt = 0; attempt < 30; attempt += 1) { + await new Promise((resolve) => window.requestAnimationFrame(() => resolve())); + const nodes = getNodes(); + nodeDimensionsReady = nodes.length > 0 && nodes.every((node) => node.width && node.height); + if (nodeDimensionsReady) break; + } + if (!nodeDimensionsReady || !requestWorkflowAutoLayout()) { + fitView({ padding: 0.25 }); + } + toast({ status: 'success', title: t('workflow_builder_applied') }); + } catch (error) { + const errorText = + error instanceof Error + ? error.message + : JSON.stringify(error ?? 'Workflow Builder apply failed'); + toast({ + status: 'warning', + title: t('workflow_builder_apply_failed'), + description: errorText + }); + } + }; + + if (!isOpen) { + return ( + + } + position={'absolute'} + top={'84px'} + right={'20px'} + zIndex={6} + w={'40px'} + h={'40px'} + bg={'white'} + color={'primary.600'} + borderWidth={'1px'} + borderColor={'myGray.200'} + borderRadius={'6px'} + boxShadow={'0 4px 12px rgba(16, 24, 40, 0.12)'} + _hover={{ bg: 'myGray.50' }} + onClick={() => setIsOpen(true)} + /> + + ); + } + + return ( + + + + + {t('workflow_builder_title')} + + + } + variant={'ghost'} + size={'sm'} + color={'myGray.600'} + onClick={() => + openConfirm({ + onConfirm: () => chatPanelRef.current?.clearHistory() + })() + } + /> + + + } + variant={'ghost'} + size={'sm'} + onClick={() => setIsOpen(false)} + /> + + + + + + + + ); +}; + +export default React.memo(WorkflowBuilder); diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/document.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/document.ts index 807a9593fd41..1a2d7bdd4201 100644 --- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/document.ts +++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/adapters/document.ts @@ -1,4 +1,4 @@ -import type { AppChatConfigType } from '@fastgpt/global/core/app/type'; +import type { AppChatConfigType, AppDetailType } from '@fastgpt/global/core/app/type'; import type { FlowNodeItemType } from '@fastgpt/global/core/workflow/type/node'; import { decompileStoreWorkflow, type WorkflowDocument } from '@fastgpt/workflow-core'; import type { Edge, Node } from 'reactflow'; @@ -11,12 +11,25 @@ import { uiWorkflow2StoreWorkflow } from '../utils'; export const reactFlowStateToWorkflowDocument = ({ nodes, edges, - chatConfig = {} + chatConfig = {}, + app }: { nodes: Node[]; edges: Edge[]; chatConfig?: AppChatConfigType; + app?: WorkflowDocument['app']; }): WorkflowDocument => { const storeWorkflow = uiWorkflow2StoreWorkflow({ nodes, edges }); - return decompileStoreWorkflow({ workflow: { ...storeWorkflow, chatConfig } }); + const document = decompileStoreWorkflow({ workflow: { ...storeWorkflow, chatConfig } }); + return app ? { ...document, app: structuredClone(app) } : document; }; + +/** 只投影 WorkflowDocument 领域需要的应用元数据,权限、时间等 Web 状态不进入 checksum。 */ +export const appDetailToWorkflowDocumentApp = ( + appDetail: Pick +): WorkflowDocument['app'] => ({ + appId: String(appDetail._id), + name: appDetail.name, + intro: appDetail.intro, + appType: appDetail.type +}); diff --git a/projects/app/src/web/common/api/fetch.ts b/projects/app/src/web/common/api/fetch.ts index 8434cfe47566..d62927c8d6fc 100644 --- a/projects/app/src/web/common/api/fetch.ts +++ b/projects/app/src/web/common/api/fetch.ts @@ -33,6 +33,7 @@ type StreamFetchProps = { data: Record; onMessage: StartChatFnProps['generatingMessage']; abortCtrl: AbortController; + requestMode?: 'chat' | 'raw'; }; export type StreamResponseType = { responseText: string; @@ -58,6 +59,7 @@ const shouldSendStreamResumeHeader = (url: string) => '/api/proApi/core/chat/chatHome', '/api/core/chat/chatTest', '/api/proApi/core/chat/chatAgentHelper/completions', + '/api/proApi/core/workflow/builder/chat', '/api/core/ai/skill/debugChat', '/api/proApi/core/ai/skill/debugChat' ]).has(url); @@ -125,6 +127,11 @@ export function handleEventSourceData(params: HandleEventSourceDataParams) { break; } + case SseResponseEventEnum.workflowBuilderApplied: { + onmessage({ responseValueId, event, workflowBuilderApplied: obj }); + break; + } + case SseResponseEventEnum.answer: { const reasoningText = obj.choices?.[0]?.delta?.reasoning_content || ''; enqueue({ responseValueId, event, reasoningText }); @@ -583,12 +590,15 @@ function $resumefetch({ url, onmessage, onResumeUnavailable, controller }: Resum }); } -export const streamFetch = ({ - url = '/api/v2/chat/completions', +/** + * 构造 SSE 请求体。普通聊天保留运行参数注入;独立辅助模块使用 raw 模式原样发送契约数据。 + */ +export const buildStreamFetchBody = ({ data, - onMessage, - abortCtrl -}: StreamFetchProps) => { + requestMode = 'chat' +}: Pick) => { + if (requestMode === 'raw') return data; + const rawVars = data?.variables; const variables = { ...(rawVars && typeof rawVars === 'object' && !Array.isArray(rawVars) @@ -596,6 +606,23 @@ export const streamFetch = ({ : {}), cTime: formatTime2YMDHMW(new Date()) }; + + return { + ...data, + variables, + detail: true, + stream: true, + retainDatasetCite: data.retainDatasetCite ?? true + }; +}; + +export const streamFetch = ({ + url = '/api/v2/chat/completions', + data, + onMessage, + abortCtrl, + requestMode = 'chat' +}: StreamFetchProps) => { const shouldEnableStreamResume = shouldSendStreamResumeHeader(url); return $ssefetch({ @@ -609,19 +636,17 @@ export const streamFetch = ({ [STREAM_RESUME_REQUEST_HEADER]: STREAM_RESUME_REQUEST_HEADER_ENABLED }) }, - body: JSON.stringify({ - ...data, - variables, - detail: true, - stream: true, - retainDatasetCite: data.retainDatasetCite ?? true - }) + body: JSON.stringify(buildStreamFetchBody({ data, requestMode })) }, onmessage: onMessage, abortController: abortCtrl }); }; +/** 使用共享 SSE 生命周期,但不注入普通聊天的 Workflow 运行参数。 */ +export const streamRawFetch = (props: Omit) => + streamFetch({ ...props, requestMode: 'raw' }); + type StreamResumeFetchParams = ChatAuthTargetInput & { chatId: string; onmessage: StartChatFnProps['generatingMessage']; diff --git a/projects/app/src/web/core/workflow/utils.ts b/projects/app/src/web/core/workflow/utils.ts index 3dfd6dc6df6b..66128865d372 100644 --- a/projects/app/src/web/core/workflow/utils.ts +++ b/projects/app/src/web/core/workflow/utils.ts @@ -16,6 +16,7 @@ import { VARIABLE_NODE_ID, WorkflowIOValueTypeEnum } from '@fastgpt/global/core/ import { NodeInputKeyEnum, NodeOutputKeyEnum } from '@fastgpt/global/core/workflow/constants'; import { type EditorVariablePickerType } from '@fastgpt/web/components/common/Textarea/PromptEditor/type'; import { + areWorkflowValueTypesCompatible, formatEditorVariablePickerIcon, getAppChatConfig, getSelectedInputRenderType, @@ -342,67 +343,13 @@ export const filterWorkflowNodeOutputsByType = ( outputs: FlowNodeOutputItemType[], valueType: WorkflowIOValueTypeEnum ): FlowNodeOutputItemType[] => { - const validTypeMap: Record = { - [WorkflowIOValueTypeEnum.string]: [WorkflowIOValueTypeEnum.string], - [WorkflowIOValueTypeEnum.number]: [WorkflowIOValueTypeEnum.number], - [WorkflowIOValueTypeEnum.boolean]: [WorkflowIOValueTypeEnum.boolean], - [WorkflowIOValueTypeEnum.object]: [WorkflowIOValueTypeEnum.object], - [WorkflowIOValueTypeEnum.arrayString]: [ - WorkflowIOValueTypeEnum.string, - WorkflowIOValueTypeEnum.arrayString, - WorkflowIOValueTypeEnum.arrayAny - ], - [WorkflowIOValueTypeEnum.arrayNumber]: [ - WorkflowIOValueTypeEnum.number, - WorkflowIOValueTypeEnum.arrayNumber, - WorkflowIOValueTypeEnum.arrayAny - ], - [WorkflowIOValueTypeEnum.arrayBoolean]: [ - WorkflowIOValueTypeEnum.boolean, - WorkflowIOValueTypeEnum.arrayBoolean, - WorkflowIOValueTypeEnum.arrayAny - ], - [WorkflowIOValueTypeEnum.arrayObject]: [ - WorkflowIOValueTypeEnum.object, - WorkflowIOValueTypeEnum.arrayObject, - WorkflowIOValueTypeEnum.arrayAny, - WorkflowIOValueTypeEnum.chatHistory, - WorkflowIOValueTypeEnum.datasetQuote, - WorkflowIOValueTypeEnum.dynamic, - WorkflowIOValueTypeEnum.selectDataset, - WorkflowIOValueTypeEnum.selectApp - ], - [WorkflowIOValueTypeEnum.chatHistory]: [ - WorkflowIOValueTypeEnum.chatHistory, - WorkflowIOValueTypeEnum.arrayAny - ], - [WorkflowIOValueTypeEnum.datasetQuote]: [ - WorkflowIOValueTypeEnum.datasetQuote, - WorkflowIOValueTypeEnum.arrayAny - ], - [WorkflowIOValueTypeEnum.dynamic]: [ - WorkflowIOValueTypeEnum.dynamic, - WorkflowIOValueTypeEnum.arrayAny - ], - [WorkflowIOValueTypeEnum.selectDataset]: [ - WorkflowIOValueTypeEnum.selectDataset, - WorkflowIOValueTypeEnum.arrayAny - ], - [WorkflowIOValueTypeEnum.selectApp]: [ - WorkflowIOValueTypeEnum.selectApp, - WorkflowIOValueTypeEnum.arrayAny - ], - [WorkflowIOValueTypeEnum.arrayAny]: [WorkflowIOValueTypeEnum.arrayAny], - [WorkflowIOValueTypeEnum.any]: [WorkflowIOValueTypeEnum.arrayAny] - }; - return outputs.filter( (output) => - valueType === WorkflowIOValueTypeEnum.any || - valueType === WorkflowIOValueTypeEnum.arrayAny || !output.valueType || - output.valueType === WorkflowIOValueTypeEnum.any || - validTypeMap[valueType]?.includes(output.valueType) + areWorkflowValueTypesCompatible({ + expected: valueType, + actual: output.valueType + }) ); }; diff --git a/projects/app/test/components/core/chat/ChatContainer/ChatBox/resume.test.ts b/projects/app/test/components/core/chat/ChatContainer/ChatBox/resume.test.ts index 0d7a7152e4e3..0ad9b234a5c1 100644 --- a/projects/app/test/components/core/chat/ChatContainer/ChatBox/resume.test.ts +++ b/projects/app/test/components/core/chat/ChatContainer/ChatBox/resume.test.ts @@ -41,6 +41,7 @@ describe('shouldCreateResumeAiPlaceholder', () => { expect(shouldCreateResumeAiPlaceholder(SseResponseEventEnum.interactive)).toBe(true); expect(shouldCreateResumeAiPlaceholder(SseResponseEventEnum.plan)).toBe(true); expect(shouldCreateResumeAiPlaceholder(SseResponseEventEnum.planStatus)).toBe(true); + expect(shouldCreateResumeAiPlaceholder(SseResponseEventEnum.workflowBuilderApplied)).toBe(true); expect(shouldCreateResumeAiPlaceholder(SseResponseEventEnum.workflowDuration)).toBe(true); expect(shouldCreateResumeAiPlaceholder(AuxiliaryGenerationEventEnum.status)).toBe(true); }); diff --git a/projects/app/test/web/core/app/workflow/workflowBuilder.test.ts b/projects/app/test/web/core/app/workflow/workflowBuilder.test.ts new file mode 100644 index 000000000000..12ba801bae44 --- /dev/null +++ b/projects/app/test/web/core/app/workflow/workflowBuilder.test.ts @@ -0,0 +1,127 @@ +import { describe, expect, it, vi } from 'vitest'; +import { SseResponseEventEnum } from '@fastgpt/global/core/workflow/runtime/constants'; +import { + WorkflowBuilderAppliedSchema, + WorkflowBuilderChatBodySchema +} from '@fastgpt/global/openapi/core/workflow/builder/api'; +import { WorkflowDocumentSchema, getWorkflowChecksum } from '@fastgpt/workflow-core/src/index'; +import fixture from '@fastgpt/workflow-core/test/fixtures/basic-static/workflow.json'; +import { buildStreamFetchBody, handleEventSourceData } from '@/web/common/api/fetch'; +import { clearWorkflowBuilderChatHistory } from '@/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/api'; +import { + registerWorkflowAutoLayout, + requestWorkflowAutoLayout +} from '@/pageComponents/app/detail/WorkflowComponents/Flow/utils/workflowAutoLayout'; + +const mocks = vi.hoisted(() => ({ + batchDeleteChatHistories: vi.fn() +})); + +vi.mock('@/web/core/chat/history/api', () => ({ + batchDeleteChatHistories: mocks.batchDeleteChatHistories +})); + +describe('Workflow Builder Web Adapter', () => { + it('reuses the mounted canvas auto-layout handler after import', () => { + const layout = vi.fn(); + const unregister = registerWorkflowAutoLayout(layout); + + expect(requestWorkflowAutoLayout()).toBe(true); + expect(layout).toHaveBeenCalledTimes(1); + + unregister(); + expect(requestWorkflowAutoLayout()).toBe(false); + }); + + it('clears only the current Builder history before restarting the local chat', async () => { + mocks.batchDeleteChatHistories.mockResolvedValueOnce(undefined); + const clearChatRecords = vi.fn(); + const restartChat = vi.fn(); + + await clearWorkflowBuilderChatHistory({ + appId: 'app-1', + chatId: 'builder-chat-1', + clearChatRecords, + restartChat + }); + + expect(mocks.batchDeleteChatHistories).toHaveBeenCalledWith({ + appId: 'app-1', + sourceType: 'app', + chatIds: ['builder-chat-1'] + }); + expect(clearChatRecords).toHaveBeenCalledTimes(1); + expect(restartChat).toHaveBeenCalledTimes(1); + }); + + it('keeps local Builder history when server deletion fails', async () => { + mocks.batchDeleteChatHistories.mockRejectedValueOnce(new Error('delete failed')); + const clearChatRecords = vi.fn(); + const restartChat = vi.fn(); + + await expect( + clearWorkflowBuilderChatHistory({ + appId: 'app-1', + chatId: 'builder-chat-1', + clearChatRecords, + restartChat + }) + ).rejects.toThrow('delete failed'); + + expect(clearChatRecords).not.toHaveBeenCalled(); + expect(restartChat).not.toHaveBeenCalled(); + }); + + it('sends only the strict Builder contract while ordinary chat keeps runtime fields', async () => { + const appId = '67f4c91c79a4d61b1f116b2a'; + const document = WorkflowDocumentSchema.parse(structuredClone(fixture)); + document.app.appId = appId; + const requestBody = { + appId, + chatId: 'workflow-builder-chat', + messages: [{ role: 'user' as const, content: 'Add an AI node' }], + workflowContext: { + document, + checksum: await getWorkflowChecksum(document) + } + }; + + const builderBody = buildStreamFetchBody({ data: requestBody, requestMode: 'raw' }); + expect(WorkflowBuilderChatBodySchema.parse(builderBody)).toEqual(requestBody); + expect(builderBody).not.toHaveProperty('variables'); + expect(builderBody).not.toHaveProperty('detail'); + expect(builderBody).not.toHaveProperty('stream'); + + expect(buildStreamFetchBody({ data: { variables: { input: 'value' } } })).toMatchObject({ + variables: { input: 'value', cTime: expect.any(String) }, + detail: true, + stream: true, + retainDatasetCite: true + }); + }); + + it('delivers the validated applied document event without mixing it into answer text', async () => { + const document = WorkflowDocumentSchema.parse(structuredClone(fixture)); + const applied = WorkflowBuilderAppliedSchema.parse({ + document, + checksum: await getWorkflowChecksum(document) + }); + const onmessage = vi.fn(); + const enqueue = vi.fn(); + + handleEventSourceData({ + event: SseResponseEventEnum.workflowBuilderApplied, + data: JSON.stringify(applied), + onmessage, + enqueue, + onerror: vi.fn() + }); + + expect(onmessage).toHaveBeenCalledWith({ + responseValueId: undefined, + event: SseResponseEventEnum.workflowBuilderApplied, + workflowBuilderApplied: applied + }); + expect(enqueue).not.toHaveBeenCalled(); + }); +}); diff --git a/projects/app/test/web/core/app/workflow/workflowCorePr1Equivalence.test.ts b/projects/app/test/web/core/app/workflow/workflowCorePr1Equivalence.test.ts index cb9d6d41011b..1b741d7aa7c4 100644 --- a/projects/app/test/web/core/app/workflow/workflowCorePr1Equivalence.test.ts +++ b/projects/app/test/web/core/app/workflow/workflowCorePr1Equivalence.test.ts @@ -1,4 +1,4 @@ -import { checkWorkflowNodeAndConnection } from '@/web/core/workflow/utils'; +import { checkWorkflowNodeAndConnection } from '@/pageComponents/app/detail/WorkflowComponents/adapters/validation'; import { WorkflowDocumentSchema, compileStoreWorkflow, From 516ffbc4ab14e5e5177253d10966e812db460664 Mon Sep 17 00:00:00 2001 From: xxyyh <2289112474@qq.com> Date: Tue, 4 Aug 2026 19:17:08 +0800 Subject: [PATCH 04/18] feat(workflow-builder): complete end-to-end generation --- .../workflow-builder-regression-suite.md | 105 +++++ ...low-builder-single-sandbox-architecture.md | 389 +++++----------- ...00\345\217\221\346\226\207\346\241\243.md" | 217 +++++++-- ...76\350\256\241\346\226\207\346\241\243.md" | 124 +++++- .../workflow-builder-cli-decisions.excalidraw | 1 + diagrams/workflow-builder-cli-decisions.mmd | 38 ++ diagrams/workflow-builder-cli-decisions.png | Bin 0 -> 402401 bytes diagrams/workflow-builder-cli-decisions.svg | 1 + ...low-builder-continuation-policy.excalidraw | 1 + .../workflow-builder-continuation-policy.mmd | 38 ++ .../workflow-builder-continuation-policy.png | Bin 0 -> 550188 bytes .../workflow-builder-continuation-policy.svg | 1 + ...ow-builder-current-architecture.excalidraw | 2 +- .../workflow-builder-current-architecture.mmd | 58 +-- .../workflow-builder-current-architecture.png | Bin 101510 -> 204027 bytes .../workflow-builder-current-architecture.svg | 2 +- ...kflow-builder-current-lifecycle.excalidraw | 1 + .../workflow-builder-current-lifecycle.mmd | 52 +++ .../workflow-builder-current-lifecycle.png | Bin 0 -> 463968 bytes .../workflow-builder-current-lifecycle.svg | 1 + ...flow-builder-error-to-agentloop.excalidraw | 1 + .../workflow-builder-error-to-agentloop.mmd | 47 ++ .../workflow-builder-error-to-agentloop.png | Bin 0 -> 421688 bytes .../workflow-builder-error-to-agentloop.svg | 1 + .../workflow-builder-main-chain.excalidraw | 1 + diagrams/workflow-builder-main-chain.mmd | 43 ++ diagrams/workflow-builder-main-chain.png | Bin 0 -> 269233 bytes diagrams/workflow-builder-main-chain.svg | 1 + ...kflow-builder-preview-decisions.excalidraw | 1 + .../workflow-builder-preview-decisions.mmd | 34 ++ .../workflow-builder-preview-decisions.png | Bin 0 -> 468663 bytes .../workflow-builder-preview-decisions.svg | 1 + .../workflow-builder-system-tools.excalidraw | 1 + diagrams/workflow-builder-system-tools.mmd | 26 ++ diagrams/workflow-builder-system-tools.png | Bin 0 -> 32440 bytes diagrams/workflow-builder-system-tools.svg | 1 + .../global/core/workflow/runtime/utils.ts | 7 + .../template/system/interactive/type.ts | 58 ++- .../openapi/core/workflow/builder/api.ts | 7 + .../test/core/workflow/runtime/utils.test.ts | 49 +++ .../ai/llm/agentLoop/domain/mainPrompt.ts | 19 + .../core/ai/llm/agentLoop/domain/runtime.ts | 15 + .../core/ai/llm/agentLoop/domain/tool.ts | 35 +- .../llm/agentLoop/provider/fastAgent/index.ts | 12 +- .../agentLoop/provider/fastAgent/loop/base.ts | 29 ++ .../provider/fastAgent/loop/index.ts | 76 +++- .../agentLoop/provider/fastAgent/loop/type.ts | 12 +- .../ai/llm/agentLoop/provider/piAgent/run.ts | 54 ++- .../agentLoop/provider/piAgent/tool/build.ts | 39 +- .../provider/piAgent/tool/catalog.ts | 3 +- .../application/runtime/systemTools.ts | 12 +- .../core/ai/llm/agentLoop/_mocks/llmQueue.ts | 3 + .../ai/llm/agentLoop/fastAgentLoop.test.ts | 161 +++++++ .../llm/agentLoop/fastAgentProvider.test.ts | 42 +- .../core/ai/llm/agentLoop/mainPrompt.test.ts | 26 +- .../ai/llm/agentLoop/piAgentProvider.test.ts | 223 +++++++++- .../web/components/common/Image/PhotoView.tsx | 54 ++- packages/web/i18n/en/common.json | 2 +- packages/web/i18n/en/workflow.json | 15 + packages/web/i18n/zh-CN/workflow.json | 15 + packages/web/i18n/zh-Hant/workflow.json | 15 + packages/workflow-cli/src/commands/config.ts | 14 +- packages/workflow-cli/test/e2e.test.ts | 19 + .../src/command/mergeChangeSet.ts | 210 +++++++++ packages/workflow-core/src/command/type.ts | 16 + .../src/config/automationMeta.ts | 61 +++ .../workflow-core/src/config/descriptor.ts | 66 +++ packages/workflow-core/src/config/service.ts | 18 +- packages/workflow-core/src/config/type.ts | 31 ++ packages/workflow-core/src/index.ts | 4 + .../workflow-core/src/validation/index.ts | 76 ++++ .../test/command/mergeChangeSet.test.ts | 175 ++++++++ .../workflow-core/test/config/service.test.ts | 40 ++ .../test/validation/validation.test.ts | 27 ++ pnpm-lock.yaml | 3 + .../Markdown/img/MermaidCodeBlock.tsx | 136 ++++-- .../ChatBox/hooks/useChatGenerate.ts | 5 +- .../core/chat/ChatContainer/ChatBox/type.ts | 6 +- .../ChatBox/utils/interactive.ts | 70 ++- .../core/chat/ChatContainer/type.ts | 6 +- ...enderWorkflowBuilderPreviewInteractive.tsx | 163 +++++++ .../chat/components/AIResponseBox/index.tsx | 11 +- .../chat/components/AIResponseBox/utils.ts | 4 +- .../Flow/components/ContextMenu.tsx | 414 ++--------------- .../Flow/hooks/useWorkflowAutoLayout.ts | 415 ++++++++++++++++++ .../Flow/utils/workflowAutoLayout.ts | 17 - .../WorkflowBuilder/ChatPanel.tsx | 9 +- .../WorkflowBuilder/index.tsx | 56 ++- .../WorkflowBuilder/utils.ts | 16 + .../context/workflowInitContext.tsx | 35 +- .../context/workflowUtilsContext.tsx | 18 +- .../ChatContainer/ChatBox/interactive.test.ts | 34 ++ .../core/app/workflow/workflowBuilder.test.ts | 101 ++++- 93 files changed, 3566 insertions(+), 882 deletions(-) create mode 100644 .agents/design/core/workflow/workflow-builder-regression-suite.md create mode 100644 diagrams/workflow-builder-cli-decisions.excalidraw create mode 100644 diagrams/workflow-builder-cli-decisions.mmd create mode 100644 diagrams/workflow-builder-cli-decisions.png create mode 100644 diagrams/workflow-builder-cli-decisions.svg create mode 100644 diagrams/workflow-builder-continuation-policy.excalidraw create mode 100644 diagrams/workflow-builder-continuation-policy.mmd create mode 100644 diagrams/workflow-builder-continuation-policy.png create mode 100644 diagrams/workflow-builder-continuation-policy.svg create mode 100644 diagrams/workflow-builder-current-lifecycle.excalidraw create mode 100644 diagrams/workflow-builder-current-lifecycle.mmd create mode 100644 diagrams/workflow-builder-current-lifecycle.png create mode 100644 diagrams/workflow-builder-current-lifecycle.svg create mode 100644 diagrams/workflow-builder-error-to-agentloop.excalidraw create mode 100644 diagrams/workflow-builder-error-to-agentloop.mmd create mode 100644 diagrams/workflow-builder-error-to-agentloop.png create mode 100644 diagrams/workflow-builder-error-to-agentloop.svg create mode 100644 diagrams/workflow-builder-main-chain.excalidraw create mode 100644 diagrams/workflow-builder-main-chain.mmd create mode 100644 diagrams/workflow-builder-main-chain.png create mode 100644 diagrams/workflow-builder-main-chain.svg create mode 100644 diagrams/workflow-builder-preview-decisions.excalidraw create mode 100644 diagrams/workflow-builder-preview-decisions.mmd create mode 100644 diagrams/workflow-builder-preview-decisions.png create mode 100644 diagrams/workflow-builder-preview-decisions.svg create mode 100644 diagrams/workflow-builder-system-tools.excalidraw create mode 100644 diagrams/workflow-builder-system-tools.mmd create mode 100644 diagrams/workflow-builder-system-tools.png create mode 100644 diagrams/workflow-builder-system-tools.svg create mode 100644 packages/workflow-core/src/command/mergeChangeSet.ts create mode 100644 packages/workflow-core/src/config/automationMeta.ts create mode 100644 packages/workflow-core/src/config/descriptor.ts create mode 100644 packages/workflow-core/src/config/type.ts create mode 100644 packages/workflow-core/test/command/mergeChangeSet.test.ts create mode 100644 projects/app/src/components/core/chat/components/AIResponseBox/RenderWorkflowBuilderPreviewInteractive.tsx create mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useWorkflowAutoLayout.ts delete mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/utils/workflowAutoLayout.ts create mode 100644 projects/app/src/pageComponents/app/detail/WorkflowComponents/WorkflowBuilder/utils.ts diff --git a/.agents/design/core/workflow/workflow-builder-regression-suite.md b/.agents/design/core/workflow/workflow-builder-regression-suite.md new file mode 100644 index 000000000000..c435f32015a4 --- /dev/null +++ b/.agents/design/core/workflow/workflow-builder-regression-suite.md @@ -0,0 +1,105 @@ +# Workflow Builder 回归案例库设计 + +## 目标 + +Workflow Builder 的回归测试需要同时回答两个问题: + +1. 修改 Core、CLI、AgentLoop 或 Builder 后,既有节点、配置和交互协议是否仍然成立。 +2. 真实模型能否从用户需求出发,完成需求确认、Mermaid 预览、CLI 构建、原子提交,并产出一个可实际运行的工作流。 + +因此,本方案保留现有分层单元测试,在其上新增由同一份案例目录驱动的语义回归和真实模型评测。 + +## 架构 + +```mermaid +flowchart LR + Cases[30 个回归案例] --> Catalog[案例目录校验] + Cases --> Semantic[WorkflowDocument 语义断言] + Cases --> Eval[真实 Builder API 评测] + Eval --> Applied[workflowBuilderApplied] + Applied --> Semantic + Applied --> Runtime[chatTest 实际执行] + Runtime --> Report[生成与运行结果] +``` + +### 案例目录 + +案例只描述用户目标、资源依赖、初始画布、预览决策和预期语义,不保存不稳定的节点 ID、坐标或完整模型文案。 + +每个案例包含: + +- `request`:首轮用户需求。 +- `requirementAnswers`:需求收集阶段可继续提供的信息。 +- `initialWorkflow`:空白或既有工作流夹具。 +- `resources`:模型、知识库、工具、子应用、文件和 HTTP 服务等外部资源。 +- `preview`:确认或先修改再确认 Mermaid。 +- `expected`:节点能力、路径、容器关系、系统配置和交互次数。 +- `runtime`:生成后发送到 `chatTest` 的输入和输出断言。 + +### 普通回归测试 + +普通 Vitest 不访问真实模型,负责以下确定性约束: + +- 案例 ID 唯一且数量固定为 30。 +- 30 个案例联合覆盖全部公开内置模板。 +- 系统配置案例联合覆盖全部允许配置路径。 +- 修改型案例必须声明非空初始工作流。 +- 每个成功案例必须包含生成语义和运行预期。 +- 语义断言器能够发现缺少节点、路径、容器关系、配置和阻断诊断。 + +### 真实模型评测 + +真实评测使用独立 Vitest 配置,不进入默认 `pnpm test`: + +1. 调用运行中 FastGPT 的 `/api/proApi/core/workflow/builder/chat`。 +2. 对普通需求问题按案例顺序补充信息。 +3. 对 Mermaid 预览发送结构化 `confirm` 或 `revise`。 +4. 收到 `workflowBuilderApplied` 后执行 Core 语义断言。 +5. 使用 `compileStoreWorkflow` 编译目标文档。 +6. 调用 `/api/core/chat/chatTest` 实际运行生成结果。 +7. 校验文本、JSON 或交互结果。 + +真实评测通过环境变量连接测试环境,不写死用户 Cookie、资源 ID 或文件 URL。 + +## 运行分级 + +- PR:案例目录、语义断言器和现有 Builder 确定性测试。 +- 每日:通过 `WORKFLOW_BUILDER_EVAL_CASE_IDS` 运行 P0 案例。 +- 发布前:运行全部 30 个真实案例。 +- 稳定性:同一案例由外部 CI 重复运行并聚合成功率,单次 Vitest 不在内部重试以免掩盖失败。 + +## 通过标准 + +生成阶段: + +- Mermaid 预览次数符合案例决策。 +- `workflowBuilderApplied` 恰好出现一次。 +- Core 不存在 `severity=error` 的诊断。 +- 必需模板、执行路径、父子容器和配置均存在。 +- 不出现多个可见回答所有者。 + +运行阶段: + +- `chatTest` 不返回 SSE Error。 +- 普通案例产生非空文本或满足关键事实断言。 +- 结构化案例产生包含指定字段的 JSON。 +- 交互案例返回预期交互类型。 + +## 环境变量 + +- `WORKFLOW_BUILDER_EVAL_BASE_URL`:运行中的 FastGPT 地址。 +- `WORKFLOW_BUILDER_EVAL_APP_ID`:具有写权限的测试 Workflow 应用。 +- `WORKFLOW_BUILDER_EVAL_COOKIE`:测试账号 Cookie。 +- `WORKFLOW_BUILDER_EVAL_MODEL`:Builder 使用的真实模型。 +- `WORKFLOW_BUILDER_EVAL_RESOURCES`:资源名称、测试事实、文件 URL 和 HTTP 地址组成的 JSON。 +- `WORKFLOW_BUILDER_EVAL_CASE_IDS`:可选,逗号分隔的案例 ID。 + +## TODO + +- [x] 定义统一案例合同。 +- [x] 录入 30 个回归案例。 +- [x] 增加案例覆盖矩阵测试。 +- [x] 增加 WorkflowDocument 语义断言器。 +- [x] 增加独立真实模型评测配置与 HTTP/SSE Harness。 +- [ ] 在部署测试环境配置稳定的模型、知识库、工具、子应用和文件资源。 +- [ ] 在 CI 中配置每日 P0 和发布前全量评测任务。 diff --git a/.agents/design/core/workflow/workflow-builder-single-sandbox-architecture.md b/.agents/design/core/workflow/workflow-builder-single-sandbox-architecture.md index 89912562528a..abcc552d4118 100644 --- a/.agents/design/core/workflow/workflow-builder-single-sandbox-architecture.md +++ b/.agents/design/core/workflow/workflow-builder-single-sandbox-architecture.md @@ -1,305 +1,142 @@ -# Workflow Builder 单 Sandbox 架构设计 - -## 1. 背景与目标 - -Workflow Builder 当前在同一个 Builder 对话中创建两个物理 Sandbox: - -1. 研究 Sandbox:注入内置 Skill、用户文件,并作为 Agent 通用 Sandbox tool 的执行环境。 -2. 事务 Sandbox:保存当前 `workflow.json`、注入 Workflow CLI,并由服务端执行 `changeset plan` 与 `changeset apply`。 - -两个 Sandbox 的物理 ID 不同,因此首次工作流生成通常需要额外创建或恢复一次实例、获取一次初始化租约、准备一次文件系统。CLI 的纯计算成本很低,但这部分运行环境成本会直接计入 `Workflow CLI Apply` 的工具耗时。 - -本功能将 Builder 改为每个 `(appId, userId, builderChatId)` 只使用一个物理 Sandbox。在同一实例中提供两个逻辑能力:研究能力与事务执行能力。 - -### 1.1 目标 - -- 一个 Builder 对话最多只创建或恢复一个物理 Sandbox。 -- Agent 可以研究 Skill、用户文件和外部资料,但不能直接读取或修改当前工作流事务文件。 -- 当前工作流仍然只能通过 `workflow_cli_query` 与 `workflow_cli_apply` 访问和修改。 -- 保留 Workflow Core、CLI、base checksum、target checksum、`appId` 和最终 `WorkflowDocument` 校验。 -- 不保留双 Sandbox、旧 transaction chatId、旧 Builder fallback 或 feature flag 分支。 -- 不修改 Workflow Core 和 Workflow CLI 的领域契约。 - -### 1.2 非目标 - -- 不改变普通 Agent、Skill Debug 或非 Builder 对话的 Sandbox 行为。 -- 不让模型直接调用 CLI、导入 JSON、保存、发布或运行工作流。 -- 不把工作流事务状态持久化为跨轮固定文件。 -- 不以提示词作为访问控制。 - -## 2. 当前实现与根因 - -当前 `runWorkflowBuilder` 会先准备研究 Sandbox,并将原始 `SandboxClient` 注入 Agent Loop 的 `systemTools.sandbox`。随后第一次 `workflow_cli_query` 或 `workflow_cli_apply` 再以 `chatId:workflow-builder-transaction` 准备第二个事务 Sandbox。 - -```text -Builder 对话 - ├── research sandboxId - │ └── Agent 可使用读写文件、搜索和 Shell 工具 - └── transaction sandboxId - └── 服务端写 workflow.json 并执行 Workflow CLI +# Workflow Builder 单 Sandbox 与主 AgentLoop 架构 + +## 1. 目标 + +Workflow Builder 接收用户业务需求,在需求和资源闭合后,把完整工作流一次性搭建、校验并原子应用到当前画布。实现必须复用通用 AgentLoop,不在 Runner 外建立第二套业务状态机。 + +核心约束: + +- 角色和业务生命周期由 Workflow Builder 系统提示词定义。 +- AgentLoop 只提供通用的执行、交互、工具调度和可注入完成策略。 +- 是否真正完成由工具产生的结构化事实决定,不解析 Agent 文本,不检查固定词汇。 +- 当前画布事实只来自 Workflow CLI Gateway;Workflow Core 负责领域校验。 +- 一个 App 用户复用一个物理 Sandbox,研究区与事务区保持逻辑隔离。 +- 不新增数据库状态,不保存外部阶段机,不要求用户处理节点和连线问题。 + +## 2. 总体架构 + +```mermaid +flowchart TD + U["用户业务需求"] --> R["Workflow Builder Runner"] + R --> S["单物理 Sandbox"] + S --> SR["研究执行器:Skill 与用户文件"] + S --> ST["受保护事务区:草稿、分片与 CLI"] + R --> L["统一 AgentLoop"] + P["Builder 系统提示词"] --> L + CP["CompletionPolicy:只读取终止事实"] --> L + L --> A{"需要业务输入?"} + A -->|是| ASK["ask_agent:一次性收集业务缺口"] + ASK --> U + A -->|否| PV["workflow_builder_present_preview"] + PV --> PC{"用户选择"} + PC -->|修改| L + PC -->|取消| CANCEL + PC -->|确认| Q["workflow_cli_query"] + L --> Q + L --> SG["workflow_cli_stage"] + Q --> G["Workflow CLI Gateway"] + SG --> G + G --> C["Chunk Session 与 Checkpoint"] + C --> WC["Workflow Core 合并与校验"] + WC --> V{"draft valid?"} + V -->|否| L + V -->|是| CM["workflow_cli_commit"] + CM --> AP["原子应用到画布"] + AP --> TF["结构化 applied 事实"] + CANCEL["workflow_builder_cancel"] --> TF2["结构化 cancelled 事实"] + L --> CANCEL + TF --> F["无工具动态收尾 Agent"] + TF2 --> F + F --> U ``` -不能只把两个 sandboxId 改成相同。当前通用 Sandbox 工具含有 `sandbox_shell`、`sandbox_read_file`、`sandbox_write_file` 等能力;如果 Agent 与事务文件共享无权限隔离的文件系统,模型可以绕过 `workflow_cli_apply` 直接读写 `workflow.json`。 +Runner 只启动一次负责需求闭合、预览和搭建的主 `runAgentLoopCoreWithSummary`。用户确认 Mermaid 后尚未 Commit,或用户要求修改后尚未展示新 Mermaid 时,`CompletionPolicy` 才让同一个 Provider、同一份消息链和同一个运行预算继续执行,不重建主 AgentLoop。主执行产生终止事实后,Runner 另启动一次最多一轮、禁用全部工具的收尾 Agent;它只负责把结构化终止事实转换成用户答复,不参与搭建。普通问候和非搭建对话可以自然结束,也不会进入收尾 Agent。 -## 3. 目标架构 +## 3. 业务生命周期 -### 3.1 一个物理实例、两种能力 +系统提示词负责以下连续链路: -```text -一个 Builder Sandbox - ├── research/ owner: workflow_builder_research - │ ├── skills/ - │ ├── user_files/ - │ └── scratch/ - │ - └── transaction/ owner: workflow_builder_transaction - ├── workflow.json - ├── workflow-cli/ - ├── runs/ - └── .lock -``` - -同一物理 Sandbox 内建立两个非特权 Linux 用户: +1. 需求建模与当前画布事实核对。 +2. 解析知识库、模型、应用、工具、密钥等外部资源。 +3. 将同一轮发现的业务或资源缺口合并成一次 `ask_agent`。 +4. 所有工作流搭建和修改任务都调用 `workflow_builder_present_preview`,以 `title + mermaid + sections` 提交完整预览;普通 assistant 正文不得自行输出 Mermaid。 +5. Preview 工具统一注入 `confirm`、`revise`、`cancel` 三个稳定动作。`revise` 先收集文本修改意见;Agent 合并意见后重新调用同一工具展示完整新版方案,不得重复旧图。 +6. 用户确认后进入连续搭建,不再为 Schema、节点、引用、边、容器或诊断向用户确认。 +7. 分片 Stage、draft validate、自主修复,最后 Commit。 +8. Commit 返回 `state: applied` 与 `taskComplete: true` 后完成。 -| 身份 | 可访问目录 | 调用者 | 权限 | -| --- | --- | --- | --- | -| `workflow_builder_research` | `research/` | Agent 的研究工具 | 读取、写入、Shell、网络访问 | -| `workflow_builder_transaction` | `transaction/` | 服务端 CLI Runner | Workflow CLI 查询、Plan、Apply | +用户明确取消时必须调用 `workflow_builder_cancel`,避免把自然语言取消误当成普通完成。 -目录权限必须由 Sandbox 内的 OS 权限保证:`research/` 与 `transaction/` 分别 `0700`,互不具备读取、写入或执行权限。事务目录、CLI bundle 和 `workflow.json` 不可被研究身份读取。 +## 4. 完成策略 -### 3.2 两个逻辑入口 - -```text -Agent - └── WorkflowBuilderResearchExecutor - └── 以 workflow_builder_research 身份执行受控研究工具 - -服务端 Workflow CLI Gateway - └── WorkflowBuilderTransactionRunner - └── 以 workflow_builder_transaction 身份执行 CLI -``` - -这里的“两个入口”不代表两个 Sandbox 或两个通用 Adapter。 - -- `WorkflowBuilderResearchExecutor` 是新的 Agent 工具执行器。它替代 Builder 当前直接暴露的原始 `SandboxClient`。 -- `WorkflowBuilderTransactionRunner` 是现有 `createWorkflowCliGateway`、`applyWorkflowBuilderPlanInSandbox`、CLI plan/apply 链路的收敛名称和职责,不向 Agent 暴露。 - -两者共享同一个底层 `ISandbox` 和同一个 sandboxId,但拥有不同 OS 身份、目录根和调用权限。 - -### 3.3 为什么不能只依赖路径前缀 - -仅在程序里要求“研究工具只能传 `research/` 路径”不构成边界:绝对路径、`../`、软链接和 Shell 都可能绕过前缀判断。 - -因此 Research Executor 必须同时满足: - -1. 不向 Agent 暴露底层 `ISandbox` 或完整 `SandboxClient`。 -2. 文件读取、写入、搜索、列目录、编辑和 Shell 都以 `workflow_builder_research` 身份运行。 -3. 所有路径结果必须归一化到 `research/`;文件 URL 仅允许来自该目录。 -4. 事务目录仅允许 `workflow_builder_transaction` 及服务端初始化过程访问。 -5. Sandbox 镜像中不得给研究身份配置 `sudo`、CAP_DAC_OVERRIDE 或可提权入口。 - -## 4. 运行流程 - -### 4.1 初始化 - -```text -Builder 请求到达 - → 以 builderChatId 获取一个 SandboxClient - → 获取一次 Sandbox 初始化租约 - → 创建两个 Linux 用户和两个 0700 目录 - → 复制内置 workflow-builder Skill 与用户文件到 research/ - → 注入固定版本 Workflow CLI 到 transaction/ - → 写入本轮前端传入的 WorkflowDocument 到 transaction/workflow.json - → 返回 SharedWorkflowBuilderSandboxContext -``` - -`SharedWorkflowBuilderSandboxContext` 至少包含: +通用 `AgentLoopRuntime` 接收可选 `completionPolicy`: ```ts -type SharedWorkflowBuilderSandboxContext = { - sandboxClient: SandboxClient; - sandbox: ISandbox; - researchDirectory: string; - transactionDirectory: string; - transactionRunDirectory: string; - transactionLauncherFile: string; -}; -``` - -本轮只初始化一次。研究工具和 CLI 工具都从这个 Context 取底层 Sandbox,不再调用第二次 `ensureAgentSandboxRuntime`。 - -### 4.2 Agent 研究 - -```text -模型调用 sandbox_read_file / sandbox_shell 等研究工具 - → Agent Loop 调用 WorkflowBuilderResearchExecutor - → Executor 验证参数和研究目录路径 - → 以 workflow_builder_research 身份执行 - → 返回研究结果 -``` - -`sandbox_shell` 不允许继续调用现有的裸 `SandboxClient.exec`。它必须强制以研究身份执行,并使用研究目录作为工作目录。即使模型提交 `cat ../transaction/workflow.json`,OS 权限也必须拒绝。 - -### 4.3 Workflow CLI 查询 - -```text -模型调用 workflow_cli_query - → Gateway 取得 SharedWorkflowBuilderSandboxContext - → TransactionRunner 以 workflow_builder_transaction 身份运行 CLI inspect/list/show - → 返回结构化只读结果 -``` - -### 4.4 Workflow CLI Apply - -```text -模型调用 workflow_cli_apply(ChangeSet) - → Gateway 写 transaction/runs//changeset.json - → TransactionRunner 执行 changeset plan - → 服务端 Core 校验 WorkflowPlan - → LLM 语义审查 - → TransactionRunner 执行 changeset apply - → 服务端读取 transaction/workflow.json - → 校验 appId、Schema、base/target checksum - → 返回验证后的 WorkflowDocument 给画布 +type AgentLoopCompletionPolicy = (context: { + requestIndex: number; +}) => + | { action: 'complete' } + | { action: 'continue'; message: string } + | Promise< + | { action: 'complete' } + | { action: 'continue'; message: string } + >; ``` -事务执行前必须用本轮前端传入的 WorkflowDocument 覆盖 `transaction/workflow.json`。这样同一 Sandbox 的历史文件不能成为下一轮的工作流事实来源。 - -`workflow_cli_apply` 必须在 `transaction/.lock` 上获取独占锁,覆盖写入、Plan、Apply、读取结果和清理临时目录处于同一个锁范围内。 - -## 5. 开发流程 - -### 阶段 0:前置验证 - -目的:确认所有当前 Sandbox provider 镜像可执行多用户隔离。 - -1. 对当前支持的 OpenSandbox、Sealos Devbox、E2B 镜像执行最小探针。 -2. 验证可创建非特权用户、设置目录 owner/mode,并以指定用户执行命令。 -3. 验证研究身份无法读取、列出、软链接访问或 Shell 访问事务目录。 -4. 验证事务身份不能读取研究目录中的用户文件,除非服务端显式复制需要的输入。 -5. 若任一 provider 不支持 OS 用户隔离,该 provider 不得进入该版本的 Builder 支持范围;不能退回双 Sandbox 或提示词隔离。 - -交付物:provider 能力矩阵和最小集成测试。 +策略不会收到 assistant 文本,因此不能演变成关键词、正则或意图分类补丁。未注入策略时,FastAgent 和 PiAgent 保持原来的自然结束行为。 -### 阶段 1:定义共享 Context 与目录初始化 +Workflow Builder 的终止事实如下: -修改 `pro/admin/src/service/core/ai/workflowBuilder/sandbox.ts`: +| 事实 | AgentLoop 行为 | Builder 结果 | +| --- | --- | --- | +| `ask_agent` 交互 | 暂停并保存 Provider 状态 | `clarification_pending` | +| Commit 成功 | 工具 `stop` | `applied` | +| Cancel 工具成功 | 工具 `stop` | `cancelled` | +| 同一修复目标第 10 次失败 | 工具 `stop` | `failed` | +| Provider 错误或预算耗尽 | 错误返回 | `failed` | +| 连接或用户停止信号 | 中止 | `aborted` | +| 无工具自然结束且没有上述事实 | 同一 AgentLoop 继续 | 不对用户返回阶段性结束 | -1. 删除 transaction chatId 派生和第二个 Sandbox prepare action。 -2. 新建单 Sandbox 初始化函数,返回 `SharedWorkflowBuilderSandboxContext`。 -3. 创建 `research/`、`transaction/`、运行目录和锁文件。 -4. 设置不同 owner、`0700` 权限和只读 CLI bundle 权限。 -5. 把 Skill、用户文件复制到研究目录;把 CLI、当前 WorkflowDocument 写入事务目录。 -6. 所有临时 ChangeSet 和 Plan 文件放在 `transaction/runs//`,在 finally 中删除。 +成功、取消和失败统一进入一次无工具收尾 Agent,根据权威事实动态生成最终答复。收尾失败时保留主 Agent 已经产生的内容,不注入固定兜底文案。 -完成标准:一个 Builder 请求中只有一次 `prepareAgentSandboxRuntime`、一次初始化租约和一个 sandboxId。 +## 5. CLI 与状态边界 -### 阶段 2:引入 Research Executor +CLI Gateway 只维护执行所需状态: -当前 Agent Loop 的 `systemTools.sandbox` 只接受 `SandboxClient`,两种 provider 都会直接调用 `runSandboxTools`。这无法安全表达 Builder 的受限研究身份。 +- 当前 Chunk Session 与 checkpoint。 +- 最近一次有效 draft validation 对应的 revision 和 WorkflowPlan。 +- Stage 与 Commit 按修复目标隔离的失败次数。 +- 已应用的 WorkflowDocument、WorkflowPlan 和终止错误。 -修改共享 Agent Loop 接口,但不改变非 Builder 的产品行为: +不再维护 Supervisor round、stalled round、响应文本、最近工具指纹或执行快照。Stage 成功后清除该目标次数,并清除旧草稿版本上的 Commit 次数;错误类型变化不会让同一目标的计数清零。 -1. 在 `packages/service/core/ai/llm/agentLoop/domain/tool.ts` 定义 `AgentLoopSandboxExecutor`。 -2. 让 `AgentLoopSystemTools.sandbox` 接收 executor,而不是直接接收 `SandboxClient`。 -3. 将现有 `runSandboxTools({ sandboxClient })` 封装为普通 Agent 使用的默认 executor。 -4. 在 fastAgent 与 piAgent 的 Sandbox tool 分发处统一调用 executor,不能保留一条 Builder 专用旁路。 -5. 在 Pro 新建 `WorkflowBuilderResearchExecutor`,实现同一套 Sandbox 工具协议,但所有操作都通过研究身份和研究目录执行。 +修改顺序固定为:节点与结构化输入、执行边、数据引用和剩余配置、工具与容器关系。draft validate 必须无阻断诊断,Commit 只接受对应且未变化的 `draftRevision`。 -Research Executor 必须覆盖当前已注册的工具: +## 6. Sandbox 边界 -- `sandbox_read_file` -- `sandbox_write_file` -- `sandbox_edit_file` -- `sandbox_ls` -- `sandbox_find` -- `sandbox_grep` -- `sandbox_shell` -- `sandbox_get_file_url` - -完成标准:Builder 的 Agent Loop 不再持有完整 `SandboxClient`;普通 Agent 的 Sandbox 工具测试保持通过。 - -### 阶段 3:收敛事务 Runner - -修改 Builder 服务层: - -1. `runner.ts` 只准备一次共享 Context,并把 Research Executor 注入 Agent Loop。 -2. `cliGateway.ts` 从共享 Context 获取 TransactionRunner;删除 `getTransactionSandbox`。 -3. `apply.ts` 不得再次调用 `ensureAgentSandboxRuntime`;只使用 TransactionRunner 运行 CLI Apply。 -4. `handler.ts` 只接收最终验证后的 `WorkflowDocument`,不感知研究目录或事务目录。 -5. `sandbox.ts` 中 CLI query、plan、apply 使用 transaction 用户和 transaction 目录。 - -完成标准:从 Builder Handler 到 CLI Apply 的完整链路不再出现 `:workflow-builder-transaction`。 - -### 阶段 4:删除双 Sandbox 实现 - -这是替换,不是兼容。 - -1. 删除 `getWorkflowBuilderTransactionChatId`。 -2. 删除独立 transaction Sandbox 的创建、恢复、初始化和测试桩。 -3. 删除 Builder 代码中任何“旧 Sandbox 不存在时创建第二个 Sandbox”的 fallback。 -4. 不增加开关、环境变量、版本字段、双读写或运行时迁移逻辑。 -5. 已存在的旧 transaction Sandbox 不迁移、不读取;由现有资源归档机制自然回收。 -6. 已打开的 Builder 聊天下一次请求按新模型准备单 Sandbox;历史聊天文本继续保留,但不恢复旧事务文件。 - -完成标准:代码库中 Workflow Builder 不再出现第二个派生 transaction chatId 或第二次 runtime prepare。 - -### 阶段 5:验证与观测 - -新增或更新测试: - -1. 同一 Builder 对话只创建一个 sandboxId。 -2. 研究身份不能读取、写入、列出、软链接访问 transaction 目录。 -3. 事务身份不能读取研究用户文件。 -4. Agent 仍可读取 Skill、用户文件并进行受限 Shell/网络研究。 -5. `workflow_cli_query` 只能读取 transaction/workflow.json。 -6. `workflow_cli_apply` 仍能完成 Plan、Core 校验、语义审查、CLI Apply 和目标 checksum 校验。 -7. 并发 Builder 请求无法交叉覆盖 transaction/workflow.json。 -8. fastAgent 和 piAgent 都使用新的 Sandbox executor。 -9. 普通 Agent Sandbox 工具回归测试通过。 - -增加 Builder 阶段耗时日志: +同一 App 用户使用稳定的物理 Sandbox,不同 Builder `chatId` 使用独立的 `sessions/` 会话工作目录。Builder 在当前会话目录中准备: ```text -sandboxPrepareMs -researchToolMs -cliPlanMs -coreValidateMs -semanticReviewMs -cliApplyMs -workflowReadbackMs +sessions// + user_files/ + .fastgpt/workflow-builder/transaction/ + workflow.json + chunks/ + runs/ + bin/fastgpt-workflow ``` -增加每轮 `sandboxInstanceCount`。单 Builder 对话的目标值为 `1`。 - -## 6. 文件改动清单 - -| 文件或目录 | 改动 | -| --- | --- | -| `pro/admin/src/service/core/ai/workflowBuilder/sandbox.ts` | 单实例初始化、目录与 OS 用户隔离、Research Executor、TransactionRunner | -| `pro/admin/src/service/core/ai/workflowBuilder/runner.ts` | 一次 Sandbox 准备,注入 Research Executor,删除 transaction promise | -| `pro/admin/src/service/core/ai/workflowBuilder/cliGateway.ts` | 复用共享 Context 的事务执行能力 | -| `pro/admin/src/service/core/ai/workflowBuilder/apply.ts` | 删除第二次 runtime prepare,只执行事务 Apply 与最终校验 | -| `pro/admin/src/service/core/ai/workflowBuilder/handler.ts` | 删除 transaction Sandbox 参数传递,仅保留最终文档应用 | -| `packages/service/core/ai/llm/agentLoop/domain/tool.ts` | 定义 Sandbox Executor 领域接口 | -| `packages/service/core/ai/llm/agentLoop/provider/fastAgent/*` | 使用 Sandbox Executor 调度工具 | -| `packages/service/core/ai/llm/agentLoop/provider/piAgent/*` | 使用 Sandbox Executor 调度工具 | -| `packages/service/core/ai/sandbox/application/toolCall/*` | 提供普通 Agent 的默认 executor 工厂 | -| `pro/admin/test/core/ai/workflowBuilder/*` | 单实例、权限、CLI 事务与性能观测测试 | -| `packages/service/test/core/ai/llm/agentLoop/*` | fastAgent/piAgent executor 回归测试 | - -## 7. 验收标准 - -- Builder 普通问答、文件研究、CLI 查询、CLI 生成和 Apply 都只关联一个物理 sandboxId。 -- `transaction/workflow.json` 无法通过任何 Agent 可见工具读取或修改。 -- 模型即使输出绝对路径、`../`、软链接、Shell 命令,也不能跨越研究目录。 -- CLI Apply 成功后画布拿到的仍是服务端验证后的 WorkflowDocument。 -- 不存在双 Sandbox 分支、旧 transaction chatId、兼容开关或 fallback。 -- 运行详情可分段展示耗时,能够证明 Sandbox 启动和 CLI/LLM 各自的时间占比。 +内置 Skill 从物理 Sandbox 的共享 Skill 根目录注入,用户文件和 Builder 事务状态位于当前会话目录。AgentLoop 只获得研究工具执行器;该执行器拒绝显式访问事务目录、`workflow.json` 和 CLI,Gateway 持有底层 `ISandbox` 并独占事务文件。当前 SDK 尚不支持指定 Linux 用户运行命令,因此这里是服务端逻辑能力边界,不是 Linux 用户、容器或独立物理 Sandbox 级别的安全隔离。 -## 8. 风险与决策 +Checkpoint 只有在 `appId`、base checksum、manifest 和每个分片内容校验都一致时才恢复。Commit 成功、画布基线变化或 checkpoint 损坏都会清理旧事务。 -最大风险不是代码改动,而是 provider 是否支持可靠的同实例多用户权限隔离。若 provider 镜像不能提供该能力,不能用提示词或路径字符串替代;应先补齐镜像能力,再发布单 Sandbox Builder。 +## 7. 验收 -该方案会改动 Agent Loop 对 Sandbox tool 的执行接口,因此必须同时覆盖 fastAgent 和 piAgent。这里的共享接口改造是为了支持“受限执行器”这一新能力,不是为了保留旧 Builder 方案。Builder 本身不会保留双 Sandbox 或兼容逻辑。 +- FastAgent 与 PiAgent 都支持可选 CompletionPolicy,默认行为不变。 +- Builder 只启动一个主构建 AgentLoop;终止后最多追加一次无工具收尾 Agent 调用。 +- 模型输出阶段总结、复杂度说明或手工操作建议时不会结束未提交任务。 +- 需求提问、Mermaid 确认、修改后新 Mermaid 和取消均走结构化交互或工具。 +- Mermaid 确认后不再出现技术阶段确认。 +- 同一 Stage 或 Commit 目标第 10 次失败才终止,成功后清零。 +- Commit 前必须 draft validate,Commit 后画布文档与 Workflow Core 目标一致。 +- 最终答复由无工具 Agent 动态生成,不存在固定成功或失败回复。 diff --git "a/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" "b/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" index 366fdd17db90..10ccb33a7568 100644 --- "a/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" +++ "b/.agents/design/core/workflow/workflow-cli-builder-\345\212\237\350\203\275\345\274\200\345\217\221\346\226\207\346\241\243.md" @@ -3,7 +3,7 @@ ## 0. 文档标识 - 文档状态:开发中 -- 修订日期:2026-07-22 +- 修订日期:2026-08-04 - 关联需求文档:`workflow-cli-builder-需求设计文档.md` - 实施原则:先共享领域核心,再接 Web 和 CLI,最后接远端 - 文档范围:模块设计、实施任务、测试与发布方案 @@ -44,6 +44,9 @@ load/import 8. 本地 JSON 约束、Confirm 和远端版本冲突都要由代码重新计算,不能信任文件内布尔值。 9. CLI/Agent 参数语义通过独立 Template Descriptor 暴露,不向运行时节点 Schema 混入 CLI 专用字段。 10. CLI 本体不新增通用 Skill、MCP Server 或 MCP Adapter;PR5 的 `workflow-builder` 仅是产品层内置 Skill,不进入 WorkflowDocument、StoreWorkflow 或 CLI 领域 Schema。 +11. 当前 Builder 的系统工具事实源仍是 Service 层 SystemToolRepo;Core 继续使用现有 Provider 契约,CLI 只消费注入的组合 Provider,两者都不存工具全量数据。 +12. 系统工具 Provider 必须使用字段 allowlist 构造脱敏模板,不得进入 `secretsVal`、token、credential、Authorization 或存在性泄露信息。 +13. 外层 Agent Loop 仍使用 `workflow_cli_query`、`workflow_cli_stage`、`workflow_cli_commit`;系统工具作为 CLI Template Provider 数据源接入,不扩张 Agent Loop 的工具面。 ### 1.3 Core 抽取与最小 CLI 落地总览 @@ -201,6 +204,7 @@ fastgpt-workflow build --dir ./demo --output ./demo/workflow.generated.json | PR3 | 条件分支、catch、工具调用、动态 IO、循环和容器节点;insert、复杂 reconnect、attach/detach tool、父子移动 | 复杂图语义、副作用和 Web action 迁移 | | PR4 | 不新增节点;ChangeSet、plan/apply、checksum、Confirm、CI | 自动化事务和本地 CLI Beta | | PR5 | Workflow ChatBox、独立 Builder Handler、App Sandbox、内置 Skill、CLI 调用、ChangeSet 预览/应用 | 端到端 Workflow 辅助生成 Demo | +| PR5 后续增强 | 当前实例系统工具授权目录、组合 Provider、类型/数量输出、Skill 约束 | 不改 Agent Loop 工具面地扩展 Builder 能力 | | PR6 | 远端 Team App、System Tool、Tool 模板 Provider;pull/versions/preview | 远端只读和反编译 | | PR7 | draft save、publish、run、debug | 权限、发布校验和乐观并发 | @@ -283,6 +287,63 @@ flowchart LR - `workflow-core -> packages/service` - `packages/global -> workflow-core` +### 2.3 当前实例系统工具接入架构 + +这条链路使用 Builder Handler 已有的 Web 会话身份,不等待 PR6 的独立 CLI profile/API Key。Core 已有 `systemTool` TemplateRef 和 `WorkflowTemplateProvider`,CLI 已有完整的模板、ChangeSet 和校验链路,因此只补一个动态 Provider 并替换当前 builtin-only 注入点: + +```mermaid +flowchart LR + Request["Authenticated Builder request"] --> Filter["Reuse Web system-tool filtering"] + Repo["SystemToolRepo"] --> Filter + Filter --> Bundle["Sanitized authorized tool bundle"] + Bundle --> File["Protected Sandbox JSON file"] + File --> SystemProvider["CLI loads systemToolProvider"] + Builtin["builtinTemplateProvider"] --> Compose["compose providers"] + SystemProvider --> Compose + Compose --> CLI["Existing CLI template/node/changeSet"] + CLI --> Output["template list: kind + total + counts"] + CLI --> Show["template show: full sanitized descriptor"] + CLI --> Stage["Existing stage / validate / commit"] + Stage --> Core["Existing workflow-core apply/validate"] +``` + +责任分配: + +| 层 | 实现责任 | 禁止事项 | +| --- | --- | --- | +| SystemToolRepo | 合并插件服务和 Mongo 系统工具事实 | 为 CLI 维护副本 | +| System Tool Capability Service | 抽取 Web 当前可见性规则,返回已授权目录并按需生成脱敏 preview | 将越权条目或 Secret 返回给 Provider | +| Authorized Tool Bundle | 保存当前请求已授权的摘要和脱敏完整模板,同时供 Sandbox CLI 与服务端 plan 重算使用 | 保存 Secret、跨请求复用或成为长期工具仓库 | +| authorizedSystemToolProvider | 从 bundle 构造;`list()` 返回已授权引用,`resolve()` 只解析 bundle 中的 ID | 保存跨请求权限结论或自行实现用户鉴权 | +| CLI | 从 `CliContext` 取得组合 Provider,用现有 list/show/mutation/ChangeSet 链路消费 | 硬编码系统工具清单或另建系统工具命令体系 | +| workflow-core | 继续使用现有 TemplateRef、Provider、实例化和校验能力 | 新增权限模型、访问数据库或认证用户 | +| Gateway/Handler | 按当前身份构造组合 Provider,并注入 CLI 与服务端 plan 重算 | 新增 Agent Loop tool 或改变 stage/commit 协议 | +| 运行 Service | 延续现有工具状态检查和 Secret 解析 | 依赖 CLI 保存工具密钥 | + +计划文件落点: + +| 文件 | 计划改动 | +| --- | --- | +| `packages/service/core/app/tool/systemTool/capability.ts` | 抽取 Web API 和 Builder 共用的授权目录、精确详情解析和脱敏 presenter | +| `projects/app/src/pages/api/core/app/tool/getSystemToolTemplates.ts` | 保留 API 边界鉴权/入参/响应解析,内部调用 Capability Service,不复制过滤逻辑 | +| `packages/workflow-core/src/template/compose.ts` | 提供轻量 Provider 组合器;不新增授权快照 Schema | +| `packages/workflow-cli/src/type.ts`、`src/run.ts` 与模板 Provider loader | 从受控文件加载 systemTool Provider 并注入现有 `CliContext`;未提供文件时仍为 builtin-only | +| `packages/workflow-cli/src/commands/template.ts` | 从 Context Provider 读取模板,输出 `kind`、`total`、`counts`、`items`,保留精确 show | +| `packages/workflow-cli/src/commands/changeSet.ts` 及模板实例化命令 | 移除 builtin provider 硬编码,从 `CliContext` 获取 Provider | +| `pro/admin/src/service/core/ai/workflowBuilder/systemToolBundle.ts` | 按 Builder 身份构造 request-scoped 授权脱敏数据;服务端可从该数据构造 Provider | +| `pro/admin/src/service/core/ai/workflowBuilder/sandbox.ts` | 将 bundle 写入事务受保护目录,并通过固定环境变量把路径传给 CLI launcher | +| `pro/admin/src/service/core/ai/workflowBuilder/cliGateway.ts` | 复用现有 query/stage/commit,仅映射模板列表和详情查询 | +| `pro/admin/src/service/core/ai/workflowBuilder/plan.ts` | 服务端重算使用同一个组合 Provider,不再固定 builtin-only | +| `pro/admin/src/service/core/ai/skill/builtin/workflow-builder/` | 补充查看类型、数量、列表和精确 Descriptor 的流程,不存具体工具数据 | + +Provider 使用方式: + +1. `template list` 调用组合 Provider 的 `list()`,返回 builtin 与当前授权 systemTool,并增加模板类型和数量统计。 +2. `template show --template systemTool:` 调用同一 Provider 的 `resolve()`,按需生成完整脱敏节点和 Descriptor。 +3. Builder 服务端保留 bundle 的内存值,同时把完全相同的数据写入事务受保护 JSON 文件;CLI 子进程从该文件构造 Provider,不能接收 Agent 指定的文件路径。 +4. 节点创建、工具挂载、ChangeSet plan/apply 和 Builder 服务端重算都基于该 bundle 使用组合 Provider;目录外 ID 在 `resolve()` 时统一失败。 +5. 每次新 Builder 请求重新读取 Capability Service 并覆盖文件,所以系统工具更新无需 cron 或 Core/CLI 同步;该文件只是子进程传输载体,不是新的持久化模型。 + ## 3. workflow-core 文件设计 ### 3.1 文件清单 @@ -574,6 +635,26 @@ Provider 行为: - `template show` 调用 `resolve -> normalizeNodeTemplateDescriptor`。 - `node add` 只使用 `resolved.template` 实例化,不能把 `automationMeta` 展开到节点。 +#### 3.3.4 系统工具 Provider 组合契约 + +Core 不新增授权快照数据模型,只提供 Provider 组合能力。Builder 服务端从内存 bundle 构造 Provider,Sandbox CLI 从受保护 bundle 文件构造等价 Provider: + +```ts +const templateProvider = composeWorkflowTemplateProviders([ + builtinTemplateProvider, + authorizedSystemToolProvider +]); +``` + +实现约束: + +- `authorizedSystemToolProvider.list()` 只返回 Service 已过滤的 `systemTool` 引用。 +- `resolve(systemToolRef)` 先检查引用是否位于当前授权集合,再调用脱敏详情 presenter;未命中时返回统一 `WORKFLOW_TEMPLATE_UNAVAILABLE`,不区分不存在和无权限。 +- Bundle 已包含 CLI 构建节点所需的脱敏模板数据,Provider 只做内存查询,不在 Sandbox 子进程中回调 FastGPT Service。 +- 组合 Provider 按 `NodeTemplateRef.kind` 路由;相同引用由多个 Provider 声明时失败,不依赖注册顺序覆盖。 +- Core 不校验用户、团队、来源、状态或 `hideTags`,也不定义授权 Schema;这些规则只在 Service 层维护。 +- Service presenter 必须通过字段 allowlist 构造模板,测试显式确认 `secretsVal`、token、credential 和未知字段不会进入 CLI 输出。 + ### 3.4 语义执行端口 ```ts @@ -1127,6 +1208,20 @@ type CliCommandDefinition = { 禁止在 handler 内复制节点模板、handle、嵌套或校验规则。 +所有需要模板的 handler 不得直接 import `builtinTemplateProvider`,而是从 `CliContext.templateProvider` 获取组合 Provider。默认本地 CLI 仅注入 builtin provider;Workflow Builder 注入 `builtin + authorized systemTool` provider;PR6 独立 CLI 再按 profile 注入 remote provider。 + +当前 Builder 在 Sandbox 中运行真实 CLI 子进程,Provider 对象不能跨进程传递。CLI launcher 由服务端设置固定的 `FASTGPT_WORKFLOW_TEMPLATE_BUNDLE` 路径;`runCli()` 读取并校验该文件后构造组合 Provider。普通本地 CLI 未设置该变量时保持 builtin-only。该环境变量和文件路径不能来自 Agent tool 参数。 + +```ts +type CliContext = { + locale: string; + templateProvider: WorkflowTemplateProvider; + // IO/output/profile 等现有依赖省略 +}; +``` + +`commands/template.ts`、`commands/changeSet.ts`、`commands/document.ts` 和节点/工具命令必须消费同一 `CliContext`,否则会出现 list/show 能看到系统工具,但 ChangeSet 无法实例化的假接入。 + ### 6.4 命令文件映射 | CLI | 文件 | Core 调用 | @@ -1164,6 +1259,23 @@ const showTemplate = async ({ ref, locale, format }) => { `template show --format json` 必须输出稳定的 `NodeTemplateDescriptor`。它只读取模板和补充 metadata,不创建节点、不写 `workflow.json`、不调用保存 API。 +对系统工具: + +- `template list` 继续从 `templateProvider.list()` 获取全部可用模板,并在现有列表结果上增加 `total`、按 `kind` 聚合的 `counts` 和每项的 `kind`。 +- `counts.systemTool` 只统计当前 Provider 中已授权的系统工具;禁止返回过滤前的全站工具数量。 +- `template show --template systemTool:` 从同一 Provider 解析并归一化完整脱敏 Descriptor。 +- 本地 CLI 未注入系统工具 Provider 时只返回 builtin 模板,不主动访问 FastGPT 数据库。 + +稳定 JSON 结构: + +```ts +type TemplateListResult = { + total: number; + counts: Partial>; + items: Array; +}; +``` + ### 6.4.2 `input set/ref` 参数校验 ```ts @@ -1319,17 +1431,18 @@ pro/admin/src/service/core/ai/skill/builtin/workflow-builder/SKILL.md 1. 用 `authApp` 验证当前成员对 App 的写权限并执行聊天频控。 2. 将前端当前轮 `messages` 转换为 ChatItem,通过 `getChatItems` 恢复同 `appId + chatId` 的历史和 memories;只有 ask/interactive continuation 恢复未完成 AgentPlan,普通新请求不继承旧的未完成 AgentPlan。 3. 调用 `preChatRound`,然后由 `runWorkflowBuilder` 直接调用公共 Agent Loop;AgentLoopCore 继续负责 SSE、AgentPlan、ask、assistantResponses、nodeResponses 和 requestId 转换。 -4. 研究 Sandbox 按 `sourceType=app + sourceId=appId + userId + chatId` 寻址,注入内置 `workflow-builder` Skill、用户文件和普通 Sandbox tools。 -5. 事务 Sandbox 使用由 Builder chatId 稳定派生的 transaction chatId,每轮写入前端当前 `WorkflowDocument`并注入版本一致的 CLI;该 SandboxClient 不注入 Agent Loop system tools。 -6. `workflow_cli_query` 只接收结构化 action 和参数,Gateway 映射为白名单 CLI 查询,所有值使用 `shellQuote`,模型不得传递 Shell 或全局 CLI flags。 -7. `workflow_cli_apply` 直接接收 `WorkflowChangeSet`;Gateway 以 tool call ID 生成临时文件,执行 `changeset plan --input --format json`,无论成功失败都在 `finally` 删除。 -8. Gateway 解析 CLI JSON envelope,再通过 workflow-core 重算 WorkflowPlan。校验失败时返回结构化 diagnostics 并最多重试三次。 -9. Plan 校验成功后,Gateway 立即调用 Handler 注入的 apply 回调,以本轮 `WorkflowDocument` 为 base 执行 `changeset apply --confirm --format json`。 -10. Apply 回调清理临时 plan,读取 CLI 产出的目标 `workflow.json`,重新执行 Schema、appId 和 target checksum 校验;只有成功后工具才返回 `state=applied`。 -11. 工具返回 `stop=true` 只结束变更循环;Runner 紧接着启动一次禁用所有工具的主 Agent 收尾,由 Agent 根据权威 tool result 判断已完成或具体失败问题。 -12. Handler 使用 `finalizeChatRound` / `updateInteractiveChat` 持久化普通聊天历史,并通过 `workflowBuilderApplied` SSE 只返回验证后的目标 WorkflowDocument。 -13. 前端通过 Web Adapter 用目标 Document 覆盖当前内存画布,等待 ReactFlow 完成节点测量后复用现有 dagre 布局和 `fitView`。该操作不自动调用保存、发布或运行 API。 -14. 收尾 Agent 的终态回答同时写入 SSE 和 ChatItem;固定成功/失败摘要只在收尾模型异常或返回空内容时兜底。 +4. 同一 App 用户按 `sourceType=app + sourceId=appId + userId` 复用一个物理 Sandbox,Builder `chatId` 映射到独立的 `sessions/` 会话工作目录;内置 `workflow-builder` Skill、用户文件和普通 Sandbox tools 通过研究执行器提供给 AgentLoop。 +5. 同一会话工作目录下的 `.fastgpt/workflow-builder/transaction` 保存当前 `WorkflowDocument`、Chunk checkpoint 和版本一致的 CLI。Gateway 持有底层 `ISandbox` 并独占事务路径,AgentLoop 不直接获得该事务执行能力。 +6. 需求和资源闭合后,Agent 必须调用 `workflow_builder_present_preview` 提交 `title + mermaid + sections` 完整方案。工具生成 `workflowBuilderPreview` 交互并统一注入 `confirm`、`revise`、`cancel` 三个动作;未确认前 Runner 拒绝 Stage 和 Commit,修改意见提交后要求 Agent 重新调用该工具生成完整新版方案。 +7. `workflow_cli_query` 只接收结构化 action 和参数,Gateway 映射为白名单 CLI 查询,所有值使用 `shellQuote`,模型不得传递 Shell 或全局 CLI flags。 +8. `workflow_cli_stage` 只接收版本化 `WorkflowChangeSetChunk`,在私有草稿中幂等 upsert/remove/reset,立即检查分片依赖和命令目标冲突,不修改画布。 +9. `workflow_cli_query` 的 `view=draft, action=validate` 合并分片,执行 CLI plan 并由 workflow-core 重算 WorkflowPlan;校验通过后返回对应 `draftRevision`。 +10. `workflow_cli_commit` 只接收已校验且未变化的 `draftRevision`,Gateway 内部调用 Handler 注入的 apply 回调,以本轮 `WorkflowDocument` 为 base 执行 CLI Confirm Apply。 +11. Apply 回调清理临时 plan,读取 CLI 产出的目标 `workflow.json`,重新执行 Schema、appId 和 target checksum 校验;只有 commit 成功后才返回 `state=applied, taskComplete=true`。 +12. 工具返回 `stop=true` 只结束主构建循环;Runner 紧接着启动一次禁用所有工具、最多一轮的收尾 Agent,根据权威终止事实生成已完成或具体失败结论。 +13. Handler 使用 `finalizeChatRound` / `updateInteractiveChat` 持久化普通聊天历史,并通过 `workflowBuilderApplied` SSE 只返回验证后的目标 WorkflowDocument。 +14. 前端通过 Web Adapter 用目标 Document 覆盖当前内存画布,等待 ReactFlow 完成节点测量后复用现有 dagre 布局和 `fitView`。该操作不自动调用保存、发布或运行 API。 +15. 收尾 Agent 的终态回答同时写入 SSE 和 ChatItem;收尾模型异常或返回空内容时保留主 Agent 已产生的内容和结构化运行结果,不注入固定成功或失败文案。 请求 Schema 位于共享 OpenAPI 目录,只包含当前轮消息和当前画布事实: @@ -1352,14 +1465,34 @@ type WorkflowBuilderApplied = { }; ``` -`AgentPlan` 与 `WorkflowPlan` 是两个独立协议。Agent 只有在网络检索、文档读取或复杂多步分析确有需要时才创建 AgentPlan;SKILL 中列出的 CLI 操作顺序不得机械映射为 AgentPlan 步骤。WorkflowPlan 是 Gateway 的服务端内部校验契约,不形成待确认状态;apply 完成后必须再调用一次无工具主 Agent 生成最终结论。 +`AgentPlan` 与 `WorkflowPlan` 是两个独立协议。Agent 只有在网络检索、文档读取或复杂多步分析确有需要时才创建 AgentPlan;SKILL 中列出的 CLI 操作顺序不得机械映射为 AgentPlan 步骤。WorkflowPlan 是 Gateway 的服务端内部校验契约,不形成待确认状态;apply 完成后必须另调用一次无工具、最多一轮的收尾 Agent 生成最终结论。 -不向前端开放 `systemPrompt` 和 `mode`;不单独传输完整历史、修改记录或节点选中上下文。PR5 只支持当前 CLI 已暴露的内置节点和本地静态校验,不自动保存、发布、调试或调用 PR6/PR7 远端命令。 +不向前端开放 `systemPrompt` 和 `mode`;不单独传输完整历史、修改记录或节点选中上下文。PR5 基线只支持内置节点和本地静态校验;本文的后续增强另外注入当前 Web 会话已授权的系统工具,但仍不自动保存、发布、调试或调用 PR6/PR7 远端命令。 -Workflow Builder 后端仍使用 `sourceType=app`,以复用普通 Chat round 和 App Sandbox 资源模型;研究 Sandbox 使用 Builder chatId,事务 Sandbox 使用派生 transaction chatId。前端必须使用独立的 Workflow Builder chatId 缓存键,不得复用普通应用对话的 chatId。入口由 `feConfigs.show_workflow_builder` 独立开关控制,关闭后不注册 UI 入口,不影响手工画布编辑。 +Workflow Builder 后端使用 `sourceType=app`,以复用普通 Chat round 和 App Sandbox 资源模型。物理 Sandbox 按 App 与用户稳定复用,Builder `chatId` 只用于分配 `sessions/` 会话工作目录和对话历史。前端必须使用独立的 Workflow Builder chatId 缓存键,不得复用普通应用对话的 chatId。入口由 `feConfigs.show_workflow_builder` 独立开关控制,关闭后不注册 UI 入口,不影响手工画布编辑。 Workflow Builder 必须隔离“工作流事实”和“辅助对话运行配置”:`WorkflowDocument.chatConfig` 仍作为当前画布事实写入事务 Sandbox,但 Builder 前端 `ChatBox` 和后端 Runner 只能使用共享的最小 Builder ChatConfig,不得继承当前工作流的 `welcomeText`、`variables`、`autoExecute`、`questionGuide`、语音、定时触发或输入引导配置。Builder 保留本次辅助 Agent 的运行详情,并允许通过 `llmRequestIds` 查看本次 LLM 请求体和响应体;该详情不得引用当前工作流的旧运行记录。 +#### 7.4.1 系统工具 Provider 与 Gateway 接入 + +实现优先复用已有服务,不把 `getSystemToolTemplates` API Handler 直接当成内部函数调用。应将其中的可见性规则收敛为可被 Web API 和 Builder 共用的 Service 函数。详情 presenter 复用 `getClientSystemToolPreviewNode` 的节点 IO 转换逻辑,并仅返回节点构建需要的脱敏字段;不把原始 `secretSchema`、`secretsVal` 或系统密钥发给 CLI/Agent。 + +Builder 流程调整为: + +1. Handler 在 `authApp` 和用户身份确认后,调用 Capability Service 获取目录;规则与 Web 一致:来源包含 system/team/当前 active debug source,状态为 `Normal` 或旧来源未返回状态时可新增,非 root 用户应用 `hideTags` 过滤。 +2. Capability Service 为授权工具生成节点构建所需的脱敏 bundle;Builder 服务端从内存 bundle 构造 Provider,用于 `validateWorkflowBuilderPlanResult`。 +3. Sandbox prepare 将相同 bundle 写入事务受保护目录,launcher 通过固定环境变量传递文件路径;CLI 子进程读取文件并构造 `builtin + authorized systemTool` Provider,Agent 不能读取、替换或指定该路径。 +4. `workflow_cli_query(template_list)` 仍走现有 template list,只是结果增加 `kind/total/counts`;`template_show` 仍走现有 template show,不新增 Agent Loop tool 或任意 Shell 参数。 +5. `workflow_cli_stage` 和 `workflow_cli_commit` 协议不变,不增加单独的权限扫描;当草稿引用未授权 ID 时,现有 plan/apply 调用 Provider `resolve()` 并返回 `WORKFLOW_TEMPLATE_UNAVAILABLE`。 +6. 工作流真实运行时仍由现有 `runTool`/SystemToolRepo 检查工具状态并解析 Secret;Builder Provider 不替代运行时密钥管理。 + +Skill 改动限定在现有文件: + +- `pro/admin/src/service/core/ai/skill/builtin/workflow-builder/SKILL.md`:增加“搜索授权系统工具 -> 查询精确 Descriptor -> stage -> draft validate -> commit”流程,以及 unavailable 处理规则。 +- `references/templates-and-nodes.md`:增加 `systemTool:` 模板引用、toolset 父子查询和完整 Descriptor 查询说明。 +- `references/edges-and-tools.md`:说明系统工具节点与 toolCall 的挂载方式仍由运行时 Descriptor/命令契约决定。 +- 不在 Skill 中枚举工具名称、数量、ID、版本或参数 Schema;这些数据只从 `workflow_cli_query` 运行时获取。 + ## 8. 远端 API 实现 该部分分为 PR6 的远端只读能力和 PR7 的远端写入与运行,不应混入本地 CLI MVP 或 PR5 Workflow 辅助生成 Demo。 @@ -1496,6 +1629,7 @@ baseVersionId: ObjectIdSchema.optional() | `test/io/workflowFile.test.ts` | parse/serialize round-trip、Schema 错误和原子写入 | | `test/store/roundtrip.test.ts` | Store -> Document -> Store 语义等价 | | `test/template/runtime-isolation.test.ts` | Descriptor 不进入 ReactFlow Node、StoreNode、`workflow.json` 和 StoreWorkflow | +| `test/template/providerComposition.test.ts` | Provider 组合、重复引用冲突、systemTool 路由和 unavailable | ### 9.2 workflow-cli 契约测试 @@ -1513,6 +1647,7 @@ baseVersionId: ObjectIdSchema.optional() | `test/stdinChangeSet.test.ts` | 单命令/多命令 ChangeSet、stdin 解析、零过程文件和原子失败 | | `test/mutationEquivalence.test.ts` | 人工 flags、Web Command 与单命令 ChangeSet 产生相同 Document | | `test/e2e.test.ts` | 待绑定资源下 validate/build 成功、warning 稳定、构建不合成资源值 | +| `test/templateProvider.test.ts` | `CliContext` 注入 builtin/system provider,list/show/node/tool/ChangeSet 共用同一 Provider | Command Registry 测试必须校验需求文档完整命令目录中的每个 command path 都有唯一注册项。未到首次开放 PR 的命令不进入当前 help snapshot,但必须在对应 PR 合并时同时增加 registry、handler、测试和帮助快照。 @@ -1574,18 +1709,28 @@ PR1 不接入 Web Adapter,也不要求复刻当前 Web 校验器的短路顺 - Builder 展示本次 Agent 运行详情;存在 `llmRequestIds` 时可打开 LLM 请求详情并查看请求体,不读取普通工作流对话的运行详情。 - Handler 按 `appId + chatId` 恢复历史 ChatItem 和 memories;ask 交互恢复 active plan,普通新请求不恢复未完成 active plan。 - 显式 model 与默认 model 路径均进入公共 Agent Loop,不调用 `dispatchWorkFlow`,usage 只计费一次。 -- 不同 `chatId` 使用独立研究 Sandbox 和事务 Sandbox,同一会话稳定恢复,两类 Sandbox 物理 ID 不同。 -- prepare action 每轮只向事务 Sandbox 写入当前 WorkflowDocument 和 CLI,内置 Skill 只注入研究 Sandbox,不写入用户工作区。 +- 同一 App 用户的不同 `chatId` 复用同一物理 Sandbox,但使用独立的 `sessions/` 会话工作目录;同一会话稳定恢复自己的用户文件和事务 checkpoint。 +- prepare action 每轮向当前会话的事务目录写入 WorkflowDocument 和 CLI;内置 Skill 由共享 Skill 根目录注入,AgentLoop 通过研究执行器使用它。 - `workflow_cli_query` 拒绝 mutation、artifact、apply、未知 action 和路径/全局 flag 注入。 -- `workflow_cli_apply` 拒绝非法 ChangeSet,每次使用唯一临时文件,无论 CLI 成功或失败都清理;第三次校验失败终止变更阶段。 +- `workflow_cli_stage` 拒绝非法分片,`workflow_cli_commit` 拒绝未校验或已过期 `draftRevision`;临时文件无论 CLI 成功或失败都清理,同一 Stage/Commit 修复目标第 10 次连续失败时结构化终止。 - 有效 WorkflowPlan 必须在 Gateway 内立即 apply;tool result 只返回 `applied` 或失败诊断,不交付待确认 metadata。 -- tool 终止后必须出现一次无工具主 Agent 调用;执行详情不得以 `Workflow CLI Apply` 工具作为最后一项。 +- tool 终止后必须出现一次无工具、最多一轮的收尾 Agent 调用;执行详情不得以 `Workflow CLI Apply` 工具作为最后一项。 - base checksum 匹配时,Gateway 通过 Sandbox CLI Confirm 门禁自动应用,并通过 SSE 返回服务端验证后的目标 Document。 - 目标 Document 允许覆盖生成期间的人工画布修改;导入后必须复用现有 dagre 布局能力自动对齐并执行 `fitView`。 - 篡改 plan、target checksum 不一致、CLI 输出非法、同一 Sandbox 并发写入时均不得替换当前画布。 - 刷新页面后恢复聊天和生成状态;不存在待确认 plan、plan 状态接口或本地 plan 存储。 - 刷新恢复后仍能看到本轮主 Agent 终态;收尾失败时的兜底摘要包含实际变更或未应用原因。 +#### 9.6.1 系统工具 Provider 测试 + +- Capability Service 与 `getSystemToolTemplates` 对同一用户/团队/调试会话返回相同可见集合,覆盖 system/team/active debug source、root、user tags、`hideTags`、Normal/非 Normal 状态和 toolset child。 +- `template_list` 的 `total`、`counts.builtin`、`counts.systemTool` 和 `items[].kind` 与组合 Provider 返回结果一致,不包含权限过滤前的数量。 +- `template_show` 返回完整脱敏 Descriptor;CLI JSON stdout、tool result 和 audit 均不包含 `secretsVal`、token、credential 或 Authorization。 +- `template_list/template_show`、`node.add`、`tool.attach`、draft validate、commit 对已授权工具成功,对手写未授权/不存在/非 Normal ID 在 Provider resolve 时返回同一 unavailable code。 +- CLI plan 和 `validateWorkflowBuilderPlanResult` 使用同一组合 Provider,不再因 builtin-only provider 对合法 `systemTool` 产生假阴性。 +- 下一轮 Builder 请求可看到新安装/更新的工具和最新权限集合,不依赖定时同步。 +- Skill 契约测试确认工具列表/Schema 没有静态写入 Skill,且 Agent 会先 query list/show 再 stage/commit。 + ### 9.7 远端契约测试 - API Key 可/不可访问各 endpoint。 @@ -1649,6 +1794,8 @@ pnpm --filter @fastgpt/workflow-cli test:ci PR5 额外要求 Workflow Builder Handler、Sandbox prepare action、聊天恢复、usage 单次上报、checksum 过期和 Web apply 的定向测试;Pro 内置 Skill 注入测试不得依赖用户工作区或外部网络。 +系统工具增强额外要求 System Tool Capability Service 权限矩阵、Provider 组合、CLI 类型/数量输出、未授权 ID resolve 拒绝和 Secret 零泄露的定向测试;不使用真实 Secret 或外部付费工具完成自动化测试。 + i18n 要求: - core diagnostic 使用稳定 code 和参数,不内置面向用户的中文/英文长文案。 @@ -1666,8 +1813,9 @@ i18n 要求: 3. PR3 开放复杂图语义,Web 按动作迁移到 shared commands。 4. PR4 完成 ChangeSet、Confirm、checksum 和 CI 后发布本地 CLI Beta。 5. PR5 在 Workflow 编辑器开放内部辅助生成 Demo,只支持 ChangeSet 预览和画布应用。 -6. PR6 完成 API Key 只读契约后开放 remote read beta。 -7. PR7 完成权限、并发和发布测试后开放 remote write beta。 +6. 完成 T41.7-T41.14 后在 Workflow Builder 开放当前实例系统工具,保持 query/stage/commit 外层契约不变;可通过独立 feature flag 回滚系统工具 Provider 注入。 +7. PR6 完成 API Key 只读契约后开放 remote read beta。 +8. PR7 完成权限、并发和发布测试后开放 remote write beta。 ### 12.2 回滚边界 @@ -1690,8 +1838,9 @@ i18n 要求: 8. CLI handlers:是否没有复制领域逻辑,结构失败是否零写入,待绑定时是否保持资源字段为空。 9. Web adapter:是否没有把 ReactFlow 放入 core。 10. Workflow Builder:是否保持独立 Handler,只复用底层 Chat/Agent/Sandbox 能力,并在服务端二次校验 ChangeSet。 -11. API/远端 Provider:是否逐 endpoint 鉴权、只返回可读资源默认值,并在运行/发布时重新检查资源与版本。 -12. golden 和 adapter 等价测试:是否证明没有行为漂移。 +11. Authorized System Tool Provider:是否由 Service 过滤,list/show/节点/ChangeSet/服务端重算是否共用 Provider,是否正确输出类型和数量并拒绝越权 ID 与 Secret。 +12. API/远端 Provider:是否逐 endpoint 鉴权、只返回可读资源默认值,并在运行/发布时重新检查资源与版本。 +13. golden 和 adapter 等价测试:是否证明没有行为漂移。 ## 14. 实施 TODO @@ -1751,7 +1900,7 @@ i18n 要求: - [x] T34 定义 `WorkflowBuilderChatBodySchema` 和 Workflow Builder SSE/ChangeSet 输出契约,只接收当前轮 messages、model、WorkflowDocument 和 checksum。 - [x] T35 在 Pro 中实现独立 `handleWorkflowBuilderChat`、Runtime 构造和 API route,复用底层 Chat/Workflow 能力但不抽取或修改 Skill Handler。 -- [x] T36 实现 App Sandbox prepare action,每轮写入当前 `workflow.json`,注入版本匹配的 CLI 构建产物,并确保不同 chatId 的 Sandbox 隔离。 +- [x] T36 实现 App Sandbox prepare action,每轮向 `sessions/` 会话工作目录写入当前 `workflow.json`,注入版本匹配的 CLI 构建产物,并确保不同 chatId 的事务目录隔离。 - [x] T37 实现 Pro 内置 `workflow-builder` Skill,约束 Agent 先查询 Descriptor、只调用 JSON CLI、不直接编辑 Document/StoreWorkflow。 - [x] T38 恢复普通 Chat 历史、memories、plan/ask、模型选择、SSE、停止和 usage,并通过现有 Chat round 流程持久化。 - [x] T39 在 Handler 中对 Sandbox 输出的 ChangeSet 执行 Schema、base checksum、graph 和 reference 二次校验,禁止未确认的远端保存/发布。 @@ -1760,9 +1909,20 @@ i18n 要求: - [x] T41.1 隔离 Workflow Builder ChatConfig 与 WorkflowDocument ChatConfig,并展示本次 Builder Agent 的运行详情和 LLM 请求体详情。 - [x] T41.2 区分可选 AgentPlan 与必选 WorkflowPlan:普通新请求不继承旧 active plan,ask continuation 保持可恢复,WorkflowPlan 成功后不再调用模型并自动 Apply。 - [x] T41.3 将 `dispatchWorkFlow + WorkflowStart -> Agent` 替换为独立 `WorkflowBuilderRunner`,直接复用 Agent Loop/AgentLoopCore 协议和 Chat round 生命周期。 -- [x] T41.4 实现 `WorkflowCliGateway`:查询白名单、结构化 ChangeSet plan、三次失败门禁、tool metadata plan 交付和 `stop=true`。 -- [x] T41.5 物理隔离研究 Sandbox 与事务 Sandbox,移除固定 `workflow-plan.json` 和模型管理中间文件的协议。 -- [x] T41.6 迁移 Skill、Handler 和自动 Apply,补齐普通问答、ask 恢复、成功 plan 立即停止并应用、三次失败、临时文件清理、Sandbox 隔离和计费/requestId 测试。 +- [x] T41.4 实现 `WorkflowCliGateway`:查询白名单、分片草稿 stage/draft validate/commit、同目标十次修复门禁和成功 `stop=true`。 +- [x] T41.5 在单物理 Sandbox 内拆分研究执行器与 Gateway 事务能力,事务状态落在当前会话的受保护目录,并移除固定 `workflow-plan.json` 和模型管理中间文件的协议。 +- [x] T41.6 迁移 Skill、Handler 和原子 Commit,补齐普通问答、ask 恢复、draft validate、成功 commit 立即停止并应用、十次同目标修复上限、临时文件清理、Sandbox 隔离和计费/requestId 测试。 + +#### 当前 Workflow Builder 系统工具增强 + +- [ ] T41.7 在 workflow-core 增加轻量 Provider 组合器,复用现有 `NodeTemplateRef.systemTool` 和 `WorkflowTemplateProvider`;覆盖重复引用冲突、kind 路由和 unavailable 测试,不新增授权快照 Schema。 +- [ ] T41.8 将 workflow-cli 对 `builtinTemplateProvider` 的硬编码改为 `CliContext.templateProvider` 依赖注入,让 template/document/changeSet/node/tool 命令共用组合 Provider;`template list` 增加 `kind`、`total`、`counts`,`template show` 保持完整 Descriptor。 +- [ ] T41.9 在 Service 层抽取 Web API 与 Builder 共用的 System Tool Capability Service,复用 SystemToolRepo、active debug source、root/user tags、`hideTags` 和状态策略,用 allowlist presenter 产出授权列表和脱敏 preview。 +- [ ] T41.10 在 Builder 中生成 request-scoped 授权脱敏 bundle:服务端内存用于 plan 重算,同一数据写入 Sandbox 事务受保护文件并通过固定环境变量交给 CLI loader;两端构造等价组合 Provider,目录外 ID unavailable,不增加 cron 或长期持久化。 +- [ ] T41.11 保持 `WorkflowCliGateway` 的 query/stage/commit 外层契约不变,让 list/show、节点/工具命令、draft validate、commit 内部 plan/apply 全部消费同一个组合 Provider。 +- [ ] T41.12 更新 `workflow-builder/SKILL.md`、`references/templates-and-nodes.md` 和 `references/edges-and-tools.md`,说明查看模板类型、数量、列表、精确 Descriptor 和 unavailable 处理,不写死任何工具数据。 +- [ ] T41.13 补齐 Core/CLI/Service/Builder 定向测试,覆盖 Web 可见集合等价、类型/数量统计、直接 ID 越权、Secret 零泄露、toolset child 和跨请求更新。 +- [ ] T41.14 完成手工端到端验收:用普通用户/root/团队/调试来源分别生成包含系统工具的工作流,确认列表数量、画布节点、工具边、参数 Schema 和权限拒绝符合 Web 现状。 ### PR6:远端只读能力 @@ -1795,10 +1955,11 @@ i18n 要求: ## 15. 开发开始前的阻断条件 -以下三项没有确认前,不进入源代码实现: +以下四项没有确认前,不进入源代码实现: 1. 接受 `WorkflowDocument` 为唯一 CLI 规范状态,初期直接持久化为单文件 `workflow.json`;分片 Manifest 不进入 PR1 到 PR7。 2. 接受执行边使用 `@next/@target/...`,变量引用使用 `node.output`,两者彻底分开。 3. 接受按 PR1 到 PR7 增量落地,PR1 只作为内部技术 Demo,PR4 后发布本地 CLI Beta,PR5 接入 Workflow 辅助生成 Demo,PR6/PR7 再开放远端能力。 +4. 接受当前 Builder 系统工具由 Service 按用户权限构造 request-scoped Provider,并与 builtin Provider 组合;CLI 只增加类型和数量输出,Core/CLI 不存工具全量信息、不做定时同步,外层 Agent Loop 仍使用 query/stage/commit。 确认后,实际开发从 T1 开始,并按 TODO 逐项更新状态。 diff --git "a/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" "b/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" index a3f906e90081..f2123d60d152 100644 --- "a/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" +++ "b/.agents/design/core/workflow/workflow-cli-builder-\351\234\200\346\261\202\350\256\276\350\256\241\346\226\207\346\241\243.md" @@ -3,7 +3,7 @@ ## 0. 文档标识 - 文档状态:开发中 -- 修订日期:2026-07-22 +- 修订日期:2026-08-04 - 目标仓库:FastGPT - 目标对象:FastGPT Workflow 的本地构建、自动化修改、Web 辅助生成、远端保存、发布与调试 - 关联开发文档:`workflow-cli-builder-功能开发文档.md` @@ -32,6 +32,7 @@ FastGPT Workflow CLI ┘ 9. 第一阶段只交付本地核心闭环,远端鉴权和并发控制完成后再开放远端写入。 10. 新建和导入工作流必须包含唯一且不可删除的系统配置节点;变量和开关仍以 `chatConfig` 为唯一事实源,系统配置节点只提供 Web 编辑入口。 11. PR5 在 Workflow 编辑器内提供独立的辅助生成 Demo:复用现有 Chat、Agent Loop、Sandbox、Skill 和计费基础设施,但不抽象或改写 Skill 辅助生成的业务 Handler。 +12. 当前 Workflow Builder 可使用已安装系统工具,但工具事实和用户权限仍由 FastGPT Service 负责;Service 按当前身份构造只包含已授权工具的 `WorkflowTemplateProvider`,CLI/Core 复用现有模板链路,不持久化全量工具清单,外层 Agent Loop 工具集不变。 ## 2. 目标与设计约束 @@ -49,6 +50,7 @@ FastGPT Workflow CLI ┘ - 将本地草稿保存为可审查、可版本控制的 `workflow.json`。 - 拉取、保存、发布、调试和运行远端 FastGPT 应用。 - 让 AI 只生成可审查的 ChangeSet,再由确定性代码应用。 +- 让 Workflow Builder 能枚举当前用户有权限的全部系统工具,按需查看完整 Schema/节点信息,并用实际 `systemTool` 模板构建工作流。 ### 2.2 设计约束 @@ -60,6 +62,8 @@ FastGPT Web 已经具备完整的画布操作。CLI 需要将分布在 React Con - 嵌套关系遵循与 Web 相同的领域规则。 - CLI 与 Web 使用同一套运行、发布校验规则。 - 远端命令只使用已明确支持并经过权限测试的 API Key 契约。 +- 系统工具可见性必须在 Service 边界按当前用户、团队、来源、状态和隐藏标签过滤;CLI/Core 只消费过滤结果,不自行推导权限。 +- 系统工具 Provider 返回值不得包含 `secretsVal`、token、credential、Authorization 或其他敏感值;不存在、无权限和已下架对 CLI/Agent 统一表现为不可用。 第一阶段先建立可被 Web 和 CLI 共同调用的工作流领域核心,再实现命令行入口。 @@ -198,10 +202,11 @@ FastGPT API / Service -> Schema、权限、资源、运行和发布校验 - Workflow 编辑器内的独立聊天入口。 - 建立独立 `WorkflowBuilderRunner`,直接复用公共 Agent Loop 协议,不再构造 `WorkflowStart -> Agent` 假工作流。 -- 使用研究 Sandbox 承载 Skill、文档和通用分析;使用隔离的事务 Sandbox 承载当前 `workflow.json` 和固定版本 CLI。 -- Agent 只通过 `workflow_cli_query` 和 `workflow_cli_apply` 访问事务 Sandbox,不获得该 Sandbox 的 Shell 权限。 -- `workflow_cli_apply` 直接接收 `WorkflowChangeSet`,由 Gateway 完成 CLI plan、Core 二次校验和原子 apply,不产生待确认中间态。 -- 应用成功或失败终止后,Runner 必须进入一次禁用工具的主 Agent 收尾,再由 Web Adapter 覆盖当前画布并自动对齐。 +- 同一 App 用户复用一个物理 Sandbox,不同 Builder `chatId` 使用独立的 `sessions/` 会话工作目录;当前会话同时承载 Skill、用户文件和受保护的事务目录。 +- AgentLoop 只获得研究工具执行器,`workflow_cli_query`、`workflow_cli_stage` 和 `workflow_cli_commit` 由 Gateway 持有底层 Sandbox 能力并访问事务目录;这是服务端逻辑能力边界,不宣称物理或 OS 权限隔离。 +- 业务需求和资源闭合后,Agent 必须调用 `workflow_builder_present_preview` 提交 `title + mermaid + sections` 完整方案;运行时统一注入 `confirm`、`revise`、`cancel` 三个动作,未确认前拒绝 Stage 和 Commit。 +- `workflow_cli_stage` 维护分片化私有草稿,draft validate 由 Gateway 完成 CLI plan 和 Core 二次校验;`workflow_cli_commit` 只原子应用已校验且版本未变的草稿。 +- 应用成功或失败终止后,Runner 必须另启动一次禁用工具、最多一轮的收尾 Agent,再由 Web Adapter 覆盖当前画布并自动对齐。 - PR5 不自动保存、发布或调试,不支持节点选中上下文、文件上传或复杂 diff 编辑。 ### 4.5 档位 E:远端生命周期 @@ -362,6 +367,8 @@ Automation Metadata 只进入 Descriptor 归一化和参数校验,不进入节 | Workflow Core | `packages/workflow-core` | 模板实例化、Command、图操作、引用、嵌套、校验、编译 | ReactFlow、fs、HTTP、终端交互 | | Web Adapter | `projects/app/.../WorkflowComponents/adapters` | ReactFlow 与 WorkflowDocument 转换、UI action 适配、诊断展示 | 重复实现领域规则 | | Template Provider | core 接口 + Web/CLI 实现 | 提供内置模板、团队应用、系统工具的完整模板和可选自动化元数据 | 直接修改工作流 | +| System Tool Capability Service | 现有 SystemTool Service/Repo 之上的 Builder 适配层 | 按已认证用户复用 Web 可见性策略,生成已授权目录和脱敏 preview | 向 CLI 暴露越权条目或 Secret | +| Authorized System Tool Provider | Builder 请求级依赖 | 用已授权目录实现 `list/resolve`,并与 builtin Provider 组合 | 持久化工具副本或自行判断用户权限 | | Template Descriptor | `packages/workflow-core/src/template` | 将现有模板字段与 Automation Metadata 归一化为机器可读参数契约 | 修改 Web 模板或进入 StoreNode | | Workflow File IO | `packages/workflow-cli/src/io` | `workflow.json` 的 Schema 解析、确定性序列化和单文件原子写入 | 判断节点是否合法 | | Remote Client | `packages/workflow-cli/src/remote` | profile、鉴权、pull、save、publish、debug、run | 直接读写数据库 | @@ -509,18 +516,20 @@ Workflow ChatBox -> WorkflowBuilderRunner -> prepare research sandbox with builtin workflow-builder Skill -> prepare isolated transaction sandbox with current workflow.json and version-matched CLI - -> run public Agent Loop with plan/ask/research tools and two Builder runtime tools + -> run public Agent Loop with plan/ask/research tools and three Builder runtime tools -> workflow_cli_query -> validate a discriminated read-only query -> execute an allowlisted CLI query in transaction sandbox - -> workflow_cli_apply - -> validate WorkflowChangeSetSchema - -> write a server-owned per-call temporary ChangeSet - -> execute CLI changeset plan and parse JSON stdout - -> revalidate plan through workflow-core - -> execute CLI changeset apply and validate target WorkflowDocument - -> delete the temporary file in finally - -> return authoritative applied or failed result with stop=true + -> workflow_cli_stage + -> validate and upsert/remove/reset WorkflowChangeSetChunk + -> update the private draft without changing the canvas + -> workflow_cli_query(view=draft, action=validate) + -> merge chunks, execute CLI plan and revalidate through workflow-core + -> return a validated draftRevision + -> workflow_cli_commit + -> require the unchanged validated draftRevision + -> execute CLI Confirm Apply and validate target WorkflowDocument + -> return authoritative applied or failed result -> WorkflowBuilderRunner starts one tool-free main Agent finalization turn -> SSE returns the validated target WorkflowDocument -> Web Adapter overwrites the current canvas and runs the existing auto-layout @@ -557,12 +566,39 @@ type WorkflowBuilderApplied = { PR5 不传入 `mode`、不单独建模“修改记录”、不传节点选中上下文。事务 Sandbox 只修改本轮请求 Document 的副本;校验成功后允许覆盖内存画布,但不得自动调用保存、发布或运行 API。 -Agent 与事务执行层之间的结构化交接仅通过 `workflow_cli_apply`:服务端在事务 Sandbox 中创建每次调用唯一的临时 ChangeSet 文件,Gateway 先生成并重算 WorkflowPlan,再调用注入的 apply 回调完成 CLI 应用和目标文档校验。tool result 只暴露 `applied` 或结构化失败诊断,不暴露待确认 plan 生命周期。模型不得指定输入/输出路径,不得直接访问事务 Sandbox Shell,不存在跨轮固定 WorkflowPlan 文件。 +Agent 与事务执行层之间的结构化交接仅通过 `workflow_cli_stage` 和 `workflow_cli_commit`:Stage 幂等维护分片化私有草稿,draft validate 由 Gateway 合并分片、调用 CLI 生成 WorkflowPlan 并通过 Core 重算,Commit 仅接受已校验且未变化的 `draftRevision`。模型不得指定输入/输出路径,不得直接访问事务 Sandbox Shell,不存在待用户确认的 WorkflowPlan 文件。 -Workflow Builder 专用状态为 `reasoning -> clarification_pending | drafting_changeset -> validating -> applying -> finalizing -> applied | failed`。普通问答可在 `reasoning` 直接结束;AgentPlan 只是当前任务的实时推理进度,只有 ask continuation 可恢复;`workflow_cli_apply` 结束变更阶段后,Runner 立即启动一次无工具主 Agent 收尾。每轮最多三次校验失败,apply 失败则直接进入收尾并报告真实问题。 +Workflow Builder 专用状态为 `reasoning -> clarification_pending | drafting_changeset -> validating -> applying -> finalizing -> applied | failed`。普通问答可在 `reasoning` 直接结束;AgentPlan 只是当前任务的实时推理进度,只有 ask continuation 可恢复;`workflow_cli_commit` 成功结束变更阶段后,Runner 立即另启动一次无工具、最多一轮的收尾 Agent。同一 Stage 或 Commit 修复目标最多连续失败 10 次,达到上限时才进入结构化终止。 Workflow Builder 复用 Chat 基础设施不等于继承工作流运行配置。当前 `WorkflowDocument.chatConfig` 仅作为 Agent 可读取和修改的画布事实;Builder ChatBox 与 Builder Handler 必须使用独立最小 ChatConfig,禁止继承原工作流的欢迎语、启动变量、自动执行、问题引导、语音和定时触发等配置。Builder 需要保留本次辅助 Agent 的运行详情;当详情包含 `llmRequestIds` 时,用户可继续查看对应的 LLM 请求体与响应体。 +#### 5.12.1 当前实例系统工具自动发现 + +本扩展服务于当前 Workflow Builder,不等同于 PR6 的独立 CLI 远端 profile/API Key 能力。现有 Core 已支持 `systemTool:` 模板引用,CLI 也已有 `template list/show`、节点创建、ChangeSet、校验和 commit 链路;因此不新增一套系统工具流程,只把当前写死的 `builtinTemplateProvider` 替换为组合 Provider: + +```text +SystemToolRepo / Plugin Service / Mongo Config + -> 复用 Web 的用户/团队/来源/状态/hideTags 过滤 + -> 已授权、已脱敏的系统工具数据 + -> Builder 进程内 Provider + Sandbox 受保护数据文件 + +builtinTemplateProvider + authorizedSystemToolProvider(由相同数据构造) + -> WorkflowTemplateProvider + -> 现有 template list/show、node/tool、stage/validate/commit +``` + +契约如下: + +1. “全部系统工具”指当前用户经过现有 Web 可见性规则过滤后可使用的全部工具,不包含未授权或被隐藏工具。 +2. `authorizedSystemToolProvider.list()` 返回当前授权的 `systemTool` 引用;`resolve()` 只能解析这份列表中的 ID,防止 Agent 绕过列表手写未授权工具 ID。 +3. CLI 的 `template list` 在现有结果上增加 `total`、按 `kind` 聚合的 `counts`,并让每个条目明确输出 `kind`;`template show` 继续输出指定工具的完整脱敏 Descriptor/节点 Schema。 +4. 当前 Builder 通过 Sandbox 子进程运行真实 CLI,不能直接传递 Provider 对象;Service 应将授权、脱敏后的工具数据写入事务受保护文件,CLI 从该文件构造 Provider,Builder 服务端 plan 重算从同一份内存数据构造 Provider。 +5. CLI、ChangeSet 和 Builder 服务端 plan 重算必须基于同一份授权数据使用组合 Provider,避免列表能看到系统工具但创建或校验时仍使用 builtin-only Provider。 +6. Provider 只返回节点构建需要的脱敏信息,不返回 `secretsVal`、工具运行密钥或用户凭证;真实 Secret 继续由现有运行 Service 解析。 +7. 每次 Builder 请求重新查询当前系统工具并覆盖受保护数据文件,因此不增加系统工具持久化、cron 或定时同步。 +8. 外层 Agent Loop 仍只看到 `workflow_cli_query`、`workflow_cli_stage`、`workflow_cli_commit`;不新增 Agent Loop tool,不改变 draft/commit 协议。 +9. `workflow-builder` Skill 只说明如何查看类型、数量、列表和精确 Descriptor,不写死工具名称、数量或参数结构。 + ### 5.13 Workflow Core 抽取与阶段交付 `@fastgpt/workflow-core` 是 Web 和 CLI 共同依赖的 TypeScript 领域包,不是独立部署的服务。它围绕 `WorkflowDocument` 提供确定性的模板实例化、节点编辑、执行边编辑、变量引用、嵌套、副作用、校验和 StoreWorkflow 转换能力。 @@ -956,6 +992,7 @@ WorkflowDocument <-> Optional Manifest Codec <-> workflow.manifest/ | FR-09 | ChangeSet 与 Confirm | 提供可审查、可确认、原子应用的批量修改 | | FR-10 | FastGPT 服务端生命周期 | pull、save、publish、versions、debug 和 run | | FR-11 | Workflow 辅助生成 | 通过 Chat + Agent Loop + Sandbox + Skill + CLI 生成并应用可审查 ChangeSet | +| FR-12 | 当前实例系统工具 | 按当前用户权限自动发现、脱敏解析并用于 Workflow Builder | ### 7.0 CLI 公共契约 @@ -1169,8 +1206,12 @@ fastgpt-workflow build --dir ./flow --output workflow.generated.json ```bash fastgpt-workflow template list --source builtin +fastgpt-workflow template list --source system +fastgpt-workflow template list --source system --search "calendar" +fastgpt-workflow template list --source system --parent TOOLSET_ID fastgpt-workflow template list --source team --profile prod fastgpt-workflow template show --template builtin:ai-chat --locale zh-CN --format json +fastgpt-workflow template show --template systemTool:TOOL_ID --format json fastgpt-workflow template show --template teamApp:APP_ID --version VERSION_ID --format json ``` @@ -1181,6 +1222,8 @@ fastgpt-workflow template show --template teamApp:APP_ID --version VERSION_ID -- - 普通参数从现有 FlowNodeTemplate inputs/outputs 归一化,不在 CLI 中维护第二份说明。 - 内置模板可以离线生成 Descriptor。 - 团队应用、插件和工具先通过 Template Provider 获取完整 preview,再生成 Descriptor。 +- Workflow Builder 的 `template list` 通过组合 Provider 列出 builtin 与当前已授权 systemTool,`template show` 输出指定工具的完整脱敏 Descriptor;两者对未授权工具均不泄露存在性。 +- `template list` JSON 输出必须包含 `total`、按 `kind` 聚合的 `counts` 和带 `kind` 的 `items`;`counts.systemTool` 只统计当前用户已授权工具,不泄露被过滤工具数量。 - custom/object/array 参数必须提供 `valueSchema` 或返回 `WORKFLOW_TEMPLATE_PARAMETER_SCHEMA_MISSING` warning,禁止让 Agent猜测结构。 - `configurable: false` 的参数不得通过 `input set/ref/unset` 修改。 - Descriptor 中不得包含 input 当前 secret、credential、Authorization 或其他敏感值。 @@ -1401,15 +1444,26 @@ fastgpt-workflow run --app APP_ID --input "你好" --profile prod - Workflow 编辑器提供独立聊天入口,复用普通 Chat 历史、模型选择、SSE、停止、计费和 Agent memories。 - Workflow Builder 使用独立 Handler 和 Runner,不抽取或修改 Skill 辅助生成的 Handler;仅复用现有底层 Chat、Agent Loop、AgentLoopCore 事件适配和 Sandbox 能力。 - 每轮以前端当前 `WorkflowDocument + checksum` 为事实输入,历史由后端根据 `appId + chatId` 恢复,不建立独立修改记录模型。 -- Agent 只能通过内置 `workflow-builder` Skill 调用 `workflow_cli_query` 和 `workflow_cli_apply`;Gateway 必须执行查询白名单、ChangeSet Schema、CLI JSON envelope、Core 二次校验和原子 apply。 -- 研究 Sandbox 与事务 Sandbox 必须物理寻址隔离,Agent 的通用 Sandbox tools 不得读写事务 Sandbox。 -- `workflow_cli_apply` 必须以 `WorkflowChangeSet` 作为结构化入参;临时文件由服务端生成和清理,模型不得管理文件路径。 +- Agent 只能通过内置 `workflow-builder` Skill 调用现有 `workflow_cli_query`、`workflow_cli_stage` 和 `workflow_cli_commit`;Gateway 必须执行查询白名单、ChangeSet Schema、CLI JSON envelope、Core 二次校验和原子 commit。接入系统工具不改变这三个外层工具。 +- `ask_agent` 只用于一次性收集缺失的业务信息;Mermaid 确认必须通过 `workflow_builder_present_preview` 生成 `workflowBuilderPreview` 交互。Preview 载荷由 Agent 提供标题、完整 Mermaid 和自由章节,确认、修改、取消动作由运行时统一注入。 +- 同一 App 用户复用一个物理 Sandbox;不同 `chatId` 的事务状态必须落在独立的会话工作目录。Agent 的研究工具执行器不得读写当前会话的事务目录,Gateway 独占事务路径和 CLI 执行能力。 +- `workflow_cli_stage` 必须以版本化 `WorkflowChangeSetChunk` 作为结构化入参;`workflow_cli_commit` 只接受 draft validate 返回的 `draftRevision`;临时文件由服务端生成和清理,模型不得管理文件路径。 - WorkflowPlan 只作为服务端内部校验对象,不持久化为待确认 Artifact,也不直接返回原始 ChangeSet JSON。 - Gateway 在同一工具调用中注入 CLI `changeset apply --confirm ` 能力,不向 Agent 暴露直接 apply 命令。 - 服务端必须用本轮请求的 WorkflowDocument 覆盖 Sandbox 副本,重新校验 base/target/plan 内容,读取并校验 CLI 产生的目标 WorkflowDocument 后才返回。 - 前端通过 Web Adapter 覆盖当前内存画布,等待节点尺寸就绪后复用现有 dagre 自动布局和 `fitView`。 -- 服务端必须在工具终态后再调用一次无工具主 Agent,并把其基于真实执行结果生成的终态回答持久化进 ChatItem;固定摘要只作为收尾模型失败时的兜底。 -- PR5 不支持节点选中上下文、自动保存/发布/调试或远端资源模板解析。 +- 服务端必须在工具终态后另调用一次无工具、最多一轮的收尾 Agent,并把其基于真实执行结果生成的终态回答持久化进 ChatItem;收尾模型失败或返回空内容时,保留主 Agent 已产生的内容和结构化运行结果,不注入固定摘要。 +- PR5 不支持节点选中上下文、自动保存/发布/调试或基于独立 profile/API Key 的远端资源模板解析;FR-12 只增加当前 Web 会话身份下的已安装系统工具。 + +### 7.12 FR-12:当前实例系统工具 + +- Builder Handler 必须复用当前 FastGPT 的 SystemToolRepo 和 Web 可见性策略,只返回当前用户可使用且状态为 `Normal` 的工具(兼容旧来源未返回状态的条目),并继续处理系统、团队、debug 来源及 `hideTags` 等过滤条件。 +- Core 继续使用现有 `NodeTemplateRef.systemTool` 和 `WorkflowTemplateProvider` 契约,不新增授权快照 Schema、系统工具持久化表、定时同步任务或第二个工具 Repo。 +- CLI 必须在现有 `template list` 输出中增加 `total`、按模板 `kind` 聚合的 `counts` 和条目 `kind`,并通过 `template show` 输出某一工具的完整脱敏节点/Schema。 +- Service 将当前请求已授权、已脱敏的工具数据写入 Sandbox 事务受保护文件;CLI 子进程从该文件构造 `authorizedSystemToolProvider`,Builder 服务端重算从相同内存数据构造 Provider。 +- `authorizedSystemToolProvider.resolve()` 只允许命中当前请求已授权列表;`template show`、节点创建、工具挂载、ChangeSet plan/apply 和服务端重算均基于同一份数据使用组合 Provider,直接传入未授权 `systemTool` ID 必须失败。 +- 新 Builder 请求重新读取 Service,自然看到工具安装、更新、下架和权限变化;真实运行继续由现有 SystemToolRepo/runtime 处理状态和 Secret。 +- Skill 必须引导 Agent 先搜索授权目录、再查看精确 Descriptor、最后构造 ChangeSet;当目标工具不可用时,向用户说明权限/可用性限制,不猜测 ID 或伪造 Schema。 ## 8. 共享规则与 UI 边界 @@ -1553,6 +1607,16 @@ PR 是可审核、可回滚的增量开发单元,不等于发布单元。每 - 允许覆盖生成期间的人工画布修改;PR5 不自动保存、发布或运行工作流。 - 验收结果:用户可在 Workflow 编辑器中通过多轮对话直接生成并应用工作流,以验证 CLI 在 FastGPT 链路中的完整可用性。 +### PR5 后续增强:当前实例系统工具 + +- 在 Builder Handler 内复用 SystemToolRepo 和当前 Web 的系统工具可见性策略,建立已授权轻量目录。 +- 用该目录构造 request-scoped `authorizedSystemToolProvider`,再与现有 `builtinTemplateProvider` 组合。 +- 将 CLI、节点创建、工具挂载、ChangeSet 和服务端 plan 重算中写死的 builtin Provider 替换为同一个组合 Provider。 +- 在 `template list` 输出中增加模板类型和数量;`template show` 继续提供完整脱敏 Descriptor。 +- 更新 `workflow-builder` Skill 及模板/节点参考,要求 Agent 先查目录和 Descriptor,禁止硬编码工具信息。 +- 外层 Agent Loop 和 `workflow_cli_query/stage/commit` 不变,不开放自动保存、发布或执行。 +- 验收结果:Agent 可看到当前用户全部已授权系统工具及精确 Schema,但无法通过手写 ID 越权,且输出和 Sandbox 中不包含 Secret。 + ### PR6:远端只读能力 - profile、密钥读取和 API Key 只读鉴权契约。 @@ -1610,6 +1674,15 @@ PR1 只验收 `workflow.json` 的确定性 round-trip、失败不覆盖原文件 - 两个客户端基于同一版本更新时,后提交者收到 409 冲突。 - draft save 可以保存未完成图;publish 和 run 会被完整校验阻断。 +### 12.3.1 当前实例系统工具 + +- 同一身份下 Builder CLI 的系统工具列表与 Web 可见性策略结果一致,只包含当前用户已授权的可用工具。 +- `template list` 返回 `total`、按 `kind` 聚合的 `counts` 和带 `kind` 的 `items`;其中 `systemTool` 数量与当前授权系统工具数量一致,不包含被权限过滤条目。 +- `template show` 能返回选中工具的完整脱敏节点、用户可配置输入输出、参数 Schema、执行端口和版本信息;系统 Secret 配置 Schema/实值、`secretsVal` 和运行凭证不属于 Agent 可见的“完整信息”。 +- 通过已授权工具可成功生成系统工具节点或工具边;手写未授权、隐藏、非 `Normal` 或不存在的 ID 在 Provider resolve/plan/apply 时被统一拒绝。 +- list/show/节点创建/ChangeSet/服务端重算使用同一个组合 Provider;工具在下一轮请求中新增或更新时可被发现,无需等待 Core/CLI 同步任务。 +- Skill 不包含静态工具数量、名称、ID 或 Schema;测试中更新授权目录后,Agent 的下一轮查询结果自动变化。 + ### 12.4 测试样本 至少覆盖五类真实导出工作流: @@ -1648,6 +1721,9 @@ Workflow Builder 的真实调用证明,仅暴露输入参数不足以让 Agent | Agent 或示例编造远端资源 | 本地校验通过、导入后运行失败或泄露内部异常 | 固定值来源优先级;PR6 前资源留空;Binding Collector 输出待绑定项;禁止 fixture 使用占位资源 | | PR6 验证后的资源被删除或撤权 | debug/publish 时使用过期资源 | PR7 服务端重新验证存在性、团队边界和权限,不信任本地 validated 状态 | | 动态模板版本变化 | 构建不可复现 | `workflow.json` 保存完整节点快照;远端模板解析结果进入变更摘要和审计日志 | +| 将系统工具静态复制到 Core/CLI/Skill | 工具更新后三份目录漂移 | Service 保持唯一事实源,每次 Builder 请求构造授权 Provider | +| 只在 `template list` 做权限过滤 | Agent 通过手写 `systemTool` ID 越权 | Provider 的 `resolve()` 只允许当前授权列表中的 ID,所有模板消费路径共用该 Provider | +| 工具 preview 含有 Secret | Sandbox、模型上下文或日志泄密 | Service presenter 使用字段 allowlist,禁止 `secretsVal`/credential,真实 Secret 只在执行边界解析 | | 语义端口覆盖不完整 | 导入丢边 | golden round-trip;未知 handle 导入时阻断并报告,不静默丢弃 | | 本地 JSON 被当作校验器 | 可绕过 | 所有门禁在代码中重新计算 | | 远端覆盖他人修改 | 数据丢失 | baseVersionId 事务内比较,无 `--force` | @@ -1660,7 +1736,7 @@ Workflow Builder 的真实调用证明,仅暴露输入参数不足以让 Agent - 状态载体:WorkflowDocument、`workflow.json`、StoreWorkflow。 - 构建来源:模板、导入、ChangeSet。 -- 参数发现:Template Descriptor、Automation Metadata、机器可读 Schema。 +- 参数发现:Template Descriptor、Automation Metadata、机器可读 Schema、已授权系统工具目录。 - 输入初始化:用户显式值、PR6 已验证值、模板安全默认值、资源安全空值。 - 图操作:节点、执行边、变量引用、工具、嵌套。 - 生命周期:校验、build、draft save、publish、debug、run。 @@ -1673,6 +1749,8 @@ Workflow Builder 的真实调用证明,仅暴露输入参数不足以让 Agent - ChangeSet 不承担完整状态存储。 - ReactFlow 不承担共享领域模型。 - Automation Metadata 不承担运行时节点状态,也不进入 StoreWorkflow。 +- Service 负责认证、权限过滤和 Secret;Core/CLI 只消费注入的组合 Provider,不反向推导用户权限。 +- 当前 Builder 的 request-scoped Provider 使用 Web 会话身份;PR6 的独立 CLI remote provider 使用 profile/API Key,二者不是同一能力。 - 模板值来源优先级只负责实例化;PR6 资源读取验证与 PR7 运行/发布复验职责互不替代。 - 本地 build 只表示结构可编译,不等于资源已解析、可调试或可发布。 - draft save 不等于 publish。 @@ -1680,4 +1758,4 @@ Workflow Builder 的真实调用证明,仅暴露输入参数不足以让 Agent ### 14.3 最终评审结论 -该方案可以作为实现基线,但必须严格按 PR1 到 PR7 增量落地。PR1 要以最小可运行 CLI 证明从模板、Command、Document、Validator、`workflow.json` 到 StoreWorkflow 的完整链路;PR5 只在 PR4 契约上增加独立的 Workflow 辅助生成产品入口,不得引入第二套修改规则。后续 PR 只能扩展能力,不能破坏已固化的基础契约和端到端测试。分片 Manifest 不进入初期开发范围,只有真实实验数据证明单文件方案存在瓶颈后再单独立项。 +该方案可以作为实现基线,但必须严格按 PR1 到 PR7 增量落地。PR1 要以最小可运行 CLI 证明从模板、Command、Document、Validator、`workflow.json` 到 StoreWorkflow 的完整链路;PR5 只在 PR4 契约上增加独立的 Workflow 辅助生成产品入口,不得引入第二套修改规则。当前实例系统工具作为 PR5 后续增强:Service 依用户权限构造系统工具 Provider,并与现有 builtin Provider 组合;CLI 只增加模板类型和数量输出,外层 query/stage/commit 和 Agent Loop 不变,不增加定时同步。后续 PR 只能扩展能力,不能破坏已固化的基础契约和端到端测试。分片 Manifest 不进入初期开发范围,只有真实实验数据证明单文件方案存在瓶颈后再单独立项。 diff --git a/diagrams/workflow-builder-cli-decisions.excalidraw b/diagrams/workflow-builder-cli-decisions.excalidraw new file mode 100644 index 000000000000..5971ddeb3797 --- /dev/null +++ b/diagrams/workflow-builder-cli-decisions.excalidraw @@ -0,0 +1 @@ +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"aOu2muxQoGEVblFj-Nldk","type":"rectangle","x":1296.65234375,"y":0,"width":270.46875,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":1592465418,"version":4,"versionNonce":282876438,"isDeleted":false,"boundElements":[{"type":"text","id":"ts8rCwEi2uElrRBP0bZXF"},{"id":"RouvwHPHSSHchPzJfj0dT","type":"arrow"},{"id":"dZQw22S7B6Ly2NlMWgueG","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"FKZZjQEOI-FjyIE9v47Yr","type":"diamond","x":411.6015625,"y":99,"width":165.3125,"height":165.3125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":721012118,"version":6,"versionNonce":327623830,"isDeleted":false,"boundElements":[{"type":"text","id":"paBz_9A85boiiDrJ7Wfw8"},{"id":"RouvwHPHSSHchPzJfj0dT","type":"arrow"},{"id":"MlThn6-km20RG3W1QKU6l","type":"arrow"},{"id":"qB1lJc8vORuxddqnPxJrd","type":"arrow"},{"id":"z4L3sNon14Ll2-vEBLC_a","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"5-sEW9bq_eguROcLZncd7","type":"rectangle","x":0,"y":343.3125,"width":353.765625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":1855948490,"version":4,"versionNonce":1525028246,"isDeleted":false,"boundElements":[{"type":"text","id":"eOmLsPIxHANLGSw6ni5oD"},{"id":"MlThn6-km20RG3W1QKU6l","type":"arrow"},{"id":"zKIxIuaid5LSmNTrGKGv3","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"wslxScgh8RDGGCJMkalSE","type":"diamond","x":89.640625,"y":442.3125,"width":174.484375,"height":174.484375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":1914217174,"version":5,"versionNonce":1884974358,"isDeleted":false,"boundElements":[{"type":"text","id":"QuGhZ5i2B36pBUaAvo04a"},{"id":"zKIxIuaid5LSmNTrGKGv3","type":"arrow"},{"id":"15fskW0hKF225e8Dbb0AY","type":"arrow"},{"id":"pzbYsPR_ec7IBnExTE2hh","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"3IbSZxKklYE3BDrakjqJW","type":"rectangle","x":40.5625,"y":749.0390625,"width":272.640625,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":1398283658,"version":3,"versionNonce":1343986326,"isDeleted":false,"boundElements":[{"type":"text","id":"pjTZCpowXshGy9eNzKl5v"},{"id":"15fskW0hKF225e8Dbb0AY","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"1znNcw0hxirOWh--MruKX","type":"rectangle","x":363.203125,"y":746.5390625,"width":309.546875,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":1139398678,"version":3,"versionNonce":603478614,"isDeleted":false,"boundElements":[{"type":"text","id":"kGMgUDjQr0fY7Ja-krLzv"},{"id":"pzbYsPR_ec7IBnExTE2hh","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"9M9qHa3_8TiA1sVCzQNi1","type":"rectangle","x":579.40625,"y":343.3125,"width":461.171875,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":709876810,"version":4,"versionNonce":1105950486,"isDeleted":false,"boundElements":[{"type":"text","id":"4oMAomzsfSwupgxBSmq6D"},{"id":"qB1lJc8vORuxddqnPxJrd","type":"arrow"},{"id":"op4JH8_6qQGblYOM7jonR","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"daNcz5cZS9usYNv8SGQQg","type":"rectangle","x":1368.234375,"y":343.3125,"width":544.140625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":1214408022,"version":4,"versionNonce":1413294486,"isDeleted":false,"boundElements":[{"type":"text","id":"b7PnhWNfGgLWNBrcGxq1H"},{"id":"z4L3sNon14Ll2-vEBLC_a","type":"arrow"},{"id":"7wOFIjZCQsxvwB_6A4crE","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"_XnTX1CjQUbTroHGVlIIB","type":"rectangle","x":713.8515625,"y":505.0546875,"width":192.28125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":828490506,"version":5,"versionNonce":1990474774,"isDeleted":false,"boundElements":[{"type":"text","id":"BwkwLryaWhnnj5B1wfCfF"},{"id":"op4JH8_6qQGblYOM7jonR","type":"arrow"},{"id":"7wOFIjZCQsxvwB_6A4crE","type":"arrow"},{"id":"vqUw_EkQhX5kuA-ZErhHn","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"O6n51D1NXwixKJjFNc3qY","type":"diamond","x":722.75,"y":700.796875,"width":174.484375,"height":174.484375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":1624722070,"version":6,"versionNonce":854659926,"isDeleted":false,"boundElements":[{"type":"text","id":"Bgv2GBO-RFnVSJDWFXsiO"},{"id":"vqUw_EkQhX5kuA-ZErhHn","type":"arrow"},{"id":"3IIMaQr0ZnOs30sU1kv8V","type":"arrow"},{"id":"EvwqYG_XFwoMy2u9dnAOH","type":"arrow"},{"id":"CWZRVmlPrArqZmbIFd54w","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"wSzydTOO982ZMU_T2NYoB","type":"rectangle","x":260.1640625,"y":959.28125,"width":268.59375,"height":112,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":856216010,"version":3,"versionNonce":173179158,"isDeleted":false,"boundElements":[{"type":"text","id":"2luZNx4Q59WzKMMIp7MZ3"},{"id":"3IIMaQr0ZnOs30sU1kv8V","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"YgKWaB7uQ1h28eSYYwwA2","type":"rectangle","x":1412.15625,"y":1468.65625,"width":243.484375,"height":102,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":2080212950,"version":4,"versionNonce":690440662,"isDeleted":false,"boundElements":[{"type":"text","id":"v0gWWf0aodhdh887QTIi5"},{"id":"EvwqYG_XFwoMy2u9dnAOH","type":"arrow"},{"id":"irBOyvwZ6_JHCtrYdkgCj","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"VZIEUOSX_P3bQxqcwm6ZU","type":"rectangle","x":578.7578125,"y":990.78125,"width":383.65625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":1918896266,"version":4,"versionNonce":1496888790,"isDeleted":false,"boundElements":[{"type":"text","id":"cOTcJcuJrU5U3pzGTrDwD"},{"id":"CWZRVmlPrArqZmbIFd54w","type":"arrow"},{"id":"fZZE7OUzXrC77qdzx-ZOv","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"4jjNZmPh-hnlB99x7X7sX","type":"diamond","x":1077.89453125,"y":1155.28125,"width":226.875,"height":226.875,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":1776950550,"version":6,"versionNonce":664966422,"isDeleted":false,"boundElements":[{"type":"text","id":"EjhVNPnWox87Cfs9uJiMo"},{"id":"fZZE7OUzXrC77qdzx-ZOv","type":"arrow"},{"id":"jlN-DP6LoJMyHU-CM1opQ","type":"arrow"},{"id":"Iz_kHf_cOFUWXAZ3FK_Ob","type":"arrow"},{"id":"ezZpBs5nKdewzb-NnmC4x","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"vjtFAOZavsUNFUIf7OpWx","type":"rectangle","x":1705.640625,"y":1466.15625,"width":313.140625,"height":107,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":388130634,"version":4,"versionNonce":268141142,"isDeleted":false,"boundElements":[{"type":"text","id":"fNdbZqhSUAzUHwhOEXdQC"},{"id":"jlN-DP6LoJMyHU-CM1opQ","type":"arrow"},{"id":"prckdCb_ZqHdYblRQaZYK","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"07sqs-U1hiYtnGXU9_bAG","type":"rectangle","x":1025.72265625,"y":1466.15625,"width":331.21875,"height":107,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":null,"seed":806488662,"version":4,"versionNonce":397715286,"isDeleted":false,"boundElements":[{"type":"text","id":"E84AC3frhR7fbicW3SBmK"},{"id":"Iz_kHf_cOFUWXAZ3FK_Ob","type":"arrow"},{"id":"SSDpO_ewTjJzpv_opQUiU","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"UgR7Ns9zd0CX8nVVt3GrE","type":"rectangle","x":1012.4140625,"y":973.78125,"width":447.078125,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":null,"seed":430632458,"version":3,"versionNonce":1701117910,"isDeleted":false,"boundElements":[{"type":"text","id":"lYOz-qGZthHK1ibc11lNu"},{"id":"ezZpBs5nKdewzb-NnmC4x","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"VqgXeD-GYEeBMR-b_o691","type":"rectangle","x":1827.8359375,"y":1623.15625,"width":451.890625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":null,"seed":1565151126,"version":4,"versionNonce":2075354326,"isDeleted":false,"boundElements":[{"type":"text","id":"4dZMPUgO1cMulTmpn-P1g"},{"id":"prckdCb_ZqHdYblRQaZYK","type":"arrow"},{"id":"dZQw22S7B6Ly2NlMWgueG","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"6SrV25UAVAAWij8e-YkWR","type":"rectangle","x":1183.03125,"y":1623.15625,"width":353.953125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":null,"seed":787782858,"version":4,"versionNonce":277585686,"isDeleted":false,"boundElements":[{"type":"text","id":"xsFJViNT9G1Fa51cUAMhm"},{"id":"SSDpO_ewTjJzpv_opQUiU","type":"arrow"},{"id":"irBOyvwZ6_JHCtrYdkgCj","type":"arrow"}],"updated":1785725212506,"link":null,"locked":false},{"id":"RouvwHPHSSHchPzJfj0dT","type":"arrow","x":1296.652,"y":31.639,"width":802.394,"height":62.562,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":{"type":2},"seed":1573383382,"version":4,"versionNonce":1786092810,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[0.5,0.5],[-802.394,42.361000000000004],[-802.498,62.062]],"lastCommittedPoint":null,"startBinding":{"elementId":"aOu2muxQoGEVblFj-Nldk","focus":0.00001524993675325837,"gap":1},"endBinding":{"elementId":"FKZZjQEOI-FjyIE9v47Yr","focus":0.025534329066601247,"gap":4.7992864773220525},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"MlThn6-km20RG3W1QKU6l","type":"arrow","x":435.074,"y":205.128,"width":258.19100000000003,"height":132.885,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":{"type":2},"seed":882537354,"version":4,"versionNonce":1254916426,"isDeleted":false,"boundElements":[{"type":"text","id":"55C04dBt26L5FPiUtSttH"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[-258.19100000000003,98.685],[-258.19100000000003,132.385]],"lastCommittedPoint":null,"startBinding":{"elementId":"FKZZjQEOI-FjyIE9v47Yr","focus":-0.010291881360173892,"gap":1},"endBinding":{"elementId":"5-sEW9bq_eguROcLZncd7","focus":0.0000010600238504175404,"gap":5.299500000000023},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"zKIxIuaid5LSmNTrGKGv3","type":"arrow","x":176.883,"y":392.313,"width":0.3959999999999866,"height":45.20100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":{"type":2},"seed":1327489558,"version":4,"versionNonce":1046492874,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[-0.10400000000001342,44.70100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"5-sEW9bq_eguROcLZncd7","focus":-0.0000010600238505751967,"gap":1},"endBinding":{"elementId":"wslxScgh8RDGGCJMkalSE","focus":0.025222432348396332,"gap":4.812107115456275},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"15fskW0hKF225e8Dbb0AY","type":"arrow","x":177.383,"y":617.297,"width":0.5,"height":126.44200000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":483881546,"version":4,"versionNonce":1050702602,"isDeleted":false,"boundElements":[{"type":"text","id":"M8XoSUXtoIiq7VlRZG7nK"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[-0.5,41.5],[-0.5,125.94200000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"wslxScgh8RDGGCJMkalSE","focus":-0.017850581694558772,"gap":1},"endBinding":{"elementId":"3IbSZxKklYE3BDrakjqJW","focus":0.0000013754369878721498,"gap":5.300062499999967},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"pzbYsPR_ec7IBnExTE2hh","type":"arrow","x":240.652,"y":554.028,"width":277.325,"height":187.211,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":1413951318,"version":4,"versionNonce":715069258,"isDeleted":false,"boundElements":[{"type":"text","id":"ch7xSdKjANpe_ppJN0usy"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[277.325,104.769],[277.325,186.711]],"lastCommittedPoint":null,"startBinding":{"elementId":"wslxScgh8RDGGCJMkalSE","focus":0.00438230376134466,"gap":1},"endBinding":{"elementId":"1znNcw0hxirOWh--MruKX","focus":0.000002826712432268742,"gap":5.300062499999967},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"qB1lJc8vORuxddqnPxJrd","type":"arrow","x":554.356,"y":205.214,"width":255.63599999999997,"height":132.79899999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":{"type":2},"seed":1518770442,"version":4,"versionNonce":1326785418,"isDeleted":false,"boundElements":[{"type":"text","id":"xQk-xV24Q6deoVjjh8xdh"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[255.63599999999997,98.59899999999999],[255.63599999999997,132.29899999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"FKZZjQEOI-FjyIE9v47Yr","focus":0.004571139933993104,"gap":1},"endBinding":{"elementId":"9M9qHa3_8TiA1sVCzQNi1","focus":-8.131458582075746e-7,"gap":5.299500000000023},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"z4L3sNon14Ll2-vEBLC_a","type":"arrow","x":569.452,"y":190.118,"width":1070.853,"height":147.89499999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":1771230358,"version":4,"versionNonce":660314058,"isDeleted":false,"boundElements":[{"type":"text","id":"4zl6LDBcM_WfpvfL7dddz"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[1070.853,113.695],[1070.853,147.39499999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"FKZZjQEOI-FjyIE9v47Yr","focus":0.005785466535408131,"gap":1},"endBinding":{"elementId":"daNcz5cZS9usYNv8SGQQg","focus":0.000001148600143812695,"gap":5.299500000000023},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"op4JH8_6qQGblYOM7jonR","type":"arrow","x":809.992,"y":392.313,"width":0,"height":107.44200000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":1294133194,"version":4,"versionNonce":1039904074,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[0,25],[0,106.94200000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"9M9qHa3_8TiA1sVCzQNi1","focus":8.131458582075746e-7,"gap":1},"endBinding":{"elementId":"_XnTX1CjQUbTroHGVlIIB","focus":-0.000001950268162198113,"gap":5.2996875000000045},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"7wOFIjZCQsxvwB_6A4crE","type":"arrow","x":1640.305,"y":392.313,"width":728.9200000000001,"height":123.53499999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":951570902,"version":4,"versionNonce":2025087690,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[-0.5,0.5],[0,25],[-728.4200000000001,123.03499999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"daNcz5cZS9usYNv8SGQQg","focus":-0.000001148600143812695,"gap":1},"endBinding":{"elementId":"_XnTX1CjQUbTroHGVlIIB","focus":-0.000012361913615080284,"gap":5.252187499999991},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"vqUw_EkQhX5kuA-ZErhHn","type":"arrow","x":809.992,"y":554.055,"width":0.4379999999999882,"height":141.942,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":751263370,"version":4,"versionNonce":1641920586,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[0.5,0.5],[0,104.74200000000008],[-0.06200000000001182,141.442]],"lastCommittedPoint":null,"startBinding":{"elementId":"_XnTX1CjQUbTroHGVlIIB","focus":0.000001950268162198113,"gap":1},"endBinding":{"elementId":"O6n51D1NXwixKJjFNc3qY","focus":0.01744034167492168,"gap":4.8105301179418305},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"3IIMaQr0ZnOs30sU1kv8V","type":"arrow","x":743.947,"y":809.236,"width":349.486,"height":144.745,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":1825253142,"version":4,"versionNonce":1206609034,"isDeleted":false,"boundElements":[{"type":"text","id":"ehRdsVmkbm9DG-F_XzG2H"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[-349.486,108.04499999999996],[-349.486,144.245]],"lastCommittedPoint":null,"startBinding":{"elementId":"O6n51D1NXwixKJjFNc3qY","focus":-0.008926903962077676,"gap":1},"endBinding":{"elementId":"wSzydTOO982ZMU_T2NYoB","focus":4.6538685298370815e-7,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"EvwqYG_XFwoMy2u9dnAOH","type":"arrow","x":884.518,"y":801.755,"width":649.3799999999999,"height":661.601,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":1982790986,"version":4,"versionNonce":1902999754,"isDeleted":false,"boundElements":[{"type":"text","id":"azK5CJSaZmfYrfpcwNamY"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[649.3799999999999,115.52599999999995],[649.3799999999999,213.52599999999995],[649.3799999999999,311.52599999999995],[649.3799999999999,466.96400000000006],[649.3799999999999,622.401],[649.3799999999999,661.101]],"lastCommittedPoint":null,"startBinding":{"elementId":"O6n51D1NXwixKJjFNc3qY","focus":0.005245701706482873,"gap":1},"endBinding":{"elementId":"YgKWaB7uQ1h28eSYYwwA2","focus":-0.000003593659759858742,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"CWZRVmlPrArqZmbIFd54w","type":"arrow","x":790.107,"y":855.396,"width":19.520999999999958,"height":130.08500000000004,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":104977494,"version":4,"versionNonce":2128409866,"isDeleted":false,"boundElements":[{"type":"text","id":"D_1r7fDjpoiWvb5lUNpPp"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[-19.520999999999958,61.88499999999999],[-19.520999999999958,129.58500000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"O6n51D1NXwixKJjFNc3qY","focus":-0.015610338472395246,"gap":1},"endBinding":{"elementId":"VZIEUOSX_P3bQxqcwm6ZU","focus":3.258124949879745e-7,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"fZZE7OUzXrC77qdzx-ZOv","type":"arrow","x":770.586,"y":1039.781,"width":333.44100000000003,"height":196.99500000000012,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":1454687242,"version":4,"versionNonce":2083961482,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[0.5,0.5],[0,73.5],[332.94100000000003,196.49500000000012]],"lastCommittedPoint":null,"startBinding":{"elementId":"VZIEUOSX_P3bQxqcwm6ZU","focus":-3.258124949879745e-7,"gap":1},"endBinding":{"elementId":"4jjNZmPh-hnlB99x7X7sX","focus":-0.0034557388434596275,"gap":4.506236836893404},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"jlN-DP6LoJMyHU-CM1opQ","type":"arrow","x":1283.931,"y":1290.557,"width":578.28,"height":170.29899999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":787536278,"version":4,"versionNonce":1865453258,"isDeleted":false,"boundElements":[{"type":"text","id":"T2_m6VkBrtNtJubdNNoN-"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[578.28,133.59899999999993],[578.28,169.79899999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"4jjNZmPh-hnlB99x7X7sX","focus":0.00392528860021999,"gap":1},"endBinding":{"elementId":"vjtFAOZavsUNFUIf7OpWx","focus":3.9918167859663154e-7,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Iz_kHf_cOFUWXAZ3FK_Ob","type":"arrow","x":1191.832,"y":1382.656,"width":0.5,"height":78.20000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":{"type":2},"seed":408138442,"version":4,"versionNonce":1949289226,"isDeleted":false,"boundElements":[{"type":"text","id":"GNHDE_ZxLmw_FnBMnyKAG"}],"updated":1785725212506,"link":null,"locked":false,"points":[[0,0.5],[-0.5,41.5],[-0.5,77.70000000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"4jjNZmPh-hnlB99x7X7sX","focus":-0.016508709217032697,"gap":1},"endBinding":{"elementId":"07sqs-U1hiYtnGXU9_bAG","focus":-1.8869704638580868e-7,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"ezZpBs5nKdewzb-NnmC4x","type":"arrow","x":1235.953,"y":1056.781,"width":17.402000000000044,"height":119.19399999999996,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"dashed","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":{"type":2},"seed":235747030,"version":4,"versionNonce":1330385034,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[-0.5,0.5],[0,56.5],[-16.902000000000044,118.69399999999996]],"lastCommittedPoint":null,"startBinding":{"elementId":"UgR7Ns9zd0CX8nVVt3GrE","focus":5.591863840016813e-7,"gap":1},"endBinding":{"elementId":"4jjNZmPh-hnlB99x7X7sX","focus":0.013011984389431094,"gap":4.382249750467385},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"prckdCb_ZqHdYblRQaZYK","type":"arrow","x":1862.211,"y":1573.156,"width":91.6210000000001,"height":48.67399999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":{"type":2},"seed":229034378,"version":4,"versionNonce":557118986,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[91.1210000000001,48.17399999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"vjtFAOZavsUNFUIf7OpWx","focus":-3.99181679040972e-7,"gap":1},"endBinding":{"elementId":"VqgXeD-GYEeBMR-b_o691","focus":0.0000037276408948384805,"gap":1.3262500000000728},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"dZQw22S7B6Ly2NlMWgueG","type":"arrow","x":2053.781,"y":1623.156,"width":481.37699999999995,"height":1587.471,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":{"type":2},"seed":472640534,"version":4,"versionNonce":1463974794,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[-0.5,-0.5],[0,-25],[0,-103.5],[0,-199],[0,-354.4369999999999],[0,-509.875],[0,-607.875],[0,-705.875],[0,-835.117],[0,-964.3589999999999],[0,-1093.601],[0,-1205.8429999999998],[0,-1255.3429999999998],[0,-1319.3429999999998],[0,-1441.5],[0,-1549.156],[-480.87699999999995,-1586.971]],"lastCommittedPoint":null,"startBinding":{"elementId":"VqgXeD-GYEeBMR-b_o691","focus":-0.0000011064624323262566,"gap":1},"endBinding":{"elementId":"aOu2muxQoGEVblFj-Nldk","focus":0.000016619139405096612,"gap":5.282906249999996},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"SSDpO_ewTjJzpv_opQUiU","type":"arrow","x":1191.332,"y":1573.156,"width":80.10399999999981,"height":48.50800000000004,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":{"type":2},"seed":2112424010,"version":4,"versionNonce":1758241034,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[79.60399999999981,48.00800000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"07sqs-U1hiYtnGXU9_bAG","focus":1.8869704638580868e-7,"gap":1},"endBinding":{"elementId":"6SrV25UAVAAWij8e-YkWR","focus":-0.000010285014617834763,"gap":1.4922500000000127},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"irBOyvwZ6_JHCtrYdkgCj","type":"arrow","x":1533.898,"y":1570.656,"width":82.72599999999989,"height":51.04899999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":{"type":2},"seed":2000812374,"version":4,"versionNonce":1462462090,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"points":[[-0.5,0.5],[0,27.5],[-82.22599999999989,50.54899999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"YgKWaB7uQ1h28eSYYwwA2","focus":0.000003593659759858742,"gap":1},"endBinding":{"elementId":"6SrV25UAVAAWij8e-YkWR","focus":-0.0000028503227890856376,"gap":1.4512500000000728},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"ts8rCwEi2uElrRBP0bZXF","type":"text","x":1331.0224609375,"y":12,"width":201.728515625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":null,"seed":2005812746,"version":3,"versionNonce":1188169034,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"Workflow CLI 工具调用","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"aOu2muxQoGEVblFj-Nldk","originalText":"Workflow CLI 工具调用","autoResize":true,"lineHeight":1.25},{"id":"paBz_9A85boiiDrJ7Wfw8","type":"text","x":464.4296875,"y":156.828125,"width":60,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":null,"seed":648869066,"version":3,"versionNonce":1261653078,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"调用阶\n段","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"FKZZjQEOI-FjyIE9v47Yr","originalText":"调用阶段","autoResize":true,"lineHeight":1.25},{"id":"eOmLsPIxHANLGSw6ni5oD","type":"text","x":51.35546875,"y":355.3125,"width":251.0546875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":null,"seed":1132972938,"version":3,"versionNonce":766954506,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"执行只读查询或 draft validate","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"5-sEW9bq_eguROcLZncd7","originalText":"执行只读查询或 draft validate","autoResize":true,"lineHeight":1.25},{"id":"QuGhZ5i2B36pBUaAvo04a","type":"text","x":146.76171875,"y":504.43359375,"width":60,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":null,"seed":341428810,"version":3,"versionNonce":1190351254,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"查询成\n功?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"wslxScgh8RDGGCJMkalSE","originalText":"查询成功?","autoResize":true,"lineHeight":1.25},{"id":"pjTZCpowXshGy9eNzKl5v","type":"text","x":66.091796875,"y":763.0390625,"width":221.58203125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":null,"seed":1610477834,"version":3,"versionNonce":1372895946,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"返回结果或\ndiagnostics
stop = false","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"3IbSZxKklYE3BDrakjqJW","originalText":"返回结果或 diagnostics
stop = false","autoResize":true,"lineHeight":1.25},{"id":"kGMgUDjQr0fY7Ja-krLzv","type":"text","x":376.4384765625,"y":763.0390625,"width":283.076171875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":null,"seed":1508851658,"version":3,"versionNonce":1862315734,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"返回结构化 error
当前不计入\n10 次修复预算","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"1znNcw0hxirOWh--MruKX","originalText":"返回结构化 error
当前不计入 10 次修复预算","autoResize":true,"lineHeight":1.25},{"id":"4oMAomzsfSwupgxBSmq6D","type":"text","x":646.115234375,"y":355.3125,"width":327.75390625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":null,"seed":239646346,"version":3,"versionNonce":29806986,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"按 action + chunkId 等生成 repairTarget","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"9M9qHa3_8TiA1sVCzQNi1","originalText":"按 action + chunkId 等生成 repairTarget","autoResize":true,"lineHeight":1.25},{"id":"b7PnhWNfGgLWNBrcGxq1H","type":"text","x":1444.552734375,"y":355.3125,"width":391.50390625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":null,"seed":1304778058,"version":3,"versionNonce":2146460694,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"按当前 chunkSession.revision 生成 repairTarget","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"daNcz5cZS9usYNv8SGQQg","originalText":"按当前 chunkSession.revision 生成 repairTarget","autoResize":true,"lineHeight":1.25},{"id":"BwkwLryaWhnnj5B1wfCfF","type":"text","x":739.9921875,"y":517.0546875,"width":140,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":null,"seed":432020490,"version":3,"versionNonce":13111370,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"参数校验并执行","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"_XnTX1CjQUbTroHGVlIIB","originalText":"参数校验并执行","autoResize":true,"lineHeight":1.25},{"id":"Bgv2GBO-RFnVSJDWFXsiO","type":"text","x":779.87109375,"y":762.91796875,"width":60,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":271846090,"version":3,"versionNonce":1538748758,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"执行成\n功?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"O6n51D1NXwixKJjFNc3qY","originalText":"执行成功?","autoResize":true,"lineHeight":1.25},{"id":"2luZNx4Q59WzKMMIp7MZ3","type":"text","x":267.634765625,"y":977.78125,"width":253.65234375,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":1471947146,"version":3,"versionNonce":1924364042,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"清除该 Stage 目标计数
清\n空旧 Commit 计数\n
taskComplete = false","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"wSzydTOO982ZMU_T2NYoB","originalText":"清除该 Stage 目标计数
清空旧 Commit 计数
taskComplete = false","autoResize":true,"lineHeight":1.25},{"id":"v0gWWf0aodhdh887QTIi5","type":"text","x":1421.7255859375,"y":1482.15625,"width":224.345703125,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":null,"seed":194207818,"version":3,"versionNonce":1571477142,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"decision =\napplied
taskComplete =\ntrue
stop = true","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"YgKWaB7uQ1h28eSYYwwA2","originalText":"decision = applied
taskComplete = true
stop = true","autoResize":true,"lineHeight":1.25},{"id":"cOTcJcuJrU5U3pzGTrDwD","type":"text","x":638.9208984375,"y":1002.78125,"width":263.330078125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":null,"seed":664061706,"version":3,"versionNonce":1208223178,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"同一 repairTarget 的 attempt + 1","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"VZIEUOSX_P3bQxqcwm6ZU","originalText":"同一 repairTarget 的 attempt + 1","autoResize":true,"lineHeight":1.25},{"id":"EjhVNPnWox87Cfs9uJiMo","type":"text","x":1147.34375,"y":1243.5,"width":87.5390625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":null,"seed":1950045642,"version":3,"versionNonce":780112854,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"attempt >=\n10?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"4jjNZmPh-hnlB99x7X7sX","originalText":"attempt >= 10?","autoResize":true,"lineHeight":1.25},{"id":"fNdbZqhSUAzUHwhOEXdQC","type":"text","x":1711.6396484375,"y":1494.65625,"width":301.142578125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"as","roundness":null,"seed":1923222666,"version":3,"versionNonce":701807754,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"decision = auto_repairable
stop =\nfalse
返回结构化诊断","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"vjtFAOZavsUNFUIf7OpWx","originalText":"decision = auto_repairable
stop = false
返回结构化诊断","autoResize":true,"lineHeight":1.25},{"id":"E84AC3frhR7fbicW3SBmK","type":"text","x":1038.8955078125,"y":1494.65625,"width":304.873046875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"at","roundness":null,"seed":1216605002,"version":3,"versionNonce":407546134,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"decision = terminal_internal
记录\nterminalError
stop = true","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"07sqs-U1hiYtnGXU9_bAG","originalText":"decision = terminal_internal
记录 terminalError
stop = true","autoResize":true,"lineHeight":1.25},{"id":"lYOz-qGZthHK1ibc11lNu","type":"text","x":1033.8583984375,"y":990.28125,"width":404.189453125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"au","roundness":null,"seed":742126090,"version":3,"versionNonce":1709218634,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"needs_user_input 目前仅在类型中预留
当前\nGateway 没有任何分支产出该值","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"UgR7Ns9zd0CX8nVVt3GrE","originalText":"needs_user_input 目前仅在类型中预留
当前 Gateway 没有任何分支产出该值","autoResize":true,"lineHeight":1.25},{"id":"4dZMPUgO1cMulTmpn-P1g","type":"text","x":1883.234375,"y":1635.15625,"width":341.09375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"av","roundness":null,"seed":1355096266,"version":3,"versionNonce":1518409302,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"同一 AgentLoop 根据结构化诊断自修复","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"VqgXeD-GYEeBMR-b_o691","originalText":"同一 AgentLoop 根据结构化诊断自修复","autoResize":true,"lineHeight":1.25},{"id":"xsFJViNT9G1Fa51cUAMhm","type":"text","x":1228.0693359375,"y":1635.15625,"width":263.876953125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aw","roundness":null,"seed":1371174794,"version":3,"versionNonce":1518510602,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"Runner 结束主循环并进入收尾","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"6SrV25UAVAAWij8e-YkWR","originalText":"Runner 结束主循环并进入收尾","autoResize":true,"lineHeight":1.25},{"id":"55C04dBt26L5FPiUtSttH","type":"text","x":154.11444531249998,"y":291.313,"width":45.537109375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ax","roundness":null,"seed":277965770,"version":3,"versionNonce":2113395606,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"query","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"MlThn6-km20RG3W1QKU6l","originalText":"query","autoResize":true,"lineHeight":1.25},{"id":"M8XoSUXtoIiq7VlRZG7nK","type":"text","x":166.883,"y":646.297,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ay","roundness":null,"seed":1199754634,"version":3,"versionNonce":1656082634,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"15fskW0hKF225e8Dbb0AY","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"ch7xSdKjANpe_ppJN0usy","type":"text","x":507.977,"y":646.297,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"az","roundness":null,"seed":82936266,"version":3,"versionNonce":686029014,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"pzbYsPR_ec7IBnExTE2hh","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"xQk-xV24Q6deoVjjh8xdh","type":"text","x":789.445125,"y":291.313,"width":41.09375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b00","roundness":null,"seed":2047974922,"version":3,"versionNonce":1108682634,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"stage","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"qB1lJc8vORuxddqnPxJrd","originalText":"stage","autoResize":true,"lineHeight":1.25},{"id":"4zl6LDBcM_WfpvfL7dddz","type":"text","x":1609.7532421875,"y":291.313,"width":61.103515625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b01","roundness":null,"seed":1954292298,"version":3,"versionNonce":1926917654,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"commit","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"z4L3sNon14Ll2-vEBLC_a","originalText":"commit","autoResize":true,"lineHeight":1.25},{"id":"ehRdsVmkbm9DG-F_XzG2H","type":"text","x":351.414125,"y":904.781,"width":86.09375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b02","roundness":null,"seed":1926504202,"version":3,"versionNonce":282830410,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"stage 成功","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"3IIMaQr0ZnOs30sU1kv8V","originalText":"stage 成功","autoResize":true,"lineHeight":1.25},{"id":"azK5CJSaZmfYrfpcwNamY","type":"text","x":1480.8462421875,"y":1100.781,"width":106.103515625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b03","roundness":null,"seed":1524777802,"version":3,"versionNonce":953170774,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"commit 成功","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"EvwqYG_XFwoMy2u9dnAOH","originalText":"commit 成功","autoResize":true,"lineHeight":1.25},{"id":"D_1r7fDjpoiWvb5lUNpPp","type":"text","x":750.586,"y":904.781,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b04","roundness":null,"seed":1805111178,"version":3,"versionNonce":669273354,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"失败","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"CWZRVmlPrArqZmbIFd54w","originalText":"失败","autoResize":true,"lineHeight":1.25},{"id":"T2_m6VkBrtNtJubdNNoN-","type":"text","x":1852.211,"y":1411.656,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b05","roundness":null,"seed":1465047370,"version":3,"versionNonce":1897554070,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jlN-DP6LoJMyHU-CM1opQ","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"GNHDE_ZxLmw_FnBMnyKAG","type":"text","x":1181.332,"y":1411.656,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b06","roundness":null,"seed":747120010,"version":3,"versionNonce":212474826,"isDeleted":false,"boundElements":null,"updated":1785725212506,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Iz_kHf_cOFUWXAZ3FK_Ob","originalText":"是","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/workflow-builder-cli-decisions.mmd b/diagrams/workflow-builder-cli-decisions.mmd new file mode 100644 index 000000000000..e5cb63731ead --- /dev/null +++ b/diagrams/workflow-builder-cli-decisions.mmd @@ -0,0 +1,38 @@ +%% Workflow CLI Gateway 的真实错误与修复判断 +flowchart TD + CALL["Workflow CLI 工具调用"] --> PHASE{"调用阶段"} + + PHASE -->|"query"| QUERY["执行只读查询或 draft validate"] + QUERY --> QOK{"查询成功?"} + QOK -->|"是"| QRETURN["返回结果或 diagnostics
stop = false"] + QOK -->|"否"| QERROR["返回结构化 error
当前不计入 10 次修复预算"] + + PHASE -->|"stage"| STAGE["按 action + chunkId 等生成 repairTarget"] + PHASE -->|"commit"| COMMIT["按当前 chunkSession.revision 生成 repairTarget"] + STAGE --> EXEC["参数校验并执行"] + COMMIT --> EXEC + EXEC --> OK{"执行成功?"} + + OK -->|"stage 成功"| STAGED["清除该 Stage 目标计数
清空旧 Commit 计数
taskComplete = false"] + OK -->|"commit 成功"| APPLIED["decision = applied
taskComplete = true
stop = true"] + OK -->|"失败"| COUNT["同一 repairTarget 的 attempt + 1"] + COUNT --> LIMIT{"attempt >= 10?"} + LIMIT -->|"否"| REPAIR["decision = auto_repairable
stop = false
返回结构化诊断"] + LIMIT -->|"是"| TERMINAL["decision = terminal_internal
记录 terminalError
stop = true"] + + RESERVED["needs_user_input 目前仅在类型中预留
当前 Gateway 没有任何分支产出该值"] -.-> LIMIT + REPAIR --> AGENT["同一 AgentLoop 根据结构化诊断自修复"] + AGENT --> CALL + TERMINAL --> FINAL["Runner 结束主循环并进入收尾"] + APPLIED --> FINAL + + classDef input fill:#eef4ff,stroke:#5b8def,color:#172b4d; + classDef decision fill:#ffffff,stroke:#7c8798,color:#1f2937; + classDef tool fill:#edf9f1,stroke:#46a36b,color:#173d25; + classDef success fill:#ecfbfa,stroke:#28a5a0,color:#123d3a; + classDef terminal fill:#fff0f0,stroke:#d64545,color:#5c1111; + class CALL,AGENT input; + class PHASE,QOK,OK,LIMIT decision; + class QUERY,QRETURN,QERROR,STAGE,COMMIT,EXEC,COUNT,REPAIR,STAGED tool; + class APPLIED success; + class TERMINAL,FINAL,RESERVED terminal; diff --git a/diagrams/workflow-builder-cli-decisions.png b/diagrams/workflow-builder-cli-decisions.png new file mode 100644 index 0000000000000000000000000000000000000000..622fa80c91f54b2c4ec3ee725a393b5acec1eef7 GIT binary patch literal 402401 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 >|g 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
?et(Xg+H&)2 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�)smQnU~$&-x#0U9~uAv^FrfS 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 z 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 literal 0 HcmV?d00001 diff --git a/diagrams/workflow-builder-cli-decisions.svg b/diagrams/workflow-builder-cli-decisions.svg new file mode 100644 index 000000000000..cd285e8f1d6e --- /dev/null +++ b/diagrams/workflow-builder-cli-decisions.svg @@ -0,0 +1 @@ +querystagecommitstage 成功commit 成功失败Workflow CLI 工具调用调用阶段执行只读查询或 draftvalidate查询成功?返回结果或 diagnosticsstop = false返回结构化 error当前不计入 10 次修复预算 action + chunkId 等生成repairTarget按当前chunkSession.revision 生成repairTarget参数校验并执行执行成功?清除该 Stage 目标计数清空旧 Commit 计数taskComplete = falsedecision = appliedtaskComplete = truestop = true同一 repairTargetattempt + 1attempt >= 10?decision = auto_repairablestop = false返回结构化诊断decision = terminal_internal记录 terminalErrorstop = trueneeds_user_input目前仅在类型中预留当前 Gateway没有任何分支产出该值同一 AgentLoop根据结构化诊断自修复Runner结束主循环并进入收尾 \ No newline at end of file diff --git a/diagrams/workflow-builder-continuation-policy.excalidraw b/diagrams/workflow-builder-continuation-policy.excalidraw new file mode 100644 index 000000000000..a62a9a1b6dd5 --- /dev/null +++ b/diagrams/workflow-builder-continuation-policy.excalidraw @@ -0,0 +1 @@ +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"6mak09Cz48Ww403vySlgg","type":"rectangle","x":537.74609375,"y":0,"width":219.875,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":1090198346,"version":3,"versionNonce":438116758,"isDeleted":false,"boundElements":[{"type":"text","id":"hzYCjux0tcxIUe4XnVxht"},{"id":"vHHVdqKITcggP5V8hL-DK","type":"arrow"}],"updated":1785724993878,"link":null,"locked":false},{"id":"T1QBGGj9SfzluVwawkrA3","type":"rectangle","x":499.97265625,"y":99,"width":295.421875,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":877565526,"version":4,"versionNonce":1323709462,"isDeleted":false,"boundElements":[{"type":"text","id":"sS9pqJZ9xAYzo52Ww57as"},{"id":"vHHVdqKITcggP5V8hL-DK","type":"arrow"},{"id":"q_cjHwB2S7IqVQ4qwnTlM","type":"arrow"}],"updated":1785724993878,"link":null,"locked":false},{"id":"CEv_TEQZxxHcf6YlTk8SR","type":"rectangle","x":510.37890625,"y":193,"width":274.609375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":1850548746,"version":7,"versionNonce":867056342,"isDeleted":false,"boundElements":[{"type":"text","id":"M51t3XEimfD92YldjaErK"},{"id":"q_cjHwB2S7IqVQ4qwnTlM","type":"arrow"},{"id":"57N2rv0y6eX1r_FbyZauG","type":"arrow"},{"id":"U_YSf38Ld3K42ZBvECWsU","type":"arrow"},{"id":"bvlqKh3s5kOrX2njmNTGt","type":"arrow"},{"id":"Ns3DnEECifAjw3BjpI0gC","type":"arrow"}],"updated":1785724993879,"link":null,"locked":false},{"id":"zKB-GEs-14UftZ2iTRqYJ","type":"diamond","x":0,"y":292,"width":243.234375,"height":243.234375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":1108695958,"version":5,"versionNonce":2114728086,"isDeleted":false,"boundElements":[{"type":"text","id":"s4j3N4vr4ZI_57qZMt1nY"},{"id":"57N2rv0y6eX1r_FbyZauG","type":"arrow"},{"id":"wkB3Jhr2jpQBqC1eDZHPh","type":"arrow"},{"id":"3CKxTO76LKJMBAmXJdMOt","type":"arrow"}],"updated":1785724993878,"link":null,"locked":false},{"id":"e4Ihi_O_uwz97rLwN9Qay","type":"rectangle","x":40.47265625,"y":715.625,"width":318.90625,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":422596810,"version":4,"versionNonce":1300482262,"isDeleted":false,"boundElements":[{"type":"text","id":"uBVc1Q9nek_k65tS1xIi2"},{"id":"wkB3Jhr2jpQBqC1eDZHPh","type":"arrow"},{"id":"U_YSf38Ld3K42ZBvECWsU","type":"arrow"}],"updated":1785724993878,"link":null,"locked":false},{"id":"oczsS6AUyJDv0evo2fgQe","type":"diamond","x":409.37890625,"y":619.234375,"width":275.78125,"height":275.78125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":223443158,"version":5,"versionNonce":1729784150,"isDeleted":false,"boundElements":[{"type":"text","id":"1nXRa-0rkNsbYVG_HogfK"},{"id":"3CKxTO76LKJMBAmXJdMOt","type":"arrow"},{"id":"e3KzPmd09ReOjDhraMYoM","type":"arrow"},{"id":"6ZsHjRbFn_n0a2cKjr7Py","type":"arrow"}],"updated":1785724993878,"link":null,"locked":false},{"id":"3L66iD5mCYtMDg3c_xcYq","type":"rectangle","x":348.77734375,"y":981.515625,"width":396.984375,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":1161799562,"version":4,"versionNonce":1596789462,"isDeleted":false,"boundElements":[{"type":"text","id":"IByirKvQk16Ww60bd6Ui0"},{"id":"e3KzPmd09ReOjDhraMYoM","type":"arrow"},{"id":"LNvXY-zNFkG8kFgkPHSZN","type":"arrow"}],"updated":1785724993878,"link":null,"locked":false},{"id":"y6W1_poXeGN5Xc_IKt2mV","type":"diamond","x":511.765625,"y":1247.484375,"width":304.5,"height":304.5,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":1838673430,"version":5,"versionNonce":1058175574,"isDeleted":false,"boundElements":[{"type":"text","id":"5FVE4RlSfY0LuKFlHgExf"},{"id":"LNvXY-zNFkG8kFgkPHSZN","type":"arrow"},{"id":"bvlqKh3s5kOrX2njmNTGt","type":"arrow"},{"id":"tuXwfLGgFK4sJvbc2X6Hs","type":"arrow"}],"updated":1785724993878,"link":null,"locked":false},{"id":"6Bg6VW47olCWXFvdiNaOg","type":"diamond","x":513.4609375,"y":2515.90625,"width":301.109375,"height":301.109375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":1253451338,"version":6,"versionNonce":1995655574,"isDeleted":false,"boundElements":[{"type":"text","id":"poBDbYqLlyjMg_Vo4X-97"},{"id":"tuXwfLGgFK4sJvbc2X6Hs","type":"arrow"},{"id":"eiuZ1s046x381llK-NwLD","type":"arrow"},{"id":"hGkGrmCtqqxtEUKot6FBI","type":"arrow"},{"id":"QzDfTBUjaKyixpzMo7OF4","type":"arrow"}],"updated":1785724993878,"link":null,"locked":false},{"id":"n76rHhAAJtZqiHHgIMeaX","type":"rectangle","x":756.96875,"y":2896.015625,"width":264.3125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":2145237846,"version":8,"versionNonce":446014038,"isDeleted":false,"boundElements":[{"type":"text","id":"fE8nv-O9zykKFagnju-ru"},{"id":"eiuZ1s046x381llK-NwLD","type":"arrow"},{"id":"hGkGrmCtqqxtEUKot6FBI","type":"arrow"},{"id":"QzDfTBUjaKyixpzMo7OF4","type":"arrow"},{"id":"TiobJQbgmXZ5nJw-tWnZr","type":"arrow"},{"id":"YsHp89t49ggl_xm-iES00","type":"arrow"},{"id":"8eKUqt6nLUjhmJ2ZuN3gd","type":"arrow"}],"updated":1785724993879,"link":null,"locked":false},{"id":"l5NyLzmii_6u_on_qUxMB","type":"rectangle","x":991.296875,"y":979.015625,"width":393.375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":1114557706,"version":4,"versionNonce":126127062,"isDeleted":false,"boundElements":[{"type":"text","id":"lOupa4GpXoFx3NVxdwxHQ"},{"id":"6ZsHjRbFn_n0a2cKjr7Py","type":"arrow"},{"id":"wTIBEfm42vEJJwzLbQ9WK","type":"arrow"}],"updated":1785724993878,"link":null,"locked":false},{"id":"Tf7yxD9xGi-i-R1SD_Efx","type":"diamond","x":866.265625,"y":1078.015625,"width":643.4375,"height":643.4375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":2054676630,"version":5,"versionNonce":2008757078,"isDeleted":false,"boundElements":[{"type":"text","id":"jjs619I7tl-_tDITRcZo-"},{"id":"wTIBEfm42vEJJwzLbQ9WK","type":"arrow"},{"id":"TiobJQbgmXZ5nJw-tWnZr","type":"arrow"},{"id":"Jf0qMUonPsdY0LZ0R5x5S","type":"arrow"}],"updated":1785724993879,"link":null,"locked":false},{"id":"1m3LMrxWqsQNaKmrVPSvc","type":"rectangle","x":1132.1875,"y":1805.453125,"width":293.1875,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":1910807498,"version":4,"versionNonce":1241175510,"isDeleted":false,"boundElements":[{"type":"text","id":"8xGxj6ZSKbEdulgwIV7AI"},{"id":"Jf0qMUonPsdY0LZ0R5x5S","type":"arrow"},{"id":"2lmLDbpdfWOiIuOUDO5DT","type":"arrow"}],"updated":1785724993879,"link":null,"locked":false},{"id":"LVcD9a7Lq8ITKoOyH7Pkk","type":"diamond","x":1522.8125,"y":1972.453125,"width":459.453125,"height":459.453125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":18570710,"version":6,"versionNonce":1009416726,"isDeleted":false,"boundElements":[{"type":"text","id":"64VwWdV6bIESSW_3Whxa5"},{"id":"2lmLDbpdfWOiIuOUDO5DT","type":"arrow"},{"id":"Ns3DnEECifAjw3BjpI0gC","type":"arrow"},{"id":"3VvOgNt4oXr0rA5ZpkM6h","type":"arrow"},{"id":"KxEO3ev7REzwYYnb7Z8IO","type":"arrow"}],"updated":1785724993879,"link":null,"locked":false},{"id":"GMeC7FF2LS4Tq7RMZrDSt","type":"rectangle","x":1654.2109375,"y":2644.4609375,"width":196.65625,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":926061194,"version":4,"versionNonce":1510416342,"isDeleted":false,"boundElements":[{"type":"text","id":"6l7d8OfHpPwSpJXD_kkxJ"},{"id":"3VvOgNt4oXr0rA5ZpkM6h","type":"arrow"},{"id":"YsHp89t49ggl_xm-iES00","type":"arrow"}],"updated":1785724993879,"link":null,"locked":false},{"id":"II54BqnPFSAeBSgYZBzTt","type":"rectangle","x":717.0078125,"y":2995.015625,"width":344.234375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":null,"seed":2027762454,"version":3,"versionNonce":1671096214,"isDeleted":false,"boundElements":[{"type":"text","id":"ex6M6KZpFVBlK1QTTMifl"},{"id":"8eKUqt6nLUjhmJ2ZuN3gd","type":"arrow"}],"updated":1785724993879,"link":null,"locked":false},{"id":"1CM_v-yn_ZAgC9YxzZmt2","type":"rectangle","x":1475.375,"y":1805.453125,"width":554.328125,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":null,"seed":1964224842,"version":3,"versionNonce":2118485206,"isDeleted":false,"boundElements":[{"type":"text","id":"HIU2U03XMQiEabl9RInqV"},{"id":"KxEO3ev7REzwYYnb7Z8IO","type":"arrow"}],"updated":1785724993879,"link":null,"locked":false},{"id":"vHHVdqKITcggP5V8hL-DK","type":"arrow","x":647.684,"y":49,"width":0,"height":44.7,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":{"type":2},"seed":1546805334,"version":4,"versionNonce":2062543562,"isDeleted":false,"boundElements":null,"updated":1785724993878,"link":null,"locked":false,"points":[[0,0.5],[0,44.2]],"lastCommittedPoint":null,"startBinding":{"elementId":"6mak09Cz48Ww403vySlgg","focus":-0.0000036952814095943607,"gap":1},"endBinding":{"elementId":"T1QBGGj9SfzluVwawkrA3","focus":0.0000027503041207160985,"gap":5.299999999999997},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"q_cjHwB2S7IqVQ4qwnTlM","type":"arrow","x":647.684,"y":143,"width":0,"height":44.69999999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":{"type":2},"seed":2128803850,"version":4,"versionNonce":550977610,"isDeleted":false,"boundElements":null,"updated":1785724993878,"link":null,"locked":false,"points":[[0,0.5],[0,44.19999999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"T1QBGGj9SfzluVwawkrA3","focus":-0.0000027503041207160985,"gap":1},"endBinding":{"elementId":"CEv_TEQZxxHcf6YlTk8SR","focus":0.0000029587482216971768,"gap":5.300000000000011},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"57N2rv0y6eX1r_FbyZauG","type":"arrow","x":510.379,"y":230.42,"width":388.762,"height":56.781000000000034,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":{"type":2},"seed":250602902,"version":4,"versionNonce":839333322,"isDeleted":false,"boundElements":null,"updated":1785724993878,"link":null,"locked":false,"points":[[0.5,0.5],[-388.762,36.58000000000001],[-388.866,56.281000000000034]],"lastCommittedPoint":null,"startBinding":{"elementId":"CEv_TEQZxxHcf6YlTk8SR","focus":-0.000013954546979009855,"gap":1},"endBinding":{"elementId":"zKB-GEs-14UftZ2iTRqYJ","focus":0.023631098632382035,"gap":4.799017607802642},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"wkB3Jhr2jpQBqC1eDZHPh","type":"arrow","x":122.117,"y":535.734,"width":58.128,"height":175.03099999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":{"type":2},"seed":77293258,"version":4,"versionNonce":454283786,"isDeleted":false,"boundElements":[{"type":"text","id":"z33uKkMTKXsCLCD2lxVCF"}],"updated":1785724993878,"link":null,"locked":false,"points":[[0.5,0.5],[-0.5,41.5],[57.128,174.53099999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"zKB-GEs-14UftZ2iTRqYJ","focus":-0.016207408164165767,"gap":1},"endBinding":{"elementId":"e4Ihi_O_uwz97rLwN9Qay","focus":0.0000022856201978079785,"gap":4.860000000000014},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"U_YSf38Ld3K42ZBvECWsU","type":"arrow","x":236.223,"y":715.625,"width":268.931,"height":473.832,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":{"type":2},"seed":843760342,"version":4,"versionNonce":337270666,"isDeleted":false,"boundElements":null,"updated":1785724993878,"link":null,"locked":false,"points":[[0.5,-0.5],[121.043,-138.39099999999996],[121.043,-302.008],[121.043,-448.625],[268.431,-473.332]],"lastCommittedPoint":null,"startBinding":{"elementId":"e4Ihi_O_uwz97rLwN9Qay","focus":-0.0000028091367249978435,"gap":1},"endBinding":{"elementId":"CEv_TEQZxxHcf6YlTk8SR","focus":0.000014156052592830085,"gap":5.224906250000004},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"3CKxTO76LKJMBAmXJdMOt","type":"arrow","x":209.966,"y":447.886,"width":337.741,"height":166.54899999999992,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":2128084362,"version":4,"versionNonce":1551715274,"isDeleted":false,"boundElements":[{"type":"text","id":"fL2uYUzvEDBifDeY-5hPX"}],"updated":1785724993878,"link":null,"locked":false,"points":[[0.5,0.5],[337.304,129.348],[337.241,166.04899999999992]],"lastCommittedPoint":null,"startBinding":{"elementId":"zKB-GEs-14UftZ2iTRqYJ","focus":0.003199879285399746,"gap":1},"endBinding":{"elementId":"oczsS6AUyJDv0evo2fgQe","focus":0.015328435969882627,"gap":4.810576462277113},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"e3KzPmd09ReOjDhraMYoM","type":"arrow","x":547.77,"y":895.516,"width":0.5,"height":80.70000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":2027419670,"version":4,"versionNonce":1979295754,"isDeleted":false,"boundElements":[{"type":"text","id":"i_jXIcTYhv0loxQjPvkB-"}],"updated":1785724993878,"link":null,"locked":false,"points":[[0,0.5],[-0.5,41.5],[-0.5,80.20000000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"oczsS6AUyJDv0evo2fgQe","focus":-0.01572137479094865,"gap":1},"endBinding":{"elementId":"3L66iD5mCYtMDg3c_xcYq","focus":0.000002361553902398151,"gap":5.299624999999992},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"LNvXY-zNFkG8kFgkPHSZN","type":"arrow","x":547.27,"y":1025.516,"width":77.19600000000003,"height":255.79899999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":{"type":2},"seed":450083914,"version":4,"versionNonce":1141026186,"isDeleted":false,"boundElements":null,"updated":1785724993878,"link":null,"locked":false,"points":[[0.5,0.5],[0,27.5],[76.69600000000003,255.29899999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"3L66iD5mCYtMDg3c_xcYq","focus":-0.000002361553902398151,"gap":1},"endBinding":{"elementId":"y6W1_poXeGN5Xc_IKt2mV","focus":0.0032326527635589066,"gap":4.574273767495812},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"bvlqKh3s5kOrX2njmNTGt","type":"arrow","x":709.66,"y":1293.129,"width":100.49599999999998,"height":1049.5839999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":2056029526,"version":4,"versionNonce":1056793034,"isDeleted":false,"boundElements":[{"type":"text","id":"EovxeIAjT1tDqFWltv9Fg"}],"updated":1785724993878,"link":null,"locked":false,"points":[[-0.5,-0.5],[100.49599999999998,-240.11299999999983],[100.49599999999998,-289.61299999999994],[100.49599999999998,-356.11299999999994],[100.49599999999998,-536.0039999999999],[100.49599999999998,-715.8949999999999],[100.49599999999998,-879.512],[100.49599999999998,-1026.129],[24.009000000000015,-1049.0839999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"y6W1_poXeGN5Xc_IKt2mV","focus":0.006739958742196032,"gap":1},"endBinding":{"elementId":"CEv_TEQZxxHcf6YlTk8SR","focus":0.000012965689525487951,"gap":1.5450000000000728},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"tuXwfLGgFK4sJvbc2X6Hs","type":"arrow","x":664.516,"y":1552.484,"width":0.5,"height":958.623,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":644457226,"version":4,"versionNonce":1294564874,"isDeleted":false,"boundElements":[{"type":"text","id":"SCzuX91LSmhm27IuvKy6B"}],"updated":1785724993878,"link":null,"locked":false,"points":[[0.5,0.5],[-0.5,210.96900000000005],[-0.5,294.46900000000005],[-0.5,377.96900000000005],[-0.5,649.6959999999999],[-0.5,921.422],[-0.5629999999999882,958.123]],"lastCommittedPoint":null,"startBinding":{"elementId":"y6W1_poXeGN5Xc_IKt2mV","focus":-0.005664329219459697,"gap":1},"endBinding":{"elementId":"6Bg6VW47olCWXFvdiNaOg","focus":0.015026547014223214,"gap":4.799256563928056},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"eiuZ1s046x381llK-NwLD","type":"arrow","x":599.801,"y":2752.801,"width":231.01299999999992,"height":143.84799999999996,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":146631318,"version":4,"versionNonce":1814037066,"isDeleted":false,"boundElements":[{"type":"text","id":"p4UKYF79djDi6NavasZ44"}],"updated":1785724993878,"link":null,"locked":false,"points":[[0.5,0.5],[-79.06700000000001,103.71500000000015],[151.4459999999999,143.34799999999996]],"lastCommittedPoint":null,"startBinding":{"elementId":"6Bg6VW47olCWXFvdiNaOg","focus":-0.010671293227647066,"gap":1},"endBinding":{"elementId":"n76rHhAAJtZqiHHgIMeaX","focus":0.000009975434473389419,"gap":5.221750000000043},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"hGkGrmCtqqxtEUKot6FBI","type":"arrow","x":676.275,"y":2805.757,"width":127.77100000000007,"height":88.70699999999988,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":2081731018,"version":4,"versionNonce":1947856522,"isDeleted":false,"boundElements":[{"type":"text","id":"-k8fDVmmq-CkOknOamz-Y"}],"updated":1785724993878,"link":null,"locked":false,"points":[[0.5,0.5],[3.8419999999999845,50.759000000000015],[127.27100000000007,88.20699999999988]],"lastCommittedPoint":null,"startBinding":{"elementId":"6Bg6VW47olCWXFvdiNaOg","focus":-0.01139728894929769,"gap":1},"endBinding":{"elementId":"n76rHhAAJtZqiHHgIMeaX","focus":-0.000003236407942071584,"gap":1.5516250000000582},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"QzDfTBUjaKyixpzMo7OF4","type":"arrow","x":756.658,"y":2725.373,"width":207.16200000000003,"height":167.19399999999996,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":35629014,"version":4,"versionNonce":468730570,"isDeleted":false,"boundElements":[{"type":"text","id":"X-YWcFJzS5ED2BUvUdP3g"}],"updated":1785724993878,"link":null,"locked":false,"points":[[-0.5,0.5],[207.16200000000003,131.14300000000003],[165.586,166.69399999999996]],"lastCommittedPoint":null,"startBinding":{"elementId":"6Bg6VW47olCWXFvdiNaOg","focus":0.001761561344363875,"gap":1},"endBinding":{"elementId":"n76rHhAAJtZqiHHgIMeaX","focus":-0.0000032399938949139036,"gap":3.4486249999999927},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"6ZsHjRbFn_n0a2cKjr7Py","type":"arrow","x":655.432,"y":787.853,"width":532.5519999999999,"height":185.86300000000006,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":1861216394,"version":4,"versionNonce":2098986762,"isDeleted":false,"boundElements":[{"type":"text","id":"81uOq1HgcBmjsIbS7albD"}],"updated":1785724993878,"link":null,"locked":false,"points":[[0,0.5],[532.5519999999999,149.163],[532.5519999999999,185.36300000000006]],"lastCommittedPoint":null,"startBinding":{"elementId":"oczsS6AUyJDv0evo2fgQe","focus":0.0031377802567156467,"gap":1},"endBinding":{"elementId":"l5NyLzmii_6u_on_qUxMB","focus":-0.0000019065776934106909,"gap":5.299624999999992},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"wTIBEfm42vEJJwzLbQ9WK","type":"arrow","x":1187.984,"y":1028.016,"width":0.39600000000018554,"height":45.20100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":650657046,"version":4,"versionNonce":163267722,"isDeleted":false,"boundElements":null,"updated":1785724993878,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[-0.10399999999981446,44.70100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"l5NyLzmii_6u_on_qUxMB","focus":0.0000019065776934106909,"gap":1},"endBinding":{"elementId":"Tf7yxD9xGi-i-R1SD_Efx","focus":0.021125103280280208,"gap":4.799987867823114},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"TiobJQbgmXZ5nJw-tWnZr","type":"arrow","x":1094.363,"y":1627.831,"width":143.5440000000001,"height":1266.086,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":917915466,"version":4,"versionNonce":852056266,"isDeleted":false,"boundElements":[{"type":"text","id":"5BMcrK6u_bzimZ77ZTDax"}],"updated":1785724993879,"link":null,"locked":false,"points":[[-0.5,0.5],[-56.79300000000012,135.62200000000007],[-56.79300000000012,219.12200000000007],[-56.79300000000012,302.62200000000007],[-56.79300000000012,574.3489999999999],[-56.79300000000012,846.075],[-56.79300000000012,1038.6299999999999],[-56.79300000000012,1228.6850000000002],[-143.0440000000001,1265.586]],"lastCommittedPoint":null,"startBinding":{"elementId":"Tf7yxD9xGi-i-R1SD_Efx","focus":-0.00589412991279139,"gap":1},"endBinding":{"elementId":"n76rHhAAJtZqiHHgIMeaX","focus":-0.000005662476192310948,"gap":2.0986250000000837},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Jf0qMUonPsdY0LZ0R5x5S","type":"arrow","x":1252.753,"y":1657.685,"width":26.02800000000002,"height":142.46800000000007,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":1814833750,"version":4,"versionNonce":1531237642,"isDeleted":false,"boundElements":[{"type":"text","id":"CqVwHnbNxPgNZ8L_WSmxg"}],"updated":1785724993879,"link":null,"locked":false,"points":[[0,0.5],[26.02800000000002,105.76800000000003],[26.02800000000002,141.96800000000007]],"lastCommittedPoint":null,"startBinding":{"elementId":"Tf7yxD9xGi-i-R1SD_Efx","focus":-0.0040117218699157265,"gap":1},"endBinding":{"elementId":"1m3LMrxWqsQNaKmrVPSvc","focus":-0.0000017053933067097305,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"2lmLDbpdfWOiIuOUDO5DT","type":"arrow","x":1278.781,"y":1888.453,"width":323.6700000000001,"height":227.85300000000007,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":{"type":2},"seed":1539493386,"version":4,"versionNonce":136747658,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"points":[[0.5,0.5],[0,42],[323.1700000000001,227.35300000000007]],"lastCommittedPoint":null,"startBinding":{"elementId":"1m3LMrxWqsQNaKmrVPSvc","focus":0.000001705393306303216,"gap":1},"endBinding":{"elementId":"LVcD9a7Lq8ITKoOyH7Pkk","focus":-0.001339243465130764,"gap":4.60229287370041},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Ns3DnEECifAjw3BjpI0gC","type":"arrow","x":1875.857,"y":2095.771,"width":1274.4180000000001,"height":1873.2900000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":{"type":2},"seed":1361080214,"version":4,"versionNonce":783052490,"isDeleted":false,"boundElements":[{"type":"text","id":"uCVnKBgEncqpzoQJdXTOC"}],"updated":1785724993879,"link":null,"locked":false,"points":[[-0.5,-0.5],[188.846,-165.3180000000002],[188.846,-248.8180000000002],[188.846,-332.3180000000002],[188.846,-696.0370000000003],[188.846,-1042.755],[188.846,-1092.255],[188.846,-1158.755],[188.846,-1338.6460000000002],[188.846,-1518.5370000000003],[188.846,-1682.1540000000002],[188.846,-1828.7710000000002],[-1085.0720000000001,-1872.7900000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"LVcD9a7Lq8ITKoOyH7Pkk","focus":0.006726602109240869,"gap":1},"endBinding":{"elementId":"CEv_TEQZxxHcf6YlTk8SR","focus":-0.000015961760930779045,"gap":5.2967187499998545},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"3VvOgNt4oXr0rA5ZpkM6h","type":"arrow","x":1753.039,"y":2432.406,"width":0.5,"height":206.7550000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":{"type":2},"seed":588283082,"version":4,"versionNonce":45591306,"isDeleted":false,"boundElements":[{"type":"text","id":"wyDDvaSW0lIXGGzvgmIvW"}],"updated":1785724993879,"link":null,"locked":false,"points":[[0,0.5],[-0.5,41.5],[-0.5,206.2550000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"LVcD9a7Lq8ITKoOyH7Pkk","focus":-0.014250631090934347,"gap":1},"endBinding":{"elementId":"GMeC7FF2LS4Tq7RMZrDSt","focus":-6.356268895981081e-7,"gap":5.299937499999942},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"YsHp89t49ggl_xm-iES00","type":"arrow","x":1752.539,"y":2688.461,"width":725.972,"height":221.8670000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":{"type":2},"seed":836373718,"version":4,"versionNonce":89911434,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"points":[[-0.5,0.5],[0,168.0550000000003],[-725.472,221.3670000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"GMeC7FF2LS4Tq7RMZrDSt","focus":6.356268895981081e-7,"gap":1},"endBinding":{"elementId":"n76rHhAAJtZqiHHgIMeaX","focus":0.000003952440786680152,"gap":5.285750000000007},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"8eKUqt6nLUjhmJ2ZuN3gd","type":"arrow","x":889.125,"y":2945.016,"width":0,"height":44.69999999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":{"type":2},"seed":2050642826,"version":4,"versionNonce":1020057098,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"points":[[0,0.5],[0,44.19999999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"n76rHhAAJtZqiHHgIMeaX","focus":0,"gap":1},"endBinding":{"elementId":"II54BqnPFSAeBSgYZBzTt","focus":0,"gap":5.2996250000001055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"KxEO3ev7REzwYYnb7Z8IO","type":"arrow","x":1752.539,"y":1888.453,"width":0.43800000000010186,"height":79.20000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"dashed","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":{"type":2},"seed":468582934,"version":4,"versionNonce":375544714,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"points":[[0.5,0.5],[0,42],[-0.06199999999989814,78.70000000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"1CM_v-yn_ZAgC9YxzZmt2","focus":2.2549821014407675e-7,"gap":1},"endBinding":{"elementId":"LVcD9a7Lq8ITKoOyH7Pkk","focus":0.013926557190737843,"gap":4.802942875532129},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"hzYCjux0tcxIUe4XnVxht","type":"text","x":568.5283203125,"y":12,"width":158.310546875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":null,"seed":685377866,"version":3,"versionNonce":1298291274,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"用户确认 Mermaid","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"6mak09Cz48Ww403vySlgg","originalText":"用户确认 Mermaid","autoResize":true,"lineHeight":1.25},{"id":"sS9pqJZ9xAYzo52Ww57as","type":"text","x":546.51171875,"y":108.5,"width":202.34375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":null,"seed":404639754,"version":3,"versionNonce":1950271318,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"previewConfirmed = true","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"T1QBGGj9SfzluVwawkrA3","originalText":"previewConfirmed = true","autoResize":true,"lineHeight":1.25},{"id":"M51t3XEimfD92YldjaErK","type":"text","x":547.13671875,"y":205,"width":201.09375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":null,"seed":212582090,"version":3,"versionNonce":158630154,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"主 AgentLoop 继续执行","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"CEv_TEQZxxHcf6YlTk8SR","originalText":"主 AgentLoop 继续执行","autoResize":true,"lineHeight":1.25},{"id":"s4j3N4vr4ZI_57qZMt1nY","type":"text","x":77.384765625,"y":388.80859375,"width":88.84765625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":null,"seed":1394431370,"version":3,"versionNonce":1456958614,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"调用\nask_agent?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"zKB-GEs-14UftZ2iTRqYJ","originalText":"调用 ask_agent?","autoResize":true,"lineHeight":1.25},{"id":"uBVc1Q9nek_k65tS1xIi2","type":"text","x":55.0478515625,"y":732.125,"width":289.755859375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":null,"seed":1823347786,"version":3,"versionNonce":907268042,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"AskValidator 拒绝
确认后不得\n再次提问或暂停","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"e4Ihi_O_uwz97rLwN9Qay","originalText":"AskValidator 拒绝
确认后不得再次提问或暂停","autoResize":true,"lineHeight":1.25},{"id":"1nXRa-0rkNsbYVG_HogfK","type":"text","x":487.32421875,"y":732.1796875,"width":120,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":null,"seed":2067331850,"version":3,"versionNonce":1101621718,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"本轮是否调用\n工具?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"oczsS6AUyJDv0evo2fgQe","originalText":"本轮是否调用工具?","autoResize":true,"lineHeight":1.25},{"id":"IByirKvQk16Ww60bd6Ui0","type":"text","x":418.4169921875,"y":991.015625,"width":257.705078125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":null,"seed":758712778,"version":3,"versionNonce":391857802,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"query / stage / validate / commit","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"3L66iD5mCYtMDg3c_xcYq","originalText":"query / stage / validate / commit","autoResize":true,"lineHeight":1.25},{"id":"5FVE4RlSfY0LuKFlHgExf","type":"text","x":596.5810546875,"y":1374.609375,"width":134.619140625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":null,"seed":701055114,"version":3,"versionNonce":331988758,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"工具返回 stop =\ntrue?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"y6W1_poXeGN5Xc_IKt2mV","originalText":"工具返回 stop = true?","autoResize":true,"lineHeight":1.25},{"id":"poBDbYqLlyjMg_Vo4X-97","type":"text","x":594.23828125,"y":2641.68359375,"width":140,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":null,"seed":2091163466,"version":3,"versionNonce":906356042,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"已产生哪种终止\n事实?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"6Bg6VW47olCWXFvdiNaOg","originalText":"已产生哪种终止事实?","autoResize":true,"lineHeight":1.25},{"id":"fE8nv-O9zykKFagnju-ru","type":"text","x":792.1865234375,"y":2908.015625,"width":193.876953125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":36054538,"version":3,"versionNonce":28142678,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"进入无工具收尾 Agent","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"n76rHhAAJtZqiHHgIMeaX","originalText":"进入无工具收尾 Agent","autoResize":true,"lineHeight":1.25},{"id":"lOupa4GpXoFx3NVxdwxHQ","type":"text","x":1042.7060546875,"y":991.015625,"width":290.556640625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":1397281994,"version":3,"versionNonce":1265544202,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"CompletionPolicy 读取运行时事实","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"l5NyLzmii_6u_on_qUxMB","originalText":"CompletionPolicy 读取运行时事实","autoResize":true,"lineHeight":1.25},{"id":"jjs619I7tl-_tDITRcZo-","type":"text","x":1042.0166015625,"y":1374.875,"width":292.216796875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":null,"seed":833072010,"version":3,"versionNonce":1764323734,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"appliedWorkflow、terminalError 或\ncancelled 存在?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Tf7yxD9xGi-i-R1SD_Efx","originalText":"appliedWorkflow、terminalError 或 cancelled 存在?","autoResize":true,"lineHeight":1.25},{"id":"8xGxj6ZSKbEdulgwIV7AI","type":"text","x":1147.1650390625,"y":1821.953125,"width":263.232421875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":null,"seed":1937615434,"version":3,"versionNonce":764451530,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"注入 taskComplete=false
要\n求继续同一任务","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"1m3LMrxWqsQNaKmrVPSvc","originalText":"注入 taskComplete=false
要求继续同一任务","autoResize":true,"lineHeight":1.25},{"id":"64VwWdV6bIESSW_3Whxa5","type":"text","x":1646.5673828125,"y":2164.81640625,"width":212.216796875,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":null,"seed":1873137930,"version":3,"versionNonce":628281046,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"达到\nWORKFLOW_MAX_RU\nN_TIMES?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"LVcD9a7Lq8ITKoOyH7Pkk","originalText":"达到 WORKFLOW_MAX_RUN_TIMES?","autoResize":true,"lineHeight":1.25},{"id":"6l7d8OfHpPwSpJXD_kkxJ","type":"text","x":1685.0634765625,"y":2653.9609375,"width":134.951171875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"as","roundness":null,"seed":1771773898,"version":3,"versionNonce":990294410,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"AgentLoop error","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"GMeC7FF2LS4Tq7RMZrDSt","originalText":"AgentLoop error","autoResize":true,"lineHeight":1.25},{"id":"ex6M6KZpFVBlK1QTTMifl","type":"text","x":759.125,"y":3007.015625,"width":260,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"at","roundness":null,"seed":2105054858,"version":3,"versionNonce":1662944278,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"根据结构化事实生成最终答复","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"II54BqnPFSAeBSgYZBzTt","originalText":"根据结构化事实生成最终答复","autoResize":true,"lineHeight":1.25},{"id":"HIU2U03XMQiEabl9RInqV","type":"text","x":1537.3828125,"y":1821.953125,"width":430.3125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"au","roundness":null,"seed":200881482,"version":3,"versionNonce":1191964746,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"10 次不是 AgentLoop 总轮数
10 次只用于同一\nStage/Commit 目标的修复预算","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"1CM_v-yn_ZAgC9YxzZmt2","originalText":"10 次不是 AgentLoop 总轮数
10 次只用于同一 Stage/Commit 目标的修复预算","autoResize":true,"lineHeight":1.25},{"id":"z33uKkMTKXsCLCD2lxVCF","type":"text","x":111.617,"y":564.734,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"av","roundness":null,"seed":1274145930,"version":3,"versionNonce":1948356950,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"wkB3Jhr2jpQBqC1eDZHPh","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"fL2uYUzvEDBifDeY-5hPX","type":"text","x":537.27,"y":564.734,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aw","roundness":null,"seed":1253758538,"version":3,"versionNonce":91969290,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"3CKxTO76LKJMBAmXJdMOt","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"i_jXIcTYhv0loxQjPvkB-","type":"text","x":537.27,"y":924.516,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ax","roundness":null,"seed":724910730,"version":3,"versionNonce":600897174,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"e3KzPmd09ReOjDhraMYoM","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"EovxeIAjT1tDqFWltv9Fg","type":"text","x":800.156,"y":744.625,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ay","roundness":null,"seed":1193831498,"version":3,"versionNonce":1993336266,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"bvlqKh3s5kOrX2njmNTGt","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"SCzuX91LSmhm27IuvKy6B","type":"text","x":654.016,"y":1917.953,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"az","roundness":null,"seed":826448010,"version":3,"versionNonce":182563798,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"tuXwfLGgFK4sJvbc2X6Hs","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"p4UKYF79djDi6NavasZ44","type":"text","x":491.30040625000004,"y":2844.016,"width":58.8671875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b00","roundness":null,"seed":337718474,"version":3,"versionNonce":1411685514,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"applied","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"eiuZ1s046x381llK-NwLD","originalText":"applied","autoResize":true,"lineHeight":1.25},{"id":"-k8fDVmmq-CkOknOamz-Y","type":"text","x":625.6980546875,"y":2844.016,"width":108.837890625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b01","roundness":null,"seed":1379739914,"version":3,"versionNonce":1667811606,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"terminalError","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"hGkGrmCtqqxtEUKot6FBI","originalText":"terminalError","autoResize":true,"lineHeight":1.25},{"id":"X-YWcFJzS5ED2BUvUdP3g","type":"text","x":926.0709765625,"y":2844.016,"width":75.498046875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b02","roundness":null,"seed":1420791114,"version":3,"versionNonce":2067037002,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"cancelled","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"QzDfTBUjaKyixpzMo7OF4","originalText":"cancelled","autoResize":true,"lineHeight":1.25},{"id":"81uOq1HgcBmjsIbS7albD","type":"text","x":1107.984,"y":924.516,"width":160,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b03","roundness":null,"seed":254892426,"version":3,"versionNonce":1557870166,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"否,模型自然结束","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"6ZsHjRbFn_n0a2cKjr7Py","originalText":"否,模型自然结束","autoResize":true,"lineHeight":1.25},{"id":"5BMcrK6u_bzimZ77ZTDax","type":"text","x":1027.57,"y":2189.68,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b04","roundness":null,"seed":397812554,"version":3,"versionNonce":1515880970,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"TiobJQbgmXZ5nJw-tWnZr","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"CqVwHnbNxPgNZ8L_WSmxg","type":"text","x":1268.781,"y":1750.953,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b05","roundness":null,"seed":1450684298,"version":3,"versionNonce":1879964566,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Jf0qMUonPsdY0LZ0R5x5S","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"uCVnKBgEncqpzoQJdXTOC","type":"text","x":2054.703,"y":991.0160000000001,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b06","roundness":null,"seed":440842570,"version":3,"versionNonce":1553051850,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Ns3DnEECifAjw3BjpI0gC","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"wyDDvaSW0lIXGGzvgmIvW","type":"text","x":1742.539,"y":2461.406,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b07","roundness":null,"seed":1367868810,"version":3,"versionNonce":859183318,"isDeleted":false,"boundElements":null,"updated":1785724993879,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"3VvOgNt4oXr0rA5ZpkM6h","originalText":"是","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/workflow-builder-continuation-policy.mmd b/diagrams/workflow-builder-continuation-policy.mmd new file mode 100644 index 000000000000..e530f026c857 --- /dev/null +++ b/diagrams/workflow-builder-continuation-policy.mmd @@ -0,0 +1,38 @@ +%% Mermaid 确认后的连续执行与 CompletionPolicy +flowchart TD + CONFIRM["用户确认 Mermaid"] --> STATE["previewConfirmed = true"] + STATE --> LOOP["主 AgentLoop 继续执行"] + LOOP --> ASK{"调用 ask_agent?"} + ASK -->|"是"| REJECT["AskValidator 拒绝
确认后不得再次提问或暂停"] + REJECT --> LOOP + ASK -->|"否"| TURN{"本轮是否调用工具?"} + + TURN -->|"是"| TOOL["query / stage / validate / commit"] + TOOL --> STOP{"工具返回 stop = true?"} + STOP -->|"否"| LOOP + STOP -->|"是"| FACT{"已产生哪种终止事实?"} + FACT -->|"applied"| FINAL["进入无工具收尾 Agent"] + FACT -->|"terminalError"| FINAL + FACT -->|"cancelled"| FINAL + + TURN -->|"否,模型自然结束"| POLICY["CompletionPolicy 读取运行时事实"] + POLICY --> DONE{"appliedWorkflow、terminalError 或 cancelled 存在?"} + DONE -->|"是"| FINAL + DONE -->|"否"| CONTINUE["注入 taskComplete=false
要求继续同一任务"] + CONTINUE --> LIMIT{"达到 WORKFLOW_MAX_RUN_TIMES?"} + LIMIT -->|"否"| LOOP + LIMIT -->|"是"| LOOPERROR["AgentLoop error"] + LOOPERROR --> FINAL + + FINAL --> RESPONSE["根据结构化事实生成最终答复"] + + NOTE["10 次不是 AgentLoop 总轮数
10 次只用于同一 Stage/Commit 目标的修复预算"] -.-> LIMIT + + classDef agent fill:#f5f0ff,stroke:#8465d6,color:#2f1b54; + classDef decision fill:#ffffff,stroke:#7c8798,color:#1f2937; + classDef tool fill:#edf9f1,stroke:#46a36b,color:#173d25; + classDef terminal fill:#fff4e8,stroke:#d78a1d,color:#4d2f08; + class CONFIRM,STATE,LOOP,REJECT,POLICY,CONTINUE,FINAL agent; + class ASK,TURN,STOP,FACT,DONE,LIMIT decision; + class TOOL tool; + class LOOPERROR,RESPONSE,NOTE terminal; diff --git a/diagrams/workflow-builder-continuation-policy.png b/diagrams/workflow-builder-continuation-policy.png new file mode 100644 index 0000000000000000000000000000000000000000..31d7a2f6d44f20e53b034954a72c8b49c005b8ec GIT binary patch literal 550188 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�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 ~ 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 z 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否,模型自然结束用户确认 MermaidpreviewConfirmed = true AgentLoop 继续执行调用 ask_agent?AskValidator 拒绝确认后不得再次提问或暂停本轮是否调用工具?query / stage / validate /commit工具返回 stop = true?已产生哪种终止事实?进入无工具收尾 AgentCompletionPolicy读取运行时事实appliedWorkflow、terminalError cancelled 存在?注入 taskComplete=false要求继续同一任务达到WORKFLOW_MAX_RUN_TIMES?AgentLoop error根据结构化事实生成最终答10 次不是 AgentLoop总轮数10 次只用于同一Stage/Commit目标的修复预算 \ No newline at end of file diff --git a/diagrams/workflow-builder-current-architecture.excalidraw b/diagrams/workflow-builder-current-architecture.excalidraw index af4f2ea2585a..9e69dfaf2702 100644 --- a/diagrams/workflow-builder-current-architecture.excalidraw +++ b/diagrams/workflow-builder-current-architecture.excalidraw @@ -1 +1 @@ -{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"jrF4A1ZPp-3X2VRN18r5j","type":"rectangle","x":0,"y":318.37109375,"width":65.65625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":1827964959,"version":3,"versionNonce":675518097,"isDeleted":false,"boundElements":[{"type":"text","id":"Maduf2kCa_m7-oy520nKq"},{"id":"ZVELPHbGmzbyxPMIWO0xL","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"Lg6stHVMD7MKbCRduGh19","type":"rectangle","x":115.65625,"y":318.37109375,"width":315.484375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":1888406865,"version":5,"versionNonce":1767200625,"isDeleted":false,"boundElements":[{"type":"text","id":"Jq9MmmN6PajMh961hCupH"},{"id":"ZVELPHbGmzbyxPMIWO0xL","type":"arrow"},{"id":"bK99zuFTz47-EWVTAq43i","type":"arrow"},{"id":"LkF2bx57N7MK1Tv_ZmC3l","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"hew6LIv5UuSJRvuLkFUdK","type":"rectangle","x":481.140625,"y":248.5,"width":335.78125,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":1049373759,"version":5,"versionNonce":1603253713,"isDeleted":false,"boundElements":[{"type":"text","id":"7RGBCv1CZqUSD18nACqmA"},{"id":"bK99zuFTz47-EWVTAq43i","type":"arrow"},{"id":"CnMEDcNcbbdoC7dvG1UJW","type":"arrow"},{"id":"BjCtSCxuP6SKUdh3eb-Y-","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"Zf7pMX6c0bUNxWyzp9D9Z","type":"rectangle","x":875.9453125,"y":120.9921875,"width":251.765625,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":1623915313,"version":6,"versionNonce":1870140049,"isDeleted":false,"boundElements":[{"type":"text","id":"egKwUt6SFKxt-YhEKXU4w"},{"id":"CnMEDcNcbbdoC7dvG1UJW","type":"arrow"},{"id":"xqiB0lP4IF8kiqnNUwQWK","type":"arrow"},{"id":"YcbmoWOMDnsoqk0KzGXSu","type":"arrow"},{"id":"64GfX2wN3GPUhK0mJfQj1","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"DJ0Onw8NrS2V1tNAC2xbC","type":"rectangle","x":866.921875,"y":283.11328125,"width":269.8125,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":567954527,"version":3,"versionNonce":10146737,"isDeleted":false,"boundElements":[{"type":"text","id":"khRact1FvY2t0l-9x4wla"},{"id":"BjCtSCxuP6SKUdh3eb-Y-","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"D680c8IxgwFZfbP9an3S9","type":"rectangle","x":1186.734375,"y":0,"width":234.359375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":956722449,"version":4,"versionNonce":931882257,"isDeleted":false,"boundElements":[{"type":"text","id":"MSo9BR6uRf6t8YMehVeWX"},{"id":"xqiB0lP4IF8kiqnNUwQWK","type":"arrow"},{"id":"JSxxJQTUNlbt8a0iViqC-","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"cHykidLP3op7UMxWqqzRm","type":"rectangle","x":1188.0234375,"y":166.25,"width":231.78125,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":313485439,"version":4,"versionNonce":1343231185,"isDeleted":false,"boundElements":[{"type":"text","id":"deyKrkh0J1w9z1ijj4AVF"},{"id":"YcbmoWOMDnsoqk0KzGXSu","type":"arrow"},{"id":"j89WM0BZTk6x81E5PAbhB","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"PwLImBertAlcJEBwd9mec","type":"rectangle","x":1471.09375,"y":75.4921875,"width":349.9375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":1085842161,"version":7,"versionNonce":1460962129,"isDeleted":false,"boundElements":[{"type":"text","id":"Rhth9FhDmoCwtyOHwIEKh"},{"id":"JSxxJQTUNlbt8a0iViqC-","type":"arrow"},{"id":"j89WM0BZTk6x81E5PAbhB","type":"arrow"},{"id":"PV3I-AyJX-cY5Vi6fDTzk","type":"arrow"},{"id":"0jI_xXIO9jXZbzNyrxgpp","type":"arrow"},{"id":"kr9qvX-jwltkO3pe_NLMR","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"3gqmCry0y16WQAY0SUsY-","type":"rectangle","x":1871.03125,"y":23.25,"width":317.125,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":1053556895,"version":4,"versionNonce":1800053841,"isDeleted":false,"boundElements":[{"type":"text","id":"OKhQDlzzYlzsjA2SOhwvL"},{"id":"PV3I-AyJX-cY5Vi6fDTzk","type":"arrow"},{"id":"hgLv2leLChu27Sjp8GRVy","type":"arrow"}],"updated":1785228653159,"link":null,"locked":false},{"id":"nAWrOSIY5z6NpEUl8C13h","type":"rectangle","x":2238.15625,"y":28.25,"width":272.1875,"height":73,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":1684610257,"version":4,"versionNonce":2046329873,"isDeleted":false,"boundElements":[{"type":"text","id":"wOcyKvDoJO8oRtYirey-Q"},{"id":"hgLv2leLChu27Sjp8GRVy","type":"arrow"},{"id":"zxPRULzo8TMY15ClpuEZg","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"g7nwjHcoon3LTleRYBLTy","type":"rectangle","x":2585.671875,"y":28.25,"width":379.0625,"height":73,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":1205900479,"version":4,"versionNonce":50426833,"isDeleted":false,"boundElements":[{"type":"text","id":"KRjIcFEmxjWOysssc4jE8"},{"id":"zxPRULzo8TMY15ClpuEZg","type":"arrow"},{"id":"kKq-eDdNbN9V7VOjCzIOl","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"ayHv_SpE8brT_9A5WOex2","type":"rectangle","x":3014.734375,"y":41.12890625,"width":405.328125,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":330259121,"version":4,"versionNonce":1457615761,"isDeleted":false,"boundElements":[{"type":"text","id":"L7JBLPG7hvpX4k9HGOSxa"},{"id":"kKq-eDdNbN9V7VOjCzIOl","type":"arrow"},{"id":"0jI_xXIO9jXZbzNyrxgpp","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"jnDYux8DG2hWjwNspbnsC","type":"rectangle","x":1918.9921875,"y":199.12109375,"width":221.203125,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":1166910687,"version":4,"versionNonce":907453201,"isDeleted":false,"boundElements":[{"type":"text","id":"k6iUviORQUm-6OLUZ7uGl"},{"id":"kr9qvX-jwltkO3pe_NLMR","type":"arrow"},{"id":"qbviDTSIjX5XVQHP7fKuJ","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"1k7u5tWdURt2-8-5aj2fW","type":"diamond","x":2287.0078125,"y":191.62890625,"width":174.484375,"height":174.484375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":1597168785,"version":5,"versionNonce":63922769,"isDeleted":false,"boundElements":[{"type":"text","id":"R8XFD_QYsjrU2f-aIt97I"},{"id":"qbviDTSIjX5XVQHP7fKuJ","type":"arrow"},{"id":"64GfX2wN3GPUhK0mJfQj1","type":"arrow"},{"id":"ty7QqilHyTg3aZZymRK0r","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"nfOBkX1LEj8PSRuWbHxa8","type":"rectangle","x":2653.734375,"y":239.87109375,"width":242.9375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":123973887,"version":4,"versionNonce":1793442321,"isDeleted":false,"boundElements":[{"type":"text","id":"1k31OEZUyZ0nNvAoilD0Y"},{"id":"ty7QqilHyTg3aZZymRK0r","type":"arrow"},{"id":"XdwlmjohNMAB_JbRHCG7Z","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"A-NA0KuNeRUJgkJDQN_ls","type":"rectangle","x":3081.84375,"y":239.87109375,"width":271.109375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":null,"seed":1454056049,"version":4,"versionNonce":741814737,"isDeleted":false,"boundElements":[{"type":"text","id":"50CR22Y81GDLOK-AKph2L"},{"id":"XdwlmjohNMAB_JbRHCG7Z","type":"arrow"},{"id":"oXDZwUxjo4G3bqzuL576b","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"8sZEBjzoecQoCuzfJbV84","type":"rectangle","x":3470.0625,"y":343.75,"width":271.84375,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":null,"seed":383990047,"version":4,"versionNonce":541045137,"isDeleted":false,"boundElements":[{"type":"text","id":"iKZQB226Mi-zNVQGU6Jli"},{"id":"oXDZwUxjo4G3bqzuL576b","type":"arrow"},{"id":"LkF2bx57N7MK1Tv_ZmC3l","type":"arrow"}],"updated":1785228653160,"link":null,"locked":false},{"id":"ZVELPHbGmzbyxPMIWO0xL","type":"arrow","x":65.656,"y":342.871,"width":44.69999999999999,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":{"type":2},"seed":652192849,"version":4,"versionNonce":542349055,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999999,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"jrF4A1ZPp-3X2VRN18r5j","focus":-0.000003826530613766349,"gap":1},"endBinding":{"elementId":"Lg6stHVMD7MKbCRduGh19","focus":0.000003826530613389124,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"bK99zuFTz47-EWVTAq43i","type":"arrow","x":335.263,"y":318.371,"width":140.57800000000003,"height":47.87099999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":{"type":2},"seed":2038218047,"version":4,"versionNonce":1479222079,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[120.87800000000004,-47.87099999999998],[140.07800000000003,-47.87099999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"Lg6stHVMD7MKbCRduGh19","focus":-3.672551259526698e-7,"gap":1},"endBinding":{"elementId":"hew6LIv5UuSJRvuLkFUdK","focus":0,"gap":5.299624999999992},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"CnMEDcNcbbdoC7dvG1UJW","type":"arrow","x":687.432,"y":248.5,"width":183.21299999999997,"height":88.50800000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":{"type":2},"seed":2007497265,"version":4,"versionNonce":742170495,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[154.49,-88.50800000000001],[182.71299999999997,-88.50800000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"hew6LIv5UuSJRvuLkFUdK","focus":-3.515633759277487e-7,"gap":1},"endBinding":{"elementId":"Zf7pMX6c0bUNxWyzp9D9Z","focus":0.00000480769230743232,"gap":5.300312500000018},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"BjCtSCxuP6SKUdh3eb-Y-","type":"arrow","x":727.452,"y":292.5,"width":134.16999999999996,"height":32.113,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":{"type":2},"seed":848346463,"version":4,"versionNonce":1791757247,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[114.47000000000003,32.113],[133.66999999999996,32.113]],"lastCommittedPoint":null,"startBinding":{"elementId":"hew6LIv5UuSJRvuLkFUdK","focus":0.0000018275087522630768,"gap":1},"endBinding":{"elementId":"DJ0Onw8NrS2V1tNAC2xbC","focus":0.000006777108433237629,"gap":5.299875000000043},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"xqiB0lP4IF8kiqnNUwQWK","type":"arrow","x":1053.371,"y":120.992,"width":128.06299999999987,"height":81.992,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":{"type":2},"seed":166431761,"version":4,"versionNonce":555575295,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[108.36299999999983,-81.992],[127.56299999999987,-81.992]],"lastCommittedPoint":null,"startBinding":{"elementId":"Zf7pMX6c0bUNxWyzp9D9Z","focus":-0.000005080656910222277,"gap":1},"endBinding":{"elementId":"D680c8IxgwFZfbP9an3S9","focus":0,"gap":5.300375000000031},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"YcbmoWOMDnsoqk0KzGXSu","type":"arrow","x":1127.711,"y":195.62,"width":55.011999999999944,"height":9.629999999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":91208063,"version":4,"versionNonce":1534374975,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[34.02299999999991,9.629999999999995],[54.511999999999944,9.629999999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"Zf7pMX6c0bUNxWyzp9D9Z","focus":-0.00003427194708760437,"gap":1},"endBinding":{"elementId":"cHykidLP3op7UMxWqqzRm","focus":0,"gap":5.300437500000044},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"JSxxJQTUNlbt8a0iViqC-","type":"arrow","x":1421.094,"y":39,"width":116.70399999999995,"height":34.620000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":362930673,"version":4,"versionNonce":1695936639,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0.5],[25,0],[116.20399999999995,34.120000000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"D680c8IxgwFZfbP9an3S9","focus":0,"gap":1},"endBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":0.0000027084119707854352,"gap":1.8721874999999955},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"j89WM0BZTk6x81E5PAbhB","type":"arrow","x":1419.805,"y":205.25,"width":135.50199999999995,"height":49.56700000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":{"type":2},"seed":2002399647,"version":4,"versionNonce":138747071,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,-0.5],[26.288999999999987,0],[135.00199999999995,-49.06700000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"cHykidLP3op7UMxWqqzRm","focus":0,"gap":1},"endBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":-0.000007294864387017946,"gap":2.1908124999999927},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"PV3I-AyJX-cY5Vi6fDTzk","type":"arrow","x":1802.847,"y":75.492,"width":62.884000000000015,"height":10.742000000000004,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":1741847505,"version":4,"versionNonce":1313224959,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[43.18399999999997,-10.742000000000004],[62.384000000000015,-10.742000000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":-0.0000014024787680164616,"gap":1},"endBinding":{"elementId":"3gqmCry0y16WQAY0SUsY-","focus":0,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"hgLv2leLChu27Sjp8GRVy","type":"arrow","x":2188.156,"y":64.75,"width":44.70000000000027,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":293643711,"version":4,"versionNonce":1063077183,"isDeleted":false,"boundElements":null,"updated":1785228653159,"link":null,"locked":false,"points":[[0.5,0],[44.20000000000027,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"3gqmCry0y16WQAY0SUsY-","focus":0,"gap":1},"endBinding":{"elementId":"nAWrOSIY5z6NpEUl8C13h","focus":0,"gap":5.300249999999778},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"zxPRULzo8TMY15ClpuEZg","type":"arrow","x":2510.344,"y":64.75,"width":70.02799999999979,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":1083496881,"version":4,"versionNonce":583942527,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0],[37.66399999999976,0],[69.52799999999979,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"nAWrOSIY5z6NpEUl8C13h","focus":0,"gap":1},"endBinding":{"elementId":"g7nwjHcoon3LTleRYBLTy","focus":0,"gap":5.299875000000156},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kKq-eDdNbN9V7VOjCzIOl","type":"arrow","x":2964.734,"y":64.75,"width":44.71199999999999,"height":1.3319999999999936,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":1661179359,"version":4,"versionNonce":1054682559,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0.5],[44.21199999999999,0.8319999999999936]],"lastCommittedPoint":null,"startBinding":{"elementId":"g7nwjHcoon3LTleRYBLTy","focus":-0.13396799041945182,"gap":1},"endBinding":{"elementId":"ayHv_SpE8brT_9A5WOex2","focus":0.1743406383430122,"gap":5.288375000000087},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"0jI_xXIO9jXZbzNyrxgpp","type":"arrow","x":3072.131,"y":119.129,"width":1245.8469999999998,"height":22.120999999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":1896905617,"version":4,"versionNonce":416156159,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[-0.5,-0.5],[-82.39699999999993,22.120999999999995],[-296.9279999999999,22.120999999999995],[-524.123,22.120999999999995],[-697.8809999999999,22.120999999999995],[-858.9749999999999,22.120999999999995],[-1042.5369999999998,22.120999999999995],[-1245.3469999999998,19.979]],"lastCommittedPoint":null,"startBinding":{"elementId":"ayHv_SpE8brT_9A5WOex2","focus":-0.00000386400804687875,"gap":1},"endBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":0.5275476190052368,"gap":5.2527500000001055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kr9qvX-jwltkO3pe_NLMR","type":"arrow","x":1707.894,"y":153.492,"width":205.798,"height":87.12900000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":1123254783,"version":4,"versionNonce":887412287,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0],[138.13699999999994,87.12900000000002],[205.298,87.12900000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"PwLImBertAlcJEBwd9mec","focus":1.6276140467197388e-8,"gap":1},"endBinding":{"elementId":"jnDYux8DG2hWjwNspbnsC","focus":0.000002259036143916433,"gap":5.300187499999993},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"qbviDTSIjX5XVQHP7fKuJ","type":"arrow","x":2140.195,"y":240.621,"width":158.90099999999984,"height":20.765000000000015,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":964485489,"version":4,"versionNonce":1449497215,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0.5],[72.96099999999979,0],[158.40099999999984,20.265000000000015]],"lastCommittedPoint":null,"startBinding":{"elementId":"jnDYux8DG2hWjwNspbnsC","focus":-0.000002259036143916433,"gap":1},"endBinding":{"elementId":"1k7u5tWdURt2-8-5aj2fW","focus":-0.007722991704066925,"gap":4.352043364420972},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"64GfX2wN3GPUhK0mJfQj1","type":"arrow","x":2305.761,"y":297.624,"width":1261.589,"height":118.73400000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":1381034527,"version":4,"versionNonce":490475231,"isDeleted":false,"boundElements":[{"type":"text","id":"C6zfwL_Lf92L9wmhfmzRS"}],"updated":1785228653160,"link":null,"locked":false,"points":[[-0.5,-0.5],[-92.60500000000002,23.867999999999995],[-276.1669999999999,23.867999999999995],[-459.73,23.867999999999995],[-659.6979999999999,23.867999999999995],[-859.6669999999999,23.867999999999995],[-1001.847,23.867999999999995],[-1144.027,23.867999999999995],[-1261.089,-94.36600000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"1k7u5tWdURt2-8-5aj2fW","focus":-0.012615006732754107,"gap":1},"endBinding":{"elementId":"Zf7pMX6c0bUNxWyzp9D9Z","focus":-0.0000011880879308537412,"gap":3.7658125000000098},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"ty7QqilHyTg3aZZymRK0r","type":"arrow","x":2461.992,"y":279.371,"width":186.442,"height":0.5,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":1730251601,"version":4,"versionNonce":1829463871,"isDeleted":false,"boundElements":[{"type":"text","id":"QCjylscr862Vu9E7tPTjs"}],"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0],[86.01599999999962,-0.5],[185.942,-0.5]],"lastCommittedPoint":null,"startBinding":{"elementId":"1k7u5tWdURt2-8-5aj2fW","focus":0.01157627171043888,"gap":1},"endBinding":{"elementId":"nfOBkX1LEj8PSRuWbHxa8","focus":0.0000024038461548698115,"gap":5.3003749999998035},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"XdwlmjohNMAB_JbRHCG7Z","type":"arrow","x":2896.672,"y":278.871,"width":179.87199999999984,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":{"type":2},"seed":1040993855,"version":4,"versionNonce":1893458815,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0],[93.0619999999999,0],[179.37199999999984,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"nfOBkX1LEj8PSRuWbHxa8","focus":-0.0000024038461548698115,"gap":1},"endBinding":{"elementId":"A-NA0KuNeRUJgkJDQN_ls","focus":0.000002403846152426935,"gap":5.299750000000131},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"oXDZwUxjo4G3bqzuL576b","type":"arrow","x":3352.953,"y":278.871,"width":185.83199999999988,"height":61.95600000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":{"type":2},"seed":844495153,"version":4,"versionNonce":996822975,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[0.5,0.5],[92.11000000000013,0],[185.33199999999988,61.45600000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"A-NA0KuNeRUJgkJDQN_ls","focus":-0.000002403846152426935,"gap":1},"endBinding":{"elementId":"8sZEBjzoecQoCuzfJbV84","focus":6.440364486529198e-7,"gap":2.923000000000002},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"LkF2bx57N7MK1Tv_ZmC3l","type":"arrow","x":3470.063,"y":398.649,"width":3114.743,"height":32.132000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":{"type":2},"seed":1090924127,"version":4,"versionNonce":1241164799,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"points":[[-0.5,-0.5],[-25,2.4639999999999986],[-252.66499999999996,2.4639999999999986],[-480.3290000000002,2.4639999999999986],[-694.8600000000001,2.4639999999999986],[-922.0550000000003,2.4639999999999986],[-1095.813,2.4639999999999986],[-1256.9070000000002,2.4639999999999986],[-1440.469,2.4639999999999986],[-1624.0320000000002,2.4639999999999986],[-1824,2.4639999999999986],[-2023.969,2.4639999999999986],[-2166.1490000000003,2.4639999999999986],[-2308.329,2.4639999999999986],[-2468.235,2.4639999999999986],[-2628.141,2.4639999999999986],[-2821.032,2.4639999999999986],[-3013.922,2.4639999999999986],[-3114.243,-29.168000000000006]],"lastCommittedPoint":null,"startBinding":{"elementId":"8sZEBjzoecQoCuzfJbV84","focus":-0.000047166611473702,"gap":1},"endBinding":{"elementId":"Lg6stHVMD7MKbCRduGh19","focus":0.00001634393229482912,"gap":1.6099062499999945},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Maduf2kCa_m7-oy520nKq","type":"text","x":12.828125,"y":330.37109375,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":null,"seed":1058724031,"version":3,"versionNonce":48419871,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"用户","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jrF4A1ZPp-3X2VRN18r5j","originalText":"用户","autoResize":true,"lineHeight":1.25},{"id":"Jq9MmmN6PajMh961hCupH","type":"text","x":158.6474609375,"y":330.37109375,"width":229.501953125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":null,"seed":1692362975,"version":3,"versionNonce":813384017,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Workflow Builder 聊天窗口","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Lg6stHVMD7MKbCRduGh19","originalText":"Workflow Builder 聊天窗口","autoResize":true,"lineHeight":1.25},{"id":"7RGBCv1CZqUSD18nACqmA","type":"text","x":528.4501953125,"y":258,"width":241.162109375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":null,"seed":1608316159,"version":3,"versionNonce":416348223,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Pro Workflow Builder Runner","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"hew6LIv5UuSJRvuLkFUdK","originalText":"Pro Workflow Builder Runner","autoResize":true,"lineHeight":1.25},{"id":"egKwUt6SFKxt-YhEKXU4w","type":"text","x":902.2333984375,"y":134.9921875,"width":199.189453125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":null,"seed":395574559,"version":3,"versionNonce":1393094449,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Agent Loop Core
主\nAgent + AgentPlan","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Zf7pMX6c0bUNxWyzp9D9Z","originalText":"Agent Loop Core
主 Agent + AgentPlan","autoResize":true,"lineHeight":1.25},{"id":"khRact1FvY2t0l-9x4wla","type":"text","x":872.765625,"y":299.61328125,"width":258.125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":null,"seed":796197183,"version":3,"versionNonce":1906677855,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"研究 Sandbox
Skill / 文档 /\n用户文件","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"DJ0Onw8NrS2V1tNAC2xbC","originalText":"研究 Sandbox
Skill / 文档 / 用户文件","autoResize":true,"lineHeight":1.25},{"id":"MSo9BR6uRf6t8YMehVeWX","type":"text","x":1193.2060546875,"y":14,"width":221.416015625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":null,"seed":148930911,"version":3,"versionNonce":392552721,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"workflow_cli_query
只\n读查询","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"D680c8IxgwFZfbP9an3S9","originalText":"workflow_cli_query
只读查询","autoResize":true,"lineHeight":1.25},{"id":"deyKrkh0J1w9z1ijj4AVF","type":"text","x":1197.087890625,"y":180.25,"width":213.65234375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":null,"seed":86441343,"version":3,"versionNonce":1664169087,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"workflow_cli_apply
C\nhangeSet 提交","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"cHykidLP3op7UMxWqqzRm","originalText":"workflow_cli_apply
ChangeSet 提交","autoResize":true,"lineHeight":1.25},{"id":"Rhth9FhDmoCwtyOHwIEKh","type":"text","x":1476.7509765625,"y":89.4921875,"width":338.623046875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":null,"seed":126416287,"version":3,"versionNonce":185177841,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"CLI Gateway
白名单 / 参数校验 / 重\n试计数","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"PwLImBertAlcJEBwd9mec","originalText":"CLI Gateway
白名单 / 参数校验 / 重试计数","autoResize":true,"lineHeight":1.25},{"id":"OKhQDlzzYlzsjA2SOhwvL","type":"text","x":1922.484375,"y":39.75,"width":214.21875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":null,"seed":926345663,"version":3,"versionNonce":892619935,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"事务 Sandbox
隔离的\nworkflow.json + CLI","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"3gqmCry0y16WQAY0SUsY-","originalText":"事务 Sandbox
隔离的 workflow.json + CLI","autoResize":true,"lineHeight":1.25},{"id":"wOcyKvDoJO8oRtYirey-Q","type":"text","x":2256.8525390625,"y":39.75,"width":234.794921875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":null,"seed":22108639,"version":3,"versionNonce":544968913,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Workflow CLI
changeset\nplan / apply","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"nAWrOSIY5z6NpEUl8C13h","originalText":"Workflow CLI
changeset plan / apply","autoResize":true,"lineHeight":1.25},{"id":"KRjIcFEmxjWOysssc4jE8","type":"text","x":2607.5224609375,"y":39.75,"width":335.361328125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":null,"seed":1525204479,"version":3,"versionNonce":1667195071,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"Workflow Core
Schema / Command /\nValidation","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"g7nwjHcoon3LTleRYBLTy","originalText":"Workflow Core
Schema / Command / Validation","autoResize":true,"lineHeight":1.25},{"id":"L7JBLPG7hvpX4k9HGOSxa","type":"text","x":3047.212890625,"y":55.12890625,"width":340.37109375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":null,"seed":1123921439,"version":3,"versionNonce":223563441,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"WorkflowPlan
目标文档 / checksum /\ndiagnostics","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ayHv_SpE8brT_9A5WOex2","originalText":"WorkflowPlan
目标文档 / checksum / diagnostics","autoResize":true,"lineHeight":1.25},{"id":"k6iUviORQUm-6OLUZ7uGl","type":"text","x":1929.984375,"y":215.62109375,"width":199.21875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":75534911,"version":3,"versionNonce":525529311,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"服务端语义审查
无\n工具 Agent 回合","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jnDYux8DG2hWjwNspbnsC","originalText":"服务端语义审查
无工具 Agent 回合","autoResize":true,"lineHeight":1.25},{"id":"R8XFD_QYsjrU2f-aIt97I","type":"text","x":2344.12890625,"y":253.75,"width":60,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":944894559,"version":3,"versionNonce":1748521105,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"审查通\n过?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"1k7u5tWdURt2-8-5aj2fW","originalText":"审查通过?","autoResize":true,"lineHeight":1.25},{"id":"1k31OEZUyZ0nNvAoilD0Y","type":"text","x":2663.0595703125,"y":253.87109375,"width":224.287109375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":null,"seed":121785983,"version":3,"versionNonce":312442111,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"ApplyWorkflowPlan
再\n次校验并原子应用","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"nfOBkX1LEj8PSRuWbHxa8","originalText":"ApplyWorkflowPlan
再次校验并原子应用","autoResize":true,"lineHeight":1.25},{"id":"50CR22Y81GDLOK-AKph2L","type":"text","x":3096.3779296875,"y":253.87109375,"width":242.041015625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":null,"seed":739387039,"version":3,"versionNonce":115480177,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"WorkflowDocument
映射\n到实际画布 / 保存","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"A-NA0KuNeRUJgkJDQN_ls","originalText":"WorkflowDocument
映射到实际画布 / 保存","autoResize":true,"lineHeight":1.25},{"id":"iKZQB226Mi-zNVQGU6Jli","type":"text","x":3476.9365234375,"y":360.25,"width":258.095703125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":null,"seed":896662207,"version":3,"versionNonce":1623557407,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"最终无工具 Agent 回合
向\n用户报告完成或失败","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"8sZEBjzoecQoCuzfJbV84","originalText":"最终无工具 Agent 回合
向用户报告完成或失败","autoResize":true,"lineHeight":1.25},{"id":"C6zfwL_Lf92L9wmhfmzRS","type":"text","x":1636.063,"y":308.992,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"as","roundness":null,"seed":1043131039,"version":3,"versionNonce":471343185,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"64GfX2wN3GPUhK0mJfQj1","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"QCjylscr862Vu9E7tPTjs","type":"text","x":2538.008,"y":266.371,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"at","roundness":null,"seed":1907677951,"version":3,"versionNonce":1765116223,"isDeleted":false,"boundElements":null,"updated":1785228653160,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ty7QqilHyTg3aZZymRK0r","originalText":"是","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"3ySUZO1Nl7OqiDH1Y3hJp","type":"rectangle","x":0,"y":369.5,"width":65.65625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":1126071284,"version":3,"versionNonce":643618932,"isDeleted":false,"boundElements":[{"type":"text","id":"oMsWy8cXS9cCTA_ALlQ4J"},{"id":"-88FVDK4s-3aJn7PoCish","type":"arrow"}],"updated":1785841670333,"link":null,"locked":false},{"id":"hOWEZoo7x7JBSZDmW51H2","type":"rectangle","x":115.65625,"y":355,"width":321.171875,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":1628335436,"version":7,"versionNonce":1786165492,"isDeleted":false,"boundElements":[{"type":"text","id":"n3kaMcSTvfcjP5fA17h2o"},{"id":"-88FVDK4s-3aJn7PoCish","type":"arrow"},{"id":"xIZ_PJcOoA0tAMS2T4rba","type":"arrow"},{"id":"rKRI50fdN6yCdVl0gEJNP","type":"arrow"},{"id":"CXE-9LTVEv-pNbwogtA7l","type":"arrow"},{"id":"GHyPJpdXhUZ507s5wma7c","type":"arrow"}],"updated":1785841670334,"link":null,"locked":false},{"id":"onOZjy5I212HVfnuhIkJQ","type":"rectangle","x":486.828125,"y":210,"width":296.265625,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":1330830708,"version":7,"versionNonce":609654644,"isDeleted":false,"boundElements":[{"type":"text","id":"GP5xhKxllV2Jie2IXm2RN"},{"id":"xIZ_PJcOoA0tAMS2T4rba","type":"arrow"},{"id":"xSX8qFDD1TMiR9Gk6_H_h","type":"arrow"},{"id":"CDpfpf2PcGwrqqJrbHxTg","type":"arrow"},{"id":"-oH_UOkkh0unESrO98CCG","type":"arrow"},{"id":"Wfx-m57OjDs4z_pSvqOOU","type":"arrow"}],"updated":1785841670333,"link":null,"locked":false},{"id":"YZMF52s49FwLI8xHTto0K","type":"rectangle","x":116.7890625,"y":200,"width":318.90625,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":703259596,"version":3,"versionNonce":1711472244,"isDeleted":false,"boundElements":[{"type":"text","id":"f1yS1UT_4JrnRbLR5rqTF"},{"id":"xSX8qFDD1TMiR9Gk6_H_h","type":"arrow"}],"updated":1785841670333,"link":null,"locked":false},{"id":"KS0Em7BIhWJss3OzsYXI2","type":"rectangle","x":131.5078125,"y":72,"width":289.46875,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":1769934580,"version":3,"versionNonce":302313844,"isDeleted":false,"boundElements":[{"type":"text","id":"k-6QLJMzfHQ8S5ssThT-u"},{"id":"CDpfpf2PcGwrqqJrbHxTg","type":"arrow"}],"updated":1785841670333,"link":null,"locked":false},{"id":"qDZyl21Apt37pVdQ49cst","type":"rectangle","x":833.09375,"y":0,"width":402.78125,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":1022659148,"version":3,"versionNonce":210859508,"isDeleted":false,"boundElements":[{"type":"text","id":"ot5gvF5olio-tVoYZRi4Y"},{"id":"-oH_UOkkh0unESrO98CCG","type":"arrow"}],"updated":1785841670333,"link":null,"locked":false},{"id":"_T0bCMrjGo9vGcF5gMbXd","type":"rectangle","x":849.703125,"y":491.75,"width":369.5625,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":573116532,"version":9,"versionNonce":1080152820,"isDeleted":false,"boundElements":[{"type":"text","id":"mtBUiKelw1jXccaN9JR0A"},{"id":"Wfx-m57OjDs4z_pSvqOOU","type":"arrow"},{"id":"Cm2GlQUfzWE1P1cU08_Qb","type":"arrow"},{"id":"H6mz59K3gUafRdhwf4VqN","type":"arrow"},{"id":"8IhjVA5p3pbT57Q6n-twT","type":"arrow"},{"id":"QMjHXy9W6KPNeCcamalXM","type":"arrow"},{"id":"7J5dkP74S-v4m9WS9ydUJ","type":"arrow"},{"id":"UOKbDtypO705lZ4D77Jzi","type":"arrow"}],"updated":1785841670334,"link":null,"locked":false},{"id":"N2zY5YyUAiCbvFKZiSf0x","type":"rectangle","x":1512.03125,"y":89,"width":242.9375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":1023762636,"version":4,"versionNonce":631586164,"isDeleted":false,"boundElements":[{"type":"text","id":"en4QA0F561dtD0xgmUbwj"},{"id":"Cm2GlQUfzWE1P1cU08_Qb","type":"arrow"},{"id":"rKRI50fdN6yCdVl0gEJNP","type":"arrow"}],"updated":1785841670333,"link":null,"locked":false},{"id":"2lF2LtpXfHdVtVlmFP8AS","type":"rectangle","x":1428.40625,"y":363.75,"width":410.1875,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":152494580,"version":4,"versionNonce":795927412,"isDeleted":false,"boundElements":[{"type":"text","id":"7vjLQPKtP2FlIUUL3yAWC"},{"id":"H6mz59K3gUafRdhwf4VqN","type":"arrow"},{"id":"CXE-9LTVEv-pNbwogtA7l","type":"arrow"}],"updated":1785841670333,"link":null,"locked":false},{"id":"_JJog6SNS24OYieJJjKS4","type":"rectangle","x":1494.34375,"y":649.75,"width":278.3125,"height":85,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":1639409484,"version":7,"versionNonce":910744052,"isDeleted":false,"boundElements":[{"type":"text","id":"tmR-OP6TNELGni-ItMMBi"},{"id":"8IhjVA5p3pbT57Q6n-twT","type":"arrow"},{"id":"9vmUbi782pSbc9gGvChVW","type":"arrow"},{"id":"UMBuwW3nSfi3amp7TZJ1F","type":"arrow"},{"id":"KmdSkPsawm1TNoDYVMUFs","type":"arrow"}],"updated":1785841670334,"link":null,"locked":false},{"id":"4tgWybx7CWiPBm5MKMhWu","type":"rectangle","x":2054.2890625,"y":647.25,"width":256.6875,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":1162773364,"version":4,"versionNonce":223657076,"isDeleted":false,"boundElements":[{"type":"text","id":"Hbw7au9jLAjnXwk9czIIv"},{"id":"9vmUbi782pSbc9gGvChVW","type":"arrow"},{"id":"5MM4envjsm-mfbJYzIB6M","type":"arrow"}],"updated":1785841670333,"link":null,"locked":false},{"id":"XEhd9qyv1v9w6UEstZzTi","type":"rectangle","x":2403.1875,"y":484.5,"width":428.296875,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":1600429516,"version":5,"versionNonce":1052890484,"isDeleted":false,"boundElements":[{"type":"text","id":"tfZT7D-ubgoMxAMjXhhXL"},{"id":"5MM4envjsm-mfbJYzIB6M","type":"arrow"},{"id":"QMjHXy9W6KPNeCcamalXM","type":"arrow"},{"id":"UMBuwW3nSfi3amp7TZJ1F","type":"arrow"}],"updated":1785841670334,"link":null,"locked":false},{"id":"SoK8VGIVaMzmBTC0NmIcR","type":"rectangle","x":2012.078125,"y":795.25,"width":341.109375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":756413684,"version":4,"versionNonce":403919988,"isDeleted":false,"boundElements":[{"type":"text","id":"huohNsyA0_WhmGl-eIQ-u"},{"id":"KmdSkPsawm1TNoDYVMUFs","type":"arrow"},{"id":"mxXgUaSScnUqnoLFt_GTw","type":"arrow"}],"updated":1785841670334,"link":null,"locked":false},{"id":"mtgFxWvCjD47lSV-l3jb4","type":"rectangle","x":1499.375,"y":521.75,"width":268.25,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":1327957068,"version":4,"versionNonce":1547575668,"isDeleted":false,"boundElements":[{"type":"text","id":"DTNXZanlV9GmDoyv-BRim"},{"id":"7J5dkP74S-v4m9WS9ydUJ","type":"arrow"},{"id":"UOKbDtypO705lZ4D77Jzi","type":"arrow"}],"updated":1785841670334,"link":null,"locked":false},{"id":"PnBLM0f0ZAj_WmCgcqacC","type":"rectangle","x":2483.2109375,"y":748.5,"width":268.25,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":1576220276,"version":4,"versionNonce":813156212,"isDeleted":false,"boundElements":[{"type":"text","id":"NPZ-rwRn_zRmZRekG6kGs"},{"id":"mxXgUaSScnUqnoLFt_GTw","type":"arrow"},{"id":"GHyPJpdXhUZ507s5wma7c","type":"arrow"}],"updated":1785841670334,"link":null,"locked":false},{"id":"-88FVDK4s-3aJn7PoCish","type":"arrow","x":65.656,"y":394,"width":44.69999999999999,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":{"type":2},"seed":383294156,"version":4,"versionNonce":483530956,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999999,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"3ySUZO1Nl7OqiDH1Y3hJp","focus":0,"gap":1},"endBinding":{"elementId":"hOWEZoo7x7JBSZDmW51H2","focus":0,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"xIZ_PJcOoA0tAMS2T4rba","type":"arrow","x":436.828,"y":360.903,"width":130.36900000000003,"height":70.12100000000004,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":{"type":2},"seed":1420576756,"version":4,"versionNonce":1298355660,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,-0.5],[25,-5.15300000000002],[129.86900000000003,-69.62100000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"hOWEZoo7x7JBSZDmW51H2","focus":0.00004088312879434191,"gap":1},"endBinding":{"elementId":"onOZjy5I212HVfnuhIkJQ","focus":-0.0000029174741661442604,"gap":2.7819999999999823},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"xSX8qFDD1TMiR9Gk6_H_h","type":"arrow","x":410.276,"y":278,"width":71.41499999999996,"height":15,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":{"type":2},"seed":1360224588,"version":4,"versionNonce":780751564,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,-0.5],[51.551999999999964,15],[70.91499999999996,10.451999999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"YZMF52s49FwLI8xHTto0K","focus":0.0000047276156552592344,"gap":1},"endBinding":{"elementId":"onOZjy5I212HVfnuhIkJQ","focus":0.0000020155259051842367,"gap":5.137125000000026},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"CDpfpf2PcGwrqqJrbHxTg","type":"arrow","x":415.365,"y":151.481,"width":134.44399999999996,"height":56.20500000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":{"type":2},"seed":88549748,"version":4,"versionNonce":840175564,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,0.5],[46.462999999999965,13.519000000000005],[133.94399999999996,55.70500000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"KS0Em7BIhWJss3OzsYXI2","focus":0.00001788426689543824,"gap":1.4809999999999945},"endBinding":{"elementId":"onOZjy5I212HVfnuhIkJQ","focus":0.000005272449203355595,"gap":2.313999999999993},"startArrowhead":"arrow","endArrowhead":"arrow","elbowed":false},{"id":"-oH_UOkkh0unESrO98CCG","type":"arrow","x":667.502,"y":210,"width":160.29200000000003,"height":168.5,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":{"type":2},"seed":892426188,"version":4,"versionNonce":366185676,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,0],[140.5920000000001,-168.5],[159.79200000000003,-168.5]],"lastCommittedPoint":null,"startBinding":{"elementId":"onOZjy5I212HVfnuhIkJQ","focus":0.000002661695865087578,"gap":1},"endBinding":{"elementId":"qDZyl21Apt37pVdQ49cst","focus":0,"gap":5.299750000000017},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Wfx-m57OjDs4z_pSvqOOU","type":"arrow","x":658.926,"y":288,"width":185.47699999999998,"height":242.75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":{"type":2},"seed":1930025716,"version":4,"versionNonce":1670891980,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,0],[149.168,242.75],[184.97699999999998,242.75]],"lastCommittedPoint":null,"startBinding":{"elementId":"onOZjy5I212HVfnuhIkJQ","focus":7.917823078755453e-7,"gap":1},"endBinding":{"elementId":"_T0bCMrjGo9vGcF5gMbXd","focus":0,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Cm2GlQUfzWE1P1cU08_Qb","type":"arrow","x":1081.105,"y":491.75,"width":471.23199999999997,"height":322.341,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":{"type":2},"seed":2135719500,"version":4,"versionNonce":1899022028,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,-0.5],[251.03600000000006,-210],[470.73199999999997,-321.841]],"lastCommittedPoint":null,"startBinding":{"elementId":"_T0bCMrjGo9vGcF5gMbXd","focus":-0.0000014970840344245436,"gap":1},"endBinding":{"elementId":"N2zY5YyUAiCbvFKZiSf0x","focus":-0.000007357389654609659,"gap":2.408999999999992},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"rKRI50fdN6yCdVl0gEJNP","type":"arrow","x":1512.031,"y":123.969,"width":1206.607,"height":232.60199999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":1215978612,"version":4,"versionNonce":1617855436,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[-0.5,0.5],[-179.88999999999987,-5.968999999999994],[-477.547,-5.968999999999994],[-703.9369999999999,-5.968999999999994],[-877.0699999999999,-5.968999999999994],[-1050.203,-5.968999999999994],[-1206.107,226.13299999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"N2zY5YyUAiCbvFKZiSf0x","focus":0.000011385062255986738,"gap":1},"endBinding":{"elementId":"hOWEZoo7x7JBSZDmW51H2","focus":0.000002926402771303187,"gap":4.398000000000025},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"H6mz59K3gUafRdhwf4VqN","type":"arrow","x":1162.051,"y":491.75,"width":261.095,"height":63.173,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":1480512716,"version":4,"versionNonce":522256588,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,-0.5],[170.09000000000015,-52],[260.595,-62.673]],"lastCommittedPoint":null,"startBinding":{"elementId":"_T0bCMrjGo9vGcF5gMbXd","focus":-0.0000028013558564267364,"gap":1},"endBinding":{"elementId":"2lF2LtpXfHdVtVlmFP8AS","focus":-0.000017274106011736578,"gap":5.260250000000042},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"CXE-9LTVEv-pNbwogtA7l","type":"arrow","x":1428.406,"y":395.944,"width":986.278,"height":3.194000000000017,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":{"type":2},"seed":1868475892,"version":4,"versionNonce":1729641932,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[-0.5,0.5],[-96.26499999999987,-3.194000000000017],[-393.922,-3.194000000000017],[-620.3119999999999,-3.194000000000017],[-793.4449999999999,-3.194000000000017],[-985.778,-3.5610000000000355]],"lastCommittedPoint":null,"startBinding":{"elementId":"2lF2LtpXfHdVtVlmFP8AS","focus":0.0000248001746123567,"gap":1},"endBinding":{"elementId":"hOWEZoo7x7JBSZDmW51H2","focus":-0.025634529712547455,"gap":5.299874999999929},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"8IhjVA5p3pbT57Q6n-twT","type":"arrow","x":1109.138,"y":569.75,"width":379.9060000000002,"height":116.5,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":1034050380,"version":4,"versionNonce":1042561740,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,0],[223.00300000000016,116.5],[379.4060000000002,116.5]],"lastCommittedPoint":null,"startBinding":{"elementId":"_T0bCMrjGo9vGcF5gMbXd","focus":-0.0000010029237353259137,"gap":1},"endBinding":{"elementId":"_JJog6SNS24OYieJJjKS4","focus":0.14117647058823518,"gap":5.299749999999904},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"9vmUbi782pSbc9gGvChVW","type":"arrow","x":1772.656,"y":686.25,"width":276.3330000000001,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":683462516,"version":4,"versionNonce":1981085644,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,0],[152.68000000000006,0],[275.8330000000001,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"_JJog6SNS24OYieJJjKS4","focus":-0.14117647058823518,"gap":1},"endBinding":{"elementId":"4tgWybx7CWiPBm5MKMhWu","focus":0,"gap":5.300062499999967},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"5MM4envjsm-mfbJYzIB6M","type":"arrow","x":2310.977,"y":686.25,"width":244.67000000000007,"height":120.76800000000003,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":1775309260,"version":4,"versionNonce":750417100,"isDeleted":false,"boundElements":null,"updated":1785841670333,"link":null,"locked":false,"points":[[0.5,-0.5],[67.21100000000024,0],[244.17000000000007,-120.26800000000003]],"lastCommittedPoint":null,"startBinding":{"elementId":"4tgWybx7CWiPBm5MKMhWu","focus":0,"gap":1},"endBinding":{"elementId":"XEhd9qyv1v9w6UEstZzTi","focus":-0.0000010412046806714736,"gap":2.981999999999971},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"QMjHXy9W6KPNeCcamalXM","type":"arrow","x":2403.188,"y":490.592,"width":1178.679,"height":15.910000000000025,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":618316020,"version":4,"versionNonce":1518639180,"isDeleted":false,"boundElements":[{"type":"text","id":"pji5ZlYG8QZUnor5xCZWD"}],"updated":1785841670333,"link":null,"locked":false,"points":[[-0.5,0.5],[-25,-3.8419999999999845],[-220.5550000000003,-3.8419999999999845],[-477.8520000000001,-3.8419999999999845],[-769.6880000000001,-3.8419999999999845],[-1071.047,-3.8419999999999845],[-1178.179,11.56800000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"XEhd9qyv1v9w6UEstZzTi","focus":-0.00003135898474078837,"gap":1},"endBinding":{"elementId":"_T0bCMrjGo9vGcF5gMbXd","focus":-0.0000127630156563894,"gap":5.2433750000000146},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"UMBuwW3nSfi3amp7TZJ1F","type":"arrow","x":2486.434,"y":484.5,"width":803.2780000000002,"height":194.18499999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":1004861516,"version":4,"versionNonce":1728539596,"isDeleted":false,"boundElements":[{"type":"text","id":"7_dHcWut2TzdWMQWzg0ks"}],"updated":1785841670334,"link":null,"locked":false,"points":[[-0.5,0.5],[-108.2460000000001,-32.25],[-303.8010000000004,-32.25],[-561.0980000000002,-32.25],[-802.7780000000002,161.43499999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"XEhd9qyv1v9w6UEstZzTi","focus":5.855225213466973e-7,"gap":1},"endBinding":{"elementId":"_JJog6SNS24OYieJJjKS4","focus":-0.0389397768317054,"gap":3.3150000000000546},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"KmdSkPsawm1TNoDYVMUFs","type":"arrow","x":1713.29,"y":722.75,"width":293.48800000000006,"height":97,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":457081460,"version":4,"versionNonce":1388375884,"isDeleted":false,"boundElements":[{"type":"text","id":"Gm1wifFl-0tCDJSa3ns9i"}],"updated":1785841670334,"link":null,"locked":false,"points":[[0.5,0],[212.04600000000005,97],[292.98800000000006,97]],"lastCommittedPoint":null,"startBinding":{"elementId":"_JJog6SNS24OYieJJjKS4","focus":-0.05651802365037068,"gap":12},"endBinding":{"elementId":"SoK8VGIVaMzmBTC0NmIcR","focus":0,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"7J5dkP74S-v4m9WS9ydUJ","type":"arrow","x":1174.769,"y":569.75,"width":319.385,"height":43.75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":532156108,"version":4,"versionNonce":560893004,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"points":[[0.5,-0.5],[157.37200000000007,43.75],[318.885,15.890999999999963]],"lastCommittedPoint":null,"startBinding":{"elementId":"_T0bCMrjGo9vGcF5gMbXd","focus":0.000003913477163626315,"gap":1},"endBinding":{"elementId":"mtgFxWvCjD47lSV-l3jb4","focus":0.0000053477727459747464,"gap":5.221000000000004},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"UOKbDtypO705lZ4D77Jzi","type":"arrow","x":1499.375,"y":552.516,"width":274.8130000000001,"height":14.421999999999912,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":1655575540,"version":4,"versionNonce":658890700,"isDeleted":false,"boundElements":[{"type":"text","id":"iSMpTP4k7mYYZyNmg3uw1"}],"updated":1785841670334,"link":null,"locked":false,"points":[[-0.5,-0.5],[-167.23399999999992,-10.265999999999963],[-274.3130000000001,-13.921999999999912]],"lastCommittedPoint":null,"startBinding":{"elementId":"mtgFxWvCjD47lSV-l3jb4","focus":0.00000981206196926222,"gap":1},"endBinding":{"elementId":"_T0bCMrjGo9vGcF5gMbXd","focus":0.000019656668372056823,"gap":5.296374999999898},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"mxXgUaSScnUqnoLFt_GTw","type":"arrow","x":2353.188,"y":819.75,"width":124.76299999999992,"height":12.410999999999945,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":1977898316,"version":4,"versionNonce":617700556,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"points":[[0.5,-0.5],[25,0],[124.26299999999992,-11.910999999999945]],"lastCommittedPoint":null,"startBinding":{"elementId":"SoK8VGIVaMzmBTC0NmIcR","focus":0,"gap":1},"endBinding":{"elementId":"PnBLM0f0ZAj_WmCgcqacC","focus":0.000019949440892772447,"gap":5.259937499999978},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"GHyPJpdXhUZ507s5wma7c","type":"arrow","x":2483.211,"y":773.315,"width":2184.8109999999997,"height":335.58700000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":{"type":2},"seed":154105204,"version":4,"versionNonce":157391308,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"points":[[-0.5,-0.5],[-105.02299999999968,-13.065000000000055],[-300.578,-13.065000000000055],[-557.8749999999998,-13.065000000000055],[-849.7109999999998,-13.065000000000055],[-1151.0699999999997,-13.065000000000055],[-1448.7269999999999,-13.065000000000055],[-1675.1169999999997,-13.065000000000055],[-1848.2499999999998,-13.065000000000055],[-2021.3829999999998,-13.065000000000055],[-2184.3109999999997,-335.08700000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"PnBLM0f0ZAj_WmCgcqacC","focus":-0.000005490844171047543,"gap":1},"endBinding":{"elementId":"hOWEZoo7x7JBSZDmW51H2","focus":-4.1589883216483056e-8,"gap":4.728000000000009},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"oMsWy8cXS9cCTA_ALlQ4J","type":"text","x":12.828125,"y":381.5,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":null,"seed":824590452,"version":3,"versionNonce":673480780,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"用户","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"3ySUZO1Nl7OqiDH1Y3hJp","originalText":"用户","autoResize":true,"lineHeight":1.25},{"id":"n3kaMcSTvfcjP5fA17h2o","type":"text","x":131.330078125,"y":369,"width":289.82421875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":null,"seed":552473076,"version":3,"versionNonce":983267956,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"Workflow Builder UI
消息、计\n划、Mermaid 交互","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"hOWEZoo7x7JBSZDmW51H2","originalText":"Workflow Builder UI
消息、计划、Mermaid 交互","autoResize":true,"lineHeight":1.25},{"id":"GP5xhKxllV2Jie2IXm2RN","type":"text","x":493.4326171875,"y":224,"width":283.056640625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":null,"seed":985641844,"version":3,"versionNonce":1791399628,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"Builder Handler / Runner
任务\n编排与状态恢复","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"onOZjy5I212HVfnuhIkJQ","originalText":"Builder Handler / Runner
任务编排与状态恢复","autoResize":true,"lineHeight":1.25},{"id":"f1yS1UT_4JrnRbLR5rqTF","type":"text","x":126.6328125,"y":214,"width":299.21875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":null,"seed":1021388020,"version":3,"versionNonce":2074872820,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"Builder Prompt Policy
角色、生\n命周期、交互约束","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"YZMF52s49FwLI8xHTto0K","originalText":"Builder Prompt Policy
角色、生命周期、交互约束","autoResize":true,"lineHeight":1.25},{"id":"k-6QLJMzfHQ8S5ssThT-u","type":"text","x":137.482421875,"y":86,"width":277.51953125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":null,"seed":752379508,"version":3,"versionNonce":1843518796,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"Provider State / Memory
暂停\n与恢复","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"KS0Em7BIhWJss3OzsYXI2","originalText":"Provider State / Memory
暂停与恢复","autoResize":true,"lineHeight":1.25},{"id":"ot5gvF5olio-tVoYZRi4Y","type":"text","x":865.3388671875,"y":16.5,"width":338.291015625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":null,"seed":1869314036,"version":3,"versionNonce":1068395892,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"单物理 Sandbox
共享 Skill 根目录 +\nsessions/chatId","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"qDZyl21Apt37pVdQ49cst","originalText":"单物理 Sandbox
共享 Skill 根目录 + sessions/chatId","autoResize":true,"lineHeight":1.25},{"id":"mtBUiKelw1jXccaN9JR0A","type":"text","x":867.3896484375,"y":505.75,"width":334.189453125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":null,"seed":1621121396,"version":3,"versionNonce":718296012,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"AgentLoop Core
模型循环、工具调\n用、事件收集","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"_T0bCMrjGo9vGcF5gMbXd","originalText":"AgentLoop Core
模型循环、工具调用、事件收集","autoResize":true,"lineHeight":1.25},{"id":"en4QA0F561dtD0xgmUbwj","type":"text","x":1523.9052734375,"y":103,"width":219.189453125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":null,"seed":1807551220,"version":3,"versionNonce":1743298292,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"ask_agent
一次性闭合\n业务需求","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"N2zY5YyUAiCbvFKZiSf0x","originalText":"ask_agent
一次性闭合业务需求","autoResize":true,"lineHeight":1.25},{"id":"7vjLQPKtP2FlIUUL3yAWC","type":"text","x":1451.146484375,"y":377.75,"width":364.70703125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":null,"seed":591891572,"version":3,"versionNonce":1605106252,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"workflow_builder_present_preview
完整\nMermaid + 自由章节","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"2lF2LtpXfHdVtVlmFP8AS","originalText":"workflow_builder_present_preview
完整 Mermaid + 自由章节","autoResize":true,"lineHeight":1.25},{"id":"tmR-OP6TNELGni-ItMMBi","type":"text","x":1521.9814453125,"y":654.75,"width":223.037109375,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":null,"seed":1493556724,"version":3,"versionNonce":1021354100,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"Workflow CLI\nGateway
query / stage /\ncommit","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"_JJog6SNS24OYieJJjKS4","originalText":"Workflow CLI Gateway
query / stage / commit","autoResize":true,"lineHeight":1.25},{"id":"Hbw7au9jLAjnXwk9czIIv","type":"text","x":2064.4150390625,"y":661.25,"width":236.435546875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":null,"seed":813359564,"version":3,"versionNonce":2001653964,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"Chunk Session / Draft
私\n有草稿与 revision","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"4tgWybx7CWiPBm5MKMhWu","originalText":"Chunk Session / Draft
私有草稿与 revision","autoResize":true,"lineHeight":1.25},{"id":"tfZT7D-ubgoMxAMjXhhXL","type":"text","x":2413.8251953125,"y":498.5,"width":407.021484375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":null,"seed":752142412,"version":3,"versionNonce":106721780,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"Workflow Core
Schema、IO、引用、边、必\n填项校验","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"XEhd9qyv1v9w6UEstZzTi","originalText":"Workflow Core
Schema、IO、引用、边、必填项校验","autoResize":true,"lineHeight":1.25},{"id":"huohNsyA0_WhmGl-eIQ-u","type":"text","x":2058.7216796875,"y":807.25,"width":247.822265625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":null,"seed":36560588,"version":3,"versionNonce":1901254476,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"当前画布 WorkflowDocument","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"SoK8VGIVaMzmBTC0NmIcR","originalText":"当前画布 WorkflowDocument","autoResize":true,"lineHeight":1.25},{"id":"DTNXZanlV9GmDoyv-BRim","type":"text","x":1511.1123046875,"y":535.75,"width":244.775390625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":null,"seed":689972556,"version":3,"versionNonce":593630068,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"CompletionPolicy
只读取\n结构化终止事实","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"mtgFxWvCjD47lSV-l3jb4","originalText":"CompletionPolicy
只读取结构化终止事实","autoResize":true,"lineHeight":1.25},{"id":"NPZ-rwRn_zRmZRekG6kGs","type":"text","x":2490.7880859375,"y":765,"width":253.095703125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":1996856268,"version":3,"versionNonce":1242697164,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"独立无工具收尾 Agent
根\n据权威事实生成答复","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"PnBLM0f0ZAj_WmCgcqacC","originalText":"独立无工具收尾 Agent
根据权威事实生成答复","autoResize":true,"lineHeight":1.25},{"id":"pji5ZlYG8QZUnor5xCZWD","type":"text","x":1880.3408828125,"y":474.25,"width":89.990234375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":1101658956,"version":3,"versionNonce":574063860,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"diagnostics","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"QMjHXy9W6KPNeCcamalXM","originalText":"diagnostics","autoResize":true,"lineHeight":1.25},{"id":"7_dHcWut2TzdWMQWzg0ks","type":"text","x":2097.564640625,"y":439.75,"width":170.13671875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":null,"seed":157527756,"version":3,"versionNonce":1655075916,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"valid + draftRevision","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"UMBuwW3nSfi3amp7TZJ1F","originalText":"valid + draftRevision","autoResize":true,"lineHeight":1.25},{"id":"Gm1wifFl-0tCDJSa3ns9i","type":"text","x":1885.336,"y":807.25,"width":80,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":null,"seed":893391436,"version":3,"versionNonce":1482868340,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"原子应用","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"KmdSkPsawm1TNoDYVMUFs","originalText":"原子应用","autoResize":true,"lineHeight":1.25},{"id":"iSMpTP4k7mYYZyNmg3uw1","type":"text","x":1279.0892421875,"y":529.75,"width":106.103515625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":null,"seed":1190077132,"version":3,"versionNonce":1760168652,"isDeleted":false,"boundElements":null,"updated":1785841670334,"link":null,"locked":false,"text":"尚未 commit","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"UOKbDtypO705lZ4D77Jzi","originalText":"尚未 commit","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/workflow-builder-current-architecture.mmd b/diagrams/workflow-builder-current-architecture.mmd index 11d538e573c0..bd58c537284c 100644 --- a/diagrams/workflow-builder-current-architecture.mmd +++ b/diagrams/workflow-builder-current-architecture.mmd @@ -1,37 +1,37 @@ -%% 当前 Workflow Builder 实际架构 -graph LR - U[用户] --> UI[Workflow Builder 聊天窗口] - UI --> R[Pro Workflow Builder Runner] +%% Workflow Builder 当前模块架构 +flowchart LR + U["用户"] --> UI["Workflow Builder UI
消息、计划、Mermaid 交互"] + UI --> R["Builder Handler / Runner
任务编排与状态恢复"] - R --> L[Agent Loop Core
主 Agent + AgentPlan] - R --> S[研究 Sandbox
Skill / 文档 / 用户文件] - L --> Q[workflow_cli_query
只读查询] - L --> A[workflow_cli_apply
ChangeSet 提交] + P["Builder Prompt Policy
角色、生命周期、交互约束"] --> R + M["Provider State / Memory
暂停与恢复"] <--> R + R --> S["单物理 Sandbox
共享 Skill 根目录 + sessions/chatId"] + R --> L["AgentLoop Core
模型循环、工具调用、事件收集"] - Q --> G[CLI Gateway
白名单 / 参数校验 / 重试计数] - A --> G - G --> T[事务 Sandbox
隔离的 workflow.json + CLI] - T --> C[Workflow CLI
changeset plan / apply] - C --> W[Workflow Core
Schema / Command / Validation] + L --> A["ask_agent
一次性闭合业务需求"] + A --> UI + L --> PV["workflow_builder_present_preview
完整 Mermaid + 自由章节"] + PV --> UI + L --> G["Workflow CLI Gateway
query / stage / commit"] + G --> D["Chunk Session / Draft
私有草稿与 revision"] + D --> C["Workflow Core
Schema、IO、引用、边、必填项校验"] + C -->|"diagnostics"| L + C -->|"valid + draftRevision"| G + G -->|"原子应用"| W["当前画布 WorkflowDocument"] - W --> P[WorkflowPlan
目标文档 / checksum / diagnostics] - P --> G - G --> V[服务端语义审查
无工具 Agent 回合] - V --> X{审查通过?} - X -->|否| L - X -->|是| D[ApplyWorkflowPlan
再次校验并原子应用] - D --> CANVAS[WorkflowDocument
映射到实际画布 / 保存] - CANVAS --> F[最终无工具 Agent 回合
向用户报告完成或失败] + L --> CP["CompletionPolicy
只读取结构化终止事实"] + CP -->|"尚未 commit"| L + W --> F["独立无工具收尾 Agent
根据权威事实生成答复"] F --> UI classDef user fill:#e8f1ff,stroke:#2f7df6,color:#102a56; - classDef agent fill:#fff4dc,stroke:#d88a00,color:#4d3000; - classDef boundary fill:#e9f8ef,stroke:#2f9e5b,color:#123d24; - classDef core fill:#f1eaff,stroke:#845ef7,color:#29134d; - classDef output fill:#e8faf8,stroke:#12a594,color:#073d38; + classDef runner fill:#fff4dc,stroke:#d88a00,color:#4d3000; + classDef loop fill:#f1eaff,stroke:#845ef7,color:#29134d; + classDef gateway fill:#e9f8ef,stroke:#2f9e5b,color:#123d24; + classDef core fill:#e8faf8,stroke:#12a594,color:#073d38; class U,UI user; - class R,L,S,Q,A,V,F agent; - class G,T,C boundary; - class W,P core; - class D,CANVAS,X output; + class R,P,M,S runner; + class L,A,PV,CP,F loop; + class G,D gateway; + class C,W core; diff --git a/diagrams/workflow-builder-current-architecture.png b/diagrams/workflow-builder-current-architecture.png index 25eaaed659a6b3067519db81c23a93083a4c1b38..b0980dfd69ed1f3f9e5a639731a2590ed01fa41b 100644 GIT binary patch literal 204027 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%0A5|ZNAq>SZ?R^gz5f?76BXk3`q7gjAq4VQ$qaeM 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

0zlJj+uoV?C` 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 Ij9OcdD;q!fuoRcpLrf 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

x{4jEJXJE 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 LC?CEa7S%i(dgHj$p9tXMi7F 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 literal 101510 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 z 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用户Workflow Builder 聊天窗口Pro Workflow BuilderRunnerAgent Loop Core Agent + AgentPlan研究 SandboxSkill / 文档 / 用户文件workflow_cli_query只读查询workflow_cli_applyChangeSet 提交CLI Gateway白名单 / 参数校验 /重试计数事务 Sandbox隔离的 workflow.json + CLIWorkflow CLIchangeset plan / applyWorkflow CoreSchema / Command /ValidationWorkflowPlan目标文档 / checksum /diagnostics服务端语义审查无工具 Agent 回合审查通过?ApplyWorkflowPlan再次校验并原子应用WorkflowDocument映射到实际画布 / 保存最终无工具 Agent 回合向用户报告完成或失败 \ No newline at end of file +diagnosticsvalid + draftRevision原子应用尚未 commit用户Workflow Builder UI消息、计划、Mermaid 交互Builder Handler / Runner任务编排与状态恢复Builder Prompt Policy角色、生命周期、交互约束Provider State / Memory暂停与恢复单物理 Sandbox共享 Skill 根目录 +sessions/chatIdAgentLoop Core模型循环、工具调用、事件收集ask_agent一次性闭合业务需求workflow_builder_present_preview完整 Mermaid + 自由章节Workflow CLI Gatewayquery / stage / commitChunk Session / Draft私有草稿与 revisionWorkflow CoreSchema、IO、引用、边、必填项校验当前画布WorkflowDocumentCompletionPolicy只读取结构化终止事实独立无工具收尾 Agent根据权威事实生成答复 \ No newline at end of file diff --git a/diagrams/workflow-builder-current-lifecycle.excalidraw b/diagrams/workflow-builder-current-lifecycle.excalidraw new file mode 100644 index 000000000000..9ecb279728d3 --- /dev/null +++ b/diagrams/workflow-builder-current-lifecycle.excalidraw @@ -0,0 +1 @@ +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"6as9WOmYQFQEiTeszolg8","type":"rectangle","x":365.70703125,"y":0,"width":166.953125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":2057951220,"version":3,"versionNonce":1850395852,"isDeleted":false,"boundElements":[{"type":"text","id":"HO61i9M7NkmvSpIJ1Mm2x"},{"id":"vXGtxFgFgzBwSk46uuOgR","type":"arrow"}],"updated":1785841670708,"link":null,"locked":false},{"id":"65472m-Lt5UJmIeJxcKKq","type":"rectangle","x":134.33203125,"y":99,"width":629.703125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":1064751436,"version":5,"versionNonce":1891883084,"isDeleted":false,"boundElements":[{"type":"text","id":"dwe7OA1VjCq9MG1I97yKe"},{"id":"vXGtxFgFgzBwSk46uuOgR","type":"arrow"},{"id":"kT8OmaWIe_tl5uPCnfDtm","type":"arrow"},{"id":"KHLX6Pp9ctqdJwTpTf2hY","type":"arrow"}],"updated":1785841670708,"link":null,"locked":false},{"id":"62wsY884ZDvKJLJPDqJXF","type":"rectangle","x":1217.6015625,"y":198,"width":191.109375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":890419572,"version":6,"versionNonce":1911793356,"isDeleted":false,"boundElements":[{"type":"text","id":"K4eH9wNejOaBTzbO2FId2"},{"id":"kT8OmaWIe_tl5uPCnfDtm","type":"arrow"},{"id":"TzqBSaF9VA7xnClA7_ZRN","type":"arrow"},{"id":"5w6cvJmTBKnaskdqfu3j8","type":"arrow"},{"id":"2vTL2JNSZttiKMX5wTfo0","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"mv0B7wNtkoS_2YiLICwKs","type":"diamond","x":1524.87109375,"y":357.3828125,"width":199.8125,"height":199.8125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":1705428940,"version":5,"versionNonce":1870626252,"isDeleted":false,"boundElements":[{"type":"text","id":"lYZ33_YvkJsoceNVDId5h"},{"id":"TzqBSaF9VA7xnClA7_ZRN","type":"arrow"},{"id":"UbyIvkIo9XNQhzP3cXEpu","type":"arrow"},{"id":"yxe0sdoIf89mrr9unTaNZ","type":"arrow"}],"updated":1785841670708,"link":null,"locked":false},{"id":"tQB87RDeMwem9B1vkKTox","type":"rectangle","x":0,"y":806.296875,"width":192.28125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":1122200308,"version":4,"versionNonce":53676620,"isDeleted":false,"boundElements":[{"type":"text","id":"dkMnckI3JDdxztBiAesN5"},{"id":"UbyIvkIo9XNQhzP3cXEpu","type":"arrow"},{"id":"Xpd5L4ayRjYbF7zttlWE6","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"ALfxpyHg11ey6HDnYVMRs","type":"diamond","x":841.17578125,"y":667.578125,"width":326.4375,"height":326.4375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":1603530316,"version":5,"versionNonce":1753953612,"isDeleted":false,"boundElements":[{"type":"text","id":"G0hyG30fQCRvE3llanr6O"},{"id":"yxe0sdoIf89mrr9unTaNZ","type":"arrow"},{"id":"oF7DkUGqUQaSri6TnDXNn","type":"arrow"},{"id":"NsdGLGk-7sCXLFw0TKrRQ","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"PsHV4n2k-gHOROEKOipBD","type":"rectangle","x":311.25390625,"y":1092.515625,"width":329.46875,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":111275124,"version":4,"versionNonce":1117478476,"isDeleted":false,"boundElements":[{"type":"text","id":"ETtTzlcH9aamCMMkKf1hw"},{"id":"oF7DkUGqUQaSri6TnDXNn","type":"arrow"},{"id":"Diclo7yURR7irDUxgTKJg","type":"arrow"}],"updated":1785841670708,"link":null,"locked":false},{"id":"OioC6aAa5Qp7p-kLaDhwl","type":"rectangle","x":190.9609375,"y":1264.171875,"width":307.875,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":504906956,"version":4,"versionNonce":151777740,"isDeleted":false,"boundElements":[{"type":"text","id":"B561v38uC0hVfB-UWwMsF"},{"id":"Diclo7yURR7irDUxgTKJg","type":"arrow"},{"id":"KHLX6Pp9ctqdJwTpTf2hY","type":"arrow"}],"updated":1785841670708,"link":null,"locked":false},{"id":"RWQQPL6Rrgp9aZCztJoBm","type":"rectangle","x":1009.21484375,"y":1078.015625,"width":410.1875,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":571751924,"version":5,"versionNonce":2034772300,"isDeleted":false,"boundElements":[{"type":"text","id":"RUg6sdjj5YqJCP_ii9zmL"},{"id":"NsdGLGk-7sCXLFw0TKrRQ","type":"arrow"},{"id":"kAgtErkgMDYcXyBCfqx1c","type":"arrow"},{"id":"pDpDnS-gE0kst6HS_Ypj0","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"afzIk9tbMBXzwYucbxd6p","type":"diamond","x":1320.48046875,"y":1206.015625,"width":165.3125,"height":165.3125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":1724762956,"version":6,"versionNonce":1879628236,"isDeleted":false,"boundElements":[{"type":"text","id":"MEL4q9sV73J4vWff5z_01"},{"id":"kAgtErkgMDYcXyBCfqx1c","type":"arrow"},{"id":"u4aiR6IUKfw8TouFQWQmH","type":"arrow"},{"id":"aR_vcroHlHQZ9Yb4TEYbA","type":"arrow"},{"id":"EXTpId7S7BJrkEXbAGyKY","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"Z7nmKVR-R5--nszAxGdcO","type":"rectangle","x":637.21484375,"y":1455.328125,"width":396.375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":239099764,"version":4,"versionNonce":403071692,"isDeleted":false,"boundElements":[{"type":"text","id":"are3bwm9qEGcW-uiVHTU1"},{"id":"u4aiR6IUKfw8TouFQWQmH","type":"arrow"},{"id":"pDpDnS-gE0kst6HS_Ypj0","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"_epzLPMOLQX3QZkcPNwp6","type":"rectangle","x":1770.50390625,"y":2566.828125,"width":122.5,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":1007583692,"version":4,"versionNonce":1109754956,"isDeleted":false,"boundElements":[{"type":"text","id":"LmANVoZJ0_e8XKZ9Mz5vf"},{"id":"aR_vcroHlHQZ9Yb4TEYbA","type":"arrow"},{"id":"51ys52_kwfGlwlS94HMqG","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"lzfoNYvMABcX5cbDuz6iN","type":"rectangle","x":1083.58984375,"y":1455.328125,"width":444.359375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":862736628,"version":4,"versionNonce":1084085964,"isDeleted":false,"boundElements":[{"type":"text","id":"maJjVDUFt-HLrrjebmvst"},{"id":"EXTpId7S7BJrkEXbAGyKY","type":"arrow"},{"id":"GHBtDdJqh4ZaoAfsXzbpq","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"HRUjY8S4PSaTQ82g_Vswy","type":"rectangle","x":1161.56640625,"y":1554.328125,"width":288.40625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":1156868172,"version":4,"versionNonce":1675072460,"isDeleted":false,"boundElements":[{"type":"text","id":"r6nNjpwRuFuvyZIJCj6KW"},{"id":"GHBtDdJqh4ZaoAfsXzbpq","type":"arrow"},{"id":"QSxbskv_mLkSrN6gXiPV3","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"WaX-8_U7Xdf3lql_FaC7k","type":"rectangle","x":1139.98828125,"y":1653.328125,"width":331.5625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":18748020,"version":5,"versionNonce":319784140,"isDeleted":false,"boundElements":[{"type":"text","id":"x7_D0ivcU2YiGH8tQuvGw"},{"id":"QSxbskv_mLkSrN6gXiPV3","type":"arrow"},{"id":"N2uWRfomMCngI_DNScuUn","type":"arrow"},{"id":"KEY7yt6xgr0yOrarlCItI","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"Sln56G_j92PPBpP1-P130","type":"rectangle","x":1250.3125,"y":1752.328125,"width":301.84375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":null,"seed":895057612,"version":4,"versionNonce":628706764,"isDeleted":false,"boundElements":[{"type":"text","id":"C4PLA2Sik-3V_-uyyHdTU"},{"id":"N2uWRfomMCngI_DNScuUn","type":"arrow"},{"id":"pnC7L7nvRbz-ELvneRVks","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"ViPuzTM1kA9weTMviWH71","type":"diamond","x":1307.8046875,"y":1851.328125,"width":186.859375,"height":186.859375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":null,"seed":102474740,"version":5,"versionNonce":1278591436,"isDeleted":false,"boundElements":[{"type":"text","id":"d1HGZUrYCVdMNfzk3TQ00"},{"id":"pnC7L7nvRbz-ELvneRVks","type":"arrow"},{"id":"RZHXBQc1Hc68IQgyFMWfG","type":"arrow"},{"id":"NGEDqqFYhcLOkpGPVyckB","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"qqqJ4XRUWbZ5dfHsWeMmh","type":"rectangle","x":1087.91796875,"y":2564.328125,"width":435.703125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":null,"seed":903333196,"version":5,"versionNonce":688757836,"isDeleted":false,"boundElements":[{"type":"text","id":"BM5UvnFnHK6Znshc3jjzO"},{"id":"RZHXBQc1Hc68IQgyFMWfG","type":"arrow"},{"id":"KEY7yt6xgr0yOrarlCItI","type":"arrow"},{"id":"85czklXwaUeAJHqhj0YTO","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"SiwLIHgzvnD75-raHgiuC","type":"rectangle","x":1149.83984375,"y":2122.1875,"width":311.859375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":null,"seed":141231476,"version":4,"versionNonce":1420869324,"isDeleted":false,"boundElements":[{"type":"text","id":"NMmfctbhggc4j-QPDCHZW"},{"id":"NGEDqqFYhcLOkpGPVyckB","type":"arrow"},{"id":"7cH8swUR7pN5PtW06SZ4s","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"nmWE3v00VLbcxyVWvq1cI","type":"diamond","x":1193.19921875,"y":2255.1875,"width":225.140625,"height":225.140625,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":null,"seed":1271479244,"version":6,"versionNonce":607385932,"isDeleted":false,"boundElements":[{"type":"text","id":"y6MzL5gd4sREgTvOYD6EV"},{"id":"7cH8swUR7pN5PtW06SZ4s","type":"arrow"},{"id":"kl5DvO8lEmpP-VwcKfqGv","type":"arrow"},{"id":"85czklXwaUeAJHqhj0YTO","type":"arrow"},{"id":"Np5_Gn1P4tmMNrwnbYz3P","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"8H05CLYszpdSal4VtGYRy","type":"rectangle","x":1622.44140625,"y":2566.828125,"width":98.0625,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":null,"seed":491927284,"version":4,"versionNonce":1987174732,"isDeleted":false,"boundElements":[{"type":"text","id":"ZkbM3tO_jCJIFhc6fYWPM"},{"id":"kl5DvO8lEmpP-VwcKfqGv","type":"arrow"},{"id":"Sjydmy4hQzaADN6nwyejN","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"MVhLIQh6shb1TPVjiUuoW","type":"rectangle","x":744.8671875,"y":2566.828125,"width":211.65625,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":null,"seed":1095230028,"version":4,"versionNonce":1057685068,"isDeleted":false,"boundElements":[{"type":"text","id":"5NKKypyC9oBlnWCBscg9F"},{"id":"Np5_Gn1P4tmMNrwnbYz3P","type":"arrow"},{"id":"tk1bZuUPKRLxMPIYbbvA2","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"bg-wcr-AklVrj0BTEKG8k","type":"diamond","x":1048.76953125,"y":331,"width":252.578125,"height":252.578125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":null,"seed":1096235124,"version":6,"versionNonce":173401932,"isDeleted":false,"boundElements":[{"type":"text","id":"auUAax3is3r4tgBTPmCzC"},{"id":"5w6cvJmTBKnaskdqfu3j8","type":"arrow"},{"id":"2vTL2JNSZttiKMX5wTfo0","type":"arrow"},{"id":"Xpd5L4ayRjYbF7zttlWE6","type":"arrow"},{"id":"kg1Y3cIjl0WxJETMy8lHC","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"tiTtDsE5uUBvXZEsF4oMO","type":"rectangle","x":1589.98828125,"y":2663.328125,"width":264.3125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":null,"seed":221100236,"version":7,"versionNonce":2143345484,"isDeleted":false,"boundElements":[{"type":"text","id":"W_-rgi7_Y4HHjDgxj9P3C"},{"id":"kg1Y3cIjl0WxJETMy8lHC","type":"arrow"},{"id":"51ys52_kwfGlwlS94HMqG","type":"arrow"},{"id":"Sjydmy4hQzaADN6nwyejN","type":"arrow"},{"id":"tk1bZuUPKRLxMPIYbbvA2","type":"arrow"},{"id":"Rlvamnpf_WNPqf4GgO9k7","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"eWIQCLqRx_Ns8x1fN7x8S","type":"rectangle","x":1600.67578125,"y":2762.328125,"width":242.9375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":null,"seed":1883245044,"version":3,"versionNonce":1679790540,"isDeleted":false,"boundElements":[{"type":"text","id":"eyPk-pjGeH2P587ezR3sg"},{"id":"Rlvamnpf_WNPqf4GgO9k7","type":"arrow"}],"updated":1785841670709,"link":null,"locked":false},{"id":"vXGtxFgFgzBwSk46uuOgR","type":"arrow","x":449.184,"y":49,"width":0,"height":44.7,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":991215436,"version":4,"versionNonce":170800628,"isDeleted":false,"boundElements":null,"updated":1785841670708,"link":null,"locked":false,"points":[[0,0.5],[0,44.2]],"lastCommittedPoint":null,"startBinding":{"elementId":"6as9WOmYQFQEiTeszolg8","focus":-0.000004866635470564235,"gap":1},"endBinding":{"elementId":"65472m-Lt5UJmIeJxcKKq","focus":0.0000012902905634113661,"gap":5.299999999999997},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kT8OmaWIe_tl5uPCnfDtm","type":"arrow","x":764.035,"y":141.539,"width":549.121,"height":51.161,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":1024633716,"version":4,"versionNonce":1734887668,"isDeleted":false,"boundElements":null,"updated":1785841670708,"link":null,"locked":false,"points":[[0,0.5],[549.121,31.461000000000013],[549.121,50.661]],"lastCommittedPoint":null,"startBinding":{"elementId":"65472m-Lt5UJmIeJxcKKq","focus":0.000002295772374902661,"gap":1},"endBinding":{"elementId":"62wsY884ZDvKJLJPDqJXF","focus":-0.0000026163028352749283,"gap":5.300000000000011},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"TzqBSaF9VA7xnClA7_ZRN","type":"arrow","x":1408.711,"y":242.891,"width":216.52800000000002,"height":109.69200000000004,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":1398207948,"version":4,"versionNonce":1970904052,"isDeleted":false,"boundElements":null,"updated":1785841670708,"link":null,"locked":false,"points":[[0.5,0.5],[216.06600000000003,46.10900000000001],[216.02800000000002,109.19200000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"62wsY884ZDvKJLJPDqJXF","focus":-0.000013625557482674772,"gap":1},"endBinding":{"elementId":"mv0B7wNtkoS_2YiLICwKs","focus":0.01223607384171654,"gap":4.81389188120642},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"UbyIvkIo9XNQhzP3cXEpu","type":"arrow","x":1535.724,"y":468.142,"width":1429.109,"height":333.16,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":1779768564,"version":4,"versionNonce":551039092,"isDeleted":false,"boundElements":[{"type":"text","id":"hByGw76g7784L4yK48Bzd"}],"updated":1785841670708,"link":null,"locked":false,"points":[[-0.5,0.5],[-1366.701,157.43599999999998],[-1428.609,332.66]],"lastCommittedPoint":null,"startBinding":{"elementId":"mv0B7wNtkoS_2YiLICwKs","focus":-0.005950685323808298,"gap":1},"endBinding":{"elementId":"tQB87RDeMwem9B1vkKTox","focus":-0.000006355379570405259,"gap":4.994874999999979},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"yxe0sdoIf89mrr9unTaNZ","type":"arrow","x":1546.689,"y":479.107,"width":542.2940000000001,"height":183.671,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":1125014604,"version":4,"versionNonce":1754862836,"isDeleted":false,"boundElements":[{"type":"text","id":"RYNldhEGiP50Cx1t6u9-U"}],"updated":1785841670708,"link":null,"locked":false,"points":[[0.5,0.5],[-542.2940000000001,146.47099999999995],[-542.3570000000001,183.171]],"lastCommittedPoint":null,"startBinding":{"elementId":"mv0B7wNtkoS_2YiLICwKs","focus":-0.007273334722690639,"gap":1},"endBinding":{"elementId":"ALfxpyHg11ey6HDnYVMRs","focus":0.014773050691833638,"gap":4.8124199280067375},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"oF7DkUGqUQaSri6TnDXNn","type":"arrow","x":887.333,"y":876.954,"width":411.34499999999997,"height":210.26199999999994,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":13459060,"version":4,"versionNonce":1042172276,"isDeleted":false,"boundElements":[{"type":"text","id":"Exd2aV1qVwlgpgI1-vX1l"}],"updated":1785841670708,"link":null,"locked":false,"points":[[0,0.5],[-411.34499999999997,159.06200000000013],[-411.34499999999997,209.76199999999994]],"lastCommittedPoint":null,"startBinding":{"elementId":"ALfxpyHg11ey6HDnYVMRs","focus":-0.005458230187173786,"gap":1},"endBinding":{"elementId":"PsHV4n2k-gHOROEKOipBD","focus":-0.0000017072939389622563,"gap":5.2996250000001055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Diclo7yURR7irDUxgTKJg","type":"arrow","x":475.988,"y":1141.516,"width":97.161,"height":119.29199999999992,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":1142223564,"version":4,"versionNonce":1309244532,"isDeleted":false,"boundElements":null,"updated":1785841670708,"link":null,"locked":false,"points":[[-0.5,0.5],[0,39.5],[-96.661,118.79199999999992]],"lastCommittedPoint":null,"startBinding":{"elementId":"PsHV4n2k-gHOROEKOipBD","focus":0.0000017072939389622563,"gap":1},"endBinding":{"elementId":"OioC6aAa5Qp7p-kLaDhwl","focus":-0.000003689443166363084,"gap":3.3638750000000073},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"KHLX6Pp9ctqdJwTpTf2hY","type":"arrow","x":323.835,"y":1264.172,"width":94.274,"height":1114.879,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":1778479092,"version":4,"versionNonce":1396564212,"isDeleted":false,"boundElements":[{"type":"text","id":"6_74ytWoRDwVBcKTmQWMV"}],"updated":1785841670708,"link":null,"locked":false,"points":[[0.5,-0.5],[-71.49099999999999,-83.15599999999995],[-71.49099999999999,-147.15599999999995],[-71.49099999999999,-228.15599999999995],[-71.49099999999999,-433.375],[-71.49099999999999,-638.594],[-71.49099999999999,-806.883],[-71.49099999999999,-975.172],[-71.49099999999999,-1041.672],[-71.49099999999999,-1091.172],[22.283000000000015,-1114.379]],"lastCommittedPoint":null,"startBinding":{"elementId":"OioC6aAa5Qp7p-kLaDhwl","focus":-0.000002105853133423576,"gap":1},"endBinding":{"elementId":"65472m-Lt5UJmIeJxcKKq","focus":-0.000008875779138075947,"gap":1.29300000000012},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"NsdGLGk-7sCXLFw0TKrRQ","type":"arrow","x":1087.427,"y":911.983,"width":126.88200000000006,"height":160.73299999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":1157937484,"version":4,"versionNonce":551982452,"isDeleted":false,"boundElements":[{"type":"text","id":"3Hgzq719Fa_Q9Om-68XcR"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[126.88200000000006,124.03300000000013],[126.88200000000006,160.23299999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"ALfxpyHg11ey6HDnYVMRs","focus":0.00011066000670982073,"gap":1},"endBinding":{"elementId":"RWQQPL6Rrgp9aZCztJoBm","focus":0.0000019808014624914724,"gap":5.2996250000001055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kAgtErkgMDYcXyBCfqx1c","type":"arrow","x":1329.376,"y":1156.016,"width":74.15699999999993,"height":45.20100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":{"type":2},"seed":95900020,"version":4,"versionNonce":2083440756,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,0.5],[73.76099999999997,25],[73.65699999999993,44.70100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"RWQQPL6Rrgp9aZCztJoBm","focus":0.0000026866646536554197,"gap":1},"endBinding":{"elementId":"afzIk9tbMBXzwYucbxd6p","focus":0.025535374346040324,"gap":4.798912525025916},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"u4aiR6IUKfw8TouFQWQmH","type":"arrow","x":1340.61,"y":1308.801,"width":438.5759999999999,"height":144.57100000000014,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":{"type":2},"seed":1362603980,"version":4,"versionNonce":1935060212,"isDeleted":false,"boundElements":[{"type":"text","id":"J1O51zRM-EqfXrKtJwhWc"}],"updated":1785841670709,"link":null,"locked":false,"points":[[-0.5,0.5],[-337.71899999999994,104.52700000000004],[-438.0759999999999,144.07100000000014]],"lastCommittedPoint":null,"startBinding":{"elementId":"afzIk9tbMBXzwYucbxd6p","focus":-0.009395003537326679,"gap":1},"endBinding":{"elementId":"Z7nmKVR-R5--nszAxGdcO","focus":-0.000008393814800486609,"gap":1.956124999999929},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"pDpDnS-gE0kst6HS_Ypj0","type":"arrow","x":815.128,"y":1455.328,"width":223.601,"height":307.28999999999996,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":{"type":2},"seed":1127547636,"version":4,"versionNonce":471793652,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,-0.5],[-34.75700000000006,-42],[-34.75700000000006,-166.65599999999995],[-34.75700000000006,-274.3119999999999],[188.34399999999994,-306.78999999999996]],"lastCommittedPoint":null,"startBinding":{"elementId":"Z7nmKVR-R5--nszAxGdcO","focus":0.000003096002184145147,"gap":1},"endBinding":{"elementId":"RWQQPL6Rrgp9aZCztJoBm","focus":-0.000009938225387715826,"gap":5.24284375000002},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"aR_vcroHlHQZ9Yb4TEYbA","type":"arrow","x":1467.67,"y":1307.795,"width":364.08399999999983,"height":1253.7329999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":{"type":2},"seed":2026362444,"version":4,"versionNonce":2001212532,"isDeleted":false,"boundElements":[{"type":"text","id":"fbZ2tAV3ZETNg9KBDox5b"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[364.08399999999983,105.5329999999999],[364.08399999999983,172.0329999999999],[364.08399999999983,221.5329999999999],[364.08399999999983,271.0329999999999],[364.08399999999983,320.5329999999999],[364.08399999999983,370.0329999999999],[364.08399999999983,419.5329999999999],[364.08399999999983,469.0329999999999],[364.08399999999983,518.5329999999999],[364.08399999999983,636.963],[364.08399999999983,772.393],[364.08399999999983,838.893],[364.08399999999983,905.393],[364.08399999999983,1059.9629999999997],[364.08399999999983,1214.533],[364.08399999999983,1253.2329999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"afzIk9tbMBXzwYucbxd6p","focus":0.005051970199070253,"gap":1},"endBinding":{"elementId":"_epzLPMOLQX3QZkcPNwp6","focus":0.000001530612248521667,"gap":5.300125000000207},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"EXTpId7S7BJrkEXbAGyKY","type":"arrow","x":1367.388,"y":1335.58,"width":61.61799999999994,"height":114.44800000000009,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":{"type":2},"seed":956335220,"version":4,"versionNonce":350451956,"isDeleted":false,"boundElements":[{"type":"text","id":"VWj4lhRmDOeyfb3KjhMsS"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[-61.61799999999994,77.74800000000005],[-61.61799999999994,113.94800000000009]],"lastCommittedPoint":null,"startBinding":{"elementId":"afzIk9tbMBXzwYucbxd6p","focus":-0.017271595935992274,"gap":1},"endBinding":{"elementId":"lzfoNYvMABcX5cbDuz6iN","focus":0.000002109778824739279,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"GHBtDdJqh4ZaoAfsXzbpq","type":"arrow","x":1305.77,"y":1504.328,"width":0,"height":44.700000000000045,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":{"type":2},"seed":948907212,"version":4,"versionNonce":32033780,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[0,44.200000000000045]],"lastCommittedPoint":null,"startBinding":{"elementId":"lzfoNYvMABcX5cbDuz6iN","focus":-0.0000021097788258618546,"gap":1},"endBinding":{"elementId":"HRUjY8S4PSaTQ82g_Vswy","focus":0.0000032506230341879026,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"QSxbskv_mLkSrN6gXiPV3","type":"arrow","x":1305.77,"y":1603.328,"width":0,"height":44.700000000000045,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":{"type":2},"seed":1021302260,"version":4,"versionNonce":368402164,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[0,44.200000000000045]],"lastCommittedPoint":null,"startBinding":{"elementId":"HRUjY8S4PSaTQ82g_Vswy","focus":-0.0000032506230359807994,"gap":1},"endBinding":{"elementId":"WaX-8_U7Xdf3lql_FaC7k","focus":0.0000028275212061956406,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"N2uWRfomMCngI_DNScuUn","type":"arrow","x":1353.02,"y":1702.328,"width":48.21399999999994,"height":44.700000000000045,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":{"type":2},"seed":1646768972,"version":4,"versionNonce":674836980,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[48.21399999999994,25],[48.21399999999994,44.200000000000045]],"lastCommittedPoint":null,"startBinding":{"elementId":"WaX-8_U7Xdf3lql_FaC7k","focus":-0.000004646366674765531,"gap":1},"endBinding":{"elementId":"Sln56G_j92PPBpP1-P130","focus":-0.0000024847292700574066,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"pnC7L7nvRbz-ELvneRVks","type":"arrow","x":1401.234,"y":1801.328,"width":0.39600000000018554,"height":45.20100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":{"type":2},"seed":2077816692,"version":4,"versionNonce":65291508,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[-0.10399999999981446,44.70100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"Sln56G_j92PPBpP1-P130","focus":0.000002484729268589524,"gap":1},"endBinding":{"elementId":"ViPuzTM1kA9weTMviWH71","focus":0.02484438818589161,"gap":4.802303248263405},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"RZHXBQc1Hc68IQgyFMWfG","type":"arrow","x":1440.363,"y":2000.058,"width":115.58200000000011,"height":562.527,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":{"type":2},"seed":65759692,"version":4,"versionNonce":1425504628,"isDeleted":false,"boundElements":[{"type":"text","id":"PRcBbd5a53hDo8zgTloW8"}],"updated":1785841670709,"link":null,"locked":false,"points":[[-0.5,0.5],[56.33600000000001,80.13000000000011],[56.33600000000001,146.6300000000001],[56.33600000000001,213.1300000000001],[56.33600000000001,367.6999999999998],[56.33600000000001,522.27],[-58.746000000000095,562.027]],"lastCommittedPoint":null,"startBinding":{"elementId":"ViPuzTM1kA9weTMviWH71","focus":-0.002669512130587986,"gap":1},"endBinding":{"elementId":"qqqJ4XRUWbZ5dfHsWeMmh","focus":0.0000026009493762105105,"gap":1.7431249999999636},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"KEY7yt6xgr0yOrarlCItI","type":"arrow","x":1235.427,"y":2564.328,"width":120.58699999999999,"height":860.6700000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":{"type":2},"seed":305260788,"version":4,"versionNonce":72789108,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,-0.5],[-120.58699999999999,-42],[-120.58699999999999,-196.57000000000016],[-120.58699999999999,-351.1399999999999],[-120.58699999999999,-417.6399999999999],[-120.58699999999999,-484.1399999999999],[-120.58699999999999,-619.5699999999999],[-120.58699999999999,-738],[-120.58699999999999,-787.5],[-120.58699999999999,-837],[-29.78800000000001,-860.1700000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"qqqJ4XRUWbZ5dfHsWeMmh","focus":8.47715652867247e-7,"gap":1},"endBinding":{"elementId":"WaX-8_U7Xdf3lql_FaC7k","focus":0.000002096630409975919,"gap":1.3298749999999018},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"NGEDqqFYhcLOkpGPVyckB","type":"arrow","x":1363.105,"y":2000.058,"width":57.335000000000036,"height":116.82999999999993,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":{"type":2},"seed":1358188620,"version":4,"versionNonce":207163636,"isDeleted":false,"boundElements":[{"type":"text","id":"qR-8BDdd7evgV9f-7TSWx"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[-57.335000000000036,80.13000000000011],[-57.335000000000036,116.32999999999993]],"lastCommittedPoint":null,"startBinding":{"elementId":"ViPuzTM1kA9weTMviWH71","focus":-0.015404943595137378,"gap":1},"endBinding":{"elementId":"SiwLIHgzvnD75-raHgiuC","focus":0.000003006162633396437,"gap":5.29950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"7cH8swUR7pN5PtW06SZ4s","type":"arrow","x":1305.77,"y":2171.188,"width":0.4370000000001255,"height":79.19999999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":{"type":2},"seed":594586228,"version":4,"versionNonce":450388980,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,0.5],[0,42],[-0.06299999999987449,78.69999999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"SiwLIHgzvnD75-raHgiuC","focus":-0.000003006162633396437,"gap":1},"endBinding":{"elementId":"nmWE3v00VLbcxyVWvq1cI","focus":0.01613434746951575,"gap":4.799506307720861},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kl5DvO8lEmpP-VwcKfqGv","type":"arrow","x":1385.396,"y":2401.702,"width":286.077,"height":159.82599999999957,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":{"type":2},"seed":152856268,"version":4,"versionNonce":776730740,"isDeleted":false,"boundElements":[{"type":"text","id":"eq85yZsqcF1Kl3GjHi7_k"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[286.077,120.62599999999975],[286.077,159.32599999999957]],"lastCommittedPoint":null,"startBinding":{"elementId":"nmWE3v00VLbcxyVWvq1cI","focus":0.003280016100350505,"gap":1},"endBinding":{"elementId":"8H05CLYszpdSal4VtGYRy","focus":0.000007010834933348521,"gap":5.300125000000207},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"85czklXwaUeAJHqhj0YTO","type":"arrow","x":1306.27,"y":2480.828,"width":0.5,"height":78.19999999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":{"type":2},"seed":1918581748,"version":4,"versionNonce":2051136756,"isDeleted":false,"boundElements":[{"type":"text","id":"Lgz1TjbtO65pp56_jj2or"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[-0.5,41.5],[-0.5,77.69999999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"nmWE3v00VLbcxyVWvq1cI","focus":-0.016547525935515624,"gap":1},"endBinding":{"elementId":"qqqJ4XRUWbZ5dfHsWeMmh","focus":0.0000021516944601499154,"gap":5.300125000000207},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Np5_Gn1P4tmMNrwnbYz3P","type":"arrow","x":1222.24,"y":2396.799,"width":371.54499999999996,"height":164.72899999999981,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":{"type":2},"seed":1627237708,"version":4,"versionNonce":1679561076,"isDeleted":false,"boundElements":[{"type":"text","id":"rMCga4mpWCAqUEK2QbcDY"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[-371.54499999999996,125.529],[-371.54499999999996,164.22899999999981]],"lastCommittedPoint":null,"startBinding":{"elementId":"nmWE3v00VLbcxyVWvq1cI","focus":-0.007285832448973535,"gap":1},"endBinding":{"elementId":"MVhLIQh6shb1TPVjiUuoW","focus":-0.0000029529012247828464,"gap":5.300125000000207},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"5w6cvJmTBKnaskdqfu3j8","type":"arrow","x":1262.278,"y":247,"width":87.21900000000005,"height":79.19999999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":{"type":2},"seed":2029493620,"version":4,"versionNonce":1954321908,"isDeleted":false,"boundElements":[{"type":"text","id":"nez6sA5cWzHn5XgArtXBW"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,0.5],[-87.21900000000005,42],[-87.28199999999993,78.69999999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"62wsY884ZDvKJLJPDqJXF","focus":0.0000034145439917101864,"gap":1},"endBinding":{"elementId":"bg-wcr-AklVrj0BTEKG8k","focus":0.015657336473004563,"gap":4.807787364757995},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"2vTL2JNSZttiKMX5wTfo0","type":"arrow","x":1072.317,"y":434.742,"width":791.113,"height":204.72400000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":{"type":2},"seed":1777476556,"version":4,"versionNonce":524642932,"isDeleted":false,"boundElements":[{"type":"text","id":"uCSHyKfU27uXLeElvm-qT"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,-0.5],[-651.114,-145.74200000000002],[139.49900000000002,-204.22400000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"bg-wcr-AklVrj0BTEKG8k","focus":-0.003563935016998831,"gap":1},"endBinding":{"elementId":"62wsY884ZDvKJLJPDqJXF","focus":0.000006878631697314133,"gap":5.285562499999969},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Xpd5L4ayRjYbF7zttlWE6","type":"arrow","x":1066.169,"y":474.688,"width":980.4660000000001,"height":326.31600000000003,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":{"type":2},"seed":9162484,"version":4,"versionNonce":194547444,"isDeleted":false,"boundElements":[{"type":"text","id":"Uy8XHz9hpHJFFJXa5lobf"}],"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,0.5],[-980.4660000000001,150.89],[-972.0440000000001,325.81600000000003]],"lastCommittedPoint":null,"startBinding":{"elementId":"bg-wcr-AklVrj0BTEKG8k","focus":-0.005077572514867569,"gap":1},"endBinding":{"elementId":"tQB87RDeMwem9B1vkKTox","focus":-0.000003980325796551066,"gap":5.292874999999981},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kg1Y3cIjl0WxJETMy8lHC","type":"arrow","x":1281.776,"y":477.861,"width":783.8369999999998,"height":2190.165,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":{"type":2},"seed":2048117324,"version":4,"versionNonce":1540883316,"isDeleted":false,"boundElements":[{"type":"text","id":"ACE_qp_MmHWafz3C00Tvn"}],"updated":1785841670709,"link":null,"locked":false,"points":[[-0.5,0.5],[783.8369999999998,147.71699999999998],[783.8369999999998,352.93600000000004],[783.8369999999998,558.1550000000001],[783.8369999999998,639.1550000000001],[783.8369999999998,703.1550000000001],[783.8369999999998,810.811],[783.8369999999998,935.467],[783.8369999999998,1001.967],[783.8369999999998,1051.467],[783.8369999999998,1100.967],[783.8369999999998,1150.467],[783.8369999999998,1199.967],[783.8369999999998,1249.467],[783.8369999999998,1298.967],[783.8369999999998,1348.467],[783.8369999999998,1466.897],[783.8369999999998,1602.3270000000002],[783.8369999999998,1668.8270000000002],[783.8369999999998,1735.3270000000002],[783.8369999999998,1889.897],[783.8369999999998,2044.467],[783.8369999999998,2110.967],[783.8369999999998,2160.467],[578.271,2189.665]],"lastCommittedPoint":null,"startBinding":{"elementId":"bg-wcr-AklVrj0BTEKG8k","focus":0.0036475455064328218,"gap":1},"endBinding":{"elementId":"tiTtDsE5uUBvXZEsF4oMO","focus":0.0000037696650888729734,"gap":5.2462187500000255},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"51ys52_kwfGlwlS94HMqG","type":"arrow","x":1831.754,"y":2610.828,"width":50.52799999999979,"height":50.31899999999996,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"as","roundness":{"type":2},"seed":966643828,"version":4,"versionNonce":1881716,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[-0.5,0.5],[0,27.5],[-50.02799999999979,49.81899999999996]],"lastCommittedPoint":null,"startBinding":{"elementId":"_epzLPMOLQX3QZkcPNwp6","focus":-0.000001530612248521667,"gap":1},"endBinding":{"elementId":"tiTtDsE5uUBvXZEsF4oMO","focus":0.000008498995155144319,"gap":2.1811250000000655},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Sjydmy4hQzaADN6nwyejN","type":"arrow","x":1671.473,"y":2610.828,"width":21.799999999999955,"height":48.797000000000025,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"at","roundness":{"type":2},"seed":339517644,"version":4,"versionNonce":1259383156,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,0.5],[0,27.5],[21.299999999999955,48.297000000000025]],"lastCommittedPoint":null,"startBinding":{"elementId":"8H05CLYszpdSal4VtGYRy","focus":-0.000007010834933348521,"gap":1},"endBinding":{"elementId":"tiTtDsE5uUBvXZEsF4oMO","focus":-0.000014595821897528155,"gap":3.703125},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"tk1bZuUPKRLxMPIYbbvA2","type":"arrow","x":850.695,"y":2610.828,"width":734.0019999999998,"height":69.19300000000021,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"au","roundness":{"type":2},"seed":1408475636,"version":4,"versionNonce":1239669876,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0.5,0.5],[0,27.5],[733.5019999999998,68.69300000000021]],"lastCommittedPoint":null,"startBinding":{"elementId":"MVhLIQh6shb1TPVjiUuoW","focus":0.0000029529012247828464,"gap":1},"endBinding":{"elementId":"tiTtDsE5uUBvXZEsF4oMO","focus":-0.000006578806295246375,"gap":5.291281250000111},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Rlvamnpf_WNPqf4GgO9k7","type":"arrow","x":1722.145,"y":2712.328,"width":0,"height":44.69999999999982,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"av","roundness":{"type":2},"seed":1342613324,"version":4,"versionNonce":2110148468,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"points":[[0,0.5],[0,44.19999999999982]],"lastCommittedPoint":null,"startBinding":{"elementId":"tiTtDsE5uUBvXZEsF4oMO","focus":-0.0000035469378119435565,"gap":1},"endBinding":{"elementId":"eWIQCLqRx_Ns8x1fN7x8S","focus":0.000003859017236896577,"gap":5.300125000000207},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"HO61i9M7NkmvSpIJ1Mm2x","type":"text","x":389.18359375,"y":12,"width":120,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aw","roundness":null,"seed":1349451508,"version":3,"versionNonce":481575156,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"收到用户消息","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"6as9WOmYQFQEiTeszolg8","originalText":"收到用户消息","autoResize":true,"lineHeight":1.25},{"id":"dwe7OA1VjCq9MG1I97yKe","type":"text","x":213.3583984375,"y":111,"width":471.650390625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ax","roundness":null,"seed":94044276,"version":3,"versionNonce":1751349324,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"Runner 准备 Sandbox、历史、Memory、Prompt 和工具","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"65472m-Lt5UJmIeJxcKKq","originalText":"Runner 准备 Sandbox、历史、Memory、Prompt 和工具","autoResize":true,"lineHeight":1.25},{"id":"K4eH9wNejOaBTzbO2FId2","type":"text","x":1245.109375,"y":210,"width":136.09375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ay","roundness":null,"seed":147509748,"version":3,"versionNonce":1541931636,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"进入 AgentLoop","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"62wsY884ZDvKJLJPDqJXF","originalText":"进入 AgentLoop","autoResize":true,"lineHeight":1.25},{"id":"lYZ33_YvkJsoceNVDId5h","type":"text","x":1584.82421875,"y":432.3359375,"width":80,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"az","roundness":null,"seed":151286644,"version":3,"versionNonce":946245324,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"工作流任\n务?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"mv0B7wNtkoS_2YiLICwKs","originalText":"工作流任务?","autoResize":true,"lineHeight":1.25},{"id":"dkMnckI3JDdxztBiAesN5","type":"text","x":26.140625,"y":818.296875,"width":140,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b00","roundness":null,"seed":1687020788,"version":3,"versionNonce":1378325492,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"普通回答并结束","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"tQB87RDeMwem9B1vkKTox","originalText":"普通回答并结束","autoResize":true,"lineHeight":1.25},{"id":"G0hyG30fQCRvE3llanr6O","type":"text","x":934.28515625,"y":805.6875,"width":140,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b01","roundness":null,"seed":1089283700,"version":3,"versionNonce":1958925644,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"需求和必要资源\n已闭合?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ALfxpyHg11ey6HDnYVMRs","originalText":"需求和必要资源已闭合?","autoResize":true,"lineHeight":1.25},{"id":"ETtTzlcH9aamCMMkKf1hw","type":"text","x":356.0029296875,"y":1104.515625,"width":239.970703125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b02","roundness":null,"seed":585644020,"version":3,"versionNonce":1299772788,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"ask_agent:一次性收集缺口","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"PsHV4n2k-gHOROEKOipBD","originalText":"ask_agent:一次性收集缺口","autoResize":true,"lineHeight":1.25},{"id":"B561v38uC0hVfB-UWwMsF","type":"text","x":235.46484375,"y":1276.171875,"width":218.8671875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b03","roundness":null,"seed":109386100,"version":3,"versionNonce":449989580,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"暂停并保存 Provider State","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"OioC6aAa5Qp7p-kLaDhwl","originalText":"暂停并保存 Provider State","autoResize":true,"lineHeight":1.25},{"id":"RUg6sdjj5YqJCP_ii9zmL","type":"text","x":1031.955078125,"y":1092.015625,"width":364.70703125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b04","roundness":null,"seed":1997130484,"version":3,"versionNonce":1797400308,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"workflow_builder_present_preview
完整\nMermaid + 自由章节","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"RWQQPL6Rrgp9aZCztJoBm","originalText":"workflow_builder_present_preview
完整 Mermaid + 自由章节","autoResize":true,"lineHeight":1.25},{"id":"MEL4q9sV73J4vWff5z_01","type":"text","x":1373.30859375,"y":1263.84375,"width":60,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b05","roundness":null,"seed":654068852,"version":3,"versionNonce":1823404620,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"用户选\n择","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"afzIk9tbMBXzwYucbxd6p","originalText":"用户选择","autoResize":true,"lineHeight":1.25},{"id":"are3bwm9qEGcW-uiVHTU1","type":"text","x":687.6337890625,"y":1467.328125,"width":295.537109375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b06","roundness":null,"seed":136486388,"version":3,"versionNonce":799615092,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"合并反馈并重新调用 Preview 工具","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Z7nmKVR-R5--nszAxGdcO","originalText":"合并反馈并重新调用 Preview 工具","autoResize":true,"lineHeight":1.25},{"id":"LmANVoZJ0_e8XKZ9Mz5vf","type":"text","x":1794.0048828125,"y":2576.328125,"width":75.498046875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b07","roundness":null,"seed":1669513076,"version":3,"versionNonce":1496500428,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"cancelled","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"_epzLPMOLQX3QZkcPNwp6","originalText":"cancelled","autoResize":true,"lineHeight":1.25},{"id":"maJjVDUFt-HLrrjebmvst","type":"text","x":1137.72265625,"y":1467.328125,"width":336.09375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b08","roundness":null,"seed":1902293236,"version":3,"versionNonce":517208564,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"恢复同一主 AgentLoop,禁止再次提问","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"lzfoNYvMABcX5cbDuz6iN","originalText":"恢复同一主 AgentLoop,禁止再次提问","autoResize":true,"lineHeight":1.25},{"id":"r6nNjpwRuFuvyZIJCj6KW","type":"text","x":1200.5009765625,"y":1566.328125,"width":210.537109375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b09","roundness":null,"seed":1900573300,"version":3,"versionNonce":1677184844,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"query 当前画布和描述符","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"HRUjY8S4PSaTQ82g_Vswy","originalText":"query 当前画布和描述符","autoResize":true,"lineHeight":1.25},{"id":"x7_D0ivcU2YiGH8tQuvGw","type":"text","x":1186.6240234375,"y":1665.328125,"width":238.291015625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0A","roundness":null,"seed":1106904052,"version":3,"versionNonce":1403558772,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"按业务分片 stage 私有 Draft","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"WaX-8_U7Xdf3lql_FaC7k","originalText":"按业务分片 stage 私有 Draft","autoResize":true,"lineHeight":1.25},{"id":"C4PLA2Sik-3V_-uyyHdTU","type":"text","x":1293.44140625,"y":1764.328125,"width":215.5859375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0B","roundness":null,"seed":2038261108,"version":3,"versionNonce":223872460,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"Workflow Core 校验 Draft","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Sln56G_j92PPBpP1-P130","originalText":"Workflow Core 校验 Draft","autoResize":true,"lineHeight":1.25},{"id":"d1HGZUrYCVdMNfzk3TQ00","type":"text","x":1376.5859375,"y":1919.54296875,"width":48.8671875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0C","roundness":null,"seed":2098763508,"version":3,"versionNonce":409799924,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"Draft\nvalid?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ViPuzTM1kA9weTMviWH71","originalText":"Draft valid?","autoResize":true,"lineHeight":1.25},{"id":"BM5UvnFnHK6Znshc3jjzO","type":"text","x":1146.3359375,"y":2576.328125,"width":318.8671875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0D","roundness":null,"seed":424777844,"version":3,"versionNonce":980249676,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"结构化 diagnostics 返回 Agent 自修复","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"qqqJ4XRUWbZ5dfHsWeMmh","originalText":"结构化 diagnostics 返回 Agent 自修复","autoResize":true,"lineHeight":1.25},{"id":"NMmfctbhggc4j-QPDCHZW","type":"text","x":1195.7841796875,"y":2134.1875,"width":219.970703125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0E","roundness":null,"seed":435055092,"version":3,"versionNonce":2124893812,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"使用 draftRevision commit","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"SiwLIHgzvnD75-raHgiuC","originalText":"使用 draftRevision commit","autoResize":true,"lineHeight":1.25},{"id":"y6MzL5gd4sREgTvOYD6EV","type":"text","x":1255.984375,"y":2342.97265625,"width":100,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0F","roundness":null,"seed":1643449204,"version":3,"versionNonce":487719628,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"原子应用成\n功?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"nmWE3v00VLbcxyVWvq1cI","originalText":"原子应用成功?","autoResize":true,"lineHeight":1.25},{"id":"ZkbM3tO_jCJIFhc6fYWPM","type":"text","x":1642.0390625,"y":2576.328125,"width":58.8671875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0G","roundness":null,"seed":61570292,"version":3,"versionNonce":1998413812,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"applied","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"8H05CLYszpdSal4VtGYRy","originalText":"applied","autoResize":true,"lineHeight":1.25},{"id":"5NKKypyC9oBlnWCBscg9F","type":"text","x":781.8330078125,"y":2576.328125,"width":137.724609375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0H","roundness":null,"seed":1486339700,"version":3,"versionNonce":467650892,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"terminal_internal","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"MVhLIQh6shb1TPVjiUuoW","originalText":"terminal_internal","autoResize":true,"lineHeight":1.25},{"id":"auUAax3is3r4tgBTPmCzC","type":"text","x":1117.130859375,"y":432.14453125,"width":115.56640625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0I","roundness":null,"seed":427806708,"version":3,"versionNonce":1775583604,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"CompletionPo\nlicy","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"bg-wcr-AklVrj0BTEKG8k","originalText":"CompletionPolicy","autoResize":true,"lineHeight":1.25},{"id":"W_-rgi7_Y4HHjDgxj9P3C","type":"text","x":1625.2060546875,"y":2675.328125,"width":193.876953125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0J","roundness":null,"seed":1986638196,"version":3,"versionNonce":976273356,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"独立无工具收尾 Agent","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"tiTtDsE5uUBvXZEsF4oMO","originalText":"独立无工具收尾 Agent","autoResize":true,"lineHeight":1.25},{"id":"eyPk-pjGeH2P587ezR3sg","type":"text","x":1632.14453125,"y":2774.328125,"width":180,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0K","roundness":null,"seed":781935348,"version":3,"versionNonce":1309995764,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"向用户展示权威结果","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"eWIQCLqRx_Ns8x1fN7x8S","originalText":"向用户展示权威结果","autoResize":true,"lineHeight":1.25},{"id":"hByGw76g7784L4yK48Bzd","type":"text","x":159.0229999999999,"y":613.078,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0L","roundness":null,"seed":1229585780,"version":3,"versionNonce":2025036,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"UbyIvkIo9XNQhzP3cXEpu","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"RYNldhEGiP50Cx1t6u9-U","type":"text","x":994.395,"y":613.078,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0M","roundness":null,"seed":618791412,"version":3,"versionNonce":1113748596,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"yxe0sdoIf89mrr9unTaNZ","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"Exd2aV1qVwlgpgI1-vX1l","type":"text","x":465.988,"y":1023.5160000000001,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0N","roundness":null,"seed":2081576564,"version":3,"versionNonce":1652833484,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"oF7DkUGqUQaSri6TnDXNn","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"6_74ytWoRDwVBcKTmQWMV","type":"text","x":212.344,"y":613.078,"width":80,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0O","roundness":null,"seed":906612212,"version":3,"versionNonce":612615668,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"用户回复","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"KHLX6Pp9ctqdJwTpTf2hY","originalText":"用户回复","autoResize":true,"lineHeight":1.25},{"id":"3Hgzq719Fa_Q9Om-68XcR","type":"text","x":1204.309,"y":1023.5160000000001,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0P","roundness":null,"seed":1346216564,"version":3,"versionNonce":721077068,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"NsdGLGk-7sCXLFw0TKrRQ","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"J1O51zRM-EqfXrKtJwhWc","type":"text","x":932.2513515625,"y":1400.828,"width":141.279296875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0Q","roundness":null,"seed":161847796,"version":3,"versionNonce":696182644,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"修改 + 文本意见","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"u4aiR6IUKfw8TouFQWQmH","originalText":"修改 + 文本意见","autoResize":true,"lineHeight":1.25},{"id":"fbZ2tAV3ZETNg9KBDox5b","type":"text","x":1811.754,"y":1764.328,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0R","roundness":null,"seed":1034084724,"version":3,"versionNonce":1608284620,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"取消","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"aR_vcroHlHQZ9Yb4TEYbA","originalText":"取消","autoResize":true,"lineHeight":1.25},{"id":"VWj4lhRmDOeyfb3KjhMsS","type":"text","x":1285.77,"y":1400.828,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0S","roundness":null,"seed":1807050228,"version":3,"versionNonce":1973016820,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"确认","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"EXTpId7S7BJrkEXbAGyKY","originalText":"确认","autoResize":true,"lineHeight":1.25},{"id":"PRcBbd5a53hDo8zgTloW8","type":"text","x":1486.699,"y":2200.688,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0T","roundness":null,"seed":1719109236,"version":3,"versionNonce":742613068,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"RZHXBQc1Hc68IQgyFMWfG","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"qR-8BDdd7evgV9f-7TSWx","type":"text","x":1295.77,"y":2067.688,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0U","roundness":null,"seed":187760116,"version":3,"versionNonce":878353012,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"NGEDqqFYhcLOkpGPVyckB","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"eq85yZsqcF1Kl3GjHi7_k","type":"text","x":1661.473,"y":2509.828,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0V","roundness":null,"seed":1737475444,"version":3,"versionNonce":1208579788,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"kl5DvO8lEmpP-VwcKfqGv","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"Lgz1TjbtO65pp56_jj2or","type":"text","x":1220.77,"y":2509.828,"width":170,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0W","roundness":null,"seed":1620888052,"version":3,"versionNonce":814164980,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"可修复且未达 10 次","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"85czklXwaUeAJHqhj0YTO","originalText":"可修复且未达 10 次","autoResize":true,"lineHeight":1.25},{"id":"rMCga4mpWCAqUEK2QbcDY","type":"text","x":745.695,"y":2509.828,"width":210,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0X","roundness":null,"seed":1835146868,"version":3,"versionNonce":1606991180,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"同一目标连续失败 10 次","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Np5_Gn1P4tmMNrwnbYz3P","originalText":"同一目标连续失败 10 次","autoResize":true,"lineHeight":1.25},{"id":"nez6sA5cWzHn5XgArtXBW","type":"text","x":1105.059,"y":276.5,"width":140,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0Y","roundness":null,"seed":1996604148,"version":3,"versionNonce":1814400372,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"无工具自然结束","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"5w6cvJmTBKnaskdqfu3j8","originalText":"无工具自然结束","autoResize":true,"lineHeight":1.25},{"id":"uCSHyKfU27uXLeElvm-qT","type":"text","x":339.26940625,"y":276.5,"width":163.8671875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0Z","roundness":null,"seed":568178548,"version":3,"versionNonce":2094740428,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"已确认但未 applied","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"2vTL2JNSZttiKMX5wTfo0","originalText":"已确认但未 applied","autoResize":true,"lineHeight":1.25},{"id":"Uy8XHz9hpHJFFJXa5lobf","type":"text","x":45.702999999999975,"y":613.078,"width":80,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0a","roundness":null,"seed":362281972,"version":3,"versionNonce":947633908,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"普通对话","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Xpd5L4ayRjYbF7zttlWE6","originalText":"普通对话","autoResize":true,"lineHeight":1.25},{"id":"ACE_qp_MmHWafz3C00Tvn","type":"text","x":1915.1100703124998,"y":1665.328,"width":301.005859375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0b","roundness":null,"seed":1158844532,"version":3,"versionNonce":1834670668,"isDeleted":false,"boundElements":null,"updated":1785841670709,"link":null,"locked":false,"text":"已有 applied / cancelled / failed 事实","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"kg1Y3cIjl0WxJETMy8lHC","originalText":"已有 applied / cancelled / failed 事实","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/workflow-builder-current-lifecycle.mmd b/diagrams/workflow-builder-current-lifecycle.mmd new file mode 100644 index 000000000000..8b1c85b64ef0 --- /dev/null +++ b/diagrams/workflow-builder-current-lifecycle.mmd @@ -0,0 +1,52 @@ +%% Workflow Builder 当前单次任务生命周期 +flowchart TD + START["收到用户消息"] --> PREP["Runner 准备 Sandbox、历史、Memory、Prompt 和工具"] + PREP --> LOOP["进入 AgentLoop"] + LOOP --> INTENT{"工作流任务?"} + + INTENT -->|"否"| CHAT["普通回答并结束"] + INTENT -->|"是"| READY{"需求和必要资源已闭合?"} + READY -->|"否"| ASK["ask_agent:一次性收集缺口"] + ASK --> PAUSE["暂停并保存 Provider State"] + PAUSE -->|"用户回复"| PREP + + READY -->|"是"| MERMAID["workflow_builder_present_preview
完整 Mermaid + 自由章节"] + MERMAID --> CHOICE{"用户选择"} + CHOICE -->|"修改 + 文本意见"| REVISE["合并反馈并重新调用 Preview 工具"] + REVISE --> MERMAID + CHOICE -->|"取消"| CANCEL["cancelled"] + CHOICE -->|"确认"| BUILD["恢复同一主 AgentLoop,禁止再次提问"] + + BUILD --> QUERY["query 当前画布和描述符"] + QUERY --> STAGE["按业务分片 stage 私有 Draft"] + STAGE --> VALIDATE["Workflow Core 校验 Draft"] + VALIDATE --> VALID{"Draft valid?"} + VALID -->|"否"| REPAIR["结构化 diagnostics 返回 Agent 自修复"] + REPAIR --> STAGE + VALID -->|"是"| COMMIT["使用 draftRevision commit"] + COMMIT --> APPLIED{"原子应用成功?"} + APPLIED -->|"是"| SUCCESS["applied"] + APPLIED -->|"可修复且未达 10 次"| REPAIR + APPLIED -->|"同一目标连续失败 10 次"| FAILED["terminal_internal"] + + LOOP -->|"无工具自然结束"| POLICY{"CompletionPolicy"} + POLICY -->|"已确认但未 applied"| LOOP + POLICY -->|"普通对话"| CHAT + POLICY -->|"已有 applied / cancelled / failed 事实"| FINAL + + CANCEL --> FINAL["独立无工具收尾 Agent"] + SUCCESS --> FINAL + FAILED --> FINAL + FINAL --> END["向用户展示权威结果"] + + classDef user fill:#e8f1ff,stroke:#2f7df6,color:#102a56; + classDef agent fill:#f1eaff,stroke:#845ef7,color:#29134d; + classDef mutation fill:#e9f8ef,stroke:#2f9e5b,color:#123d24; + classDef core fill:#e8faf8,stroke:#12a594,color:#073d38; + classDef terminal fill:#fff0f0,stroke:#e03131,color:#5c1111; + + class START,ASK,PAUSE,MERMAID,CHOICE,END user; + class PREP,LOOP,INTENT,READY,CHAT,REVISE,BUILD,QUERY,POLICY,FINAL agent; + class STAGE,REPAIR,COMMIT mutation; + class VALIDATE,VALID,APPLIED,SUCCESS core; + class CANCEL,FAILED terminal; diff --git a/diagrams/workflow-builder-current-lifecycle.png b/diagrams/workflow-builder-current-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..add6aefbdf175856afa2765d835f691f78681f92 GIT binary patch literal 463968 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%0ANj_7 zC)No+3xEBeserBkB8ROC=T2n)QiBp-$ly6pP!aWRt-)|#mgE`nIbC*@u+vxGrX#U= z04Z^j7TFdQ*}rz&1$M%UHwi?jndn~CDaKVV5&OnN1)PFBadqdC{ zMI`8vkXh)&E%VioB%*L%Kt)iTqzsS4uqI5)hgbX9DPX{4#&Qcv+oE#~K~t@&bDFp( zPPHwNj4&)B#&p@8Q*Ko9=YR~;!_=c7IHm<)#A%QDEAbNAA}Scu1Y>^Rjj>B2(R7Ub z>WPqkqna_%EN<`aIgv0p70zjiL_OV|9F2LCA;Sug;IWc*TJ^9MA%+u01dy7keG4Zq z{e(UfFY5w)mE}5_doOlAXCTSmFSh#=e&~GMiHh(eY%_sONdbzQE09fgw5+p>eqVaY z5osT|?$=c#f}zd;j{RjRaI^LF)Z4PAULnZ@ZPa8qrC@mwX8!)SIz zmkIu{x9|hyXDEjvd%vco=jVt{D~|%F-uw!#i4~rrHk4vb{L9~Y5>}wsfVj@2P7-u_ zhFbS$@L~<%FfYNah_Jbjv=W(ojVMChz{i#q_}t)9HlXVDb^99rj?M(f5M?F`{0+l6BB#%6VOM*Kt5@3*&p;zr3tGuCR$S%)1xOm z?Y2&p0Frkh-2f##myXWSR&jYhXcK{+@bqr!Q2Fky)`g-VSyZcGl$h)-^1YE_9!sHw z^^qNE8j_;IeJt4uMu_Nn%N}|5NdLZRnNQd%zAYVIP;8K@?cdz!`^dtp3}PCFa}{k% zx!Q|ek)1WD0kWOrxpJH5d;kqoR+VMmCGhvHEN3b>5L`+&q3;me*I`1-XZy$T6wgAo zBRA8L^-3VVT0Q;gl2pe%X`n;ISqt|UbneE+kX#7vq~WX?Kmw$D ziDlx9b++>3SMhDTkvTC6^ev+4WDBd#0i5dwIy_@X&;Y*ojhT%e9!K`JhDs?C4>qcJ zek!&buKBuW+~Wz=7AQ-TkdPpeV~=p^U_Q*=$wZhF*uJ~+!$h$@O%1hN2)l`Twn-#bnWch7@0X8|m;Ktl)oo$oz!$ItxXt4DaU z7QC8*p*(&l#h1>`bOLbu&P(^e+wm^_k=ATr@*IndYYe^T^5ZXdj@KsRxY0Sg|2;leuddqVGpSgSW6@T z=h^`Z-DCSSeAe=h1gS=8%T6?s?$3ifrUlb5yiv%O=}N`;{b%S6 zpqJoJLifX7m=%*NssJg0laWu2h#ZTR$IJjiX9o7VPlng;G3~K*!FOZ`qxm7FW%UCVbbFyzN_kwaeEyA}bhIAtWPK08%yr zzgfMq6_pR9>ZPw@?FRiAzoOLLVoU#EznyyhP^<}ru8Xf z8z4tZ#cTR>9saex9^Dme6kpJ1Idf(p9UkPWVu9#iECBvB8Ci5Ov%R~FqE`SXF*Xia z(86d;;jx=5&f~fFbMR@!aTHs$8uUSKErfqW&5EgjcNGm#MKC8led~F$00uMNbI<%G zEIe_G{_^Z!h3!Gt2*#4fi^xP(FdR`U?-4u!P*Rdp#gx`1CqYu@8TCu89R2|>H?^Efh9bM4(< zA&i;*jKq_UaY$N#II<#CuDD}OxC!3!D-J*+yZhqQa|z>!>CYfLFzQ@@)q9yfX?x#S z_kSID$Y1vzZjb>^_JGTH*K)eXf1Do)DyD3?0N8m9I-J>1x*uF9R8YRtE3#5ad!^!# zeH*V*d&gnpg>-PCLObd}Kw(705&c}vPVMWhKaV6X!kHQEG|X0z2$+8Z4X_tO!sjZb zOOIXN2%6rQ`p^WQ*=udVPTI7qO8?HtZxZ69<7D-b0O@-w#dAgPJk>}dx54kjwTwuR zJUdgVz#zexA#vt142Y3?QN5OPx+uTpvI3y~NE6DjQglpDz?aM=_~&$fII@tkZD<7= zOr+(H>Wh#EMA0@dAXo_k{l^x|HmfKTkK^p3i$iAtVe+tzO3GLD?J4w{P-y{k1|V1? z%LRby+Hcg3UBVbX^1>J|EvcuG`~aW-hx4x5Z+4?Aie+XbaO-7n*T7Tt6n`S7R<-{F zbbKo>Kc)=!h!6OI(MQJ0v7I@A9I>Bd6d8~cH-nz-KCW15GIH{9AP5!&DB3lX^<2nI zi-I2$*_x%Q_?<`FTO13ev#S9F5rxJGLWf9)J1zfdlW$z)Q$Q@XgHEKSIoHxOQ4UM7 zj1)I84`p3LCT|s8LPBYQ#!G(vZvUAUK>Khqe2_Jz@%N6rK3TB9zf3bCd4ETS6eX{L zMK9V4XON>LgL=6rE?_~&!^(~5LA_Hm4}b5*?44f~hN}j9;IZ6&Vq=GU0v!f7B_46t zKWi!F3!mRT=%DNp3-Jv8YW>@M7i(Z4bMdYV-`?7G#H_-)IVg|FVl}Wi(h0ahLiK(m z${7h=wRS4Bn3xGXEE14+$i%kfJ@UBd(a)adCFQ-$$j^ZN0F@pO9ARB(7_SK*Ai!uIEKjggaav>7BE1#&+aGSQ2_(N?_Pt+CC6DCSDu+463uV5aT3(YD970f&RhWoZ@OO*tV2Kw$TYt$RZmXaKgkq&ce+Z9lnkzy$ab9 z?n!QLSC~wN{(NGHfBS5!4rSAKuJd%c8s)3=`Z72cd;|;=AIQ}D?PU4R2VF%_Mnmf< zAsjjj6P#C-T(`SP)P;JsnFW zw;w&5I3{@h%*~}cE>&p}mwtSO|Kt0|ZtO5COClzvD1bSA!AC}qFogeN z1CS1hM-?aD;BYRG8hSp2U$np34gcfUN9wLS+-4>P5=4jvbCkmoKJG{$l1bdDtVGid zXQ;6~gb(&rLTPdZE^TDd4*-jE2bgzfRD39&Q}T-Y0SbqIMxCP(KJvB$O7f_yd5$I2 zBE*2HFggMd4`l%!EedT2zV!Cq$&RQ{KjIell5Bl0eV!lM~v_FC%%z?X5$ zZjhYej;W);Hk!^Oe-TUL*S0m^#!s~F*2%g8Mr5K2m>zfVy(x%hFmyyFO5g}7tCh@F z0OPHAGHRBXyVf4N{u^U2$mD#P7nn%^DB}Y{qH^Ep4APp+?0$}NYX+w}7=FNxaAm9No z4JhF<7pJ?Dpkmwyj)Wtmx=LyW|VXMX#c@o9Lo91pSm<4)T?OZH^pKQBh}y zmFIREtPf}<3ir6%0Nln#oe0k2vdu@3;T)1amK@`TRe3!h5_=V%As5-1!-gLH?M~^` zv#q-E#U0i2IS0o1#k!>^WZj|nM&wr3wvDDf@FWoj&tMD92B=7FiAbxmUAv7{Me{D@ zIF{(C3i-YmC2d$fK=$L&pFCTaLp0B5Q54JB$(H@)V)GFbm1(bw)ewt?dyH0zBsJuQ z3jbx~43v?DE1rYey+oWZ%@DYpR9){X-1#uYU%cvIO(g5aw9|_LFZ9yJG{}lwHYl%b z?S!UQrUL762=l00buc$7#Nj%DPofX^9mXCtgZ0dxKk-)?B8!a7-1~cgBh+qh^=SD+ zQ31gx{xQ3lEYb#oG)lTAvpRI*H-glG#3a}MjSjoR!D|2X*!c>@%0-f)U2Z`>9!<`{ zLSca~(ta6)iA|a7a8L)hiZRp^O@T>t>R0lUE!H%a}W&YN_{@x2nP?HmQMuF+t)YyiTH z7e<29?P-*-YJhPsRuQ~b7@>K33FK>fa#^LV%sYDUBSRcSQd|ZRJOLZuS%278fj;^T zfHHaS)nP+02ikZupd2!N-gGBz!n;7PBbE#rEmEvTRW)atDWGd{0Mu|@QR$B@Ssw?` z&1<{`cy1pP8cy`1=_=#3f2CqgEz2_)XTMEO}SH|yb zrpN1`r_i4fV~!!m%T(*H4d;&j(T=qMO$tAxLC~KlmZ=(t(u;xuZvQpn6|ThU*B5|$ z2j-GjU?MRFuB?%r*kv;nuJql*hMZQqMKmh|fg)`pn~fk9A@RPGS5{dLe%4Po09__GU>))Y`s$tEa$VhdcXbY<|2nz_ zB@)EYKm0bNXsI9MXqs%q5-EE=`Q4q#}~amx^U6jLjqEmvfHZ9H4R^~aJC zj@^Ms>G@gU?btq{AJOr;e*L=&bcGbWCJ{q7UNNUbC74mTzCFo7so{G#$=Eo$&2W?(z9rpGjf_kdo@An6nP=Rw_P=CLrKZg zHHq&&JE~onWFe{V^Lb-+iM3}-4~)bhzBtEB!E1@;+>a7C7`HHk`p&1X^*Lv#f%i2( zOBc^?6O!jI?cK?K--c_uE%wQf-i4tJ0G7NKHj5A`kVPBXF7?v6f6n#Yy*;3Z+mS@W zX}2x8u6L#6!e7*dsxFd9g!M~|EJ&&0xxmn3Lg0DH0j?R`Z2N7Kna|H$kXDHx_U*t>LM7bU+vj0EYW~VTc!=S@MLn# z?|rb%XROm29Acx|^?~Rso_VO54%=^jl@lY37G4w~FxazKl0k_zVY_w}KFY1Sej5?qQQNShY9UM$A3D1%Gp3RttdAwY;R7&{~E4!7w?J*MI0%^lP_+Z_q zQoUDGSFhIFI4WxjtBbM@WwjbNun^lIp2_KydZ2r#>qk8HgK9hx&P_H~XLXq+n54NF zT7c)IH0xua)ai?UD(3V2DjsF<5qNwcz#9W(1^)AGWoIzZ)Vl9JbVim`3{1$7-Xig{ zib(V?E4ZOj{%ke9FRh4i^)w<%xR8l{nA{h><`ohpZkji z@Wj&WAt4ny6a^L0Y7IchQY#DW90g`?d!fzMK?OZIAT}QGGY)=4 zM{H#Yt23!Vde9687xOtCuTxW5zPTF9>ArrFZwWhJRz_oU(iIN}bn6x2* zNMQE*>HZDzcnsBt#?av#zT=ys^AcgdKC`1y@sxVBe|&v+9KS}RGo60JUk3U^p#tKo z5zb7uUiL8eHhQ8+(_KAE1MJnXc;~#4;8-*nW<2s>l`%0)R4yI#^REku+6^=w2SeivQ6BPO7~aw~m{T(H=05#fdciwj5H6T%))fGStS~FAhF>X>=igEhqDoIHc(#P5Wa>kW4;`}{8Jv4sR$GDn zhV_Ux$(HFF2zq3_H1A&6Itd%0t&RWNs~-0C&*nPx$pUDJ`(t2XoM`4xREHy86qcbJ zEl*dL0he?wVJm@&Dp(rXlKl*(114jyATOX7#!=ca$+uD*;Ex|m;{;LdTwgFhc zwk@hvSD|*Q=f4JAICRy=v`L0;Qf(MQtf74W$cc8QxH*`K;wTu7af44M1;#Kyqgf?n zyHTh6Uz|k0!TXT`&C_Md3H8g}_s`n|&L2G<1k9-!iaYEr17i8tY~Gu$lf8$Qu$O>aU`ziJkp zUQoB4xMNBTLCw#H@p16~mCjIEtVyBjIXn2|NR=!%vUs&Xp}hN8D>9Op0KM{dXxbJM z_(qztcx5f{yxt7{gheBjDse~v8%Eo(la_wyG!HB|#|_j)_2a?9Nd_0VkxeW0HBqkU z6}c1`5{7h+j`Ei^;a7DX3k_ZndH_2))JK5(_@*&57-#?+xB+b|@98eyg@iZ{*{W;J z!3M)m&VNMB?fs9SL9vC)VrR8B0vv%C9~}xf)Ib@H*60e~PfHgmv~-!S1xVbq5IaWp z>H{oFxO_hN!b@?6yypna0e1pw?7l15@fx<9xN?Gj-nq=%ul>b1dZR#?{L!|=2RfPK zbzXL8xz>B;5?HwcWk~q%x!=QvR49&}3F8!h(H z4A$=NgiYwz#b%qH2EwYYCMZ4_vO8rI%Up}l~inr|kb}YV!jrGYvtgqRLV!Z`u6P~=bpf-2E6;}%urRJqK>~lj4dk!D8 zjE^y)O-NKLGGGs}d&XwMe<;XtD11aCWWMj=aRJ8@=4igtxZt-E3KgpGS1^}6Qt(qB z&|!k(QP4#o0UMY>by@7g=-iz59$12^@)lI=AXL4K+ZdOjnKJ{~N;SA+&oyISg;0nf zr605<)IXaOX|QKvE{7t52%SC6+y@(%5g!0k7t}s2VoO|MKF*vKJ8X8M#I$YG6hAe6 zd74e+o2WqwC+4yg&fqBws2!lQE1}?fb-2H2vbVxc=WUr~AJr1pVRN#QOjH*0KB6@U zZjo@-^#R3r0x(U-ez~Spe0qEvs1Z|VZ?%1^j6T)6%OljqM^mGHqhk$#cDuY^eUt(Yu|Y2OzOqzz#Cjd!NfUBad6+ZF)2r~{Cg)^IhV$wM7muqh=~ zO=$k4A_=1=+2C(jm-dvfep=n$tnM>KCrSWaek-=&*;ZkINnwsdaL{-i^s5f; z0fVEZHX_b6Yl%x2-M3%#gX8)e0yl8$NU-K)Hc*JA0JOG%1H)R}o_)vsWzGzNK!VvV z@x-LI)+*$R`ti z@O`;TYuKH_eSv4vhbD!sH2++{*LOpGePU*z@Q2O=TW~d)Xb= zOPIQ)*=8Ux#6_8ZZ7e80zWT;(C*IN4vh(V)w=y~Vs%v35kjeZ+%-6imF7(X0|A%y1 za&G-WN}IYo+A2yQI7XDRWB*(53p=tPZ_Kmkxo!q9tu*aTL5Wue@k79crF^vnLM-lm zS@V-CgiI#|LGpmDx$nrtWM9AkfdLRfa2DRQeB-DyE*}sMs~x^goL~6)AnZcbrbEZ! z!gS8hP3$xsXQLigX*g?ued|ca^h&J5XCJGV%k@=KXIo>MBZJ4&mw6|;pKu&uenD@pyqBUF42Toz`h~nJe zmPl7%gUr1q{JRWi%+*^k%Cv)kNZwc+0w+zsDG1d>vl+n0Oz+N?htA|fy za{FwW zSz-NeyiVIwis~?@{);>A^e@~VHc-SLU~~GFLn4=b6vks~iXtMSHO0WKWgE)N%Pg2_ zzDkEZgjr9Ex(j>;Jw1Jv%5v!V7m3l}O>_n9Im{TO5w*x2H7V2d}T@V)UO?o{2`d;rW$nY7m;7u;5 zllVG0nKALoC_n62{|wHDS-qGX#;LP~t4UTuP|#2vj5M$djh6B>IYWK!tk{G4IMUco zU}8jRbCM5Vs{ti-iKHyXT};J?o2H4t@L8Mr%Iw;Q#s$GHzou9ls{ymJ$)NS-Z!Yoo z%3gW>{CZNYq36Hs;R_@6gY_-n%(pgwXfNV8?-D{_1?Ao-shqg+6@n&xV_vuGlg@z; zPfXty7qq+6VV##du5nI%W1W2|8=O6ftx+hy4N0^kL%i~R>@-48rcD-NIe*X@P&IaK z<=|GOxHKVQF&{X3!&E}*eCrmM&>*Z4wAXdY6Jg`Ro$PXV>hCByrur(ZQJ;8dOMP7k zV~f-3=8C94Znw|^g$;9W^K#C-!}hN`uO5@F1tMGm48Hy1^Tmvtdn?D`{8N&esc-%; z?;(!Vk|vyUmhj>Wh9+aE>%3>-z5Qf4fofitvLVNb!y+*_khAMTOE<(n$^KiL@8{dOklFX)i+O9p*i97kMl9>K8 zpP|vvA8!D~ch1-?Om-mPwZf$N6Nfy7ISTMTDYWbDakcC}ujZG6$SCUZQXTIoJNQY)RGYR< zDJWzoFpN#u^EaT_kvXz^-rcN z&BEWY|GR?l8Ju%$GVu#<3L7QP7XzY06!5a3@S8T2v=P0G5sFN2Wb4Yj8H%hZW^uWd z;Z1}5V!DdJY$Et$YlKroFhk0NFXui!t}vEd?IhR@ZIIh!#&-Egtf{Q~G}>$tPMdwrt?h`FH+(8GeTNioO`)JBJNF1?xp4tx_;p)RpFyM~yp|T3S9t!zEAGm05UCK6 znsbu1n@MjpyzCX&px4U~V83+a+5cd)@Gc(;X!1sXFY--xdPHNW!2l|6UxQB{gu)Nk zc@zvGY^8%r_u^olTEOAzN9QVRi8J?c=f!f?Rp%Wbv8sKOoJArRYy7OOZ6H&OKp>Jt ztJq#0f;UC@@3VgsyYWng$%h)K6NJ~VJsj5iiqKrkt86h(w)AMreQ?U1v4RDmXJ}@C zXMA|!0N{{QPR82g@VW?&@={ON@_|=Z2sXQ!Ku-)?pHuAlDpaS0W&Z`Mw}0m69e2-@ zb)sS5SEq~r&Q`cx6`8PI;e6vg`C#1lEf^n{P#ZsxDHwO6o%LRzFKY)j293i*LUt5< zKW}+aFLOtK$MSPDIc%CbEV)mT{g*!|V}^d+IS@iN(}=fC1eIvSfB?lyX_wdmZe!u) z_q}G<2Z-V~=_baUvj#F2=8n(*wYbV)?b+LZ0MDXR-8I#q5iQ7h=e58vyM!EuGb#PJC*f_u!A?p}UpD-(Nii@PQr_erBGwEZ`FG z3;!tJ=%vF1ZJKT7!Y6u%cO1?7nrGH2KmaU5h)cSDikZzXuo9*tTpXOw0aB}XDa<9a znf^p4;wswnh#j#J^r~S1v1F1)j~vXeSoVTwmW-XIH03mI8nxqXXIFn*hjkLB0-u87 z?-727f>Fq?(sr{?tnt$!iEY}!-jZzFYi%`aF5B54F|bbP#J&Kllf*US$fP25{yExL z7#fdHPBzZrjz7Q^U#w0>w!_+CENqZnz4vkqiQU3yfCuXW76nlaSWDX<;<@k{YLzJy zY>bBIxbl(vTG$F7?c~SGO0I40Q%KrZ=9BT?$^ZJ2FqS`BG16IHW<-lIMvkV zQgQt?V5ra0j62igamDFm0DlW1wv>H~VeHUs-|R0%k0+cj(?R9JH0=NCD1~D0<11Yf z^_2FS!qMiI!O4=xnxaowzu}+L`HQUVLh4CGhVi{$Zu(pkpL4C+#9ZkXcRA1HKXB4! zvS=|rf}2_?bRadSky2`i7?XmdKf145(n5V6G!^AQuDp<`-|c<|OX*c;pv#Qwo}-nx znLi+K>+-jU$MH29rCtVFu7DPU@nc%3UnV~zj}p;Pf{)!x7V@(S+8x$goj=b4?Xl(E z1sl;kZ^5glx>jOwoz--bAoO6~n4A4&z$_^k!lP_!#qsD6_MSNvU8C2;H-y^4YxxSxySd}a}L+tX0YCReGM5xcF#8%;f!m-;9hJWGR>i8GgP08g=Eif8?$kvr5POX{%~t_eCPd z_~Q-mv|>nqT6~{{wQ#2Qh_il|ThMfy{C~^~hfs^{0dG1sG5|z!fsZj^@o% zcWRHP4VInFwCtp_Mv3P}-auF1U=Q#;f*y%UjcnWkVqyr@fOcfAXE9UzOmQiDBldP| znjt}S#oI16FZ+GO)p!{ zlRWu37YSs3h}3uBxuyqAxTZ{=CI7|}V?wOLTnC6fW5L>J)4A|{C$&b*ghu>m+1*xd zh6~1L0=7JCl-iH95)a+Ea@!;kD8oxYhaxGtn#Kf8gSO)j=r>8c%pX|CECTdTA$*(zHBIw<>HiD8~QX;N9F4 zlaRT_g<(|!&kV;Cli50U3HW2QejU{jlPxQU)ty(w_@8(ka^ve!$qFBK-%je8b|a)u zxj{0Meq0Ez+SJ!w-wjhRB_^iqJbHt=3lhR1o5&WJL zF-%W1c>I6Bo@NZSG;L&(DdF?2(D7oXjv6u>&{a5pr<@yBT2K8h>6`uaedR4Nj2V;# zz$am<{%w3sAhPPx!xgwmIhvY(bXxEY12iImF+G1ywel<@QTGx4EkID|;P?(eo;*YIl zZ+I}EZDI>NxUnaDM(Eu66tTyaKiC&@tmeSbM`)qNqUZD@y(lBI65Y0@D^V6bnE0Pp26NjHlu8nmy+( zOHvZrV4Y$4lV1~~^=QlL{zV6n;wArAU+bu7k)L$? z)LIU0c@55qCj`KEY7UFGf!rrO#FtskHV(bKF6T>W-%kch{XTk6HNLAs^A3=p?=Iql zZ+BKdB8$@6@va@xJc~09f<^@tEJK8}r)5GzsW5enK}`##HkK8t)EC?2v>uT<=d&hc z%cF73&~D@Qt1Z7O!C$a%PASFqZaJH?mf^w56!$i|yr zn-_(tNB&?!0WDkaern{vidvd}#`X@0c z&R9~L*wtDCCz}Qu{OoKgG4()$p?XRq{W>Mzj_)wd@3P>|BPT`zQVoIpm87RaYF2;q zYRj(U05o;B^dxjlpFFvrE=u431vb(oq$DCnnPUpHYUv4fu7Xct{nVA`;cLTJBA)^! z?lFbZ&mFc8JW(EP&7_?x;mKTZ-x(pj#oSo+zVR+y+#F#-o!^tGsk@j zwDz}2nPYzpqY=(w1*_Uao`n?~z9zr6K(!McB?&y0n#?2ILld$=rO+XjC~%RNfMI_` z(Y{w6-&6Lox~HuNPv>63CmO`RV=EF>G0#Lo#Wd?j41NGq=WXzAT>V%y5oj+L>qQe5 z!ssS0&3cnPU<)>+`^7lQbcHSX-53A#!bKE2+UOn#oU&uJfguD|#jO|ZnD32X=@b%x z9j~ifAg6gtV8UWmp9i=Gc3xHJcg40yOJw3C2vV+LcFTvDEx(0W7-mizTcpFfQpuOr z%kL|UWi%MU{FJ!75XY-C?2()_?GHU=6Ww{Mi!d+X+Ykq-tJKRCHKzk^C(Tdf0j3b} zO;oPxltOHP@z-A0h(Q80e=<#CpRR$fz=Shz{)hQLlVd3nFR-y(IEQ;qzcw5lSp}V> z7HHSCYH!2-6XFk-S0(E`?F7Ws__}+u38yFG)I(M3q(&6cN@6rV>u6mV zd3${QxGL)6cfS_+NnnSFE?$BR=BLhKmrO|ug<;(tkC4GbSU>KeRdIp1FgHHp3J_U% zE|a!gWw?+B1)swiqkZ23;SO3(rwUKbDEjrMV$K?P#QNo0fAfIi$R(d6 zJyv@Syx;Q&oj_}8R1*fE71~IPx!TrEAI&T3g^5q9xmxB-=%&3jJVU|6#I#^^=G3{S zWp4oZg=b<~<1IfT#_6mbh9frICu#+h6Nf<|o%HVMq4zIdPnwPD;%UgkP5vUQMf(@yyv{Gx zs~$_2sH`tSvX2Dx`~@}*V=gLl{xA0xVFfNEU+d>t#&{He(yQp1*$l#&Q}LZ4qG;}= zZ@<*;@<|YQB48!pbyk$(;&msmUlKM<#l?4@$sBL@$iI;HMwu=B+bm$iN|rBF9#k8Y zgnoo3a1khQhb#f=v=D7Ro>@#THOde2W^>9_y&_EQtz$A(HiHTnHeiun29L97Z9bdu zAUkX8?cPWT(`%5)>K znWvQWzjCx53KWu6gCIfV3%+VxmC^QJ5QhI z$N>XWObOQ(7UN_mdSbw_~r!ejxcR zNT>@w0N1H$y|MI4+dBI*RhId_we`qV74dfMQl50H@ljw%1pO{A+{!lA5O30^6Teax-9e7=6&oc5gWXnXN zVwgKdPaH^Les%sr_hG*2u~3I}>5Q>i!KEA$1rc6Y2sb8GL>7II( zUvhrXjs#;wOY;^JaVzWCrp*GrrRQ4{wrXF|sxn(S=gZcMy5d!4u-%Gv&2U=eKG{?4 z?SDn^&NHN{OCqv%12=-rs7Ig*c{+Me6(;jKY_jR5p;C;-&fR55xhzy zlwh&UwI%&FY#MzrIpgi8yZbMIynmpeU(hIG71lL_M`ISXY4M8_Aa*SX9;3Q-5}`i- z_ci86mf7~|QHgkM`*ihWN#Fjoh58E>T-P2`-BIjD(&Q&DKcYZrO5`^EMmq=q#+KJ= z(2%sHiKMh&=(-`sn&~nBbi~EPgtedm$tt`^Zr~IN`<>~Tt->(^5tdzSSvz}6a{xyu z4~jO?dAnnu@F&WXkoc~TZ|)IE%yj(-JpB{kQ#~$LxfJzr=D@#RVD~pt`!!3ARC*pc z3gv2B(%kF@<^O!_t#{YZgFGvyb|yOpHZDsFd%<2|bf?SCtO6Mr(KUqcN1q}9GDIm< zefGnFx$oOMyG2KC^hjo>!LX~M zIHg0im^U7XI3Szwp|mFT7m0*g0*K4>B`Yytd&t16g0{p)_!9_Tz!yGHW>qUGD%xgo zBzTftt`+QnpW6XpzJS*dh++6F0r2^znB_twplTP_k5A>*K{#6syw>K&v>yZc&i~JI zwk1al8AW(+kua_hbneQ*YKwxx>C{XX2yo76Yrgmk9l^sM-H&!irAfa93QkYuMbL2A zR?Gqt)^stW@rd57y~G1(*8x}8P(lhTY$LD3nL4br0BQdkXo{rW(mQtc__&?neUqzt zsRCNIhrjHxEx&+iy@0mOXfGFNMOVPyI_cmi5QlB`G33+83=V`zELr7YQTM|CJ##+2 zG2m$|z_uTNuL+^vu;RI?eP0UL;O&So|7U0btE}|}fTk}BD*}Pf5Dj6ntuEz}yWn)} z7tOCV$*!$}5GX;KyV&%u=Y!!GG(#4T&)>XS{2NxRdH-5+LPdAT)|b-!tTM~hm7dy_ zE|tz|?;KcmjyAht-oWKK`Z9jcY`gatpdtaiG79!4xlHuc8Z#!H`ite@^~f@pP^~FM8l(#D1EkV+!42l^XtAH~*SFLlm}&(^ zT_|_5z7%lRfIrxz`7VbFC@^e5Ljh}t5WARZ2moBenp?S$qrq#E`Z_I@mswhC6z3Ge zu&O!{ExM;S)qk+QodeeRpjBLulZ9YEwdBlAf99PT$)CFg0t`S2$mgG11eL&#ddIvp z`Fm36r}u7|f8GI+CKKv(@N;0(&;7``J6Y2DDZD-kq@>9thQIGT(s(z7e}zVo6w<$Lk?Q`i)|Nr4WuvAT; z;3WLm{v_g&?T!c1twDft5IKDz+fcOL&9ew3u#sMHc6k_Ff)c3SQ==tah|e_GS^as8 z%nFq6Jx~4I>es(NivtttQ1e47k%(@H*v4>DaonW+gmd))GDU||l0nI44=NDhpmIQ^ z@AZ8n+d2=LN_-R9+Z@!`1&9$FPgH!Mv&I6Tl>!uqz%K^!;(wm{?p32AC-$%xBSDLC z&=S9{eNq+`crpT?sz1Rj^n|l6J`J3OR*G-kZnTObdewy%G?Vy16@f%zA-}(ra=`vN zL_-D_BdenPk)f-=^K}4f9*25}608QL#VVq$m&iJ@Ml|Pb@i7_^1vo-;%kQRV*s9Kq>o`0_5Y>`fLjEZHY60X>2plLL8vy6NB%q; z47|9#Bvsb@gCuu+$yxGjx(v?5MeOsMY@vrmm7|V|Xs-a6H&A$xJYSoj{q*`KEwI;R zhQIK)BAcYbyN{uXq7xENQ+B&xI#!A|T6Z6E0f>+bs6KBTOB@#O%l~<5UX;XheTGzo zTvc{xUvyxYM);JJL1*~CkqiCN1v8SINh!-m#Ya>e?&=HYp>2}LHMW=eS*XR=2zC^E zV<}JSToflBa!rAigfuT@(Q_*l0MiI*WqA4@m?#u${avSpjxc=HC20b_+5_aK$*7=>HE$TBkOSsS z`jfQQ@2Kit;snG*=prqy4HQAEw$N6nmfk?%XhCcv4^rQojR<^B=ap76!K2k43>q`l zL!Y(_m*Tgf3qj0QwCavI8#vsFkUj)~q?`QliPitkmAq&ofppk;qtwnn;(LB>ltt3h z$O!*k54hcrGd4_y_A9-dhO2H57$9Pb0)zAOu&G=SGpr1u?(QbO^^Q*qZJkorW2Xvb#p(2ot7NOmbMF8sr5@pw}&e3p+DhD+P2K4{@VRPFCfMjyA2g z7ysw+9A+*c=QVtb{E*>OFW+grkM7d$Dxg14FD_!38vcS;aa}+^C;1rzBlmGgXBXx( zR0K#s4?I42^sr8-w{j$8>_{9~lU-_oA&V(c@f;pngR2*!_rPOL(+r@V z3H^5l;3^}v8n4GyP%UG=?z7MIScO%4bahx}~D!CuCCxY*(s_D5?YUOoDAjTbG-HSH`D6?f0+3 z@DhpyWr71#GI!23sEDdRt2{V_JlfG$fFf~{@lHMkrw(A?nj)v)i6g5b=joxLt*h0&n$u@x#z(Ie4h=j-~%Uw!Qi_?r>k^eMKG}O@RmdJ0QHpl9lvQT-c10-( zsYuyGL&)AllE}4ZW^(Pl=l}UO%J=;K=XCD5=ksyj@7H+l@puYaML`MH&6Bps1Qg?+ zuUr0j&g3vbz=sL}L`TV$8f%Z;Uw9qy2kFU503^MKnSP!&(zEoMwkSk$ZBtUoxto9) z_=rJV2*M2GABjb+|E`#YJvMIpaHABE{+;q`NcFvUT_fYyy;#7eM}oXwiATp~2D3^T z4iVh>N|SF0dP=?JwQPKH=pbu|^t0DP`yK)+UqbTrbV5=)QfmrYzgp|Xb9>N&hYe>_ zFTV{ivIGH~1z60;!i2eENf8YU29Cl_2qpA+#{NuNlN0Z26Z)t7pjO?ymi;Cl3ZjlD zIFtG_*;BQ=PmHP#-cDxhONFD&RYyy>zC@zGA(j@ig6<{M?Bm=Yvh08&px=(w^Zt#BGLXHY1s=JlKU8PYj!*qjZ;6ocS z^z3-8%%e@6(Ya5rDhTH@YDJ^e0~+=!8JHQEf)hK1+-6qv8Q2 z{l^kM5RIp=!2vI_gA)4Ih(Hdi0pR&phNaK6P#Ajq?&bQh$efPaTWlzAZ*MhAZjyf> z49IkjlJrVw46HrQCBty|-!iu^5!Ooq!o&lLJceNgyhNJ@+bYx}vj46`i)MKP-E8{% zZZ6oOoW88Qu_-wbK}(|wNJ`LlM9%VBy%1(uav`=kyJ#B(vyOQs0Cz?!tkX!MZ#`7E(CHI^8hb84aWT@dF=S(M z${#=R)ZYPU6woOPkh#Q=S4&7}OIOlV(A_Vh9$}`azQ@Ry-ZSUIH^ua<55(vwG7mDkH{o z&0{*J!Qxa|SJ1ogARJV*YeAX6l=CD+Kb>M>fO;&G3c%16JA4f~+6u7+By@|+IU%lv zcNTv>ZG5!_YEYhnX^Vha1a(9>XT@LI$3Mh=_wmMFoT!mZyx>ay8stQXL8H_z#ibv_ zU)alO|2oGC1-b7ozdZ=j2Wrf4?~&45rD^315x0cy?4Y zjK<95VUZP{lCEq5w!a0@$G%FqixOV_0#T$5#AC3Zp$Ei5I^bVGTpv6x_VAlo3Z2J_xyLCFU9gTtc4Bt^h;%gza>(Yx~(Y6_j1dJG}XxWADu6IhInC=c5 z2V(B^DiNSDsX$v%kwaELODnwiv*}NI#6$%|p)$x7`T$^HKgftv>>CU=Mfh)i(rz*h zN9`zG_;f7JpZ?qZI|eMiM8TCg0)`Ipk`cb z^|&HV<8R9rqb4S&6Un3|xBvq5-3&))jS-lc=WB-AgbEOF=bh#Nz5)SI;*fJ5Z>NNo zSih947*vw{Up_4I!#p&)hJqq5@gV7OL+HGoX;5XEc~84fu0p>G(z0Sp6}twrRIE;q zS#d|Nge^Ep#En>mA@h_@`j?AK&ki?mK(8?^)GgekwE@+CG2slU$yu~C6Vi5rwA!Ab z!BxKpSNcCua|(pS!Biyd(%FR;-sADJXhridZEO*XNsb7Q3OJt3<=1uorpETPEjtA* z3UGY2Y;y0moNMhe!cVqhQes7Y0=zXmnPRb9Xk<_}j1@t~Hw>XVA+wkWcXI2gTSFnz z_zQ>rYJ3Q~mHQw*a|T?@`c!>sC0vjO%?m3kEK&qax?MXNCrMxP?HZCG@ z{ruC5OTQL}z+FR7m$?gFp>-R<7lP8qJDU(t7e~4fb4nnB^miHXWm*PhVMcVTYE zIV0&Gh83f+Pz6ifV>2tRMOnaWWzW#fyIt#uDq1GPe>1@{Ho<-2^-U1L;0H-*{b+V3 zHcyO3+If>1`N*eugfWO?3yoUOcrUSYd>E<;$5yBwnVF0M>=qEnr-6$`4 z+PK%*v+N}Y#IpgEW!rMz*}03XkC+H5-Cdvc*r|mI{`XdD(Fls=#%tWKbI(LJ{p zEAa$R1t%*n`?c!l#`L)l-rmXOoTKH6_rN{sgiY&a9MN|m#uqvGrkS0?cC4> zkF|+h=maMMt~2@CiZo+a)R)UVL?SleEyr$Df{eWgP5saD4Pc}Ng0{Rn=&-B<-CVL` z%Ont|yrRO;J+52aQ1i%nUjGjg3;zEYvAHIDpDy}VWxxZ7ZE}DkFbptU$Rx8~RBVF| zv~QWIGt*)xn;}(0WGab3g+f;M3xI+9sXg^R*P^ntQN z$T-?Fq-C$O4_L`c7}V7afR|16t_K%8sYTRjl3yH{Yf_%i-C61GCsN$d@D?3^=4k*R z;ITmx00~(^Bx9&?17-?Oi{kfQA&B9QEoC})6G&fAu9K!~D@4K0)UY&xKB(dXR%xgO+1B!U&d z&Otzu0a+93V=Zlaf|~8jNtOqlsG>b*)1{s2VXB2H65)ecSkJq40UokyvaI|QA;eC= z;p8rKhsZW}Qz6(T?{srhDPshGIqnRI_)C<4u@N7i>3N`)I%Yz)>3=8$S%M2WzK*r` zVuzU)6yQQYA16!Dq$cwav*2eId^$NOv<%MRbetGSUU2{Xv04^aYz=a)qbNHg{y=oX z8p0CLBFd>2f-%q9kv4mus?@eGhAsVBw~t>#IGCgShieI6m-6DTtuq z2x^o$AY8;Od&+U!u=#re<7h@fsje<*Wnx zCjl#%sOEuNFRvIoKLiFXD-&+b$jzVto{|&7mn`6qRzQKHv%}dPEzDmI&zN8dN6SP%r4x_hi zyoe`j{tz^iZA%e1bn|w*_KvX%ql^LTAMwo))Bx`DuP~tbB|TUGyd|2OVr1mVsxI0< zxewy7|3Rn)fe1uUreiDTpX4mfxA97VGj$XKHWi@kp7Cfhb4WlzYaP$YBH4{)$)v5j zD*ukd!@sPN1V46I@BIUNWi#os0a%(GF1fD90N%Py)f?z$f?eYWio8HIs6y(=c6RXW zI!rR`5m$Kn-44ki7-Hp>9N5D$f%FQGj?f{W^zIznnZfr=>X&gcA z1;87o`hwT6Rbp!VT|g+{(mn?iO%(aoECo#zHJAOSri$qmbq}XiqZYE=+bzo^ewVwW zg~@m*q@651fRwr8Y$1?DW@AVipkRxti@88tA}+h6wGE<7X|S=reqJ8~Q8)K-ErZs3 zXEu>h)mhY7NFN*(pZI#MV#Q=|z5qxym%4s==QTy)n2#!O5|6P?R0#d-+z18!7{x`z zfhY=ADEA|Ix{SudvtRiA|afg)H#Lze_qcH##c`p^<7yo*1iJe zLkL1{iXryQpc8O#w-<3rmk)3gk`!@)SYpG6Yy9BRwiHB>s$wU5OOc_{3}e$s2RQ;i z2KB>15P$Md5G&qCjEFML$|R;v4;Z#&dGysxnnZR_#Q&8hbHqh6-xy#7#tGxE`GT?@nI?HUAPL6GGW9d)-lQ|Qt|tT=hXDjOnzPeIFa zKYh{)Y3VrRaD*>g^2DiP*Qu0r~3dxB`>*jQ6HZ}BuB-oq#yvw6L$ElGC>y1z= z0)^8=&~$C&RocUf`a7w{`n+?`njd|sosPqQr=7{eUBY&b5jB(qu zBH8;~(SX<)3=_5yfPv^X*M;`Wh@c#`%}WzOv<^=qWJt|Y-gUQ8SB<-Zu;#9bP;`S7 zHOp`=ZaOktLQ#?20jh~$l%lT@?BJC=sw|!b{?Gs+K`Z&!@S z_+xfv2}i52LZ3Z?H_ojY9SAuUx9hkT-5N-~T1F`KM+c4n%BQX+vql;K64m;nH6+Z_ z_^<_ry~d#lwYz{Vu4ul1F&q6YKM1PpW_+a`d;aS zD5ius0Wy=J+Ntg(fB0?s>-_(o+Q)zvJtxeez!r8tMI7u)B@?=s;3*PR)sGWhhX2>d zd!+CPtytWM#bP;^tsq1SK}eE?wX8Ve5KvN=r$2M?@)9G1-i4VF1e-*)XlHr^ivnzo zO2}*?$-^w`Zh8nt&3xu~-@l)~T@K(^1>Q%E-@nuoF|sbo_86;4z0HRI){3Zc2^19D zsX`|Dsl_BryZn>)(6fYV>Oh}sK*ACWb#gGGuO*x(86hC~00LqXp58${UqECdQM4vY z2uL8)Tjun({?~*|qe_2L$3spOXLm@RQ*CrZet}U)Zf&$WVYi~<-(Lf~E|`b@P`3NA z$DY_SYjg!IbL-T=N_QK-5!WgFOd%UL|N? z>F(s20GPWyx`r>mE?}0bYaJH38anFq5UO92xy$)KJBM+{Y!^RX-}Z+gfc04;xtUrW zQlyq66~Ei-?kU~{XiNml4B+%>TEBG{Y#L0s5)qF%C16(~{K=)h{Q` zg$ayMDjkAI6jT8JYy?m2>L(qT4mIMi@W?kA#*027HW%OBSKmkU{rk*pdBcpt&nBNw z;827vh0Ev9&P>qZK<0g0DVcqM1B|BfwdgnysLJfkX&>ykdVS# zJP(u4vCMdd%O0~gLnw#2=r*wn(qC>Q} zV!XY1Q0`Y;{l&&p|85<+;Z+ohkKiv+$4XBC!y}QYCFe7;>6}1)VKM?iW6ejlGb(EzkU@iAOhK0|7}S&i1*(sX?fs=nZ5bZh`NM zbOJ#!81vB580r6R>=W{;O*lR$nJd}LR4BLoo;Ns8uM|KpoL23EjD_0_uUJ+(oFC)$ zTg>UQ#S4&%fNEM~5QCj8AoWrr^CqD3JppbEDN)huQJvV2T?$Bu=U9jPIcgawG4`c| z{m-v^JqlNo?_zXJ86N-%c3SKBF+7@Ork0#eFd@>p@fY^D^_5AYLwPiVz+JlyJCB|G z9a;SDnkGl=(Zib3x8jDUAQEy90(UQNb#Jm_M@!JU}(5PnxvCuVaMf=@YmNFE^ol*VrakQ8!D0&Vh;x%3FeAc$)_ zym9jgIMHV0Yd0K%-jtcXOm)?lf2E=^voijf^|`*#Ovf16XQCY=b^0(q0{^-FuZlW$ z%o>O{9h#e~#8YWyk$7RSj3su;0qWn7nH=EB$a-^#7iWOgE})xJ+YAv>&c|=u;&!6X zge33OcUB;$StcZ9D8Ym_l~Q+b+T>%K=~xNO-t8}dyvg3ECBRMuJZm{2y*vzLvt0X! zMH6?4fwtERjDX#VttRiIk+BOvFK0l(J%b@^>I)a5_K=vV>bGV8Bs*(EhyI{ZO6|*) zakAP`G>8yv*LFBKZL!@L%3KTfaoaDC`s~r7H-$M6|6#nhlm$8{7BimR zkuc)A$>ex4MYe4bOOfY1#SF!SH~HRJb@CsEY&0Ucph0W;d`$L!H?-_7x|!t$WytXO zu}0zE;QuT9wr)?!^;xBENd$Srrsa)tBQ)zB16lc{3W40blY(3h9# z1Dr0Mt>GmV$-os)F2`V(q;d4^6-Q`A9MPGyHq6-C4jPlEl^*z+>v*7!1OA&$Ct{V<=@z zUx%iKgQaB(4CPcu0A3$6gDI$W-`DpoygtmF{ORu6k%yEWMA1u?o~THO%REwWXY3Rw zSk!*C8YS$q*kr#BADBL8unyRM_sVPAo&FI4^ zK~1_G3e%SVjc>(Xv4SrDAIVJG5T#aDQK_cZl<9ABy6F0lu$}VnuF5Ka9+`<26=z%z zN%&279IC(SgNKTyiM8CL%rXnq>uW~@b*{p&#?fr4_ur*}BwHovI__3OUW)^INUN_O z?T}n9^C6f8s8uyk1zZ9G0@5n?1W@?g3eJ=}L{er*NF23+tEG}#!{#UQz;R)w(C?0J zFT|&evi=eljrFlFp9d)Z9G@e*Ua!jrY97QYD1Y20P0_6XJ;SxSADX3R;-`#(kK;J-yj?%_w-p^ zhjG??|KkcXrWTE5OE6x4|Kr}vbTGZxDWSe%P{YE32X$5CRp*{q_lHWya6IQqFYHDW$4oeVGZ)@l6>@$qR}^f>KN8Tv zbU+51>u**HB+5U*tE~UbUoe6&`7;^US(oBjWJK59=67sJfvH>f)qR|UxrWw@n|sW0 z&#%r}j_Run9!kM0vwO!43g#v6Q2|!tbsLm%Uhn*gyYP z5kZ?bSukb{Q*I*Uf(XX>K&oKp!V+7cKRJXEBD>nS_u?l`oXCJse?CCba>>a2y3%q{ z2o*uwhqp&MWx6Q3gaPA@!6$YDYLUb9oq-OEVMPmLXPM>3$Z1k~@9H4;)~=3eW#73S zOfg#2#q?`tahcT`@ve*Fit!7A7bPK1)J3nQTYRI!BM$~ zOcVUDvtIk~`q|-O^O-Z#DL!+M>rI4$WP|s@alS>{GUmG;{M!XH;ta%KSYeH>*L#Y%w6>3vY&v6x(sV`BAK zT;Yqw|3^}=Cs!W_i~7D5$W_~c?sHhWov=Yj9Bt)AR(wRJ6aaVaU{rxRSfZ9fXXf_F zkMFNA{0?&NKPH4BK(}IUwt0gmN zY>E7Vj=QJz^z?Fqu;0IcdJ?gpf|-}%9EF+W`+lE8r^YCiJ50+>>B^WhMa?w*Nnz51 z>`sHAUJy&rOOxlq=jK(g-r;jr!S9*&?qGZ8%bKyki5XCOwsn2_hcIkM<*P6@g+Y1& zDm>IdKD~vm6l;N(@&BYYMS7A#^8*Q2N5vPzYB<`udPy@OMKgpCP&{ zO76oyo`pB{5)V6cAut&>$C9t7kxKn@`31b_1g$|@X&1kKE))WN>1!4X$sQEo`6HD;12DGtbiAZ-B zRI!}{t5@0kap;JzWZ6TM=#I{Y_YmvhlSYLH@i>tE(!?yerC!M`EH`7)*IXW#b-$~K zhaZlI-Mf2?Goh$OKu}N^MEBitZ{3~yfcGWyM*hS#?WMb;Az%kSJFJ|_h|{V^z8 zdqHr341F<;AnhY;!MRT4*KgsHWksMiJ{Y+3WBSB6B660W;B9PQ9x)@x!ZOLW>tlTV znJsn16A0f@5G&)a1|o~-ll6hdT51{h;4U69N|`mk?$wvyDl4mjX@#>b+QNW^$HZUJ zZi|NH1UygJHCjeUVR-!Btz&tCc>QxGnD*@lfq3&_RbYW7D}aQP1N>Rc{Hf!GXQvro z;WjdgH~alr1|jfv8OoJwCTqxc&#e!OnkU8II>PF(*lTZ*8%-(KH4)fg@K?OD5DrtL zqUq}UBHri7PL0>l6GwZ#x9Kl{E(oQ3CN{2VPn)*8OOEH-`(^_*~50DMXjSXtg&HrqV4;T90>c2-b;t zO303_s&1UQMCEFbsFHiUI-=%TTu(YIj20w7*6~04wAQxf{c7*vkOlFXf+!-3y;wkV z_|H7c?(q;upV$efIv>AkY<^44??St~emc9Yc>Os|dt$B%I0RV)QcEc-Z9 zjiSEZwYq&v5ywaw=%7*7|KKfJuYa!N%B?dvU15(L8aj}=`1x(VU7mLMerux{0x;~-1mbqV(=n{c`2Dj!0w8&S5m)BS3j+td|%!> zY+BNht@R*!k7;1X?H3i2yMS6^Np&@zi?Az9M^e7U>)<(d?A$4v9)YLyVh2N*-BaJZ z*rPE}icBEY$085ugi88E<})fT1K8-|nX)ca^FLk>k;EsB4rY`L&G&8ZIt8{>j^wpy zn_;K}=Z0w43urj#o_l$T04OV#Xphzuh@)00+VwHh9g}7uiyRmX9r_(=cUzX62zsof z>ulmvo%2^jzyXOoDk$G0e(Kb9q{qtM1{cdJN9*PBVT2xKKpQKy^GpvO;1g;0yH06% z{h98ve5Aiy!Ojp!NtmrZXD35Q&12SuO^n1+Z zZ6yJZ`U$6|fOn8W>OkMwr8yyLxwRFNB=?=8%u~XgM6Q^Dc=!?S`**d+j~{Q0Z?c{^o^ zq8pN8Y<;Ie6Oj*G7Tu$|K5qN~P|Nd#qAsnnP|ua5Dd5FTF=)0y@@Udwy#11%IyBO7 z2?=Qskuyi8r$YR0L<&+7XW|nQer`gh^Eu36s0KS)2+C{Jmn2SYix$MCI7Jt`g3lTo zH`h4hSBG!=fgtBeHMj)bEb0F_?4vKAW zv!VE|rm^eF%6>5ZFygncK@l(DDWB|LfW&yCbfDEf;>$Z-X0HNvmGSu(U%wr1?6Cjw z!jjPEYky|YB#%cc&p7w=ItaV|vw$VOV^gom>=RQrU3~`Q?6rcHODzO@ZR!7; zMs*N^Iho2@weOEWmZ4z?njjPjEU2_Jj~LB>uS5)*W#4wYEwfAqb2rn-4k0vGQd^(2TBPi(Bpgrw-$;12P1-eKeR) zTU?bOl)&(V`JIxg7!UcYIhY0Q}4Gu)*WHx zlLhW~Q;w1PO%n6vUqu$LDC7>bx-O;lG&1aQIG&FJRefYYUxz$a;!EZQ?8hJ-=(svp z{?5$5f=#^J;rZ~@uJEx?qFS;l?Z g&L;1MFr~E(!CqO5W@Qe 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 z z@rU1(MdOAttiL&Ao#SVn6Nj$$GKSB51bRGgzk?!Q+wq_(U{DnAM}2AH+GlAdgtvb! z?eqs}eM$dsF{n~#& zCdEt`VR69pg$X~Y4mni{)kJ$kS7Grx6qhp1zRas6knXMy71UpJ2_pclJUQhB|^!U zlamv?evWh;JXS!?$tB!NR;&WQu%q>~CHOdI&6yrnk34^{aPwU}2T0243slEgJskSu z!v6V+Z($D%rCajwo1vl1|3@JSxQGV*!Cyyg8T+N`e%?Xm0`6Y)xQwOWr+hn04Bivsuc3@su6K&@1!5E&;zLifEf6QyVxI@ZJ&z< zUA$7419=lM5)vv8aLyz&xQ;-3+246j^kM)fhCA)r!k_Y~UhKl-I-ZLGifAEDA&PqU zj*Hh|@68GX!v@)n(!ucxmk^dYnI`{J{()-X@OBf}vGSHW>w0IGf+ZXp{1~dt!d0#9+&*TrWC@ z6ZNjP!jba(&!ziC#MN#a#Gnq~J+QSsCtK-uz|!^5+YnMHL|^3fY9ovaQ2e>8n-l`i zD)8eo7ek2wpxEgDGC`b?_~)e2VO9Dt)Swgnv~`C31k55F5I-4i zdiZ1hq*$+AiIH!5J77~o_+$Aony@~hTfFKxDfnU$BZFSgj%$-3!wlUL$G4*sTI&IG z!;iTkNJNH+d^wy{%68#*a>YE7oyq95yk-51$?s*t%O|~&7(?ZjzVs=Nd&j&fA{W}C zYOW#QK?qnSpm&nJz7y!`brsQP+pPL>e?B1xMTX0iBCfA)H_uN2tfx=YX78UI47h*W zW;F__oI{^kwtHwgHidux&(Z^f?xrw|;M+sjia*T+-7*fJQT zqmJ~dpRpX!Cp{`HLpaWQRUZD9r|EM9nwQy}Ae&RA>h# z+(cvG;Pww<>sKW~v2S)g4%u+i+qHcgZ@j-h6cbmCAkYzk%jIga2v&^rcHLm3UA_Zb zI)IM>kNY$H+D&`Q+KJWFp&L~8oAY0rj7))Ox;b7kgi$V(Ee&FR*-JESpxDk6 zt)<-oJ+HdmJkPxW8j4lAW{?qF`Q1z6wwroHr<*`)?S9yE7E#>TPR0*0+xcw9z)I6P z?KX~+=O!*hxmqap$U#NO(uDV9X)Y5Jj;o;N7#rs$?*E63(#gZj*e&}sh)q3t&tweNK^ANJD7lYY)qf+ zn|-{?gmb!3lev!0<6kiXu5|gMg=KuQjQpzmp*>_d68cVHay%t9i4E!N{pT(;9hs_lM|VSkWrFyFr%CfhA)iQLd|s5~;*&1yegk?H0qqh{r=zu<5u$1yy51ny#Dk3 zSGJT>81@rr@KH?-XoqX!6-QMw{+oQqz91DN#+0mmoIJ_vyA!3%s$T7oR$`K+D)Q+_ zCT#DPzNhhf1}k=`;;TaV>CxeVwFr7chrIZ!{u5J|RzUA`Lem2{7=~;mCC1bD)buE% z7QcBWTUC=43}j~D>|Yk%HaE&>xO%YsakV02UypuzYFs4i5n!o`>OtM6fB8Yf=XSNd z3y)dU_iWsyR}+i)2wz&d!qcClsW%;YLsKM=#-?t<_V#>{<$srs z0YB>d9K-3(?@E)r7jN2n0|!6RKIL-uYr$b2uZ1r8rf9AU>A~~Q@2Ftj?|51b@3g+? zsb;Dy-a>JgCtrTY6yzl`xv4MQTZ|LtbB?F*u|V9@+Ywp|!Upv5H?_c%mMdrQtB zvUF&pF23&ZA#o6{xDL*GYLF=@`|Cy@0(+AO-@K{Y?j}X*kL5Ye%9>&o2S>P$4)y z)MUTJ#qgDn0M?3G6^qursDW`;k0_SU^~l*yRurkWdtY1}SWk>RRM$FULB8y%3M<;WVQE6!85QeRD%icgkM7iea*(irTE*xQDO`>F%?Ak5v8p-}SW* zXqzKSY{#Dn@2u{5%h?}*o;dHXw?7)6ryc1QP`)5;OKYLrnbB_&FBx8rw29Y|-E&{8 z?Jk~onS{(>CWfj zcUGy~hcAMhVY!RQ$Gej;^OXU5;B0`A;y(iW^Bll^xIq-BUo64KS1uyBZm6M?gXUFe7zwk-&+t+uY z*F6MYckH{~CGXobWKKz(jV)83?O_9!v#$j<%!;P(p))A!B?<9&Prflqf?&(LOS zf)vPx;Zry2C#&BKo46`U^Ok|zt$YY6cpZ`IM#e|-^bUbsySJaNU~N2y{+O(N?EzM zPX~<|FSP>So|H-M{yqyy&z#)aa-e{D%nixMIszpEs#)q^{A_kaV7o}lk@k}V07|81 zyj`zE?{&mD^PyllUbx?uN!lu)?UnYz9luZ5+~Rk?5?tlp$+mul7dP_nKLMUznG63|%@M68qoGU! zPQiGk$_Sx(ggbV5HeN#GCr!^RX42?f?)5<9?l{#6t1sEoSWHA62^ZugY7!R|lstj1 zgpGZ*MJwDbS}}D(A=F~>)q(%|w)7F5?;9Rd5&m`aagqKc1dsh9T4;H$C5k1j#bIm3 zOCXCSCDB*L=G%6by?t``gYl%^uSE-3ASCalC!QfDVbYpub|k&3?eL_osFXjr}lDTAgKKV{3xpF zsi;&?;mKMn7_FqQ0HFaAM`iu@v>^0T+2eTz5~%oADH%J{=sUShT--~yo?bZ`9i%*B z9P&;_SkqYr({&hGgGVLbZOBb(f(S!#4nfgKc0ECI&i~h*0)oojQkIb1*Gex;XgIgq z>5Op5;stI~(-1%UxT#`PkSV~!Dw)F3FYyRYh4PSVzwSq?tS@x z67I4DU2}35E)_nlE;{aXHJ1jvvmoy(>eKN-*>msUX7bs}n#&&Qv)smnrd-Q2^v%l# zYi}%9;eyh#BRy|kJhi30GbG%UdQ?@r73IF-{yNb*SYI}Cfi8ej`)=TY>qe2ajonRJ zBYOL`=I-vof=+HoTlDXQR9Z2XcE!}r}A^o0?YB+l&^OXJP=R_)ZAG(9Evy|5R zX)C$tVi}9pYTD>AK8Lni$<2_M5-dP5-T_*fVwDZ{rx)kRr3vXovM)-bQj1CQ5l{M- z`;zv}TOz*oq30WnVtBD}T1`Cj#)JPshI75x@9MU-!2*B(cEmaHZoq;gSVJKCr`&zX zmN}M5&!S(E*Yd5>T|aI-x7XU(KKt};BPed=Jf!*DsjgBWn{YIkiw{-Q$-<`FGG6h~le>GF^Yh zqg_EN@!_f6#njNb%IVRbD~@DhFY8pOmi_KwxDku%&WL$rXnpX&pAyw^zCJjk__W~1 z=Pps7&V+AX0XRaEPV`Rym-3sz+tSt9rGfe>eeXfS^_tYJ%iL!XZLA@}oddEr^zDPpWWld(B{Tc7 z)X431Mj}h)teB_!&{CcS5xg;Q0etq&N~}|kM|p{^R<5Ad*2o*67NNGxbOl5KiRDQH&M}+i(C=LV5foYVv)@6NI zWO?kRmXb<7h-K;bd5nkkQq!dT17Z*LkUlyS9G%jF?&zVhm&rJVa8tZUahqy(_{b%p zp`H1`G0Ens=ER1i!LlLitM>aZo5<#Jx%x&&RV=vo_3r>0wLu{~p)-)EWszQ?g|lGm zEgyYh;{wkzHOIB)AQ@;}oyo;hZ09{#7H#JX_M+X1yQ7Cq_l!m7W0HsZoAJm}yM;}0 zUi4^c>DGu1nS?Fg9A6>axQ^wTq*Z?T-{ZrX6RV)IMvM_g zEsQ3GS$!DwJW7cl^8oqnU%wWqL?>#)W33Mc1i3D&U-7QknqVNh7-1HjTryvu*(jF<2Cf8cI++_kZDGc@e@q7AOub5&bS<)odJM^nb&A1m;mb=5l z^26nK<*JxQw8E)=;J90RKs-3FquEr_X@4|Z;1gk@LNDp#^p1{SB&Nddf=Av6hG*Ug zHnz>?(pRbAva^aeqk@`??}=2ehtj54-56XxgPr@LR8CN@C?H8ei->K*dj*h}B0$dU z-)owpkUFK&B7bRs6eO4>y(@V^hF4q4Kn*nuPOlo;=#d&jTJ{iNSG8Kj(kI7$UYO#h z7-jiVQnJF@z~4$MA`Gg%uUOuYtWsED|1>px#Jqfw5(FR3AJhl1WU7^NdNd!U#AxLk z`TH^I4<~a65fetm3s&QUiuCD8$8=I6rMJcO>%Y$m74&RLkKJIwS8Cd8nzr@W_;_E- z2B@O<1zz=GzA@BBZS?#E`ebIOpWAs_l_sc{lqe=?Nw@$a9O`v8JGspy!lH4MV?r|g zc+X{#3-Bj$0q%@mIDS&A-NO0w5}RqC=Cb^^)%utSKdP0j0n#^X!k%nx@sEtGDBtw@ zFx|lKY7vcAV&IhaNC;oOxm(5U*ukWTKQB*-w{sv(KFA7!(oYYrJcd}>+Wn1-h<)oS zcF}V{>}Nexe%uD)+N_1oDwDH7aKdymHL2>*OW>)i`4@o=mn={!pmA*WyZ(wbV_5iu zD>cYE=hVpKe+nTIES$f}v^;;oDroG7Uw3JoB72U>lEPE2H$*D6$rxXqPTWQd+^<6p zTSKlm8W|#CDBD&TG_m($w2zB<#;mpl&;FNbuiL^2Oc_{4t zG)1MeY24H65se=Z>ue}K`1Tl}4M1P;ZKq4Z$I_)L* zC3n%xj8yH0Laf=|fkcOLFFWXa6F{qO?bQPk%sB0%e2F8O(bbNh?^Gh^Pmc!PbXk2c zo{AypdN%s!TY7J0Y_0rNXPbkb{*lblN>*Bf8!DzbyOovazgGAkRk>YY$5opb zimawIVeI-QcV(~KrmrmFsYsJC+UDN%9t8&0l=md^<7epBrL+lm7~Z#LunY|-E7IhZP7d<{Ej%=F zFFabjt9s|CZ}u_owJp;|ztPOGR1!o7wa7<~J$d&>()6uz6XH*^ASGtXw+fyl1E&3h zo9|gF-BmYi?hB#Jv7!D+L?mNvuT~S94*uAlzzb4D`u>f1$@do-UP|FZ7sRjh$`1XH z=bYn$pM;O^9abFN6gh0RjReX($?)=nJGejVu1(fS5PR{pjm`8n$6$RS9Jv;AdOA>Q^k7tn`M>N)?7sNB^FQO;!)E+Pgc_KKFX zzS+D<59H6p(X_@5LOwcK(JS(}3ds99Qs37y>wF*QcB~ihFjGJH-+0B;vu>67)_!M=sj5k?2HQR-lTv;8b){J&VdtUW4_Xw?00rhAHf} zojL$oh2n<^#aW9DN3oI}KQ_W3aqH0oLK9T_OjE4mZ3>5-X_rOE=F;TP-KSQ`w*WS< z)^MrI3l|Lo@RmcB-XAJ-Ch%7zFkwHHkq|nFyi&w14^qzeDjb)El@>rz{oZorn{Lz$ z>!_mh$QGH(Ld0ntEiPQ|1ml%d{GvRW#9i*ANt^paLM z!_-uij`o07_*`+swUB~Ezw)v{Pv;0>M{c|Qlyh(9m!sv>=~WC{XT;^>i=BL99CXTj zWxzlFSNj0T$Od5J`Ytt1rq#iWtS0YIVL{hJ8N=p=+$`m5qQ>EEvvkrK zxFf!5s}=9|tFPntW(S@rHtu>{xT_07T9etYbe5NcIg}uY(3GpXnoZ3NJ5K&JBIR9D z`Iy{4tFlQ83Jo;>2FcsUAUlJ%NI~6CccTJ}+Y@~|H$uZoz$5iRm!D+UA@sF>z={)79u4^e^=+T9eXoP!NjDPP{0?~HRUW(7YClQ~0HleZf ztz+K+K2X!`rEsx1C2bw>ilXGV7IFO==sUzEq-SfH~_({w}p=;rUI_7vDHTp)9> z^0L!zZukk1Vj+U2KevqfKoZWnY#Cv1AT5zHXu)-A_2}6n=?lq*4W{#BmKvM`Tl=*g zy{q-Tl8ZXWHBeDWr{4bQALOP=^y&1x^>CynetT`X30p|m^-!y-{*jmRLyLXkDs_6uW zTiOg#BB~w1v#+@AZS1k5laZWNhwjZFQ~3zSXe-M*?koBZpb{N$`b$UCwfX+sM2XKi zwB>Q;&m9!xSBq#Qh@Mp^`v@U3wuDTkgc2jn~ z`aXhXqIT<5Afj<&@cZ*3CQ48owc3bt*=L3#UbLpcav>iumDbJ~BOo}@mE!K+RMj3T zL|0-mak|P&;qmRw?is>A@7-SQ*o6(pnKV5rH55P70A>Qd&RWo`iM8OPB^ufEl7RE0 zydvS4`f;&js40M@Fe_s1jNUz$Dn;?cdnQo*P<;7&?-aXnZ*IDlSzy6-Hn-Kd>r>E2 ztQ%@xIc2x-nX7NP!CO#(x!`F_G&4=fD^|yQYLXqlqTSXWJuPVonrKY(ADgWi4(>IR zEab@f)9;6@I5qCqd)WLV^DKZQ8o8JWL2)+MJgNC^p6JV)ld3H0=yZWoN-8g!OCGRq z*y9~Uo+)DPwT)zmSE!P`k@-R)zQRWkQ$G1_L`>+Z2a416;YWuJMtI~r`0O%eT8$5^ zNxKHN)uD6F?=Zl>x! z_JvP(Ae>ZNvG;0avai%idtgf5mmHuVqAt;TB~tUfz3?L~3ue}bA64hSqc!t8Zx+4D z8(539k^p7s!lMb3Qp$llOJvdg4E&oEzHWMbA>BU?eKWr9Y+=8SpnIqVf~LT4N-{;GTtCyknX z-w{6I!dMvd%~0hU7Ed&t;U_5=uU^Z$-~A#lv%iux9yB4leTVmioN^AT3l%-x;Jr`d zql>>#RQwqS2flGzL-9Rb@iIEyk1qVR%ilm<=au+%wW_#;hwc2qiaX~^6-8%CEic{c z#U`@#*gK$4&i~@_Pfg7AMC>Sw2~9I9D9^0j!oAoOK@Kkvq~_ssDK$qjNd=S&u7L9*ZV|&CF<8aCE^}?3H&~TjbfJyn~I&D=-&W^~|6}zf| z1W?t>yo*h66va%#4g!grzFH+#dfMdS-IH;93ZEcAWOHeGfJe%qK5d3e`k|{pR;6_0 z|10}UG4M<-gBhPd>h1JekHy3zct9bxjWoaQ>3*t8XHlLpN-xdr{6*IF;%vS24-wtN zHu5!L98VzUJ#{#TX>b0z8lQc-(ybYJhZJ_#JeKX)%S>-x^YpmAsl;{CG=sQ=0Q>vp z@(DLJz{o$~oDk(L7YX}R#cIm_;Uh5*p`-bOeou$QJ>=m#ZZ9O|a{=9i=i_V<1*|(i z{T4Cbfx4ZV4d|7YJI_#0*^Am^ypD>kg3PUE;+oevuYZTruu1NzAt=V z?Aso*XD6c=2Ep`Y48J(f1oP-HJGI( zanB=s;2M7d{f-K)YygrjVtqIzo8X-?V*n3E-BVlo)ZTiN5umE@9Aw?H!n&Z4;`aD= zjzW(Gw5Gm+;?G;6m)&diTc9CD^BKe0r47uFC0RKgLuE79)7vyLK=h+OQi71cvb&Jc zZ_DCz-l%dRJgYoP8@B%WgR2S4je$P8n54kpt=n$ulQZH}&^0^8RpYVh)x5sDEv(Nj zJ|fA``hWWRZ7*QK(bsK1SRXnITI`C#MyZiB_?#pcEL-y#HFXI|IYF_57 zvY&lF+{H><@HJf@b$3BcX<=D6R=^R%-S4hCP2}6YJUnNDjg}4mc}FqG=d}VWRd-~d zF|EP#IIt|TKi3k;bSV*Azq)*{xph}u3p{c^(BarlKODuwpY5<&M7EE#uWQ+gZGM&m z?3~xM3;&b|VinYG-I1?%RYU3tpNdZG1-3NFM_clj_u1E`8nCW6j;_d-zV-J{umQO~ zFZ3`_CQKT0rBkumW0g#DcGbECPtqT}-JT$ErE z{+o`=FDChC?)TL?%vYHlwzfv>Wo)r1Z}eyBeLlJmLM+nc5nJIVn6}eRK_KMxX?}-A zL%{uJ$YNArwQfwUy)nHSH{`~|PlJl1azf2lnfW(|R=Pr> z6}JP-oP~AXUgNSh?G&@Gf%n$upp%%%O+L(yDLBF-vTiKzF>jKK9}?I&R@&QDB+6wk z*RrU~b5}5`aH9bG7UUF6!C~nMv+#T{^5S{u+>bPCgP8@pq=l5&&i}iOE=rvjrAeR* z*n=VtJ2REeEi{A4Ljdb1fx4_z6jgl7o1ttMym+5`qY_z|#)hAh1cVLMzUWoD1rqI! zlS1M!2i3^9#!sxQKjU$s?{sNk##zzvj$pQj=B(eU_XyZil)uX`hou+`B3d>w&aIqE zX3eddl|n^C`GJ&ybDpeg(F_Za@;4qcLFe1z*_V%K8TV})?^ZqaUHGl&KlQH1>AGI* zuhIF81Mn4qv?_0ONq4wF_Ci~N0M*yNoQLB5Zj(wWumQf$&U!(*l*V>fRfyM5Z86)B zx=s*VOXgIGr+UMMQNI+lNJ1%HA=gWv@s_+m0~eji;1x%?k?cBdk`M!n%7!J@n=#?0IoNlvWDx^)({c>)8Vn*?qa*e@}AL-Z1HZ_dvBkwa8XPi_Q zA&s0W_eLss_H|b2WaD$g)%2#me%@lkr*cCSJ)Dm0C|(elr`9KIzHkI@mmJ0~BpP3k z>fUA5OLr1_#Sl-~a}8StQ|-M*s$AHmkdSeS$X4HTs|I4AF?Qf~Z>l(o+5$&dKODoM zTIa^qz3Uqs|5h$iUBytogprW3%qC#4Up3hJ_D0~YV3yrGH}89N!V#=7d{Tm5Oc?3q zcK!k-jQC~o-%3Re^3x8?p=lm(U#sk<7B{DW2;+1OeRG?}oHG3vjf3UHVc+7){Dzgk zxq!65>BisWYwxUEMDTu%=^W(mNv4>Fs-yR3Yn@?d9KOYsr%p=Ro2J|@^@cX=&=H%z zX&E0We%L=uIfq^(6~_7Q&@s|2fK*V6O7d=GV`A|fliJ~w*|@9q3`UgGO`kpR@bUXR4I;KV)f3j7I3kxRw`!ONnL~N}6U;H) z75SZep3YY_tzw8PqPYmuKlw6+$^~HnxRB-O0bV7iPHOh&9SsD%eLBBbI@dv0+>Ri` zxuZ4At9!2mx)|`wT5_fMM&GYZIksUp@QeElrHi~aSS!*LKiw8YS3`Liek946sfM;% zkuN|ynjfmlV+psd@l&L-&VR;3zB z@AtiS#}%CAfwMF_@-sIx-(}Ka6&^oDA{lIrbST<=<2?S=^iRMf@_*9X(3eC-aK6sS z))0Cdeh!x`n?|C?VdmR5OpJT=3{|(Uuj{`4Q#m<~j_}iVNCG>#yTn8Vk5Y&XA#xVf9O6LJHBgE%5xNF+HT?$J3#7ZL9Qb&ZRaL&( zAv^zmX##J83#U7&3IC`g{MjofZy>ebFun>Q%Zr{sa`Zi@cT4OA)wE*>S|Ty&X8&|}{Tp)vv4q84TZmGc5x z(@s7E*;mToLQFU5Zc=6I&?Z!(?+<=VKe; z(!{m$j~&&$W}a5Pk6e}j8Id*j0r|_KkFu9Q zmL}7rqVDK;3!m&Wf*{!2brUP0_Sl6y{|@eCoaoH(oE-wNDT8iv_0(z}GNUCI%||P| zvlLomVF6ftm}#L*n(SPHj?hWixBiWN_k%?63 z3huR({66};4VGlIFMZ~4{OB+vedf(vxuKmMFfD(Ndmi0~UT{+v%fCBQKCT`hf+gAI z$NAYmC;T5#2!te2cyuxoA{h@SNRNr_UT1LujECmB`Ku0i^f!TSMn|2Zi3u?Oo-|n+ zfF*UMj}DCO>~AcntAzvxkU*C~;aSU@)9b_IBc>KEOF%3WL3OcT)k^=tqLh40yajMX z67*6rN(mZukRjj=*hbGHBL}ziVrKlcz3Bfl1>Q|Wg@NB%f1CbYpX+FU8ZG{=VKZuM zYz*lpeB2)M3=p5+!7^M2l09JM5CefoN*o?>oD-_B+=6p`_)M+wR4tR5JRLv%bs=ybTx%WeKOQ6hy! zr(6*O!|;*q@>rEpx%GVjdt%@wVB)Dse|G*=NiX%kPB{R1fiL?6im?UfxON7< zxCwyTWn7-#hpy$?#zqXF>Pf&EfHr)}rF^z+GRuzy3MHQtZ5897bvNs>$vAXU;*s;I z-t8RC)#L!N970&ZdO-H}&DaBf2zYQ9AQtl+0R9+i29uEkEqbiR^Cd8&9snjYQ>&B_a18_TPtR`opiw|Em~-mIXp&WanD^cFI6WN(E$iz}7$cUXRfh z!-ZSrvQZCBtq7`_>$L;)^@VX5$#cDaa(i9Ur&Cso*SBtFd9ZW?jE4`qpd;V~z=W-8 zzM1;~-!2452#8M5d@&2YTGMq8=$ZzyD+P$Ku|k>5B@O$wzwHb#Apy71WN`!}ui~=a z@$SO?<~kj$cI3qVUoYFr{=s0^k>TfXs2ylWc-f*p#N2~V5XesO#7tnb_#-tDlzTH0XoVTP!B-B(RLs;0X^pR0PuP;+eHn`C8}~p zXGCA(R0|zl8Vzl3X~_~>T9hwUHucVBBDAy$eqxQW zgASXmQC)|~QNzj4M}nPkAY{`KyY|+Qc!_5Q4>g7&#-)j`V$%>kg@#V11Fg#9V7zGn z3Kt6K!zSQ3F#z)MLfpLy=+h4eJg4=XH}kgJd`t#`+qq%7E-<>K6ztXKL}wD4onMDQ zoIAVz4S@yr+A73wHp?~Yf~f&rs^{RN^auoX15tpK$1*lox8ff3DN_Uab1U0R0i8hP z6xtw3qCXZD0SgK}zTsJ1#K#vR?fYSmTzoTW@wQ1pn2Fl+OuA-)>|E}7-RU>7!UQ5z zPciCkKiOhAKAT7WeI(H>+n+&z(e6YaAZF3IPU*Jd4GJ5h=m~+u%%``#m90QO|7-5}*O4rS6R zkvd0qiwd|5uEp#&$cMp*sXn1+HXWdEkL2y?+PVatLSa#P9sl9wyiDJl{BZ*x6(@NL z4U-5&|B}pyOQd(#=V-+J@PPW8F9mpG!>@(+l`9-9q{FU0YbcGKu$^FS&R1b=s>RXqHMw$j%xkaM(?Nj`FBE{7y%LFe@zMD?r0YgZ|Le7fR1p;~snM za-HqtFMU$l*-nNsQH#1i%!%r}-_qWEGHPV#)_7=v&$7zMCuO>DwulqAu$-`+TwGe< zLH!Y+BCZjX0hO&ehAStUu^jHAYfi*;G8YT#&+SUD>@1S_C9aJGixuAn<3k53TFQW> znF9(qV6N_cw41vM(t9^mtP3=YKkrAIjg;jLWsD#?L9?n`Nkc6262~(Kf9Obi)fRiI zN4Om?{hvQ{G`zCPbhm%>aG?`m#faQ`Qw@M`IE-Q+9TpkEA>u^K2WoUH0N&DEHs*no z9&T-}+oiC`zrEkHrq*@iNjD7^AOG01{<#l80dh&LquCz% zfz4ivj^}5}KR5GtG)4qeE5Gp6pL1U&s7A$-BO4K!P9VMB&$b|`%(cUYbF48@b95L1 zSZbNQ&Bb=*(>i?NHlRbL4B95oNm%1gzZWvTTa1y=Ip#*UMBz37{h1qZh~-tE_&D-m zE{au%n#9HLrMwgh2O@_wG>5lc{00Dn2mnR208Qd{#^lmqK>{3ffRjc5SFr`6gZ92r z%UW@g^C#o<=0V32s1X%A1E*pl0968`f`NL65*d85ZE{h*g8X%4Eift!d(-dsWGGN_ z1TTX$RT?Z*a_<&57}TOi%|8b3vxG^mXx{eiNa1k;>Un}+9r@o}0D7G65C7p|?1McO z*tG6)oq`}4kp-v^TB%SGpc>MH^L^1h^R^M2My1m`VA@Dg2sjxC@)aH_ojaK|0&6{3 z*bdi4V_xL&ifG_k3&AjJpP{b@sz9F}$^3cUW4kCWlJQN@;a3#6{dd4mc_eZBaZ{+M z-7C=95=?`;Jvrq%c}i*02#)s3&JXgfD?8@6dKXXN5W~$<$arDy<9&&BoGT=vRH{?X1{TqhxB17pwsE%^g06U&iS(1OAFa2kR=f z`Wn@49{`d(B3B^{*V|C}layE?_hGrwye|<1A`?fbTx!JT-AXv+xo2N(CK34G`mYdA z?6XjbOblVLT-Ak@wL?oG%=2g!-f(<^L-T%W<&y*MHYk%>#O3vk9uvh zG5=txGxF*9e$e~VX=czB5w%MLs&7y79b66~M+h(P8t{R}Z4m_BqMK;)iA(Ez}^xS_3=zGn_o$<`D5szxBFC_k&z+0@w}tF;FO>w6(`4N^b8SbsF!jry~?-*l-;PIoRX$sYaPhA_?6 zQfTC_zo?F!b2c%)i0WXRP+s&vF63|J-RKU;@!%_U*qHBcw<`y=!B-H+Rj7J4eB>yb zSbOanFHebB$5dttxdQS5;oFuDLhc5DMD9}t*(2mK4!X=GgIwzXxgb2NY&H6^zwL7u z_&D8E8=$2y1(_!VE5j3!TmgFwIlcsAsPpv|XtBaf=(jKtqjPemg)lf*+A=RCTr;Qk z@^ZzkblH#r0^2pfQ@(+@Y=(e_&h}^9we4J$abgDL+rWkUIU&{2TWNegUM3sYcj^Z- ze#Tj$5uXl~E4N>hF>JqRclOxTNl62Vme&fx2deA$FS%oQ$?xfB$dgM0pl%;1f$TO@ zQXINlaGx5&LHK#NIn{h&a8{t|?^WYZG-1_v⪚?sujD7`tJd%^+vaw!lQ{NpY`dw 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

e($q{K9;b_gBIgVBXjkJ7w< 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

tR8FW2F` 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 Lsxk%ljs5=vqW5<> literal 0 HcmV?d00001 diff --git a/diagrams/workflow-builder-current-lifecycle.svg b/diagrams/workflow-builder-current-lifecycle.svg new file mode 100644 index 000000000000..2a5c310671ea --- /dev/null +++ b/diagrams/workflow-builder-current-lifecycle.svg @@ -0,0 +1 @@ +用户回复修改 + 文本意见取消确认可修复且未达 10同一目标连续失败 10无工具自然结束已确认但未 applied普通对话已有 applied / cancelled /failed 事实收到用户消息Runner 准备Sandbox、历史、Memory、Prompt 和工具进入 AgentLoop工作流任务?普通回答并结束需求和必要资源已闭合?ask_agent:一次性收集缺暂停并保存 Provider Stateworkflow_builder_present_preview完整 Mermaid + 自由章节用户选择合并反馈并重新调用Preview 工具cancelled恢复同一主AgentLoop,禁止再次提问query 当前画布和描述符按业务分片 stage 私有 DraftWorkflow Core 校验 DraftDraft valid?结构化 diagnostics 返回Agent 自修复使用 draftRevision commit原子应用成功?appliedterminal_internalCompletionPolicy独立无工具收尾 Agent向用户展示权威结果 \ No newline at end of file diff --git a/diagrams/workflow-builder-error-to-agentloop.excalidraw b/diagrams/workflow-builder-error-to-agentloop.excalidraw new file mode 100644 index 000000000000..bd3dc7c3275d --- /dev/null +++ b/diagrams/workflow-builder-error-to-agentloop.excalidraw @@ -0,0 +1 @@ +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"2R5lADJ3ftkbxl-iMaSo7","type":"rectangle","x":1672.171875,"y":31.5,"width":564.609375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":1200988243,"version":5,"versionNonce":132184573,"isDeleted":false,"boundElements":[{"type":"text","id":"9LJEtUT4Wuh706Zcu1d6J"},{"id":"zZ8aC6XKsSh_qGOJzZBjD","type":"arrow"},{"id":"z4usNWt2giORYRWQidd6U","type":"arrow"},{"id":"nzAWutISOrYSFMLHepMk5","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"C5-piW0hT1Z7sI0bkCXdy","type":"diamond","x":737.6640625,"y":162,"width":156.765625,"height":156.765625,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":1582400093,"version":5,"versionNonce":937377885,"isDeleted":false,"boundElements":[{"type":"text","id":"JVwS_XZdqXX3Dxuv11szh"},{"id":"zZ8aC6XKsSh_qGOJzZBjD","type":"arrow"},{"id":"mXLnDxVUujNhbcNjR2ZAp","type":"arrow"},{"id":"4iuVoWHSrtVH82_zRhyxm","type":"arrow"}],"updated":1785729261592,"link":null,"locked":false},{"id":"tRb1uJ33YwzRyEoh0AZ1g","type":"diamond","x":98.125,"y":859.71875,"width":266.609375,"height":266.609375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":189013491,"version":5,"versionNonce":708784957,"isDeleted":false,"boundElements":[{"type":"text","id":"xiaoDFHpSwwO_T4x4ILVo"},{"id":"mXLnDxVUujNhbcNjR2ZAp","type":"arrow"},{"id":"WuBDZPOOA5Nh_JFvC_oIM","type":"arrow"},{"id":"kAGrTrs6Sy0-r64twjOm2","type":"arrow"}],"updated":1785729261592,"link":null,"locked":false},{"id":"CwkVh7qh32-ao06IqRptl","type":"rectangle","x":0,"y":1227.328125,"width":178.171875,"height":102,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":1359687357,"version":4,"versionNonce":694142845,"isDeleted":false,"boundElements":[{"type":"text","id":"Idb3esa_UOC7IoYRG2j0F"},{"id":"WuBDZPOOA5Nh_JFvC_oIM","type":"arrow"},{"id":"cqhXhIfuk-Xaotz0M9QUq","type":"arrow"}],"updated":1785729261592,"link":null,"locked":false},{"id":"kIinWryprzm_VPMavGSkO","type":"rectangle","x":228.171875,"y":1224.828125,"width":291.203125,"height":107,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":2073159571,"version":4,"versionNonce":1348979773,"isDeleted":false,"boundElements":[{"type":"text","id":"M6MfXdD7fDyDaYs3XbuO_"},{"id":"kAGrTrs6Sy0-r64twjOm2","type":"arrow"},{"id":"MgKbjpWWpMMWHgwJ7ItPE","type":"arrow"}],"updated":1785729261592,"link":null,"locked":false},{"id":"oj8eLklR_kyBMznsQaoKC","type":"diamond","x":1282.375,"y":397.765625,"width":215.953125,"height":215.953125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":747654941,"version":6,"versionNonce":1239080893,"isDeleted":false,"boundElements":[{"type":"text","id":"-ogvsIkOZ_IFdGhbcpd3C"},{"id":"4iuVoWHSrtVH82_zRhyxm","type":"arrow"},{"id":"Y6tSqAMHP7Ezd5tUM1n56","type":"arrow"},{"id":"jDHwb72jsOT5lxMScTzHt","type":"arrow"},{"id":"Cn9VnOnDbmHw-4ag5v8n_","type":"arrow"}],"updated":1785729261592,"link":null,"locked":false},{"id":"x6q6RAEi1HR4eeNl6hqOP","type":"rectangle","x":569.375,"y":1210.328125,"width":372.40625,"height":136,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":1588952371,"version":4,"versionNonce":591765757,"isDeleted":false,"boundElements":[{"type":"text","id":"iN7Vg7TSiB2Efhnw3Nbhx"},{"id":"Y6tSqAMHP7Ezd5tUM1n56","type":"arrow"},{"id":"6quLUDirUXo1G0rWi1AV0","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"0DLdN3Wy_7zn-2JVNbAVq","type":"rectangle","x":991.78125,"y":1210.328125,"width":312.421875,"height":136,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":793928573,"version":4,"versionNonce":1963635293,"isDeleted":false,"boundElements":[{"type":"text","id":"ZAWelwMpzl_cTVPlOpcSX"},{"id":"jDHwb72jsOT5lxMScTzHt","type":"arrow"},{"id":"sRaQaGssANG9kHxfoYjQx","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"uiRTVZVdqLYokkmGbez8l","type":"rectangle","x":1623.48828125,"y":697.71875,"width":336.3125,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":1880448723,"version":4,"versionNonce":178902141,"isDeleted":false,"boundElements":[{"type":"text","id":"1yuBXMFX4BXohsxxlZk60"},{"id":"Cn9VnOnDbmHw-4ag5v8n_","type":"arrow"},{"id":"mRXtkjh9Kzr_86KIjEzhU","type":"arrow"}],"updated":1785729261592,"link":null,"locked":false},{"id":"ZHwzhcJ-_HOeYHC2CSdVQ","type":"diamond","x":1682.79296875,"y":884.171875,"width":217.703125,"height":217.703125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":1301474269,"version":5,"versionNonce":1784779453,"isDeleted":false,"boundElements":[{"type":"text","id":"aGZEjqxaThlJcwU7zWoae"},{"id":"mRXtkjh9Kzr_86KIjEzhU","type":"arrow"},{"id":"wkDKo8q2IqolG3eNFhP-N","type":"arrow"},{"id":"-9a-zoZPGx0Wk5WBGzp4t","type":"arrow"}],"updated":1785729261592,"link":null,"locked":false},{"id":"NEWq53lRnFG0xStWdNa9w","type":"rectangle","x":1354.203125,"y":1224.828125,"width":407.921875,"height":107,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":977800307,"version":4,"versionNonce":1657095613,"isDeleted":false,"boundElements":[{"type":"text","id":"q8kAv9cOsKBGFKPVTqTHz"},{"id":"wkDKo8q2IqolG3eNFhP-N","type":"arrow"},{"id":"iApu_NqHqKQ0e2D27fGJi","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"0klkTPBxowwmlMizJcmUo","type":"rectangle","x":1812.125,"y":1224.828125,"width":426,"height":107,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":2003003453,"version":4,"versionNonce":1790803741,"isDeleted":false,"boundElements":[{"type":"text","id":"5D7PDogIl81zOXgnL1Yjl"},{"id":"-9a-zoZPGx0Wk5WBGzp4t","type":"arrow"},{"id":"UW7P2uE-bxNMtyfc9-jTL","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"Pp5EoUoPD_QWftDkp3XUE","type":"rectangle","x":626.31640625,"y":1413.328125,"width":275.203125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":823395859,"version":7,"versionNonce":213039741,"isDeleted":false,"boundElements":[{"type":"text","id":"FV6T4tIyZdy9m8EIp-F2s"},{"id":"cqhXhIfuk-Xaotz0M9QUq","type":"arrow"},{"id":"MgKbjpWWpMMWHgwJ7ItPE","type":"arrow"},{"id":"6quLUDirUXo1G0rWi1AV0","type":"arrow"},{"id":"iApu_NqHqKQ0e2D27fGJi","type":"arrow"},{"id":"4-4Wlih0OywWVqW0PxbhH","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"Ei_FXhnSXrzJPK-ckWoKE","type":"diamond","x":605.29296875,"y":1529.328125,"width":317.25,"height":317.25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":514152605,"version":5,"versionNonce":1174796477,"isDeleted":false,"boundElements":[{"type":"text","id":"dzFvbGxxn7RuXWEsQOolc"},{"id":"4-4Wlih0OywWVqW0PxbhH","type":"arrow"},{"id":"z4usNWt2giORYRWQidd6U","type":"arrow"},{"id":"CPr83ET0UKHT_TaeWpP0a","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"x05mKJisEmFJpydeJy0dU","type":"rectangle","x":561.32421875,"y":1930.578125,"width":405.1875,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":191876019,"version":4,"versionNonce":128101757,"isDeleted":false,"boundElements":[{"type":"text","id":"qBt8FgoCJspb7Ck5QTH6Z"},{"id":"CPr83ET0UKHT_TaeWpP0a","type":"arrow"},{"id":"hx-ZGFzctyPY7icyHokBh","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"kjihYUjRMtkX6WiVpsDtP","type":"diamond","x":643.27734375,"y":2024.578125,"width":241.28125,"height":241.28125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":null,"seed":2097822973,"version":6,"versionNonce":918587613,"isDeleted":false,"boundElements":[{"type":"text","id":"DDALLKrFrIblubASlMRKu"},{"id":"hx-ZGFzctyPY7icyHokBh","type":"arrow"},{"id":"9Z6kvlN6lpf0bvxjzKy_g","type":"arrow"},{"id":"05RqZsxwldgro1Mc6wLBX","type":"arrow"},{"id":"JK2k3qQELcm5U7DbRGYGD","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"RRWptEX6TGsjj_4dtgckg","type":"rectangle","x":461.48828125,"y":2383.859375,"width":206.375,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":null,"seed":1568791891,"version":4,"versionNonce":47539517,"isDeleted":false,"boundElements":[{"type":"text","id":"bc7Ni-lCKBhZPsqxOHpRk"},{"id":"9Z6kvlN6lpf0bvxjzKy_g","type":"arrow"},{"id":"JK2k3qQELcm5U7DbRGYGD","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"6_0Dg3ScmT6qsQ_4fx_Qx","type":"rectangle","x":1920.55078125,"y":2349.859375,"width":299.9375,"height":112,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":null,"seed":437491037,"version":4,"versionNonce":1154463133,"isDeleted":false,"boundElements":[{"type":"text","id":"NvNav2ie3SvsovNDfA2HK"},{"id":"05RqZsxwldgro1Mc6wLBX","type":"arrow"},{"id":"nzAWutISOrYSFMLHepMk5","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"-CnH4Q60LbZxsz6biu9uC","type":"rectangle","x":1522.17578125,"y":1396.328125,"width":335.9375,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":null,"seed":1923136243,"version":5,"versionNonce":1714691037,"isDeleted":false,"boundElements":[{"type":"text","id":"mLA5ItobOu1cDXjQWJ4Mo"},{"id":"sRaQaGssANG9kHxfoYjQx","type":"arrow"},{"id":"UW7P2uE-bxNMtyfc9-jTL","type":"arrow"},{"id":"9-rhZM2SATHQarL9nQTud","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"KG_58E2g39gRG6POMa5Qt","type":"rectangle","x":1594.03515625,"y":1646.453125,"width":459,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":null,"seed":286450109,"version":3,"versionNonce":1147050045,"isDeleted":false,"boundElements":[{"type":"text","id":"f4rR--3RQUxENx690YluJ"},{"id":"9-rhZM2SATHQarL9nQTud","type":"arrow"}],"updated":1785729261593,"link":null,"locked":false},{"id":"jglWJaOPyqUrd00m8fGTP","type":"rectangle","x":2286.78125,"y":0,"width":517.4375,"height":112,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":null,"seed":1733485715,"version":2,"versionNonce":1180170941,"isDeleted":false,"boundElements":[{"type":"text","id":"rqShMIYnvTonbc52kZpci"}],"updated":1785729261570,"link":null,"locked":false},{"id":"zZ8aC6XKsSh_qGOJzZBjD","type":"arrow","x":1672.172,"y":76.086,"width":856.125,"height":81.115,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":{"type":2},"seed":388604445,"version":4,"versionNonce":1619850355,"isDeleted":false,"boundElements":null,"updated":1785729261591,"link":null,"locked":false,"points":[[0.5,0.5],[-856.125,60.914],[-856.229,80.615]],"lastCommittedPoint":null,"startBinding":{"elementId":"2R5lADJ3ftkbxl-iMaSo7","focus":0.0000045418889585962016,"gap":1},"endBinding":{"elementId":"C5-piW0hT1Z7sI0bkCXdy","focus":0.025856908803096077,"gap":4.804088844818164},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"mXLnDxVUujNhbcNjR2ZAp","type":"arrow","x":751.317,"y":254.036,"width":519.887,"height":600.883,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":55499315,"version":4,"versionNonce":537904467,"isDeleted":false,"boundElements":[{"type":"text","id":"XXbYkMNL38QwvEToIslP7"}],"updated":1785729261592,"link":null,"locked":false,"points":[[0.5,0.5],[-519.887,104.23000000000002],[-519.887,251.70600000000002],[-519.887,401.68300000000005],[-519.887,482.68300000000005],[-519.887,563.683],[-519.95,600.383]],"lastCommittedPoint":null,"startBinding":{"elementId":"C5-piW0hT1Z7sI0bkCXdy","focus":-0.008621301818593236,"gap":1},"endBinding":{"elementId":"tRb1uJ33YwzRyEoh0AZ1g","focus":0.01545083245581068,"gap":4.8066791095827375},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"WuBDZPOOA5Nh_JFvC_oIM","type":"arrow","x":172.194,"y":1067.092,"width":83.10799999999999,"height":154.93599999999992,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":1095325309,"version":4,"versionNonce":2059780659,"isDeleted":false,"boundElements":[{"type":"text","id":"9-jUiBm4GJdhp4cce_k1t"}],"updated":1785729261592,"link":null,"locked":false,"points":[[0,0.5],[-83.10799999999999,101.23599999999988],[-83.10799999999999,154.43599999999992]],"lastCommittedPoint":null,"startBinding":{"elementId":"tRb1uJ33YwzRyEoh0AZ1g","focus":-0.01177497479683248,"gap":1},"endBinding":{"elementId":"CwkVh7qh32-ao06IqRptl","focus":7.01569761413796e-7,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kAGrTrs6Sy0-r64twjOm2","type":"arrow","x":291.666,"y":1067.092,"width":82.10700000000003,"height":152.43599999999992,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":{"type":2},"seed":1400576979,"version":4,"versionNonce":49179411,"isDeleted":false,"boundElements":[{"type":"text","id":"o0MO-xG5XCw35yb0A5fhr"}],"updated":1785729261592,"link":null,"locked":false,"points":[[0,0.5],[82.10700000000003,101.23599999999988],[82.10700000000003,151.93599999999992]],"lastCommittedPoint":null,"startBinding":{"elementId":"tRb1uJ33YwzRyEoh0AZ1g","focus":-0.0012253119780359352,"gap":1},"endBinding":{"elementId":"kIinWryprzm_VPMavGSkO","focus":-0.0000030047754464961213,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"4iuVoWHSrtVH82_zRhyxm","type":"arrow","x":881.581,"y":254.232,"width":509.20400000000006,"height":138.734,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":171146973,"version":4,"versionNonce":687423475,"isDeleted":false,"boundElements":[{"type":"text","id":"zmf8fZntKP60b_Fb_tm_x"}],"updated":1785729261592,"link":null,"locked":false,"points":[[0.5,0.5],[508.7710000000001,104.03400000000002],[508.70400000000006,138.234]],"lastCommittedPoint":null,"startBinding":{"elementId":"C5-piW0hT1Z7sI0bkCXdy","focus":0.005724526063778936,"gap":1},"endBinding":{"elementId":"oj8eLklR_kyBMznsQaoKC","focus":0.017047239469988554,"gap":4.817104954287895},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Y6tSqAMHP7Ezd5tUM1n56","type":"arrow","x":1303.511,"y":526.878,"width":547.933,"height":678.15,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":65939827,"version":4,"versionNonce":696631507,"isDeleted":false,"boundElements":[{"type":"text","id":"KeU8wZmuXo2ozyF9duXNs"}],"updated":1785729261592,"link":null,"locked":false,"points":[[0,0.5],[-547.933,128.841],[-547.933,209.841],[-547.933,290.841],[-547.933,466.145],[-547.933,641.4499999999999],[-547.933,677.65]],"lastCommittedPoint":null,"startBinding":{"elementId":"oj8eLklR_kyBMznsQaoKC","focus":-0.006632153944961815,"gap":1},"endBinding":{"elementId":"x6q6RAEi1HR4eeNl6hqOP","focus":-6.713098934882989e-7,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"jDHwb72jsOT5lxMScTzHt","type":"arrow","x":1324.151,"y":547.518,"width":176.1590000000001,"height":657.51,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":410622781,"version":4,"versionNonce":996371891,"isDeleted":false,"boundElements":[{"type":"text","id":"ghLjcGvru6Vk3IRODcG-a"}],"updated":1785729261592,"link":null,"locked":false,"points":[[0,0.5],[-176.1590000000001,108.20100000000002],[-176.1590000000001,189.20100000000002],[-176.1590000000001,270.201],[-176.1590000000001,445.505],[-176.1590000000001,620.81],[-176.1590000000001,657.01]],"lastCommittedPoint":null,"startBinding":{"elementId":"oj8eLklR_kyBMznsQaoKC","focus":-0.01031585325285598,"gap":1},"endBinding":{"elementId":"0DLdN3Wy_7zn-2JVNbAVq","focus":-0.000001200300075282629,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Cn9VnOnDbmHw-4ag5v8n_","type":"arrow","x":1469.452,"y":535.618,"width":322.193,"height":156.80099999999993,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":2045674259,"version":4,"versionNonce":2106705555,"isDeleted":false,"boundElements":[{"type":"text","id":"UlDCTu4eZIGQSGzpXDppC"}],"updated":1785729261592,"link":null,"locked":false,"points":[[0,0.5],[322.193,120.101],[322.193,156.30099999999993]],"lastCommittedPoint":null,"startBinding":{"elementId":"oj8eLklR_kyBMznsQaoKC","focus":0.0036142158469584327,"gap":1},"endBinding":{"elementId":"uiRTVZVdqLYokkmGbez8l","focus":0.000002787585950491709,"gap":5.299750000000017},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"mRXtkjh9Kzr_86KIjEzhU","type":"arrow","x":1791.645,"y":775.719,"width":0.4600000000000364,"height":103.6529999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":1149053853,"version":4,"versionNonce":753499603,"isDeleted":false,"boundElements":null,"updated":1785729261592,"link":null,"locked":false,"points":[[0.5,0.5],[0,42],[-0.03999999999996362,103.1529999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"uiRTVZVdqLYokkmGbez8l","focus":-0.0000027875859492085717,"gap":1},"endBinding":{"elementId":"ZHwzhcJ-_HOeYHC2CSdVQ","focus":0.012020360003456531,"gap":4.810006602552847},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"wkDKo8q2IqolG3eNFhP-N","type":"arrow","x":1729.973,"y":1040.204,"width":171.80899999999997,"height":179.32400000000007,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":770877619,"version":4,"versionNonce":1453607603,"isDeleted":false,"boundElements":[{"type":"text","id":"ZKjbHnK3tNAFHuFr8L1ns"}],"updated":1785729261592,"link":null,"locked":false,"points":[[0,0.5],[-171.80899999999997,128.12400000000002],[-171.80899999999997,178.82400000000007]],"lastCommittedPoint":null,"startBinding":{"elementId":"ZHwzhcJ-_HOeYHC2CSdVQ","focus":-0.010931745888111525,"gap":1},"endBinding":{"elementId":"NEWq53lRnFG0xStWdNa9w","focus":-3.0643122517847606e-7,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"-9a-zoZPGx0Wk5WBGzp4t","type":"arrow","x":1854.316,"y":1040.204,"width":170.80899999999997,"height":179.32400000000007,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":1584377853,"version":4,"versionNonce":339985299,"isDeleted":false,"boundElements":[{"type":"text","id":"c8aRS7wpeFZP8U4VvfaLo"}],"updated":1785729261592,"link":null,"locked":false,"points":[[0,0.5],[170.80899999999997,128.12400000000002],[170.80899999999997,178.82400000000007]],"lastCommittedPoint":null,"startBinding":{"elementId":"ZHwzhcJ-_HOeYHC2CSdVQ","focus":0.001567563591058019,"gap":1},"endBinding":{"elementId":"0klkTPBxowwmlMizJcmUo","focus":0,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"cqhXhIfuk-Xaotz0M9QUq","type":"arrow","x":89.086,"y":1329.328,"width":531.956,"height":94.42100000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":1168185939,"version":4,"versionNonce":1929394899,"isDeleted":false,"boundElements":null,"updated":1785729261592,"link":null,"locked":false,"points":[[0.5,0.5],[0,42],[531.456,93.92100000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"CwkVh7qh32-ao06IqRptl","focus":-7.015697616540825e-7,"gap":1},"endBinding":{"elementId":"Pp5EoUoPD_QWftDkp3XUE","focus":-0.000011169507683893407,"gap":5.27440624999997},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"MgKbjpWWpMMWHgwJ7ItPE","type":"arrow","x":373.773,"y":1331.828,"width":247.31899999999996,"height":81.65499999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":877832285,"version":4,"versionNonce":603447827,"isDeleted":false,"boundElements":null,"updated":1785729261592,"link":null,"locked":false,"points":[[0.5,0.5],[0,39.5],[246.81899999999996,81.15499999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"kIinWryprzm_VPMavGSkO","focus":0.0000030047754464961213,"gap":1},"endBinding":{"elementId":"Pp5EoUoPD_QWftDkp3XUE","focus":0.000015451822863489927,"gap":5.2244062500000155},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"6quLUDirUXo1G0rWi1AV0","type":"arrow","x":755.578,"y":1346.328,"width":4.608000000000061,"height":61.740999999999985,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":{"type":2},"seed":1842370547,"version":4,"versionNonce":1444854099,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[4.108000000000061,61.240999999999985]],"lastCommittedPoint":null,"startBinding":{"elementId":"x6q6RAEi1HR4eeNl6hqOP","focus":6.713098934882989e-7,"gap":1},"endBinding":{"elementId":"Pp5EoUoPD_QWftDkp3XUE","focus":0.0000026669471284432482,"gap":5.25912500000004},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"iApu_NqHqKQ0e2D27fGJi","type":"arrow","x":1558.164,"y":1331.828,"width":651.3629999999999,"height":94.03700000000003,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":{"type":2},"seed":1475843261,"version":4,"versionNonce":191414419,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"points":[[-0.5,0.5],[0,39.5],[-650.8629999999999,93.53700000000003]],"lastCommittedPoint":null,"startBinding":{"elementId":"NEWq53lRnFG0xStWdNa9w","focus":3.0643122517847606e-7,"gap":1},"endBinding":{"elementId":"Pp5EoUoPD_QWftDkp3XUE","focus":0.0000031916907760217584,"gap":5.281468750000045},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"4-4Wlih0OywWVqW0PxbhH","type":"arrow","x":763.918,"y":1462.328,"width":0.39599999999995816,"height":62.20100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":{"type":2},"seed":1954996627,"version":4,"versionNonce":1489631187,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"points":[[0.5,0.5],[0,42],[-0.10400000000004184,61.70100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"Pp5EoUoPD_QWftDkp3XUE","focus":-2.2710497840287607e-7,"gap":1},"endBinding":{"elementId":"Ei_FXhnSXrzJPK-ckWoKE","focus":0.022692720126867936,"gap":4.7991710824997265},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"z4usNWt2giORYRWQidd6U","type":"arrow","x":905.837,"y":1671.247,"width":1367.288,"height":1589.441,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":{"type":2},"seed":620754205,"version":4,"versionNonce":1021248691,"isDeleted":false,"boundElements":[{"type":"text","id":"JcTqCsST5cwXiLlmrztQo"}],"updated":1785729261593,"link":null,"locked":false,"points":[[-0.5,-0.5],[1367.288,-166.9190000000001],[1367.288,-233.4190000000001],[1367.288,-299.9190000000001],[1367.288,-392.9190000000001],[1367.288,-502.9190000000001],[1367.288,-678.224],[1367.288,-853.528],[1367.288,-934.528],[1367.288,-1015.528],[1367.288,-1165.505],[1367.288,-1312.981],[1367.288,-1430.864],[1367.288,-1534.247],[1150.658,-1588.941]],"lastCommittedPoint":null,"startBinding":{"elementId":"Ei_FXhnSXrzJPK-ckWoKE","focus":0.003904808553043477,"gap":1},"endBinding":{"elementId":"2R5lADJ3ftkbxl-iMaSo7","focus":0.0000023032458501898064,"gap":1.30600000000004},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"CPr83ET0UKHT_TaeWpP0a","type":"arrow","x":764.418,"y":1847.078,"width":0.5,"height":78.20000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":{"type":2},"seed":586889011,"version":4,"versionNonce":48531,"isDeleted":false,"boundElements":[{"type":"text","id":"p0DnEqMsG70Xbcs_3xTwp"}],"updated":1785729261593,"link":null,"locked":false,"points":[[0,0.5],[-0.5,41.5],[-0.5,77.70000000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"Ei_FXhnSXrzJPK-ckWoKE","focus":-0.015238445507798997,"gap":1},"endBinding":{"elementId":"x05mKJisEmFJpydeJy0dU","focus":1.5424957574927475e-7,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"hx-ZGFzctyPY7icyHokBh","type":"arrow","x":763.918,"y":1974.578,"width":0.39599999999995816,"height":45.20100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":{"type":2},"seed":115165565,"version":4,"versionNonce":994489555,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[-0.10400000000004184,44.70100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"x05mKJisEmFJpydeJy0dU","focus":-1.5424957574927475e-7,"gap":1},"endBinding":{"elementId":"kjihYUjRMtkX6WiVpsDtP","focus":0.02366553894017723,"gap":4.799264990213511},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"9Z6kvlN6lpf0bvxjzKy_g","type":"arrow","x":692.877,"y":2194.818,"width":165.93599999999992,"height":184.0949999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":{"type":2},"seed":1469307091,"version":4,"versionNonce":30990771,"isDeleted":false,"boundElements":[{"type":"text","id":"SCwFUAU66I5qVD0nMtt09"}],"updated":1785729261593,"link":null,"locked":false,"points":[[0.5,0.5],[-165.93599999999992,113.04099999999971],[-139.077,183.5949999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"kjihYUjRMtkX6WiVpsDtP","focus":-0.00997865847346065,"gap":1},"endBinding":{"elementId":"RRWptEX6TGsjj_4dtgckg","focus":-0.0000018764457267111763,"gap":4.946374999999989},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"05RqZsxwldgro1Mc6wLBX","type":"arrow","x":859.817,"y":2170.96,"width":1055.486,"height":212.91499999999996,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":{"type":2},"seed":2127630813,"version":4,"versionNonce":252426899,"isDeleted":false,"boundElements":[{"type":"text","id":"_jv5S_jfYnsiu2UOdFpte"}],"updated":1785729261593,"link":null,"locked":false,"points":[[0.5,0.5],[518.796,136.8989999999999],[1054.986,212.41499999999996]],"lastCommittedPoint":null,"startBinding":{"elementId":"kjihYUjRMtkX6WiVpsDtP","focus":0.003610540550309515,"gap":1},"endBinding":{"elementId":"6_0Dg3ScmT6qsQ_4fx_Qx","focus":-0.0000035127711604299294,"gap":5.247781249999889},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"JK2k3qQELcm5U7DbRGYGD","type":"arrow","x":873.847,"y":2156.931,"width":1678.1340000000002,"height":242.97800000000007,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":{"type":2},"seed":1608992371,"version":4,"versionNonce":2047786867,"isDeleted":false,"boundElements":[{"type":"text","id":"WC1GbwoDGqLMcq_JA-Rlb"}],"updated":1785729261593,"link":null,"locked":false,"points":[[-0.5,0.5],[1477.4420000000002,150.92799999999988],[-200.192,242.47800000000007]],"lastCommittedPoint":null,"startBinding":{"elementId":"kjihYUjRMtkX6WiVpsDtP","focus":0.003999119897089951,"gap":1},"endBinding":{"elementId":"RRWptEX6TGsjj_4dtgckg","focus":-3.126914748001431e-7,"gap":5.291718749999973},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"nzAWutISOrYSFMLHepMk5","type":"arrow","x":2220.488,"y":2378.17,"width":445.9209999999998,"height":2297.011,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":{"type":2},"seed":1777126973,"version":4,"versionNonce":2036711091,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"points":[[-0.5,-0.5],[380.8130000000001,-70.31100000000015],[380.8130000000001,-232.95100000000002],[380.8130000000001,-378.5920000000001],[380.8130000000001,-425.5920000000001],[380.8130000000001,-489.5920000000001],[380.8130000000001,-690.2170000000001],[380.8130000000001,-873.8420000000001],[380.8130000000001,-940.3420000000001],[380.8130000000001,-1006.8420000000001],[380.8130000000001,-1099.842],[380.8130000000001,-1209.842],[380.8130000000001,-1385.147],[380.8130000000001,-1560.451],[380.8130000000001,-1641.451],[380.8130000000001,-1722.451],[380.8130000000001,-1872.428],[380.8130000000001,-2019.904],[380.8130000000001,-2137.7870000000003],[380.8130000000001,-2241.17],[-64.60799999999972,-2296.511]],"lastCommittedPoint":null,"startBinding":{"elementId":"6_0Dg3ScmT6qsQ_4fx_Qx","focus":-0.0000012850837272917007,"gap":1},"endBinding":{"elementId":"2R5lADJ3ftkbxl-iMaSo7","focus":0.000010400654226363181,"gap":1},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"sRaQaGssANG9kHxfoYjQx","type":"arrow","x":1147.992,"y":1346.328,"width":368.923,"height":70.25199999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":{"type":2},"seed":314310675,"version":4,"versionNonce":1005972979,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[368.423,69.75199999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"0DLdN3Wy_7zn-2JVNbAVq","focus":0.000001200300075282629,"gap":1},"endBinding":{"elementId":"-CnH4Q60LbZxsz6biu9uC","focus":-0.0000026506110513121135,"gap":5.260781250000036},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"UW7P2uE-bxNMtyfc9-jTL","type":"arrow","x":2025.125,"y":1331.828,"width":161.8130000000001,"height":71.62300000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":{"type":2},"seed":118619805,"version":4,"versionNonce":1228098867,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"points":[[-0.5,0.5],[0,39.5],[-161.3130000000001,71.12300000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"0klkTPBxowwmlMizJcmUo","focus":0,"gap":1},"endBinding":{"elementId":"-CnH4Q60LbZxsz6biu9uC","focus":-5.886407194147497e-7,"gap":5.198718749999898},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"9-rhZM2SATHQarL9nQTud","type":"arrow","x":1690.145,"y":1479.328,"width":100.12799999999993,"height":162.837,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":{"type":2},"seed":705201587,"version":4,"versionNonce":1536285811,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[99.62799999999993,162.337]],"lastCommittedPoint":null,"startBinding":{"elementId":"-CnH4Q60LbZxsz6biu9uC","focus":-0.000002790697674292366,"gap":1},"endBinding":{"elementId":"KG_58E2g39gRG6POMa5Qt","focus":-0.0000023038155186500923,"gap":4.288125000000036},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"9LJEtUT4Wuh706Zcu1d6J","type":"text","x":1757.2841796875,"y":43.5,"width":394.384765625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":null,"seed":431758515,"version":3,"versionNonce":681825811,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"Agent 调用 workflow_cli_query / stage / commit","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"2R5lADJ3ftkbxl-iMaSo7","originalText":"Agent 调用 workflow_cli_query / stage / commit","autoResize":true,"lineHeight":1.25},{"id":"JVwS_XZdqXX3Dxuv11szh","type":"text","x":787.2470703125,"y":215.19140625,"width":57.216796875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":null,"seed":1612451411,"version":3,"versionNonce":79333533,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"CLI 阶\n段","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"C5-piW0hT1Z7sI0bkCXdy","originalText":"CLI 阶段","autoResize":true,"lineHeight":1.25},{"id":"xiaoDFHpSwwO_T4x4ILVo","type":"text","x":171.27734375,"y":967.87109375,"width":120,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":1691143155,"version":3,"versionNonce":545627059,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"只读查询是否\n成功","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"tRb1uJ33YwzRyEoh0AZ1g","originalText":"只读查询是否成功","autoResize":true,"lineHeight":1.25},{"id":"Idb3esa_UOC7IoYRG2j0F","type":"text","x":9.7744140625,"y":1240.828125,"width":158.623046875,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":1003804051,"version":3,"versionNonce":1224305917,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"ok:\ntrue
changed:\nfalse
stop: false","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"CwkVh7qh32-ao06IqRptl","originalText":"ok: true
changed: false
stop: false","autoResize":true,"lineHeight":1.25},{"id":"M6MfXdD7fDyDaYs3XbuO_","type":"text","x":241.390625,"y":1240.828125,"width":264.765625,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":null,"seed":879405875,"version":3,"versionNonce":1868410195,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"serializeGatewayError
无\ndecision、无修复计数
stop:\nfalse","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"kIinWryprzm_VPMavGSkO","originalText":"serializeGatewayError
无 decision、无修复计数
stop: false","autoResize":true,"lineHeight":1.25},{"id":"-ogvsIkOZ_IFdGhbcpd3C","type":"text","x":1350.36328125,"y":480.75390625,"width":80,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":null,"seed":1928645843,"version":3,"versionNonce":10274141,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"执行是否\n成功","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"oj8eLklR_kyBMznsQaoKC","originalText":"执行是否成功","autoResize":true,"lineHeight":1.25},{"id":"iN7Vg7TSiB2Efhnw3Nbhx","type":"text","x":577.3994140625,"y":1240.828125,"width":356.357421875,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":null,"seed":1258928755,"version":3,"versionNonce":2021821171,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"state: staged / removed / reset
清除该目\n标计数
taskComplete: false
stop:\nfalse","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"x6q6RAEi1HR4eeNl6hqOP","originalText":"state: staged / removed / reset
清除该目标计数
taskComplete: false
stop: false","autoResize":true,"lineHeight":1.25},{"id":"ZAWelwMpzl_cTVPlOpcSX","type":"text","x":1001.4248046875,"y":1240.828125,"width":293.134765625,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"as","roundness":null,"seed":1500509203,"version":3,"versionNonce":787878333,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"decision.category: applied
写入\nappliedWorkflow
taskComplete:\ntrue
stop: true","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"0DLdN3Wy_7zn-2JVNbAVq","originalText":"decision.category: applied
写入 appliedWorkflow
taskComplete: true
stop: true","autoResize":true,"lineHeight":1.25},{"id":"1yuBXMFX4BXohsxxlZk60","type":"text","x":1674.701171875,"y":711.71875,"width":233.88671875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"at","roundness":null,"seed":1579022771,"version":3,"versionNonce":1887089811,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"按 phase + repairTarget 计数\n
attempt = previous + 1","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"uiRTVZVdqLYokkmGbez8l","originalText":"按 phase + repairTarget 计数
attempt = previous + 1","autoResize":true,"lineHeight":1.25},{"id":"aGZEjqxaThlJcwU7zWoae","type":"text","x":1747.94921875,"y":968.09765625,"width":87.5390625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"au","roundness":null,"seed":1446660947,"version":3,"versionNonce":1898369565,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"attempt >=\n10","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ZHwzhcJ-_HOeYHC2CSdVQ","originalText":"attempt >= 10","autoResize":true,"lineHeight":1.25},{"id":"q8kAv9cOsKBGFKPVTqTHz","type":"text","x":1389.4482421875,"y":1240.828125,"width":337.431640625,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"av","roundness":null,"seed":1444636915,"version":3,"versionNonce":922528307,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"decision.category:\nauto_repairable
terminalError 不写入\n
stop: false","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"NEWq53lRnFG0xStWdNa9w","originalText":"decision.category: auto_repairable
terminalError 不写入
stop: false","autoResize":true,"lineHeight":1.25},{"id":"5D7PDogIl81zOXgnL1Yjl","type":"text","x":1841.1259765625,"y":1253.328125,"width":367.998046875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aw","roundness":null,"seed":591909523,"version":3,"versionNonce":1142982269,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"decision.category: terminal_internal
写入\nterminalError
stop: true","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"0klkTPBxowwmlMizJcmUo","originalText":"decision.category: terminal_internal
写入 terminalError
stop: true","autoResize":true,"lineHeight":1.25},{"id":"FV6T4tIyZdy9m8EIp-F2s","type":"text","x":665.7392578125,"y":1425.328125,"width":196.357421875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ax","roundness":null,"seed":242616371,"version":3,"versionNonce":1894706131,"isDeleted":false,"boundElements":null,"updated":1785729261593,"link":null,"locked":false,"text":"模型收到 Tool response","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Pp5EoUoPD_QWftDkp3XUE","originalText":"模型收到 Tool response","autoResize":true,"lineHeight":1.25},{"id":"dzFvbGxxn7RuXWEsQOolc","type":"text","x":694.10546875,"y":1663.140625,"width":140,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ay","roundness":null,"seed":227314131,"version":3,"versionNonce":178564829,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"模型是否继续调\n用工具","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Ei_FXhnSXrzJPK-ckWoKE","originalText":"模型是否继续调用工具","autoResize":true,"lineHeight":1.25},{"id":"qBt8FgoCJspb7Ck5QTH6Z","type":"text","x":618.6201171875,"y":1940.078125,"width":290.595703125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"az","roundness":null,"seed":362927987,"version":3,"versionNonce":1650981235,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"Workflow Builder completionPolicy","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"x05mKJisEmFJpydeJy0dU","originalText":"Workflow Builder completionPolicy","autoResize":true,"lineHeight":1.25},{"id":"DDALLKrFrIblubASlMRKu","type":"text","x":714.09765625,"y":2120.3984375,"width":100,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b00","roundness":null,"seed":888959251,"version":3,"versionNonce":1397017405,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"结构化终止\n事实","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"kjihYUjRMtkX6WiVpsDtP","originalText":"结构化终止事实","autoResize":true,"lineHeight":1.25},{"id":"bc7Ni-lCKBhZPsqxOHpRk","type":"text","x":498.3134765625,"y":2393.359375,"width":132.724609375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b01","roundness":null,"seed":1829951155,"version":3,"versionNonce":145642259,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"action: complete","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"RRWptEX6TGsjj_4dtgckg","originalText":"action: complete","autoResize":true,"lineHeight":1.25},{"id":"NvNav2ie3SvsovNDfA2HK","type":"text","x":1926.7646484375,"y":2380.859375,"width":287.509765625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b02","roundness":null,"seed":1284212819,"version":3,"versionNonce":1583504285,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"action: continue
注入继续消息\n
同一个 AgentLoop 再运行","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"6_0Dg3ScmT6qsQ_4fx_Qx","originalText":"action: continue
注入继续消息
同一个 AgentLoop 再运行","autoResize":true,"lineHeight":1.25},{"id":"mLA5ItobOu1cDXjQWJ4Mo","type":"text","x":1535.544921875,"y":1412.828125,"width":309.19921875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b03","roundness":null,"seed":1228735987,"version":3,"versionNonce":1949857971,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"Provider 收到 tool stop: true
立即\n结束主 AgentLoop","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"-CnH4Q60LbZxsz6biu9uC","originalText":"Provider 收到 tool stop: true
立即结束主 AgentLoop","autoResize":true,"lineHeight":1.25},{"id":"f4rR--3RQUxENx690YluJ","type":"text","x":1600.0732421875,"y":1662.953125,"width":446.923828125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b04","roundness":null,"seed":1512951699,"version":3,"versionNonce":1680793597,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"Runner 收尾 Agent
依据 applied / failed 事实生成\n最终答复","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"KG_58E2g39gRG6POMa5Qt","originalText":"Runner 收尾 Agent
依据 applied / failed 事实生成最终答复","autoResize":true,"lineHeight":1.25},{"id":"rqShMIYnvTonbc52kZpci","type":"text","x":2306.2958984375,"y":31,"width":478.408203125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b05","roundness":null,"seed":1368679731,"version":3,"versionNonce":1655499347,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"needs_user_input
仅在类型中预留
当前无产生分\n支,也未接入 completionPolicy","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jglWJaOPyqUrd00m8fGTP","originalText":"needs_user_input
仅在类型中预留
当前无产生分支,也未接入 completionPolicy","autoResize":true,"lineHeight":1.25},{"id":"XXbYkMNL38QwvEToIslP7","type":"text","x":208.66144531250006,"y":643.219,"width":45.537109375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b06","roundness":null,"seed":243002899,"version":3,"versionNonce":447469661,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"query","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"mXLnDxVUujNhbcNjR2ZAp","originalText":"query","autoResize":true,"lineHeight":1.25},{"id":"9-jUiBm4GJdhp4cce_k1t","type":"text","x":69.086,"y":1155.828,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b07","roundness":null,"seed":2066850547,"version":3,"versionNonce":417474547,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"成功","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"WuBDZPOOA5Nh_JFvC_oIM","originalText":"成功","autoResize":true,"lineHeight":1.25},{"id":"o0MO-xG5XCw35yb0A5fhr","type":"text","x":353.773,"y":1155.828,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b08","roundness":null,"seed":198509523,"version":3,"versionNonce":2074789053,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"失败","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"kAGrTrs6Sy0-r64twjOm2","originalText":"失败","autoResize":true,"lineHeight":1.25},{"id":"zmf8fZntKP60b_Fb_tm_x","type":"text","x":1331.475046875,"y":345.766,"width":117.75390625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b09","roundness":null,"seed":1588957363,"version":3,"versionNonce":2094969235,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"stage / commit","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"4iuVoWHSrtVH82_zRhyxm","originalText":"stage / commit","autoResize":true,"lineHeight":1.25},{"id":"KeU8wZmuXo2ozyF9duXNs","type":"text","x":712.531125,"y":805.219,"width":86.09375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0A","roundness":null,"seed":710068627,"version":3,"versionNonce":1254958365,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"stage 成功","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Y6tSqAMHP7Ezd5tUM1n56","originalText":"stage 成功","autoResize":true,"lineHeight":1.25},{"id":"ghLjcGvru6Vk3IRODcG-a","type":"text","x":1094.9402421875,"y":805.219,"width":106.103515625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0B","roundness":null,"seed":1801203315,"version":3,"versionNonce":1876494131,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"commit 成功","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jDHwb72jsOT5lxMScTzHt","originalText":"commit 成功","autoResize":true,"lineHeight":1.25},{"id":"UlDCTu4eZIGQSGzpXDppC","type":"text","x":1771.645,"y":643.219,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0C","roundness":null,"seed":1387347795,"version":3,"versionNonce":1535408509,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"失败","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Cn9VnOnDbmHw-4ag5v8n_","originalText":"失败","autoResize":true,"lineHeight":1.25},{"id":"ZKjbHnK3tNAFHuFr8L1ns","type":"text","x":1548.164,"y":1155.828,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0D","roundness":null,"seed":624970611,"version":3,"versionNonce":1748478163,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"wkDKo8q2IqolG3eNFhP-N","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"c8aRS7wpeFZP8U4VvfaLo","type":"text","x":2015.125,"y":1155.828,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0E","roundness":null,"seed":1808694355,"version":3,"versionNonce":387072477,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"-9a-zoZPGx0Wk5WBGzp4t","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"JcTqCsST5cwXiLlmrztQo","type":"text","x":2263.125,"y":805.219,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0F","roundness":null,"seed":855737715,"version":3,"versionNonce":1267799667,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"z4usNWt2giORYRWQidd6U","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"p0DnEqMsG70Xbcs_3xTwp","type":"text","x":753.918,"y":1876.078,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0G","roundness":null,"seed":1856108115,"version":3,"versionNonce":1116208701,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"CPr83ET0UKHT_TaeWpP0a","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"SCwFUAU66I5qVD0nMtt09","type":"text","x":452.47322656250003,"y":2270.359,"width":148.935546875,"height":75,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0H","roundness":null,"seed":14590579,"version":3,"versionNonce":145477651,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"cancelled /\nappliedWorkflow /\nterminalError","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"9Z6kvlN6lpf0bvxjzKy_g","originalText":"cancelled / appliedWorkflow / terminalError","autoResize":true,"lineHeight":1.25},{"id":"_jv5S_jfYnsiu2UOdFpte","type":"text","x":1218.613,"y":2295.359,"width":320,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0I","roundness":null,"seed":307770195,"version":3,"versionNonce":80162461,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"无终止事实,且处于预览或搭建任务","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"05RqZsxwldgro1Mc6wLBX","originalText":"无终止事实,且处于预览或搭建任务","autoResize":true,"lineHeight":1.25},{"id":"WC1GbwoDGqLMcq_JA-Rlb","type":"text","x":2261.289,"y":2295.359,"width":180,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0J","roundness":null,"seed":696053811,"version":3,"versionNonce":1904104883,"isDeleted":false,"boundElements":null,"updated":1785729261594,"link":null,"locked":false,"text":"普通对话且无需预览","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"JK2k3qQELcm5U7DbRGYGD","originalText":"普通对话且无需预览","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/workflow-builder-error-to-agentloop.mmd b/diagrams/workflow-builder-error-to-agentloop.mmd new file mode 100644 index 000000000000..1c82c445c252 --- /dev/null +++ b/diagrams/workflow-builder-error-to-agentloop.mmd @@ -0,0 +1,47 @@ +flowchart TD + A["Agent 调用 workflow_cli_query / stage / commit"] --> B{"CLI 阶段"} + + B -->|query| Q{"只读查询是否成功"} + Q -->|成功| Q1["ok: true
changed: false
stop: false"] + Q -->|失败| Q2["serializeGatewayError
无 decision、无修复计数
stop: false"] + + B -->|stage / commit| C{"执行是否成功"} + C -->|stage 成功| S1["state: staged / removed / reset
清除该目标计数
taskComplete: false
stop: false"] + C -->|commit 成功| S2["decision.category: applied
写入 appliedWorkflow
taskComplete: true
stop: true"] + C -->|失败| D["按 phase + repairTarget 计数
attempt = previous + 1"] + D --> E{"attempt >= 10"} + E -->|否| R1["decision.category: auto_repairable
terminalError 不写入
stop: false"] + E -->|是| R2["decision.category: terminal_internal
写入 terminalError
stop: true"] + + Q1 --> M["模型收到 Tool response"] + Q2 --> M + S1 --> M + R1 --> M + M --> N{"模型是否继续调用工具"} + N -->|是| A + N -->|否| P["Workflow Builder completionPolicy"] + P --> F{"结构化终止事实"} + F -->|cancelled / appliedWorkflow / terminalError| DONE["action: complete"] + F -->|无终止事实,且处于预览或搭建任务| CONT["action: continue
注入继续消息
同一个 AgentLoop 再运行"] + F -->|普通对话且无需预览| DONE + CONT --> A + + S2 --> STOP["Provider 收到 tool stop: true
立即结束主 AgentLoop"] + R2 --> STOP + STOP --> FINAL["Runner 收尾 Agent
依据 applied / failed 事实生成最终答复"] + + RESERVED["needs_user_input
仅在类型中预留
当前无产生分支,也未接入 completionPolicy"] + + classDef cli fill:#E8F1FF,stroke:#3978D4,color:#102A43; + classDef decision fill:#FFF4D6,stroke:#C88700,color:#4A3100; + classDef success fill:#E6F7EE,stroke:#2F855A,color:#173D2A; + classDef terminal fill:#FDECEC,stroke:#C53030,color:#5B1717; + classDef policy fill:#F1EAFE,stroke:#805AD5,color:#32205F; + classDef reserved fill:#F4F4F5,stroke:#8A8A8A,color:#555,stroke-dasharray: 5 5; + + class A,B,Q,Q1,Q2,C,S1,D,M,N cli; + class E,R1 decision; + class S2,DONE,FINAL success; + class R2,STOP terminal; + class P,F,CONT policy; + class RESERVED reserved; diff --git a/diagrams/workflow-builder-error-to-agentloop.png b/diagrams/workflow-builder-error-to-agentloop.png new file mode 100644 index 0000000000000000000000000000000000000000..7a1274646131c97e0bdc6cf45c378f5742822e00 GIT binary patch literal 421688 zcma&ObzD?y`#lUpw}{eV(%lV;ib{*pjWk0I-JyaYpn`NMN+=yecgKKq4Bg#b^WL0u zJje4q&-e5G{u^=j-uJ%ay4JPUy5_C2qAU?UH9i^|8qt%-51yf+;UuA<;XcO227jRw zq{v1?yMp%Q!M*3M=xgIx2G?5Xv9~tuTwGk0E2ZsSSc+U(zLkpAjgOBLU_JGl(W@-2 z(6)DRaXVBfwfZRc7~-e%F*jT@HZd{rcwOT0Mhzd$TGd5_FXo*a=y;E%Ay?o3_3=g? zL59!Y|N8YGeq5|q2v554F#9q8_3c0ZA5!D%&io&@*}`YuqIKQOc3;p&{}lZ{p0h=e z5%{m?)KZWtPaTKkeSe1ccuEz^G3md?CJph^mzIe9=VrK`5PWf*YLD;qPryiybkGyI z{ymJ#@kvinD3jd%`!$onz}C_ezRUml&Qt1;@3Q~A{@*WL%aua^^smxX{^d-M$QUH$)l61u*$-=eP%$pFUhGwf-BKJZ`f z$}Z@Ju?d5O`48`zorHUljEJ63SAqz!iF&ryyz)U? zMEd28d{7dL$_KT67{n&BVYJKOvScxr9GQ_%Y$#{u)4gTB%R$ESnbEb=i@W~(ycR@y z`*M)G3kVoovq~r z-om@gVV$?>~{oj5zV39_1QW{r;M)s4Ix!8 zcnbzLHTJ*)i{7vH%-TQHpqDpV?lqxpUucUM`fR;5RYwPIlyBVP%pA}9f;F(9*lNiB za?Os6EdmSNb{AmGR{0v253`?Xv}Zm=2(i$$4`yqF?U1Ygy`O~GWOuQ9Q#lG1KD#fT z=DIy25~=WEh9*#Sb>PP)SPd@Cf=HPWe=GuT=F>?O&SZ@b_$&0u`x|~TBdBw(GMSN+ zeVWVlmy0}__-y_8{%diLj@5101A@(uknRb*<Fch}j2guc|Hr}Mx}Bo+&$<5dMpLVJc5_}~v?7&NDd4GBGkv+Rp6mRN zi+?-ce}%w%4{kgNx}rQK5;SJ*qzVaxwEuQ^{|=9TAMw8eiXA<){yf0j}c?4q3_H6-{Y$$dmPD3>af@~TM_YG>+*X-AhLL1d~Ns@i#*}J ztiMM0D|&%_edBVV=#Ovcl-hxlg1wh~`Ltwwoic|e2Fb7cT_ywE zI7m%)#p|1LIc#mx$>?6#lB;}nYdgDWJJA_&Ea2|7n^;LwK4HhZiyqqff6nvo3wicf zdf>OD;_2j9Ln2<=N3lsN`W*Kz)e>JycP*0_wsW$ZKS7C}_kK-{V;vfMN}Ak_pv$!J zz_zlSUUD?CLH+vWSw9J_GudyxjU6ImSN;#xRcW3vLzLCP|>4lD! zR8w7+^Pfp6gCGO-`+L6kmBJq@gW)hKCGEA4FZF_CA$>JZgI&@xhsn>3Au;{_zrX$G zikYJe=>0Z%8Ti~=o-2`%?tA+eKPInkW!Ih_ZhAQeL%Jo6b^`C0fBk)C{@QE*k;g9A zZ)y%=*zo3cNJvOY_VcL`?OWGz+aW6z|4$c7UgnN&q31+b-`7T8S6=^LqxMGMSN?6( zz64;RYi(2FF0;$jD(({N|L;YfEO>+u$$a+hek`v^P5mcF zJg^~|@xT)!H{d6%e=TjT89@f*KjQ7>ApU_9D7;FyU2Kr1&bS&vIIxncd{yATO-LVp zhT;D`YP+j`L%I5FTWfa??<0OcA<{RlDM$Y&?g6`N%gT>V3~oG8S>~;~Zq|S3q*Udy zNl(tD_pUEp$!DBk)zbS`3Td}@ea6%OxcVr-m-F&i{C568FnDT!ghMsT986MHB5Xxr zy9-3@ngx_CVRZWl3vVswkpdG+0n0leBQK`!d#jnC&%MM-!e|YB_G^CsezjT=tbW$t z?~cju*AdNSjD%;SXOCFgUbzxP#>C00c7{jA`*N>jf?mQM6Ni}gavz>&6LmQohBVEj zGGZOn7KUGW{`j9w@N2k!XdEfczs?tkYe)B|MheYJJq~lYx^T}P=IYmk1(Gnt7|ag* zP|tVS)Z^|hOsWA3v)Gl`Q0;ZPwbUci9UM~$9%qcYI8Vz`Pc_r8boGm1QkoepwpyUg zC131LZs|%Cvzu=>>3fvh?iSUJ#(G+RP%6=7#fJiSwJF@*TUK40s3K?yXJ`Nyj?opa z=W*tqG{ZEw67{M*E!fMTVu!}7tsidRR?pE1qTotmIXK!jhA~W3ds&S-?JcP!2;0+I zSFmgu)*XoZT#OBa$XBNm;l@B5KaeULF0bpUpWk+rR|;Dswl=YysI)57LN6>^U6@mQ|DK0kC6bG9YCWvVWq z=gUJFS)%|}7D4hJ^!#MM*=D)-Zpw9zBnb~o3FN6%x?&>c_{9a%soXwiI2D1Vm@El> z%=6Pt}zm*XmDbsQ-#WwfCf{{){|} zJ?dq@xPaesj-T({pRk{g_ZURzL39%!l7d~_!jH^+_mlO1}&4NjPPTDu(&9!o(N8ev8jD!Gyc|)CZC*aYf^s@)++UyYQAZSZjl7LlIo6pG}9w^NW;3C(HM(hf4$r!V| z!s{lw5-WUD!)?b((G_XND_pp&Zj`>IG7RlL+nn!+-mpBHkJeW%c=?1+H1>A9&nc8Q zPQWUd$M{h|U&!fKTN}1_WK3}6c=sqMTrc@Db?C@l(A$XZ{lxt-4$QV{^!4^POww-H4P5^8jg%7Zdp&{FS6+$?{ZPFsS(O2 z7uI5iQF%&wY(Q+r$^*Xr7&LAgB_g)yX%`r-Hj~n;KH& zwt8Z=N_<+qKK#Ne#iH+EJbBV};7SozzXt<>20KG?^(Z+ry_7d3O+I$zeSulGAG3;% ztUP$!*tBprm7sMg-kSoI1lE)D)5Ec%^g^@l;gYgC(w~HqyK$VH90>ki+GR1DgiVI0 z+pZkpxBUXJ2;L-ne}9?QvN4n^1u}k{JXN*rq@>+mq0&jS;HkR%*3{>QZwyl2)`!l* z<_J*6VZ~&{pX`zXe3)$97(~jzGVT7@&rBVMIC7-KHn)No92Nl+M)?@u_cvv<0zQA( zI@!0^BhgM@VXgSpJ6KYt^p^ zJIq|;)TuVgaooJXSex)^wLU#G>IohguIw{Q4Q7kFp!X6he)Ns^?mD8{1$9%n+^w;3 zvhKs!*hDEb{k#-OgzY@GVWka9Gz|zXQ71X-;`F)oc=>g0xHXU8C~UFoCUmqYh+abU z<6XHow$;bjE}IigAX3`_bRnNCNrZtzJe6t6YGw2M`}4PKg!JOL$P(LzjqwT|$0g+m zGwr$dPe^OUSl%Y;JCeBAxu_GXFua`0Y)anIB5NKWkxdZN1gVxg0rbk$-iW7=6POfv zn(ROXLr9aq=kd;L`=^c=AzRL2Cb&i0$EF40)5X5(Sh6$2I%#k4)k}IJOTUH~1U{Z@ zX0@ysO(vxaslp@?7^8Wuw_=j`$XuDOT`+6|_H>_3jl_oSSpG&#cW`Fp?|bu)*gqwQ zpJDUsU_&ZuduxVbIR&$|8?vIa?Z<`0=*e9+CR#2UTDFebRAF-?g%qwAGc_zfV%u(P z%(D&UI}PdSR5=G|0^+RVu=DwF=Swf7%VtYv;o|!3?8!A5kxEsc=P13>erdGfI_vLjJU$ops-$8L@{ zAQ_-Mnc+Oc48%up`S!FMcRhdXZBKUH8b()6iKx z%2njT*D9QC3JC{j$GG?F69YRD5R01=`aWrs1l&#r45SIQ#Eae$A#9>kAE7skz}< znx|1@L`1pgDGy3DOm$Q90}Kk|iE4<|c3n&WUOd zvjU?>A#a#J+#XRa%`?2h`V#jt&b`{2mUrX0Gc^POB*QD{ogex`bjquz=Z6;Nlhpwg z3w+9LX9Xr5qr0$$&ex!XNHuOzw6nK(doKVxei!6lTP`w|XLn!;EpbA&e#CU5aWDrj z%DPT}@(`@+tj`<4`YK3xraPc6Fn$(U@NLDhH$1O&#e;FK8roe_w+nIL$SoK$Feyez z*w5VATkac5=(ajPgPFjx#ocyd+=Y!QtcGmTa2LNst3`KD2ips}ulgb1V2eeF8R=pP#zmB_Lk;9w#Ogi-AKP34t zxbt_V1xc+^uN0_k@K3R#a)Eg zZDf=vh)O~lbxJzUJz-*Td85EwLvT5a0@!>7(^=)oc>J%2f3GDT_*8iGwdKIF;UFL z*`u8as?AP*=V@f?om|!_8AyU)LXO_2&-S3|sI0WrOQg`)1&Q%3xQ#1P0LsbcvLUY0%{vh9c89H%TzM0 zSqN7q>LQCd)N&?+e7f};bFX)#$a+w`>_|W#@Zk(!*teRQIL8?-hjEQvw3K_Z9Hz1i zeSUZww$wQSn_`|_)8vio83KD2twbge-y*C+_f>)Sh+g~X21D?52y)?ovShX~>@BS( z?`MSwcSd_Lt2A4~P_HeZgsgpAb)3E#;6d-}pspcy8BZ!nnRUzg-48crp}|*fei0Jz zI&R?PJSB_ z%guY0rKPB;n_)@9MB2VCyI~Sj_6Pgz1FJeWeKyu`$wVVZ7H;Wxt?7*P<&&j%Ix}0n zcRh|H%KHYeOZ-{iVpn`I^aIlJ;0tE z%b^~RoV8p3H$XC_YC6wv*D8!il93f9nVI^p@fG@N;A+UPG*mlg{r$$cOX7y0(W@<78)!7gYdpHq$l`V6;7ys={KuE` z({WdO@HRH3n-6mLZ^`$a$SQL2C2j-d$}kEua73VlOyTuz$;< ze|=2Qoyu+MP#|j|TzZQqb26-YnX@j=zOf-hwIW+hy>{N68Z_<4Z^&jfg^@Nyo*JLo z(N4mfbw%M$M5BV4W??W=Nga)xGx2pPPeP%r^HxmAIv~Y5P;I_lk zQipR<*DT|ZM@v5|KTFtaZC^vl83DM%_F~w{(jk1`TpyCm_MTbg)?8QOBJ2m=$HiQ& z;&$=I`wdYXx>GNV?8=?24pn9OD9;uUG%hx@-#P=0cIIJTSbh}&gLGjNUdKCk#go8> z6@H%itchAj7Y*Ak`{54yK~%z^|u_CxW~@S@vpZ#H3!>C9-T(l9SB$r)<#8f>IPT1 zY|a2dbg=fqCQG}d>uU|_f(HJwL%YzlxQdSOtIKjPR-x(nTX3jSK!T){^u(m*H}?f( zhS6-Z!qIMbEWp4yPNxhJrii%L0Gc6Jf4-T-#oUdzd>-<5l*KK8to)ZK=6cia=!iw9 z)Dx?TU|#0KS((ZW7h(@q^#aOgj7q_(X5F)UHH(PnV_6Hy*C(Pl51js6-=yecl)R>6PGzVK) zdIF@IGg)b(P+~tnN>u5wC`wc!vSeyMH~i$Q+^2elFhPv>(kYg#0Z}}X;*F#kq6e?V zcDJT6Kmx%8#176mpqor`z$@$V1JJ6=izCkdD2(>4`~J!owd}ZqMvKhJDvv-$1#0B( z7=5m81v#~#wE2As-ba3lNA||4d^VjlNCB z6c&GD8_?K>a-c@a74Zhh-6Lsz7zm8(w=*<@&^OUBu)nx$N>YOAyucKJjoq+}{Qkm9 zK8}CnD`0l=g-1&^4GvL-sxw+i~VLmq-Fe*|eMV(bIHebCe z_xQ%uS0oHc4Km$Ad9D@=f`NZ=vx;nWBQ)k~^z z^1US?qXay?#g0!1wSL*vn4VPQp@{&EA_pSC_RY+T5EfLr9z(QU)*r51YeSrVpKZ3M z+wP2TC#3cBH}T=wEcD*lV<{X1IZEGPd1b%#K=+Z$@tEPb4jZ7{Ch(3nw@o^9%XbWD_1y^b?uz1|8Dqp2yd*lqkmR&)k)LH`9XH0BzJiSrhhq-7f3pMVvCSnX z`)G9#`d$P^uBrf>3o6x~ZV`Y1G$VQ{^q|sp+irJ30d@vf#`S3H=6AL1H=<4}z9y{C zGkie=)(V)Lp}JxWxYEWOpP;q#q=@ojs>&(T`4Thcr3mZ?1w`WqN6%iss^MSBbB^3}DruD>wbA zrV+j;f7M@uAM@xZ0oAe)(B}txS=3g<3202HE+kj4ig&dkki@X{ecgdq82RG0Ie=6I zTgnXHOFFz9iWMx)-LwCLXt_8$X5e}$@x8Y2`aPdt>F`f%D|JQr`mbW=a(md_-daFt zvuov#R^o`b9Aw#qot0=7rK~=$2~o=tjO8S(bPC1KKfNwwRYDNv?0I^U-8PzUCN*d~5hj5XKJ{}u0yq0moQ49_I+Kuu zi`Y$kQ!#7wPUX+{ZyGf|1{sfV?80SzRDkb9*lDHTrtkwGQ!ha1eqR%G(Zg zAbTPCs`%^rX3xril|g%C<^jLkj_qJ7_qu(2_j(ME@vWl3<#Ir*SU}CV$#Alb9*d8ol*L?kc;zMcNO{PYhauA!=cj5ILp3g_ zV>67SLu)_*x(>^8b%g?*!r|Lo;H5+8X4?1vD1N}?l~@0rBJ9Zhz}_^TJTYMec&5G2 z^seF+1}2xRhUUAl+8!8}UiE{9xEiDG(YwRNmZb39gzzuNx&eJGQu6tT;AeLf-o5T) zG@4JCO98oT9uFCF#@x^ct%>G&ea?>5BqRS z^QuR6OX!2`*}89rPsFMZ za;1kF%}CdSg!WOy=)jfnxE8Mx7QKYw*0^Quh+^YS^rF=fh5_p0#_#(yDw$bU24l4S z_krk2fnL4ny0_Gmq$eg9)j3>Z%QaE$|oS$Ki1fyaA;Eip$e|Fx;To=X| zAuPovARmjGUyk#GhF!54>BS-xcUc`A$BfYw28`0w<2hh*Fdi$-U!d!!t@8u~BE290 zUGO~J8XzEQl zUmtZkJ6X+T47s-e1`+=O!PrnfB+uCbulg3q7RDJ4tD&b5*%aMU2qI%SaX;q~c@B~Cw&+jcM-&Co3=H_TIa_y$f8@p0Ve^-0b7V0Aw{qMrf zL@QYEh}Vq7>w%&#d=}DVPCjegEHYQ_m@Bb--h$bwq=m6VIHs;PHBxFmT>=3%s|HYJ zp22&ib&v@nh1*Blx9`Zu{5(OOzTa?f|Ih+5V*?nKf@BHRQYgs7u@K}-cMa~X&de_~ z0+#O#25Ym|^8i+Y&sXRwB}*cxU#-8&)-Fi_Cay~)b(KlcntsCYeN3SO5R$MH^x`*_ z7J`<6_>khXs&=%P?6da5{@QjZjnI2RsHjI0G88Q9XP`s{UA-HOw3ZsDm-G}CK0j!D zOSZlr#vs*&*||MjmI8)X?_#k=US=b@>Mt#xf0HSs}b!D+K43Yv8w^T7~sIe6Aq5^GY{XlnzTaidOEY;g9>BbI!k^HuTJyLx%-))Ll+uWhvR*$H_ZSlb0#)0fcA zEzRW_HfVL@5#+=&fU=~Jfs=N(K{KEO720W{9EJW;yEb+{R@na>qzYU*QGVg4v3<75 z;%--g>?89EmsA-5*;n}2gCEwZ^no&m`yL>GEaBms;tS^MRzo?l4mY!XNKn9MNGa-w zD|}xJI3O4&*Zt8CMV%}gqE-feSP}E(K|2bwMI1(G&+-iPjatHp!idetbA5p8WUezd zqT*n0V_drs`c2TPB&792sweLIvMoqyJkr1E;Mm@&5bHx>_pYQ)*NSOV6?-=B3ycdxX<dx8?C0GQtoPa z>NtR&$z}NiGeOh$-Xlgcn^eAHj%Qz68K8=TStD2YOy%uf?tn5t1vo8*l#Nb&oOp_P5DuuK;j)T!BIyKenuPq5QX}pMc;i>$!^%8WVWC&cOSU8I<7= z#X3YMs0c4Hz!4y3DaD)b*+}#TSLQ)c(IB%HMQ2B;U8m=-$B^D%7qknk!kx7Er07 zpsGo=9QaP$;u%rrYXi(ybv@~T7DiLuo@qh^Sz$XufCnl^Sng02$8n6X{ARMxKEUl?uF~3o+2TTG&XzeC>^6mq{<2lD8($ z(&U#p!&}&Z%ZOgqzc7n~=Lk?Bwq%VZ^Y&h=gB&?mIN}yn?RHa|jOxJg=62h;@W~9|nN2{xyMZSRr9IC^<6(wh}rg$Q7-|vov9)rKKq*9Z?63koopc zC7TuWR<9q0Qt!N%$mcR?kGuz}nl-lxsNI|(a#2@=-poK4fM6hrv%_u1jnW9rl*gkO z1g$B_VUGbPT!5XUOLp1{vDr0hepko-jq6TI?JkA?i{f7sbM#F5GD7|9(^ zsvDYTmJ7}F220>v9ZJ8r0Luo`e%k@kn(nyp2(#|#oq^Sb1h2qw*UJfuDS3%?LP%q5 z`)u=bDv!^|(^GHdQA!^B?*dEJ>k$>=R@2WM>9`3!DW@aYwh?cu*-y*PcjxE*<+lO* z;+JX~ARky`0HV7@aE@+83>%OXa3+Cy+j(;WOY!YF@MJ}xzL5jxU5hXJ`6Vv4GAJbl z@hB9?Pd9*W3d|Y8QC#{qkIvkk&o3Q4q;0^{{15>DwYMg~*<^jWSyC3_TB_A%g4R@0 zA88^{v_QPZ!B_-Iq~Ven^P=|!CJ_<-yTB&GtPRhSnD313qb?;jp5(HUNb9b`h)*{C zm&qSY9i}yU@o%n8Pum;kAU13JYRXobR#OIHB@ z&~)q4#Dgc#7qrTgkJh~#(|r!IrvH#BRqjN{Xvax-2!g6_fiu^vn|^^mN{B}5=^lP(%qSjA->I8u-b)Jo?&>Jsx!cos12WCVR)~WFL{=llx_@@d>3ENqC z;#7aHknNO0fXclAjFoj86&5Qkd^e|yQ1OA;yi(09=`QY2Mjv2 zo1BDRqP|N4r_*r^&=rpAbFh>7oLgMZV8ni2fni1sQFMSum`%kdnD2NkZ_($f($`X` zDRk<(-Tp##Ya$>pZyaZWp?tjRu$H!v!#asezY1;=yT3YQYq!%WVm(>KP{bE&LtdFo zn8v$0Nf2FY(W8kSR&9$417gBtivL^=vfN(k<7 zrZeg{9)C>?L-9=90qH(`5qQb~ z%ct1Oo9?@C6IQ6Wdc+C=B7H5`Ew!W#;M4t&cb=>baVV#t0l%4vf6{ol6BfpogMh(M z(4R2_js##kZwHfeU}L|C71k;T*}(J_=V5H{b+$JUEc{y_&kXYUfjr@lJ_UT0pN*Q5 zvycs)OD|zt4YypkrjCvm+kqvK`O>lmd2{;_A&#sWsDO;_fzE_Fm2RN(2O=AHoO( z;k9#=Ouw?Y&-b#`7vNWa)p*!fAyk*48>3#diMgrVC)OADfsD9T-MQFmq3xFQ$&+zw z^n?$XML~5eFZb==+{wRHsx2`;#`TIX%4Mtu(qYBC8k#BcCf9P5ubXx08bm$Gt~j_i zy;Bp1M&Gf=z(f2xdr`o;4~t04>HbBpl<{2SwM%Jbb;LYd_8yC^%`4^OL_D_wJ3DB4>?yb_QBiD#a}YZ9~%N%4Y*v zoqm4x65_T)6eRa@B`roY`oca0zu2~tq2RX}x;`QoDYL$?UP&mucv1}+J*1zC_&)wA zw!-ywX1o{sg(^{GrWy%H#R2vv20?WJ_D72`t0m@*(LT7YN8K3$=`ylAyl^&nss(rV z>bL3X8ZO=xLF>*&XVktq(XA)*h^pmTO@DJy%|g7pJ0ZOxo6#VlXQ4Hc{=BnVJp?4o zTe>TeL1Z1fE>TGpt|OkDM%9#bHH#Rc|?1$I&uR~m8T@!o1$!TMB<0;UAu!Yt=&)+W|y{RRLBd)nsPU{6& z{|A688qo=F0z6_kF!H84uZw29_yG@p25g2|byKDWH)5PzKM6l{2Dq#4!sA7A6vN%8 z&$kj0mmWKGBW>^Y$jKW(bYJR8O{c0th(cQ^m(1cL?#h{V70-jCRUf%nkt-ENsj-PH zVR)vMyX>A5<;`-XlZ#DN_qR~@*GDNb<%fTM^pn1&%xr7Z7je5qDQ-VMA{`MI0#dJo ziGKw0a835@{bN$zm$+wwFyb^+@fE3SY_E=0TMU~^4O^4$-fmVpCEJb8;a?mkCo}7; zU$1ZhToKk8m&Gk@xF)P0noSP1-)m&q+Z-dmF6R@DK0f-{fPRRyU>4`_-Z4W+e1Q!` zLUoz(WZmOfaTe2eRKZv^;j+ca?S=psEs2}{t;H{g7UNA%hk_$ z$@9~!-?pz(1i2XKvMKh;1|v`#an*Px&zo`}w?ZWLwkP5Z7dhcIKHO7av*ORyC*x}- zZsMBvZv6OS^=C0k*+n3GB5y=^M-QcQfQ9v=A`Xouh?V3@@k7 zkE-pwyNTl~4QG8YWb4DJev-k`-#zRrAK2bJ4jJt3k%uK5Yw~^-LaNFV-~ZrQW`EYN zNk}Px{)CLFK1g!B)9r;1tJTV}*PxDSR7jMrdu*lF3s&lyl~3))3zbcFr^&WDV@WO0 zGZSt%t$ZMDK*q&r3IXfLKUE zm{Ea9XPLBL7wrDA4%~LJE>a#&I>*VJTWx-eN;O}*e(P5J+uM+Wo00g(X4yK1xD}WQ zep(ar>~!+l3etob5;%%Hs4({#= zs+PIPB1GwYdlc1V+LO0wPTy03X)x%z#2b;t3fsP0?t2-g@z5|T32K|k3Y>*QVEDL; zzsR>(Z25dBvJ42pn!9zF*hOq-M^%~O-W=5Zyd+XF5C-yUr(?S~O}8N_)yE-9X`#sXY&UG>AJdLU1 zfB{oB)`5RFDzT!@<@tuBT`O%z?7SFR|GZ*O*5pmsEmU>A37z;Ra624WRA}ZnZr=)` z_VS9YTrF*P3K!l zjRaw@!N~TgwtcO!Y33~_0#l>otjw|fh@x?KDc-LNp_tpVqpP!#11Pz;;p)vkB5Xs= zgXO|>Q)(D?d~E$|yawxp671v7H%=dJ=;^>v+3^eAhY#^%_TzluG5f_dC6}evHLggK z54UCc-I6#cUnza$M*n!%InjH_I9B2dbG zquANNSp>4gwDI7`!sm-&eAmJ3Se^o@KC=?>#;9r!#BB{ZwiQayQK2xg-woA-p6dB- zHh_{nXH)4c*bET;z!p{Bb#1z@1Gr=f0sP0DlwI9U0Nd1WlE~E*l9IyO$6fAm!4I-L@{E>u()SvPo4)NtQ*qm>h8~ zIjs)5t9N$Ha_LppR)Spz)MTy>SMfZrQ^B8I#*&A?3m)E=j*1_6<>q%6Bqc&T$x5>` zW3Q9V^r-Mpy*!{l>NZ65znR*ydmMi)W0oYcW0cvr$&cH@#LOi77%!CF0sV_Kx0a!lni7+P$=mYCrh(BL>S$ zHYaR54xG=owvAQa+&17KKfImrMK;7JOu~ByvwA&Rqz5OYLp?Y4+1r^GJ}cxconh{v zE0PJ&!@@xlhVla*t^QWx{X4-Z{TrjxQ-SXmx%9n<9dzwaENz@Ngs%PJt?+?wyc7g8 zZaJuPM=rtlQZi?eHCRrZWy-h2PvFxo0O8m0b}$OxZMfWim6&w^`sS%qT#8pW`q6s0$U+@nNz^$2X1_e%z;h#Bv&d6$89qUEA^}dVztlo6IEp)OpB{8IJxBJCeSvvXx2&~hMZ)Z0+ zo6%OlS?$CS+aUHFeoHMtO*wbIUNR{;SDND*%A)Fhxsxt!07LR5asXoh_jsC8@-Mdd0ERZVy`>L$U-Ut>6j^RRi*4GS6dEsN8|O92E@(aM z3yQeuHO(O$4@&cOAP)l5%yhh^{K#cj6QKU4s<^52E$UW5bI8EB(=m4)=**ES!vd0E zJwPCc#rpJ5^6`R1VlM6*aPyw~+{a&Y0J&!j?8JaYhh+3r)wtigJF087fHlM>C0ueOcOPhOd zuZ+NSa(!k>WoWtFxG88u5ZQ-*R>l5{3s|=ga5o-HkzCM7uMXH+8zCrMAHQ{9c&Mij z{-MRDgF#|i^dpf{ot%gHJkD+P|jeO?- zyuF34q^3DH`0%dbD^I^M5eYHt?htB`tCzg@xK)(FbP?W^Fy8(|;OpoR239>z~ z)A6nhIwcBD0FRGrXF0DASoRRWANr$D0PC&RkdXb!9u*nw9Im={64dK(gHHTnDf6d?M@q+}C(S3U+8#Ilx4F=ejJhlDpaV1oVrYlkYPn=<7&RV*83fxxPcE-7w@ zx{&Zlw3fqNU2II6?g-^(F#Wc*Vu;!O9ki>^)(3_g5O3ea#g2<+*My{Lm)OLTE{~aN zRl4R2JVr&Qr#65X`AW0!g8$I>a2oVI#dHT{3Zrpdb0w}7Qc}45k%lR2h-LUM@#!~| zn?x|zn$Si|DLLWv-8{@xG2w=!@GZAS%pq~4SOgi9BOPhShunlW$OLm;oqX&kBGjKY zC+E$Ltp;ULUzH+y-+jqZDTBC9EV1-SYE3x5cY^H+blcNB_S{|Ia9$U~jXKpg8e%E+ z>boqRA{kBaRjnuMZkr;SIIN_DQk{I_MFK056a8^WuoW{Aq-E;1rC}2$-`2RuN@DN7 zCiL5yuAli5@5@RjXagg5Iv9{6>qXz?eg)v8g&>GOwn#z z;C(vFwFXR0-{h`6jQROlKFKU(KfdI)RzGu|?oc5wMXt`n6`hAX7R}aqHJ70~HLfPE zT=OE0qHn*zhTc}Eg4*aoc)P+dq|UUZ{PD-ueZF$9A-&b4)#MV}NyE0u4GeSm!TRAh z0_2n~N+3VAh#R4{tq<;yA?~-;qnZfGTw5RO+Qe@YN&cde1Gx7 zR02|DK5cY>EO9|BmaC?Bng2}j6S2|G(yMBhAMad_A7?~v1J8gkZ8D!(*m_>YKIoje zq~Ag3aVuWvVYpkhGw6I26CiA?Gv zqV-HOr6C*@VWUx~WC=8fp&}f9;#EO>owZ2h?#ouxg-wwLJ7}e5Oh)M?NqUXG!?*2A zD{g~TT=IXz(SW^bh|(%Dw+VhnEzq0PVhpbyeiT%AMHaDp6YT_tz?4T7u3zm*Rk;96 z$@YNfdJsZR2OM&ONWudKG3S2kn(dcQVHD9(G5i+1&Ed%gR|BT1y>NZk9pG~(EKYE> zOo?CH*Ymq?*MGGsGhGX!=fLmviV+p_h z2s2e1su{Aa?;Tj}$#bGG9f<%uOxm6WqM`sNH1_4h%6;7k8MbGdaty7io^T0^t^?ZZWwOIhQp_ zsjC{dz5h|`$D2T0Pk#MrRd5EF%JPlYr8LSdv+>fHl;Ro_Olhjb?VH(k^00?%xYnpK z8N~KU>>`gNr53+L6?3tB&YuveGAbQpfl4zocB3Lk4yRMIl2#!*EZ$|!kjLZX8b$I! zw>K%&^COxpqB)3kHlk~PHG;C$YP2Ym%B=$EnOr{>gMI>{cy=+Ft%6Op%AKgldZeA2 za>GE0PRtpi>OuBk!vH?MQ36F06Ed20E}ba9ufQK)8-`?nUzc!*SlwsL-9Fvyt9=f) z7EuL`S9{ZBH+juM(@RNh%}q6}RMPV$zK@1ZmHPlDKhWiTiRnh;`CYeez#`GzwdsdI zpU}fXQ-#aUTiDpTe_t4^-w_Z}R|LMV2Hb(q5?ZQf9g%@921wYQl6mCdC9esyd@L;k1g~s2C;15ysmS{k&g=4DFaplMJw5jYJp4^~;Lz1lTdG>`yt66~7YTZN zyHoJfIHlTY*uQ#`rp_Rie|C@l<4TkDt3P&#mB*$;fa>6Oh}F+j4Zq4ku9X07m=3Ba zL!aP!);%?BLMwi&fH%7J_4)r_1l zFYH*ZQs_7KykSAa=#F7BbiMa`W|?V#TB35Hn>JbHOX*6@aca9$h7N~GrgI~a&8z98 z$$){sA4p78&38#%F#bdq**Ha_KED!?D5cmm7r^lqk$n+PZ%8&zIBk;4w`jF@6j0WSN0XvcdLqCB z+?psxk}xl&_#qLPuCstg_Fet{FekPW$SGmK>QqjET>#8?%XW)hbf8zB#^Z3Km}!F# z?F1n-3F!GD(|)cJvb#?)v28)N2yyuL*<$wm2s8cHnCN$)s2G$Qs4b`)*%WjFcWpc|Y49TR_)|5w^ee zkx?NS5OlSLsHaivZ!ZO*d*?tHs9^iZp)Cmd%v#=YFEYclzX%beDWS3(@)Ja0u~x@T zlRcGh%$9*8BL;Me3e+OW6IS9<;hJH$O93oK$3By&@CNp%cQkaM0}_2GGBN#@LR=BU zf$r`|ILP7U1cNRcV^{#}KPt7GRt5$GGUYIGjyS4MNx<66t_|<(Z^BA{W|kra+8W08 z1%UuF5LxE3Ia_EPb6>Gqd1|E1_I(`FKl<6$TZpK_A3lx0_+>@LpBW3e!ez#E)X#H` zY&F|%Vae+Ov-FzVn1OPhZTjGFfhQ+u5biIIf3*d#>j#_6NB#e9&w3v*LP;kCu*@ebMnobIi4jbkBB0UB<(F1A=8N(Wr z1mu49P`@Ig;(aC30ym!v@gC{gwn5acs##5{cgKe{^)VT3mVcXSg(BT`9?D-ZY^xHfdWX4_Q7kHUsZop6LXkwGJ;19}}TaYPB2U z3)Tg}7!O(vbRNQfro6%BdH-j*WhxPNSG?7o->6|mJ6SmzvPo$nbxX$&Xp z*!%z3`to=x^Y(xH5~5TnMJcJ2UG`;EOi7CtitIaOm+Vw3B12^hWg;z7iY##?NsevE zF2~YAb|-6=-}`QArg^@w0gO%W$DOxo@QZ)<- z@UP`h&lKmdWNDe{)Kn`J&YsIMc|_IIx;Hbf`?^9sJdGN0$jG4jmT$d!o8l?f<@79^ ziXL)|J{x@AMvZ}wmJ8B~EH|xcE)Ed#9B#e3Zg*xIZ~DU`&*At+YWwV#ssuVqoD~%cPg5VokPf{_ElKfCM+kZ)ckl^SvPiRREB*t&}bTz*y*6@ zpwE`P@Kr2JoHzXf^?_4Tso&}D$%6p9MQ$h_&4YYP>`1qdkNMJ*&=N4@(0dak$_>f8 zgFAQ(tf9^~U8nFcPa`N;0h&dH;cN>f7MA&*w^u{J@!4}}EOm`^ZD#qcC18R8$Rg8I6|=WRm@E!~LRh*b|L%6)S5=M4G_(V})-qwl-Z{%>2B zZ;}Q;a#BW~faP*pl-HvFr{jfc390u5n5^k!%-@ck;rm*$LQnP1Bg?(M;x6vFPqwqX z=iPec+&W{wPPAEs@% zfAA(li?q#H&g0=dMKUoZH`NzU**^CdJ6ijA!8JJ6*@GDB+u02;MIpS}#S?(*Yp3mdB9hJSu`^BgnouHu*JPay6iwudk5-vrH z>b<|I>US+{!P1H80)3JG?Tpj8nWAGAcByeQMQvqad~tSv_L1YRgL#W}D$YVmT8IE0o2!hZ?8nbn&X?P zb!nLsLxf-%*)0yqY9*^P&%6%CShf*PIO~hzxpABJh1)*a!H*+m6(JKjFiW$c7NQ`= zYsht)RULULT7NrixGmQ(GfKIbVuykgby%sp= zSkU|2>Oft#4L4zONo-8G8sxsA@5r*AoS#@gUb~HX97ORlZHIUl45v|@#~^;y_sTun z@nnJjnu-5x*;+O|(~0(7GkI5eN*0Pw>Zj{H^Orx>`i&$n<1x}+k*MU-%@k^p_y);5 zR7xpR+Kq&=Z_|<`y@<|9STPm(cxh@(GK9>^y@4*I0mxc80%9K9NmN5LSb8Q6nPl;G zp9QzPHY;V3sGRMi_pg3xl-KRV8|;1hH|Af?;P-zO7Up>HZZyohtAz6kYceKVA%LKr`@1EbFEd z=bFQZ$|~=nRqb8q+A65z$*`cDyBE^P;`biM?I^2e#><7EO=k{0hF+9c!NVt9f4__l zBy4P~;TXx{y%r|?igg85zZ`xa7LGSFXtWQKBZ0NM&pIB3#+}^XIa(|cgs`BE;MGMt zJrf;R990wa@(v{z^~0`@F@>(EC$3FbWM4Q_=K$F$_o}9w{4khTqd2bztb+_D7H z*CQ}q=)Z4Tj{Zu$hBFS_7C1LSScO;@f&n$@>Viofh z(Y8xqfyfEFn=S|iFm?`9c>#rOXNE$CE`8x_ecH}f=MHejoP78-Td^~{45zKCe;keg z;ebVkMvbWrv?8~f4|Bpbong>ujOJ=^{p3Y{nt*=-?%xMEo*nz#-$t(cmb%T8+@H*h zpq?z^kuR197ib>UgJH&oCg&)R;bnwSd3(`l@X! zpIcT0!_;kx@t-2jC0_Fa$y3g!#!kJo7xAA5gFipTJ-YEA5Rk>XYXZLN@Q=aC#F`0f z(P*YGMwBBtj)t{mw_uSvw=Xr@6q)gT`?D%jZWLZRb3O zD%oPT9bp1JGber1=cvOrhm-<`L2HUTHA&F3Ra~#7YM?+l$MzxuBvP$XTdh~UsFye3 za@*=W(fd2%vzm>Q0*1%#g;_doue8A#th)oYwJVX^S}!54_J zMKpsiUO`o2r%1ESJ##xBE@G3n95C6*pUAb!5He47DE-YO9O@yJEy=9`%Skr zG?J8}8Pe5Z+XJm|@U#kszO?0S-Je4PL@+@j_#-apCzDWS@oBmzfB2i1&>Q z0|FB_ZGn?i>ido$$}1_v?f$xVLnZ4)KV*o#FDcc7Rg4jur|$_uzS~Iy5=#ry zCW0#Gd4PbkbS5Y`G>YRfm(1;*=W!oyT@9NonvJ0Bkx?3)M4BBI72n>j(tMO?<{PuRa#1e zQbPHD`IrsXq`#ha^P011y~wc2RxNZK2gd*^wjg6#`*5doiyaForZy{g6TXk zHLFJ>kDdxB*q9e1NGJ?(rGX;vX3s6Xa_J$4884^qzQ8p=cYnjgPyRX}&I7ro^R*%5 zR++(WNvT;u&fU^jPEyy_3uWt4np1+}z_#JRit|GKvCC+}TCUKS(*S>wt^eC5F;tdh)<>wOalCpF6Y!?m^ z-jY)N|9_X}?}rjHduZI9sbqnnwp?x?&~GuTNx4yV2XDXaA+NfJuRDi@GyX1gUe-&9 zftCG?OEwHjIb1LN?_;GzX6}nKRzqC#ob_IT#~=&KJ@l8?kqU9w;F&pv@6VFp!5xPK z^13uNo#xQ9 zq4bfHk4_+r>{SF)-?71Y#f|R$wTN+(pAimj3*|b0?!wppvm+a)gH)v0xqa>XXXe5!X|drH2_&!EbUE^D>oy^KWxd6_aC+@cG>$IOgYhW&luONbGfh)ID%Nc_hi}%q!xYYnZdp>q7Y)c2TzY}}f9BfO34(~> zV!7|s=UmmYAK=B6JhwjA>FnrX&0tin)VEe2L{PE6F^d{f!b|2Q^B1 zg=aRpI@T&u9{lcNCQTu9; zMp9M4(^olLnii(5r{RIK_T-9qW#wE0Wk-S6=<~%k&sB&S$r_;-G_;q0%(1}%?kJQY z`FibwS1)9P4h(Ljg-%Mo`Vgn|U4mOBE$NK`)|Ym0nZ9*>+I7(xvR(4QcU#2`ghC3C z+rc#Gm7t)-_9#(q@KC4)#DV1qmGf@iod0}7QBp9sy~}0^#@zYc`6r(yS*Jw_$fWf^ z4cs^tU{O8(%AnZ)bw>7?*ZHCp@`_R%-MtXb-jKH1j}#FBq>b!D%_P^*!-qvyO_Z@& zetrR;Cr@U|p!nRhMcFkgJpl#h8+J?hf#k>A64zgn511ckB{~$A_jtKNaC^p22ztDB z?)uFkP<0oWjL4xDw^)eV1iD%$X{9@%u)o;2xST<|TL?DgM3y9N@ZI6y`?^0LXd+F6 zRC%0yKe{nF`b0vLpYw^^oC4A*jxDaDq~Y#vhMcIrabM99+L>|WJ?U?iiRPfG9>~y7 zmr}PG-}suIan7Rd-le3~Zuy0#dQF?;{>{|%<*EJK0Q9ptn(?Lg&$s{+8saGF=cWA- zgEND)ovPb!@f)yoS~aI?bIWXsE9nKUVFvpQT+|ypN7~t0?#^Bk*PeuLoeOmMZp~nD zn(=m-0=lRv%BTFR}sJBlPVmxC--+b5%qF)tT4+!`d8$Peu~6knc%mJNIrvfGPtQr z$Db;tdf_V*#JiIE4~ovuE-RQ`{|541@AsQGbiSMxj!0H=;F5nW&P0{b#3C3W9%P0Syo8MCq!IbPC#4 z1*#8HkM#-qRoi{$71e$FI5G|T`Z!Z>xEP|OEYc!xdEA0iMY;0MVdbCa`bMDJvIob1 za%^A}^u)$6sReEzR;E4dhl@OKCMI*x9T%#2z(MV z%u9<~RMH-wc+hcg{qx&mp)SQWdzPYljzBcr;4xsDS)Va#%4j_oBQ71z4d zTGsYsMemZDgWCS3Q{|2h8|jzUn40b+vQrbfB-%JdrFGt$c5tiD(~Yha@;BG0wP=I% zJP?y!g4);NHooE|wW|37K7>|Amoo!*otPQtB}=hvj;q00@Q}H%+k2w7-9v{{Ql`Hm zaHIC@)TlZgG~v5b{RPCR?9e)Cy|n-MYPRAkxA#lC`o{UTsyW|yq*ItK>@L2)kPrTs zp0Nx*j7w$a&-&a#tQ75mlz(a*lnt`cSItfgle_Yvh)A)YqrE8)`IGa(#Hq(#?XSku zs!<;(DROj4Nc}p|xAm$f2H!`)`v`A83VUrw{CSC)S~}V+k1=T44(4vf&pBn?pMto| zQwsNT@QtnB&^{f@FPLLsRP)GamTzn^JAji7$tkQj3o_mxA2n$ZmYH-nSylD=uNDdX zV|^uPRYQ_RazekU{hsKVklX>lV(!lwzMTjdTYYZuf5Hma_j#mhg&BK0N;JeNo3)@t;?p*_N$MRP*`dzhSq3!YrTv z69X2;0xwCcnM^9^uvFcvoA^75SwTL8>NmRGg5RQh?BzBY2ApjMRzHyfQ2I@~uy!IC~_QkmG{O5SS z#~}GZk6pcywz&(_fp1g8B}Xa}AI9sSkkKJ~=^&@BQ`emSyt}3q5NHma=eBh%^Xlu9M z+$Yq*W?E;84TU zMUICH$Clp@Bn>ga-IdcSHH;j7(=iWlv6J&mqD=B6aSQif)`VGbTd1 zPS)mkYXzytB8}Vvy5C+!r_T%{{6(~l@zZg#b7#xvMdZoRLm`<2Ux|jNOfZRA6cDt%I=lxfwQ*EN=hK#N4+hRtGx0za$ zU#k#T@$R0hK9p@?Z0VsNK<3XB*?wTnHdEE^xvkXDBe%GPR9&lTkN!P!@$6xqm&Td^ z_K!~g^Myb(cVp#Yn=L&3OrHw9ErLrh4wu8j@(j-L$3}T8q4zHV7)69#I&YTN-YgSK z7M9Z9PHTpP?K%Jk3Njn0ewSep*aPJ2Fk~+7L(MBd*e}^i#*M1JV2)N?eScUrDrmXk z`aiH*0-0bI)jEGD-2Gw1N7^5P|8$IszN}5uqu$kx5sT6tN6(4OuNCsTwry#C`)3X6 zQd?++tyk7=xwcRndeU!`Cz*dr#Ysn4c-h$Ga<7qBi%a6dIVMiG0-1_3;rSe|V_toJ zYK6YW_CIs}|7byj)+mw^&zq%XsQFBZBby=+vC?M9mq!wjddaqj$b!EDiEIiGdjP`h zsC`Tk3e*Qy5vEjID#16H0u{`FaeGAr(5dxG?i$7Z3#1j~v)a2M&k)Lqs=%ESv@=!^ zp;%1Z8`=w~#28G`6b1<|+7}#pq|$3tozywFJ4oc7lgRa_X9~n^6aHK=%Y(|=MoCZTxpD;Wmp?k|ZKW*)L1g+@PZgPP8?;^cYH5wyIz z9ggX3Z$sy2NJ2Kz<3oj!pP|a+z%cWSuWQGCs58%YHeK%I7+Wo^mT^4DCRr>aoXK}b z%EZqL;9rpg`%E4QyG>k>G9wvVh_u{!d@a-irA9 z!@C7$VoJeHB5wxsRABuv+Cn)H4Qq1tO9fUyNUXfmT`T_B5{399-*3aY zI`OjG?ghl2;Pd~absT{|%}jr6aali5Xw`HEL7vsOu2%$*H7j?$b}3uysCTnFKr~=F zNDIB((5KP-C8saPa>Sot93{-?Woi?hr5lG?gz2mEfe)JlO{qNjgsOEOA0|85ZHz)c zSaa-gUyf?cQ+WiXTYRxr?nuKkHlGzwt=|yJ$_KA}@haAuyd3C>v5DXhpnPLNvjoN-xp2;0oW)=R0GK9v<7q zt6PmBGPt68Nov-X!$Z<}*`BMb*gYODhWktlrFi5P8RXinV~M;IZkOFBf~>unU0O=> zr=E$=m~?hoJewJP*&Hy#|4wg#kYFeC_}fPjP@B6Ris*vu|l<-s#QmQlI5Wo&O|Tj805 z^GAzhPdGJSgd5EQQj{B_R<7Yf?d!~b3;nIVSxU<9E6>H{>({Qoz_kY^H^~bV?v^!w ztl$m(`Z9MLLW2C-%t|LZpPA-3eQSN`K1NCMy?%Cw#ZL2QuNqghhuKY9l!r$^Dbxkq zLVx?YtVzxV_6H0wNy(;e*S@~?5)7nfxEhGTw#4qy_e6t&`$y{ zJNudQ7n?LJ^LX{>x_S)~Z`b=Wv!%ySLp&4n%GP}CW8}oE#-zOq|`jhk)BsyV%aOofv}V#MGzx7RpoHF#ZujUj}3QM)N&QO@hrI5FG9( zGH6viHQLEt^zf}`QJV+2Fdibu9dWl85wV$STric!)@CoSCf;nFKi2nKwLz)8ze4Z8 zcAIJ=%A+Ig8!QV{3cR>Cs7NkQU%Q-6YD&3&PTQp5iB?^=1_un@}uC!+V!2?UugM=cbQg>~m(6>g3>`}K=v+LUlk;~Eh zI`5356@H8NEsI^WC?&AC>lSSxgjnq5+(4YXboM3!XMf$MI4i+j`c)=MEYK-RIDj)=uT z*N#M6-l3N4^2fNq0s(X1^QKu_i}D#PA=x%_vhVIKXh~mHjJ9O6V&R6x#G0L_YR%sB%XvLr)%bZZenoh?~I zD&{AmO;+xD?td3+9o)aY@0}WMOQ3UslDs6U0>brJvP55XvO2fFnJtIt?QQz+=Jwj~ zHV0Q=TF>$~R9>Ze;T22tU_(aFuGmCmWjVh+fFneb7`}5u=O6;65;cSoi>Z^Ww57ZJ z`tU&K>bsBW)u*eqq<>-oEH?x$Qv1!f+CEP|cx8p^_D$NJ>hZPp!5`fB2kAs@>LRk) zzD+$TEr=4Zv@|8lssxH-F25vgWt9GiTlnDO!z$mIF?#;@y;^R^A0B(gqJKJ=yTmxp zRlv7{b)5{lQ0L7=v{&sji>(e>FIE#WXmA_xQDfp32L##4N6N7EO!nyvh0zcEs$6z9 zMqRE;%T~*me93cLdVa^eQE=mWxHkuDP98jh-Dej8AFbVd<{Ba};(9jl32wx~7nMEX z{OpNbX$b3}xHsaPE5(y8IT=kzqV>X%q9qqQV!lr}fpa%U=hy2^y*0sr9>)~}*zvD#JWz^9G^ z0)(swEOfRprwr6nl{FNabjxe-Lt-nt>+Qd{*lsnokxu zKgVgwIFT?PgOE3%p5Xy-%R;m2yj`0m8qLXdq)?`!U^Pl8C&ZdgfSNSr5S3x8GJVlz z>WU?LQ4qlSNVb?iV`6rlJo5cu1qW(i*GrYS;D+=~)=fLtaLi4Qp5sz+z4(Pq{L~9J z3{fHFcDD^r3=FdQjvNOLY{pQsddK2L#K3^?;k5l!cuAnezxTb_Sl4U73GseKQ#}di zis(%yOF~D_4{tfJ#?9)`eBMLEMvK9f4rt%8=3GZU7uMp1gI@U9P*ztCdpeg|Y!ki{ zVmS-)zqR1Ne3D1Hwz{&awa0wQvB_|?f^@<8@s-pXH>bq_48Ctc#`J6I`WIn($!kK$8^oA)}N zSiBdLjD+{ZD$y&IPNESy)SA))^)~=g9k>pd0{Xd%zB_$dv1S}>Ry1D1I%w*|Ai(YS; z;E&xMw_(kv4&^m95Ivu4e(iJHkR~VH{yyPk>YV|KVYf|u@|K#2yebZ=r}qB|*5X;k z)S!)cW&tLJvTl?O(zaEzR(!>RMuq34(tM<=Cd>EXzCDV|~_0 zb1Rub6AB;)wps2N%{kbpud>k7R#aE&w6`QUZ>q*=LoTKstA(Yvhkd?4MuY<&jt?`Q z^?Q!mn9VUPUNYk-`u68Sj#Bq|mr(;NxR&yyxour7+CuGeXuTDs9U8Za&U&pnznK3i zKmOm6^tZZChjd({Qezt_N)TXNDc+l^f@x$T1!Ds10e;M+z1po;AE;SX!^gz5c#&|$ zzs^q$wKNxcXDddgYRn|5W2QPkW9g;=`*~(^2%q| zrNWwP%)2Za6vTj+KJ1v-E#mKlk&i3^F05tNOxQID7O9 zzy-wq@ik@|hvBM;Qu>0~r0`vwUm01?a!cHB zCG0&++6SJsgLW;UxWPtBzFjRCXM|?ZtKP`1fwd+VYYCm6fA}fP9J|B}{Pi--ME8)P zSCqdp6izu5D2rROiZxE8*!p8`Z>6A7J2H}1Ya@<}hO5oi>O?kFFEYlS zUm7y?56RTr;*a?(=37({+vl7xfb-Irthz2`FGtg~R@(=kmy4(TXhUNK$bFvG@zr&UKDR_d_fBp@|P@s#Re%8e+sd`YsO8A<~ZOmS>>sk>yYpbxz{B* zFwiuR1>Z(d!Eb3pTHn5A+P&>W=*j77&!c#~$)ZAQQjGB;R~4;E;u!N1tBHJ7bDYxh zI&=!HDl5I!uQLsy8{%ik*_H_%f7-zWl0+-NPLiZqu;1ntj1_`TWI7jURirS*@H#Fc zol%!3UL;{Q=^fs_dm2Fuq6TEQ8UKAOsZJi_svi<}p%I7|JDDj+v53461m2E>Nuc=s0Fdi#b4^lIYJi?M@)W0+SQN0&~lA|t|EKQyo5bZpIWf{e7? z=K1q|jEg`n;cCEl2o28 zKAtlv@ZJ>CXGHUm^kpkCcTt7!D7kHSqZ#I9yJxR5St{#{`jbyP~)_vh8fHy2j5_)T$0d&#L1w(CGi(T zrXk6jxk36@kdw)bUT?=N7&dbZNDwM9;`h4<@XD~5vd(TFAEY;H1#dbgbYJ)ov(0+D zqn?l*$L0X!-Mvp%FD}rKE-w7sZ_Sd7ZvTNbl+v!Vkee_S->5X_LRYyS6EbbD2~QE% z7bK95$uYTe5r6e3w)1PkN9s~p!PqmLmW+QoL1A>A7YI#No0VxmXH}SC7^=F=S!odY zneiD70$&AXtRJ&)Z~GwSJOJ7eO}Z8bx_YiXZ0sq{h^zr3o|k@kpcFd=g;2Xubz-Uqaix2cu8e&*XbN_ zuh$1rE8jLh>(Mxrzg$3i6_!nT?AGTQHb{RWeU`|Q&Ed!o82Z$*Y~r|l`!0~|C-?gc zr;xIRgdZ;Z{xFao_T~Q1`j0x*$*yvKj1CJF-av|yWl_Ey{&N<=`=u#T#hX9dZs6nN z<2^j`*L@C!m%Ui5Lmy$OhJl610Yg-*FxE>Ug((@-2Iq!I>|a58p1cW9D?^2##~UxP zi31Y3LA@BlG?#wVewAei)TcivjO%I!nUGbo9fAU?K(uMj8$#*;TT81ua0x2#aAF@;AA$GRh1BWcIF5kQ!snC+)`5^r?SL%uD7o7ns`S-MBNX|2uIf(M zsm?3z1~I0SAirKAA=0LAZ#e%7$AYr%$t#u{mj3XgJvJuyXs!C%`%*DD&b#QKP=VL{ z5RLvL4#Otw9H+eWJzf04XBWP)zFi+~{%kaU-C~+}jDq`|^1c@+NSs%@)2Bj#9VZ@3 z)~|H6C!wbeEU_%QeIqp*%O=k4+Xaj0GQpBU@cD$5Pxn!I1|uNQNJL!)=?l7EWYiXw zc|fK}hmfIc(!{lQ_=W9}u?0uLn`DXW3e1VoD>Dp#-X$|e8e7!$g|BTbK?Jx@$WvA` z$vKQzNah=|IkPwYfUxPZ7iT+`5!)YdFOJb_ZZcYLO?>eY?DxR+BiaAX@w84m?qOo(6D)^4^kq@Q%`I^c3$L@Y7Pzq@oNa&amq-7c zx|vN3i6>%3QWaHYwAF8m9eI;5*q;@^K4$g-aN)KS{x+M=|^8 zJ7f2LMp#O|j0kL#$rI)$B z;|0=SL!?Gm^?q$mo?Dc&aX*&u%Qs2a^~tAfi+Cbjp8>{y&eQ4k?Z~ zcu$*Sy)jZ?|6;m=mL?1*B}o4i$ko5Xb*NuI66;IRC6K14T^gh+hp;{tU!Dep-BIF( z(!DjwLW$M!sZkii&g~PE$s%WDDq6`WFD`Y33f(}T^XGxv%RyKF21QZG#cZYjlP-aP zqDzc5$)6Kd^iMsIb{8U1e=7J%Y5Lk`!hX}>feEEC%KT)#D}f&9g`5f zkm@Rc>At;x;5L!|3Q!zzv%EyC8v$Oes6zFZqqoAgu@#lRp(fYY${mJMoi@@7S~5=9 z9VLjednsehuQwd=Albek9i8>kp}@KSu1vt6nH&rpRnIx-@fusvV3AxFurPVs+v~ZL z`?3G~#KaiShfZObx4W3G35`$xYWB+%4r^VMVMj=h>si$Vg2t51j4O z{h~f9xOiacRIYLKxkWt%pPszQbAON~LuCfg-6%MF?0*f0cHS5(-vf%7?KKXsIIRAk z!w?j>gEVc}0cRVMe@TD~vVd~J)5wXn3b>*yIqg$uk6WQ6>`n{7MZSHz@#p>J^ zOQbC@r>`OIpqc#)z8?B;9TdKf|GE5~=L%E9>R%t@D_*29Zd6d3#h^p&sDSQGW>k;L zX2}xbGx>#?B}B2q1JfYMYZLK48f05@DeT9VJ{z2<%K~@Ec8{G>qZOZfx4&|s*itd2 z-$eu=r63yeY^P7p92368_f7Df_qzVq-%G1}GXo1~Vb)i|U0YJOVJ&=+@Pq(=?Yz&i z_X3R1J|${|pDgED_I4Y}9jctj_1#Xb7cuKt0OkR#eJ?I8A1++mmgifD1u)R?1&Lf2uuOu8 z5B>-1eR9P<)5}4HttiKCJ^7M8q}*ZFTER~se_sbe@Za3S1Ts}uf%MQ9k$MsQQr))) z|Fj47OVkl2HhQ_E42xSy$(?9kzt}P2s9wUgbm0Q_CJ@8Xm^Z`P@p*55r61HCk0f)0 z{ofBkgO2w+f{yqPt9g8h5r{(}x1XPEGC^Fz9|cFsI8idtv6y1<0wXf=yWg^_T=!lN2?3+t?e(Po2BV)( zJ@~l>&xj9bj2lQ19t-+y9b>K{EqvI91OkX~9Oje~yFS0)D+un63sf@xXTWPI6i5dGZ<$Oiv4zAre-JZW7m$^=crU8htXQrj$T?Uue83P|26UGs zF;Ac`J5FW_L+VUD@CM&_P--NU)uz=wvlu-!F=~Pr(U)a^(M4$+3oBviB{l83kN~;361sKVhp}~$bkOg9(e}?+i-~`ON0Pt z4s$eu9n6C(AjX#Y`)>0M;)8P)3&b{H5w-@QqmuXrv98TNF|eEMzAa7n_Hr~lHsr;( zvKL4I0RV447{BVs<31LSG!qNP4}E)w|NTtWn+T9`54Nw?QzgZqG}}vSUA;J8ak2ni z+gi*Fr2s@!RJHMXkkXg+7Y1%0o1b;VQo}cG)WO}J=dKoEZ zsJ5)2axQ_IGl%~HVe4WFuV3O&5c0Ww0&Z&^^g`gLuusfNq5)~z6Co&oYq1n)&M1%W z21VD+xX-gA2ot4lSk($q0clG~`p$}C6s!yhm8Kfn0mHe&NFieo9$6@q`*C$d+CqgOz4V2zw&G_B`OzYSeB-Xmx4qh9w8~_lV3TVbd6ODUa|N> zY?ddmk7c6Y>aL%V`{nCdlpwM0P}JfMSbPG7H@gz8&t_4ae6j*MhQ_6J1FSnKZ12#n zzOk5i`~_7|F$T3M(`Ii8>uJ@-*`XHw(C0;YxUionv-p93xE+2}QZ z{(t%B=CfXx)P`oJC!x8e)Sh@c7XUqa==0>ZfSSyJzKFiXB;%z4{qk=$p(z8yQhvf- zxvuX9X_H4s*3O!R7Kiu@McdR*7b7vgOKrT6`{S$As=hO|cZY80FM?TbH%?G4Tm)5| zH{kT$=lJJ7{;M^y>lL!tOyW=TXSCYYmp2K#ZoLdZQNL8XeNYUW;iHb7BoCT2;VOG&I zOW8-rxgPxc7)|*w(J|XMWjdV^DK+$;aq|E#^9)82-Wxf5oPq0rGrYsY5j+ZAcb635 zxwtE6Qrh!OaGG1NdGzotnJwe7ZEsD#HsvouCcA#_>-?-tsONK4L>O(cIzN#h$uIY{6dSn(7JR+;g$0OC=lbWMEO8Yp zp99|6eON;1C`AezH4~a}F4Sx0iOj2fEPJkPD;_`>jRgdW2Q;1#dN&l;@6S<#vWimQ zeU`BTvm*)289AoOcUmf>f&c*Z&*a*F{Gc18ife9u@!KfTVnl3Ewf}S%@PsbWq!usE z?U=d5pZ+e1;HRm$h$oNS{f!y>nfcKw61mIdV=Y1Y$6td%WylOX^<%BL^RDmu87wxU z_Kg8JqF|=$hf;3FK8_fHaNeswnhL!TMNuXkyIRXOs3@qU0hLpZfsG_tOEGC0`Xl9- z&kdhdsPePaIY8sC4`c!s=abG91K?P0rI--i=HRA`=;r00`&VFRBaO0iuZD2pzbjs>JZ7+UdUn=E^(=3( zGDS*sbkUyur%se2oWl9DzrbS`VjrtaCq_Cj$VA)%^qx!+H_+f;jvIl;h9zot?>@w^ zm1s;rPBt9Wi-HtvqO|!LOX%!gj$#t!YqNM|T?G~l4lJVoVl48Bs6RtHuwjvbY!W{E zSq~|2ehnv9<9QQDOo2`8@4HWBH6iLEaK%MkWLaH+(~*ym4HN2APOYS*Kgo1Ec(xxC zlXNZ*6cwVbN3g&D{J1ufMTtH>(dk<9CAbzTaFUEUKJ2Dz^OiGWC|ZSBlG~=+i9>xSt{?GzC8)=?c*0p^`vTUzEkIjVvXeCEzxV$nY8{K3J$q$E9WHb${{jPgDZUdq_5w-!!n zp8P4pr5xaR;Qt+IRFIAVrdJ#BE%PT9pn;XP>Mq?EXJ-S@Ilb~<$fwC0?ffQAU*s
E~5rt1F3ozWOeydwOVxI{S(Ts&g|2As0bny~mxWpuIW(H^0Lv)FKm9#k$zwYtl|hJY z@U6b@p2?J`hk-S{V2k~YfBqJ>KnDBgO!I~mh(W9`PGC|cNw_O8%;t9bhqMJsYOlrj zxDMFmJFLujhQ$F!1)f}(qcw;+$~#azKN04=_Kv1)gyjZh&&RX(0{ieSG=(1pp(iPA zQ%&S4Y=nb_ZH;d6iCNlk)8}8OWQse3uY{z~sn47`oEjK-xf5@BmtBJ_b||j?Wm7rV zQB4z$J=fQ+Mk)P`AbnX^Dy-fe!20>IA$nXob>yceaQ|Km!*$c-AQQVnbYRg&m$ZVr zIlp!T6d5Ll!3*XeuLQek+v&&Tlmu`*J7{vA&_aQ=hLwF_n}ecHlp4`iwiW8p^jlRy^1YVbn9% z&-=;HPU6MTB81A*hH{S0JUL#QY3nNiGcb0h&clfW$JRRBe5{>e@6ulrFWm}}eSw-* z5%y=>a&|h_pCJ%PprWiHwZ4&!>A9zDSa#7*{>Rf>y@MohYbHfJpvfEUt3os{V=a!j z+oyextW5R>7B@{yo9R_n2^7o}oP%J6Jo*u%FN3xYvEUSM^V0U=y1knzr-Pmfou6{z zIR4+|BhJf$FlC15mk{QD+(%y9B%sYfyH$A+u(pgXEyKh@Aq()d5 zgGOJ@jTDTMUo;ZBTMQQbhpiRc*!qwkcNd+57}nphtEKP1xorNZsAF^1_r6nup@`@3 zk)O8kfq3l90Hlqna{S3z;Mk_+Yi&tr8;U-vAsu=cwq-qXDIR}0%cx%OG(f2kf;@r42g4daL6L7Nxku@NhFH5 zDWo_QiCkY+0qt#WFQm11y2VI$-uK0B7+jH?58UDe2dIhetLm$%ip~7YIKQMRosxS$ zUD7vVFW8=|E8oY-Y&~ko_`&z-O@QivtdSdMKQK+;rf#!~??GzLn<=#E)3 zIH(K$xo%KvduY_Es_2=VBOfp~N~b2wGXIX|C`vuRUuIaY^Yj{!!cYI&ZM^62)6PT3 z)PPX(?{8Hk69n2;XLh{ptONRG#ZZg+fL52ceboylerLTn>HBd~kMX8ar!PcAP)8@g zys)GXP-EJW#KL|`^2?KA4zYjIRpw7>{Jib421l>Nb85(N2wrA_aXF;awr{N$URyYH zgD~nMQgpf6iYmKTGht%sl_1Cd6!0cw+df1^B*1CikSYzCbibZ)yu=~&{Y2)ysXOU} z{@~Ag&31v|%QKvWpg<7<4yKtpqbf_lcq zr08Zyu<8BY{sD&})u0)dfLf~(yHFkI31lGUYU-H)7kq?bg=f2d%q(Ei?ZF)4i17;- zA*k#Jz8+jWvw$H5Y>?ocq3-Tr!kgyh>++{`=cos)P?)&apyiX(w7S*h-URe+24(;s zY+Gjg-t=wjt4iSO^#8U~q2mM~^`f(^9{-+S;x8s`V{Uj5xP>74=HVOeZ_ktA7axKK zE^hn_1{V59BKA*;*_e=hj(`VE)P|}@IS)@hjewTU94CbuGzB$F51#nqU-HJX&dboz zDU3e4@N?^)25HsdM~qiVa3GN-&ie8-p)-~wyhrh}>`*UAj~aK25eDa=)Ej`Wu38n+*klsW z1t70hi|g{gl@eE{&SyA+V!h6SU#!q| zstO!OHwwHZz!cXFnqnn|kE@fVsXD#j;saCTwZr*?aP(3!;o5$Dc$0nm$p?q&K{EV? zGE0y*wtr5PkA_D4*DA1*Z9l`jag>b7xTa;bZ<*Kh#71h0CB@5+D__n~d=2f67Wy4* zEL8_P#pFBL2vY$ew79GIMy-EYMql!FtPD&4Frf19M+wpZG1ekugcM!qPozYmW|u#~ z9iC8EvGa6}Y`qEX_B^(05mN+3$4bw*EdBDVo)ybYpRfI93?Def-3oveS~JlIr)trm zIC@*PC)K9zDSN(#>1F>o)qB$BqTkzd_R(FYpqg5)135?!iQrosV_dXEX@kx3#C7 z8h=fb|2SeC-UW8r&Es8s1&AWMNcZTIp#2&_eHtFh9|ivX-RVb}fNTb1NR9W}A>&NW z_;cp0$f9eRm#ECE_VhzSGICS5cAh5oMiU@hr{DB?|AonufLcoCkJb!4MX=;ehmQ}T zPyP^CZzA(R5UmvL&nz#eIu~|@g22{aq9BR7@{~@Qoi(j|)wDbm&nHFJyk9Z~k%MLD?z{pXI~KN2Lu&qin!1CR{q)Enp% z!hm=aEP?e`7edWt`x)(Sg5948sE;7GRuoq%C!zlU@z!G@S{f9F|dn#C%sdp(IS7{Qdl+ z55PiurjTmioy|CpSQ_se7=Vf6{KDMJLyz?Hgn{tVY&vZ3{BnPfy<{dfgr&VvbEX8w zeTgqVMpLcuwQ&WYTL(2SC%+^exlck9^9_r(a32<+On&*un9R~A+mgtV(B>Oi2V^@O zO5*q~|n$r(KZtXDuByfu?G0%3SI@f8tUoPJCj&c#0waZ~6z{f6)HGL)J9D zUTCJx@XHdZjtWma@M%lzvJ}_L2V7mmnImdRJD4{7?>B zJ=%`Nc0Xd!Y_~i1|KfEG5*AO%B#4!<6M_00-PZQv%1SVN3;oRCup)Al4y|Sb#)g;u zA~A}^^>5OS2uGz0$!;2M&*M$(7||bW^rk<6UpdgDxZ%{_hw%cv++hYyZBhY6Iz5j7 z?+N4|yh~uQdvEofbvV~D#TO-cRBda8Ww;DbC68c$>HTn%qtlnhrJx#HX3nk@`z7N) z*Afqj33Ql3F{BIBQ7U>+%u6CE+iu)hN@BjeWaBd)^&*XwMh4r3DtDJvv=ix6b#NP)aI5seU@CjY|Z`9Ed zP9?(efM#g?|FL!5fmHYHn-e-{kfMQ9O35n8<}@jVWR%@NWtLs!AZcr%l$B&tWY2by z8QGkcy~@t|UEhPAp6C7j@%GkJ&iQ^n;~v+2-Pb+Di?I|YWH?btwk$v^=1%f?P6>d( zTO2JB5)55ci(Vi^09dTHS7t&odQ6^H0Kko~%DhT$O92})HotjgqB>f%4ZVjSv(Ivi z9HOEbYBgHV5z$92%lyc&MMZ45vwES3UgX{-i#KR75kU;FM|S4G{Gs5=zbPs+uBL|> zqM2m%Y(BuEc8i7QPF1txTr6(fa1A@Kz|F7JLTay&#~#M2Y1ShBju8PDR+r#v6n`{>ETV+uouAo^ z&zOWg8OrbD{yu0=2SiRN8y`hMjJCcFC5nvISvo?GKjk8$W9!>CRSUTn!N z#LB)!`oHP?xQoQoj|}!ietxM10)T6v+lIdfwPLeIFl3_HP)giIVA;S}zrVjVhlm@0 zka)e8i!erUYVMeI*)v};l21X!qToOjkqfUBtA1}Wl`pg{m6`YTO(;4`)`TM#Lr;W| z%-V4%cf9C*PD;G0pIDHhH0RH|3Q*YzqlzHo1yCyM-69Bl8Wr9&U}*ct5XBXsw=qUl z6^1G+Bl$9aQuUSGLQG&ckr{0=o2&qR&*6|r07GJU3;l*~r_}!WVEPf|B)FR>rYul$ zoBaBQ{Z5n*)3_Qn^bM?UIIe6>iiIC5CCMb8AO9OlTGyTxx{9_K#_2@9`YiJdWy{@E z4L9Q~2UZZu-r+J4Y*kDQE>z$vP<0^wRJ<_*oU+!b>sstyIh0uKn2*kf;DEOz zUFw9TCMe+q&f)ri$`n>$PsuVcNlS?RQvw%SL=$(%-Fl0-=Hv4k-rSGng|Pi^@DN1R zOmOdAGDtO>4<17>QMWI$xc%}K9`PGUGgpJ^p_L(QS)yDb6~Ii|D?lUU_phkpNMc5*rEa&1AZ;Nj>oMKBG3{cU zq!BXqNEp~bx8ae|%0z6~_9<#1nCo6ZtX4zX4B~jVT<3B%zxs~!1*HfWVP2?}F^Jm!S?EMBpoAhR51cLr?In3l(`{ulr$?e9pDZL9f*~{oZYs|l zmU$AMm?80i$i`p8vtNZpKL6!&%-O#-k(G&)(eWTXGWlqA((O8riejkZIo;KZ?BqNF z+Jpj?!GfBAVh$PCBMfKRCh=bs_af~sw5)81q=qm&BCa}V{Cd8oYe0tipMMB63} zl;z!0M1LZ}uXp14<41Q(6Jg#ydmWIVBwxy+q~LjZoBQ7-Edt7=*E|ZQh#YxNNzT@j z6@rqTK~w3fqBp7M7)u89P-f|$SeCE$t*sTj5gKl85BsUoW@6`t4Z>JvB9@1`l=)-x zJfS7~4QeJYKmsa{KP=h5vjt3Pf}uel|4smQNRoCVi^U|6kEIzwf8Cndi|Ce2RlmzX zFe8ZalOFZ*4pNCQI8scK)CkmnGXMz@CqF%9tF&sGnrEwkYkk$p+4ar4Pyho~EN?M# zgDA0mfvJ7(zmbO!-`p*Of(D11oFoW!c^NrZ{*w_A77Dte|z2GcM4Pyiceyu%OF%$@_DiyN2)b zg)wbD{+^2e;JGFo+KLxJ_M00$H23XW;XdA_y|KS%hlLgJ5E%6`;9$01#cq#&A@d~^ z7!b+%LT^I=kh{si?^qDCbSM)uq@UTZhIZe^f(_}2WeH}Wdo6p66RX?K0%>1Z1Yd%S z14nfT9Z(k+uDk&^H~NIle{csP;|Y#~(`{7nSBT508-K_% zzrTY%4}!unyIS<`rU>xRhI!p=#VlOezZ>ZclWtKkbKqlJE4ppN079at{)9kBaK6Kj zJ7Tc~{X);$1!wo#E2sc(SiCR+T&Z2CUJ+&nv^vq~P0{)E@1QLv5!uX)hr|ZwJ!DY1 zISE0Adq8k-hK7HLJq}t+dq)D=y$$3%O@!zKihwSmGK(6&>$!32o)*0q+|C*PsSl7H zNMJ@5K$jbn0XQXtoj_qG8Lg~ZHTzU<8^XT+c|!pX_P!%ysDhayr1Q)O?9ev_1H>Y) z|9(UWkn(G=W-Ol*<&5$dyEtVTJYpI3p?1u=N`GP)y#!nbz69y%c&z@vlE1m6*x9BP zPjMjv4=7$jOMCG7c;Vd-pT0i4A_R{V!hi6|>|g%%c9Y^^+#?APTiJGN^)7;RmY;Aa zbq^FFF_0aVc0!94M7S5J%3IcGnrH#8a6eZiJG(1NyTXw5U0Sj+;8hHoE$2ktJ0lY| zFO)6%;s5hZjQa?_KQV<8I?+9!0^%MrJ=7Hde0`!hPx0jiR&TJ^2u6W={by>81oSDt z8XbHvi%E_=BF)2?yY6%hnCVG;W%7JWRhs;wZYEVmDg8f*^{fG**)yuA8a*}LhF*lX ztwJ%6xyaG1#;ko(=Lm}j-?9k+HVpdfxJQMh4*z=7cGoQ3QX z4L}mzV|Bzm=sQf3JN)nOqA)BX8iAp<;0FuK5~dp$v#3vB04aF%!KfRoN`#CBW-sG8Mjfa{~>=7&*ip` z1A#xfRu=(^|5?i_yw;OpwI*cDiRvHd7q2m8VUB8CaQgj{p9sq^~QLaSe z;Q0{|SihU?>2lKr=|v+~NLhFP*(wSHC(ZH$DlWVf{W$Zz1r{XUQG!Ky&;>{+Fw5ZD z&tE?wi=W(*E^sCwYlc5ft|RddKBRdxf3nL|?@6q>!6)DHT~w!E zkamtfOdgcG3`|DUO*CvDV{^F3Nj4AArym~R8xEQvHJ&BSldDc=c~I1P>2iy*Y{-|j zvsl1emB@x?Ak4p=!yM|}6tzw9FXu%TCUr#7m($Hq0LA(;hx(P$73H8g`))KeG<-@B z=ur2gIlW$KfJ8$1Yi9-hCek)CE(s{m<9f;*>`}Ok%SUpjRP~SFtqRY|Ovh!{k65Wb zpRvQU2fS}BlQzDH_L?+LVWpgd>OoHVpNd+alr*SGO^CpjgE~Zoq==ib*|t6_)DdX= z^#W&hBvg!Jq;x=}&8joit8^YoIc~PIC0QlpyyRV@lHJn2|vzCL* z1S0MgV6R7Ue{dFz1lr20JH1GyCZ+m%vz6U~56nv34rx-28@x)>-p=&1(O+@)TfjQB zs|eX75Y?U*JkSz-`20F_nkat*W^pLbEi<%g*E~`5X7}J&EL+&iwFV4G+wCxydbH>@hSXH<693Opu zXwO~>pxye6c`5g|wN}&~t7&fUGO}3WMsHU@(aVAJUrPcPFj7cDHd_EM4PZGX$<542 zjLbfwRt>pUAM|Ju5->Qpx%tmmg&AoBY;k&5X*~NGh-qq2{lf1a?li4ToVhvtc zn4FGziWu(%bLFPle>c7S>sg6f1W`7IqFH2ErS+iHCAP)uH5tHsdVy%(E1Ftwb1pxj zAZ2*BFd>#kI4BTGaCVAXudz0>1X~NH(ImaA<4XgQQm5}WEsm}2=%0lmUgru49cv(1 zZamwm1(x+(QKIC5==dub4wKb48P1piXnc9SVlDll@Dp}Qj4YRziA+8WOG(h1rsQ5pF$asxS<=yb_k)U>eZV!wgAN=|BKRK3!j_w_?72w z3g1ldU&FkV*Zk(a7hg5_+O3khAhdMEJw9;IULoP^iZ5)%7bq81vbrj*NMz^C^6P!kpziz^-c=>fmBEB z371^tK$a`$@4z9$T)B}I?TIYj%NCp4-P`t6eA|n&hn16Fb-G`+j8^}%F4LEwi7gr{ zh9Fnuro@r$Co21ScIytRuZ2SR5keXW!J~bwlkCA`c!xhk4a!YUO_lsS2JeD-ERyR# z()t3e81VuwipIlg#%hj#%-`%?ruS%}n`NGY32NvP&IjD@Q03{S4;;-y*-i=BZr$TT z0Kq-D>t-*nz)d!Zks<-R_V`T&VST$c2 zY|n`Oe3BVGl3pOedan+=>n|ZODQ{0!T zv|sYUv+)C?LT$Vo_Gx5<^Sb zzuhv5Tl3rOf&Ir~<}Ida*At!7KtSAGpIjMxKo#o}BB7}C3Kcg(x>Y$wTteqjfxT(g zgO01S?$C+Rf-G0R{1r_yYP7|n*(y-f#FE%a8|LT#LA(S6SP6wG-U(L#yVOdnR2@>N zC2y?{+F<29fT3owvlFLgRQJAiBb-w~0?i?wfBe8Js2MuGH8+ds)UN z5nV(R^Uj$!BzI7ymOt%k_c8h480%9r?^oc;RJrJ%gXu|KO+-8mx#y(Aw&;O&9?FW? zkrnaU3&57+@g)VCw@9U)U&PKAE4As*JdzN%sYKv5BNpdn-yPpRNj9=tS^r^3?%0Z| zb$>pXf%BguvyzOu{2ak0tanKWu(l(!0#~<*Qk$>QeRoDHh~`JidQN{^88(SaMW$lj zS@U}20_;L~)BL)RpR2WLJ$YY$MmvO97TP}2pBJiSM)rd-A^bAuB&(EI-8enrtT6A* z+vIT%RX>JQ$~agO(}+i(DL!zqO1KmW*j(;?7={(XdKBBWEk z^e1xLN$7?^M*XMCULe(^BnA})XzjCsfjU1Yc)+X_7{uCpSEi4z1hYfT~Ko!6EgSQDan`had3C$vcB<0Cm8 z+`T=r3iBWX8;jhKu#h{=aKEPAd8Q3eg%tgDd$g zlBz;?@X16!lq-*8ahe?)) z0dbMUem0O#Oe1Nt=ZCx*fpL6!$hH=zxQGz4;J$kt;Mo8CuFCQLSJ^J+5Jl<O8JJzf`$C@JBO}leo%e9Ym4BmyM^yh)t&3jW%a-P=!lN) zUDaC^UjrAdT~fGjh<~9+bKDf?ufA*cCH8N#n|tHO8ipO+ld2~Uwc00k?q*% zY->A#bX%nB-3JEFOZ%zIN~a1r6s9a+NHTFy7(6d=nHGc#*x9rhPL;%M4?iASr8?3j zxp(p?Lx2W%l!~2L;TgvLbXh6tke_fYy|YRvi&gq~$!5Q2 zf24+4?5Db*Z;3HCd#JVRX#?{Hg`9fVoqv5Q@%aLenbvQ$VkU>Y8mipTF|R? z#Pyl<%x8`qF4(Tat|xjt^=VaUqmOn!@uA1mSLrCcStKje7D$;EEN z`nU;FB>(k^n@QXXE0xbH9PfzKWEx*(_rqT=86R5XGPl&?#+Rwte~ZB@B0Ezh23uAy zJN_lMRGu8cQtaC&drf`)4&r0Iw5iFnrvMLf=_)ab&_dZyA$)tK3ujJpgk z`Xe1&#I=|J*TkXwcUPg^F+QOe_VHVCJQ+xAEg& zm;TIACB8<0%)FkJ{+koba5t;W73Oxghd*UtJ=8}CLlgIhqR3()%~blr)tLTdbw8BV$TTFfpm{fVi)Oects&$vfHrO(W>{!P=d z6{K6MO-%}(8aysNyUyjt-B6demx+JO(L-7#rNpixDwz7Ta{H&7!b+-FrBwR2==IO9 z*t~(Ac*uV)k-%vZ?{!KU9+Q`gi_5|B00+sF8#Lim(8m_F*?7k)d$oqi@h$eA-h~nN zL+ej{iS~KS9dNPw(jBKQEhiIOEKBwn%+FmjyS6hA&XGvE)@kS&9lhRMA(Z`P|D`3W z{=)t@Rx0y9`rSO0xJ@X{wOH`k5?ki1)*5`@{&R31%{Cqicx7!Hsk=BP_{_NPy zr{26v+WJj)Pe7e|;kHlGBpy!H`lehO*IGVOjSkrTLQ^DI?=a z%%!*Wz14$fu>f^y20VPE!;jg7bnI3fzn z0QA&X>DrvTmgt*X)@7(Dh6rUC+xtz0?S(Ru4LOw5P?k^+kzFh4!|j=@k=v#?biB zXOHYJz;0l;xo!6+2~zlK(|qpL6KYGDO2dDBTK?8?^A_TzJo^?uz4_^-I=iCi_`K2s z7vDyIY%cK*UMMdfen3iRW=AL)tP=dQ8>qqP_ijx<-GWm4qUf(el)jHrA>W3%UNw;~ zBr(t*)J@p*%M+i6+)ny!?VsMB6xl{{;_q^+aedZ*Cv3M2`OldYsAP_wF<7DOPbccdM>az*VGX{lH9fLI&DytG)@%za z*HaUAkKBNBC^#|<<&gSnv?|hV2@4CuOeetTf|7@B7l_EoyU}56uyH9=hN~>P! z)#LD++yXAd&UJmBP*?yd9Db&z*W3ThmNj(#Ic6#q6Gl(#|W~aq3fUXtL4$ zU7yxnJMcr^ru^11l~kw3q_f{&j5T&w#w_ht{M74XJ<=idB_&DlL`4tSnYc)x$(V z9V*V#r}e@Eioo_(<*l}kMOwX0DSCWC$_f5go1N2L53cLTyy$3FZ{W}qIWe}dFm$Tc zgjd=4cV=v(L9L^tWs}P9@y;b3E>E63KdBX`lFc0?(z zyI=)=zpfwM!mmd3`>QkB~lI4D~pd>!Zk(57JtJhp(p5K^fko$SizBf3%)7vjFx`=ut zcCf%**dXgdXUg74dF_-A#g0mgzFkS>Rz)WRqwPYwbd!(j_{V7-RF0oGoRq7$qbjbU zyY8vHpMrk2P41JA595jr(l^-l7^c;VOUv6jO?D~NjSi>@ZMi~;X4h2y_v=vNN&E|s z7{truaO#tkqCc-o90|LB)7pzBdt8IhXZmv9d`{xl(m!-EJklqS-|w9`GoPH>&VKIm zUjrVU&p2Ckb*Mba-e7*$XJh7HEtzd&d37U`Dpwt?Z*5PG%&8x0OUf2*h*d8REr+~+ z@>JI|_mrr?8tVOHRua$C3f zVML@b(@`GN80!x_FYLQs=1e5Rdv~P-&6=mqFABP= zQzlLNvbsQq@X=(h6K9)svQky$96jnizF^4W{f8YNxP%&yX*Eg3j73*G*^{tKEnvg` zpc8ybZm<3C2nXD+!N@4*-gCWYT0e%1C4`K%etr^@m1grq-NIPfZT!fR4ce4uv4;`1 zJjLaDD~q)!6*3)dBjp`*K8rNHn)r1hJS8~)L8AH^`Ox$27k1A^P@Z;NrV2A&)lOFc zX_B1l=62+=SCVRQ7of{Uv?*YU7HB^czvq=1a#mGZ(J$31@`46PC z-(78-$ZOY->TOUvXkL6V|c)1%GTe~zCXaaXOnYDM)BK{n@R}=kLm;3 z6E*YVdouf-jBc&UU9L3r^z%g4wyCkx*DIpb;x_aaSADp*bg;LfB(*mw+kQvu=Y`+< z^rUB!3Hl+RnlPPMOpnW4m~bDAE{eMB-m{i$XpF8`5Akg0(cD+I3(XaLn`O;*;`JyJ zWX&BHSPzX@Nt#=?#QWUO6dQnQ=j%roDgN+@jg(2O0r96JI zrgk@JVDwJ;J-v19KC9gQC--T(motu;Mg$AVo0wtww_B{FRxtf#t!`~7i2k!1DTrPz zHn_|j^bA%eCk1Zf-y7X*ernH=zIXoByN-evJ9;vQZHh}frMjmq((#VPyQ4Wb=5xOo^PJelar8h_PK3LzH|3! z&*9WvldLz6S@(ThVW#G2hoBFe~c)9e?{f;YSw%>`$Z4HPy4>MmC@6_v& z_1pT@y5gYxK4s}%si0%`!^T6MtaiLHu>Jf{TIhsJXrj&5Gx@iUnRz<*3r*d>Zawze zDSPyZmay}&J-gOwJkj28Fr#q+qSVo=N>z6fovgG@iZh4sQJGl+A=9aPd1CJRdI+a8cLyI6H%^h%k#( zKDYa{U7cOteUoZ-)9KcL(hiT%kM@!mMXe^gCffDk#0r}Zea#WG*@j*eK3z{` zq0?CPS(;M1Mx%aJV`oN_=;+st?gJkz#013diEBJuQ146&bLy$HcWSoPn+S7KoQn?b zEkO!S8SDI3Br0Uuudls-GxtES?;znF+a}MMrDS{j{!yLsZtcM3;JNZEos7H21)uZX z*df44;{6X|LWKR|1>`k{aQM75ly*$NNkJ%SI-7{{3CZi&xWD5>?XS<=TP?CTUrh?S zo*ImX_z$Fx_`{Rkoo`oM>HKikFZO(QP%B@cke<3!qJhDI15<|mqYct=jR*JG=16?) zdcyXjsH2Eka&Vj)BCPl1aklwDt#qlvhtoQ`skTFR+3Pko8c%)c`F27$t>HFAu z-63za0f;Mh`YBJA0UG0KS`XZUa*0iI>;JPGl!|K-hbtV^X0km24p!16Tj-pV&buzo zTV9qLY+zhppH!TerYR#Voaub$oQQr#nA}zm{qh*Ctm@XL!>Y#7lstQB==0BO&CRP} zXRi}aQ%tNEaY*aSS4~@5CG4t&j>8Iw%O!#45q&ttyaVE0#vT)nqQ*Igh!$xAD5!o? zyO3^5!%4jVjdCeV**FwT?6h3z-~^UEZwcAAuQq+Pr)BX9x%!X&=jSIL1QoavGehSu z+q@H{C|ykM)ds6S7>R1J7r)f0yAaMy03Xy6DE@Dn_rm9>$b-NpZnx_b*Yu(=E(%*Q z<4tGpTr<9R?DL(^ZfhtT>4*1-;L~%%HvW6_P3F8{{DTFwtK0Y&=cGz(xptA~`HoE% z{b^;jFQ?eqp?{bP&QL6L*bLB0iGJqXElypB9J}juVC4>=6C~BVczN#cj<}ARXAyPj zwn^x4HU=N00&KMbG;Mt#b+Xt0keb~zj)ja)yXd*j^e>(giv(O2MBMqH$!M{* z8}*<{a7}7|6_+ZF#iODdeM8FrN?&chkW_ehe`IW7kW}2>K(UF?$SiDYESi4XLG0Ae zae0P5)W;zD#hT=w4}!>-(&%@t1e1JY)Kqe{`*Z$#j%J?ihybOJmqqB-D!R8A(W8Ez z+V~W``{)qc2fk`DdytU&!)UO%GR+=(%-QYA70C zV#F+OQ~O4ft#|)k;5je&Sc-axLgufQ;y44_Tpd5fp&C~;$Ld%eHT2t-K|41wz3FU` zyX=dAU;OBn03Gzl_714QsBQIDN*nsmg9&g9k>+vG@8bm^<2y#aAE0|A2GZoBr+v2I zXC~LiKquchC8*mKW235w?Tc?|4LPTdMjTD_{Bdcse6jbc5j(3%+unNB$)omqns&PA z2P1S6fF8aNCHv3lR;YTshYRW``?h*F1)S=wiVL)IdM;Y41RE`Cl4s~KIU05J=uxry zx$=Kv+v(-OiArKRK>z@%_W%dKY>=TNwG5t5xoWbVlk!HsvhTkqu?-9m`=ZsDJE{gE z?PrjniMh6leFbx}aOeC*?%PhXZ5w$wvNFPSVeqjPN37Hw(OGMp-f-rs{KxbB-B%Za zGFOjPdwH$ao52SbtuZo|5dor#(WZ;1rCr1sR=TdCn@oSZTpY$LgB@OaraVX z0@nXi6=w8(;x&C-8r>S-XHjXswkY1_S{B%Da{NZd38N*tER<~&pYf2$7w$3q_;(D4?WAz9j%;vQ@Q723ZQ9Uriaf=ksk`=3pmBBLzzjU#0E z8vQ&8d}Xp4wK6#40#n`5n4NBLWyE7@EEJ|78r>WigSIWXwwU|lVLP6E6n;OI3#Ea| zYnsY3cji?dQT{agYk6xgXT4S<==pj-3jNKL`_Z!*3}#XkdJ|3*P#J@8u9PMQ4o;x2 zO%Al^(fPk-jg4km?$ z^T>Vowa~JAy55TAMC4xoyNc(WJOaMnNmJy1*{ZfJ1pe~Z_rSWq;mIW#HCm0}kZMA~ z;Vz`CtZSZbgBF7hsLPFkQpT=7mbj06@l6&#%`0O^Yrg1madx!~w^P&qLIW;2;Do78 zv6_yPcV1+O*eMXtBtjnhRU|G2QmpjVT60@)X^hZ?kPRMoY@$(i$BVfuE2XLp*F0cc ze#(2;g&ZpGR6-6Ge{#Fedg~Yl$3My%>&dP{cOQ=o!h@o-zdi^#cBfXK0-amTtp}6W z#vHdos|<1xYH3~tm_*{=cSCj&VXf$X5li#@`s~9B+`NEvX3r&!YT~FJXO*bC!1hq) z^mb7AtKgU8pf{FfO311Z9uExjCS|f-;@d;!YK~Cj)<zW6+Q-(J>`==DTVIw?^-*VI>xh<38!ya{79D3UVM!CplzIqo=g( zj0Q?$aY=a<$jKW;%-J7Wk9HZ@WWEs%ZOlFATor%#VA_^GpLZAgE&W>3lnxroT^+8MQuIE zR+gc6c(6piH^VH;I!G~UaY!o<(i9QgR&NS?^QX5tJ`I<}EAT1shyA_M2gmgG@fpbr_YCZNT zy-;#~>T2Ce5N(ZPgqhg{qBfRe^0zg>v0s`=@ska&T0wgH7jp z+v{!f{oTvIgI%DMbeUx~qnhQJ1u4o~~hrZ1XXUAs`X}OE_vyyT-OM#dPg|;TJdi4&0b?bIR-#5iTt~%Q-jky$kSULy< ziGUPgWSM9vI;OMUQ-1zjUphZDJ2!RP7j7jkxv`PC>s|+`VHVHW>OxGQOTeLz2JOfO zAx6DX7=;lYtGmlFqWkJbBI=us(-4N6T)G}`hLeKBZv5AUr7s&t2aZ>uvUeBCy2PoA zClON2gb_!8ub$>M1m@B4>XU@!G%`J|)|%|*6z|4*_SFg{o)1eB?1)|D8u-RBG`Ci( zfm^OVxdAP=^5+`ch{y?IL^l)S`^r^T#(;TvsyQ#$%FG99K9+DEb%Yxoj(Dnal!~vN zt>w<ui30{G#G&C3dX2%m{rD5WhvUNOUiXjZAE78*koO z+aImhZOArwA2)Q*u;gMJMHAN_2)bkMqNgkzHZ%JNnxuOPD<=%Hxy>FMgOGaNqfpkN zHo5ih7d6V#CbAEhl2_Ngf6j!Il%q^C1gD;P&L?m~EqLYcM7?T)=4A$Iusxfv~-edHB@EN4_;oIbZBw#A*3_ zPp)q&8@=cjQ}xWeq~_uWC#FRrrY4s%d$KxVMV2T|416NY@z~3c5q?S?=KBrWtQZ|| zv@6j@Iy}~d_PuzlF_G=C_5{xP$DS+_r?Af&Y)UjMN+os6B8=%T5z1Z@Z_aLl)ri7O z*EmQ6{Qi1X{H~A&zx1oxG}ti{=_Z$mM-dST9yZ$qO~2UZ%VnBT7Kf;aL?JVeDE<61z95hk|0XAvXB4ssBKJw{8GC5~8-to@U*uh)&VOp#gJ zRQV#hZ-Y{ZQj+iA_K$p&aqo1w8G#p8_}!eVM)cQtsX_x$?>8bKB3vN+DaQMiAq#ax zu#{O#-8$BbHVIu=!tL{$QYLN9KHPC#y!VS_cz=HD4T~46IF>Alg!F$qPNp9EimM{k zc&;y#+>O`(<+HU$v~g&|$AUZAQzQ%NtWRiz9fU172~y~bP2||WE)avK#1hj(^hFI{ z4R6 z`rVaMif(p++CazMH+W;5o87C8Vof1|l-%q*=YWv=e{vuu3Y9RBo-)L8GF~>KpWy8W z3lgikf~%k?W8mDaRX;CK1c{kyu6#^<^vE1UaJ3 zQTHJPx5X4Sq4HYW8-er=W+=CzH>$k6T>sfoAFK8rIHptR@P=|;ED`IV$1(eesb*JM6&6yrjN(;LLfq$Jf;P< zbU)0LUjTuO0SukcfHa&_HJ|&>H$1681$1Jx-V~og-(jk-USfP)VwUj8+#NnjT;#OA z+7)s<8ujP6C>?Wp#kor77#-?3uj=qaeq932^iq4 z2U3l2F~egc7>^f=*8lxze_7ZPe!xJJUGsknqJkj&dbK`YzG`B+Och)JpAWgC)jT5U zmeuN^Zoe+G2Uvg5dvFAsrRcx@fY;&TBhD?~q{B>ELrdoeXDjY&u0BOVRiM(KO6Q$bNC6MepU41R>M>f!pw)6QW={CUxFlWPiZLVkE z64T@V*%Dwlv;B)M`q=vZky}(dgNL9)K>Q+ZCyWICbPK=I1naf4{Rd>FGyWWohYLK zfU>K;lxA8t4On1CfJ1(DeJEp6&aW$wSD;NA%Al+3Lgywo!Vx+#Hchi-W|1{ns+y?43`kKBe9r zKMsVwve@2Ao(wU<$#@z+)9_I*eyK`7$&h+|?s8Y>meGQJ{rS-TXm*g7f!39k&p&gcBt63Ds%{y=T zmiIpMh;%VAcSs-Yr5Z#MiBHo(+~TV6arykW{X8F~cC8&=e-oG3USevCra?3t?90Bi z5V+Mz$%GHmq*sJPau+2W}N=E#kt4O9a@-ma5d2j9%Rip z7lCrpmVa(C2l056J)h|JyTF49+^fWu=SQ~L<_-qH?R__oKP-d%Q3~MeUYK0_qLUUM z@BLJMm(1un!p0=*w$9;3@BJelOpC;5KV67a)L+y<*H7WsCFC-#ljBd-BpTfMi{&7l zLO^#!FfCf8NThZliUvb(o`Bf6Hs{zZbAwo}P=<3eAsJ;S?4HW&ljb+Eu#`S>&7wMF z!;t3E9oqeAzLfxNu&Y2sFXmPpX+2_E`A^|3y0$2Ej zoJhxCmgS$7qviuMn-JYMM&EKoHV<%01=s_+<$}|?PGUmIakW#Zm2cLIz{<-h5E;1u*JI-2wIdvb@3 zBcaS(?3K2xe5+-UgxqBf?!PE)bk}tuk-^_L5@6z?5M34m#%9`0L)-;r2PS znq{6GT&kf;xsa|%M3|T+*#qY*}?MFOwL=hxAWFS*Af;HlsE#C_j35WlF<@UWOWo?VP>P^HI?-$kJ0e|H zvVff|u5J<$B-`g1b!=AwXr6?^oino7roC2R*CI=kjLaL zIqFXFArA6ULWd*$p z-Y(jA|A3VjvKR(uJ%$xh-V?ts@}Y8`#^y|i!)*K4rv zBBIjEJZPA{3%!mA=ow|2J-6Odg5w_p3DllfZA4WOeG2>BRGt&o;hNPwjpCl{y+$hw zm$j@JZ0sZ0-lUDDCj1)#Wy0{R9rL>H1L?VRT?~AB4urkJgUl$l3x^;!WA%)WjEmA*zuaFG+BXPANf6XFElu$37(1TCLn&zqxMc zh&|Hr<3&yv`#3i6c?xnypL^%Or$Rh<^-VJ4g6pPWQbizwE-dysKTxiM+(}4rYP|n! z%Y6%Ns93J53q*Z(q#Q_w)0{gMbX&v zc$1LAbdVlEE#8~Fte7}UmPxr!fX2n*t`V6&yxJ-QUHRv`cc#v`MGjSh;J#$NCIy8s zZQ#acCWltQt@8s4giYU10M%;Zxq|EwzVL?F@HT*qRRCk=95(+t_K5kfLqtD79OO%s z+bpGw%T@)`cTeysMhN2Bi3rkpB~yJx9g0cMSr+iNC3fC}oUFuhQF@yNvBea2qWPuT z(EfT)-k6QzVC6xZp?+wLXs4diiQIE%H{o--QjOHkLJ}xQ-Z}C7$d|c%3N8|5krgJF zST)7|y)Kjyb^sGovUv?;S1_`@3<-bQlXaCah`@9RxxMVQn~}%GBN~iDcj`7JQsFE} zpvnETU^J^U@gVe2=yiPz&JnG0?@UPV0F7Ng!!8_p^|8SH+K@&%B~>RFL?IOS`Smo0 z&(m(P>Arsj9aIw{AS+b+Mt-eBo#2o$ArM7+F~)CY5-K@uFa&z20Z3uoVESTn=vn;u z=~AM6NpJR3C{#kF?-2@1yFUP!qJwwh98T?hH@mZ9cY?|DEEz*~bFray@0k>9BDQ?VOrc*>Zh&=3;JJnL{ zl!^Ob6^8KK)K9aDfy}5dAsDT>cI}@;yOrHVf&a(H`v-}FCG-=%neQ}M+8DNNPHiNm zt5*i@!NDWynT`P}kBNxQc4JJGLjEdadb%sXL1vuolOjA0nrc!^4xJ>}Y?rbNGOMl6 zBLY2Mt&4g?1Z0N3BqrS>YS7Z$Eax^e%^W%M!r7Bc6uyD3R3WcTKdS}{c-$j@6o`z} z@%J1^3e~YQ{_gEIu#m|`*Dg&>pHqrJ7vz9vR^vh_Zt_U*!QBWCRtcD{jKZit{B>Du%d>k%~Fkowp zK8anZG(u?-r{xaSS?VVrzkKLXy?B(@AL=0^7j4?uQ8jQx+za;{BetoFFmIoUqAPmk zGZt#=CFuW1thZX3vGr8tdv|i@PrJsJ8fMqIo~m4?M0iU%PA0qn+Oo<~vX94!dLPhs z{&#znPPFDK9ywImJ7IwR$6hu89)5oG4O{J%O}D~dt^Wtmduc-DBy7i*H8>GUt+#K{ z4@=i{M(JEFhb&3Dad08f&0Zyns9xejEePE`_CH8JO;iEgT`D_~{ULBJ=W}idN7PJU z-L0bKK=Vxqz?aCujop6kBA{t-VS+~& z%>mW1?3SK(g%nG6;^f0n+=g+rRwY%;CmTjEfN9BoS8Rd(;L_VoSaU ze9uG1WhNQQBdY(M)PZw-5}F#sxg;1hwR@$`ixvA8e_H(Cr+5KF(G_RELmmrpnzS|B zl_*GKmQjG1Q7j_L?7rH7N-@na%4=5%(^-cgP{RZV8U+QjSR}0kivM8AM1y^442tJ< zPmg#*DTHRetG=QUgrhSlj|dq|t5;zmrd(mOO*!;n6i4eSLBG1|b3I&`(nuaLC@?R= z49dL(%L>3g`ieLbx(VF5b7_;n4@WF3-jCdu`G7Ge>TmF~cN>4vbmE8R2^WjLlh z3O)b(WV+R`ZT`d)lmoI4mpdi2!5^6r-WEbcYdkM*BCcZ~7tMY4W3ZzoTmmjie%?HI zv4T+&RClUT3MER~h345cAMZiRD-J38l^ZvdJX*uf?%G6Ofaz7>R7HIljd$P7cMbluuZjK9e8ws2n4e~7J_?2AXsL_ zK{|xs$nhe_dZ!0`)hj#PiD*k{ zA41YdWbZ9XJDwzHRKbdK&!%c%te*3Vj}n# zk~D1qR0JCg-a$=yyw4lf^Lyv!6LdBp-7wL38AIrCm0&KML`CQvVVp@p?x&ptMD(~^ z!R4vd$v3!4nVn<)Vn%hj>R*4g@e?urT*kN9L-K`OYVrBJ(Uu1~Ku8BMqKybZkWYYp ze}8TKd%4`*ZmjXSd1gM()b8c|o14#4OJRjrasmq;1uOBM%GH1SDBJy(S zZ?BbT*;A8age}%dG(3!g^**mFZL?H})qANgcE?i_;_m?A9Ud+Ll%)&8hh5QWm>=!@ zsmW{tElcmXp@?}jW!5R;YP&_2&Y7mM(pMh8Y(Ffp-BQTqMj2P>Q_f3UJORm_1h|fH zuEXb}`rkbD}?b|#3~Seu>ehWpSs{Hiok7VE7oq*$SXuuMnD~lgF7MEP}#=D+S=NWPRK0%^Xd$q zrt}_NqEsWjCJX#iB7hzH^#l2e6eg;sZy81|^H@V^bSJ`y`Jazy(reX=NsDKV4O!r( z3*e5|D=J9fN8X|`mk@kY_J`fCwmcXu2gd}lrtoFqM+VBQWg>svB!!pm>p*mghP)Vo z`5CZAV}?py#_0&6b`1k*2}heOZp|-aC$K;?8ShIRC&ndVbO{2&TAaq$awvP=^`i)~ z)ueXfI<8~CkGP@3+@(gUx9hj_t+p5UILX%-a%UoN6kef}vWJMimrL8kV>VP4EfYmx zeb~dU-qN(aWr+5O;#3E6|M0B}9kblsd~(_P>F;Od!L_D$l~bt9B6gFg02?O?B&v@PcI-3$0Sj>p(#)q-=gOF?FeWT1l%u-$#U zkA!X{b6yf;94qU@A=SktYe=T1Ihf+-Q0n-pdek(YzJS|SQuy` z+MsNdysQM{uqqs@jd(IhZSdiKAuzXdwBq zlBXw?5?o{PCK#`o1=Jvv{cZ>9@lWMNW+aeEH3vr{^;?G)IfG@zXLfqvE8W71VqFQ}? zzG7t$py6grvqu-e*!f0^p@66Ky_lv|w|EHf6hsOJIJ%~bAq*%O- zUr_Qw>rR4@d>b+lyEF_W;z^o~XwbvqiRnO7$*CB-wr_3dLe(jLax%0lJkS>3WlDRQ z`n_5beDq9k`sUpX7udldBT1HCwJD?R> zCUAI6`ht1mbtDt9++#~4^|||z*cYOIx;8)-H>7F8&TFDy&8tt~)E7XUUpo)CZy{>> zo)pkP`q3dML`09$d7;86ix=%G$9ATpk<$H}RCQj30IF=pu=i$8fj(RmPQ7w5t!C(_ z_oAx2k+VG*m-sW$WCJo{O-~={Hhh}XoM#fCH`Bz~uu{l=ZA1IZv|&ER{fey(jD|iVxB?K{lH0rZe|v#J_nmUgg=wdu|5pq95|^bXyu-pF787 z+xN38fC_o@#=+ztjv4zcPf?mVNAcbwzJ~|%1Au$d2vI8MxX*Y^?6Bm*v1H%-107hfCn;*^?k>H05>Me*hd0irMTF|u)KvS4_}E50Z$;;TRw zdBC22?=_>mpANcdOVSs@UJ{cUC~`^hiLa2xCgV!M^#3XPq=n{;6=|t8aWkcb%S`5% zs-NIGV;)d$rVLoD8pY{OW?JLJ0MdVU(L=Pjk>gIhKwVl>=@})_iLGvUGWVW1-0^Ln z+sqOzT;lG1?tVWLRY0ie#1*q00uEPx((}Iaf+LH*{z>4`378*Dm}LR2Mn%ij?w?-v zNN?*T+L|XfhX_04UOFGObaoN?bk{lZq??OWw3999GDe~R(zU2PwAVjAFpzGZu;63& zU!c-XzjIRS^nJva<(%Lo*y^8GQD0Gem^0nu;&%aQz0xJ( z_LxOimYHxd%5My(6Zqw`S(a3@>R-d@cHNl+?Ez5I3@$e*itA46a2()Vlqp08@;qivr{${sUWd9EOco3};(vTr->a_xB5U13d6 z-tpN$_43`YH!I$`mG3vgL~;_+?Rc}|^$C}{6KfDZBM4Ig@%zK=XvTsRl9(87jc*oE z{*%Ai!olxdjf%btFG1Y<@swPrBk@Y$ko*?o zaL?5<4RL;T)RLvu?I<)moza)7op~Mi<+gS`Q$Y;s+k#z6pYt!tQ$9>r^lLRa`m#eY zfYYs-!DZ-Tdcp8z5J9E0uHrBgRqL^6KM$c2S(KB;u z1I%SFzzerUHO#XuN(C5yF}_be0E?I6OFsZIDK&8z09Np){?=0I?|aL-H=@!=P><(` zv!`bi4@G?j5W!_YIRPY;2Gk$T3t@+m?Ju&MNb1*&*#r002V)R;zQM76Cr=?$-kj9s#vxnJ*kpoWlRp zq6X!|P~e!Ft{R5>TkO4DX@TM^>A&6zl(#fOlfM!BgRWs}DN|;3hRj+Bgn~55%vPR8 zwrh)0G0E+jSkF%{dCT|uXgzaP$POFB(xuE7w^S0<4dj5>1r?0XVhfHP#y8BqfDwc? z+Dea~wc?)7x4-80>zg8{m%Ls{*~jOFk8)>rnhT7{6;U(N+2R1mzP22x_72m47t464 zta>H6w_^lIH)Ev=#v{jy?6{0LZN~_8qn#+gd_l0f>O)5^{m>$*ab@ugLl+CfjpoI% z5vPjT8c4TMtqpa@+nh`A_X*eIe2k4_ar+N)-L4O-LSQ0nwh(w&k!K8QQC1yL{7*@d zCTAOoiv9rt&Kl%N(dNl6eYJP=d(F%b8g@q%p#gjf0Y3?-RkJ(8Wp%khYfFpz2l4{y z&7K>_nlG?EmFHDQT6%6XFTmPZO78*6q>A+Co|;rX93dvE@o;eeVZ;mH2lFw z^1gWpT1CUd$-@fJV9~!nkmc60v9z?N&(tuW&pakI0p)2ypMNdPUs3}mNw%Gv%lh^_ zrZEsVVb_qMY`N~4a~jsTF)dT>kPZ;{jTV24YsWHl#%cus3!V$Ig)y~*J}@>gat<-5 zHW*ci*>(*LD#NXZw8G7tn$gE8pIN9{f@AJyx zcXL7mKl^qOLpKXq{B@t7_KiaAx$qtQjFZ&V{i5S9Mo>k_C(BN1R=7QzDUc_br%+SA zoa=&lK%u*R&AnBmQ{G(jXhjG(wPSv2^Vs zbE?r~kg{CIbIP2hM%6K*XUyr>I%~6gLT;OB#SA8As2pq$;8U+e8g5}vchEz>VLHE< zNNHu(XMi@cvkde$eaO<|(i05?;s%(NYd&S&mOS!G5J9wfYYmLu&1I_7OMlV>I9lKl zczsZyKI`7wid`sd+iv$Vs*2uLmoHKG;X!6I z?09MVCbN}sIp-LaE-mKyv}i^X1Q!ZV zc7+*J=y3ej5)(I~KLRPll#l|X^-4@;r*~v=S$r@LIBc%ws3&AzbdT{3_qv`*>Fo|i zQQ7RJ8DW!_9rZLDT2FH*?+$|^N`2mSqUbd6Fn56>3q@Pv33htyicYVnT}_jLj`jHoF- z<#j1#OKb+5I0(QeK|~*;ysqy@{nqHNcP~BnGlcW)2vLaIF?~1DuCsEYp|jFNI`?RF zL;+@V3e8-AM%!z-k8zKE0rJ8qvsphb_)=$2fBpLP%Z$E@;%U1{*9bVO z<$qkGMZDs+1`CHN@quq44o z!e9RKVtFlj`j-28b2S zRHzkcY&wOX^7Gzm7b*vYFAt+EvYw`Ic-vATiXz8uiNso`? z|DAFO4F#eKkoNbtTF%{d!e(#ZP$v!s{td$g9))Rp1JVdkiX`Daxr}G_BtePK{d-XC z@_0(j{A7$V;g!d)&a0_NXH6Rg8*;H3BG z=MByOFjaoh{z-lm2{ax7stjp?vNj*n&YjA(umqW^Qie$q{pVw80NKy-UhgKv^O_BB zEFV@x1Qi~M3=9pNO@~AymNF+C;~y$?j-4dwXlx!wO0sGHya;A|@}{wD9*GNp4M3}P zXs#p`!{+aBVA^_Vepqr_k{Vh$es0^C;O{I0Pgds0i2U8*>1E_5M=RLAt*ozoYw+mF zpw6dAj9?i&u#^M)?l5?omlw(IWq2P#Px46RHHXoci2X5Ng7gS7 zl-Y0venD94&f{vEI37F{Nmk!8p32xpgJC-ZDC{pX&@3Pw41JKEPGX7#h#!x(+Q{?a zgQ#1kOB}~BWTUN(eyIXj%?z)dt69g_6-P8{zfg;>YR4k`M>koQ@+4E$)i04z29m($ zd#1qv_WtGLN#iPap}pGV@y;0$+khYqX$#NH#XDQpD-_`&+MkxwG- z=Fh&X=mLOpm$q)hqQ#3BAAGY<^q+@7qG7EZ=1WV^fRst?!n& zsKX6j{m{`xi!ZVSOnSdmp+)S-sKtO9X}rG~oX-Fx$+n++zMn&30Ew=N9~HyOxUN}T zv03Of2bm#(sM6#sV6hvBrOmDzZu%jzI|@vCj4jg-0iysy^RUOkU%2B)s{zBu;gok! zfJEeA;bP7du;vu@C>;9y;DysS3;kjv#Fxv&PgC(UxmA1hJiEspg0`FgC2Hwg00DLS z9;S!(t#5Z)p2FPuqpVi4mEVvX=3$mJdluCQB%FhElgk8wkMrW4d2T)iI@qO)IKGd8 zNoOxLy0iLYfJ}QaAIL{&tv|x43Mzj)-bP0j!rZ|WIRxoY`4w}$sXsUXaAk^{Af*Gu z-{yxv_!tK6+#{A`=AQD7%^>q;`){2D1A-4e``ap#z&=NgYKA4-1_(IRnC-MR08 z$MNmY)a~C*VN2uH0i**Z(*uOD-iMo*YNMmSoGBzkjhtQv>`cG>QRBr)_gy1r(Z=`} zBdHI~lT&9Kd)~v0nKTJrqG(}~8~7NLK7uz^-}**k^s|^hEOd=+Q7{WF@zi}giNTrv zakeoPgQp$X4p#AueczEEi^b#J`0Kh4`0F{2Km}o7EQ?z5y~E`%v;RF?huQM-N~5{c zOP|uZrbqVF^mS#OEtTqg`r0>-*Y~~E*q$KkIeyJmU7YTn`L;Iu&M6SqfCkW-f5~?# z^U#g|V~4PWbA`0%#yN65F?!TQdiWP9*?mvzAM{CePsyqemlalOyG1ayliw42p8JD{ z!|ZIUtg13taSv`r(+V0ZwpDW7)|wl}a=($+wLHSpCs)udL36NqaE_eIsYGebg;}QJ zQ~fBD0Tc*>`w#^b^431MAVCAJ_Ayvz|6!YYUk#OQlGN1?s+%{7=Y z@hKGV^DM8J3)XQD0KUA{Cn&TGu4e|R2MI_EP30+-vWg@3Af_luqq`phRdOEBPlxmu ztqm>H-TNkSZC3rpeJ_N^HUZBnR(lml_>!C3uk-!tW&4e=l_9%x0aU5QVQe$TVhx)R zl|W&rI@1GZ1~u3DX*aaI5pwO`*?|Z)dV+XXvdx%6+X5WdD*vlfK|G-mv^zp0pqxPU5b{RK|UIoiH!R!gIXrmuW0vGe*40F@$ zSX5H)*CecCgi#7^Y=1oEz-cSqPjB)ky~ph-ETY~%*d6rriU&jIX9T6rujp|4S!TY> zwfo7Wr^N?fTg@X)I&cba7bUWRuvUOzyB~SbdsU;KlYc$WHMa8$;$k+NT8e_^>9`@? zH*cwHxBvfq7y&Ff)t7|`KWt^;6ge38Ui1ZIlYX;wG2x)&s|2(gSMOTe?k76EWv$m- zugz9+Ih!;7KA2zEO3SmVPlQ90hcc5!RC|av4rWLUo#`f$V~ahyE{SYIvw~9H%C9O% zQ9@D|D)bwAE}3+!C}IevRdRy+&tw>L5a#-=HT$+=D4N!i)&j8%+X?9meBP#|Jdydu z@;W1XZp%5AR}-oEMu5^>Z+oqxfIA7l(m2doe`Etf9_96pDqz|HVY#;-25!H=*ApT$(J_$>%JTEny*{}W znOL0_j?Bk6$HVG7^2Z}mc|zXosE;3#fWQ0A&5;su5!?QeGYj#L<#r7%g)1lTP#SM2 z!8VOTJwhsY&(Sl`6D6>7G)l#C-#s6D4eZxgMlw-$+!jBA{QC+mx?%zh`(jn6h3Bc+ zsq`{$=&|6HwcB&)Ql3m;ICx!uFK|B2DT1n)AO#3+^PtZ}HUnJaO(-o^i*~%do-Sox zT-h|>NDHL|rIytD<_SiX)R%u6dje)4g^sw%jjae7C(0VPW#qM*<_0H9<-`)?yf>~b#l(?NOFG6vpfC=Ou*)iCM-e)p6GHo`_ zIKNJa$DIw)gP`C*Hl%e3EE1kXawG5~N{rYUMceL^dc9?jwG4QbTvSKi#z=T!p;-}C zvbXdd8k9pq&rcTq2gJtCC4Ti@4vyomlKHG#7}QAb+zR^sBqOV`(Lr=_N@o? zU0UPa+t1Fz-h0ondIId0!Rf8m&@$Dg?n+1B47Oorxetl5Q7wP(=U5R+h{8_488k3$ zQ~|iSaw&8DPO^n3eav+&p)wWIn3bdV7I^}%&7S`;A7%DROw=S~uBZqJv7t?4Gk7d7 zxO^nxBX7lPBw0}5c<7O)c0;-Rv63HuexdCBSG#B(vMsyTOc~t_wAY+g8?bLe$pZy% z*m-3UjSxuC1k(69t$2!=IhPr?5I4cJ$i)=QHsY|TxT=lfaMW%D& zu7HLMXTB)gFQ6u_gz&ov^X#T!C_(>ZPkqyfY4pfKQkJsrR25QThekonhkJ4@+gfLa z45(L%WYs@cE+3IB8##ltY%cHoC9ra^ja@DEo89cK4N`q!%c@J0(MmkLq3Xlaw;V)R zi0epn%Td6EaN*w=9wx+-i>6rbK4G>O(+MEkJ{uZS&jvcCPTqt<@GAI433_!s)U5i? zGS^wz`?5nPZ7+%*V(xRr_{{YZP1}d%mQ%)h0g)NtINn4D%}F8HTRPKv(!R#Ux_$Z< z=Y|%=6Jhg|T%OkPj;#TCpUVy)2JA(Tc$PB_1DVx;G^9Pgp*87uBGKpJ6|z+t-omRC z(w_M=o6<2^{&B}@>;vy!+shdd>;Swx0kT2=B!30hI@XU9cQQUhjf+RlunYo7Kg7&b zg>*O~$L$}^?Z=neuGo1=z5)9BxoBSJ7ww?^kH{DMV-`sGY0jwbjBs-#vz(Vy&pV^v z5>`r(X7b#1hjM6F6~+OCDSNs;*DX<>@I`narnYmuubRt`uTm+@(Dojqa8ZTE3_66q zAhi{4y(C$2mFGKPsRZ^6@g?6asdGohOkQj^M+DobS1CFT3hvdjy4)4gqp^RsKbc;! zo)U7Vr;OR{A~)U|>K;5Fl?7dfDd#k_K^ZXuwGwxV_8|vT<*{wJhxH@VcR}B%PCMB+ z%qDLeXHZQiy=rENi)Q6BW97x?^1@oi!H`1usUR;!X86g6 zI^!{73&(2YR@b*@sMNm@G`r)ITU58>#+C!#772Vx3GPA(N$G>Ds%;vAxBfQ)(xe2k zC~{D-8Cc%i(!e5tF<2CO@b7vgx+i{!Duj=g$1(-E*}SzBy}b#Uf!moKBchgLZ{s*E zds^Q4Hm|7&CTVOyZZ37aBEE27B8|nW{J{6v0MXho&Jefe9j7L5*Q-|84&J34f40kA z6k!ec6$q^1`-K}G{Ii>$<29!JU9;=`67M|DJvINB+jPVuhmBD^As)!VCM^y7lS}?r zChun9r_Bx(99wr5+HQi>ikIA)dRUy$rHnt_-2*fP_rQzw89aQUlXjBFKYl0iwBRf3u<@mY z+;|&gK%UNnGk=se6*i_iBD~e8GR@86tLx?wi(PQDKrbG%9?tFpPg+DX+MGaEO%A^3jtc3VzyBcHT5&o{xuixb6Q<91DSM$!>;l$T4Ryz;| zrmt7V3cNXS+ABTGIXrV5S32&R?$ke?VXA->BXqTZt=>0R=BH*rL2drs%5T?>1{n{K&J+Tawp5ZQ!=H%_B%oUYRmxJ>oJ z#HFk3>y6~L z9DD+`flC7V9b`eoR$-4lFJ|tsq@^Au*{!()OP3+`mTHzP&#LE@=?vkuAv!iJ;(jJkaSL*aH?nOeeKya_KzL}?dOHfz zSf&RmIPKlDXAf)3I`yQ9UK~mKt0Y-fOhfkgs&4kqJ8Zr1l_}4qiT1EJzo*;TbH(OW|jIJKp-iSUg`g)0Wq|3fs6xfP35Py9<_+EcZ3r&5`#--97!P z6-Vufu*mK6HUfklJ}bzY+@pt=XY3w1(iBC!;%O<#szE1f4>Wo;x~^v#IMRA0DB1S! z>+_u@7thN^h?d$neE-#%5R&kfL%gMOr(ukaUFNqAC#OH(ty3lIrhs+HQe zsOML8w<||l4)vr$uiZbiM%>}5Pu|S6rrOO#(oHT|_1V@;`2Y+jxJKA56Ljt!BG6{J z{*rBMv^ax(v{M_%p`@E?$S3CzdGDQR7~L)n9z+Kq^{y3t&|EyP;@fcA9@tep4RP1? zurI9*{xo>}#lpDbF}Es*BLzMBRri^u#>jFheM|8P33LdMY8Or&Y+Iz;;ARoPcTlFe zU|&>H*MVk>!6T`#Y{-sxXnXOk2O9H+-QR6W)B zb#4#aTsy2a0u;p=DkdD&~q#I+0#m6z30`qjfJEewO-Ap?xfy-8nYg%YLK*{*%oS%f4(_%3^mt!=fflqF%TUXze=rHUq zI)vf=TD`3aw^P@B3*bmE9WHUIcu`C@F0@mPmbF>?tofpWO-1YXUq=sieAv5K*7;9L zYf(sXy5oywA8*zC_og;|!-@Ol7C@=*A287*9u5UA?~jWf{GC{8;ZPaVx8uyaOGR*Z z2ui)|+$c43;oy(r;+n@_!x{Rw#55N6G{nefnRM1|Hsr}jWDid=IUFly^-5uJ__Wv#& zPBiDQa7+2arT956YRTh02lAwzHCMR5>~}jTarAnHTdNNsLMgJF)aumteVn_dEUh9L z1osHVIUgVHS{$WTF7o`!&fqeayDlPnO;h8YqF)5N|FBln9sW#DP)I!8@HH>}OP48I z-6lo3CvC#q!EWu3S1sB1)O6wFA5k*N(k;2S7bWNxnY;YazB9CW*oN-5GDRxKe7Kh` zzQ5nMIqvv}^~LJPUD`XUg-htBG4>&e8o@)sW;l4WH@W_vnb3wra$= z(|$uK!mizq#LOopxjdG%(2a=gt9MON73%Qw)KBlMET;}C?|J_g7ad06mWDpfabcS*P-{xrqu^xENj0a7|c z55Fw@@|5oEa5CzdZfvAh{C{muXWpG`q}Ns+|8?(qNtSDAPiIV;U5t4^j=w=y&B4-^ zPJwDV{L&_kyJ^HFY!;|izp7Un2^x8q-km?5FCd;#*zb5MZ#ETZoVP%-;jy#dV|dS7I(C>Lx;C}5 zUB9glp)by*J#DzmzO}eHt5Q@iA>`}zW5eHwBi78OieJ|gnlBjGm{fMoQfz;dWGEA< zdZ%Jx-S z%C@D0*4uhpxDS+!=cPzjHsGq++?nE|UpS*dkaa-f_5a@@glmFEY*g7N?PL4lS`;!< zJwQ6T-M}zNIp%cjr|7`q;lwt-0If}9y#VX9GTHKG6^_m|Zb@NSv3&N|Q_PND z`_yldymQ5i?jv2A&1Egk3%f$Tgy=C&4iyyb?~1CdDTfQ?@l+ zTd7gLzN~&~{wmEO`V9NnpZvqCR~oh*D*07Z8LgOns_e;wsh6BHgAIP06r}|#8{ap( z_p450VFS!h%4}TB6XY$Ebss<2ryqOyb=rcE4%ruO)(VqbBeq7Jjz!&!e_A%%`JU$|4%}2OWNdBoJoL5iP%~)7AH0g-TUMC)>TJ2*iM@~P{q7`{ zCbWC{+qHz{=p{VvlGL~f>kLuX`kA5uGMf!QdGxeI!KTdOTbwyvx8PO3tzAxu-L0s0 zm$nrBY-Lx?wfyNZ!*1)_ety)so&0VT^Eq~>Z>e$%62%|U$)U0 z-dS4`dXDT0IXzI)Id{$dg19}3Ir4MZOmnWQ=GiqwH<@~!w3OGn*xI9B8vR74W}O3l z#RolyX48N??+)2GyLYpC%1j)G8HaDcWoTB9T(m>LP}ws!C!3Ij0gM&U7k$#n=&SMZ z$?IBcq8)&ndf@VK;8Bl1n*)@1LwP5~o4=?ITKKgVl3IH9e;Je8M7^3qYQC#$)4mKZ z{h282c(mW;Nx#m~uK5Zo#JkRU*22aL7#^j%+!PzC)#EZ0bbI3SZLmMNMVZU~!M=$7 z6=kxwq|{7|Ke)ar)=L@=S!Z5qre$~KX>7?-=juWkyVj_l24DF$8xXh{HjO(AZ9nVP zo=obiI9ujouU=Vw^pJqPXzjWwE{%f;D`G1i zZ*QdM$6%+*ii^#y$$~|Ze`Xe8**+hACnopcZ%UBspC3&vpD*mX*K$4k)R6`2*>8xw-`2B?`7W7jL^p z?{b@(tfVyXTkqD(=*VDm9qss2WigjMEbL1iTFM%in16m$vuamTeSL-7P+>w_?Wv=_ zN$-=zb$iBJs z%=&Q6`u@bew|nJmd(TxEzSOZylWe}Et(Y*l*TFvVp`~`zw-+_5;CPlRxpdH1GPBbT zCXMYGnfNzlx4<4>Kf`C0_FFca425m#`u*e>ZG)0U5OdTziACAFANj$fzzt&+N80Sr zF@Rb}Dpe?}eubfH1fRZhb7ze9OV&TF1zR^e+i9hhB^D&u2qY|Lr2cBSAsW|9uiY8^ zH)KI3qqR)0{H$Ps%MF9Q-DbtP<%?qK6K!g(Hkp0S;^->pR{nT9G54D2)0X(0OIPH+ zCgg-F_1GU^tUd6%|I~q(M(#lal|LKX9}i?y`*+k8&=dUbxJPTI_x^4<mu-(7lS|!SBqKZX z@2XZQ?>R19=n;JxdGdYmuN)X}a@nivm(byU9ibLbSEixlkv62>pwJPdA!aLftuo!M zFU4^oGxl#k%{rY~k5h0X z(DX0(Y+5;B_i81W{k1L4i?oex@{$wG-B(^sSn*WzRQo-v66t9Do~Lh9*6)yNQjS0b zJy8^#YN6F##AUMPz{i`hMt>Wp`h_?RSyti-jT`vnzF^oxD?YxaSs;uw=SC(Kkah~) zhxnAS3dc<8aQHv5Y6TVKOlVYd{9T}Acx~yK=(PuRem5u&7mFO{vJ*@iHc0)IMd>N{u&zBZ%{^ETh6+=C*7V>|K*6BJUlF=n?p=PdU)tu^T`edILJ`%DY0vovKeAK0K2lB;J>kTn)f1;xQniGG@c3e_}prkyj7~FA$6b` z*~kgT+8A5Ev@~H`W<5?a9Ym31ToTUgXi8Pd{>fV^Jh?N&>cN$-#CCXfRbEHmkwenW zjxF9FVxK4cUYzjJWayxkf9-{}Wo_`r%x?<$)@b`_O;3ro1Io7jkJ2`mnbkM-R7CV^ zlpg<<;%EE!yET!Q=SbkIC=rFF5~&9eGea-zOGU!*^m+SS-DtA4) z=CWXgp>D2s849Y;rR}+&pFWt@9C3J1s;y9FgK6fwe)m>QIjfGV7~V&m?9o!1b3t-WpHpgu%kXBm*cP>@{=+%D@-e*D(b-1Rbh#02Z)3;WuGjXfs#>`1SAN*5w$CmJr}7N=lcZa}Z?;kH*ReZU*pX(}{VPav(+i(m z%e0LEo4edl_0+ehqWclq8>({}7fQFyOWn{YnkwJ3d9mzo z&Gd@5vz91?H^+$H-|DCA`k}Pdl+CF5t4pBbL$y2KL@x#@Yg)K8T6kC#Ke^Ybyf=Z7 zv!SPzb67;Pt>T)$jFXDE-=fI+h2IWjuM!v<{?;jIcF#hfrz$w;Pr)3&AU8=3+qg9S zuGETvp6YuNN)fQybLv(!R9I@;?Xzsc))KdRFli3j87vt0aUWa3U;NKI;9T6&q`2Z& zwGGNnTgx}4T^WkE4mtYEIPAJ5dO$@(pm1Nvl_>pQm%~0sr}k)NKN2|kDO9OG$Cokq zyY@rGi8*g0w}*Lk|88l$@>}La?T?pzy>+6MIg$vrJ zt4o9atF*qzNtf8;Q3cZu@-YMYC=)|FDO{t9aF}zLW(P-Sm5d!*z7-dAaQ08P6D^te|`puR4A7 z;CdJTB`NJ~HjJGP+9?`0-pwldw4{EagK%~8U=WYE1ow# z@k|k+juEa#;}>Omncn&b{(Y-m84F(W`5$yVIahbRVYOH7_voO&z6+Pc?xt0jEMp8f zB@}#qydU@QoVY`AL>+f6J+R0?#ZYIac72{p@vE4R{;G^)-Np_I^v%Gz4d|?N>yI-% z$oXj)9u+@6t(=s&@@&);vL4Qojag$rrVp9I)D@HWJ}CVEMXc`^alPWvzKHi3+QXU7 zCXw0fFDJ%3?0yJ19f4f`5x_{6hUc%5aR>QI7(Q2%;j{8>voM?C1pyl(4GeC*4|(gS z_?e8RpR+`am-V}l+pM!1Y5P-OPL~iHdq$xlHt)P&GFSR*yRx_x5Q!$*S8=s3AGyz#fU z^>VYk8lMs^Q}wiF&IVo^dUnVTnN(Y`huLflRDC=8o_G(A5AbmG4;jw zhm#*=y5p;QgMHE`JEM;--N?4{iXXcAu5sTdL}Wo#k=_=GmGcgE^!*3XbM3#3m%Qf! z$lN&&dXxki-=1D_pf;uiGxV3mK1~MRxna(Ak>i6J%z!U)vb%#fRF%{C&kP!M@D~m* ztG`5;i^wFy7D5+-cb~mE=NyBpT&pxO<0}t-_RO^H!`9wK-u1csD|qDwRIW)+8f%<0 z!`HkR=pjAv%0~xUZEOHB7Z58vFgTt-$7JC~t5B$_t%6WuOG`626;DCw1Qa)@#$i0oONOY z2X=ZP2v`p=(@uIP-}dsA`NgPHS@qwKso1#iV0}2Z6;A%74w4TJUwsa=HAK7#ZDRbl zct0VHWLSa>L8)p3(HC^>25R*tw1*UbzZY&R$zg=sqY}I+Zn!>QBV()=paeX?M($f3 zvbp;=r3#1H><$TL;U6>eW`6o|1LPsUeB;P(0zl;3q#3}u2N?jn#2@=GI~C?xCrcSo zD`98{k+KFz#lmUtRoUzkeCholv4KuH@12%-nm~2u8+{eyr#`u<75xX^?DBZ{N>8f^ zDp6s3WgQ=rd8xH zNlf3(v=_mzUJd}JY_eb>nG-{0mxgAjHC7FR+!lpyV$0hJ{x1w^I@RNOAz^bI4^ zKdJ)z_j%0RXA5Zt{dv7-99}W5)&g-)%!Y`+7oi60N1DN22Lx9rglT~eumNCxu#@+~ z=^+8Q2MD6gdH*}NyDLNE-k(p3#RaE6l7yh8#Xgw*PDWyw&Aq2zgS8J4f-hY3Ww&s&x^12yE)UW$=rDH%U4xUA^CmXr-__Kw1QwEMb1q2YUvvo*BIUZmD0_i8 z4F4cmdDF*5`jsuD7?Qx$gU@nx$9irBe;A zho^x?xrZ=v9&F=|w-&oI+XnBfXo0R;G^HG&m%aSFfUIpeUU zZ5--lCx@&pSMjD^hM0}sam-N3JnFky1NtBx<#7@_BG#DRDwkt#UIuN5W;hxaL3XJ8 zdI>PcUkkMjqmF&Z>I|v#&SM>XaYL*jS1_!TLw~hR-6!WN+O!QIY!DwB2-YwSM((V^ zfnPfC<&Dp~f0rgpTS#HpP9UxR;x(U07US{DoNQ`G$W7-#3gZw+{JQ};@5)pVE$;K;iB49FlH`w*}4st`GXZ(Vjw2-8*CJ`pzD&*Y^Q5_cl_U)zjyNe?E1Q6v0TW$3oib^xxy^;=t3|| z!GX9BHOx%6b+5FhJ~z~4h@_TY10$2Nnbmg;^KcEou|?-igVr(M2cZa!CN{K;nnXnyI>$o0T2=dZdFKrca-!SY{zs$9aFyT3 zLqXrtgWk})Fe)N=WEj?*emdpnr+Z(c`0_z&Ooh~0Y(!H{@$wOd2ber=Bey(-Kq5Ue z8;K+WGY6JnwO~fN%vDC!MWFls`M5SF62e#umEBXo_7o>{QsSEcS=%rOq%}e!2Yrt< zXDnHk?&htgd+fR{W7{^M(-z7VB)-U+DD)t7C*PW4ChI&P^$oI3J;qmvk`;J|DdTa4 z=L_3hf+5&)9Z$17$o%cZaNH`I1+h>li-YK|0Y#Q{?+!8ZK(+xhiG}ml?A=0iqG6S` zA1W;}`y|avs{A)C{P^e!9F9%f%kul`PJQWPSSvH?emU-sJHDrQZx>^(1JowEh!z`| zy#DKrFA(`qTsM5U@eED z4-rztJ&-iMA|x;I4rJlj=0#S7FwVyV3HhT#JB2P)mO}IdUYOyCDF!5Qly6UYfcuiz zOK|96JAXyseZmf3NT9u6f1wAjyrbpDq&&wNzo$6Bn(}{HwQ9^~uDwH$jPC!!(VM<#;@2JD%*x!+W z6)W>D9tT>EJ|2Z+t8LNQW|H?1@Yd=*=^=iGX|8=`GwK1zdIDh`lDd3};0kK4oVqkV zZzq(a?{V?89!w()!=nkNoDVySO>6#WZ|0Nh3E>?=EOaNvN_zJ~K}@#Lb>#}ebs(y@ zWEj#(w+EH1+J+RyixwO%S~%PScP(^q*0{z=l(g?nr5y|M>3FumFF9g^UN`t++1PT zF#>y!7@!?1a*WrFWm>n97y!Dr1*btk?ICzwkt0aZepYt2{QRr~SsB>iT~HN&0%Z}r zxl)f=!mdNyADjdzL3uU1A$4E@3Oc-h-nd;`3i94UdHZL`P>GhU4hj~9VHSfohMq)~ zZY&~!mzHUxkolcyJTR5@1N!{8N@M`0!D=7$HZj=na8p0^~B->cl?(*nhIf% zHH2+_T(vqc-%)vpsu;L+9T)`pRLmAT$mUtiGS{??GsBR;r|8*0S#;YHr!9;)cYIzK zDBFn=&cv8)jr+ilGY*DJcqvk>P2-SEl^w{TZ|3sFGp{uE8!YjoIU-70c#-Z6$tUhMZReTzfwpsJxP9YoM=C~fFsgd*=;r=an0-xq5W~8Yxd8wMMielUM$MK4tmz>D{Wg!Nb);WLMu#U&Iumx_XSw zmWdtanT~`p%<6XJcnJ)$`$>`{{17r)N>Y($AV_M0PQMSV^kdbUIGBf4%Q|*c(X&k- zfoBHQNi_+sMM|zZM0P?g3_o=c5ZOx(iPx6EION^Hwz~V%py*DvqlW*6RmK_|tI zLyzGB8IlrQWvYHh#|RRKws>kF*iVr9Cz5+_FBYj~JeLT%|0~G#Qt(rXKk@agPcD?E z_F*ZYoXuEdft2MI)C-J6Li}g1e(o{sUd+#Fru)Y<*lFb+$#23^Fmu^e#a(GUOARje z#FHJgnB>YEyF!#&vySWCcEJTChbz?hV3qk;@Dgg|h-9G|5yU_peY5%KUBoPfd3Lh# z8aAVxj)S~XDpLEVvP3%99q9LJmP6Z|sDzFjMwtN#u+4ef=Urie#=vc#T##J%!Kdu! zFUQ%6>RchGD*aUzD=Q*%lCP{tN;R?s5=+8#H8z#=-(T;f;7C-=Z`9HwMnt}bV+_-k zBvkV!)I&hK-0dKO_xK{?`GT?2IdU4SzOYH_bzlb*G3E_m1KYKH-xK22eb4OS(;O4V zDJjUl?Iz-YP`VQs?`U;tOWcNEJ3WfF z$NWA!$q;&Krv!X9fLYL*JyH69tE{+*LtHlh4hL&?M*jgJ2(=KamGbE`?RR)W+9oHe zqT`F2_z6T3n0?(e9C&0s_NvKYBzWM0JR`QI`u|~?Mzi4r72s;?Lcif9JRG??AUA21 zZQKL#WgL*Nq@csjT#M*wZGL+&YkL(Q-Y)wIkx&AKw5R!fmXvEZ=!8W#c;8-L1=qyE z;BOFGl)0D=4z9nFTN2*FeOPCGynU0qrdo0`m1j0lj5Cs(wMA$T+oBQFKQr;5=1+&2 z!DeEZ2UTFTWi>YzLyfF};^KjgmVG;uf*u<(JS$TdVbKx4QbL+LF4-qT$O3TkFU!sVS-~ zwBhN`ImY*020PSARtCIL7%^zg5xqx5fSMl$STHj(QcKMKNK{p>uhO(QYqgn5l!HV! zl|h9_AFi{k^EmGiXP;1I>GN&RwqIM;rp5p~)QPD~Go&l`f=v7(Kdw$nCLZDaKx zCsXiHym2E5-E3s4xlD4*!(8usEL5&whl8_9JkP|aAFeJvLrNvm4^S+L{UBW`zGHg$ z*HFG*V%mv555%!{f{3*1`oYbLBx+n26bP~PhZa601V7}sT716m(~>RUy#kVjzQ^HB zhpEp?&HgZ6_N-l=tfOfJaESnr4z4lr9Elo-3_KN?H)xh2aSb^LN!<#^nwg}f#87X6 z?xG!1fozj@yS6f2Z1@}c*#*cEl_|pN&odw%TW#XVfR!jA-doA1ZIsv#n2?0B@E|#=D{Cl385H zWvN7PopE5*|1??84Si?6+2~9@`sgq9)a=Bu(r?cXZ%zobN7!~Nk-6*>lR@I}sc#}Z zwLZA@roEwxx<)(Mm~=Ug!UKsA~c`RQ>Mm(V3R#I=cP+y z#GN?s8<4{4TSy1{iAh&d! zrLOnb011onM z30&I&wb0~<67zfA2zS5B61?i1z79lBZvvD!zwgSauhT9I_y7y@-+w#t@OB{N1S>+~ zNiMbb$3@~bLHq@a@A&*Jk{2ECBP`TYaj-Fqe&rfxvqWwRmFGwD@%E zV39>#gVNdxmMxME`utVVh87~Rp;B<{oRr2ta6%rcH!@Cpy7?^s_I&4w$u zGC7r=jv(~M*Qs|~6)@IJk2E;Uko2Hg5`B(@O84Y|LbIiz`cGv6iXU3zsU>UxMic6) z1B7sx&3?9IZ)@7jkU2v&)P_K-h;c_O%7^sMs^GIx+ zSRDyM)S=H=X#MJN#-#n^eLf@2Z6FRxj}C)*(C0e|!un1~Pm;LBFD-MjU^}jw!&)|X z1KW+3yd@3!uui0W#>yAN_~cy7Z^$8Tbq8|_D*9SWk}L`TGp2_!tE|sQvb;G-7f`SD z2h?j1D>(a(A!M*JyRb6Vw$cl@*mf+ZCQLjL=8+2`pvses{=oyHGmSFHf}scR#|>yp z+O?Jx>QCE%Py`K}U+pLswtEsa7NTnp#cW9V0NKfTe1+qz9ZyJzcXXes5_R3ibQ2M( zBtw^(=h14V;$D5v~g2D2H5k zk8wD9N;?_s32r-1V3=@-OK#oEFb|OlXoMHx;vCnU>B9{3-oY&MMh;(xA!(a6L(R1S z3g17oQpknHCj?hA1Cl@^Nrj@=I&dofrca}D&{#MDOh%(IIpix^_ERJ4Gi>KXl7*3| zm;B((k6$UtH+}O#f^2VC)DWCRoj6UFjIAomH}<}Ff>Z`@hO$=eT>5< zuXcRf5ALm3{fbrU!5qrIO+z-ExEF?MKj*EAPWi_D^QtmA`LBccuUtu|VncRe6h(Rw zv; zfh?8Hf2$|RAK36-`Wd&^#Wzdo>6mURhfxsWfIfjr3~6jGar?8!A+^rqU8W?v*FHoe zbcf!nm~uVKa(me6V;Yt-MfT@K?5I8!U4vB-o}#IP`J1^Db@RyuiQdIyGLC}n;1}eD z_ijdfmKp1p^RTkb_zc>N22Eh>KQZGY&&3S5!IZ~KZo9m&Rw=_U%{39)GA*|Y+7L;I z83;sZ-<;kMa0Vi1xpSW9_ray92qCmwu2{!i`c!)dr!x$byC zsSi_(3Rqi1gbaNnk>oU!EnyPhpYxE!M#Q!PWL)Gg52(JmnUuTv*h>@>F)n zzTRvqc<%F-)ziP9?(gP!f`Crip>j^Y!=Y6k$t%3|IEu$un{(dwlA6=CA0sffOw!F~Ebl=?iX^>0Xv&jb-xt1Z?Gv}e zQevR_<&obHUTQ`?+lH|Y>0!tW+`S{Bdmnw#3jKlKSf&Hehc3i?i`0)uB=^JS02Xyw zCA3V{;0!c@;vgxYQm+=+FU|ckzkJ2|$akdz@lHiAhFf+t{1u!n?fufzt@w$G&-Avu z474AKrd6ymmwBNdKJ5MNI__Uf4U$|d#`{9>P9b_Sqf`K)7i^12a~q&OaSpR?lCYIs zzfb%Gt4lRx%72iW{2(>bLeU)!&9YhoRfP0u<0?B+*9ZS0h*+v=Z!h z;k2E!A&!p+y9m8~IADt3qE)yL1%Z`6=ol=)9N*L1KxW7+>tY*ve?RK<+VL^T)Mh9C zO8h&e0mj<&OF4|%i-%Z1t}5dM{{)#o3*}++$_fvs_uHqrN;l{j z5MMjOfqsqH@xR@C4i**cTAQbn` zI8s4&=otOF6vmzvJ5OpNs0u<0ZH0HS9{bI+zoA!@QFnnMX@z_Fm@VyaK`{aG!h6(v zAL4ijbuuApL#B+yi8!R%=tFLf3>Q2phDi$c%e6LlzwWWq)V|^cuV_GQtY+4!brb%7)xPqyS}2 z_>n?`|F26yi((V{UfstvVCVksp&wy_m`mNmMhNSo9yYor_JWhhg8T$CU9YzhlI=e_ zYei3`$%(%h^#VtL;I}=Rr4S51KIoL_%@QVLdlPY&NL%QcrzTRn>#y{mk0QLez+k+=y75JK|Z2t%RzmLalvkRgJ*b7B)cwJJcT{!<1hG?9 zT7r*yg4+Myd0iINWbDC$5LKQeSU8-vMINM${xk+1ORN#u0JQG35p9B`EDJ!CsrJm! z_?`q%7U_nLlj6bvQlz66Ai7WC%w>RcPu^q8LpF7f=u2-|qi625m-ju_=5oNpPe6p{ zRBw;;E$9Bs@Rru@?{2(AoCnhU3Jj9JGQk376yy=?kE|w)BG6COP$=F5C}u=z0!=}Y zp(#MC$sl-O?)@x$e{%A5U=Wbr_<#)~?VpbMKj8pq`>aNaWoznO{e=@(0JI*P;qOQ0 z!|6WiW0xXFUU=Vm;RXVJWS?;K4d#*(=wN+ALRi^SL{+v7pkK|WF-Z4*G=B32B?*%8 z!1M_%7+3Vn{>-CL=}&kSTt~YvYU_ndj)Wlk9e>LFp|_`f*KfTiaf7~rn9j5$YXIcC zjMh9yQ(sXhSeHQw9YizIxXs(-2di*U&PtGt2H)Le)a(FMM?rcqGTjgKF^Vvccz1gP zN1wd%4EZB$WIzrwDmpXC^9i5*gOLq0MFJ@K=lSdd4M|JQN|W7x5+bz9J(@YBb%n1V z@!Fz*B;XgxNA@uTP|d*nxy|-Vhxd}413Ort0q+>SND5^2-HoQF;U=%n5Akg=^(4WS z*N5Xn;)L}mPrk^0x12zvb3!M_1Q%{)Ld6ol}Bx%baMUIVQsPs6||L<@03z8a=D z!bp{9$*may1}R_h>~D1@`}Ss``iKNFhzfeP{8G#N7sU`fNJBj|LeLUGW>P_UhK!7g zGJMtgX$;r|c_gfdpkFbB$3(830{by}3`}l;4hb-Sa6q=`(@VsaFJK1cAv!31x!({3 zI{S4^z=Sy%G?oq#9iH9D^}ji{!8vmOJi;XAg){-vzxN+V7-o|$OQUMvN}I9g4;%lC zH|zLg<8@T~`60*q{h;St;!i)@*|yF?JBgRwd+<$}fZrf(jkTcdsgopC^O=hvi0a3K zMwDAu^nuCl9}-4dsX&*}NhCH0`u67_IR^SWxB@Cnr}olm^FP8n{bwz{@M7jICtlJi z30{S)DiSa#04aNXCaeXX^8*#L^|1noB}r-wcc339Wcvovl+B`97MozCIWmYSMjPXG zfBg7yZmBu?FYlkmyG~%Me-}y`|aLPAnrv5PsIV02^_&s zbCTaR&t(8paO%?F267xpi*scx3QiERUh_k&ObL5cy+Pa_pMm^jX`GCUy& z3JM}1!aw&6)s~Jr=bKhkpU8yvxOW5sxL z|JQ`%?jdoEZkT;^mq+b4ax!2^QC^*Lj4YG=4banXxRz}o(xbG`g+_-gO5tDRcr-}C z>}n4~7;V041k1z%{b4n7Lbebap-+qqB_8ztqdEyBr=F`98iln4;88uG1hx|Q=#GV) zIXFuwGGcP~)saAju6^6GkbNWvS~2DkO=$LlxR=T>S0}m+NeC-o@})V)EMySS@JrO& z#d4VrtB(j;N68`hss~^utPm@gFtFnw#HayJ7!2!cO|}EDofk~1pwxUYM3>0;M;&1~ zAA)XO)XV)RAQ#2LZhr3c>z^#!6W5a3pMb!i%(=E9sw2G!urx17jUy(wAtt}1y!i7g zE2zdOUO!8Pt`HplK*rQV)cYGQbOcC|JGC0yj={Aw;qr$+RR+gy2A(7w`fLeo>4mSXW?b5*B%%(SufC2!$_BW`6S7cf`x07~8rP##Ty z#t_+Fx^cB{0f08xEv+lpEcd12{tJZH>H={I#J5^Lr@sA<8N)q6AX&Zv&ui}b2O{Kj z*y7_-zT4=pqVi}`?CXEkr;M z;lVm?*d6)t&rUK8bNYi_s{bdzxs{B ze0z|=bU&ZMib6{Bx`J^o)U?O4yQ-MDV9_rm0a#nxX4kd^$(m@kb;I(#-5{1Oy1kwshFX9iP19UR7 ztL^RP*+zU}=QPf8fCQs!O~8?1^ze=a1)-svzZpnK+CbFS143euo+v{A#|EZ19NK6p zq;b|kXYXj@3BPG|iIvDmE}f=&ud8eDhW-l#>%OsYJmQZm18{7H-BL!s2HhD)fe@{d z5|PJXV91YB4HUYN&LImq)C*!*Vi*zO@Cr6EqYZHnkaw`dl$1!A+8HY>NenYYjsp(-BGX-0u0r4Gnv9w3v2>aB!r zd#@uVwnAhaj0dGZG{QvixHOGd^5GzXjt_ov3;Ebp%9bNVxmR8>9^ZsnS7~su#$;qb z`eVOk!e>}!+FJ&eK)Dxb8V=CRH&z#DCWd!zzkLj<8Z75LQzUSIh=yL| zW`OaSi_Ss<;Vb`-Xm4Z)QV7YuBH^a!)ro7etB@O}DH{|DLD%4L5OdW55RB6XkoXyx zdjlg(Z2Qbt%YHt>Z^Frhv^~z+24gX7xX~@-3#cRh7GzBAxQC|~h4Lewfr&%Vrk@L$ zEd{Bf0^&>|J_`rOwk1sRii~_1U5yJ#uc>*Oc9!PXYWyZk_meR+Da+1v05Z@JH( zG1WqlBTAMv1E7{FU00qlnE~GSgX1@R8EeO{d^h+!fK;GbeXKi_ znW@bG?J?!|0Ew3{OPL@O_5H~tcQI6-JZ)0>qx)*VY-9KaGQL3(h{)e?bx-)%SwK`| z&NwK);*$!t?<)9OGe7_l!ye%a!*aA9R_&Soo-`U_ZeuNO{AxnyGtZ$LHQ^;E_F3=G z${^0sV?nu9FUMh~dl+C!lV|=;5C{rKg@WY~l)opB=E2^?srJQQd3e$&3f(KA^oo>}lN_<+b^WKOvKWRXsW5hkd&ivQfTv)_{*TawFN4 z5{x!$*c)d!7HDzl3UqHAcEJX|ogd3$$M;&^bb^j^kQ#Dls(8W#EYuLMoeuwrEq@DA zGWZ+!w%4$l7B@b}z~I6#Z3jV<>@|6pbb3P%g=xYB=kS2ew}mA*<4%9EcG(*!w3F%Y z?M2CN^i1|6pYZyw zm-=xG22m&hz$(!u^b8#88u3K)F6}h{hqBh(qE2tVN0jUS=LkjUk8xR|YeujuPz(g&$3^q#pGZ?P%yoh+CUq9_sy>5wkoosa!`56( z^=bc|c>7y$mfqo4*}pno}ei*cjT|W#7d53Q_mgJO4?YbgN-R_As_bK}%8+ zzH5^;Po_8Szt&S|aWe4>dBrCPzmL|o={0V?%tYpdH)I&SyZ!LPF7UhJC7Q_}(1%un zJSYuQduG>A#fzFAz?pxZhBw9|9> zB;|m97Fg`gmwJQx)q4s!U7hR(e(NJgoecjpV$rz~Tw~uinDWCQ!xSu3a83`0lwaA% zZ^s3@N&XS|2i%h_^K%e2r6VGTb=LhUP!&38R*80#cfQ3p0i-Ym!2v($aFO6qdH@XJ zNm9jR5r-?wT)o+80&zK4Ha~s?T;b`9qTnV2$YJJl&SH5bhNZC6+ILoFs7r2q$qvzh zq#zcCpu|d4n$@4k0)Ewq?QgWpi}tCCz4NHxUC4Tjs@hrV=}>Ijv;JZud|I8g+RsBD(wVBk8Ffd zbIgTTY3j*FZwbP)=O3y8^&93b(Mr9xEE56jP?y%99}Z*ax5CbcwHe-W5Dn&ub8Jp( zV?)u_g`Ic4m(Q~|HNrTg#J-fho5}pejsel{uxkPSq9)~sSn4`BEQ@g8qY2cgk~y-f z_k$H}tmVK4SVZ+46Xz0h_rUCAG%~Bomkm*|(f~0!QShM5;1*yw4RjBDzoG5H#oxy+ zdoTqiwwTyM7~L57+?l!pfc(Jqf#x_VfPg0f0GrUMm<;bl(i;G- zmmafpJ|NtwnizgqAIZT?o8OsIvg?PCIUk?ehe+38kM4saU|Jv|0vd3c~L+Qr)iT=hikGx0m6mj){{0obee6f zWfxnrlW#Ean+9>Tz1CnZw7_VQhZ(Vh+jg)w_Z$sREFu^iAk@etcUH&==j>umKtGNX z*qgUrK&q((L)vXFoW{olo#Zb5<4Imk4JhcacO%b;=OnKI!Ruvk{1G6P({Pq6hxL!& zMqEG20qU0Iq#8{518kjXYz=AD_o}s^cC66my)U&2u)6_~6+T-fqFt<2aPc6dr@<0K zDqY;mA#kztyRzKOg$I%?)6Mi`p+r!5LnL%fu>0-M_dC4ey?}H!&|8_f1N5C*e+t%? z?N6(G-Xy!K%Lla_Wt^H#<;&5$hAd#UG@<-QfmLRxa&zkKSn6&nsAtXInQO%VwesXv zSUy_!z*qBw!rKFccV-|A4+p3sY>FA_P(q*~ZL9#4>mBowhq@?8t|1_*rfwl)d2vqT z3UF2&NF+G}v+3E?leptDtst~M&aOuP>y`0ZhH+uWJhcRbDXGdX#+9BwAd=f;XoH=m zAl00H2kJqo`Y2w*Ue2>(XMV!4^^4=4;xH%GsR3i-nEJ7)WT6ZJlCMDj&#bstC=qmZ z8<_5~0^iI#V6o+-p7o|&#)+`7MUa_4liE9%tAGRI2cOnDT;O832Fip;kg&z7zq@M! zWdGn2lp;LA&smY&`Ff>(a>imHFmgGXg4AgG;%w-g(t+C}zX;LL7LrZ5&Gl0ZR72hG zPkWKn8ys%sdZ;Oi1xcipx-vkbve7qIss>w`F-u}c-a`Ecwu70LyR)aZtPI9{DUM4(7^KF-xmgYQxokFG;icdj-49yA?c#oW;3$2yFqdy5(z6 z*6*;x%U~F?1@3iB>n)P_LG)M;IY2(?w6vdZ z*KajrV5(5!2TgVfcvJSO*Ma%{4Pn}O;}18WTn*@ws|&Zs3@oIr&+7#=+?)eO{=^Qg z&<>ICj@Wz17J`hFVQyU!C}5qxCSl>=*TC#oCfbf%?YB|cpt^+hG+*7^dkyJrE!;Qj zsr`$LWTp@FnI7E7O_Gs5L+rmmG(oo2EV-3ES|6#Q!Y-p71VBxWouLE7*UtAp0k$^^&?lh_d0E^y zz{%M+lfrVtb>3X(fMIw+*-(wj569gea^9T={y{N{D|ypxy`58@VgfgH#_0ggfboFL z!>9jtE(RD3pv`Q9(fMC$xCU$p-Q248W3&F@Zb6D&Sb4T1=Y9uZbSSQ~o^9gq1Q=}I zN^?ei6CK0Ydj2}#V)s$J5pU`<7_no9EzSO z-|+2x98xjss4Bj+%jStY+2c3brXeJ#U{Q^`zFd~1-{qV)zWFB)zj`I%u$+-V7MzmP z_2ts8K)n9;6{s^-1aX9f(5uVQI~~8JTtqXVNj$G`P4=p^ z#pP*EH%P~YY`U4iWIVnu(f@Zv+^@o2%}ld8ihwqnSY-&ew;qoMjrZthGO0*#?aD9! zbrfdCEed0QgC_U)PKdz0M@n0sP;vYmi+YWztV7RXU%2y)%8*mPI$BRk!~=j+MY34B z1Ki^XmK%W1uJ6yUFq32X!?CV`*!QgcQ8@@vk)c6YxZ+F;!yj?dTkKA5_eyQK7xfX1dtWH(?T4;X@iMHnlK$_Rhl8oSK24Qjr8a{87LBs3rRi~K?i2m^Rh0mKoLeed}S6K1#bY3Q(xm{R=5 zA#U=xtUiH_M4Bi=T>4{y*Yk`Fm)~}N3uSCB=yUbR4`z7b)^miWAII z0gWAAu?E6`lRv{21OTjrifO^7{(D^t1~|a{aJHI7@E+*@d<8%bgG{HCw-uf(j+Lo3ETfxF6-Y= z5~g0f?DS$#RC7TA`*SeS3SP+*@J>`IrJ)#gqON(L0^{ic1eWzyln!X#+)IGep)b%= zRp(&4nQ*c6%_!VUe*7{$|8G^widKPLZ*1#@vi2|$ho2~fVV2coy8RxgM+5Nh%n+GA z?S8fo_#$B(L@C0?%&(O14V5}D-*?kGL|n=3Ls9eiNdv!Nw81{|2a7JrnWAjX2Nm;G zyPMXN9a)sh)>{)!X?+Ci1t{J^!&F&9jd=|$|N5dcyNe2}p7Q%MBSC)|eG2=9rn%}F1m zNTc5Yit0v$92e)W$-rlNSR9>1CxANmM|y9yJ~A)4T_^nmud(^Z3@ z(3qnk&LchC)Bdvvcrzht6J5-=ww|#Ea0LmK5hMXL2y7Q_FZ{A~7C+hxRYuPN7Qg!Z ztXvA_Gx94@Yoz(0D{+Kb0;0e*uepSrKFDdnZY?w=7)#v4M8t=Gy<5?xp@)5W zgyOZ01Kj;Fop7$5bBqz@le^WJ06TSDnbQ7XKXQNe+cy;E+c95j#0t;+_Vm%je>z73 z@B~eeuSF+GcwGhZ^fTuaUKe6Q)}J1!x7n(XFi(KjMXeDb5QJ`i%0zShV4t!lVgtIh zQ4X+}$Y+L|{F5FH|G5*LaewvRn;cScRYoQz+D<;Rw98?p~NhqIu&p~ z0TZ0`>fDM4M_~pS-ij-5xpldn z0h_ZNMs)nHr`hfxIVSl6mOtdKHQ;c3QZk(nt08AN;YoAVqu`+r_E3nTyV|cBK}_L9 zo&{j_UG3{rFf^xI4yot~hx#Dnbzh6}Fo9zSMoDnN8!FAN<%a+5S5#^Y54-j3b1Syo zKU;U@xCnG8LChjHjG85N3pEW$FR62UQXGtrryv3a)D|uz^~@kNa5TpG zCjk||j6(mRM3v4cV3S}vxWH>wTpb4M$?xz})&rEMte`wK`XMZa+;&~;vIZC&`yoeb z6#z40?B&B(#ynF0S$J=r?CX#PJ*OT9wFq))t`7tAz65o>%D}uM*;$+%a*!)DrK^uI z!Sr~e9$_)Wsk#>)@o{=44R~WZ5O{3Q7^RGyzox)|ONi8L)4)CE}8JW0do3#@v7E;5(A)94Yygack9YgWIbANd5tP8d0AECI%azIE#k11 zKisyfuq9td>|-(*LISstEFTVLI;4zjQjw$wZU8=98DY#KBkC~kLvH`#$O_YNH8zm( z(eO(dDwDTQ`afqzq0|Wy03!im!vv*IdIaVzDp%Mf0Qv1{}r%!T#(rk`95~a zqfC+6f01ql*jJwKWd3|q7FhK_&qD&5EP{W zsrw&LdP5qg9#m`>3X^cUVAKT>2YAn6?hwfIxv_FFN3c{DzC-y`)<20j(;MvZ=HzG~ zq7}b~FtFbG^Z@IJ19Dp3-=dn_*%oGU)B}By|GUeaf@MxBsL$Nl(*(fK?UF*gPY}^~ z%cDZTlFuVt`Hn@+zb;ey1OOBEcpo)PS`+M zM4dEpKV$NhiS)|!@&2S~EFR3$b|a&M$yvcZY5e?UzJH34rPm>_>CV3lm~W#aDi@u0 zjE?xcpdDokT0kJFayF|48DWE#!sERDnhD|8mG40U-8-|RbzfsY2{Ji~HN=49Z!zTK z`j?v|&);X8z#O-Mr~{=(TXO1D0DPAhkvQ!SFwhMea3UI$Fs#ZfcJ;Q4l6j7VazWO| z1YsN=&@pR%tj`ipE3TNJ?I@w6 zv@7WnXkpWCk-fL0X6$q$B(aiV@g&w9#y3f$aS%=lHDjTQxeADRl7QYWy%e^Y)h)R`B@>N_ zShf+Us#@IY+oT1il?JjIL*y|~dI}m!#h>4vP17-CM8jzWzME8B;MWEPKCu2l^8c-} zltz2Ob@gg4Oo852Cc;?XFu?w1ehCku@_;gpgdwx;2O-4*u0P;~SAob%y7mN?6=RHt zIk0*UZkqqZNu~w*oo3YO{l79nTG^rRAoIR26ecDE+3-F0IpP}D?<4FmE2N=SE!vxh z%5(xq4O}rMVcP)KCwULgWc~0<_^<~B)T~RK0K2Kk)LKUF9b8?YZ)J_^VHy*b;FEob z40GcYQReV5{u7k&G(M|Ee;I@Ibabv^ISUfYz?AYmIw@v|DfI~qD%>?7Gh>0sr|7Hu zsek+!JZY&eYKnY83$Bju<}l6Q9$e&x*mOcRVN1X3fximM<$E*LpC~>QUqpV8C3fk!ff^7va4B`Oc386$}g{iWb)NZvp5L++z7An{r9tE z4Iwk`AkBidcKuujqiw*egARy_*Fg97mtlo#@#30~{82+hz#Rmj3x_0q@Ik|Mk1FNv z;pIPq#dvbqP>RtH<%}%%Lhz9sZn}$l*WcXKm+#>t7_6U|R!8O+X zmytw569qsZw@HfH6J$uG}Z`Vf@>a9(oz~Z=@6SP8j zz=8g1Nnw&TYk3Rdx$~c+$87t|Cb~mq=v#kGccuA+`Yx^cfBv8JM;VKeM$q4a(c_x) zznn*mzcm?LJ{VQ5Qy50YV5Qm%}A_h=VMIe-I&yTI98GR@J-r%ACe?LDD7X zoKeUY`1#h-oo_)DVVPacN#!O>uL|_G|8T|%S*u-tGdyTdkRa-2R23(o<2u)K^6uo& z`}y-`MFzS`^$%|np4`80(&%a2nbYp8V)pyG64)*TrvN9*0`_cI$OgeCgs4ls)^cfR z{4G8YtI};kf+@*lztZa>>bq3bU+OE9J5+jxHpQUiZjQKddI%MV@j%+ix59$V9yvZI zopLukE1g&H*`zq*KRk`D{jQa%kWMs58i-zu$TaN^q%@mO_Ir5K^T(!YMsO4{S5D8m z{%aTarBB(6Cl&XeGd{^38?AMEGFD?)%~D|q(NeH0f=TlCMz^EE0~tLySn#Sht4Y%(rA$0ruhKpeGebMNN+39r_U zS2A>yeK`T5oldIEN0-A#Yfm?Y2|es_FP6@LMg`ZJd6%}GnjiHxk3E~JyPubdo95aW zA5&l(ckx(F`*fc0y*VvWdo%%yIjX@)S*(Ka0eES74bpH9Cqm}Bi(ZztoQ8JG(fa=E%; zJ86(*{3?z`h1^&(U6Gd~f;}S7qWOh#bY2{24kDMczBmF#bWOo^tBFC>Z8vqoD0*&i zwM(sMX?$8^EP{;6CPG5$qL?X3;Bm-}`|M3I5TAXu^nKh#7LPWT<9tTqkEyvz z0IAkp8m;3U7__ma9jbDApRl=>-H~lDn4lkD@xigK+;Ff!jj=CJw_M|DrKYj`v%TwA zuV*o<_PRuw+qu5rzepQ5Y&lFPxZdlweu_gor>barHMiq#r+l2-1RHH|QJv35BRz*v zR#b=GN>tHAhs+c0Y_qA3Dm}9kJjNWF9^0iwz=0>djT#PbNef<;K}69?_=FZwwM}Xy%r^vs#xw%AuR_1R~L1+}%WN z(SQms+2rpt8&6lRf0~NsApa(hvu9>~G3qL5T>Q9phCK7Hs*SZ-EH_emiB9pi>KQ&f zn+AbCA|DMd`HUqj=JlsM6tw*DaeLs@ZY#TH(G}GVhgMB3d12ZhzuF%8*)iL6?eQed zR7b@yK|^dSSXba{$5zKAC93ru}Od%73T(g5u`m{ zrP^^w5Z%vgzcy!Rk^g|Ed9F462Dl~#|A+NAYWi90Ri%rRhdw?^Sqsw`Gr*~dD_dba zD^Rtk0Y=gyH?SmD)S{}xBfY@;qE+_t{9;M$;`WWa-Oxr8!?N4O&Uf3dd^$Y-|xr%R9gWp(1L^OOAWPl5f~brUzf)?6!rzvYj!tXu@dtmn7=1=S4ZQ0Iw4udtEKReJ zUkwRF^ZmT`^SeG5K7L+yw%mH?J56 zk=v5qWE z8o$_MGctSyuTI^_JL~Dwwk4xF*uXdzTUp#{eT&A(0soU~i>EYSYbAc-kj-w~hn;T9 zsN-E_IBWI&RNuyyUc3#zsD(edc*FWvjIi4=tLvF%9+G$IwmW%e^=q?hf2FCd)D?L2 zxl%gk>b!ch3{Z@b=gU&(duwGymIiz^w#jPAR!xDGTOk!Io>~GK{t}nsP0E_?c9GFo zp1&mb#55xzL@(M;nB8U{1BZy)@3{MVM3~gG7=U6ALSh1Oss;2ah<#EE6G0Dk^yVu< zh*r=*uiuK(eHXJh<7;&j{^up43GTKrhBD>mHTjs4$?TyyyOQT(KR9b^+xOy7x2H3n zsYvSve9CN2coD4}9eJ0!?&{~>JjF7>tOlQ#wsj%_Pmg`~lX8pVUQOWeTu;7ZZfE;M z45z)*VN=kmVI)hyqQM9!(pa6A%WZx@pwNijM^vkKZNfTNFP>hnQ1KJ)qMU_@uG4ThjLM zX|xK(w87fF?+k`$m|mBsY0~UjfV)=Z$Ch zt*sNPqwQpmYFGDW!$paG!yO_rm8zdJ#%(dy;1rVCQkELOd_kCy%%)95sp#9ZQ4y7^ z%VpdUXB&m?q?z)s*ZW@l_C~=mv!Rcl$4U(*kHhP7M)BA(#8ql{6;F5F7th39{24pl z8A#GVNQdjKhpIw=iqpp-GCE@kllqVZ9)5s}g9;_UB5(WAdzOAzxePXt2g_W1tMgAP zblDj8!N&VD{vs-`Q}}Z8t$9~rfhTJ-m(G>pI+jP};W@kiVf2elv8iu=HfG15dk13cZ`d-nd*>;yjOt_t#UfcGCxjt+)*=9MB z+_hT#f7%_u_iGloZ0(tTDOE}xA~SgB>$KtYomXoH>_&rcZ?zoY`y9RyM49F9rbQYX@jjdLvQ=jhfHWB zZWYi=IPiDG&eIyae^c}=ajx|!arXAQ!=Be_oJC{8+$C?7u<@e1J9(aZ%K=BmP#7o& z8|#fUni2Q@uIXl!K+0W(tzd z;iMi-JZ76_QYC(QDKuG}l~!=3(=I4@Z$^0o;;qRxxBMc@>pDqI(U%l^^3}3?KHi8e z9OsMq9Lcdu96Y6B7C}>I-YZ;a_I<80RUog6FOH`=Pxl<9Jc(zvb5cT&Z1vV!sP~cb{v115aIVx)x_(wh0s!kCHb0Ci{yEx zJHqPjblglbi2ibHkW8YhibZK@=&0Ohes939Nwy~Lw5ETOqHj|#$gKDGd;^sW3dvY+?v>hp7U>fPJg$?;3@K_r)*@Q^-kx@ zp6P5miS80djW7$-o=BdRiUV~Q;F-@$^&rKI_s=>E+{hO!02uln$~crvcnT^8ALyfn ziKaCBAUj!o*3_nq7#juLx@ZoL>h1GdkJfw?PH^j=xfow^;bS92>T;I2Z-pfj((euw zEl2+t%hw&bZ_b$1_@tOl_1*iM7b7A$PUG{v-+nhRst2h_lu}hVwOq7S2qRxEmERl< zO?P2o?AIKBRnnHRy4V3K<7%s?vD!HTZ!bCaV@K8}K=ab3z`V&a z*M{W!4U22ddsZK6-wT0Cia)S#x0k}?RdbeB@|tXNd$mP#Jc!y5I{-(|8+(LUJTQ;< zDh4Or&%Vh4+jSy8rUpxhkBuma^^YdmE(9avzt%I*vzOdPhouzcEJ&xhjY(rVZF+B3 zZJURHPF>g_VAHG-pN8N3KB0=*relW6_D?QK65p2-P9tT;#M(T2;d2d@WeqDGu|xIK zc58wj-_??ilXC00XBCMuZjRu#qULfdw|*DW48>GMd%TPR-X=?{I6U^NgvU4T*p1KF zJ*6J;%QRv)ANegmp45sB|EkI`H)u&-+^27=B4D^hc44Pwx5Kt)5O=Ll$j%0=d_GBg zrYg^-P03ENmajokhe)V>$oQ`;XQ)Y^MX3M&(?cwP!HX=cIP`u`r-WUJduhd% z*Q@Wf&2PKv3tm{Kzxd-ZeU#k!QI#*bbp1_%*DD@VLs*T>2kVUf1%M2r@M15$*x%aA z^*A)dNi6sJORG9p9A8`lXNVRzE&uHW*g) zN5+bq$FKzL*_Y&V(0}`OCS+kxe3r!BTKkv+$pBv3x8k?;eYW~>((hJfwqAW~56RJ2 z900#kH~BGwq`cTqrog=J-2AaEvPjd2cbao4-5za5UiZd>p@OpWDSP^jZwbI2-gN=l5tJ$Xd|k5SUw& z_hAVPp^rGta2kIEY9ofZS;HY%iWRw=Z&2#4;T+{OUKL>WE6O(Y*p63)ZQVr1-G>FK z^-=0E{DwldJ2Hie2Ns_EzH~785^xayEqJAe72Fi$r9N9i0yxaWasUD?_#(LDUhu>j zY~JH3w88{7L&f@>LY8cd-uz#2alzd4&^lMSZ#-F^?$r?D+0lp-!Knr;_Pl>jh@D`> zhOz4NQit31d#lFTY-uET+*3W_Hjd7e#RWav83(Q@ONQbH! zNvHYfq8kWxM!KecP%$XK-1fL1*>#}`0!IXn5Gc`$_+A_J`;VMY0F`r+cx}Gv;@PEk zxAxIMtBBy%yP5vH7k6hP7tIq$?^d3DnA~Ky*_!GgVe#zj%awWq?;@)ik`U{m>8|X} za|*Is5_e7P+U;`u`s(EP)7*r!jIt6o$_qYih!-uC-ojDw^0Z-1yv!(kkKQ7zEN{Db zmA!SmYI%!~)#=f4hGLV=-cIE?<1AFV1cO9kiO8(Ay3 z*Sgl0B7d>*?7<}kl4)N;2IQh4Y8UgT>rYU=C+`9)=bc`@jKFp7sc4wH0hFKkJ9<2f zSv`Hy{iP+vhD%Rq!Adk<+t%!ADwZZG+Z4&L*bgq{0v2_=a;1jg5m@GPjkKK}GdC4! zz-{rbWT-snPOBejs*k*oINJEa@b=eDJN#VUiwvcqy*D1;Zmv`2qY}oNJ9Xi--&^f~ z%$`Ei~HoU+uLcH9wlGpB&(;$W*jNc3P5??|K$jC4Ok+sgP6Q=P!GI0E}j$ZPHU+Xk4JR z^2JZlfDSP>($s1G`5V5&m6G+>Il_-_T%uSPJ1iGrT3T0^d41qMPGi*}zZ)TMK|6uo z=d(umS-31HJA#Q|i@?t#bcyK*vxABzv>fK0)KXU(j!p9qc>K~uC!qQao{J2Zdeu`r z@BFfU(So`^a>R%+{k>6F+*mMNmaw&&SZ*defx`}G_`^p_elc||p}W$4|hjXaaMMOSD=>?+Vf#;HOp zab0r90wb4 zdS1{Is1u!s!BUKLiSS_Y#G|#bs%6zbdb!-ZoO1W)d6Po=`uQx6WHM6qY(TYK!yw7F>%BYMM@@Q4G6_hxiQ&tFeV1}1(Nud^>v(J%QcQr z6eEEpIf&ucKPu9kMY4KnXM!)#eAw}K4cjX=Z%!QfXDdR)s?UL{h32ga!IIqG4T#>%P=giu&7mrm$@XEuDvP8q>BR<~J~cE2>AmD7BC zQ;tI~JIJ8azO~HIYtO@?5KK(ReO~-R))7;15QPP0qper0YlEuh z6)S1AnGL>v;j0S2V)mx)%}RWld7+Tw>?WyIUrs1M_G(66g-=Pg>{Gc7sy=mW-ClX5 zS#Vb(0znn)x~%Um9Y_)2_C2Rq_zcxSF{Oyi@F3XZ$8I1A4yIj$%O^~{P&U@6&h9>h z(d&5YrvNGt&ZU0>&f>imXMps(p+@HZsD8a;SDuDyRAUlvatO`6`%M}7PFk-tJvJOR zGnX7EPmV@kq%$2w87=j-ePEMFdd_s!nm zDh(VZ5pcP2w?$lWH?!R$Zd))*Q;}p`%I8sV6hQAtQlD;->AEyqA-D8fSgI!UX>^?9 zcl9J7ZI8!0ul9@9hF=Jns2n>B0{eq?ISwb6+5a04h-Xj^`$lZ|9u{ef2tBvb^gW9y z;1Qb%VcW)UzG6k}%|+~vpLEzg1*Va6481XF5>?*6-+Xy?QsL3sECmZS-%_wq6gY0; zaN`nF!U!q1T1Vt=QE?d{0Np)v2`Me6WN#^#)cy(=Ed;>*!Sy0y_L6Jt(jNV#Gnu;* zT(SIV!sCY_`jG>PFZ~*FqH-xxP9Trai4=Phv~_P%2#6fM2hQpSY5h$qePDO&+xtREa#;Lo-hqZM6t!0IqZx6(SBSH-cl9>f=Z= zavk}iA_Xj(YsZcK*pFF+fEz@VIDjUNepb(@L2`^@PcjP)Vn6bQ2S;o%58QnN{Dmze z52m#O=3t!VMKkQ1{evT6h%Ib45OOV$vvNCCFk8#8Dd7^kVQ&>L;C8%Oni*lK%~X-6 z;XwTUQ2fa=@A`$Iz3h6=@y4(GeRr>1fr{}{T(CmJND0f_wRC_l_fH?Z$yq*h;(xv= z2%eYPTKMYx$5&^wU)Ebsy9tqS8k%df%U?bvVgQT|{ma#Je?<+t z*w2rN>r?0dKeiuMcZ=veKW3SmiN1s~s<&mRaZoCV;(TQ2RSZ5w;YGam6cSOi#+`J< zmzic?Lj}^o25O!+KD}YuLEg$*Txd~yj%%zbJlg2oJ^YLnviUw4!JM1bN==E?mjAJ| z6x2c8>O2%ViA!@QQhfijt@|6CUwwobj;qvhMQ~-=>kd(od|LcpG%{75_ZvK=6IKiA z8nWzF?Bq${kw~~aO)}Yr8(AABnZpfuiOOjK1O7BshA=xQA25=;(Y$rT(X`RV?A_m2 zJ<9^I#}xxAc_tPtM5p&Zw?Z1diycf3rV9$KH~UKDh^WsOzKmd3J$^gz_?J+2!sB0v z7jLd|$9@^Hf8eev07H&mUplBMfm6ca-{N=w@pYGeWFKWCj$oL`|C~~|m^*l<&K#a9 z6siljwAEe(neWJR3{j>W#)g+%43bQbD^r(Q6`@{U*m!K-Ren` z2m62Io(Pdwo)?SrVf$8ZV-&^z`^VHVz|Umsmbbd%RJiUu0>jhl`s=pz997Ca%q2jB zna8oV|9fzt(f~{TFl7UJn9lztqc69Xg)igzq=?LBgklC4T#Y~K@!9|VYW)u(nQtm# zqQudqWxbYpdCe`Ynt^*1gNIl^p4pb={80wDYy?EtKsQ|>4>zMroJj27H^7SFp8DI* zXqdfb2o8LDvU z>v%akQ0-^zIe{0B?^8w@74aW?ov%EMu=q)!n8*YxGm&o@7cbE z%m1;=X7kjIYHT9;k>SEsWl9`aG(ff7F|G&{r;$ zNY?8PNMm*=TK@O$fb}3ge+6@H!f*xA-G3@6G}8=RtXi`I1-)MdP;qO?ZIaN~Vn=^h zPYhpLiHp;JKi_W~QoVD_A7O86$<|&X2t5QXUl5}`Kr$v z`wA%V#THo%`D%TyafnEBhDfgZhrZ@}Gp{V&>JQliMRG>DJ8uff7}9&<4S%P{JyW@M z)2;($ouxB%DInri`rTJu>EEn#(p{nlo5W~qmhJpn&K7w8?!C5UMpSB2czag9)i;=S zFDvr3=J#N&t(zJ0GL)t7<4%cqX4CYsw^v1J{+O!ICu5IMrlmhE=$SCN28di_Z)4xp z#jC}pf9CrdR~q|vy(fNU51EShPOR7eusS=iMRrk?^=)T_k&JxYoq>tMtlrlT-%W#E z2JZIqRFS0}cAuxA)_Y%>0CBFya`(vstNCA9?JFI)D^d^vB;^_Oi3i+B^tu{L`)m|J z`KCvDmKh}F-w4{!B&BAkygS>h_`Q=yg`egy_+e^;JNqK!Z|%(A8^3QEpum2pQJ;l4 zDkqHdw^29^<@cIpLdF^-YXmmetntwhi}n*LHuXzM7q#S_3@WeU(X^Gvn=3We{WhB_ z)fijPq_#F4o(N_6FIC!4bDe&YB-K~S?j6S++p6Sh-6W1M9ZA5qjd%^Ogd~b^*p{z6 z&yMA#p5gbo$UEqAtlNx8zmNYM>olgEsKZ&W6Y=fp-f6q|s;VDvt3ip>W6;$I{?csQ z!uaa*D|l&UuQuaY8CAAbs$$Ep)m2xV?~E{RkSQNcZ4uUj8+de?|MG28vFe`fi&~@IkF~;? ze8nk)I!!F&1UVWVGM25Fnf z_N}Bj>~MSmDH;jcH`?d8aE2z2he?^+OHnrXzSS0JWf~0`@WS~&!u~s+>i_>A$L&yN zN+hFN7k3S~wVSyA?ijBE}HJyTW)86lEY_I9*nkL-CW84e!Jhs^_n&2yVZyF718yQ%f$ zn8YdQRL0pDI{!Yls-HU1aLKF-$G)yCK0>}v@U60>4%FAIRBtL(+&Rpx|3V~9wIHv1 z-$4D^-3s$k)9QOE6%gU5Nq4l68@ZQVm*&+}n{(X~pO#|QdCJ>&*fqp7E+TdI$Au=- z(NeMGyT5+gef`E}{}@R&A&04RHXMjk9v9{gc#l#hDE}XB2dXphjmIPQnX!HEjaE1B z)jTJZsDS`+^5AC*Q;o;is~HZ%L79F@+Mf4?&GGq{34z26Ka} z6of-!W6bJ)bFFV3XV0laEcRVSO8x$i_$%3jiih2uuRL;aFXk(M7F)sm=Tni*ey~S>#klm@2N;1_22J9aX(v2$q4@R&RW6MSNf;a?=$8V zW{pvIu`Jieig#Zdu@y|dnyFbo)7@Jz6--#?NkwKr>rs$U%;=sp_&(F6TIG4Go@9>6 zjZ~FLc4ig)ceoslzQHEPBe~TTDpuWnth85>0*_umpRuffoHXmwqP2*Pz~(|BLU%*S{M z;A*AE!55-tsbwGC&{FA}5^=b3>B%NveV)m8n_C^ZuHUnzvbfic^MyL6+%N27v4UH| zZ9C13{v(*AOQ0!{NKW$2+k*{`{nyf$awdnqbDIR*w80#ZvD6BqvkDW?BoE774*CV< z1P;S*8EI=HHJw65m)~m*({kxu7%9;zKQ$@{-p*Mh7Sn0d_tZ!}F0}SX?dLZYQ)X9N za4Lm}3tFZ+It=o|c?9wMSDdPZJIg(%9NzQ_&hy}wV54IO6maidaDEbqx8rBoM&iu> zsTX0!9QK|wSAW!arG1KG1B$=EENjsHZsC~u-Igu0IU(XK*BIv}`2L1zyM?ODWatmO z<(cd9KMyEaM7`wHsB1lBsmzSz0r?b57MPCHQ^rBMFs(PIJnCwHfs3L2+1E#7WBbz< zC0j7R)?QZ1rHbP#hdb)0-Cn3#H3m3_Ik!ZwsM+xQ;R9x^=eqQyRJ^ourThY;4C>jT zW`y1Iceobg>Vrgz%5fpHF@IARdt(9bzGJ0}(Fuh_e)A&vIt~+eNcpnV-%mIuRq4cv zWf{+vnY<(|*?+!Vqq3l;6FpxR?|ETxU*`Jqt*%RgtjwG#{mL`%X3d@t9iaCSTs zSBl}U9@08GE|RwI@rK;S$VBQ!|I&2WsbRa{$D5vsLAc5`W{ctD>S3tsH@%h8C=91t9I?E-@lK{9;<}Ae9IJTGhJzL$w(7=QLfpG=cDE}DBqequ0C+#aJpZWSZOpSmutSiOxmd> z!4c}98;(Hi*WwWGs&G4_XKF5yJFl^l>CDBRWW_Lr6qO~(JVvt90_L4s>`GBw7W~V; zw{Q#L@+6(d72D9CKS+7LYIdL>FKb*1j-zCA-=0LNb)rn+fR2~d{G5@ICS>Ds&KrUs zZmm$q<*t&N8ql*>}TT?Kd_B`uzgR({%XrM+7?UJe3KnYol2>p z_`+V(lv^3vK3f_7tx4>};1xP<#fn(=k`K8TdS=>Ja$LGawV<;2Enf1$%VZJrk4)-n znM}>89*!NLsoYMSAz3>f%NfD$9QO(b_oS%eteAHyBavb;o*|zane*c;TUYsP`rhEW z(g)9N3~HV^AlT`q+miT~Cz)1!UvZsPq!$1z^@N`23z+GY3js0%9&E{czy zMUAhQIPx{w&iKEVT`l@n9mTU!E>6vHZwc?+R@#stR^IwFMfIhrFP;yQPHwdzPMkq^ z9fz7|p;m{!-AKWf8O506_F#LU-o&G}@>=p3t$c`r=9t#73X62n|5jIF3x&)SG^D)A zVKx5GD6y&ybzsChjuvv-G^egf0tU%w{oP-c@Es(KqGrbL-<#vhKZvxIk|Z3lF_8>6!=jpHU z1d9?uQT9f9Cl&xEZkh{MlPIp-(r9isV!ErYeJqlD<9*oqiLy&#md{h`HzjQDJv{ct zP2yKEY==6_>9#9a{K**YH}VhLCD z&iIa#3U}g>%$>|$~`B|_Di>-S2976ofy5FdVP-v zy$0REf2%sY1{wSdCM3r7-oG*U&$J=PGDvtt;{O;vI`;(Y^n{j;HdbtRSB+8<^8!a_ z&+D)oXN82rp8Cu0c35qVa?iZ>OtlD!Em<<8ecaQ8^yk-qqGsC;2tFLW7n}nQ;NmWl zs_w$8|G!=UU^mbwIr|+6nxT2|^7h29w)b=I3;qE&#>SwxUc0@_-1{>I?p`&?5LSMN zs>D}W62UZV#y&5#tB%z78^sO=)c`T9-Zfla(XBCVIMA^5LaG}#7X)?Rl1X?)7T|PZVd6Aym(~-6<+1qjN?SBOj!G5%$ zt{^?kfVz3^54pt7>-T=%3+d&tQF*?twF!7T@OwLBf!gn_usS^ce~?op4RE1V`Oms+ z?H4u{4tALq2C^}eO!votNXp@1kNQ8mf(&xYJV4h!I(J{N`CrEG9W{pj|J?c>r0AeO z{@nM!HU8ZRNxJQI_%p0Gm8hea%8WCXcH4M+tTpZ|natoQOL7kZ)1Ju7M3rg34bjjmYWV%)nPlPzQ3>|8^!Wu>Vg< z!S1H+ZvXT>*w2BD`=i)ABv$7C1rfkbe0$D+u*3c=hdWH+pY_|B!T{3Ts1tu+{Vzq- zr%Bi@2-!1pWC};1K4gSab-N>dcd*mOxGR55&yK~2J3Q?U*dZs9#dc)_(2V3lSsy|# zt3Xdr>McaL+wlP0Iv7%Qr6t;K9n}ci(6+{`T|}@2fjw{ScE$k+XTL*^{emFtY@TyF z4@4it1Cp9BfMj(}Jk^7IQ}lSSxQA;^oLK4QoJDUNJ*a(~h0_ap4^8ylC z)3}HYoemyNv?e@qjTVNZb8q7Ag?azjw*md$zd7zbYptpg60l35ATA%+0KAUMkaSj`Ra zLHx@l%Rq#UAPKbs@+#dq14+rB9hor*Ufv@)#a5W>+IIkwkm~6JGt3)B!#Vtu;=EI$#3J634 zu9Pw0`m4P$kV?Dp_IB_!z4x%6UKcnG$?{^l{NZXXYj zbeRJ=-e}Gju53}#Ljx5aIu@N-XR|9-UYBjGj0dr0YD=8W?Btu)1t7C!K;~$;F&F** zE9H7#ehQF=T`_5VZf>$XwhYKod2*8fL8cLXejlkb967UO`Zzwz$d~24Ibv;x2I)I+AK~c;F3T_}=X79@Io>vGz9mSSE?+geq!=*3s zCxz^XpXESv^I@^hWT^=trFpj2ETD^YTU=*mB zR{`B){CbxV_O|o9(@G|S0zj@qtH*W089*|EN6(mY>YIv>=k$oV&JpJh1D@e$pf_l+ z%LAwg9^=ZDpPcqtieCx<8w*IG4Q9HXi*fpM%TZiaso6Ru(cTr89`G5&wx{R*H!ppH zrQG}FqF#}0RUe?_NNEA+9=i3*O7u%;-wA6xaNz-?^_;H0$o#e5W*!Z(Xea2;&;lAr z7qYg_iw$3rnLJyJ2_1zjV?8qDXY(sK2;=jgr|Zu;q)CtSPXU)fCwqOMl}GuPYlV08 z5c8xgzN;{>Z;8hfB=pDESL{b%qNntU6jpdsJx{95IvDe&XGCzYOv~Vsb|ElsnT#B} z#EV|k%~AJWDn>>CcvJwF4h;R)Y^(xcEuK4o@HMQn=ERL!eFY}0u@`~IL^J>^hTXLs z08y@BPR^p_v(htgd$w zG8ZDtfNlSN%UiX8-nLZ{3WnSI4dqRRnMCfLVb;eNTZwJNrF+3pHdD))$VFej0z@&& zX@D#AD9#e0WQ#Jk=6WNAexJ2es)eO&TGSE86fsvnl{BH zO6g}Je5tKz>KtMR&I5_1O62-Lv3;t`W5D2C3=FC0&`JYtowDHvOERDTc(wtrQ1fn{ zw?>+#OD<|*k|or~n?6Jfm^Cw#Y#h2lW&LOd^u`5OGyll@>xZsV>>g++Q$oPXKS96L z&X(yQWKJdwhe#d4l{}8<>?%XC4z?To2D8;nUI9ec`7nvzbmc0(Y}!qLM42F~+^T~dB1jI0cL1zujMwjEKPuh1uE|p0Kx|BO^MToW*VcT z^fI;i5#AMfKmws6V;(z(U_NK+2k{4Ie18o*>T!M|TDVKVkwDaE4+m+>R1)cD3?iVi z2|)faJf99gktW&MEGvU9Us9Bny%12=id8*LiRN%RhX;NDirJenIo+XS6UEbUNq-RF zs##ZFJaZawsWuw7>;lRyUY7JdLVp9OI`RSXOx{5Qdc2PUk~4rK4>-IA)SJ+Smc?LzEbL$yw|i4^ ze;&GhW$}w$2LTC7*@aAd)SJkiZ*=X`QJVmwB!ECVO;7W)CqMlrxg4kzZ?*6vRo~0P zU#7!U#HnIsGjr45Yv0rGWpT}o=!~j~2Hu8~$+-s{UG(&*b?eNg(*Uf^Rk0|HizK6oT`%Y5%BYJ>Uk*_`YB1NzA^!LZ2vQ8Y}M(Hr53sSE;&UdH5)= zeX(4~ah^MUg0m|#V2d8jS5d2fF4h82Z{TxKf+y1>j-ra8>sA3y3s`?ScZ05&A z_I%E_3GYkaZeh;x-1pj3dl?*z!)Md0y3xi?6J58iI6l;{pEgSxJhU>}Ji#ZJxi6Ai z|1cT3mb_O>n>(n1cye;QPsbVMES^J1%PTaiNS;tJ>)}W@*d_tY0M>hD=9aL zpZR6oH!dKAI8%9a>F}@gf`fuVhTt-0pbmX#f0=<_DC+q08n4^M$SJ@Y&L2H61S|rC zT(=`yI}VKd^0;PXGkI%X_#DljZlVaZEcG`9ghiwm0c&+pqtz|baJ>gl48fY6RBEjl zm6~4V<33(KGYju*6Z(VQdEBE-H&7nv84|eS1?ALFY#`kv8AmUR`KM2bW8B z@G^qxvIeO9iA)6T<(}n_7%lxlTun5nT17d>NG(^q70a){6=M^@FqdeG4mrMqMnE|Y z5R+}=05^+pot*it4Q9F};U`#xi@)jtxa%cQZX{L;0&chx7(`KZ|SUf zG<%QV{rHyOM6+yoY@dIMN<7z!YbvLdZn^7qgdA^Hdt)NEiD(QMolPHfmNBzF2k&%0 z!7J=V9N?|yMl9Abr5hP(Ot0F)A0fDnB|K4Cc**oDUsd!x&I0mFqWqwWGn|!-s|Lvt zY*3wFj)a+3mwALiK)7))!42D!Jwa+1Q2qjl)aS#h0ri(350K)*!9RWW9oqN)bA!{X z6(H?fj0^eENw^c}9~qb_!1Kj7eMDr3Z+b(~WQ;qmg!LXK**gTon}$D_o*T-KrV)IW z`D={(wT95T?DZhWKscFcV*67E5506*QOtTG>)TM`kV*6cIq_N&a*1LjRz^>NOP;ta zd!tTAzM8?=BsshZ8XZMB60-GrqBj;_yK#>BYne2~Sw~ENDMJ`+oTNgzUS!jCjQcWH z2mBt=x167st|Pj#LQk{Q7h8SRqe1-xzUan-_*gDtIgkB!VirO0~`wP)|! zuj_|s7=<^-rr#tJdEj;-6)lM>8D1O~l+f&rF*pT@Qd;XncYzy2*7Uq3g+urC{(UL{ z)+nGwkA8z!4={b_T{_qS8+X_iuBay2N68EjFhdIbRv?!(eFFDCo0Y`%mgL+p!;k;5 z(KB2iyx28rHvsPOQ=p!H_TvrzjSMLcGDb_C5~HGgqs}syStT+6rRR~NC3CPumt78G z3_Wp~9HGLHHMOH)67O@*aRs)D9OvJ+5$cTw4{rhb(VU1zvgb|bA=q|B(l@oI2cf1n z4JGo^2YA?)?t?2USAo$k*FA4Tz>-u@V8uHE{B)rp86WN{Yo2oFgYBK7>$WYxFqjN% z5hgCu>j_t22r`4sv&(z)?ZC@S*em!UWth%~s3M4ifT zG?#P+5IQyR=$3)mN=e8v$@`9&Cm=J*O4O_Y2(cXC^2zx2(&JE^?RrslV*SB236@N$ zpFo%@2XNU&Es3%w53R*E0nJ;s@`OUi#{z_-XYp2quV&mhAH{DOu^f$p8u+kjBi=VTtTBC zH0_j{Q99LxvcdJTY7lT5>wwfqcB(~~|75aTZ2l`Lll3R&WXzT*Ia4M}TQ`W(BpP2- z(0Bj+Agbooq8W~ssQ|)Yn*)qzE#04m!=@m3_J4b_oDvazuwF?Z>1<2?Ibs&^Z>Urdj5vpM@sPenmdJ?LynaDdS-j3%(e;rX-kOApixRqB@27IMWG75$#AmKuYc@R3JS&%jV zbho|gX8r(>V~;kn>MdNal)l#6!Dj0ybT-z7R&>;mRH8?8 zzD+%`@|8vN+SQ1$pn^>An9cPmuf)0u?M`4AKS@tK)tMb{Ci$_JqO1}~pq3wKjJHo^ zbYO~as(=@y6`|oJGyv#sqZuE-@cd-+k`FwHn@!Vvh-xl>6yk)5*|$jEUwP7=K|1GpU|=02RSoTZRhQ@ssw6ImtT!Iw+ z#M9@g7LHMgd`4zHd{fO71#HU=CVobk^XB?cT6voONar{R2=Dw`DReGg-r;CT2qKzT~!ZQKS58Y|=~KDsDsiCF=DK7QWB`N%qEfuhk5+N~FI z+FdMFPv?C9Dh?$lZ&8ugt1aUq#VEJxc(6J{`5NWf%+vNr7YQ-qkvPj@gjBr*_gutH zaLN2eodm{a`b$I$0o#9}D{+T|hO>mV;`1ZH!r`YvVQ9NW$FVjr{%87yf;So8Q@h8uu)~)NRo-ZV)e#2vGJUhS4de`z#VUhHP&pbuO^iq&D)v) zwowg!XZsL2JdEKc$(8m<0U~dO;AXBa%qA@&w#Awde|8hHI zTMR{6>@u4IP!MFKJN`ikPCI;cYQL!Sv?N?^Fst~t2%s#{7$V;$(uKCmB%glgP-BqzeRtsD;CBz3~>t#4;FcGGCkPJzyyl92wxEy)a#cBJ!dXM47P z+DZilgd%tJ-*i561 z-AO?rtL4cBBWc>i1Bg}ZECE0F?*AiY1tXW7L->xx-L!WjDF0s-5KC#G0umn62mT}q z(fWi(1omz%cE`4o+b$r5aRRBbdzX6}aBlZlcl<#_x833tg;KutIF3mpx;4h^HZh4=P@3<#BcKzfK3k}WJ9Apl|zZna%N=bk|1&Sa00oTJ&ZPVNY*Z;*s! z$V>6tN^n9A%$4B7gZo6XkjbF z*L(&<1})vq-m`+2&`pF##Q*QD+je(?kQ$bjeU}S=v8h5b2mwP!Cje!|)00Vq! z7~)V*(Ou1Wq(47f^2NmmtN=6*d`bx6NGOo$u98QDY$<~QKCa)^sJBH5yChrXCzJ@P z#@E6`R=hj3&00+Y@vfJ0MAt)mdlPp}7Qoj)&C9>@K-AC!xmE>DuN;${(Rn5XdB6EVh- zjqSV&L1UMVrhdmTn#Ww)TDdKGfPVPV|Jj-rq*@7|0>w`09Eu`}<=_%xlfGHUo)-2g z;-c0;g-H6SW{fvN&*Ao<^D6Uo0A}p#-TvioG`xhiea~P-F*)lLLk!qYn1;OLR>64`Z>V{mIS=7 zKrW=EOz%E zk_p+kX?bsiP7cVdpb3*88K6BXe#Gz?DA*KoH-czJd{N_SH8sPZeqREv{3E+YrEnB?UKiKOBRlwR()}iP(I>Jw_&0AbTP!Q zso}1)jYN)&s)f^FqyyMxm&bT6WK-T)uB@B+`Yw!Xzp#$)@g*zyy`8maW4voy-B>6U z5;FrW{CbFP9cZdx~iy^pQf3HAtM}AS&2;_TU4?EfUK->KU zvX>0*G5IrfU zO~A?ztT~Lvs1Q5rGk6 zv6&$NBocpi|CS=(J7l0ca1s{rXgsOM3<)mhsOYP^7qSls>jdo8c93Vrg9$9#Vqu#u zc>|2pEq`B3u5s0lu=cT1W@rO*j-;S0vnZaoZ=;r)+n~}2#*lf5LHGVngAyXqyAI^U zDayEnTzfjfS^vb6FBwO%e@VN!JF&p0$wo!&j9buPUQYKvM?jGZDjJcRNKzTr zQ7irlTM*4NyL#pZDpA@Q*;B5~{4I929bTqJCSI8S{3fxu&hd$VqzyZ+H~x}FAeNtx zk;A?dBKwXQI9ud?wb-qe+d$whHfkmIL~S{aI-68n=h)tmz_!U)IAmaSl{!G7x!a=a zEAx_-)~@AQL@qNyocTRUXf7$!@wYHm)-D~qe+L3KUxe_==Eg$?ydHudxC0N1A|e-O5_GJqH31j4g+sFL-vfsL5f_PcSGfW0 zcv+!QtLs~9m1wS#yYFkKv1 zHlHhs{IDh1FRm{>+`5u>0C$Qu!5{m{NhHoee*I_O1JIPqjbbdm^rm5F(!TfHR$?K$ z=-ZUZnL_K+#4;8P=tkfZp2g$a;Ua*qqvH1$@s3)x2s3#5H0ei%>VQPjBkVd`L>0Yo zW)}3HFqX`seB;wN#b0YNo{(!SJH3YqDFSC_|Dc_HlxkY0xtl)f{qJ*2&jqbny5Xa@ zZz1kJuxt6sqQenWmnN@QKuOHt&=|rMclHxaoD`)yc@VYnwmRY929Y-JRFEx2p*VaS z4`)IVKSTH>(kfHM`(j(xfsyu&vM)iL_3TNy08WB6{!y!Lt*VhH>f|-v>V+9rJ4YyT z!YsYT*{<(~66F>uhk{GPwjV%bZtaMSx7_}vd(cPle)tjrBklBJLM~fk)kr62@<9+! z;y=>^84b9HD~vp|OP5&~26h%kW8MS&Gh{{A-DOF2iMkWEVu>aIuYIpMZgD=bEP+7a@_O_&Ae&7u-I24SQi7#0>KHXUk=f|MV z*)B8=AHwkH9Tu%mfF z61;U?gi>9+CU1Vhh5d*HO*k(#5+G{pgN*PDVz&?BIbidBJJTvt!qhLM*%=u-)#!}# z%0J%_;vU!g+|RPakh8y-*f|7852?D^MPB$u;*FLX=^Oj*mME{2FE!n*5foO1ov5=6 zYOibVd@@05L|Ve>X&Jx7@2G^?_i>K|8P2m_ei;&q2>iU`sba_FXIqd)%x`c2*&+di z{<`-N)I7%O%|6S-*!!RIA3~?;WTidT-W7T$Qq|pCG%#@BN{!IRe^#ecl(Dxt-U-;L zv%k_)k84snZ5^N(F5I7wk!seK4dPK02W(KOhL&$rLtP5UTbAR?UET|HBVHgdh#{}> zI`l@mx!d)g#5L7A42`-`Seg4w5OQXqx!AK9hd zuX+q9FW=b1`L*Y;$H7&ED;rzYfCkJ)Y*kS2nEQg&l==2L?0H6_G&;+A1-mMHC4Xzf zj5u-0gel_fb&2>IPZxiwE^O~Ab2dždGAuWhhUCx0sf70q;2f<3|ICFi?7O+hii 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�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ʿI;7y8($U9 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成功失败stage / commitstage 成功commit 成功失败cancelled / appliedWorkflow/ terminalError无终止事实,且处于预览或搭建任务普通对话且无需预览Agent 调用workflow_cli_query / stage /commitCLI 阶段只读查询是否成功ok: truechanged: falsestop: falseserializeGatewayError decision、无修复计数stop: false执行是否成功state: staged / removed /reset清除该目标计数taskComplete: falsestop: falsedecision.category: applied写入 appliedWorkflowtaskComplete: truestop: true phase + repairTarget计数attempt = previous + 1attempt >= 10decision.category:auto_repairableterminalError 不写入stop: falsedecision.category:terminal_internal写入 terminalErrorstop: true模型收到 Tool response模型是否继续调用工具Workflow BuildercompletionPolicy结构化终止事实action: completeaction: continue注入继续消息同一个 AgentLoop 再运行Provider 收到 tool stop: true立即结束主 AgentLoopRunner 收尾 Agent依据 applied / failed事实生成最终答复needs_user_input仅在类型中预留当前无产生分支,也未接入completionPolicy \ No newline at end of file diff --git a/diagrams/workflow-builder-main-chain.excalidraw b/diagrams/workflow-builder-main-chain.excalidraw new file mode 100644 index 000000000000..e02ee9b9b55c --- /dev/null +++ b/diagrams/workflow-builder-main-chain.excalidraw @@ -0,0 +1 @@ +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"GN8fxKpa4r71WWA3Ja6pW","type":"rectangle","x":1894.3984375,"y":0,"width":166.953125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":815970380,"version":3,"versionNonce":910341108,"isDeleted":false,"boundElements":[{"type":"text","id":"peRF-m-8cIxk0trkCW_VB"},{"id":"8r1DIXnyLijEb1ZZAYJLl","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"DgEeL5UZfhTGpY3e2c65Y","type":"rectangle","x":1859.1953125,"y":99,"width":237.359375,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":708625012,"version":7,"versionNonce":1640134004,"isDeleted":false,"boundElements":[{"type":"text","id":"DCwbGFRveqaeUYtbKptNw"},{"id":"8r1DIXnyLijEb1ZZAYJLl","type":"arrow"},{"id":"8ezPx4m_VVARxIlprBdOR","type":"arrow"},{"id":"wLjil-xjWaf4NCBpXV4jf","type":"arrow"},{"id":"50p9e90dLINMLeDYBvNP_","type":"arrow"},{"id":"pv4MlUQazl6sLgnwq99x9","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"-CFNtyt0GuU7M4sBsB-Yh","type":"rectangle","x":1517.8671875,"y":193,"width":236.15625,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":918408908,"version":4,"versionNonce":207559156,"isDeleted":false,"boundElements":[{"type":"text","id":"rMHTYr-AO9bkGH67CNAls"},{"id":"8ezPx4m_VVARxIlprBdOR","type":"arrow"},{"id":"gsrnDbFk9hRlQXnBAMsYx","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"N02BG5GDA9p6aKMBW0KVn","type":"rectangle","x":1307.3828125,"y":287,"width":657.125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":2011452404,"version":4,"versionNonce":900738292,"isDeleted":false,"boundElements":[{"type":"text","id":"EYPZQY9XTRwGUgDtkzOrx"},{"id":"gsrnDbFk9hRlQXnBAMsYx","type":"arrow"},{"id":"kKI4LfiwZknaf_dvxlk6p","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"awXKDRMqTZ3bExBcGepta","type":"rectangle","x":1489.15625,"y":386,"width":293.578125,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":640816460,"version":8,"versionNonce":1820975604,"isDeleted":false,"boundElements":[{"type":"text","id":"67K7NqLzazF-_ZEHtG2Yk"},{"id":"kKI4LfiwZknaf_dvxlk6p","type":"arrow"},{"id":"Q4HbALqKdRqURhRT1639A","type":"arrow"},{"id":"rN2ZzN3kYivhUUl28WoHW","type":"arrow"},{"id":"HM-Ih_7PfX-fiBgGsPqYp","type":"arrow"},{"id":"JLmt8yMAYFiBBo6PuOW-t","type":"arrow"},{"id":"tUvLL5eHC4fo_5syeILiU","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"ELRmn3XWV24iIeJy413Vf","type":"diamond","x":868.765625,"y":514,"width":270.203125,"height":270.203125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":496874868,"version":9,"versionNonce":1858710260,"isDeleted":false,"boundElements":[{"type":"text","id":"dky0x2zNprYz0QZKtMhbN"},{"id":"Q4HbALqKdRqURhRT1639A","type":"arrow"},{"id":"35M9HDeSvtK49f4JzP-H8","type":"arrow"},{"id":"4NwTlmEZnpJ_gLpTMpz53","type":"arrow"},{"id":"GtoKnsUfHtIanAqtSjt7E","type":"arrow"},{"id":"jcDwodvFDMnIeWrVFF-na","type":"arrow"},{"id":"Lbma4M87kKK7N2HOc1Nis","type":"arrow"},{"id":"AOCp9fZBXS6-oJzJjX3PP","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"cwMiPHxSn2eLjY3f1lzZX","type":"rectangle","x":25.203125,"y":870.703125,"width":126.875,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":1549372364,"version":4,"versionNonce":963280372,"isDeleted":false,"boundElements":[{"type":"text","id":"qANncKgmQgnnYoFG84zmj"},{"id":"35M9HDeSvtK49f4JzP-H8","type":"arrow"},{"id":"0vgY34m_fEEW2INQF5hEG","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"r7ukdtStYORyovuu64O9q","type":"rectangle","x":202.078125,"y":870.703125,"width":410.1875,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":1487857396,"version":4,"versionNonce":439521524,"isDeleted":false,"boundElements":[{"type":"text","id":"z1WpoDOVqD_FLTjnIvfgu"},{"id":"4NwTlmEZnpJ_gLpTMpz53","type":"arrow"},{"id":"bT9vM1s7WjriU6bF8OJHi","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"N1PBOd8TW3tqe3IJo-OVs","type":"rectangle","x":662.265625,"y":870.703125,"width":234.359375,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":2068722252,"version":4,"versionNonce":1324906228,"isDeleted":false,"boundElements":[{"type":"text","id":"dRRCUWC94WTy15JDfnBMJ"},{"id":"GtoKnsUfHtIanAqtSjt7E","type":"arrow"},{"id":"rN2ZzN3kYivhUUl28WoHW","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"bI1PwIKevHTFMa5nYQAWz","type":"rectangle","x":1233.5625,"y":870.703125,"width":230.4375,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":1302194292,"version":4,"versionNonce":492194292,"isDeleted":false,"boundElements":[{"type":"text","id":"3p92bxdgFZwS7WNppSwRX"},{"id":"jcDwodvFDMnIeWrVFF-na","type":"arrow"},{"id":"rnsrp-O4s2X3-mPoTJ1E9","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"pJe7fQqyFOmet0xCZyaL2","type":"rectangle","x":1872.4453125,"y":870.703125,"width":255.421875,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":1374292172,"version":4,"versionNonce":972533748,"isDeleted":false,"boundElements":[{"type":"text","id":"PYY-pgYcKefv6xQHDks0s"},{"id":"Lbma4M87kKK7N2HOc1Nis","type":"arrow"},{"id":"tP-kfXKiAFx5pPm64gYie","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"jAiu0fCSY6sbHi2ZwVJmd","type":"rectangle","x":1540.96875,"y":868.203125,"width":166.953125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":540064244,"version":4,"versionNonce":940669940,"isDeleted":false,"boundElements":[{"type":"text","id":"fPOktH0G1sL8Ck9ht7UbB"},{"id":"AOCp9fZBXS6-oJzJjX3PP","type":"arrow"},{"id":"JiFrjNsWjj36Q19enM6sh","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"3UIpIpRx7HrfAwSpjAHCi","type":"rectangle","x":249.46875,"y":967.203125,"width":315.40625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":1137119052,"version":5,"versionNonce":542237684,"isDeleted":false,"boundElements":[{"type":"text","id":"zON-CRygSCQiVRU0ZNiWk"},{"id":"0vgY34m_fEEW2INQF5hEG","type":"arrow"},{"id":"bT9vM1s7WjriU6bF8OJHi","type":"arrow"},{"id":"wLjil-xjWaf4NCBpXV4jf","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"NeDRxJoIFsv1kU8b8a9y4","type":"rectangle","x":1295.546875,"y":969.703125,"width":256.6875,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":191716212,"version":4,"versionNonce":1989893364,"isDeleted":false,"boundElements":[{"type":"text","id":"VvYdQuiaIYaN6kJ6zJ35W"},{"id":"rnsrp-O4s2X3-mPoTJ1E9","type":"arrow"},{"id":"HM-Ih_7PfX-fiBgGsPqYp","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"1Kj3x7JvgMxPukdqds8HW","type":"rectangle","x":1864.7109375,"y":967.203125,"width":481.125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":826230220,"version":5,"versionNonce":74983668,"isDeleted":false,"boundElements":[{"type":"text","id":"xj8u7L-BlhTmth2CSb0gN"},{"id":"tP-kfXKiAFx5pPm64gYie","type":"arrow"},{"id":"JLmt8yMAYFiBBo6PuOW-t","type":"arrow"},{"id":"61YKKllqizdPOGU0_FGpT","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"NsZvSzq3sMYnHVViidDee","type":"rectangle","x":1983.8046875,"y":1100.203125,"width":242.9375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":null,"seed":2040122612,"version":4,"versionNonce":1721714676,"isDeleted":false,"boundElements":[{"type":"text","id":"pWKdBNDu2Pbni28o3W95v"},{"id":"61YKKllqizdPOGU0_FGpT","type":"arrow"},{"id":"MTiejp4XBzexUp-JzFrl2","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"29tPidNGXpfwtdbclkkkB","type":"rectangle","x":1606.1328125,"y":969.703125,"width":208.578125,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":null,"seed":1600957516,"version":5,"versionNonce":264828148,"isDeleted":false,"boundElements":[{"type":"text","id":"7PGiO5fEISO5IkYbBDno0"},{"id":"JiFrjNsWjj36Q19enM6sh","type":"arrow"},{"id":"tUvLL5eHC4fo_5syeILiU","type":"arrow"},{"id":"4uQaY76H_c4GKXSQ2-avu","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"9qirrG7gAdvb4CYUSKDaS","type":"rectangle","x":1964.5859375,"y":1199.203125,"width":281.375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":null,"seed":473697908,"version":6,"versionNonce":1687011572,"isDeleted":false,"boundElements":[{"type":"text","id":"S-2J9JKouB2Ncb36VYcUU"},{"id":"4uQaY76H_c4GKXSQ2-avu","type":"arrow"},{"id":"MTiejp4XBzexUp-JzFrl2","type":"arrow"},{"id":"50p9e90dLINMLeDYBvNP_","type":"arrow"},{"id":"OQj2gHX5uhBLj_BhgE03F","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"UZMVZli0ScHBVympeGKxP","type":"rectangle","x":2190.2265625,"y":1327.203125,"width":264.3125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":null,"seed":1613316812,"version":4,"versionNonce":295769076,"isDeleted":false,"boundElements":[{"type":"text","id":"mEwmKQC8aIXo0oUWIIjvJ"},{"id":"OQj2gHX5uhBLj_BhgE03F","type":"arrow"},{"id":"pv4MlUQazl6sLgnwq99x9","type":"arrow"}],"updated":1785841671304,"link":null,"locked":false},{"id":"8r1DIXnyLijEb1ZZAYJLl","type":"arrow","x":1977.875,"y":49,"width":0,"height":44.7,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":{"type":2},"seed":68820980,"version":4,"versionNonce":1265218892,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[0,44.2]],"lastCommittedPoint":null,"startBinding":{"elementId":"GN8fxKpa4r71WWA3Ja6pW","focus":0,"gap":1},"endBinding":{"elementId":"DgEeL5UZfhTGpY3e2c65Y","focus":0,"gap":5.299999999999997},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"8ezPx4m_VVARxIlprBdOR","type":"arrow","x":1859.195,"y":137.313,"width":223.25,"height":50.387,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":{"type":2},"seed":2047805772,"version":4,"versionNonce":790483532,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[-223.25,30.687000000000012],[-223.25,49.887]],"lastCommittedPoint":null,"startBinding":{"elementId":"DgEeL5UZfhTGpY3e2c65Y","focus":0.000006536563932732896,"gap":1},"endBinding":{"elementId":"-CFNtyt0GuU7M4sBsB-Yh","focus":-0.0000026465528691571448,"gap":5.300000000000011},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"gsrnDbFk9hRlQXnBAMsYx","type":"arrow","x":1635.945,"y":237,"width":0,"height":44.69999999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":{"type":2},"seed":960102772,"version":4,"versionNonce":1076801356,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[0,44.19999999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"-CFNtyt0GuU7M4sBsB-Yh","focus":0.0000026465528653917686,"gap":1},"endBinding":{"elementId":"N02BG5GDA9p6aKMBW0KVn","focus":-9.511128014910236e-7,"gap":5.300000000000011},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kKI4LfiwZknaf_dvxlk6p","type":"arrow","x":1635.945,"y":336,"width":0,"height":44.69999999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":276299724,"version":4,"versionNonce":1584155724,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[0,44.19999999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"N02BG5GDA9p6aKMBW0KVn","focus":9.511128014910236e-7,"gap":1},"endBinding":{"elementId":"awXKDRMqTZ3bExBcGepta","focus":-0.0000021289052109174787,"gap":5.300000000000011},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Q4HbALqKdRqURhRT1639A","type":"arrow","x":1489.156,"y":439.863,"width":485.289,"height":69.33800000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":1390523124,"version":4,"versionNonce":900114764,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,0.5],[-485.289,49.137],[-485.3929999999999,68.83800000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"awXKDRMqTZ3bExBcGepta","focus":-0.000002446863954599545,"gap":1},"endBinding":{"elementId":"ELRmn3XWV24iIeJy413Vf","focus":0.023229056442824268,"gap":4.825249515892909},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"35M9HDeSvtK49f4JzP-H8","type":"arrow","x":891.17,"y":671.506,"width":802.529,"height":193.89700000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":{"type":2},"seed":192816716,"version":4,"versionNonce":1261903052,"isDeleted":false,"boundElements":[{"type":"text","id":"u46M_Ju8FvVTLbuipkkKh"}],"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[-802.529,154.697],[-802.529,193.39700000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"ELRmn3XWV24iIeJy413Vf","focus":-0.005038547185601,"gap":1},"endBinding":{"elementId":"cwMiPHxSn2eLjY3f1lzZX","focus":0.000005911330048757446,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"4NwTlmEZnpJ_gLpTMpz53","type":"arrow","x":900.187,"y":680.523,"width":493.015,"height":184.88,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":261567604,"version":4,"versionNonce":996294732,"isDeleted":false,"boundElements":[{"type":"text","id":"WVrDEmqNqs37U81deYhDV"}],"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[-493.015,145.67999999999995],[-493.015,184.38]],"lastCommittedPoint":null,"startBinding":{"elementId":"ELRmn3XWV24iIeJy413Vf","focus":-0.005811847572580634,"gap":1},"endBinding":{"elementId":"r7ukdtStYORyovuu64O9q","focus":6.094773732916198e-7,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"GtoKnsUfHtIanAqtSjt7E","type":"arrow","x":917.568,"y":697.904,"width":231.95100000000002,"height":169.73400000000004,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":1073446092,"version":4,"versionNonce":971379660,"isDeleted":false,"boundElements":[{"type":"text","id":"HyHusd8sHeaW9s1LtGFOa"}],"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,0.5],[-231.95100000000002,128.29899999999998],[-173.98799999999994,169.23400000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"ELRmn3XWV24iIeJy413Vf","focus":-0.00790360206056321,"gap":1},"endBinding":{"elementId":"N1PBOd8TW3tqe3IJo-OVs","focus":0.0000033671495183191614,"gap":3.0651249999999663},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"jcDwodvFDMnIeWrVFF-na","type":"arrow","x":1093.634,"y":695.437,"width":255.14699999999993,"height":169.966,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":1830847988,"version":4,"versionNonce":1799395148,"isDeleted":false,"boundElements":[{"type":"text","id":"6MbwTw6O7r7-9V5iXoi4K"}],"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[255.14699999999993,130.76599999999996],[255.14699999999993,169.466]],"lastCommittedPoint":null,"startBinding":{"elementId":"ELRmn3XWV24iIeJy413Vf","focus":0.0024339722249158307,"gap":1},"endBinding":{"elementId":"bI1PwIKevHTFMa5nYQAWz","focus":-0.0000021697857321206813,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Lbma4M87kKK7N2HOc1Nis","type":"arrow","x":1119.078,"y":669.993,"width":881.078,"height":195.40999999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":1468662604,"version":4,"versionNonce":481282764,"isDeleted":false,"boundElements":[{"type":"text","id":"YHVZ7ZaxNeb-LAsNWdcpQ"}],"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[881.078,156.20999999999992],[881.078,194.90999999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"ELRmn3XWV24iIeJy413Vf","focus":0.0034435661706399058,"gap":1},"endBinding":{"elementId":"pJe7fQqyFOmet0xCZyaL2","focus":-0.0000019575457291868843,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"AOCp9fZBXS6-oJzJjX3PP","type":"arrow","x":1109.473,"y":679.597,"width":514.972,"height":183.30600000000004,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":1082369908,"version":4,"versionNonce":2083630668,"isDeleted":false,"boundElements":[{"type":"text","id":"MHRrIPUydq48MLhGT1ChS"}],"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[514.972,146.606],[514.972,182.80600000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"ELRmn3XWV24iIeJy413Vf","focus":0.0031887230514677165,"gap":1},"endBinding":{"elementId":"jAiu0fCSY6sbHi2ZwVJmd","focus":-0.0000037435657473603024,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"0vgY34m_fEEW2INQF5hEG","type":"arrow","x":88.641,"y":914.703,"width":155.637,"height":51.686000000000035,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":948156876,"version":4,"versionNonce":1190890316,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,0.5],[0,27.5],[155.137,51.186000000000035]],"lastCommittedPoint":null,"startBinding":{"elementId":"cwMiPHxSn2eLjY3f1lzZX","focus":-0.000005911330049357338,"gap":1},"endBinding":{"elementId":"3UIpIpRx7HrfAwSpjAHCi","focus":0.00000828756658884874,"gap":5.254206417540595},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"bT9vM1s7WjriU6bF8OJHi","type":"arrow","x":407.172,"y":914.703,"width":0,"height":47.200000000000045,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":1309055220,"version":4,"versionNonce":1152526412,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[0,46.700000000000045]],"lastCommittedPoint":null,"startBinding":{"elementId":"r7ukdtStYORyovuu64O9q","focus":-6.094773732916198e-7,"gap":1},"endBinding":{"elementId":"3UIpIpRx7HrfAwSpjAHCi","focus":7.926285546915496e-7,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"wLjil-xjWaf4NCBpXV4jf","type":"arrow","x":564.875,"y":981.523,"width":1289.029,"height":853.2750000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":1845665868,"version":4,"versionNonce":824542540,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,-0.5],[609.094,-39.32000000000005],[609.094,-88.82000000000005],[609.094,-155.32000000000005],[609.094,-332.42100000000005],[609.094,-492.523],[609.094,-556.523],[609.094,-620.523],[609.094,-670.023],[609.094,-719.523],[609.094,-766.523],[609.094,-813.523],[1288.529,-852.7750000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"3UIpIpRx7HrfAwSpjAHCi","focus":0.000011069006003890072,"gap":1},"endBinding":{"elementId":"DgEeL5UZfhTGpY3e2c65Y","focus":-0.0000037450082863716072,"gap":5.291312500000004},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"rN2ZzN3kYivhUUl28WoHW","type":"arrow","x":797.416,"y":870.703,"width":686.457,"height":433.57,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":1630493300,"version":4,"versionNonce":338010700,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,-0.5],[36.34999999999991,-44.5],[36.34999999999991,-221.601],[36.34999999999991,-381.703],[685.957,-433.07]],"lastCommittedPoint":null,"startBinding":{"elementId":"N1PBOd8TW3tqe3IJo-OVs","focus":-0.0000014881456898879862,"gap":1},"endBinding":{"elementId":"awXKDRMqTZ3bExBcGepta","focus":-0.000006479028977222552,"gap":5.283249999999953},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"rnsrp-O4s2X3-mPoTJ1E9","type":"arrow","x":1348.781,"y":914.703,"width":37.302000000000135,"height":52.08400000000006,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":{"type":2},"seed":266385100,"version":4,"versionNonce":1099071308,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,0.5],[0,27.5],[36.802000000000135,51.58400000000006]],"lastCommittedPoint":null,"startBinding":{"elementId":"bI1PwIKevHTFMa5nYQAWz","focus":0.0000021697857321206813,"gap":1},"endBinding":{"elementId":"NeDRxJoIFsv1kU8b8a9y4","focus":-0.000010402375289589415,"gap":2.9161249999999654},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"HM-Ih_7PfX-fiBgGsPqYp","type":"arrow","x":1460.37,"y":969.703,"width":91.61600000000021,"height":503.36199999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":{"type":2},"seed":1690561524,"version":4,"versionNonce":1493965900,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,-0.5],[45.59900000000016,-27.5],[45.59900000000016,-77],[45.59900000000016,-143.5],[45.59900000000016,-320.601],[45.59900000000016,-480.703],[91.11600000000021,-502.86199999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"NeDRxJoIFsv1kU8b8a9y4","focus":-1.9577481330699457e-7,"gap":1},"endBinding":{"elementId":"awXKDRMqTZ3bExBcGepta","focus":0.000008839502262511168,"gap":2.341000000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"tP-kfXKiAFx5pPm64gYie","type":"arrow","x":2000.156,"y":914.703,"width":48.29500000000007,"height":50.242000000000075,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":{"type":2},"seed":716701004,"version":4,"versionNonce":1184004428,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,0.5],[0,27.5],[47.79500000000007,49.742000000000075]],"lastCommittedPoint":null,"startBinding":{"elementId":"pJe7fQqyFOmet0xCZyaL2","focus":0.0000019575457291868843,"gap":1},"endBinding":{"elementId":"1Kj3x7JvgMxPukdqds8HW","focus":0.00000417385529149062,"gap":2.25812499999995},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"JLmt8yMAYFiBBo6PuOW-t","type":"arrow","x":2155.983,"y":967.203,"width":419.7259999999999,"height":525.183,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":{"type":2},"seed":2060078452,"version":4,"versionNonce":401927372,"isDeleted":false,"boundElements":[{"type":"text","id":"5kzVxL6lLmE5RlDnilfZr"}],"updated":1785841671304,"link":null,"locked":false,"points":[[-0.5,-0.5],[51.74399999999969,-25],[51.74399999999969,-74.5],[51.74399999999969,-141],[51.74399999999969,-318.101],[51.74399999999969,-478.203],[-367.4820000000002,-524.683]],"lastCommittedPoint":null,"startBinding":{"elementId":"1Kj3x7JvgMxPukdqds8HW","focus":6.309574563813341e-7,"gap":1},"endBinding":{"elementId":"awXKDRMqTZ3bExBcGepta","focus":0.0000068909542896194405,"gap":5.266624999999976},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"61YKKllqizdPOGU0_FGpT","type":"arrow","x":2105.273,"y":1016.203,"width":0,"height":78.70000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":{"type":2},"seed":669152204,"version":4,"versionNonce":1026691148,"isDeleted":false,"boundElements":[{"type":"text","id":"jOieMWCJH4VlY_-Fr5W8L"}],"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[0,42],[0,78.20000000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"1Kj3x7JvgMxPukdqds8HW","focus":0.000001818654195358812,"gap":1},"endBinding":{"elementId":"NsZvSzq3sMYnHVViidDee","focus":-0.000003601749419999051,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"JiFrjNsWjj36Q19enM6sh","type":"arrow","x":1624.445,"y":917.203,"width":43.172000000000025,"height":49.855999999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":{"type":2},"seed":344489716,"version":4,"versionNonce":684420428,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[42.672000000000025,49.355999999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"jAiu0fCSY6sbHi2ZwVJmd","focus":0.0000037435657473603024,"gap":1},"endBinding":{"elementId":"29tPidNGXpfwtdbclkkkB","focus":-0.000006157126900209415,"gap":2.644125000000031},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"tUvLL5eHC4fo_5syeILiU","type":"arrow","x":1757.141,"y":969.703,"width":65.16100000000006,"height":503.924,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":{"type":2},"seed":897194572,"version":4,"versionNonce":1642225868,"isDeleted":false,"boundElements":[{"type":"text","id":"HZoeHOfTC_PguYQCwsQlv"}],"updated":1785841671304,"link":null,"locked":false,"points":[[-0.5,-0.5],[58.39799999999991,-27.5],[58.39799999999991,-77],[58.39799999999991,-143.5],[58.39799999999991,-320.601],[58.39799999999991,-480.703],[-6.263000000000147,-503.424]],"lastCommittedPoint":null,"startBinding":{"elementId":"29tPidNGXpfwtdbclkkkB","focus":0.0000030432571930137408,"gap":1},"endBinding":{"elementId":"awXKDRMqTZ3bExBcGepta","focus":-0.000006893840121541828,"gap":1.7789999999999964},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"4uQaY76H_c4GKXSQ2-avu","type":"arrow","x":1710.422,"y":1013.703,"width":248.90499999999997,"height":191.70399999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":{"type":2},"seed":176455796,"version":4,"versionNonce":1696859212,"isDeleted":false,"boundElements":[{"type":"text","id":"NYx0TCBaqyI7NRbYkd70q"}],"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,0.5],[0,44.5],[0,111],[0,160.5],[248.40499999999997,191.20399999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"29tPidNGXpfwtdbclkkkB","focus":-0.0000011985916549933992,"gap":1},"endBinding":{"elementId":"9qirrG7gAdvb4CYUSKDaS","focus":-0.000011025989930845015,"gap":5.258937500000002},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"MTiejp4XBzexUp-JzFrl2","type":"arrow","x":2105.273,"y":1149.203,"width":0,"height":44.700000000000045,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":{"type":2},"seed":777580748,"version":4,"versionNonce":1271947596,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[0,0.5],[0,44.200000000000045]],"lastCommittedPoint":null,"startBinding":{"elementId":"NsZvSzq3sMYnHVViidDee","focus":0.000003601749419999051,"gap":1},"endBinding":{"elementId":"9qirrG7gAdvb4CYUSKDaS","focus":-0.0000031097290083511725,"gap":5.30012499999998},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"50p9e90dLINMLeDYBvNP_","type":"arrow","x":2245.961,"y":1201.911,"width":323.00999999999976,"height":1067.877,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":{"type":2},"seed":881086964,"version":4,"versionNonce":270259404,"isDeleted":false,"boundElements":[{"type":"text","id":"xbYfwtVIpWf68H444-AyO"}],"updated":1785841671304,"link":null,"locked":false,"points":[[-0.5,-0.5],[178.875,-27.708000000000084],[178.875,-77.20800000000008],[178.875,-143.70800000000008],[178.875,-210.20800000000008],[178.875,-259.7080000000001],[178.875,-309.2080000000001],[178.875,-375.7080000000001],[178.875,-552.8090000000001],[178.875,-712.9110000000001],[178.875,-776.9110000000001],[178.875,-840.9110000000001],[178.875,-890.4110000000001],[178.875,-939.9110000000001],[178.875,-986.9110000000001],[178.875,-1033.911],[-143.63499999999976,-1067.377]],"lastCommittedPoint":null,"startBinding":{"elementId":"9qirrG7gAdvb4CYUSKDaS","focus":0.000012634626687259095,"gap":1},"endBinding":{"elementId":"DgEeL5UZfhTGpY3e2c65Y","focus":-6.577899260702468e-7,"gap":5.271312500000022},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"OQj2gHX5uhBLj_BhgE03F","type":"arrow","x":2105.273,"y":1248.203,"width":128.91399999999976,"height":77.50199999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":{"type":2},"seed":35190604,"version":4,"versionNonce":1155659852,"isDeleted":false,"boundElements":[{"type":"text","id":"GwGwlK1izaGQILnzedqjN"}],"updated":1785841671304,"link":null,"locked":false,"points":[[0.5,0.5],[0,39.5],[128.41399999999976,77.00199999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"9qirrG7gAdvb4CYUSKDaS","focus":0.0000031097290083511725,"gap":1},"endBinding":{"elementId":"UZMVZli0ScHBVympeGKxP","focus":-0.000011610448524637016,"gap":1.4981250000000728},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"pv4MlUQazl6sLgnwq99x9","type":"arrow","x":2388.651,"y":1327.203,"width":393.6590000000001,"height":1194.9479999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":{"type":2},"seed":26080116,"version":4,"versionNonce":597775692,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"points":[[-0.5,-0.5],[106.84100000000035,-39.5],[106.84100000000035,-103.5],[106.84100000000035,-153],[106.84100000000035,-202.5],[106.84100000000035,-269],[106.84100000000035,-335.5],[106.84100000000035,-385],[106.84100000000035,-434.5],[106.84100000000035,-501],[106.84100000000035,-678.101],[106.84100000000035,-838.203],[106.84100000000035,-902.203],[106.84100000000035,-966.203],[106.84100000000035,-1015.703],[106.84100000000035,-1065.203],[106.84100000000035,-1112.203],[106.84100000000035,-1159.203],[-286.31799999999976,-1194.4479999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"UZMVZli0ScHBVympeGKxP","focus":-0.000003119363691878587,"gap":1},"endBinding":{"elementId":"DgEeL5UZfhTGpY3e2c65Y","focus":-0.00001911731144354057,"gap":5.278312500000084},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"peRF-m-8cIxk0trkCW_VB","type":"text","x":1917.875,"y":12,"width":120,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":null,"seed":311284556,"version":3,"versionNonce":1776339916,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"用户发送消息","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"GN8fxKpa4r71WWA3Ja6pW","originalText":"用户发送消息","autoResize":true,"lineHeight":1.25},{"id":"DCwbGFRveqaeUYtbKptNw","type":"text","x":1892.572265625,"y":108.5,"width":170.60546875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":null,"seed":42830284,"version":3,"versionNonce":976987892,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"Workflow Builder UI","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"DgEeL5UZfhTGpY3e2c65Y","originalText":"Workflow Builder UI","autoResize":true,"lineHeight":1.25},{"id":"rMHTYr-AO9bkGH67CNAls","type":"text","x":1552.8642578125,"y":202.5,"width":166.162109375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":null,"seed":1985114188,"version":3,"versionNonce":1441624652,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"runWorkflowBuilder","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"-CFNtyt0GuU7M4sBsB-Yh","originalText":"runWorkflowBuilder","autoResize":true,"lineHeight":1.25},{"id":"EYPZQY9XTRwGUgDtkzOrx","type":"text","x":1390.115234375,"y":299,"width":491.66015625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":498501324,"version":3,"versionNonce":1603446900,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"准备历史、Provider State、共享 Sandbox、Skill 和事务区","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"N02BG5GDA9p6aKMBW0KVn","originalText":"准备历史、Provider State、共享 Sandbox、Skill 和事务区","autoResize":true,"lineHeight":1.25},{"id":"67K7NqLzazF-_ZEHtG2Yk","type":"text","x":1498.8505859375,"y":400,"width":274.189453125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":492031308,"version":3,"versionNonce":379668684,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"AgentLoop Core
统一模型循\n环与工具调用","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"awXKDRMqTZ3bExBcGepta","originalText":"AgentLoop Core
统一模型循环与工具调用","autoResize":true,"lineHeight":1.25},{"id":"dky0x2zNprYz0QZKtMhbN","type":"text","x":944.3779296875,"y":624.05078125,"width":118.876953125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":null,"seed":1988379596,"version":3,"versionNonce":361593332,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"主 Agent 本轮\n动作","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ELRmn3XWV24iIeJy413Vf","originalText":"主 Agent 本轮动作","autoResize":true,"lineHeight":1.25},{"id":"qANncKgmQgnnYoFG84zmj","type":"text","x":48.6552734375,"y":880.203125,"width":79.970703125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":null,"seed":1868687948,"version":3,"versionNonce":1872121676,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"ask_agent","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"cwMiPHxSn2eLjY3f1lzZX","originalText":"ask_agent","autoResize":true,"lineHeight":1.25},{"id":"z1WpoDOVqD_FLTjnIvfgu","type":"text","x":264.427734375,"y":880.203125,"width":285.48828125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":null,"seed":2059845836,"version":3,"versionNonce":926030708,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"workflow_builder_present_preview","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"r7ukdtStYORyovuu64O9q","originalText":"workflow_builder_present_preview","autoResize":true,"lineHeight":1.25},{"id":"dRRCUWC94WTy15JDfnBMJ","type":"text","x":698.3466796875,"y":880.203125,"width":162.197265625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"as","roundness":null,"seed":541902668,"version":3,"versionNonce":556172748,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"workflow_cli_query","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"N1PBOd8TW3tqe3IJo-OVs","originalText":"workflow_cli_query","autoResize":true,"lineHeight":1.25},{"id":"3p92bxdgFZwS7WNppSwRX","type":"text","x":1269.904296875,"y":880.203125,"width":157.75390625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"at","roundness":null,"seed":1682832844,"version":3,"versionNonce":1321635060,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"workflow_cli_stage","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"bI1PwIKevHTFMa5nYQAWz","originalText":"workflow_cli_stage","autoResize":true,"lineHeight":1.25},{"id":"PYY-pgYcKefv6xQHDks0s","type":"text","x":1911.2744140625,"y":880.203125,"width":177.763671875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"au","roundness":null,"seed":803497036,"version":3,"versionNonce":1349250124,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"workflow_cli_commit","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"pJe7fQqyFOmet0xCZyaL2","originalText":"workflow_cli_commit","autoResize":true,"lineHeight":1.25},{"id":"fPOktH0G1sL8Ck9ht7UbB","type":"text","x":1564.4453125,"y":880.203125,"width":120,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"av","roundness":null,"seed":954858188,"version":3,"versionNonce":768659060,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"自然语言回答","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jAiu0fCSY6sbHi2ZwVJmd","originalText":"自然语言回答","autoResize":true,"lineHeight":1.25},{"id":"zON-CRygSCQiVRU0ZNiWk","type":"text","x":295.23828125,"y":979.203125,"width":223.8671875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aw","roundness":null,"seed":1777910092,"version":3,"versionNonce":1866498764,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"保存 Provider State 并暂停","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"3UIpIpRx7HrfAwSpjAHCi","originalText":"保存 Provider State 并暂停","autoResize":true,"lineHeight":1.25},{"id":"VvYdQuiaIYaN6kJ6zJ35W","type":"text","x":1335.2822265625,"y":979.203125,"width":177.216796875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ax","roundness":null,"seed":1248507852,"version":3,"versionNonce":85385204,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"Chunk Session / Draft","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"NeDRxJoIFsv1kU8b8a9y4","originalText":"Chunk Session / Draft","autoResize":true,"lineHeight":1.25},{"id":"xj8u7L-BlhTmth2CSb0gN","type":"text","x":1931.376953125,"y":979.203125,"width":347.79296875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ay","roundness":null,"seed":1717165644,"version":3,"versionNonce":608061772,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"Workflow Core 校验 revision 与 checksum","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"1Kj3x7JvgMxPukdqds8HW","originalText":"Workflow Core 校验 revision 与 checksum","autoResize":true,"lineHeight":1.25},{"id":"pWKdBNDu2Pbni28o3W95v","type":"text","x":2015.2734375,"y":1112.203125,"width":180,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"az","roundness":null,"seed":916468940,"version":3,"versionNonce":2090778996,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"原子应用到当前画布","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"NsZvSzq3sMYnHVViidDee","originalText":"原子应用到当前画布","autoResize":true,"lineHeight":1.25},{"id":"7PGiO5fEISO5IkYbBDno0","type":"text","x":1637.6435546875,"y":979.203125,"width":145.556640625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b00","roundness":null,"seed":148355916,"version":3,"versionNonce":851394508,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"CompletionPolicy","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"29tPidNGXpfwtdbclkkkB","originalText":"CompletionPolicy","autoResize":true,"lineHeight":1.25},{"id":"S-2J9JKouB2Ncb36VYcUU","type":"text","x":2006.4013671875,"y":1211.203125,"width":197.744140625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b01","roundness":null,"seed":1733980620,"version":3,"versionNonce":1269723892,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"Runner 归一化 outcome","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"9qirrG7gAdvb4CYUSKDaS","originalText":"Runner 归一化 outcome","autoResize":true,"lineHeight":1.25},{"id":"mEwmKQC8aIXo0oUWIIjvJ","type":"text","x":2225.4443359375,"y":1339.203125,"width":193.876953125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b02","roundness":null,"seed":21125196,"version":3,"versionNonce":1658676812,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"独立无工具收尾 Agent","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"UZMVZli0ScHBVympeGKxP","originalText":"独立无工具收尾 Agent","autoResize":true,"lineHeight":1.25},{"id":"u46M_Ju8FvVTLbuipkkKh","type":"text","x":18.640999999999963,"y":813.703,"width":140,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b03","roundness":null,"seed":941334476,"version":3,"versionNonce":1355543668,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"业务需求未闭合","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"35M9HDeSvtK49f4JzP-H8","originalText":"业务需求未闭合","autoResize":true,"lineHeight":1.25},{"id":"WVrDEmqNqs37U81deYhDV","type":"text","x":347.172,"y":813.703,"width":120,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b04","roundness":null,"seed":978428748,"version":3,"versionNonce":1769127116,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"展示完整方案","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"4NwTlmEZnpJ_gLpTMpz53","originalText":"展示完整方案","autoResize":true,"lineHeight":1.25},{"id":"HyHusd8sHeaW9s1LtGFOa","type":"text","x":615.617,"y":813.703,"width":140,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b05","roundness":null,"seed":1347180236,"version":3,"versionNonce":700270068,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"读取工作流事实","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"GtoKnsUfHtIanAqtSjt7E","originalText":"读取工作流事实","autoResize":true,"lineHeight":1.25},{"id":"6MbwTw6O7r7-9V5iXoi4K","type":"text","x":1288.781,"y":813.703,"width":120,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b06","roundness":null,"seed":101300812,"version":3,"versionNonce":1343832908,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"编辑私有草稿","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jcDwodvFDMnIeWrVFF-na","originalText":"编辑私有草稿","autoResize":true,"lineHeight":1.25},{"id":"YHVZ7ZaxNeb-LAsNWdcpQ","type":"text","x":1930.156,"y":813.703,"width":140,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b07","roundness":null,"seed":1078447564,"version":3,"versionNonce":1267230580,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"应用已校验草稿","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Lbma4M87kKK7N2HOc1Nis","originalText":"应用已校验草稿","autoResize":true,"lineHeight":1.25},{"id":"MHRrIPUydq48MLhGT1ChS","type":"text","x":1564.445,"y":813.703,"width":120,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b08","roundness":null,"seed":1954845004,"version":3,"versionNonce":1563097548,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"普通对话文本","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"AOCp9fZBXS6-oJzJjX3PP","originalText":"普通对话文本","autoResize":true,"lineHeight":1.25},{"id":"5kzVxL6lLmE5RlDnilfZr","type":"text","x":2187.727,"y":813.703,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b09","roundness":null,"seed":1527607244,"version":3,"versionNonce":443767028,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"失败","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"JLmt8yMAYFiBBo6PuOW-t","originalText":"失败","autoResize":true,"lineHeight":1.25},{"id":"jOieMWCJH4VlY_-Fr5W8L","type":"text","x":2085.273,"y":1045.703,"width":40,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0A","roundness":null,"seed":1322611532,"version":3,"versionNonce":2076303436,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"成功","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"61YKKllqizdPOGU0_FGpT","originalText":"成功","autoResize":true,"lineHeight":1.25},{"id":"HZoeHOfTC_PguYQCwsQlv","type":"text","x":1755.539,"y":813.703,"width":120,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0B","roundness":null,"seed":1913119692,"version":3,"versionNonce":33823348,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"任务还未完成","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"tUvLL5eHC4fo_5syeILiU","originalText":"任务还未完成","autoResize":true,"lineHeight":1.25},{"id":"NYx0TCBaqyI7NRbYkd70q","type":"text","x":1670.422,"y":1112.203,"width":80,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0C","roundness":null,"seed":1660184396,"version":3,"versionNonce":599258828,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"允许结束","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"4uQaY76H_c4GKXSQ2-avu","originalText":"允许结束","autoResize":true,"lineHeight":1.25},{"id":"xbYfwtVIpWf68H444-AyO","type":"text","x":2384.836,"y":636.602,"width":80,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0D","roundness":null,"seed":1347311564,"version":3,"versionNonce":218147828,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"普通对话","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"50p9e90dLINMLeDYBvNP_","originalText":"普通对话","autoResize":true,"lineHeight":1.25},{"id":"GwGwlK1izaGQILnzedqjN","type":"text","x":1999.7700703125001,"y":1275.203,"width":211.005859375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b0E","roundness":null,"seed":1910463308,"version":3,"versionNonce":1101479244,"isDeleted":false,"boundElements":null,"updated":1785841671304,"link":null,"locked":false,"text":"applied / cancelled / failed","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"OQj2gHX5uhBLj_BhgE03F","originalText":"applied / cancelled / failed","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/workflow-builder-main-chain.mmd b/diagrams/workflow-builder-main-chain.mmd new file mode 100644 index 000000000000..117af2a6a6e0 --- /dev/null +++ b/diagrams/workflow-builder-main-chain.mmd @@ -0,0 +1,43 @@ +%% Workflow Builder 主链路 +flowchart TD + U["用户发送消息"] --> UI["Workflow Builder UI"] + UI --> R["runWorkflowBuilder"] + R --> PREP["准备历史、Provider State、共享 Sandbox、Skill 和事务区"] + PREP --> LOOP["AgentLoop Core
统一模型循环与工具调用"] + + LOOP --> ACTION{"主 Agent 本轮动作"} + ACTION -->|"业务需求未闭合"| ASK["ask_agent"] + ACTION -->|"展示完整方案"| PREVIEW["workflow_builder_present_preview"] + ACTION -->|"读取工作流事实"| QUERY["workflow_cli_query"] + ACTION -->|"编辑私有草稿"| STAGE["workflow_cli_stage"] + ACTION -->|"应用已校验草稿"| COMMIT["workflow_cli_commit"] + ACTION -->|"普通对话文本"| TEXT["自然语言回答"] + + ASK --> PAUSE["保存 Provider State 并暂停"] + PREVIEW --> PAUSE + PAUSE --> UI + QUERY --> LOOP + STAGE --> DRAFT["Chunk Session / Draft"] + DRAFT --> LOOP + COMMIT --> CORE["Workflow Core 校验 revision 与 checksum"] + CORE -->|"失败"| LOOP + CORE -->|"成功"| CANVAS["原子应用到当前画布"] + + TEXT --> POLICY["CompletionPolicy"] + POLICY -->|"任务还未完成"| LOOP + POLICY -->|"允许结束"| OUTCOME["Runner 归一化 outcome"] + CANVAS --> OUTCOME + OUTCOME -->|"普通对话"| UI + OUTCOME -->|"applied / cancelled / failed"| FINAL["独立无工具收尾 Agent"] + FINAL --> UI + + classDef user fill:#eef4ff,stroke:#5b8def,color:#172b4d; + classDef agent fill:#f5f0ff,stroke:#8465d6,color:#2f1b54; + classDef gateway fill:#edf9f1,stroke:#46a36b,color:#173d25; + classDef core fill:#ecfbfa,stroke:#28a5a0,color:#123d3a; + classDef terminal fill:#fff4e8,stroke:#d78a1d,color:#4d2f08; + class U,UI user; + class R,PREP,LOOP,ACTION,ASK,PREVIEW,TEXT,POLICY,FINAL agent; + class QUERY,STAGE,COMMIT,DRAFT gateway; + class CORE,CANVAS core; + class PAUSE,OUTCOME terminal; diff --git a/diagrams/workflow-builder-main-chain.png b/diagrams/workflow-builder-main-chain.png new file mode 100644 index 0000000000000000000000000000000000000000..07ee3e5c9757369cdb8eade420c40d27fab8ce02 GIT binary patch literal 269233 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%0DkN(o&Djw>==eW&z?w+~3%N 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≺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�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 a_|WmqAq8*i业务需求未闭合展示完整方案读取工作流事实编辑私有草稿应用已校验草稿普通对话文本失败成功任务还未完成允许结束普通对话applied / cancelled / failed用户发送消息Workflow Builder UIrunWorkflowBuilder准备历史、ProviderState、共享 Sandbox、Skill和事务区AgentLoop Core统一模型循环与工具调用 Agent 本轮动作ask_agentworkflow_builder_present_previewworkflow_cli_queryworkflow_cli_stageworkflow_cli_commit自然语言回答保存 Provider State 并暂停Chunk Session / DraftWorkflow Core 校验revision checksum原子应用到当前画布CompletionPolicyRunner 归一化 outcome独立无工具收尾 Agent \ No newline at end of file diff --git a/diagrams/workflow-builder-preview-decisions.excalidraw b/diagrams/workflow-builder-preview-decisions.excalidraw new file mode 100644 index 000000000000..c3a8ef00b018 --- /dev/null +++ b/diagrams/workflow-builder-preview-decisions.excalidraw @@ -0,0 +1 @@ +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"T3vcajlYO20Uq8Qrchztf","type":"rectangle","x":551.09765625,"y":0,"width":116.3125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":1309655156,"version":3,"versionNonce":902538700,"isDeleted":false,"boundElements":[{"type":"text","id":"uKvLHYLAF5-grKOcdxy5c"},{"id":"p0xiyPRe4tOKsolfnOjGo","type":"arrow"}],"updated":1785841671008,"link":null,"locked":false},{"id":"rjHos25IFa2Z0ZvPYCljB","type":"rectangle","x":526.36328125,"y":116,"width":165.78125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":740405452,"version":4,"versionNonce":891134668,"isDeleted":false,"boundElements":[{"type":"text","id":"lQGHdzI_mc4yUXCDejv3p"},{"id":"p0xiyPRe4tOKsolfnOjGo","type":"arrow"},{"id":"GvBiSfJpqweD4ScDMSwZg","type":"arrow"}],"updated":1785841671008,"link":null,"locked":false},{"id":"fIp9WfdRQxpkmWO6jbCHx","type":"diamond","x":235.98828125,"y":232,"width":402.40625,"height":402.40625,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":1688703476,"version":6,"versionNonce":1308664780,"isDeleted":false,"boundElements":[{"type":"text","id":"rEkWazNvLy3EBJWmqFkCM"},{"id":"GvBiSfJpqweD4ScDMSwZg","type":"arrow"},{"id":"0vgfyXg0MFsngfgwusy0g","type":"arrow"},{"id":"ZgD8Iep1DH6rkE7oFgkJr","type":"arrow"},{"id":"8P-OXJEh8Rd5gJEVr25ef","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"LE6KF2M1j7XAFAlpnRIp-","type":"rectangle","x":0,"y":718.40625,"width":420.203125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":1221179212,"version":3,"versionNonce":1203756236,"isDeleted":false,"boundElements":[{"type":"text","id":"FJ8fesO5xzCrJU_Xmq_qW"},{"id":"0vgfyXg0MFsngfgwusy0g","type":"arrow"}],"updated":1785841671008,"link":null,"locked":false},{"id":"1-Nbg0JJdbzBYP5y7IlAe","type":"rectangle","x":470.203125,"y":718.40625,"width":420.203125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":1263088500,"version":5,"versionNonce":1779993292,"isDeleted":false,"boundElements":[{"type":"text","id":"GjMpijZi4WfEhinOjhxWu"},{"id":"ZgD8Iep1DH6rkE7oFgkJr","type":"arrow"},{"id":"p1_gfFuxue84a0kMLWotN","type":"arrow"},{"id":"9fxPBgnD_oVy-n7TTkixV","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"4NXUI-dSHd9AX3ylCD3HT","type":"diamond","x":715.3046875,"y":817.40625,"width":326.4375,"height":326.4375,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":1336733132,"version":5,"versionNonce":1295337420,"isDeleted":false,"boundElements":[{"type":"text","id":"PsxDkFLTHTHQ19uklLb_s"},{"id":"p1_gfFuxue84a0kMLWotN","type":"arrow"},{"id":"R6PnXia4UGN5KFsC-Wpjg","type":"arrow"},{"id":"XiIS_4nhb2hrUrNvg4HFl","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"xHWksBtefA6Uuuerw7GOA","type":"rectangle","x":488.41796875,"y":1227.84375,"width":293.578125,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":3843316,"version":4,"versionNonce":1274107724,"isDeleted":false,"boundElements":[{"type":"text","id":"-c_0brUmUraKrmbX5jKAV"},{"id":"R6PnXia4UGN5KFsC-Wpjg","type":"arrow"},{"id":"-jmvaC-36-NwdMIWcWiQF","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"r5i3XHyqOpwY4FOUQwes_","type":"rectangle","x":427.29296875,"y":1513.609375,"width":217.609375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":837112908,"version":4,"versionNonce":128250956,"isDeleted":false,"boundElements":[{"type":"text","id":"M318oRMSFSGLcPnY1lmBu"},{"id":"-jmvaC-36-NwdMIWcWiQF","type":"arrow"},{"id":"9fxPBgnD_oVy-n7TTkixV","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"v0dh2Ml25vAZCNOC639q3","type":"rectangle","x":1075.3125,"y":1230.34375,"width":410.1875,"height":73,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":1224861300,"version":6,"versionNonce":197537740,"isDeleted":false,"boundElements":[{"type":"text","id":"L53y7_ZuB7-cPlLjcje4M"},{"id":"XiIS_4nhb2hrUrNvg4HFl","type":"arrow"},{"id":"39O5alw36UicoOuI4nFaW","type":"arrow"},{"id":"aG-Kuk9k8u6UsJthxUswT","type":"arrow"},{"id":"h9fP2uPzD8OXbCYwggc3K","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"XqlgV5qryHUtcLBWxFgL2","type":"diamond","x":1241.62890625,"y":1355.84375,"width":364.53125,"height":364.53125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":760015564,"version":5,"versionNonce":211564748,"isDeleted":false,"boundElements":[{"type":"text","id":"4VhpLayai1PvIiFSdsIqs"},{"id":"39O5alw36UicoOuI4nFaW","type":"arrow"},{"id":"jSWUccrkqMCq1wu-h78bR","type":"arrow"},{"id":"hWsWZfjMTdFiCS12ib-I7","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"ui_Bp_lNra-Iyh1JMY4IY","type":"rectangle","x":666.578125,"y":1845.53125,"width":320.40625,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":1248131060,"version":4,"versionNonce":1723221324,"isDeleted":false,"boundElements":[{"type":"text","id":"srFyCikUXLmRe7SnXP3Gt"},{"id":"jSWUccrkqMCq1wu-h78bR","type":"arrow"},{"id":"aG-Kuk9k8u6UsJthxUswT","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"aud37OeEG8FWvPelvauMb","type":"diamond","x":1341.23828125,"y":1804.375,"width":165.3125,"height":165.3125,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":880652620,"version":6,"versionNonce":577949772,"isDeleted":false,"boundElements":[{"type":"text","id":"d84b2xz2taE-TNS-_DAOP"},{"id":"hWsWZfjMTdFiCS12ib-I7","type":"arrow"},{"id":"1cF1w704VC9DqXQVx8KxG","type":"arrow"},{"id":"zwzI1Qrw9ukZ5eF7zX095","type":"arrow"},{"id":"I8CsQOyGO9vmf5InzvCLJ","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"i38IjWFYdEihKALTYV4LU","type":"rectangle","x":882.7890625,"y":2053.6875,"width":396.375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":543807860,"version":4,"versionNonce":1331902796,"isDeleted":false,"boundElements":[{"type":"text","id":"-kgYQkN9RO1fA2svoQBl5"},{"id":"1cF1w704VC9DqXQVx8KxG","type":"arrow"},{"id":"h9fP2uPzD8OXbCYwggc3K","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"xS4ROalPt0oMoUVdN9kOc","type":"rectangle","x":536.6484375,"y":2053.6875,"width":296.140625,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":1456580556,"version":3,"versionNonce":155595596,"isDeleted":false,"boundElements":[{"type":"text","id":"PtJDkW6C9Sk_e97Kywzzt"},{"id":"zwzI1Qrw9ukZ5eF7zX095","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"jl5upgEVZ9vnhR1Obgjtj","type":"rectangle","x":1329.1640625,"y":2053.6875,"width":350.59375,"height":78,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":1985383156,"version":3,"versionNonce":650831564,"isDeleted":false,"boundElements":[{"type":"text","id":"rlxelDPjbOJpEz4mJ4GnZ"},{"id":"I8CsQOyGO9vmf5InzvCLJ","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"sVfsGu1FyhfBlYc3Ou6hk","type":"rectangle","x":53.89453125,"y":99,"width":422.46875,"height":83,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":null,"seed":677563980,"version":3,"versionNonce":1155280204,"isDeleted":false,"boundElements":[{"type":"text","id":"OEcmTkyVdWCzQcf5lCOvF"},{"id":"8P-OXJEh8Rd5gJEVr25ef","type":"arrow"}],"updated":1785841671009,"link":null,"locked":false},{"id":"p0xiyPRe4tOKsolfnOjGo","type":"arrow","x":609.254,"y":49,"width":0,"height":61.7,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":{"type":2},"seed":514919540,"version":4,"versionNonce":444820724,"isDeleted":false,"boundElements":null,"updated":1785841671008,"link":null,"locked":false,"points":[[0,0.5],[0,25],[0,61.2]],"lastCommittedPoint":null,"startBinding":{"elementId":"T3vcajlYO20Uq8Qrchztf","focus":-0.0000016120365414871092,"gap":1},"endBinding":{"elementId":"rjHos25IFa2Z0ZvPYCljB","focus":0.0000011310084828211448,"gap":5.299999999999997},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"GvBiSfJpqweD4ScDMSwZg","type":"arrow","x":609.254,"y":165,"width":81.44900000000007,"height":150.19099999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":{"type":2},"seed":705373388,"version":4,"versionNonce":1864089588,"isDeleted":false,"boundElements":null,"updated":1785841671008,"link":null,"locked":false,"points":[[-0.5,0.5],[0,42],[-80.94900000000007,149.69099999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"rjHos25IFa2Z0ZvPYCljB","focus":-0.0000011310084828211448,"gap":1},"endBinding":{"elementId":"fIp9WfdRQxpkmWO6jbCHx","focus":0.008802026797331029,"gap":5.169563702891823},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"0vgfyXg0MFsngfgwusy0g","type":"arrow","x":340.537,"y":537.752,"width":130.43499999999997,"height":175.35400000000004,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":{"type":2},"seed":725573108,"version":4,"versionNonce":1249694836,"isDeleted":false,"boundElements":[{"type":"text","id":"3BvCR1UqJwp1z0fdUuS7f"}],"updated":1785841671008,"link":null,"locked":false,"points":[[0,0.5],[-130.43499999999997,138.654],[-130.43499999999997,174.85400000000004]],"lastCommittedPoint":null,"startBinding":{"elementId":"fIp9WfdRQxpkmWO6jbCHx","focus":-0.008434858691044008,"gap":1},"endBinding":{"elementId":"LE6KF2M1j7XAFAlpnRIp-","focus":0.0000020823262558892406,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"ZgD8Iep1DH6rkE7oFgkJr","type":"arrow","x":538.274,"y":534.323,"width":142.03099999999995,"height":178.78300000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":{"type":2},"seed":828681036,"version":4,"versionNonce":860895476,"isDeleted":false,"boundElements":[{"type":"text","id":"3OU_jpSIsBeeJCpRUUSw6"}],"updated":1785841671009,"link":null,"locked":false,"points":[[0,0.5],[142.03099999999995,142.08299999999997],[142.03099999999995,178.28300000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"fIp9WfdRQxpkmWO6jbCHx","focus":0.0000013571765480368203,"gap":1},"endBinding":{"elementId":"1-Nbg0JJdbzBYP5y7IlAe","focus":0.0000014873758968158864,"gap":5.3002500000000055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"p1_gfFuxue84a0kMLWotN","type":"arrow","x":778.413,"y":767.406,"width":100.50699999999995,"height":45.20100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":{"type":2},"seed":84377460,"version":4,"versionNonce":2082835444,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"points":[[0.5,0.5],[100.11000000000001,25],[100.00699999999995,44.70100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"1-Nbg0JJdbzBYP5y7IlAe","focus":-0.0000049109475072649455,"gap":1},"endBinding":{"elementId":"4NXUI-dSHd9AX3ylCD3HT","focus":0.02265998836904151,"gap":4.814642773369231},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"R6PnXia4UGN5KFsC-Wpjg","type":"arrow","x":790.482,"y":1055.803,"width":155.27499999999998,"height":166.74099999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":{"type":2},"seed":1355375052,"version":4,"versionNonce":1305092212,"isDeleted":false,"boundElements":[{"type":"text","id":"q2vSkWr_Fexl6gRejzero"}],"updated":1785841671009,"link":null,"locked":false,"points":[[0,0.5],[-155.27499999999998,130.04099999999994],[-155.27499999999998,166.24099999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"4NXUI-dSHd9AX3ylCD3HT","focus":-0.008849006546320766,"gap":1},"endBinding":{"elementId":"xHWksBtefA6Uuuerw7GOA","focus":-2.1289052104369672e-7,"gap":5.299749999999904},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"-jmvaC-36-NwdMIWcWiQF","type":"arrow","x":635.207,"y":1305.844,"width":85.10799999999995,"height":202.98399999999992,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":72315124,"version":4,"versionNonce":669750132,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"points":[[-0.5,0.5],[0,25],[-84.60799999999995,202.48399999999992]],"lastCommittedPoint":null,"startBinding":{"elementId":"xHWksBtefA6Uuuerw7GOA","focus":2.1289052104369672e-7,"gap":1},"endBinding":{"elementId":"r5i3XHyqOpwY4FOUQwes_","focus":-0.000002988139350477009,"gap":4.7813750000000255},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"9fxPBgnD_oVy-n7TTkixV","type":"arrow","x":525.353,"y":1513.609,"width":113.55200000000002,"height":745.1109999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":1062422604,"version":4,"versionNonce":1754023540,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"points":[[0.5,-0.5],[-80.14999999999998,-182.76499999999987],[-80.14999999999998,-246.76499999999987],[-80.14999999999998,-327.7649999999999],[-80.14999999999998,-532.9839999999999],[-80.14999999999998,-721.203],[32.902000000000044,-744.6109999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"r5i3XHyqOpwY4FOUQwes_","focus":-0.0000019242336663476144,"gap":1},"endBinding":{"elementId":"1-Nbg0JJdbzBYP5y7IlAe","focus":0.000001990068799862453,"gap":1.0917500000000473},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"XiIS_4nhb2hrUrNvg4HFl","type":"arrow","x":987.069,"y":1036.298,"width":293.337,"height":188.7460000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":{"type":2},"seed":144519796,"version":4,"versionNonce":1098705652,"isDeleted":false,"boundElements":[{"type":"text","id":"JJijR4YAbifJDYiGK_4ik"}],"updated":1785841671009,"link":null,"locked":false,"points":[[0,0.5],[293.337,149.54600000000005],[293.337,188.2460000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"4NXUI-dSHd9AX3ylCD3HT","focus":0.002055138247381311,"gap":1},"endBinding":{"elementId":"v0dh2Ml25vAZCNOC639q3","focus":-0.0000012189547465600792,"gap":5.299749999999904},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"39O5alw36UicoOuI4nFaW","type":"arrow","x":1362.239,"y":1303.344,"width":62.05199999999991,"height":47.70100000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":1088184012,"version":4,"versionNonce":1749925364,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"points":[[0.5,0.5],[61.65599999999995,27.5],[61.55199999999991,47.20100000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"v0dh2Ml25vAZCNOC639q3","focus":0.0000074505842643356935,"gap":1},"endBinding":{"elementId":"XqlgV5qryHUtcLBWxFgL2","focus":0.02229432902289312,"gap":4.81063220338953},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"jSWUccrkqMCq1wu-h78bR","type":"arrow","x":1297.358,"y":1593.839,"width":440.626,"height":247.25199999999995,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":280413172,"version":4,"versionNonce":801608308,"isDeleted":false,"boundElements":[{"type":"text","id":"_GAqalkaaY0ft-beXF92k"}],"updated":1785841671009,"link":null,"locked":false,"points":[[-0.5,0.5],[-389.3069999999999,168.53600000000006],[-440.126,246.75199999999995]],"lastCommittedPoint":null,"startBinding":{"elementId":"XqlgV5qryHUtcLBWxFgL2","focus":-0.005214014262943952,"gap":1},"endBinding":{"elementId":"ui_Bp_lNra-Iyh1JMY4IY","focus":-3.0208026405652745e-7,"gap":4.4402500000001055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"aG-Kuk9k8u6UsJthxUswT","type":"arrow","x":821.344,"y":1845.531,"width":259.61199999999997,"height":550.0419999999999,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":234792268,"version":4,"versionNonce":984909172,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"points":[[0.5,-0.5],[-10.895000000000095,-83.15599999999995],[-10.895000000000095,-307.422],[-10.895000000000095,-514.6869999999999],[248.21699999999987,-549.5419999999999]],"lastCommittedPoint":null,"startBinding":{"elementId":"ui_Bp_lNra-Iyh1JMY4IY","focus":3.820787328720466e-7,"gap":1},"endBinding":{"elementId":"v0dh2Ml25vAZCNOC639q3","focus":0.0000063174034673777266,"gap":5.251500000000078},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"hWsWZfjMTdFiCS12ib-I7","type":"arrow","x":1424.395,"y":1720.875,"width":0.5,"height":78.70000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":1386358132,"version":4,"versionNonce":1157204468,"isDeleted":false,"boundElements":[{"type":"text","id":"9AtX1z5DtsO5HlcSzezBQ"}],"updated":1785841671009,"link":null,"locked":false,"points":[[0.5,0.5],[-0.5,41.5],[-0.5629999999998745,78.20000000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"XqlgV5qryHUtcLBWxFgL2","focus":-0.014827064795831393,"gap":1},"endBinding":{"elementId":"aud37OeEG8FWvPelvauMb","focus":0.017722127365496578,"gap":4.800914829915351},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"1cF1w704VC9DqXQVx8KxG","type":"arrow","x":1372.367,"y":1918.16,"width":223.72199999999998,"height":132.7429999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":1007950796,"version":4,"versionNonce":1308024436,"isDeleted":false,"boundElements":[{"type":"text","id":"1EmwkyRVxkjd2TOH8biXi"}],"updated":1785841671009,"link":null,"locked":false,"points":[[-0.5,0.5],[-160.21499999999992,93.52800000000002],[-223.22199999999998,132.2429999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"aud37OeEG8FWvPelvauMb","focus":-0.012688110162931938,"gap":1},"endBinding":{"elementId":"i38IjWFYdEihKALTYV4LU","focus":9.303683744324525e-7,"gap":2.7845000000002074},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"h9fP2uPzD8OXbCYwggc3K","type":"arrow","x":1052.573,"y":2053.688,"width":105.89600000000007,"height":749.0700000000002,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":1403344628,"version":4,"versionNonce":914411892,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"points":[[0.5,-0.5],[-30.589000000000055,-42],[-30.589000000000055,-166.65700000000015],[-30.589000000000055,-291.3130000000001],[-30.589000000000055,-515.5790000000002],[-30.589000000000055,-722.844],[74.80700000000002,-748.5700000000002]],"lastCommittedPoint":null,"startBinding":{"elementId":"i38IjWFYdEihKALTYV4LU","focus":6.389196599770081e-7,"gap":1},"endBinding":{"elementId":"v0dh2Ml25vAZCNOC639q3","focus":0.000001239129061407498,"gap":1.2742499999999382},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"zwzI1Qrw9ukZ5eF7zX095","type":"arrow","x":1353.666,"y":1899.459,"width":668.9469999999999,"height":148.9280000000001,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":624345676,"version":4,"versionNonce":538531316,"isDeleted":false,"boundElements":[{"type":"text","id":"O9040E9hi915kKiR_1gci"}],"updated":1785841671009,"link":null,"locked":false,"points":[[0,0.5],[-668.9469999999999,112.22900000000004],[-668.9469999999999,148.4280000000001]],"lastCommittedPoint":null,"startBinding":{"elementId":"aud37OeEG8FWvPelvauMb","focus":-0.0078098669883421845,"gap":1},"endBinding":{"elementId":"xS4ROalPt0oMoUVdN9kOc","focus":0.0000016883870629446957,"gap":5.300499999999829},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"I8CsQOyGO9vmf5InzvCLJ","type":"arrow","x":1456.844,"y":1937.738,"width":47.61699999999996,"height":110.64900000000011,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":4610164,"version":4,"versionNonce":253373044,"isDeleted":false,"boundElements":[{"type":"text","id":"rXsTMTZdMy-1PxyHKdCK8"}],"updated":1785841671009,"link":null,"locked":false,"points":[[0,0.5],[47.61699999999996,73.95000000000005],[47.61699999999996,110.14900000000011]],"lastCommittedPoint":null,"startBinding":{"elementId":"aud37OeEG8FWvPelvauMb","focus":-0.0036172030506490963,"gap":1},"endBinding":{"elementId":"jl5upgEVZ9vnhR1Obgjtj","focus":3.5653801585446406e-7,"gap":5.300499999999829},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"8P-OXJEh8Rd5gJEVr25ef","type":"arrow","x":265.129,"y":182,"width":82.42499999999995,"height":133.20999999999998,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"dashed","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":1346410700,"version":4,"versionNonce":675356020,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"points":[[0.5,0.5],[0,25],[81.92499999999995,132.70999999999998]],"lastCommittedPoint":null,"startBinding":{"elementId":"sVfsGu1FyhfBlYc3Ou6hk","focus":-4.4381980926514737e-7,"gap":1},"endBinding":{"elementId":"fIp9WfdRQxpkmWO6jbCHx","focus":0.0011904910634382264,"gap":5.108338261073861},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"uKvLHYLAF5-grKOcdxy5c","type":"text","x":569.25390625,"y":12,"width":80,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":null,"seed":972710772,"version":3,"versionNonce":178605812,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"用户输入","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"T3vcajlYO20Uq8Qrchztf","originalText":"用户输入","autoResize":true,"lineHeight":1.25},{"id":"lQGHdzI_mc4yUXCDejv3p","type":"text","x":551.20703125,"y":128,"width":116.09375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":null,"seed":1631966452,"version":3,"versionNonce":1481787980,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"主 AgentLoop","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"rjHos25IFa2Z0ZvPYCljB","originalText":"主 AgentLoop","autoResize":true,"lineHeight":1.25},{"id":"rEkWazNvLy3EBJWmqFkCM","type":"text","x":347.08984375,"y":408.1015625,"width":180,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":null,"seed":1093080692,"version":3,"versionNonce":1149718644,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"是否是工作流搭建或\n修改任务?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"fIp9WfdRQxpkmWO6jbCHx","originalText":"是否是工作流搭建或修改任务?","autoResize":true,"lineHeight":1.25},{"id":"FJ8fesO5xzCrJU_Xmq_qW","type":"text","x":50.1015625,"y":730.40625,"width":320,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":null,"seed":1717839860,"version":3,"versionNonce":648749260,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"简洁回答,不创建计划,不查询画布","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"LE6KF2M1j7XAFAlpnRIp-","originalText":"简洁回答,不创建计划,不查询画布","autoResize":true,"lineHeight":1.25},{"id":"GjMpijZi4WfEhinOjhxWu","type":"text","x":520.3046875,"y":730.40625,"width":320,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":null,"seed":1426262388,"version":3,"versionNonce":1168974324,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"核对业务目标、当前画布和必要资源","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"1-Nbg0JJdbzBYP5y7IlAe","originalText":"核对业务目标、当前画布和必要资源","autoResize":true,"lineHeight":1.25},{"id":"PsxDkFLTHTHQ19uklLb_s","type":"text","x":808.4140625,"y":955.515625,"width":140,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":null,"seed":541702900,"version":3,"versionNonce":279258956,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"需求和必要依赖\n已闭合?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"4NXUI-dSHd9AX3ylCD3HT","originalText":"需求和必要依赖已闭合?","autoResize":true,"lineHeight":1.25},{"id":"-c_0brUmUraKrmbX5jKAV","type":"text","x":495.6123046875,"y":1241.84375,"width":279.189453125,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":null,"seed":46021748,"version":3,"versionNonce":354206580,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"ask_agent
一次性收集所有业\n务缺口","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"xHWksBtefA6Uuuerw7GOA","originalText":"ask_agent
一次性收集所有业务缺口","autoResize":true,"lineHeight":1.25},{"id":"M318oRMSFSGLcPnY1lmBu","type":"text","x":456.09765625,"y":1525.609375,"width":160,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":null,"seed":1982238196,"version":3,"versionNonce":1788501452,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"暂停等待用户回答","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"r5i3XHyqOpwY4FOUQwes_","originalText":"暂停等待用户回答","autoResize":true,"lineHeight":1.25},{"id":"L53y7_ZuB7-cPlLjcje4M","type":"text","x":1094.361328125,"y":1241.84375,"width":372.08984375,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":null,"seed":1267249012,"version":3,"versionNonce":1763456244,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"workflow_builder_present_preview
title +\nmermaid + sections","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"v0dh2Ml25vAZCNOC639q3","originalText":"workflow_builder_present_preview
title + mermaid + sections","autoResize":true,"lineHeight":1.25},{"id":"4VhpLayai1PvIiFSdsIqs","type":"text","x":1344.337890625,"y":1512.9765625,"width":158.84765625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":null,"seed":1126867188,"version":3,"versionNonce":1839514700,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"Preview payload 校\n验通过?","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"XqlgV5qryHUtcLBWxFgL2","originalText":"Preview payload 校验通过?","autoResize":true,"lineHeight":1.25},{"id":"srFyCikUXLmRe7SnXP3Gt","type":"text","x":677.171875,"y":1862.03125,"width":299.21875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":null,"seed":613573236,"version":3,"versionNonce":1060206196,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"返回结构化协议错误
模型重新\n调用 Preview 工具","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ui_Bp_lNra-Iyh1JMY4IY","originalText":"返回结构化协议错误
模型重新调用 Preview 工具","autoResize":true,"lineHeight":1.25},{"id":"d84b2xz2taE-TNS-_DAOP","type":"text","x":1394.06640625,"y":1862.203125,"width":60,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":null,"seed":1451619316,"version":3,"versionNonce":530471628,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"用户选\n择","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"aud37OeEG8FWvPelvauMb","originalText":"用户选择","autoResize":true,"lineHeight":1.25},{"id":"-kgYQkN9RO1fA2svoQBl5","type":"text","x":894.0966796875,"y":2067.6875,"width":373.759765625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":null,"seed":1997231476,"version":3,"versionNonce":1948420084,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"requirePreview = true
合并反馈并重新调\n用 Preview 工具","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"i38IjWFYdEihKALTYV4LU","originalText":"requirePreview = true
合并反馈并重新调用 Preview 工具","autoResize":true,"lineHeight":1.25},{"id":"PtJDkW6C9Sk_e97Kywzzt","type":"text","x":542.9169921875,"y":2067.6875,"width":283.603515625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":null,"seed":1936230132,"version":3,"versionNonce":992026956,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"workflow_builder_cancel
结构\n化 cancelled","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"xS4ROalPt0oMoUVdN9kOc","originalText":"workflow_builder_cancel
结构化 cancelled","autoResize":true,"lineHeight":1.25},{"id":"rlxelDPjbOJpEz4mJ4GnZ","type":"text","x":1343.6796875,"y":2067.6875,"width":321.5625,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":null,"seed":539199604,"version":3,"versionNonce":1542809972,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"previewConfirmed = true
恢复同一\nAgentLoop 连续搭建","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jl5upgEVZ9vnhR1Obgjtj","originalText":"previewConfirmed = true
恢复同一 AgentLoop 连续搭建","autoResize":true,"lineHeight":1.25},{"id":"OEcmTkyVdWCzQcf5lCOvF","type":"text","x":66.3642578125,"y":115.5,"width":397.529296875,"height":50,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":1359108596,"version":3,"versionNonce":394729420,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"重要:不是判断是否需要 Mermaid
所有工\n作流任务都必须确认 Mermaid","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"sVfsGu1FyhfBlYc3Ou6hk","originalText":"重要:不是判断是否需要 Mermaid
所有工作流任务都必须确认 Mermaid","autoResize":true,"lineHeight":1.25},{"id":"3BvCR1UqJwp1z0fdUuS7f","type":"text","x":200.102,"y":663.906,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":319267188,"version":3,"versionNonce":1508907764,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"0vgfyXg0MFsngfgwusy0g","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"3OU_jpSIsBeeJCpRUUSw6","type":"text","x":670.305,"y":663.906,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":null,"seed":2052204020,"version":3,"versionNonce":283786828,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"ZgD8Iep1DH6rkE7oFgkJr","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"q2vSkWr_Fexl6gRejzero","type":"text","x":625.207,"y":1173.344,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":null,"seed":1962405236,"version":3,"versionNonce":2023267444,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"R6PnXia4UGN5KFsC-Wpjg","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"JJijR4YAbifJDYiGK_4ik","type":"text","x":1270.406,"y":1173.344,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":null,"seed":1235441652,"version":3,"versionNonce":1881445580,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"XiIS_4nhb2hrUrNvg4HFl","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"_GAqalkaaY0ft-beXF92k","type":"text","x":898.051,"y":1749.875,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"as","roundness":null,"seed":1363795828,"version":3,"versionNonce":28634612,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"否","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jSWUccrkqMCq1wu-h78bR","originalText":"否","autoResize":true,"lineHeight":1.25},{"id":"9AtX1z5DtsO5HlcSzezBQ","type":"text","x":1413.895,"y":1749.875,"width":20,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"at","roundness":null,"seed":1248573172,"version":3,"versionNonce":1389370188,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"是","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"hWsWZfjMTdFiCS12ib-I7","originalText":"是","autoResize":true,"lineHeight":1.25},{"id":"1EmwkyRVxkjd2TOH8biXi","type":"text","x":1137.6353984375,"y":1999.188,"width":149.033203125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"au","roundness":null,"seed":1050422132,"version":3,"versionNonce":374017908,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"revise + 修改意见","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"1cF1w704VC9DqXQVx8KxG","originalText":"revise + 修改意见","autoResize":true,"lineHeight":1.25},{"id":"O9040E9hi915kKiR_1gci","type":"text","x":659.1867734375,"y":1999.188,"width":51.064453125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"av","roundness":null,"seed":516850420,"version":3,"versionNonce":323408332,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"cancel","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"zwzI1Qrw9ukZ5eF7zX095","originalText":"cancel","autoResize":true,"lineHeight":1.25},{"id":"rXsTMTZdMy-1PxyHKdCK8","type":"text","x":1473.3526015625,"y":1999.188,"width":62.216796875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aw","roundness":null,"seed":1004697460,"version":3,"versionNonce":1184956660,"isDeleted":false,"boundElements":null,"updated":1785841671009,"link":null,"locked":false,"text":"confirm","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"I8CsQOyGO9vmf5InzvCLJ","originalText":"confirm","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/workflow-builder-preview-decisions.mmd b/diagrams/workflow-builder-preview-decisions.mmd new file mode 100644 index 000000000000..24976490bcd7 --- /dev/null +++ b/diagrams/workflow-builder-preview-decisions.mmd @@ -0,0 +1,34 @@ +%% 普通对话、需求闭合与 Mermaid 确认 +flowchart TD + INPUT["用户输入"] --> AGENT["主 AgentLoop"] + AGENT --> TASK{"是否是工作流搭建或修改任务?"} + + TASK -->|"否"| CHAT["简洁回答,不创建计划,不查询画布"] + TASK -->|"是"| CHECK["核对业务目标、当前画布和必要资源"] + CHECK --> READY{"需求和必要依赖已闭合?"} + + READY -->|"否"| REQUIREMENT["ask_agent
一次性收集所有业务缺口"] + REQUIREMENT --> WAIT1["暂停等待用户回答"] + WAIT1 --> CHECK + + READY -->|"是"| PREVIEW["workflow_builder_present_preview
title + mermaid + sections"] + PREVIEW --> VALIDATOR{"Preview payload 校验通过?"} + VALIDATOR -->|"否"| RETRY["返回结构化协议错误
模型重新调用 Preview 工具"] + RETRY --> PREVIEW + VALIDATOR -->|"是"| CHOICE{"用户选择"} + + CHOICE -->|"revise + 修改意见"| REVISE["requirePreview = true
合并反馈并重新调用 Preview 工具"] + REVISE --> PREVIEW + CHOICE -->|"cancel"| CANCEL["workflow_builder_cancel
结构化 cancelled"] + CHOICE -->|"confirm"| CONFIRM["previewConfirmed = true
恢复同一 AgentLoop 连续搭建"] + + NOTE["重要:不是判断是否需要 Mermaid
所有工作流任务都必须确认 Mermaid"] -.-> TASK + + classDef user fill:#eef4ff,stroke:#5b8def,color:#172b4d; + classDef agent fill:#f5f0ff,stroke:#8465d6,color:#2f1b54; + classDef decision fill:#ffffff,stroke:#7c8798,color:#1f2937; + classDef terminal fill:#fff4e8,stroke:#d78a1d,color:#4d2f08; + class INPUT,WAIT1,CHOICE user; + class AGENT,CHECK,REQUIREMENT,PREVIEW,RETRY,REVISE agent; + class TASK,READY,VALIDATOR decision; + class CHAT,CANCEL,CONFIRM,NOTE terminal; diff --git a/diagrams/workflow-builder-preview-decisions.png b/diagrams/workflow-builder-preview-decisions.png new file mode 100644 index 0000000000000000000000000000000000000000..939c5aa89244b0524f33b34009f1b01f7971a10c GIT binary patch literal 468663 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 z z89b&(i5$O>B=6P;eEBDIED=@^wU&-e$Xts#f_s0H^*M~% z_J9%D-LcjQe`X`%(HIA^bHKl%fLnr#^t;k|I}T$3M|!?P{5<=?i}f{o=#hkR600UM z(J7V({~KMWh`=uf^e7m9%ttR3M8+(9O5jtJU^sN!SO0K(*Sk)~>10!&Zo5<32Ga=R zd}E!sukOMFQtw?-(!cfcT1yre=FT-dF&u4kYnMDcwnW$X3DUF;p;(YXQ9#y*qz5Cw z?`qr%1DEBU-CcU(-PEUsP;OD4UkW)nIb>M4e3v(1;O)q&F}d~2QG!TueByB5Ka40PajGdaXWZ3WQm6_FgN92dX&~O@qJCin%|pqPTlmz z+AZSzS!Vwm(L$f{K|DY^no*q~(c0uw#}l>9=UMw3orQa6~_nDum8-%(5&f; zWzb|rLlTVOT)9$h+u&S>$tsI-edb(Q#jI|2RmSRXrrFM(l$7Kvs7z*ka%RBz^5!vr z$VmF26}xkf)ZsM!Hu6XLL!uyTksz5F>xqVvitDrN*M3LYt_QvRUr^UqTu2OW{O5byiUI?mLwjiez)Z6%!@hj#%^!RM#|1&Shtduu3>S zu>2Ht+%MGfYo>XXIi$+2Tq+{KM#cwwmk*a61U8SLme?_X#+XQN?~>*L0oIV$V3g!^ zn@tjH%G~LsFjFj*A1@`Q*gG&@6~=vIf#e!hQV881q5dn}RX+cG8r&E=%J()59udrY^ru*6o*pq$A+iI6M~*&zdrvCI#u_btkdb+mcG}1SY@jCc*7o;w{9^b zuy^(fH?LNl_GBHiS@e?`2eDBs#K z+7+%n>nb8VwVUne^uRg2LX9AVaSc5()B{V1Hr*uWaebDBh3h~Q$Ith-7$=TI5Gn(8 zmt}+k>85{P&kabVE%IUfAJUkuSZ1b}180LX%!`b6dygFP>3+oeiH3Hs_o1I2ITdk` zsLFLV6>{Tygsv9WHftv3jIoJdtXF+vkiOS%aXt^MoOcDWAkCLlEKK<{SZ7e604jjq z?=GAP1I!v9>tWoHn&=w_(@fL~E_Ww8^;G?Elz1hL-{VCMD^7AAR%)ZKNg6Z$MH}xB zvA0@wD$XF|gs#yuQ|_^zYB&2|>xkYTPa(2zRWLwCH5k{aTyK35OKD^M{{9K^o*T^5 zdw7(x@7v3#ypML|+Bwp9=A72PO~(6+CcZkp^!&H|@r;R4h)_XQSblkUY*vZy+SJ(k zKsGoG3ag=2d=gyS79Ysp9Jmz>Y6s;cVMbLw=oRAG&u6GCgbZ&YL! zhjcwPkynLC%enp{6AByuZP{l)QVe`~6tYdw)S%vO8c2VzwQ^(h8?T^1x*Y;W#0w2W zBUsgg2N826lDZCl<39WT=G{1G07UTL#4Rpfugy8<5YzF1{X+ALL*T1_v^!WUnBeQ}&BwDPyu@=qH)yO!mB`}&XE7Jq5Z zU%Q)yfaCoK= zC+lStOvAeO?%lh!rG9=s)aFI?2@>8AB)AJ>oVo|RvZ?};#vV27HyxV%rl!^nvbH|5 z`eNy9M@3&hm4gP6c&r+IA^<-KWp%pDf^69}m8iWEMD~GdnrBzp7NDDp7v;Wl0}0AF`84 zj{Wa~7Npo6GIJ@4n-NY(!{s>9Z^(McHU{Pboh)?j+l$1Uzg16rI>@81E&PwTY2%;D z8+_+a@i0)i#=xCymS=ytzn;(M(*hW}cW$RHyBG`1IGGg=hVLTM`wdvI*&BG!VBPsdsNl-xTu}GAqn??9RDV9jlafF@Up1lG6rY(Wbs~zKt)!zQ`#g z%HExawUBI^`298d-a#AFV#~bW`ke@Mfqdl_%UoO4-htT{^5Zp1qvLhjpEAvhEWvSo zxR80NE$rDEwZEswF|YlN;)F3QRM-<$0U|>mvnMwZ4936nQ|)>w>P#2v)9%u#h+2Pz z>NHgLGW7R=jdibg=Z|v`2*8{wap^s_`R-&WE)0H!7Rg5>&|l&mf_8C zMlfY7^h0(`$}oMYK2*Bsd*N$l+vi;wZF@T$-v(8mobjfj@g`)W1X4=FQS)uQgWs*HPNy>j5}eMCc>qbU!VAsG}TIC&M6pV zJju@+kLd9**&+MZef`WWZmpL>kXsgT<%+|QrJx!nY@JFJaf>yqnoDg<;9SEmJt^>@ay1)UUQTA_6VA#g<@GSqyG6j{c`sdw<;Tz?!C+;o+}VA6fn*X{5$nr|R^Ko~IP@{pgVnwL z@EVR!IPMQRl<2*KX}9dX7Z-%TG@zDXqxE>=E6CxkbufvK7RC#{x;cL_^JKoeN&Vo< zf?CPJR6)0)*4g2QF)`a`fWNxoIW7!G>?WQLD?k|e_jWQ(3aYCNcta)hhYI^P7PIJB2s27`6}_4bK@8<%>a zmIJL}MyUgF?KOr1Ww>0oApVqOOqrb?3$}b+-gDW@U00EjH&oD*prBbcdR7WZ-bkh# z@V(mZ{ebU1VmyiLfyQU|4i)+$Y(zUg+Zg0BhZH(*i5W ziY2?@Z-byM+`3?q+i+ClGw5Na9%*Y>T6)7p0@A$fhCcnFi1$hNvS|k`5Pit*+eiOR zKbXo9oh?b;b86^`NQ%#{)*D zsDFV|&zAfrA}d%x1xVC!!>Z5s4vIAoe3ms2DdXzQDTwtsG*@R`{i%u1DX7I}?xsZf z?VaFSgSQ(FQux#1cJFXYY1eg!K#r6|k{4T%hFfcm}D|Yt_HWQ#GQskoE`EDijc#^2f*TzmnU$Ylkjga`pK( ztmRJtOP9PV;V$T9OYGd#a5SKQ>hA9O2u%cNPt(Z%W$JI5M7mwF9N`cYcX>`359Ovm zco}!>;77vLw)uH^@0UmC02})=hXRg!sA`Bcof}Se!h-Oai9x1i{H;DD`nmHEjWsYe zB-n0GKX{+B`}`msD#F<3b?7}bXFfL&QE<6$lHDal5=M^P*pg{;aE+ zjL_<6VjU4e{#}6ejX2c`Sa+BT6v3yF8)pbh<~;CMR*J z*W0hTs8ud1`2E&2{nXp_87BIN9KH*{DAa>hZ=u>~jTR_QnB!-c7habzPx?wY8`=>e zF^~eTXKj)a`7oWr9bf2qIl0+m)CV$rhtK8~KQnz9M#aScu_AK+Ie0Rw`*LIJK_x_9 zFG``IxL0Zdv#E zxN`iH_MUh6b$7KSg_lhl$jwZUJ^YgbT!;sRh55O2NCWNOEwqW8HUbbZY9lo@b%=29 zk@Z!lNQ_kNXMwz=me}r(H8nb{A~-xk$I#n*O%5FRR3DqVR6W0r1Q3BEG=>KfCk{1J zo-G7q%f}x@2C`3=z3p^-OD^zzPtfjLToC`C%(*o1_5$l+mxPlg3>?}GS=>|6#rp^2 zYp-ySLAU(9S2k}6qhS^OIMP|x4I(Kxju&uwe+3E=p7o?aJRZoSd9Y^M@*YBj;)D(g z4TxHPq`!9cYE52*;EC)9WKWa1j3LULY0%p8Sh43%VAarRlVrnnk^w~^zy>l)7De0w z3GE7$|6byDWUGhp20#p&(1gqiMwgVa@^D_FDGRp4S?!o+4|CwA2L4D!`=UX)XJXE` zufD2?tQyKOd5CB&1tx|r#RgQAl}#TCU0)Iigq_&&e^GwiTcUT6P_5NYcn=Lj)AFR@iQZ%BY095+aSr&4x zK23L)>bwS%>Vf6c;H)se)}>HGqW)@8zyJsC6+iFsdtCPqJ4Asa_KEY3%$Zk|qMW5L z);qN_Ucy<(P5W8|-NPVmG6eB#*?B0!t|hlTkdjfrgmaxknrwvsxkeNNC|D13V+JXj z3~&IXKzoQC={iXP;x>(ya#RNQGC-Er$^=%awKTbC!=oo(?yh)l-zEjE9&ekora@qK z^;>7DME0-z4bnJCt3ke<0KDub0g&l)3x8)2$Mv-qi`!+gq8>k5;;bbi>x30iIALC+n!sW&wfH8B%gdhyi>u#29!vH8((BYzRAER_Bq;`U{mv?lDqUP?u}~8GpNy;_ ziW*{eE}Nl0Ew_IUIm zxmA{1(_<*+g&!HXb?FG>xgG{?Xa%VGd1;KY5{P*yiCTI46*Zb6j0*w2A9RdL--@|U zl}17gU5<9C&C4dgyUvu8PI@l&*n?T6ZaYRfFbUp#9Xl4Zl%=EfY3GOF56nU*Pk2ra z@Bx5c*Xd+wnY@K*AAmKQ0t8}a$%f_FZ((^T66#KHgg~8uAlaESXS!|(mxLC3O{oJa zpW;0;ifS;1DVl&IgR6|Qj$NaQA1=5-chSA4?QGU5^=Ki%!Ir$}vJkpYX}XV&&YRl` zW1bKdkLrCAm33Mh8Idt2aGRCZ)rn5l0;HNeA};*~5N&>hbmDHmzn8*4C-m*mB~&14 z*xG*SSG;~CzhScP{OohPmP4^J9?w0fPybqC_$EVq;f8RKzX7C6q%zztqo)WYIa|n! zRHjM6<&=p1##$gw2RQeq)_ilAu7DBms06f)j`T@RJI@tm2pD zlzFm%NMu6hQa`n#VpDY4vqQ`{fP!fUygt%Cg6NqBShFb#{#en|Z%CU9U7qf$c&xl` z&-5ctNQm$S+!#IxiOH9#>GdpYr#4NKCFOnJ(qxhKzZ(f0?6xYWjzo>cYkD7 zI^OxRrdc@W9K9Gda=uY$3##Al>ON8~2Li4WPGh1D`UIgEKY6P^LP+i{4SMsG?*WC|AIYcHm;_ZHIdVkQ zxmQOL8j^lVt^B+86iYve#E~$fkU=FoNa5g|w``E}ujc>MII99Qau-}-?IRUBzLWWm zVRp^_cwth0dB?1@kr{~m1=A(QCyl+d(XD-c!LFbu^GpeQk~XP5MC7dlew4ge zRdV^Aj2lJ%v+ZAZqFRY%EwkbXLFT9;3f4o)1sS_5FwUh_#sQN;;XVFC%xk@0`BDG^Dr z1iiqSxa$`rf0t8v&rf`PexZ&B0{6EK()GBTa|ez>kWHC3(GW6kzXeR!6c}9FTk`9H zAL&Udgsbg1c#%umZ72dft^(UKpcIk+PrDv2U1*lhAYu!M^;v4bUyd4OoZtYDFi~cr zUjKc9Ku*pr{MIsS>s~e{Cc%DnYenmpSG%^Dou8kb=zdMUCj#EO;!P0s7HMrBl%@_$ zU+|9{K-okA){9TXc7Sboq@&$$F%p0zjsMQPLjhnEA0d|P?!s^e0lR*eOdbE>gK_yZ z2nwVEa6U`$+rRI@?_LrB6t76cRvDE@9kx&iY+IzS^?L927!%y$!u;qv77JAfVJ2%Q z$^k$qCD!Ow=(mCeM3=P+^5X&#=RR~0x)H$y=4Y|zL>P#^J~R8_rvJ+JM(VC)gm2ft zH?Il_#8~oRdd{bRK7lHv*qLll7!Y)j8iYnrnBYxWnf@2*5cZBe7$&*HnPy5_@p8OB zA6JC~mrYxDH0e^rpWQm$K7xf1as+5e4Fto1@p`%IW)cpopVzP2JPTyivsQ#GKp zG&<&ZX}7APO*I?B3Fk3O5Eoj?4}iisrC3x;cO1(fI{kO7x*Ntx%}U1)zZ$C&p8$+) zS|75Qz5mp9zb*3`bn)(G+r|0pzAQ(I`nEr&?aqM^DILoHNsFRUkRyZgZvecv*m4X- zPFD^F5fXN??aSuSCj`MSY}04Q{$fFx5U78%dxz}!A>*QShWa74g_4UV5#s6lODGZ< zgR7v|6Q}d!wE26C|F(U`nQ<>JHmC#E!gcn;?Z}vz7zM46|28NIFo5?fKqU?=Ub2m1 z^jyz40%wyAaUi5ozD4@Ug6H*sfjn!wB!k5;Liv()l{vjbNc9}u?nvZB8aUrft0_48 zpETBpcN1r*sXyRI6=(0r@<1FYt1>}W`emCVM9S8m4i?yMj-P>i{c}Jnf?gN-XfR{c z(Aip2u=;4{n35HK$^@SUG9 zw%K;>4S$U2|9qbq{ux2Rdtrk<01#^hvLUxhH?OG*d0QaUz@_`m|2fSWM}ct&u7)NI zJinx%=;+6Q=(QJAX{Em#res+lB2zN+YiINGa~h^aUGAjBJoAlw1rmK08}&4l>%-;L zhyZ$#Qk0R^HC8Pj4Zw8;9)*6=B6-Vf6|o)}Pz!niHiSMUM0nH??h9T?IARYN<9qy|AI}X4lkj`{ z0)Q*&G!$?%Ues9VRN=r-((}a*-B@v-B*zqpkcf-NLh?mJHOWD{39-)B0;h|SL_~pb z8(Y6I9g7{e1H@5X9RJVb5v&{?cK*G+=Y3MfP)Zbn^Ya}~JJ2106ioGwh39V9Qjw}k z(&7mJlcWH2lLF!!VI%YY$)J8_9mNZm6ZieQNQu=#Ys8QbTsv@^!H!-e6Q5#r=t3=5 zbFo(*I1HKk6$wWxP#E~aT3R7KV7;*T zBY5=h%vcJ9RS-T=db6CJd7Frb8rTzKEJE*$Bf!Zr%2)U+2VF<5C?LbqxvzG#PFubl z7-&F8^x)bmAP@AgwkyU(8CZ2YC+kHHkPdKUyA7X;6*(QyRUWPasaM>uU%#H*7stQV zkpr@mt+re&k9A_P958k|7F2CT9d91-jt4k_9@6j-2ny2t+N^1?d68>Mfwt5?bgf!U zqO!Du4t20lBdJ<|JcY5=RdIK#<>oY3NEoPm_T0(MM+hIWQ*B<+;y$BWQPht%u{5qk z6-GX#AozMA!cqE)x+w{5C^_3*N6-x~=W$z)>GZK_A~^h$@B}}o_EFyso*sdL_aNCFZ-Ywg3c8e$o05Ej5qF< zHNCxCmVcL&b0`1}bHsycVyjy0<-a~GX*CI~Y1ZtyT`+6(0Lsc#+8QD}25 zQce21d-pLXaO`xF6v-~M=KnX)TA=?}EB@kqKsr4poLa&}GoyRr7k=bjVkIV}5lpe#ax=+kB%a+Bkn9n0}!DSo1DWj~d7zNRMkub%$x8@LMB=3Xm|DqI!4l!=dE= zAS#hHr5&<#0q(~5?;F2rgY??mU%hw;?~WA^0A1-uBmvk|UwdgOm?htP&WaKr3jdN! zQBjd-s7N|lu^zk_!6xlm`Hf6}*YYzao8#A1G;E$=4W72#qZCLeb)-6~tXzSBCBO|( zOt3sbw#ezLVD+n|BSOTNN$P2$AOyB&tv>^vA~P5;x%Oth%s6n@S8l@wIL~bC739tb zZ$&AVUmmG^f{fx6050`joYyU@ymf84JPs%24_Td%&}`mSpRO-@xl2`7-b>S%lyO}J z6Vxl;T%|;JlqLT=896|dWLDJ)f*@rh3tfJz2T?IG44r`@qp)o_sA+KL*D3M#Ad}AcoOT!lg0x3&i5sm2<;)*-5a(wj1mn2SG1n>DF!quW4ITkz1DcOm}pc zyq_u1%cE z69s|}7QFOu6oEZ|K5cxk#TbN*L)y#%R^s`7Q$Zj_HBruoOGf6TU;7v&3}%>REb^aS zE$&+VIx$-{)Cz!IamHE<+Hk(>;63ljX6ws+wcIE-1MEu9PW#3si)f@k0RrtQZo}VE ztU;b4CBa8--zN4BC(Pz`H?jP6=rB?Q9Y&lI<*n}EJ4t!8;`Wi#?T&~NG*gGj0nK6g zrItK6I{!28uB#y>)%4$4q@+;Yi7ZvBIc$jhh zYit2O5l~rA-rZ~rCWm_3ZvnCqLm}f>6@op8Q5o3S1{T#s_AYHzh%_J|AlYkbC=A50 zt_As}-Wm>;XHBbp4`Lw7weBKt0ze99V@t zyWvvtWTg9+iwrp2e;tS2r!zFYxDYOIB3t1)i?EQO=?hiEJ#55_LtSGoQHfuuJvvk} zXAeNcH83aNuS>#Pxrt?fTLA~=&!*qiy%aHe9bk3NGPfY~;#9Gxnhw2RWX$MM(F<^O zgkUV>x)iz%3qfjL7)a$$fNlIuC7|XdtCvaqi5O@gyvHUVJ0v#~aT{tLmfz~~;J1U2 zFm)#|Bqa6m&f7~*!j3}@UA=r6bhBHCbp=U-{~Y8$FHE@le}0$-G^7)*m6ZuoM|Bg@ zezX!~_yB>91Sk4_E-eoc*Ty;cBP9eX2PUVBiCR@|N4!;hByBflkxB&o=zn&6LWf;< z#P&56A53z1#WR9TEeNwFgWUuP@`hOx8p|ykNEOjTjY5L%FH5n#id`1~D0`Q8t_HF$h zZtZrj9$Ru0V*! zw);#$S&!{uM5%?pg)C@~wFfid&cLle(42}zNC5aH8fqabVB^m$M3~muy^i-ucCKh& z)L21=*jOR^1p$&aP`Z*HPvLQg5kd2(;298StO6ZNu~tGJ?>r$UTz8V^soC4$lV#O6srdLeau^y zZGP#car^vHbTFq{Za)&n!li#}b)3YiEH}neiCbQBjy1tJ5EC}##CiCaF3f5eWuD|? z;x`BdWZ0zS6xC7%93fHxQaw_Z<1{GVYJLzpmH4xutcs17iVRyuLuds1F#Mgt){&P4 zu#6@m%>k{90Q_OvQ(|`6E~vqxu(yoI=ttn%nG$QIL_VGnkWSmzDydg);0I|2o6HBp zkDO3v!c7lR{r)0>2B$l_Wx0H2$L)8ia4ub020uLm!`^=Dhff@UjJ?})0&qy^+~gx< ztWeLgR-i%HC_WrF$fpx;LR#N&Qsp+=-Cv*YYd{dEQq=Ajs{94I)P^*See4iEW^geM zy-@df##w-<7(hI>Vkjmx?i&{*ut$rYtN8fnj@&&(8-PO5 zH*v!Lz&f9NrrLOcB*Op?{Pxs+DJTF`<3uT9w(j+@;D@j&cn2#(Un1mip{li9+h!DK zR*nff*Rzb*{9@{@NxFinEO@jN1bDR*#2q*)*;e%*aKakhLvWy@Inz3!aO+hjo%WuL zlAKY9iq{rzA8=d#29$t-_a{bHCC2OO>ZbRHTv>mI-~!UD6rf-r zshgHWN@*`{n?FQvK9%^)C4)NA%Q*4>==$z>D&PPAh?J5_c*{yw2vPPdNwVj$j}l5| zvK@z(%FNzmlr1~QEFrsa?7bc1SjRXVe%G<;{r-G^|MU>&-1mK5_jSF-^YwhbF1{p1 z9~Ur>6U0}~5!jPn1jQFT)QS&~0Nxgzf70yV48RQ~Pp`eZ%z@qqmc=)e%Rws_Jp1pO zQJD^?;In}8LRoGo``#S&om73CPK4^r%8<&$fN1q6D7;0dOA7x-ZF7vE^3-*FtTZeK zjL}}7u)F8K0uh-ny_hyWeFgbe@bIv4lA<4Y)V+7~n83UGBiu1v-$o_k`Yq*n$=FYu z&#vQF#J@b>-uC$d$XfY^EjJym1WFI%%YPtbx({SStbikTYVD{46~`(35p}&qR$TbR z6}Z#S9Wl6CYU4Nmz35(E2vpSH@)-kZ2nm=^W$G6z@9b>ZaA>86Xl7_P-_tPR+5b|+ z-2@O*s)LjeA4qKPY@t6z3Q@>{(n8b!^tB{v;t71VXt_ojDMfhl$7wux1d@hyo7@3_ zQ*F#=9t;gYB_ONM1RlE)L=j*~-H3Cl!UHLuzlkD1bDn?Cz!SV6@OYdQx#=~cGNwJo z2dGr106}IDx4xjwbNPej+CX3oGR3w;+0*ZQeM9gTsp#y*J=cwwvi~8F;O%A;X#Q>4 zd84lEIFm7o55JF|c4dcxtb4CEjnaz{-+zj`=bfiNdM5++5;m+4zO(sR?Ng2T!3qUZ zbGm;mtRv;3v7i@t0n=Q$02pSE6?Ne6Tcv0Y58ofxKMD!J-~&AIRJvA;wF!CK0X<(qs;>J<+4&|RKv<^uG;AVA`2JWehiI4O%s!ZrdCko$5y zJA(+2bjt7;e7y`9sG)$a@A~|j-+5b(s=bnwmoot-zXWI}L9)Sgn(Eryp#=+8QBl1i z*d3fAM5<3>Q|N^S^pheDK9o?56-8>TTmCg=Ri%Whf3inl*5(MPl+N2ih5@SgYa3Vs`>rlzvg;SGFJ7d{|DHXt)%=LAf|9#0PnAuk zug9B+cvE8V6ac1q{dL~*)u7ZbUjahJ5AcJ&wbD{1uv$BKKOvE-plm{gnOn#$I9Q-w z9e6fz33%_AE`7`HFSkGj6*QL#GHZU@Vd;P{5Kpl7Fp8a1CHy}cjll?#v_TlraihBI z8V5c~mj@WgquzoiLF_6Fy15Tu1Duq#q7#$}?#*^)VP-*|b{`BBpI>7O*~#(JO&~D- z3FMVLz$>kftM(p5l+u@oLGcL>$X=kK;Xs{bk#`VsUNolRfAm(a5$~-vo$w&**vab@ z|D7944&(gcp0KHi#N*czvY$su!7EZTBI2D#PpJ(}rN#kl1Dd9t)yoaJZ3@IGz`}Ae zx-WXg6(THjaigvve@(35Rku+b838La&-fc5U|R$OrIys|&ZD-5(32ro)oueaQ^LzB zAj=4sNzED981>=(5j+tO-}w!bm6e?_--o$^E*OjbXYEvi7!k+a;(SGrPqp$~oFoi^ zhx{%HSziOo1sPho(ju1k`1ci9P5xlu^tTb)pI{wagX1vaseMn3@UlR_J#`v_6<5I4 zfc}tz-fp%LU9qJMeSj=@qH&6htlWY9fGvYZfl*I+8bUadq>PIIt#*SCNz&HQ>R9*@ zB>wn_A|MQSgAADoV7#%BcWRrC-PuiOIE+h5U0Ep-%iCu%L$Rptc=X5crB8vhsKb$qx{Wa66znKFBe`G}9qDJX-0Rc5Z2Uh3SCy zB@^eqEMNbD*&B~%fN~Hs>ZKKxdGe8#r)rL{>4;HtBxuEINE=#hgNR-M6lfm-H6*_F zAdja^#=Ia+M=DQ+s#-`a;gcRb*)6Xts8!tKF%b&6W4ILZB@0{e z6M!xEfc9w|NWkLrf?04ugR0mAN4U@gjOMe#X(Xzb;9?5d1UBT||IcM;G$0x#}VM2q>GK20b&3#l3 zH5wqAoB&X7@w~=7(hjw;i$lZZ!;-9PvaH88e^99OJF-3xBFV*TKEXWQAuL<5)ECJeM57cvv%JrR=4@E_1m=dhtWqD|4koy>xJd*`V_{^Md*2~0)Sbzs;6C4hbRkj%B z*}pvhehjdW2L%CGFibq_qA3dj=Cr9me7KRTe211|91kkp+@UO=u`tdS)Kh&@^{oJb z+VJ-6+xzJDzL5Z80O4dn=zRtNx}GwZe0-I+H4}^^ND}5+9=GuTtoBh08or0GcBG>b z??spR%GSb;;r8$Um#g1X)BD!!&xOy1BaX{G|wWOYwQ+crQcT zo$YTzOBi-O;oRPq{rjKmp;hzpVYKa^0iF3D8Djuaxn2R~h0a#-gQxY(B?bx=23%|l zHIKnB3az2`Oo+8OK+tKQUO~-@Uf@NEeFV`0H}GX4ASbUWHpRd7#n5B8zW|cGF%M^h zaH~|k_Gz83C6Dby10}4`9+&}E5NZi_CG2;mBWhy44s`q*^=BExbp~B$vo^X=+Wjrm zewPG-ekcG9D?WP1*D3MaGgirE5A59Q^YhoV{-xusr99c+6ax_p2S>%(1{*&*7`m@+iMuFs~DTf%KE1i(C~uA><^PaHwsf0tIFfB$n05Wlz z42~eULutnV2c^!dd+z$HW5N3&BsX4nIRkXOWq{O%_y!8Zynt!nJ`4DW!GQBL-DjRb z)?%!em2nvXz&m^z1WS2dY(0<+T(Ya7RR#dA@FXM)WO_!l2f+)ejI380V|gizv}5kp5ZBbrhtjC+@`>bkFuWYJIv1GgGzkc2T+_114&{7 z=zX(_=v@QxR0E(2V?x`p$BsPXo-5}e>^Q(p4iC%=2_*s=)|^I{`NFP80Hk05i`jACnPN9<9 zi!y4^{ErI}i3_%Q4{J!(ipSyr4yPC+tVYrebzgez%P3`3fkkm`uJzeWyrwo%_5OQ0 z@e6oE%k$gbbY1{eM|P?a0Yam_));t?*+JQwHls)X*?$OFoYX!mG$0!SF!?H|0Vpat z(d{=j^OPVuqiG6?&Uc7^qV7+zg5TbjylP`Lh8 z2ic3a_D=O+B2)(H>t~`?(4F!!Xx`I-Y(bHx0<4?Hy-4x!(6|2cSAlG@BDfyFIjgZs z{UUD!@oiQAr%xch(#(W!R{Gf#g156SeZX$)?@cDgkzQ-6o7l370 zI>=EtG+K?dM$mvR+9)Cbkp68i!F0@?4m8r;rPKH*OQgA&c^^;}zqmd;9Ei`!i-3*; z0o{rSa7}xelVK;ai09pgm&IJ^um!=3;u93Ojt5LT&z&+VWrR;39- z*qiv|9Z$vtuv(D={j z&lU5sm9y-VQ4;xw(vsj)*A4#~nLGaQE(&c?S&*^Q3R!nRq$gVAhf3+&qX~#3F5t}{ zIDBq-ygn(%c@UI(@FG5cqCae$Zbi>$N5#BZ0D6v#p4;h4Zl_Sd*;m-k-FnDnT z6yP14v@*1j`(DcNe1bC39NX}=E_%DirWpJ0PWMOj)=nTRENUr9zHplKj+|U0h_YCK z>jCkU{Aulb@_Tp2H$3&Ycon?S)Ewjn*ww68u6z$*{%`Mo&t~GQ_(*l}J@9Cde`bgX zhE4*CofMuUXJ24s&U?D@Wxz>tU>au-L);iP`=>{~PE7q>%47@kNJs0WZ%l#^M;UKg1)td}vv~5pM9c46*p`MC12+aQ?m5$GrdYGvG?Kc!tfO$b-9P z)QfG~v6YsNJIg%^18s-!7wBTUnLo72bn~T3_{>4Q2};1ZkL2&qHK_cYjI$XTCMK*s zr#dwA)x4GA6o?W53`J|A&K6DFzP~TP(P9VQ8Ia%%BFzzNX4G&>_}y|0~JrRW8Wn2v|m2(7_4C9K(3Go%d+w54QjHqGNl_DJ}6e z0=z1eRzsQ?PvcfkzIWb4IZ*dtMsE|`P%1J0_F@l$93nD{60$!uCWnUP@-ISPV3xeV z`#KvV!OT3Yei@)Icybax+5j+ixK;NddA<`!3?%?TLhlMQbC%|{!lMZ}Gy;3!@h4y^ z1tpe3tPH%y>H-=8Hppr-SXLX$a-{5wKRwoJ9HEv6&*h1iVH(D$3NnFnt)_Ux z!74mEZg5C{B_d=W-Y)iB89Lz=eTo^sUOFig_z$P$V7sHiE_G`SiYwzX?i-A$G;rL> z>nS?74>f}>nRwWzunLrcV1k-F7*C^ zkq2)c9JWE85^1%w*O3lC@FtcjgCnyHc<)CN$Q)8(c*)$hX+A{k^9_5_>-+5#^ht$x zxxqNRxX)ibYAo|5_*mglEYAki%7UAx9$`BvzCND`;%V4yG{e0B=*h{i$0+c3+{S+& zKMy+$@k@U_J5VnP9Bd z*D3+}A82&1sDZzaA|8luqo^y$;u_wbc&4Kh;oy_JKj9RouRFj`;psP^jSA@g*8r8_ z{~x)N5Ro&U&nFJXv)1p+49;owB#lENTh4k{e;)fKauDzT1C_=_OXK>6iz1KOD*hSN zp3W!&U!Z)%?mMFgl{Q2sd(>Ov?gQ4_{;OBNpt{Qjsu1!Vwp%p++Pr&L!CznjgnFem zvI<1oSMa67ezQK_j)U42pn`U+i&Kcx?%d@2Rz-Rp-?IIWUB&)YJ&YlymzM@*`0rN}nu*-y~I|Iht`6)h*o2EjbL%6ZU-lwyPK%>543;Uox za2ID+#h};&h-80?a!&s`EVFlmgKT>I&10j;nDAssP)Q3QB4*vKQzdQ(gW=T9Ozoq6 zxU2|b&L-}vIZ)BCB?L}75L7x)Vlk=lxO$~uBewTIT8!sd)(e<0{{70kfy#J)H!tQ( zFTV?qXRo$B*)3lMa8eBwi4>c($bQ}kdjGF|*3YzpV+ZLwfd0ktT*6(V3jm~x7N!%b zv}Ohe&+6f#Z*hZ+x{ax@xAw3~dN3=-1_XP&Q*buSaF4Qiv>q9|EkM*7W1R*g$F*8f z)Qw;m9mwAxhZE}GjyxcFu~A>|ShWZ3PgKO0UY!j=RuUK}wT!$i?cMz7&G4)++Un1o zAN*undQ2Z!T@_%@JYJanLlku3F<|>upn8xV0P_U*0GRNch0s1z41Dk*VSv=m*B$Ao z>XCbS{226$;o)JH^=KQC8~@@v?X6hQ-uojxFxGe#-tS+8c*HhQ)&~XUXODZVsv3yb ztbsyUxHEOmVSM?5aAag;ugtXVoj4%EE>ho=(KmfBL8&?ubm@;W41{gPl=a zKlzn8A=}{nyLWayfJcMiDb7FSrDk%dg1$TS;_PJuMfQfc=xz|#1LH)H1rxN#r|yc9qx?=H!6{Kx_<5grzL z@$v2ON6)%%_Nx=Y&z1v5uKlyfu=vewIL$5RUW%m{X8E3%%s*RI-JEc^nq05P*>?u( zi*>Bc!56;T3f}jCItLLSA3QGUOg>KPqLXI;zsI{yWx>Nm75lx1q-C4Fc4%bF$v_!Z zN7uJMutV>)XYiU>hV2&V9A;j{7>K+&xX!D&I5sW&g%C~=$Dg6_TI0FnCObQ$Xd4Ve z;4I(ZhOQE0F5#34GVT zr^0vm;g*o*C!9NEmJ1P!pN)&fnU&1Sb1ZkDzJMpbs_KCpwzl;=x4;C@M&vO*R@g#Fyat zfrswE%k$KAJl`Pjg>?GMsf$=(Di22kUfhP7=f}fO9(`v&&G`V9i=VsWzt2mGkoPP( ziZ2eYgOB~Lp8{)^#kl(~_#MA4jPDXm{^wV~6?&apv{|HkOG00z{^#??w7`e; z#aNKa9`ouW?*5N?1=ro@@E_jqk5UU5mmn(R{~7E7q0%U{XaP<2QzW_AeW7u!KKIa~<*s)@bI_uwTT zegJGgYc}HU`{p7V_gSkzKXT~`OCGPbx#CypQC{1yNGmm$?%g=>($$tGE#dfk= zMH)w=hEGAu^|n7AuN&`*hm<0x5CYK?RTW9rg#vm>;9RI3558Xc2a@3J1AgB0AD-JW z0=zDxR5)kL(I(spI>&N@4aP>@8t?FXv{NZq4t|wFu8h4;XcsnnR>)|+dpW?e=S!_$ zn4Oa5RuP8rT;Ux#*&3^xi(|;2Cui0am7ZYk==LmjHL#dpa+tSpFD)-EV(sy#zw%jy z4vB8vyut3;WQY23K2l`UK2pFmxvq}Qp^7926JpKH_`xc=lNHI*GY>*)dB@6(*db+l zZYXRiH&u!}d+l?9)qFz=|L99<)5&n==j}h=Hs)cA<5v-1H@`ZJLHTX4&YSa7o7N1s zZU72Rew98ijE#(O=8DfGk4mm@7l{XFtX|o*r`p!{amv_sk#s~>V2k2-$km{yCf>~2E@p?+J+f>zz<(PrM1 z7=r3L21_oB&9P#P5tqwUQF&XLwT(;45c_g<88mo)z57FO+vjTiw$XaY<@Q9%`XViK z>3|sd&-yX*@$C|yXCvFDIoGBhZi(8>6>Jy7DpRH8>XonjZsDeNvZ(wVKh3(eMyFiR z<;I(oWb$Y;2-&t(QtU43ziy_evcHEn4v+cRTTEpDCYgJ&+LvZ>hgie@6O3u*#w)~Q zJNxzp`sh1_@nW!;7!jB4$+JS89a@Ptt8Usx3!A=*v{IUhiPn#Q+5{U9px5W8FU%VLIxnw8&Vzf97hr0im@_B};(2@?S z5OL+cUl+QB9rKj~neA`K)3WG3ls(^~#2^tb;&8hUXFpbbZdYhg#04FiJt`kjITMfM zfAC}X(Ng~t2EX~{S`;o}PzY6)x~`@-y!XTA7G=;)>>@;!MDEG`)Jbnv!e&6{` zJ2V=ixbr=f7em|O%^~^B?xKPk!TMCZJ8Rsv zc(NUJNmujCxOlOY^eX$+FHe>mN41ItAX4j^(zEr?^w|k|6JGTC%@(tYAh5;KYjnD+ zJBy3gadW6!Fxv-HMX+qgl78*wg~T>{W7=}`07NRBUVnYs0Yc6!8J8#&&H+_t$kNcw zVaF`4L-muDg1y>OwIONxg)ha`QpzD=uDLJ)kAmm|H;X_zNoND`O>`x_9S=A{JlXd5 zb{t*Q!@j4Gq(@eB@k1&@@mKvAX0GI{?cV9k8Mwxa!CtR1d2(pZPj2XW?i>aYdW3fG zJ``Hq*AU=5W3)5ogdnF3V({-gO;Zedk)P`ujrOgMs^-CY$80y1CCk zZZD6~ZF;mo5u(Y7jX{@tqo)jv4A`+7$xl`8x>pAa)gCY8kd9C z)e`vnSrOOA@I08P6A#X#Xy@E(1gQ=;Dt%f63ja8CW5ry#?bf4!&H(wXyP@MfSjy3G zCHQVysdGL&dc(>B-gg2Beu6pkY#sY~UpOQYk^fff8b=Fotx{n|{EFk@JT>c;)^o4D z=R{VfjS`c_7B2m&*gB0ZBwc~*R@})EW9)E&?;@>5J)NvIT6Oa$G*yDQ-TL!AMy9-d zs9R^({X}_Du<@+*WLJ2`dWmbL&Cqf{e8xlJ9NzR4x7}~zb%7)0uw9nGh zwAD$>Qj7PqC0HBo?9e8S6~~L&8+kyB1bbu)A-4(@67aN$l7v3Z3 zZ)apBrFN>-!TS+@XJnuw)2qJe$MCcM2Ri@vlgG5YojQvu_Id5hRqn;Y$h3?X=z_owYH_yP><|?|3TIs{s9`EeI9d*4AS@>y3>Z^-tS2tD#{VJZ>FuGNXItb2x;GL zGY?dT8HEc;MqQ?<{%)#a>A8MC$9$DCMJTF&?IIoBdSh9L$H%aZD&LV2R}HW4HRA&# zP&df;`5Y_&GNY8?#4WWY6)a22o2&a|7P+lSt8@=yz_=SD2~d5`ys(Q9c; zZEDTFqjsR&acZwcHCrJhdC4UV^m8(}9FT5umG>6ExJ^;b3>5i4hkbfuP&!ZeeTgiiGo790woJ<1`C9ej`uw)9vY$6tZM<$HVxv^P&rfh_ z{_bmk{c3vZ2l>qHw#MP#Hzsn~<2y@tbW3j!(*3&26C;)c-CAbSnEXm^Yfy5LdNrJ9 zJwbRDw;H>HeeXE65zcEECX!7uRU;F2lS{pH#NhP8X{XqtZKB56_wrjpaCcx3==U8YjLZ|mWlD~P3S|H5A zW^KY^T)@SusyY5fdR#cxorME*8qtLCCH=hmWLCd=| zo#Pfs$4M9v5GtJHt%^7)O}3^D)mkMtse03&5nY;H>I*yS@V*v-IMohQ&g?E9^!rT zv7Uk%_l`l=?@S~`&0{#0#FS(eUqzpoQ6?JBYLb=3+2!8$!YS6Q~A zE(hDlttJ^QX6?`E&B!p<@8DtHTA%x6g_J=&x2v3M3NB6v$$w&@nH|J8v>h~;*pd;IOuAGN z@!@%24pmn0Cf7Qu;s)FKQAVj}s*)}lIVj}?w=W3sfuhgiyPdWihS`aOYYRTH<5h97 zt^=F4xVwuVjo8l!bv%VM9@nyXN9u!q2eZjAZLAeQM3TPop{mq>Hr|j?H@ErStt|~r zyQENGI_AMKglP8!UTL>FK&Y)wjP5LmM3`hAN36QdQ_TFDr7U-w>hxRIi`Ne7m@jc) z<`sWs+K}j0V!IRLp-mougzKdvUDZ2c&%P-ayJyv=@YAnvo?TMt)-AhAWAd}_+&cYm z+kqSkg18DbG$Tgx{)|LVvewiFjfePJDa%kL3YRqqqBWxhuk@w5FCgU;BJOZvEVlTi z5+yk(17Ej)c`3H0#B%W5`uft-<8OZ0*e_@luUTn-4i{fv^?7Eyo4auqx&A%f_9ybf z&{fBp*veLuXc{aWGf-?JE~P2BQ!e2V$N7)4^*bA96IOAJe(!JAWs1uj!dDmK5t|D? znf>BCn#NMp3zrdSV>tsUtSl#EuM_M(Tl1y4-$Cp){+j-i1J&5t6O~S(JfFm1Q=zTT zzhpqaZk}`CzF+IH=4U-nrX*26pP21(Bm5rDTTDKSBrf#Qg#KWjxNcU`*%U33ByXis z(|E)MzzS5@Z9xy_sbE&_z3yDT6FQZwkO9%8sN_Y-u=B2BRfm=h2Z{^_7DShpE4w5E z;=9OK!W2ev*+%f?1!py{Qc_2**+6q@TeXC`~{%zqy-^bQb$Fv^7M0EEbw?uGk=O>+E` z^wJ^29QVw4E!)(hsd^{x!B0idQb#S#d!LHdU6+n;Rx&}~ zlM>dol(`64w}@}b5`SuuEmX4L&_$HF3tNO0EObD<`=(mrf{wfGQc&JO59Z24MKa^a z(L)qNuU%uE)#kNmDdW;=db(+XM4)afB6dTZH#H$6>6h+@@vsk&RB$;&7leJvLQFqk z&M^pcRqDI<(rjLK;H+MuM(sd69HP0=m266_##CV8jvePK&vLZ%%;^=f=~D1cvVdNu z@@AenCotmPu_bT#F|(*}cIicO<$0s@E_v>=-m?|FF%sM;!48zW*_qSfJ2~VZ61t(u z8Nb#rI zsUknbK)}kUfjq+jZNvGE*#J|lj>A(2OfRynz(HuHAFWibFt8(v>J=zo$nb8`&6~;Q zg^K3H$C4XjcjHsnAI9G0j*VuSu62=Luvp!wCD5@GHmJ0@pdyRYRd+h0+J}t){JmyD zJ)@rIthXDCz3-IR`Ri#_QK7VVVBt&pyl1<-e)nqG!Ml_$tz?zq8cw=YY;A$FJ5Yk< z6O3Q=ImLDE@;(sC_SI@_u{ss6rSITN>hj{H&CZRvX7a5DbBdwoB?T5;myPUjz0Iyh z7S{6I*sT}Uv zbET)kL1kMI^O3NS&&je|4;3d?6UJk2Os5@2iOfK_U z|9o#Q6f_u32!FX1FkMdF0&UBQ?c43EfEL;GaElesw{Hcz3OlX6s6goq9PPnGYd*BN z$67%RHmv(yAB%^CIW{11;aGz82O!YYof-k1#lD=49%5W8E0}N7^!}xrS39tIwLkfx};j+G5HvShW7|q>Xs9phO zzSq255v*)6thqnP%q_MSepbTh1Mer^aE{Zv7brd14c@>v%dNA&=f3KToo$D2L!f?Q z&rlaQ^vXi4XIs7Ty;*k#PcMBeL%{47{m?a;?bmslqJ>Oe7*sglYKfC%Dp|hxt9^F8 zw{8h?Cxa}j^o*to|I>zhYF?2Z4}wT2%K|oU^4!sa)Jv(?VR&^0IHuZO+b`d>OmH_w z!x5W4X!q?^SVjJXwHa$D*Q9~VOb_}IUIZ~^$$qXGjt(CaQGNDo0Q>`%q zX=X+}aRU0v0|BISNr|Jk7p7CMewgi=zdS7zS`!(5TqX~eBkR1O z2Cpkb?*ti5fz|{;RKiXRiJ9-n;^BG)x8ZVMRs_pAL$G!`HhGeQ$Be$X$5bexr#a9K zQ_u?5>e@=C7A`_JGK-AjwE0uiNbP}M$iSq~g9tqkNvSV=%;O2)7RpxD9ErqQn+W8L zhrQAg>7(y=V;KQ$ULK`Cx57m!?u_>77k!?n>C0t;1=k^buoXHG+||Y~GVFWOREh=2 zP?C7+)>dK@g*D{k!YFa2Lf@z3V=|3A<@)zp30m1KseWOmQy)KRcb4AH;}Z1Mq)%% z_1>gO4X1YXNOhbge77Id~58dPjV_h~)DJ4GtH4VGSkd|LRZHBu`Mo|Ip< zH6y(_y%PTD=QPAdmjRae-r|$YdVpNHdt=29D~bwjE2)2W%F33Nok}Vn(hSI1FvP_3 z*%OKMOT;+-AHcYmCgk3t`^)Uz+4#4lm_ZsW&>=b)AS5+3u#yny+Wa6-Vcg>@sG^?M zx;GD*m}VT#^_HM%u@;k^u_V)LoOBL6NDE|F@qjkO*6bc5XIJ*!!G9(u+Z#-Ml4WDv zCbmSN??|88yt_n)wIYHXB;iW_}9c31&TQ z29oK!HS0INn8>IV7uo3LzY_0C&O7rKhFkEVH~s#0w|sf_-<>E z1dns^ZL1Fad28uX%bvdRJ6=s29w@%UWK~ zaBPJgY~{W%kWUrqJWV8*gTB<+u42r3*Zc`YI^xDw~=U?VSA@Vk8xv@*aKH zfjA```P4zyW%dMal`;mk<>oZs%`4GY$$>80juZ}{S#>p^Ik$zTL=Lu3wAD0X8#Emp z(%Bo+#y(5Xql(t})cA_6Zp^;vY!zsOU^DFbVaqQrHmahtgigTH`_iPuP$);-l}PVu zl7LyRcSx;q056CA@Ij2~z>cv*@~mbnQ0Lr3PYt&Dpk!YtW*?z8O7g4}`n6C1 z}(PD+tg+cQ~rC}sRuG)=5PX%WsyD|}*^y7dx8}?aGk|{kN zRmgci^wN4AFY5y56?pcBK0W7gqxq{y3(16a)0RsNTWGlt4_QfPx=sbyWoHx#Fv9O$ z5_Fpj6C=FlM^*`C+(}}VLP2`n^iQE? z|0iFLbB~&y5SwWu8J}KGS;zuSW+wxm=Mv;2UaZ!1+paEtD_?$SnfmE=ZjJrtdV4>{ z3zVvU8^f|R9VK@CPYdU3+fp{GMZeNYZPU+mE}st{LB8)E*3}X*`$;Q0CtPu={9hAj=r5LyKQjJH#V&%);`bzMk%R6-YGT7+1%Ge5Ni&Qgs!o4jzK7`Sa-X5*7ucX3! zI}uK%(VbdLzciwN&|1HR{sDC{NLY+b%>K!%ll*l@^%d6mmAx7xiz>;*tC~Q0)^be5 zt))M)C0|s#P{W6`U1&F7FUALv2dim&ow&fCu$DpYp1LTOCi{9hePGlDIxF=wyO&<% z3q;^UXywjjiFla735O?FI90VVFbTq!#IBDmcc>Gms!tKghT!B7S27WV!oKp^Wsr}}YO!c^hj$19uTmGoQImXvB<5Y4%v zS=slL=O{10H{d3Zn$!Ifvr*f_&3uS~gf3A9>=`Ck!vR-pBX0$zgIK@cY!S*To8gVe zb@@RT(^qFo>`Whj7u<4WY~wvm&3$>o_aC1DB11bX{C?P0zyMvXIotPitD~ z>dF!`6RniH(^CcF+Zglyte;xKknQa6#SU7VBU^W1DwY87Gi``rO3b!a3g^)|QP!q5 z)C-}vom_QMd!XaD%$;J@ehVPRf`z)8-PzeMtU6JraH0a_sI_17(Gt8s!DTTwUaP@K zWU$tysn+O=mir+DOH?B(SF+k2on0TFV$}ZRs#bg_04-d_h1zyp7*KD0D8r97AGo}B z3nr9{y+KjRX#?+9EN2!SXzIV6}^`J)W%f(xaH$D(XzgRGf!e$NXq4y@SP4 zo+fv@fi@3xs-FcVI5FF0-RZ<`>mXn=*))Q%npCtKvYWFNUVZ97yY0a%#om%)AOF== z>)u@dr#P{7>yLe(OYO`VF;_IgzE7@AyYScu)iX!Wm{;jUqe2HL4+$$zAdb=B?|PV|4WZZBUBuk0`bY@vHu z$Lju59PJ04E8J<{O)pyh{EB{lGKDZ(2wV6e$$M=!?BfHw%H%fQe)qS&U!UnKP(I4w z(m|f3M66kFy~^COFL6zyri@DC@dwM@O`3OA8S273OVw~CJ| zPpx+fTK}FY>T_+?L&(}_eEV{V*U+|~_czk@nF98gZ{qjTA66a6stow9?g>ZhWSi4j z*&+1ellp463J|QA5uDqd*K512gRxaTI^_g(@P#>(A*Z}#30!-kEX%16tat7?GL_D4 zRitFf`xri=?g_f^@pf{-JJlyCb0$sOXnV84r)Eu(>n#HwlCe%AXqQ&EmURP#m45p{ zrzvHM`QR2;9)r0zuaM4jn|Ix+oNB&zWj`G%_Fj9>!&~7pf5Bxc3zAbBr&GHl5&!cW zth9+W)@6IG;I}$R6PCZ{Yh^1$<;Wi|vq--+Sh@h~?vL(lE?qGbezBWx#BjwgW5BxY zx!ZMY&JdihwbMAIRn0$O4FX*y>*b++=$uW~J`nW2(g<|kDi-vg;9 z7C*vVecYF3y!oH#6te_#JQ~`z-7pR^U7PEF$jfwrAx!K0e5H*|>8uBZs`amJ;wSA6 zUqUKo&f1ropw;r8H+JPYPVq%zS_D^8-Z99qDQv}6%O1ym3JkaQ5O$Zo*&X*~6Y*-x z_tf$6(wz0iZUXx8`&TmfS<1ZaiMDl(XKQ1Z5W6igg_G_*Vzj37%UNyZ^Y@-0r&)v7 zEq!{;-Xz9N54lm?ZR(UMX=Rws(%S94_Bfcvd<8m}S99r_p7E~GTL<~s4eapxWWf)z z*Uf`8(Tmp}EI%$J{gj@ymXIp)v&yWCoiAUI5w=Zm>g3m*_;A7K=4%4t<}=PEzZu;9 zw^HRYq%Jr2b@)Y32=i!tiZ~PBVaVU>L>4i)yJ#5HnY=D?Dfq`N9p}`?y`@uJa;FUa zC0K5DkIMliN8n%%fO85=1CoqXgj4&zq@TK?5+A%w%2kNcI!`ZS_)xDh^F!2{_m2uW zol5DCjjDA@o#xuJr_PkEiJU%rw(Z&}GIBn*0U}~zR7>)gZqa7>Iku}eCx;4eG4ZX} znwdYQzCfp89+o-6(V6do6zrkj+WOR0CAid}k4|cd6mu)v?uePD7H4ajW6!7Z4G|im z;W{qo^sN8WEsRjOZ>SJezy}(8Z-wHWEV{15q(u5UIy`|PlA|jBuLKgvzlpMOKWdAy zp$mgC5-S1Qj-wH;-k5$kA549(#lS_@T!vwb&n&Dh7!%znMoXT|$=Y=?y4lR^ON)n7 zDRY%X8AM^lvOGs7ST5yB^KN7UG%3CKT_{2lssX_E3CjuHEpvuSrMN7+@B%BH-?`%X zVM;tbmV)*om#_a?)!mA{{`%Fc_kfW8umNSK*Ul@&$akaETydKBl46cpPUIQ7-8ZLB zqTJrgmGMJ6v}ch{CyT8X-$vG_=f4(cZEr7K`PA6-?zqwojA0FOR`RL8gZ_e^=8Q8z`piGC}rcWtG`@16|7YkU%AU!?yV$%zSk1Q93C2r z!bP^j>k$+7&E^%xA4V^Pv6^-I`$H-SWyim7t|Yd0@;;cJYQ67j$e5Tvnk7B}Mc97p zpuFUWBZmr{%Uov({r){a%FVtPzRMamIvC#V(A=JaD(r`mLqb`j$?LyHqTingiAQ(0 zejU`^At=9gek~yb8Mmvv%gtZpnr79NM;;$4lk4K6**V zGG%^yZiv;{N+sxFXSC)%J){>rZ6y~F6Y`m}ICx=R?j2$m*Hzf{jKx*vLZs6++RVja zE#c;8ZTcKP^9x#Hc~aQR9-hu&Fgi?Pvl#`hpCxP+5qhCC+vW9p;dRQ3oh$04UAz#$ zWKbE5sL&jYD^VPb+=`14Udw25gS{5%5?2DE@LtUl$4wG{cd}YY)>5D@hjim(dPLKT z5ES>gfvqT)ut6yfe*do00u3)2?GSgaK8r95+b}KN#e5Z=tCxTC%CKCUC|jxW^nAo6 zhM9$$IaX4k`ZG!{avQ0V({r#0deUEvSWDPYDh}gUa17^y`}Aus+}&K5jixfe-<2+V`8kP;#R%j1NZYEOJVz`zz%0G#H4f(-EvRz_n4G8-^QBefM9}Gr zJZ3MnL{Be!HSjfxo#=b{(;Ju+R{$-Gs+q)Wdl@-QI^>WfiqA z%#<*G{-Sj^^BYm>#ZsJJArCEef?_1}Af zn_yU;MeSG;aOU=h$^Kq(wa@P&Z)Hr`e+oDs`z=$-xohP|P_x;M#?s;i{;PvJ%I>ff z7R64SXcFhsHM&GEcP?ITH?j^?(-86OdIN2vB;U-t&ruPa_XnMQT%g4*q@A<&+UN^h zPvQ%Ig_NMhmRF;~+BK7mZj{sU&e#|5a6L&7w)WB^(|bD@t(oUxGm}mrAL>%z3ezw( zR#g?334Stkkw^V|1*Hh4vDGXmx_LINfjZtgc%)pvzH&{vY_dcs1wGRzm>u|0LN6j3 z(;9SZY$zmQ__DpVm33K4%o#VAI1!{2`VGe7iMHZ(8cRTZWBRf(Rz4}L(0M%{-pgRw z`I4y|`T?}Rcz43DR@pCdK64XSsube0wvEXsekWk>@}p6L)n+Gxm*`2ARwJw8g9l9f z))tKQ(5nF@H&;_2N>y89-96dZ?b3x3q`{W^IwTX`H-3l(v<<&gZd@Z!5h!Zf)eg0HTopZ3K`&xV^tb;Yx z#7Djv5js)0$!uB&Q7}dI$&A+{0`$Vi^J7UKH6=u{oiv>NAlO#gt`oW0aHVHskUddB zM9!dM^y;ktOZfa)f|c)rr64ywm4*Yr;42VYBam{xCv?<}bVmCN%Sv&d)NnIPl(64OyGs6V>S z+IfYQ{^I3p*bb))r4lt|`MZXJBe+k(4Ow~!-6-VDd0u+S z=RXV>2jTb2+_}5P>$4LpNuEDhiuVwH(7;;wTZ*wmYytE8rP+vyw%)e0*2tINl*?nDsc?&3F)HWD^GZiM8zoF`i!%LA1L4fC zvEHE9m*(O`;YnrNlX^5ZySJbgZ9jT4#*rdxjAwdZzUbuto@V`u;xtOk1cS?E-YVcj zcjAl(_~qtB?59H4Av}S0$Hf{pZpCIRh>i(D7PkGDv2pV*Iex)ZDg*2?2%&HXuE|K< zVt+zw@m~{Fb>uVG&^daK_0%x+Z`z(tU;Hg?-hq4^Ozo6}KI2hg0u3&7t*7O;R+Xz0 z^HVZ=;kR=RX;!-SQk`A{M&j~abL4}?q;mAUo^J35|7LV$YzVK^(8$-7srZM3+&ZY* zzB}O_T{Nv&)?*SyK^5!)ln+f7rm#Td9vN z`z5^^+r{>>S%AQQTYDIVysBHY2y5S!OCPjZt5LWZ)Qib@d*U-y?TO^)Px^|({3*!J z&MHo8lWqN+_TtN-ecYAuuHSxlesVA?+A-2Iqh;eJ%_%{bm5CsT85uujI>m@yu2F1d zuwBL_6DxDUf?Ro4KHGq=5p9uRGnh#k6`CEwY%Z9;S}M5(WMfv-5Eq~z5& zS70BVKCOV|x+R?E7c8i$cvoy<#gHUR!7RrM#emaq+!7lK`;=uJ(3 zMYI4c&i!}KC_=NO zs-Ql~i<*cn-%l1%wg3_o-OZ6c6M4gy)$Il(=e@cGrIabp&bFtjeP>w7zC0zl{m^_B zWvBk6W|RzYI--}_etfWD(dtjz^qH$H&ML5;@cv|t>(_Nb41Jk2362kIwyE6a;JwNC zxI**cz-MUFuSlF-u)}<-#_qj-cL_;ra?hvw1&W%ajV3wJl@C<*$tVZTcak>Wzv%jl zpZycwjh?hUWb)EbU0#eK{hq%YYZuZct@r(r;r7b#Cczb~0+m<}Vh}EbT-%eU{9;~!0c|0eG zQ$BxYyDaLqtV+{en0Du`5ueLK?{wQNZy{XI5l*-AaU z4Bi)&(TSEEu3>vPF$2;jw>y=|AGuB%_$lsq&$+_QK0g!+;S1>S%qX&{k4a0sF<+R2 ziTcqbeS^5{QIglr(o50$ZCwgQAAwYHGwg->NU?Yk6^kSVe{z^hc8U9FcR*XAEZJ{f z&uR0jM|roZWQh8IpD`5GJuVT@d)%hvSuK$pX8kUS+d1WzO#-u;jyGpJ#TtG#xiB}C zoOrXEu+|D2mv3Q61MTG%mkZdi{R)2J3UP;S0b#czq2(jbG zk0;9%e`2cyxsI$7Ho*DT|0CL`!{#@7f-Y#54=Iv=_ z;S{`2j7C0AN;Mj<93Fr~ei&QIGXceoso*BVgE?4j_^z~K znnO)p6c*-MvuA;UVg5R-Sv_CmD&G zKO)){Dt_XUF?}#^=Z@IqqqVhp4hq@ufmG>fhh{;|OT9lV6Zs8~z-w0DrDtHvMzHD64Nl7uW*H~jU;jCgKEvpsYp~N1U7UserX{^CW zN8#a%$^ZHS<{RmJ|58DBww(E0q4?#Y^0HBGxp3!3HCt<+9QtxB;l)tPJ1*PA`9G7WN=n-3bU z&GLXv*1c0JRM8vh;0tw18!a$}iiIpY6xOc1FAN z$^=(}H1RoSIj>oWd=6X_-khwukam=voAUi^hdSQ4l4l-9$9_9>kTY}mA_iorQ~5*{ z4_ty0K`DxN?awGl8O-^V6NNFhI)GvzHT=8$JBA5g3=zRICrNa{gaq$+6so3bALQ79 z7#+%z8B8i{XB+W5?>Dq-Gj^l}oM&cytdOp**$?&?0+fq=DSqRAjBY|IM|QIV;}+xZ zi`fW z^Lup^<1y`jnk!pz+ZK~!4eo3`vJeecCz|k8I4^_~$E4qhy9HKW8jMVck;nw6lt{Q@k|^Fn6(fw_jZN``DXfenB> zSam!{ysUmdx*I9sv(*2yZ-l_-e%of-0JiTrBI-p8o66 z_$>-VcjE+O!=GI149&0J#A_wa1XXFlw->b@iNvy6ba;PunqQg6>ghzi(*mnHG86Ya z+g!sUf=bb9P~+Gk@pj*>R$zBFbY)^UAc?kDv33w>n}_d^DAqB0_RM5Z39j?>Y4!W8 z+NamsI;^r93HHZPpnGt3`RV${CD4M!ghtJuzxWERf7;~zb@tQmgg{qZbt<%S3n_#! z5&2#4KA}CC${DT=lTcirtsfM=sYI;b!cEGqKk#HqRtAO%Sv^FN&DhlTlss2ly>>&Q z*Yw+K_FoAsBl-z~A>@vTL8W{SrjIgC2d_$=fI*namEi489=(;J(<#*VA79cPvpY5F zPnz2}6v(&?PoAEyI3z2^Kx>2bRICr@UzPlzm!>E^@2;}}@=C>$3`>sc4vFn?{3s4- zfy5*0j89w=pQ0fZ6>gYL_`dfO&v!XRa_IoF734P*JnS_Jm0X!=w0$((3^*l*9JL92 zx8_CYJhUxrG782bs~BFfG_+X%1VvDey?+G+{e(Zr1G*D9CYxPjyj^6FH8pQNDo2pq zS-_C9Gd1B1EMw5h82rom@nZ0a$r;;(Nn*S)XW5g*^vfgr51bJ0u#WJwec9gdgYLudJrX72G5EZm zN8CI0;D(5Ame)iq)!o}Gd=Gs=zuXy#y9GYkvr1oR9>2@)~U$@fshtn|k`pSxB3Ep2715b42pLUCUpe#0?@HZ_Q`Z zoz5A#>n`_wx1xlH?`4)`9f;ip-o9cKV(tHZ;Eeayw;)-c12F^c`@9otex%ipe&oof z1A@hhmr9qSM=p6bhvM_Fe^QmFMQzWvCOe_os?BZ#$+-Z^;p_BKK6aPgR9qCgwp3iQk~fXd>;J? z9T;29G+k<5+@A`Vljh?LUenk=f{NKs_gu@{XOB#R>P}7Po#~L>d($=8m`HJ*6Xq&6 z=bv&A0l%o76b}eR%#xDxW#y>wXvOCneeV>j!!JQ|_?&FZJSR8i+by=2mgTi+2lff$ z*FDl#{c@$2@sp=xUJv-(v`meKnP{Y3Db&6ebt;OCa+LN#GMtLI{G+hij}f%)QEWNr z2X;E3HFlh^g6J6p$#F?oko&$3%ETdeYA}VE6fYW6zT{`zw2`I> z%#2Cef7~g~o6)Y89gmbI$w4#bsfrlu>65<7d&PNj9P~n@KiJRs z@bypF;BL$vFc|7CVxPF+e#aPYf_OLM-H7zM87n$3< zTC#T+y+tx<7Y>;5Gq^+4wz{{=J|oZnWA?|9U;$sW#LQt@ z^mOz(vP}F0?XJ;+YTE^S}q3a>d5!io7I`0%8im*$g^kLgylH=yUNb1g2#ul z6dhA_ybfo8Q*8IFL_a?Y`Mk;0mvO^PuTj0(dM!OkrYhwx04X^~>1awnLDiQ2O-(nt z{ygJ(Fm63Weq)Sn67Id6Rz+UVFnK~w9i~n7Z(=Kc@zEZ>#cm!f-rCx(@Xn_;f=`gB z+=v6+_#kbxSg_MP*5xU6<2$cb!y2Zan($CjFPwr)18*e)Fbp{+`&t0{ORjw*YLW6NrC` z-fNeOcv}lsB{S~lu=8!KO1)lyOM3Yr+$fA#B^pr1M*qYQ*b&pB$84aDxZdvJ0CxEr z!_}r1z@NZ*-@|8axarR!0wmmLe$FEL;K1 zJuUdvphFr0YJSsq0vLyxZ$MN!cGSdfzTFd4sp6Kd72Paw zp5{yy(wm}3MLie~zpdamL>0FkK3k#-Xu|H&J@`7FaY~ZSed_fa$IDD|pv}oioj#N5 zFOtr)7Oo8+91pSnCWoDG7$^j3XCY?ec4?9b&w9wpFlcv$+1u~Q(JaN}DwDfE$6bx! z3y>RP>1|T{*2ABIdIR^3W!s7$p)PxmxCIn8o94QQSozvV8O|m5ylSrP{8Wj`T3V|x zr>srb+{~g`bsXD}!J?Lc(-7tmAEcbuzw;?Uw9KOAD@m96V$56nd%68<@a@2-9?s|J zAOcTmC29qzA7l-s&7tF2*GjywNthL(PWDmZ)0E7@qT@pv7k)VW12Qb^jo?VDjzx(@ zN1Uv#b3W{vV|#7i)t2IKH^pBDTMY-C1-%^-wQO*T=9JUVchHM#|L*rQ%Y^st-LT{G zkxy{ry^au%v_7Gf;LOq;mF^Z*`UO;dN$xKg35VeO&hM)w$;3I`?aoT_xR5Q??mRy8 z7-32wAfLHeJ2}1En8|qf{ox`6S6>iKBc=h$42b{Z?xEXKK-Ww}hM~OtQM7>ji7fIz z?3>0ORIShYs0Sn#NNo9K(B^Z}RKYg`UU+VO?P8F?#DDxVa+24$l(d1X`Hj6 zwv+3yEoP}6q{^MWbR#E@kF4{CZQ?L|)uSdOhHKwjtUreb#Ne`Ed|F>b<-z~eg503P zQyB{v{Ey{so8qpQ7*=ff;bSidyHO_-nY*&?9oV%w=$_tvUkV%>`VztV(d)@Oy?{Uj zr8*K|MGO$;$_FB{HTxyCIYe#6TpwD*N((9)%?p6#8H2gEl*1x!Kf3PY zkmz+Otlg(f`{sz6`|YrJCr_A5#asQtgOM$LEZrNO{g|@R_h66okq}>pN``TruUDm^ zm{y(z2EWwVTvy%Cb_b$_)H$*GDlz37N=|ovM8Y{&)|Rc3xW*o(Weh<@7uMIC+GfIP zt!b8|LVBNDZxW8eF{lE5CbQzF9}y?96m+M^9U-;$Nv0aSHT;+_1{&BG;>I{(4l%jt zF^Bkls_tCH!J5G=uY0E_t<-Is2DGQ`yvDgWJbHF^D)Gmov|uI|Phe5aF=1zty{%O_eTLq+~Ue@?@o!nRmR~9BR$%^hvv3uP=!~VR?*f9TX$T z_^3c5WlP$vnhemmeXpN!SSy{9FFJ31MBLjO73jRuR2fUI&ssndy|)a%f&liOQGnk4(8)ct~sH zGkOmMx^8Nml6&(XdHUZlao}4O^kqeqQ?6S5Lwe1*n^OXeBjZ**t+p~132mYHSIFR? zcW@oYa$LVv-wl{Xwu+(Qhn@9_K3*nXOL(ZDpNxZpAgdz60R~Zl4QbYMZV~YvcEF@k z7*aOny%SSah#U;)n;C1-Id_qmDotsUasLA#gF3jpYE^LRu8c{QO&U3GWd9x1;^%a*m~@MTZnCy>~-b zBlZ)$L2^6g!1pgO03>hZ%+a{ zriqLz;xp3b+MWB`g}+0#wjbihyxyDQjH9E)I;2(H+w$M9r1pz&kW*0pH?^<)Ofrbj zTF!X1G(PdkCF!W55HLL!g(iNSv|D-Y4h$*-YhU?MlTdCMVR+doNv1yCKa{3@)xchr z;D?upYZ0vPtFXx_)-71#`vNQ7-!C$1Hk1b7D*aw~%;YsJ+=oX~x!yt8$`L+Rt)A<1 zG6$;B@l;6>mZS@ z?o&~7+P|$qu4mhdv$!5Bk{Vm(1I$WO8Ah(mgs)4I3j+iaZ>A)avC8vV+&|7OQ7+`l zgghh>_US`v=3U7ZTCsV~AkNxOcddG76 zNzm^4u0FZp7(!Z>C*Py4n`8Pgy9m{e(apiHC>_hsdHCa74JDC4$l=~wm9@EiMtRaW zSF!yN2vKNUC|$dSiz0|Cs-^P{npm*nd_32AsxTFt1stNSY zMJj8!<$M9#q{rK=eGB(>@$*14v-o+MqfmA*v#!(drpT~EE+!#yJ$0Wj=;p_6oc`(! z39|4(x_J$5ge#-XnZ`Ke$_HG8kjYQgHch9SK-6%b!E4YYy+WvUrD;z;K$ zy2Ej(XrgO{H$zBot4H#Bb+{In@^5#K}KcPZkn~YtIR*FgG zs_1aRaUxobV+~s~cRCv=-RhW%!yg~U3j0Wl2mktT^%IY>6%Do5g z5kQ)O+TTe#o%v^+{$2JQ8FB(lezS@WG_E`N| z#h-23>^)4tl{-)8q$)bP`?$L0Ra#PSjee7{%oyb*U=f$c9eSPzrKH?bo=10L0X0My zTmS0ZSeZr#v;G{jYyC^~k4kZO>t4fRW*K3b#-57rc3mf60^50}_gTVJ_+&^Y?%SJ8 zu5!!PKO{IN*mMro7oW*eiTKB5XufQdHqzS#v!R*TV{2**vEBPaY{=$V`>gmE1dN~1 z(6Rx3A|eM_0Pv^&oioq^x5itz^H*ZX#0*)9o-DSugiVghA zlFFK=iNMx_kFXTPEAty^S*E&~ij+hxao<VB1S9^#6!zu>#8|3XWzM3W zh!WVxR)jgm-C1d=@eaCB$z!u0a1$SiczqHJf7#IMeJ@n~kU_^0n+&0OAvat>@cV(b z1`sGF{nZQAnIk4YuuBLQQHE1vD7pNOR~YZQOiNZ%^q0NRwJ*730Z54SQGlRy2hjOk zwb-7v~%t_^efJqy?x{jk`Z`#f%;L>2?;*o3ke5_qj79FKe!En5R= z9n<+XVUoAY%PwEYov;XIb{DdsHe9t}2t}5)E$yDkH=vzq>wEWyRt0Knej*ys{8i3| zo0yum`5EVFn0Wm7<>fd>kOh_&{ynOwKa6z!&&N&MsNa+~LP}f0$J>|@Q`x=R>|3i3 zNtNSGA%v+%Nth2(TG$T&LEArZO6>kBDqE&wVM6W)Wyht{a0HM$nNKFt(%)sO)QFy) z@z?>SW_^$_vGh6aCf$3W=X0ecw#j?)2A(uUxgk2FJ|$hTqxl#O;}Y#P4Tl>oA2|oR z7rOY>2ebSpd6rQc5S_hO?e2Afd~#BELNZ&iT=hZVBOGn$x|XvqEg~R7{1O`%TmHcU z-jzrFaL~hwpvIb)n|F{4jS$G<)a2PaCaht~i#1%#P__Ypimo}U-_n=7F*t|}63PE+ zKWpwx+{ok_$`JO6zrcC?79!$iah?hBr(ce|fjSg9 za9_-ASLPK+q&d;G9-KMrR%O|UrcW|#ytuGVx^~-jXqO}z_-&f}n`Z>$?-wM4h9;aY zSw?iYcLkMT70w|$@E;D8 z*%??8a=FR|@=GqWk+R9SA17B;F) zM8i5h?tT9dRzva0dqB`tglfSaze+25`X}`F5Oe;da4pN4vkZ>9mQHl@ZSn~cS|Ok< zo9^@Yjb`6p6JoVNv_#%CDUzAT=wy=FH(F_&&XYX zeP()p*wRObssN~|*d&W!ycbGQS+&m({2|=zU7S+ZZ+)E=U*uGb=t%CB%MkRxJ@~rS zv6sKkm{!kQlZYs`5=*P&&kn2f%TbPa7T~O_8qfOSM6fp*uNE)bQ7Q4P3g4CtX9OV@rhk)+`-1WfKN+ps6p!d9Y=xh{KmvEPH=hd3bVe zwJaAlOz)UQIG`HP@8WoedV+P~Egl&F5h%xpM;{!#)2a#kvCyTDujR8NET3QeE_OXm zv@o|C$=91JlY&EkPba1nLk+?FA}+C_r;Y&qB@T7P=iW6AA?q72k0p3sdVz!=K6+T7 z^0_sZALLMfG?~5`KJ;&rl!8&D|KG^jJSQOG(DglD2j?zTIOp4u7e6~V6c|@TSu)}9 zUNZ&zVkk=y+WLc~`N!A}j+;06*wsa!H#I5PF*_CWUlV*bFyphNsr|$3*Wm$iM;TY{ zIm}VuAHAHNT5C7>a#bOKJXOw=cG)psBBI{HWz#U<*g1HEha6dpg-Qfyt0?N$Cw@Nx ztdyqeo@jn(?oU}}Jd2U1h+1jSF_$iof99MOiXUpN-DYZgblG^{ju4WE(1D&O59aHQ!aS;I#b42mX8tKJ)0Q&_NYPUZ-E>=erGYqOZ$FqOKLop9EE665h0VOTM?IYqy4 zW0vy67X4}e{PxtZ3h%k^&JhAHKbEE{wC4^s#t&WT~pL-Cg-eoPofd2gl4WG$R%tBiWC)_Dxk0-j)m!w})TsU0epVU*W8Dr?9! zEmqM$;I*WuvlQ4IC*F%l%8?IvumL~zXW_}eq1))A+xKgv>HNe#65ilOxs_+9sOb;XgOWZViC8O z#;nZBWYf`sx$KYg}#40Acp_8)BAu zPi?>k>8w|;-VT_#Mj~DXW=!R2`eQEF2|+Fo8en)H%VL&ItcY$--~?+L5z{(53y$I8 zbMyh4s8bcHj$OtH*+w3-#B$o6a~KkhZRV2SZ5b}Tkr5=`ir zw{J4bfG?HIy1p=*7ZygMR{B)o#BKDMeMB~Jx2Ve&9ZjFDGz0UDRZHBDU8UTNda>k} zu|pS>0;C=Il4I`7@*EU0I~JT3>ORborv+?VZKLlop|0>Vc6h$rU8WdBK)y#D!O3SX zrlkz&bfv4ad`Z-`D{-T}cf%^`@wZ`=`=>lw;RQ}?IvUr1(fxOf*$Xk1lUU;U7&?t( zUIg>KIz+%>)vKAX2tHVAWlk~QY!HQhJ8=DpJ|I%k|IS$*?A#>@%nW|9LzSb!J`?n% z8fU)6VV^#^UOp#euP1C0bpWs_@B>Hj zxBUPWyoc^r(nynr@%I6FVj6BeSOXwxZU&Vo{(kOUhO4YMB!sjmW*1Ie5w^8ZQaaHp zN)**=>+ha9%@D`XzKbmw;6;jAeXgCMKD`Ez?1ta8*p$ZSzPpUJFME#omwn@}Xh8rf zvG=6+s$7{17yYf)Ta2Di=E6vYPRUlY^~YJujCjbhm88|xAIc^QpA`Xtng`1tG)*zn zMw(8EBQt}`wA5Z9adM2?$;AP?s+c9oU3RLK0cAXHpmr{Ssa958-^&^{SzsUYHjj7_ zV{N{EVD#94)Ub;bo(6*S`OLH?%{4U}!$mAId}ZgGB(&?pQ1xYES%4UX_k{2U^yf9l z)Z2JAL_LSG)TuGiFtf~0pG3tDw?Xua*?tC(qiJ3Qy}Gm-2%v~Qk%{|TWOdy2?;(-ihmU1N`IK8?ZKNhbHx1pr;XgrAwjl0ne4UpIhu z4IL_#m@WJyR2B+6I!5l#!_MTvide8*mo9Mw(F7?4ujb7x>6gr&q~)ajZ`|7B%BKoI zFb$_W1)<(YMVK{4rP=KXkw&CQ`t+~m%=HN?J7}k%f>i^JA02Oq2fbF zRglW=v^88DnA>0Ck*v zNuCn8sv{{b{Wh;x`~CR_C5OT5?iuO+4tJ%5g}X)}qhKZd>B-c>__!m^9|!s&%uE0K zmjuu?>r+`cHM&#bqbAL((R6ZY(jpS}VabuAL7!BW$AQ-271Qg?WZP`Y8|P#3*!{3hrkk2 zIfCCD^)uS44+Myw3=YN!}^lu5R-EHfNOOE*qcZ^g!7fKpS(l4{&2>QIwy>IV?nqbu}|G8w+`wHFn2?c@Jx^wffhe^ITL|$VG@h=ge{T1w5@(vV79iSY%fCGPo-9@HO=O zvKSw-c_S1j6klMP&55qW{}xoUbhnt7>3yT?gqn*Y`pMA|LA%v)D7*e)PU(!U1K>;m z1O|LqDaC!_oR4_;gm94KksP(-nXZ#@^GIPlxKNAm5?!|N2Sfq49;kal?}dexknZEB z?H^|86LoEMHX};f5`AS7{}UCh(%DUC_+J}pR1Qwlp#wMqZq3Wm$x-(j)0DL|@e@fg zI{8UlG^OrZvvDB*$$daz<}mozm%|X8M_O}zsJ_zN{>yKFZcoSBdV9`^rdh$lC1834 zezQD21ubJi{k#t+9w<1_Z>8xN(*X4&*j2X85txC6cPLQzh>n(SGK8ALJhYQqmmCZMp3+6ga+k0-{QW zmA32<<(`G_ksa0Gd?ZZlwY$gOL>ci<)B?MaM~yP6{CfWBbK(2npT+oHx^YD~$+*l~ z7c4f#Jv)_U>Yzpm(8;0868O$>0K=B|3b0eQstmSINN#xIjHL$%bl#-;yh7d*l84UcqnKz-vUj z+6R$ik$4c7+oUaB6FV=kfvvS)%a!!7 zv1l8s=Fx|nC7ld9mSD|vK?nC~C+5K3w#q1vwo5W7xucWXvt;5Pq_d4f6n1L^!H_eH z6t*eL@?d4`0VH(4TLyQa8*=G6JsQ{5J{$=r^T6%I_@|D6UwQRq>(xL0;1-dWOvd}X z)ygP;>1|DHMCX6MElZsX>d%mBy8!+A4;C=SaUZDuXA=}~-FBv(apL&TEn1)x+37RYdV5`s4v6{Fu5DZzP`;hE ze(HtLgnYA={K?2NYz4%i-PLj>)bJ0^H8>aYru$C1h%^SR%QyR&vnzi|V@yPSy#LfP zSK+aP9w)mPo?6;L4eoHB1LqRo1&F*fCA=U&?tSji{$s{8LoCyI!~W#jx~~E3J63O0 z0jzV9E|vzyVVhYBhVa&sdW40fU|AN_i=ZRp>q zVf6=*05u2HC`;axyO|-rh+nkY={vY~JD*sk1@ytU{Wu!$$>3AR8Z%nPZyW;xw8Y7Q zdJY9KE$J}7**3GeMVax;Z4I}Re!6Ec)TDf#1l&h2+L|8atXZsd~VPT z9k+x1V&Y=22XoxeJjVWe#nsDR{f1klVPf~dNG)*bKe@{|R)A#PCPU`CIKi$+2*XG$LVQ#IUrt`2|r{^Y@#*1n$fQ7tu&cnWaWNH2Zp z^hWD52Qf~OszEM6nOQSU*M`00^EGZH_u)DK>xa4S*LD-3rQSj5tmuwkJ;=(&foXSvR>#&>C7&<{C3N$3qkU)Qcmj$=PjTT(H2vQPSlrxNr7;%0 z*DqQdI5b7ztava3I5pDNWNQc3obL%GJE=6h*f*~ffwp>&LrG-K#dP&D^;Bxdu>y~U88etZgc;GNp$GsH63YpmNM1m0 zTKm57EUe;Ok=_gL6UUr^g{8S;Afew@iW6-Shfi#A7l#$qTl@Nc*x+-k$aH3B$kI#l0XkH*)a>hXFcXfch*(`bq!aCXzdu;Z)q8z{;)DIc?U- zPByEjfww}{@z=$`n%EuU%=2)?a6?~>HI1sO)NkEdJ!J)J6#@OoZmxGj>KJeO7Rk#N zqSPNpvs(j&xPlX{t7Za&_hB({P=72qiJ?VGrL0%5aOF!T7na{x*HIYsV;^uu+!u93 zaFW`4X@BM8i^JlRJjN z4>y9U<9KMqb~U^4-g{b!n7VO`^^zW(+2=p`9=l5S1E{oYQb>|t=-l_De){w>j@;>u zW~;rw`R&M-)85OmL2ur+FUyulyUqgWd-!hfUsAr(0)##2tLgbCS(Lj3`79~tyU$7E z?$DcJ$^k%x?@cj1g!%r1uMcp+`cNV>SNe55N@`okMU6Spg{2LuJ4+bYJL+N3pa{Ef z&fP;lSwIslJDz~em&lj0&K5H9$IBd^398-52MECJ;Qi(ufcRTVaMrr?BT8gMf_p-aXjo2q&h_H{cLtJM0qBD`+x_=(A;!IS}zn(o?|naM1` z!)RKVhqhb-QZ65(JI+2b*X5)Rr?ek=Ck16lr3LnMoialfl%=Gg3l6f26i0f;bI0W ztZu9T5^n&&9-ijqzU#mMG=2B{><6!t=mUN3K?bu5J>rJA#}9HrbJNefCtrUd^hWxcFv?Hht_?K0AV%qRnF228JscFbBczR98aGw+P{ zk6nOT*S7SAMs{X)K7G z)npJj6&m85=FP!#m~ZmRSfK<^Kzaf(EUy^72R9Q3WSu_cu#dUHb=l=FYBfp~_p2|k zkC=YDV(LKs5k*{Dhal{R%CDghAnkb%Kn4%i_y@2T6)!Me#AMs`vy(jj2s`%mE_wR% zuqaezt-~J4$Z`6kkjnqRaA*EWRAz1}y!DjAZ>N^eJ6Z3&aV%4J4CxF4)Dugu6>pd8 zl}tA!w8Ga|N~Q}cPBU0Q?_Iq?{r*hEmd~Py3co1U&w&U~9~0ona<#w)186Y1=z%Ki zv7h1E`$dY0*azJ~&H&zQql&0iXFx+i&2gDPubBt1-R?LJ{&s_K!PO#oT9bdIeg7wc zp6rHYcKOgbEPq@jJ^BUgEi4WsZRO7)W*`gN@QaEuz2|=|_d%u? zmj|*@Ym+Ax9w>~0bO!;1PnKy*c$b??&}ii>hcgVPGsB)YN|hgZT2zG8vS4{?H;M^oF=O%1MVr3thQ zXl3{G=N8*oR(*c3Jk*v2Ey`g`1X}$d~g3!{iz$(6i zU&?t*C-`DecZ#;dE1f#2C0QUswrIyyBn^A@(jOA^awSwAo~pjZ%Zh_bA)JARbrAro z$a3R~O(GrLzHOJv-~H|8A5n7=)albH^$++ES4S*r@h9p4niLmAyp5q=>eTqA@Mr$W zvZ%@LF^QQV4Y$h2kF&J6T06cY`7vzWSwkO>P>WS&&9at9ONh(-R){X0WmL~;-~7ra z5Q3MC9AUymZJ+86Rs~t6Y*Xg=p%^zXYYvAiUHid?L)-F6uR7WoqYfZ%-RJ5+*w*y4 z0>9!XW?g&b7VSnm*@zQ%s2SM=ztjR47o%%^X_9cDW8yEi8fVPY4fftx3!2q<`cZ7p z`7J|7nwGK33&h`Z^$TH@-T%4}0euR`>34s?Pi3pgsdYNQGyvO<{f|8v`;9EcZEb`o z0H9x(gs+F0?)4zVU-rdsp@qoYt0(xyhkI=cOCWe-aY6&V;*?G3N>q$%N*9WvU6 zDieF8Lo3r-sb6IhM?VFr^-2-uaqzW2&;&mTvmu5A951V314v8$;w2H<%naow-l&LoFvG? zL~_1VKxWR^j9sd#Bu3m8O$XC+u{~qs=e(-HGj~b)t<;Wp7b)~yGxpr^lNVN$~-<`y-V4%p&oDKb;4(KoSwgP zf>h*+C2x%!r~}aI4JC@AXV`x0zE6K$V@yAN(u|vf)?5%}u&CLm29Xr=x+iz*kleDs z2lpMRC`8f#pZJLpXOs2R!M}F1$jA=HOM&FZ%aod<>%#gkHmddlTlwlMM6nc4BMrCO zjT-XTTc5YBm)P~IH|tIHA3XSa<$6wcO1bGUMiD;?N|sTitZvT=v9^gC*RDQ??TD!5 zSi-gqS~>uEnl}5CYF$nfWknz7HPU_l9xU6JOJ+{)2oNVduCi!jmpCu%Zo%oP&GOe@ z7W&*8ReZ0iu8Ep6ow{xhXfMSV3r!x=cTto>!M-bG*VgR{xgO+2ETBBD1yPRz$A9Hq z_+!%4GR&tMnJNFmLF5lMG3Ot~2p8-7KkJ*8gR6%0bMCfPUA>)Y;sF-KlTJ?k)goDq zZU?}qVR!IqFwt&Se7~X|IK(*;Ccl(h8wPr3bN83^*hcFiYkQtyGp=khBn#8st)wk| zpuNz6IGP6}0cW|)u%Z&qne&EAoa1-t*x!>+8nF9TDkfL<0}-4CTW!oAB&c1|X71lM zC;8u*7d$`3rc~1cEE_9oRH{Y#s(asSK3In82i$I^1=Dp2VhKh&1_4i!t6|ucZXp_@|+oXr^Z6_P~|APhG=k1$G8+F*8Xhfpt0o3O&Hkbc> zrW-lBj9_zCCM?I=sx3CM^y+7ybX0r~M|vq~ zr^KYa3c51d8UWp#n@Vh|ec@v~^hW==y8=jNE&F-O-Y~IH4H#Tz$L}d~d(8PXod9Md z<(-|}5@iZ^SEiJ>@8V)eQRJ|hP{Ms~ZgLVUbnvg?TEQ^V;nut@ofX&NSEMz@okql( zpBV5umxXMXGv_NTZzxw(Eo$5JcziFqhj8QC-)Lgg2L%Z^&j$cADF3E>5OR8ZU}Dc1 z7;cQ8?R%1n$1U`pTcQLK10VHV$PxsI|8xn*A-N5`)p@|Xt8QkX@5h&ZJdz~9C%#>} zuw7zxEZKYJ+;V!ENq(2vpP@%@N8XbX9-caTfCN5amw6h{_P+j<3Pj@=3cVk zH0PRwqn?+{&Ic*-{#BptUj3HjnbQeOT-x@`MxwbZ+rz`po^5Y`X|&tVV=9`NC=t_u zKs7TLx}?vXTS^}=BFca>#DeG6DiVhNz$^m}vF_1EfMbn?CUVL;UrPXUHEMrbFw&Ai zG#gC=4sMEu-Q(@5vK2HXC zG~+`D(I4Q;FI#VLZFZ;Sir3^-=8KH?sDSKI;Y$X94KLRo!`2h8UcL--T{=Pq+~3|gC_K+v*R*m$ z%qO{zUjZb|CigN?JG=4OMl zUWpc1Rp%l1)EEeBssvYg#yDjMZx7>U0SBw2CV`sm(L#Cx$7A&QX*=H;hkvWT{)c>h z(n?Ei1qh>b=gw4(Ye3b5bz~T(-rQYGWND+_bR%LkF2SFfz$i0%9RAHnTgQ{_v*JlcPP)>tLpE=anhrojFLM>fP$o5t~MMCgrO(sHEJsc|?0pH=PJU z0kA+5$Rl8ZKfM0;|BSu0>E`;h&MSWE%JpzJzROIfBbsD!L?OtPeu(j!phCdeTKT9M^0=0rzF>#0IKu-d^BOAkfbepPt+#~$VO?;h$X{LR` zt>tx*tw#_Fso2oGT?I^0^*AE z?AGI$kzU<)uV}kaLm7K4qy@7!8QApO;Qzn%Y>w6Q0W+gQ%Wvs-X2q)aDohG@N0^J{ zD$Eq*XA>}7O+%RzR_%Mf&=ujurfYsqFHGfRLS|Ah6`8D*TG2%JO8z12aGcyUe!7B6k-;|tZMrTurSU)hc6dp<3)3PO? zrvVLQ%2!1JDCEb%$048|!(w;um+VaUDyG5`)vH%| z>vO}kHD{hqD0pB#bfe)*PlML5I5g?ay%X_qp;3N2E(^1ZPA11<(o&EW9F=E!;-{xm zQkpNW(J)9m4EI48Ggc5Rs@hjnKdqAvz{6#egqAOUZ~ani&J+NMm$s!1G|Nv2>MGJf zgk{dx_ge#Kw#GTn{|TA-2mSS60i4(5%L^Boum67GcjQyTt5*h%Gk!BMp@2)|MEu`B zkS)*w=(d2Qs{H4I?(Keu%OzIGml@@ggGz;i3-uftCtfH(oK$EWeO<7qS!YUf!PtV2 zS6HF2w5o;EPYS)Ls%jxcEs&PuaoK*yxs4f3sdYWN08s|LTALxa3vy-+KxT^Wa{LF- z;|4SXi+~(e6MG1^1LT?8uIuh6sN=Vo))z>SVQhanF(HWzr}gBBn2+sG>-5-*onYpotf_)I`K|Msy@@Z zqTVVZaXpM16u_w!zUOQ}*0j|Wc|_yw?>9?Icq)XwgB#*h$UU}@eeWtnw9 zBwZT_rBWE#R_$$54yUHe4y6&Nm>YH8hULRb*5&spJ98(F*^jB=d$>qrNU87EuOI_a zadCVn?5K0bVT8-oDp^WvF7-^6-UpznXHk890P`3=@%7*EG2+Y)u>e4rlgWb&1D%}Y zd7ScbEQ5xhvzrCRjN=pRlV7gk!Ctf?E)@#~4BtKoao1*925{XHUroZE2A}^nu`hQC~_D_J`FncRwc))=xa*?HVrm{Q1!Z#9x`rP*(+&Zbsb zKWo$e4|BdmHzI%p1JQH+z+S++C^TE&`SEs}3=EK(7}Gz()=b~5mkMNtWJMA`nhM#G zNBMw`v9Zv6Iz`;O)7PLfcwG&t1RsP*I4&)2830DA{B4M0XX~$QouZuOoDIIg)tzLS zA~C5bQ>Ock>xb{l59a+KEupUfmM+WpM4<6|8N!foWhNna%_isgXORW}{f{#~YPuVO z=Z)K49RecSsX~yuHVr{J48FVVm0{*_41;s#?M8a4(S1|BtXa&dY6zKhmfr9*^Nrg) zZ{m451C=5+@-E;>ad1kk*)<*cMu4(BD1k6Rl?5YcUQ?$Vc3Y3%u`U9s(GCr}U&H1G zSVP*y5wV2&CP85ZLxv>0O)cOn_av{KIWc|zeP6VyMDqXF{@dhpK-nx&$$PhaF0}Rk z5%%TrP=DY5Gt-bYTZoE5vQx;GWmL9ol}gFdVrdgaA=}WRO_U;8D@)oGvXo`olVwDk zC8i>jWwMSe{my;OkUpQ!_woD3TW>S>b?>=nd7kGv_r5%$(NUO$%sFm7HU)#%uI;#} z8@|KO_SjvZg*0C&d4Et#Q^~cJT;k_-{xYNj7f|3lP;$3r^8Bu!q^|?=em7}*;kM9& z=105UUd^hlO4u;9qyMpVh}_k_(3@vU6#8Bsjq+Qw#%7^)n}5{1n;$p+Fl=ywBce*1 zZkebB4Jec?+SBq#ul5Qq0IM@U=PC$#@F0;p&43-nrqX?Ulz!F>M-(7ENq8spN8{Vpi?~P-sgtzdL=dYjUCz(uexM-JTtEU zEL9K|^e*Z8@FGYccHb`nG>Dqv^A3z}^Gxi9BFL2=Pz`j?tteM*)^qW!UATkr`lxA| z3EXfHG;ra=&KjK$A-0nA52O;#*K?bzc5i?D#;7J^Tar-T(QYxdof~4{{M0W$`>VTF z)OmFcv^9x&$GI{Ce|lX%YTg~0HZJ#@a&G?Z>Gt)c?DdF4 zE>9oBd-g8ok`Dkp4}9DCIb_?Ol0)+K@5Y|`9n0MJQ|P-?sB2-*@=zU#ks6oL7FnRa zE`RL#7N_N<6Fl$FUyd(hGv&~<4O6mtfu0x=x*l4|)BZZq@oB#M;jKJ;Ja$84P_(N5 zdZJZxsH0@*r>ncKtsF%A-QzHPclUz2d>gM7*GR>@fJ;Z<`S`d9wULX~=(l*_kT6?W{9;qE)9 z|FCiY0GyM(ygn}YP5o##x*4hFMC6Hq%9Mb%o#*e`7B1RqcC20UQ|qHW30?I~A6B>= zdAw^hD=XY7s^&;_Crr^LyXw||9_L7E_Z9xw|R%%5RdI)G`_K}eUv+4G(-OILR%npt?|4Qgy|T zjb{>E?)w@m?GW6@0_iYDs481+8t5 zQnP7q6JHt4Ewu9AeCUyK$I|~u{r(80XM>%RWdZ7ln9A_ZLO?!Z>Alk?JQI-V_#vbmbFU!~<*Z zNDVCdkEs#`ebaFE=F>SV>zfQ-2pwU|tE~bqs{F_BVDi{xXAk515SS%LUI!C`67M>~ zti`fE6yipaniZGm4Iq`!qk-LUa4y4@a`FH30O}@`Kg(N}VV~P0PM?z&+q=;z3<)XaSzSf!J^w3= znQ2Y5*j9L314>GilG-6MJnTj)FLCBd8 z!!u@9EF}ZVB6l*vd}ih4DrDOKIUzDVkv4m4%3=2ZYiD5g2SmY^H-|}`pZ)nMIkNr# z`us#u6ft!&pr`v^+0nxZLks>(Q=DaE`>2EA7Dbhn{BYaiO#yr3IU$@(K8A#EhZp^; zbX#$|hJ&)`SYK7RM{i5q5MQ!HlM{aE|UOeH^>LvyT6 zj`g!JSvr=A-}UCo0DO&}pB8ajd}^euqS7eC;?IPTj77Pz^-~HBmxf2rE&ZbjCSg41-UQz%wYr?}#NU1% zX4X;Ge?A_t)mfa7b1~lksgA8w;P;JrhqH!k?kSioWzwH{ktWk3;#VKCDr`1h7Jjcg z%~4*tFHT%x{x{m4`BUnQcA9gh!Pw+j?xEix^8@1P_*sg}JddW4^%HL@%aR9Un1-7i z{7fqzt2!5*PbBmloM^wOMsm8|aqES5jtqcFF zt=U`|8jPMx77pAj?F47}bR`^)D^(mH>5b#y6|<~O)_>t?J(c|%j@}UF%*nKfkvcS3 zqsv=?RMK9&xH~J!y)NCf{?XxmmGNpxrK7FE-zVbijW681sc7$G+&jYx8QM`e*|3o^ zig4o8@{GAGffPHDHVvm425rze(4rW()b?VkQSh6exfSXwkMu0VCw6spt@(L>V8!l+ zY

?ZH4=!DxHfER%&TN_q&ahIzNhAn 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

!@z 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 z zvAm_BpC5~;n4KFV=~e#?u_dWvdV%`*GCC;eWPxDl>c2qXC7PfANUH8Q>(%#OA%uo# zyu2bcW{-(&X4d-h>{`5@M1_?-OrD)XgRch?-(`9wP#q2d)af15qRsoNy5G z8WfN5zhGWaX+X>0sEk*$2)VO3og=aXH6X{ndjd3 zukJdx$r1IP#g08;-CVBAx*dCuHq=Qpr!-&ZT4TxVIp@{6Ux}-)arFKBYeKTF&P)N+ z@A}8ZBUiKVByb_ji$X6_=%(EfrIeJ92m`)qW+Jp|`Q3QlQ`~I!$E#lH!~s<{gM_)+ z;%7WWm+{{nb%&sIMC8sQ(zfn-GNuXE&jVdpDBMx;De)DxpYeFk+VgP6vqN|BsYFpL zv$nFvKl}nv^w+R6gP)TyBNx&K_>m(y3lft6QtHZBPO0 z$j}i2Whn*J?ncs7M_Lj{BThqetmMOP%iW?nu@Mzj3Y%2vi}snodB|weas_ddW*Vj; zs>CEw9->%#q$yvz@&|!Eav=Y&gUY7o?uMc zOb6dE(-ELS(dy%{(g8>}bQ&GZrD?W~9fpB~j5kK6f#iJ}2(Hozm;_{&%!yKSsE@vA zOeBxqTl;E8DalmzmF5OBGsSWA>sUJo&%dg18!}Tk;y*cH3*YzJibN)C1W_O@NfIR? z_0t}altu=+$Q|(EL-Nz3G^zR(o^+QjKHN#a8{3m-KE3dRNfQJI9a^r^bayvs-M+FO z5qu0oY4h4Ejb3(QW@>mzcZ4*`Luk|rA{wAu-|_47 zqddd9Q-UVVmE{#h@IRunxoxsmcQ3k2=4l&VS`sn1Y;^?>{fNYw%U<%DanTGZ7=!9D zmdO8I5x-L;M6wYJ?#mw|{@u&sT%SC5Th)TMYF+lWQ9P!mQyF+B6HK~ z3ue6F^2uSl%ynl_65}JOk0_JY_b9m+%o!BylEhzUZjATae2(bs_Q@(cA2cq(`TM!( zn?!{N`VD8<1Kz!h8>JnTIZ+eSC-- zBE>X8(5n+W{1udxI3w*EMO+ta*gMMHoOD5q(y`i3xa4$*KUO3nD(I=#AQ4IA&gI_& zQ@m9<1=VdMWwCAt9tYw0As$<->wn2 zPrYzkpNINxj?tTIehj9@{9snSJkcK083krP1I`pLHHzH^5x?XWZl1xn!%J>$QXyK4 zVmPRS0<^tjbJCvqRvVp>#v%_x`~myX=F100#(WY6L)#Q9{FwZYTUMct(TycN$IfmJ z0%vsM&Y#FWgaA7p=xI-YJX5O|KB4_=URMvEXm0BlH_dzHsIM4msXfjw80;pTxq6f& z&l=fpb7tLXu)YPmsjO9SbC@5@Fq%xbABPT*fSmHb$J@cQN*^Nz!OSF8sh##lD@H-H zAkV!Wr;ZejA3Rz8dFGmtP6IBrPUqJf9#JiAJKvN1f)Qs?N95~;&)SzyACfgD_s?T0 z1_z2ejBzvQe8B4SLL2l1B}F(^%24E9|hRlqT%sr-#YpAhys~mQ=(FifJ^p`(NY89rxP^GDVd#D8*a9#{X2QG1Si1;{HPJH za9T`Q;Ml%bu;u<_JEl;!IhA(cgy6R7^lGnlS97eK!;jNW$)L9@!owd%{%uT=EV?QA zarRwDv9QH<>dW{?j-*w#`(q}<=TSkrdRv+FS0)(l=pFHWi&tg$dMM@Zh{@*2&3|zu za8r6GfegR>%hRJBpdm~~e_4s^PI@y(QbgQyCeL4uHs$a-w?W&i%U%NZ72GTlJnQb* z5YTdy=koG=)=NHp-imI{>o9j ztDNgE5qwmA%we|YHfXhVJR_sGA8^5>0F%U2Yl81oXGWSdGljaAN(l$ka8BDZpH*gx z+i+MV+sdc%)i%h&PCELJ%Kyr+kQAzUUEcpM5cciN($4~s=UsNWimipP?Y35Z`(f zKgmiEdK8yK+Z0QKXnXngq9W)>D}H@W-o;z79S7EurW}6Rbv)GAek@os^?ub8mHBH? zJt30ryDls95Svl4le0kN05QXHGP0vNU=tr?IF6$!hzk*Iw|$3;esPotVl7JfL?rWJ zcEis+>m|)b0IJwsTk{oJa1c+!mTCc^Q~N4nnq(m1b)8B{vY#u$a8i&MEXE6|QcAkv z06rO5sTd-8DdhDZ1WmFaUaQjd-v=E$5?c<*|Eo$+Y!|Q{z3wpGscbi1|9RLJBq9Yt z?^6O>Ntg;Msv2Q*D~=GdL`EE;gy_oU4TKbuMYdP-il+~aH8C+QxPrpU-6Is@Kh&d( zagocpWBX&$8H|-Vzyg>b;`}_zGsUWZ%}`oh{ayLioERCS_+7bY$6DU8D&ESs&=NH7 ztoN)Kd#`f~3?-m;aZ}l+NssBlCWajezAjEHUeL-{XR|L~^Q-o0^xVY9KGugrS$usz zkU_`b$>RoVeFT}%0R}DCKbWuA(t*Re)nDS&MQ>diJLtKkoD}7n%IGpmxia0QN=7Ge z6HP!IG5Gd;!Nq?hyF@>Ron2_eoOgOYMS)F#k?#(Yr?tsq*4KsgwVO@%V9RY;*H0cG zbi(_hDGzWV$5%fE^!``_GAhR#!UZ4yzOuDDPA<7FUE(y~3Fm0?K$+Y0OZKSdZsTan zkYA1Y6w&$u!%MTunJ0#Gj8PO5AD%-bE+JlMf8iWNHvu0CaRLpvz@w6hVELd_gqv_% zmj7{J4dF@K8%xv0)0u5CGT!!kJ8NmMHHtVo3z~=s@C}be2fhpRn3nlLNm3!bu6WM= zcm)S*v8vZlx5uMve?x#EC{uPc+$;1#V7>m$XAOZ*_E&f4IwDW(vC^UGI63p+>oe2u zuc$fo%S*$AtTU^;4^JnCTdCK)WA%4`VSNTnTmBhG2$rc#By*W_4NR^me?;d0yWNmLc>BVA*cuIQj9c>ng81{{@QQ91F$An{cQIyvA>+KG=d2*>c2ugjLXuC%_O zWXXlFivHrD9S}0`8N7f1C=O0M`7&M4%!}~s)ur_|Cu7nN%^PKt(Y?(@JvG53k&%Mp zxopp1jF-M8nGuzqm6rP7*@R(NZV@auGaWcC>yWl6(5!@5Ck~{1HBO7#L+q&U*lqaA z-+%4!GeS37m_jj|yC(0Nh@QkQy^2QN&XbE>k|@x3nrOOeB)T>8!)xyEKq!Q?`QE|g z4xL9!GczxRoR!xdBHAB(;ce!Jv%4!@`hx#?wHB~PhslJHo=-(^+#&Jtx2eRT2v~Xi z{((^lE$@(JY&t};schW3QBxzrLLnI^&bU{<{n1~Qs^46$~Z7hQe^!oZ^#?ug?2 z2?agA*`L}8sK}x5s&aC!`E>rV;vsRgb;Zsdh>P1HcE~fRIYE6v`;Ijf9)s*_7g;Z&ku)WK2?Te)*@)Xa0w9$MGPfw zmzW|?v!gqNR2`5_!mNBBbhg7J-10#kKDFhey!mWT9=OhTb7gCK;BV-y3ejsqNv0xe za?Cac>*Bj*{=uV3*zO`ZxjOOl(i1aPG6{;HlkDtA!u9muEOz%)%-Y|Z5`+bp%Euw7 z`%zxu0x2QiyxnC*lkkLG2pTdJd5W%-R&=|Jyw~+5Ktp(`kJ9J;f|g_avhu=t$Lss8&BjH_Opu@&k$n<1V z^quF&Pus&m`(^YYguvMD?_cHHPV)@CYwjL?CD5b_%i~FBxd{mHe{ZgK>V>5PGGP|- zUOj&@>lcw;TDBYE*5xe_882@yHJNv38#->xK*DQ+9jYqcnk%^tqU*l|1H!(-;YuO- zoI2&D6WT(nbUk{P6f|=)aD1SR8DOG_y3; z;(74tKd&Tt;#Y}NmgMgGBjmufF5gJ(%+N`qQWaN2wmw+|y^vKpbbD-E|0bmiB7M<2 z{5{J8tpsfLo|vy9K8IkcMCt8_ z@ki=Pyc3WFIohVrH=Xn%0bo4XbYOGh=aFZ*+1#BxLEu6;q=k&LvNo7&WhyPJ$HoOH zck`daajLnuyR!mHxKqn*ss)%|8}a~RO}wwxOrGmbn(i9xGT(M%s^c!3W5RcRB|S&n z`n)mePFnq9Pf^n7jcAA{w(N%{^QnkU{*DBPA#Nv7xN(EjIyUGJZG${MqdfCG!ONE~ zwF_-x$wHo!(I--K-ATTcqF%f)9xiAvE%$e24u(bs*)S=uFDg#M|n$|gL4)inocDZdk-(oPhWn4 z?N((`)t94Ywm*LR)fR(*=QoA>C2*-D&BnOpC5Oocf#k}It;D#WnT~G5+PT8+ z>qt^%x^VYX<+D1?dyk*$J}j~9&4L1}lMCIy8GZie=+v?w-rmv0Mx5&7 zL1cZMHo|sb4X=V`ac!nrD^0UlZDz zF+O{upVi&ZhtsfFte%>(;{f_P{_<*Oz)jQs7h!EL{vzA}?bv?+ z9E%vv71jH2w9`p>mKNJj#!a>*)e$vgBJBL4T&Fl3<_B~!(Wvr8%4b)srQL5*4d;*_ z3gt24f=#HoQ|uSo*sbt={A^ya4%lP=i2U?EF!(2OL30xmpg$dI((3&BXR)9-T~yg5 zwU-{E@2LgS?=4S=kDjEVN#e>Zls!N+%3K{5m_S-vdYyqotJa|y&YCtT!a%LCs{vqa z!PDgb9ss!aZ-iMRXtZL^sC$a%j~h^-7W1V`YDZ~!Zh_?V@^4?>sUJ)z*lP*)br%Xu z5Nu;Qvjhp_g`D2zmt3#(X`<;&Ng3?2Z2skBJULW#g(fd5@oaz{BqQ~9d zv0jIcGbBSQn`$%sMT9%Jm-1&xC0UnV;{EmQPBDJc=p_{e(&N26^IwzMHV*~Kr}q3o)S(F}#N|jY6TN%)F4v^xEIki7z!6g0SZ@#1 z-_RnZE6Q$p^SbiDDTonQ*Ec^qjW>J!xKfqdfIW( z(vTEBB0q^d;TYJh*IhHQXN1xqgbSOboZ{lV^)4I~Gh5+5UekX3%ZFMI4)!Ihu?!5( zJdY;wUw(`2W+A*GWFU)KnDb&uQ3U@XXhwmB)j zdmbi8sp1EG{)NhI-10=7_*GyXZPXNH8Pdoo;hKv?EDFJ#lLKz^9Ya;#9fgk{0Y3jt z!y}QOB%bEt@KORzdnePh&}4>_(UkO;s^yT4*Ir#W(5DWtfJcDUo(7%ab7fxSz%#IA z(>%$yf860*%(@&i#dWf%P=LFg?GEAI4?RPaZ`Ge#6Ud&X7{U|AXZQ+%ZgClfnB%Sa zfij00){yf&JUk_53!g#XAf2wu=hiQnm;5Br68zZ%lh-$!i#lmL?2)~<-g9Pt`CSzA z&~beBLrrr5AOEVA!hpTLf_=6Rh0-=1XF9)k**^*awfv~=mN;hUp>`a^zHa#PmIsjX zEB!>y#@^;`pC&(Z0Ww+UBLr1gm!0YhuD)22BfoD^rh0AIi58aTlSW#XEGWogZY~s( zqe&oelE>?yzuJ2Azs(M{;}U6X!FK4v%<9|t9g-{RUfHlsx1V$ZBqCt&lLA4`22p!u zuTEVs3u(DrXBuvp$8{?i?<7GvR3=w<{Jlo-PEZ8~N!pi})!g=J^rL5`8x;Zwx8jZP zjzb7u#=lKo5Ymw2keH>)A0Lt3xJ;DH!A5ZSI72fWMOMZ_{tP1O=AG$pNk8c1nmmx3 zfS@?pdExgZQ~KbuL$}}zPV#%b*JCJ)`8?m)npKe%0_G%(k!D^QL~SR@_*2^WK`LZd z{p3B&q#W^oJ##~MAjmIq7&XCdNa=ILjx)a=`~h_5O6F@zn>KRWR5W0Nv=>eotVpS(48p;wfwB@Xbw0!&2Vz3stikH*C>Q0^s!&{fdcsM_v$b0KcqLbosy_I|pL))n3A z(A4ih@JK$x+6h0gxn=~lhH?WWg6dHdT#?eys>kMD{yV!^yW+9$K$x)H7Wuhv*&+j} z;R6h3pdc0x3wol?oT=&y4G{wZ%M_mZ7czz&ph6SlK~i{?8AR?-V~?tHbgsR2#Kj7u zx9`LL3lp(RMAFZNkss!OAf{^Pr82rsoFV(?qBIVvUx?^(bq2q=OI^5_z0{6<5It^XqSNVtQX|0FU{@2$2YQTkH?AHqjB zgbPj277X6OG)5wD_H1{K{6TC*FB=WH>JcLKJyZ)}f5K4`VU?lmqfPn4OVtfJSJ!6> zhaWq5lR%c^K5QmFR(Kr_$E)5~H4f(dkJE{OLpTLh#aKk!Bw|Xo_9rxg+ZIr9Fx@X! z?rsh4_1F}7?rcsCR#f!lTO!qi=N0M-a4aYhlSK0y4jV8M9cNTh($U+B$T6E(Wz+1I z!Yti9=MRufCb6trz!0+h|C`L+W2d-h7VacoVl`pgd4CRRC39!H?-@H)GGE?Si6&e@ zlGcsIF;2BOA7I-{JtOxl*=1=Qs($HBwHGge_@7T8r2+;nx2ctAJc(=2Gjfzc*hU&)VKsk7iREf~YZE{g zM2CH-+OrK60V}=UrH?9mb&})6#OXX|1O;BAGtWv9r9Hri4vQG=dqSt>33Red3S3baq+8#mc5rFJvS$(nq$2; zmnT0e@|N8Km%unH0aD(P1U^l33_|R=Va?s7AEoIjewM*$HaF`G$1jj-G~muH+?N&z zU|~#_c2h{34+TkdCBTI%< zDpMN-q>&O*-|U+YLnc=SJ%A_OSwXd0pG+tc@v!17*b#pzvtOSc{Jrm? zs*_u1T42_p0BPy6l0Hi(<&kTZX9#G&Vm!9Uh2sqczM4YuLxrBQ$6I<1k`y~k^?vp+ zs_k`nAG3Hb%?$0JCR!S}nxFIlE=;o-mX+99ZbK5ZJSbiTb7)+1>U;eB+40k#&Nykq#nG=DE%6vA$jHV|vzI#o@tT7GCU9#VL2$%2^nf6_X6oh=`l8BFZ6J z@L~`nLL&J6V%rVmhYkXy=>S5dbgTYi)0tnNH>a~IZY3yCODs3b(Otanm03K+DK^sG z5gETg!pux1DO5hLZn^7L62~CZq2!$YE^v@ zSo%>HCeLX>acl;ArSL&04T^aaWF!N(U647-#+I0RL}zgODlU_c|@n?5+})%n%jgfD;NM1ix>H zmeNOZMFb9ZT`{A-SYXof}A`JXik>1sxg<*~>q zr;vQRQps9nr(}@~^h*EDC525Mw0D4Km9!M^2iL_*GSgq8$#2|vt1DAi@WB@%%bwgD zaKa-ccBJaLf7t6yaC!i!A`W;P2EQr6-{_QRNiLTFw5dSDpK~L@v$jwYnbw&;Lb^Awoa*3684N*8AK6JcS)M1pX zOhYyxYISbOOw(hK7im!-!5gAN%HGhj0x*Kazl|0UGu?vVtHmnDlfdI6Idh{clu)kBJA5rfe+K=hmHwmMlnS-kmM3QW}!rqkM= zw+!cdrJ1t{f{;#S<{=YY1A`wUGab@LTX-E8K?s_^MlHYl!8528Z0dmY~kwQlS7i}Z%$n)X+0lIZWUN0*x+Dw&fW&F(Mr%NO&mWge$6E-?^G} zvu+gHW~G_MU~i{8^!*>UzB``k_kW+$QAUMmOQfQup=8BrDqAHDqu!NGvNGeeG-;CT zh-gR@GCEosI6|^V;!s4%E`Ha2j@9S){o~`&=UvWuz3%b6pU>;Mp4aWLV209>%8VO9 z`F1l`m!G5E#FxFKZd=I?73?2b(;_-}6}BUrxbkvC6xkDoy!ZE|=t!yi?Zg?n`q&Sn zJJHdld-8?>8N^V--zT@AcR?8kPL-lv%qLaePo>9W-z?;pjL@}OMSt7Iqhxo}n*`=BSYTQA;`FzQ zl!P;ab01>kR`{fWO(8NZLLULS-VCS?M`RX}I=1ziC$wpY@B>`Usw@8xQogesSU}yB zx6xuJSXz1t99nkx?OfMm)C8h#rmMD-OO}MrBhQ(z+M~;cz+}TJ1qgt?*ZIy3*t0!- z{mJpT&Wk3qnXQ5mT1oH7SKO#Q`%_Vgt@0X&%AME;7nMHqw5eT=_;^G&&@DD8s9CEi z#9Bjq6QdL7(8swOtcI0ooal9X9)k5$v&HM7%*zL3PY+c-W(BH)Xd>4AC{5f59a15% z`bZptarhr$0d3VLVQ~-gQD3rJm5+(2D%E7x7sT@)fK9G*jH zgLuO-)!zJu9L;Y5qw_a`lb*^2Yp2?nDM`$goVMz#=q1RBf(Af( z{g(%3C*jI@Go^ieE*Kj@5X@>qTxjRG~{mr&!ZkJ)WBNOJ3!&R?r(GXNV|0UwL5G z2WwXLWp&~9+lVI9)o-X0v_(;{7IhjdykI$4j&WA+NpF$>rn8-rG92BoT~qH zyBP0|jj>DZdR!`h76cAsCFag=CjTt94z~6n_cL}#!8=n=5ZFTMg=Qq)!$*oIH@w%> ztMdj)9#MK}KmXem3~u$VM_Z;Ln7L%RP=RSno8CSxlA(G^(5Anf57cboTO-kpO(6oS z#n&^`@ja@uY@Q9XNo9QY1fgsXqZt{6wC)5lx$ZGLuC+h(aWm~O5BG|Jtj4-B^(fG# zYhLCUe@F0gY+#~iP@vi%!W@xLnqKM4JieX(h$&wvyXnVOAIttilt%c-0h+>JV24bV z09cP2f*N+UPQXlKyu(BYcVw0y68F$J{aa>tbrD1%1}S#NolPG%>Z<%aW%Vh(Ax*VN z5|bh!b9tp_^^^Ya+68_GrUCObbzk3_u{>c;W0$@d*3w3N>CAfCl94Y31aXmT(oa7w zONEfv6@& zcWRwukFVmvrpl)G7han3EqJrZM?;u5g_dPMeXAS$1xA0kP2<(%&R$@!$4Yr=h$xv! zg$?^V8uMHhwPIhrTlyeW&HH$jYyBlQG0i#Y6mEyECJLRiF|-w))oIrLTc)V`-UusD zydNTZ2K-x?l6refTwS!>=-1#+jOP&1e%oF_We(o@+9Gm{g#Y}Jq>jih?j>Xu9?h8( z3xP%jqxZ~gJH0FOHis1L-b)_q6__!_KTU%zRk3RqY85p;Px-JkAy13dK6}SJiiwE* z5peHUB5>5IiThDP^ z9{$e!sk~YBibz}2E=3>48sq1lHPed@je#ZEe08U%1E*3WvIVw&652ed^wcpb@zXvY znYo5kwfWQT;>u~rHf=A0ghv1kY7SYe5w?YK44WWpwu4g3dhTaq8nm#zb6xYVpT357 z_BqIt%Rd!q!gj3oHQ;T78lEgq`#MEAy%!1%14xv`DqLoflv80F2D3YAeN%{sau`DI zx!Ry`w%BPYg}nyYgQ%b@p->N1See_UsLkvlwWRRz@%6PNF-aD8X{Ov3~^MICYQD)1i`=Axz1x zEz6Bi{z5TjZvrvNM@MQ@A=@pI4gU*ha}ijMwKbkeV`?dBXhW3EtY$))NBXOs!mOa>$agb$~vU;6W>wG7_S!$H@R2a@5O;}b22;9slul!(sd zpr88^|9c&>uBkm8IsQFisV#R66HN9dTU-H`A2WH5QfV6@x`6w?^q_T+0qPdOiCN{* zW%acu?!U&QWL9|QtThL2J+-TdJ7Z`Ry=1vE^Y6Gh*TnVE(ui(^u#;27#$q!J4~lA= zKF%BsjbCZhDm-Bd?@hIoUo7TwM<>nTBx{zS+Mftkn1>D#VSqw(%2#BuMRQ-yN$*TD z%WDyDV0W9)sMHg69bw*Gy{ewojxtW-igs3en>@=-o2%18<_Vv@&1IknyQrtk|kFnSsEKt;3_?>b`JC7v|~eZ)lQ_#={{Ke{0#F{etyr) z=&8J}2IOs|H2=T1L3;cr=K5J63$EoCM(TYWHCBbu+m!5Uee5!RZkaSkX(vG#0AMz} zwkwh*3$K%Md}26XsPW)I%?U#G8ORXoeb0{HqV02j%z(AuM265fhbcaL_p_5|r_$QJ zFU!*{)TP`K5}zdJzn!1IC+3J3Ie#{eedheV(Mqo2<}VoB9jHn06g9l51HaB4ZO;d@ z2#FfEBX+U(z#pQaW`_V$nHZ(o-?X|tgX}%vr#*{27drVB>k2mjV{=Cq{d<-t;H;Yh z1zhA`u(v3^o$pbx3jtg)no|2;>`R*8iN%`i+3WCNcjAWU1AX__LDAg(KF{p^%7)hJ z%zcesAL{IS1D5Suef*E>kY4g5IXMtnn}f{5KHe}iiKFoFpGw!z4N#9IUlhxGXkvIu zYiYyvn9~pDoXS5C6)l07bO!AEN_HC^Zx5QxhC&iX1seof-AL{`OL$$iBA`l_KQsWm zxU;*)`#S`|k3JX-_SE~AXLmGY8oNH-k!p$NX4joq;!)!?Q-3_*&-pVz z2s|6;`(E_SyGVPjCB*abh6!Piq^2i#)D7%6GgiaeBq<1RNNI9tf+*C>@tZ>$1MCge zIay7jsDe>S;0yEFO8()CH?Urw`~Yllq?8yw4}{)6;9>$+tfp$A?~0W%^Vezw=`H(l z3Rr!-eOlbLmL4^$fS?utWTqS0)2rRTKZttB>e{5CaX$2u%6m%E>@G(*SA;7vGz~~N{G-%LGg4_+M++BVwwq6HImKCa;G#t;Yu=RmH=P1 zGgnI3le7h}YB3-xC+Pa#8woy*0qcKj#eoy!C(Syfi!9-dtoPsdOA?yEP<9!~C_A=6 z6%iM<&ch1mWqIO3-&t#{4t=mKxgP|*$sCQ9m7H+7o?aAhc%|ZnIrJVOfV-zEEwG=pio7G(SfSz(!9DEi0P$<;l>v(kF zrOkdDGYtY<1NqHRI`-o}5|!9>wq^=MwQ4NLQ!@8>Pvn>SdS@2yLZ#+^Ha-@btMx58 zxR;C&a&Jlc#k!7~eaFO>-^zWkuwq?4*<9 zPsK=}Axx$F5R{VNN)w~B^zLsQOl!Plz1r>9q0S#w75RHroxYtNycJO%!YiJ~s)dj9 z@pWCL2m7G<#4eTgD9`l?Lpu-uw52i~x&CSc7UNo>$1E9NylmgoV$ux*o&I~3BXj>_ z4H@{@*i^RO!hS=x0aNHZLxwAn?=yIFlX3)3t>&XwzI+^-7(kb|fj#fkk-P%_o zy2TYop4$d~HUUtV+aHR|_v+HwRwt|+j{-7pyxhDCQW(MnuIh&Rwje9T4H&k({QzjI zoyivZ#@>HBSAB2|?%on?n*T0Y;&Vtesa|p1PeE^FfA`$WJ6^DGr-wDtq;k|evrHZ1 zWaB+{B`e$|2-jOgI>jB+bVv?=Kq!KD_;h1%Qx@(#@Fr>8_!A2ep<^fn&#iW?pVaTy zsC8uPvB!I#SgrbC@B3?@VZ&+uIHNQBYTH3?L>(}E6Rx(a{0 z0)@9{3xkYM(vjmWO)`{+$WvTC*?-(kzLg%rZ_gHxpnq~YCb(ah>#sUv9mTBdJAfL? z7pM5x*!I;5v$EFOT`^iS*H{&AMIzs6xPHel7O?Kyt+bpBk@BTURRI1-{})ClFn6Mb zTvAzXv@DtqJyuvCAN;!8XM)h#0NUOjPYFpgcEtO!&IA4959qOIpXS|$L7BhMZV1c* zqTDV+<`2RX-mrsbbs;*rEJa5cvwU?{xN98~is;+W(1b^|;t;>$_5&!t9<=NR&yRZ% zirD3;qu;C-97-u|YI~j|SX5Tm_hhy4b&gOKSVp-oO=t}cS5i9fqYON-YNbx{h%EnY z6qi405>p;*lGocSj?eMxyM(4|LgUZ&B)wq8clG;fPYU{_Wps1QuUkkk&eG2qJ!an${UFy|}#2@l62%K;K3;gpil~4{WWNvWL~E<3xKf*Wb+& z<58sfaVr@RqLGT!_(-@i$+fDSKR1H_%Xdic`EtSe&(EBSyh?BE;20iewu8-qp)Wfd zL0kROd;^Pj@}c?XW3;HAi$Mt&(PPot%-P-8;ynh8BY)+y9dSg}Jk$0DI1@!7Q-*9b z_VtD7B*qaU_+eI`6(QJp1g8DANN8q9DHyY?I>QWpY9rv`2qZ*DgRUwZ5&RKL$1h8f zU6YP}kG{x??4-D*D_4FL3wivJ?aXtCyW@i#>3k*KI9^E8$ofUxH5!J z><_pyW$Rp3AXv9v%v2RoQnxCWnT~u<^76KJv2#{3I2ng>1ok;CF{F3Z3{4i{HW#?b zaD&RM4|v?~=YxNBp^?x-HEUDr`DUj1U347e|KNJSL4a-mlF(7OdDs3lv%;mN@a@kX zPdu0=YixJwvO*otBxp4+1eP63hZ6YYpBZcQxw$mm%f*M^Rq$9-EDt7t zZWn!fk_!ws`=8>+*Yy&rs@1BYH*Z?_vlmz_-%YjfT?r-+K%|t%5LNQBy~!lE>MT9z ze>!80ZTZedH8YoF#m8wnKI2J-9ELVU<^;jNa;`doRSTWEa{amItY-ugfI`fLSjzB@ zVK*2Lu=ZWPzx`-O%~-zQY$5bAc~{E_27{hOb7e2I^ATpv{paiHYivp%T~1LKcYCG! z-1@Vu#~~aF91@f_kTjELCM7yd!P@cF3@2~63tyOcHFikp;jozTm$Oj6lCHSv7AioE zgr_Q?Tp~Fm!tG%H^T8cZlao%Z_otZPaBc+s3<(~;8em$mylo+lr<=h!Zbaq;>CCd9 z7ipi~OUo3uD|$5%7}lv;(cJY7-48g6H=@g5xsu<*WZMe~8deNUk4V&!|1WtucN;&L zw$Eo?gnJL9A?b*^z4<~s@U&I*qjxlJ?0n{AImi3YPyT_l8#~USPPvOT4+4TsI&(qk zu-Av*6yDG0aAcp+_MU6tgdkJ7H&)zPP@4SZS_qfY4_vnxgEG5wt4jIMCbL6Jn~s)N zvN{1OX~{gKk9OO&h0QqRN^tO!Yd^ndbmZ?KhYD~4i?zOeob`D28F4W9T~TyH6%|{) zi$W^616iW2E%W&}(&mA^86rtrQaMj(?%X568tpbSOOZ*7@@UnnpreY=1E`b?f>s@N z8t7$xC+zHL{;9W1r^Itk0EsRLvwCSS*55h9+}GJ%GG~^eUHm{B?sNMv`S;mvEkyc>=6fVVy3(OeSIbk5BoMY8z0rc! z#-eO;)yF58@MH01msZtv1dGI47oW0}cgg}UHqXhWXlvmv>VFcoR~Pez8L!eK`T3ab z`4$~^1lM?{F-Puw`xXi-1*syp=K$}R{on>r;ZAl4=f@HJ2SwROk z&1&=AK>8&|PPml>iV;@%1bR-5r)lV&5v6VEwc9Ho3;y`<7FIIjAZ4LFQAWC>6$U*W zTg*d_o_Thx%`Whh{0D2_sB~qQmICbayBNPSQ3~&A5@r4N9lwUe9K#) zz=N|GAS~Hlku}Rs=>nJyc{`|JqqdYWdXa2CX|t85JCZUKyZUVLHj*&XW>95@+gESH zLqzPbeLRPB<>HoNaQOaZ^xBKW|0O`7lO)*tYb&9&TV|56+dR}cfb^u18Vj{f*$Zix8g>v%Axf59`AAhYF{zSI9iS{Yvic%A`pk^64 z!!XKA39=vhyx3*wjk~kCz4>h_o@zthzazmUlSrmRkG`2n7-U2Q=GF3nKUX3?kNN$t z+a!`}6?F~TN55)#M-bJOTVRQ1l9%M8gE^D6Z?0I6zLH`?Q?ENabk`Yxq}J!m_f*pv z1>43(3*P4_Q+l+ecFp4%yUW1NP36sZHH&Kvd4E)mk|=U^XWl~lFomPHfhBkkctXLZ zt-G%Cx{~v^=p8zW3$}mSE;}*+c&eUFSd`M^wAa2|NLxSV9a1%5Jn(Rq>@2b>hr)bW zw>*=C!f?;WlS0B>zwjAA>^#reJwor4&VZ*TmZCScy zvIQ{=t)0(Z&SnMiwGSZ`Oj>g0+?IJlyXY9pCh%oD0Gj*;e9{zsO=mkg$yz)@mUiRbH8d_n zvojlF31wgaz!nZ26F>?GNr~BllVwTf6+Xl=1pW}$!Bs{fblr7nEthQ()*dM#z)U-1 z6F$b?zozc{l=JxP>8xGIUH)x1x}^EvQg`~mr_dHXPEvjOZyBM!tt zOQO_W>FBs~+S)OT6G|!Z|6AMu4*`iJc|aC&Q}ZQjRq0>99$IFUN@`I+(APwHsl~T9 z3lKrbbYrJ0e}80|{A+{u_L7fCxTLGgm%9ZE$L2N5maCLu5btB=Ymb zzn3+jZJ@m+I5H-RS8N%Bi1~&-)0_9^ou?vGru_N1$Niko2OeVBK>&SlX+@|tonB8h z#6m`CxC;!ZQMK}|xl6deja81%qV(R@=W}Ln5%d=iw;jTl;^vbItrW|QPWk>h z;WLQUcvAagCp`OlRTFg+0HQc($tT;a)JAzC#&17jw8dt%?rpiq9L54h7_Q;YG3-!V zjC9%W%X`>emgammRnO48l?D%=y@~&whUJ4w5VO15gNUme?!PG{Rzu(>oQ4N<9=sC8 zwi&-4TH^Eq9!{zUX9CzRMBUjB6FB1BLmDQ@ibK+BkYuI}z-b>bt-xs(_}#&6$U`Vc zpn%36SSI=uJzOlBXAFlkbT)-yz>kps4m*Y$$~;|dH3?|^x(CY!^u~wjsQlbSv}gqV z!w&qKuk+DrXpZbdxh9dvn}^&n+uF=_KW3jh`0>@4v2TIs(%l6vO#lbG-hx@W z&Gz|8cs@`r8}}E={KcxOCfLLNL`DIX(OUOOk^gM2x0`%+)DamZ-?R^ukm3Qql%e z#8}5JO&du(I9qN8eLt}-i^>iFA;C;zfERiQ+oNwp01xEh)1w0$vEd5Dktm0EP~3*o zBF;9jC!N{?;}-=lbQrZ#AY-KfS%It0)~yPSnU#3>wCSZ#ahQ0tt|2;Sq8$k>Lkbcc zl#e7e-z$3x^WUfP19IW=N9ZGsB~Y+oXgbNh3t6UjS5LBnW~Q=lybH`z_v0KV-GE+4 zIxuIg>A^q=t!o;LAk%;JS)HCZC1R+u911!*s4A7`zz4_2gG#Wk;WIOUk{uL)vOMpX zxGWNreD*2>=cz~X1~mTdM5iCA<4IW$p}3=ogf0NtM4sW6Pdp+c5epwr!{+9JPD~q$ z(LQn{%js^dVC9Z4Tue1uc=`JEX!I4b+oW*H-v*r;@73Q$)CA7>U;6#Es{yK@`;ZIY zF|@RTu-wdJUMO;gqH+oC17~s-G(hhM)%MEF(jh3^5MxT(Fsi+}jbG>F+=FhRtACGq z=#8kysho&7gg%nb_9L}n<>dmfXzZv)JR#Y`yZ|BZ{?CXtKSXywvAPlF);RN$_`1D- z({_Qb`1IV{+t|JN4g_02T0|cVM*t3}iP0OO2!{(X_>)5ZNnedrbv3^#w7qn&4NVP! zrX`@#u{ZjN`n>>Kh7gy;d_qyyf5J$drM_57JBoNU1BZRiM4m}wgrwlDf4`kcF;lDs zmILfXIcj|}g?l!|0mnTtvxmvxKoNx`GC@q z=eHSN5$thCBa96b=pvb(GA1dnthqa$Un7nqq{j_-01<5y+aIznAUIAsetF41pFp$W z`Oicd$hWT#TOBa^msh5*_+T4MTlQ;>{>Da1i1RbrfB)Tvxla^P7~r`-5h@fA@;#us z1obNl*6kl168s7LtB^{tF! z{KvEJvi+Ix-Pog&Z8oP;WdtgVHy{-^b|rlGDs&eLzw z0q-~Xr$hJa;)p|3Bbi4>>j`_LCAH;Z0q9&{uu|+k6{Dj(-oj$pKcg);-}6US4?HFj z)zfK=Hc@g_feKFLmPGD5%Di9oeR4+QmC9nW&F@4<6TV5jRkCUW;Dip%8P^tSUkz%= zfHptW<44*o1^Wm>B*u2`k+_T2eN~7T&Ytn>=w99Y?koUPy&`%qUDzxD# zK9a1}B#Dt1H2>eql46Nl9`Y?x&*}kBYPm0EdbSoGQ-WWv$;r}Xb>%U?5C69;Hd9Cvwpo_(wQsA zybEG1!%+XvkWSZ}w}7AhvPX!qz(KKQp5ag@w21pXau9!BQS=ygovJNc^{9jH6I7*k z_`PV*o;)IcMS^T+u2SR13gv&uRXc9{NFJ{*v{gf6J5-yb>9QFLqFumqld67X_1h7? z=vnOvftJ6p8!Fx=9U2YY@utWpdv;}$v<7|uRHoa)=uy1@PUU5^UYwXHfZWzbQ;+ci zw6y@OP9}kLl##wGB6y0`3Ec^4!!f55yM~SkpL?WgAQ;1gy-ze6r&nhU4tN|+d0>>b zoyZI_b1Db1f0_|ucVbK3>(f3cB}oh7P2GnY?0?(7CH7Ke6QmVhUYp63oxAl`_yYzq zx7GU@T$kpmRS&#wwN0rqGgtf^Z?L3-MZh%94)|&ifxPSKSs>=>jnnHMR}dC*rkq)+ zx5>)xpfYA-9jt8bnp4wEi#9?ov5~5 zEZ>7wEHB#tdNqxNU1P_*HLK(7c*^(B@Nfb6Lb|smzunhR^{N{U`$mYpapv zxk-N737BJ~?ve=cKA$#?er9CRvLD@KI_kL3>I(6H9kmXdohiU`LUz17=pcZAmMInB zno~dmH{Nt96dKwr?fyP{EFm7((RbO0*xy;OQ7{gz(Op@vBkP%PHVjx!EYhfTYcrhw zF|`mv`+jY&g-CwtK1Rlbqma(I#3b=WXqQ$JH#^ra=YIUy{q_NC%h1=@-)0by1I(yO z#RKT9pEbt>!(&6*!xRKxXz5gT#R#UVRx#(0iVuyKGRC+SJ*L2HiAq@dGo^7|1Ki4! zH7ybF+McyM{!omb2x#cg?f39Q!+NU20>+R#(jlQ4&?1Ck5^dIsD5$}p%e|}2ywwY0 zqr+#m_YgKUm2`QB)^E9o(vQkL#;(7|5HDvcpqgg59|~@lJ*}Yho7vK>I#1@h?nn2Z zdiY)skb*>TWP0OczOH`r>6I-Lr!xk%O}% zp_oG%p}xfC>A|+H;ws@6q?DXgr<%}Hq`914-;9XG=JY^}}-p)9;e(hxY=2 znB6lLQHO&zR6gu-d;;&yhNpaCb5;ngmYh$A)EVl3c(0sZ42BN^USe~)*d)VsE7Nhr z=R{~5TO|m|T)>{7!)TLv)>UqOxcZZ4+2O!ugwcE#{8j*w4)kj}2O2q?L(gF>IWIpca1VQ~P&6x8S(#>=ew}z?x z`5Ti~{{e1qXHLa~<;|HBG29(pD?kT}yb+~s49b>h2r*2c_Th6&{}z9*7)J%vC_nC+ zleYq(v^k~9C3v}*)TeC--tYpq4s-RfBhn9AVywYWX+h&WnjL9)Z`@1 zB<)Bk?qQzOb$QLl8>MHCU;Bo;g8M|&(eWUGUM z(aNjK<=(oR4y3^vtIr)=*x}>rZ(}uB)nsLA1T1YXl`mQ`{A(!;DSwsQ;N>MbJeDV%&uErPtNw*Jq6B9_?P= z?Xg^$L$wMw^@W5U3?BBK4?1e4_GlwCQV0u4-q}ial?o*7M5P|EXK%V^?=O8TZnkt( zRyZOEMTiCoC8dWSpS-kI?iPy8*?+7Cd!>8sfS-f?ah7aG`-b#i7kaCcar-+YXLzlt z_ZZYj1ss!05M7NGZC1}BTLj#AF~{ni-1L&2w5PhX)hqJv58<1@G;&Qd9wN0tDn(pj zoRFF>5$ZYC=VP@rU z%9AzKUOOjmd1+9?W9^eQ?%$UwJNDwdUS--DKKMtS&~|LMpHSk5Hgs(VQ!voEK0v6Goti3dx?ftV$%N&AMT3r6M^_O zhI`}&!VE_Tq^s|w$h_|TD{NJRCHi2=dv%XrKTdnY??uOCdMx4F1!Pkh zl5Ott%gjgs*Z@>va@Bd|F@cki#Oo!dqx_G7(;%b%%4KRH)4|W*|MNIOl?cGNi+Yl# zZ#0|f++W?%l2}_NQvanND%mS&nf;)DKHrxq&Pl%xQ; ze5d>$K|oUoD@l4sosb9IL*|5CVo>f-VfN%ERJi+6DjhCB0(;9?--t|_*dn1i^#6Iq z=no%Q>@?ix2#?l`R45E;y2AZ@4fg{r_cd3H&3E{LcDj6c-n8%9FmwmdXbcB9?DBd= zL*f;cF?Aw7PHftWY&Zs91#oTOGjRgdLG}^M-AGZ(sW|_TRdq};I6NUF@Qug;k%(cy zgmd0W3|lyQ^A+qHo&`L5hyTc>g8SiUj|UR5s%z6ir) znU*m2@VtkmV5%N=T&h-=+kK>CvByM0LCP7iJ1d0?lWZ372bN9j9+5pAMDGC-M)c3& zGa)zLRAH>pwk9Jsd>qptUxLjfEtaejMh)fna5enjBB6<4$J(mrd@$2X`9LKgc2M`) z<=_bn;&&K`?aCf+2J42#R;*F*+wfA6F;yK{oE<8qfeal3j<~vuGV?nOvjcP0tb?R zZmJ6A=}FnV)?eIqwE5!gJuaqHtui|%sU{UaJ-k2gGy{v1)C&)c({}|LyRc`AWEU6G z6-OpP;<5-GHPd$_h|{tib&7v^F6Y5ui{i+O^3j?)c9C8V<@$Vk5%C$YN>6wQDA58o z7X+?^dMp93?e{Q`ANrtvDnHNMJ3?TS)jC-uLeT`ls;iH;NNspLIPVuqj`fz5C^MCc zq?SKRA0Y!LZVM>f4Z#ewvPhc8od0`d_pyfsU3OHDP3>aqjn0ppfb3}ufgKWcXY^L# zpr8jj*0Wo${C9xljc7u(Y$}K(DzG1^^^={O3f5RV8QwZ`1;92E*X@Iavh zPYIvb4@jbOjcPG$Ehuq$9~~qIuFC7Qnd$jNK=#2p+w#?O(B9!<*$SJnLc{UwyI$;r zxmrh9pi1<}wgg!VO0BgQEJ zxG1VqA|ScO|I;D3dmk^k-H5ZFV9%C}BG707JCd0Mls}yqRy{|>RSzxL#c3tr0W0K~H+HVflys`Lj z1uSVNdmLh|BUfO=dk+ru0b(YeT4W7_Yv?jjZx$Z&i#Xz7Jevo8UQt9;=U>LfWSY#5 zn2W8|*r}}_J(Rt>n+ProJ?q`*==l)Z>7e6XAGT;~`7=ku3VYbjrqX_&WSu>B4p*j( zE^Ykjv51Ubgbx75`6pN{*DH@LlayRfGHKPG+HpaqvP~bOd_hdlN%zx}`{yBjd=jX? zdgD`^j^e%*zrJg zH9V>0kml75Qf9Gd!Dl)4gxAVkCnRu>r`7TgKRZq@!ZC(`W6aL1Ku3h1Yq%p&B)9M+ z58rD6kh}eRMipXiuS|=9UIi=YpnyHPPuPd|CS$Y*$ltK5$*K}7HIi8Yu#)hKpqvdM zLfDz^VmrO-#6mXI)uZ8)KNO5Oz|^`7C(fIXP?QW)qL4rv!t8ELWF|URh}$n|W+vD> zP#k+xb&FvW@>itqmNTi>F=Ek&77=)Y{U3%I8hsItHstOV-#hI53XU~>$OO^XGKr7_ z*{1V&HF-vRG9`p2aepJ9paKrH<=ufh2r|PvF>QM7He!}PaS7bZ!hTl6Ru7lm+$RSP z(UB806v%kDlTW~yh+8YeJquG!Vz3=C{% z*lBKRYU-ow+LEJBfj?m#+%3f&Rm`wiI!a^K2j=_KLKp>b6A$LHJlDw&=KnaK%z#+9 zMax{SJ`H@66;u$>_oCUeI6PK(-MM_H?%ks@>#jzNja`T|#$k$C31me{6KtCc@3^CA zz7Y~~pB#^cn#-MCPFfC`{SH4KGCz2puKum^&ymTSYFL|E?^lG(FAC*+x66x{%Leg+ zo#oaEaa*s<`&OBjWL0v%xvp9%(>hsj%yZ#kVEaI2=1lqWtb@lwa(MBQDfy~F7M|d$ z?`1Ly*1>AtS?D8Lc4O(D?L?CTS#jtm+TN42rPP1VMKK`0ElqWiM|o4#$4(SmvmA6# z-my`OXp(^UBt|-dP7E#6+lz3PB^psQ{F3y7>zJ8y++`c9_N4b`TL` zE8&=iaeh>hv%cfX`%P zQj&+##BSpMqImGe)vNynmV_xEduY5X9a>Ogi{&_LtL9KFlQ_v`Dy;C7hC`B6Tcqz= z-3A^ziGs(P3hK^wWP7x3CdySG0aEZPSd4^lKS>4~BBG=5jCc!d{Bpij8?rxl)E=F{ zM(+`^A{bDE=&e`Iep1gKd3JNESoIa~cS}sO3J%_cNBORdqdgIYphw>BlK8Fm^YOAX zBWM-|jsqOnXVKc1KY_2|k3VnRlTS|&6la@#A~cfZ+r1?*XD1+4|E>VLk^M3-B^7-! z8zzV4@hfbJg+j2gHvZBZveDM#D8(fZ!&890n;}i}CtoistAj8!T`nx?@cGi$XpglZ zyC20jn2R~&kbnz}|86hQ(ZwocOh?Q5d+Iy062}$0^W%9yhYck4-U&3h^=Vm%Iy6QP zC2M(6L#t05cZr0Fku#)?Um@MxtfT{4)sU*Kf=^{7C9}`u6ViiFcl|%qIxcXDw=5=V zPR=iRE(6Y$bX!{jeEdczT&B*Q>z&)5ijKOF#k6$Zu-=*fd_L84DT=xbG;Rk;6c`h??@XBMsn_V`edWQ8LSa~ehzzYYlp{&SU2q~=(qT2V zgL$g?o*BUY}6)^Jm*Iu5v&H#?zE)qfUU?vtpZFl z>H2wMTM)IXA*4-gF$(U0<(1eKf2H-oT*6BjpJ-8>L7=YL8E&cE4(6xd#hb4>h z)88D$7d?Z&oqfTKk03R7;sszCkb3t=qMygO(KT(0qit#}n8&UNYa#zzuIsG&_Voo}^GsUCKzp~ICOP9=wz9jfjRDfjHc@ZeT& z5F%=4#?&Yhg_P_5J~=$OHkE|^Lk#S2)s6a`2{5Ml(%Nc0g1I&sJwEiV$v|f)mnSph zH&tfW{hQ^^Ui$B1lRrw|(<%HisN7WgwD0i&C*Xm<;Jz6mttvjYIHOze>FIt&f2)l~ zP3qAo#YYYL`;j`$QuRy?efJBq^I@rZSk64R(Gs5_MN#{E<*vC}X_TjLVbJZ<6!)Wj zYNwduGxt3cR^`@kNMJ;&l~-1{{!jCz#N}hq0ExZu2GL<8Ef; zICP^=>)S(?$cvAJBlehQNbRrwY2&`J-A2^m`GN%tnu*W|LI;9;e+QMF>vf<^_1)&t z2};4G8E$VUc;g4%rCYzxVLjVwKa|&pYy1411kQ2;Ih=G=6H=-#XcBH^K#n zsi|w2I6;tFxU8F8Q;W8XqL3mUmPni4#wj)8uM0^KCkHt*y zfdTVx7*i0klz7qgX?mh(eyA$KiqM(E#3{tHSuu#~&lx$hz5jiDVmJlBuLIKEMb zTPEAps#1pWd{X++Vhd7I2tDRnJCZp@@?BqUY68K+XNdMUc=)8>XFvlNcSTA)o@7jD z7UiEVYr{<9kS7w)D8&fsIwHFhyCTkbK2l%k^rJYrR2bLZecA;>uR{vxny?do%L+JC zI79&&Eup>SB+vE`89cDQm4+)69QO;XCym-r5CvWb*gzz{;C(%Lb&n3$(yrv{GW*@I ziD!EC=B>)e`MkVf;QnZ-EjY+&uLDDq{#R4ZTdf)z0l zXTCk|bY}ayk4#IoaD+5!ul;Q49IIe_GhrTx<`XgZF2psF>s}eNKb!pnPKfGFVpRS! z%mo*yUthEA96K7dr=!bL!jTU9=?VcVGeEMU3i2JIvAzq4^cn7OdYl^hkQ z!!{!6LhkaJ5N=pbpTD)dP95nXb~WAKeCy<@HYeH3z70>3wkth!Rb6*nq|R}dYKS@n z)~ePLgJ)WjxMS1Devc1r7lo9Z2FP4D?qb2UXEju|3($>SkhbaEls#4N-9|TdI4?GK zX|lKIxdO$lTYJQ=*Me@)nQm{@-r}^jd^F%-xA3~^Ffv$fz-!7gJyKYG)BGlbf!+i8 zL&^v1aEJGc>SV628o4Qpi~BP_btCIU@3?Qp$u}2^PmkUDSNdR&%3$oNtp=OZ@W8N& z1&E`~@}2Ncg9>lYHfWn-of@2?)!4tIKSc(&Iz2eot+MY-a_G+$ zZO#w_)Dv07olq7z$Aorq^RqXc{UzGc4J?Vtb&h%`q>xLI#+GwY8-kItAEm4w5nHsM zq}jho;@kVTphmCH6~0paCgvT-S*V}x!G|nT<;^`Y3-xij7;D_6QVi8UQAde+jpMixAn;XEuKU8X zXj+0!!6VB-nbZuIe;yjm!)4o|*6-s4OW2uAVzW@~kJ&Kh#cHs?ZfU`i-K6xph5CvJ zSjl~ql4?043mC_6)A}vAt&Bu_DY8F#!`TKlj74}lotb>)BdFi0#SAaJC5_6Hd*58{ z<=PVlskfWZCu9X5F(r&M3{j4y-OgJ*LNw7NR#C9`w`Th&tyvaxH_vHuq;ht9np2{W z$>5=cETf|mr()r`i=^rzs{cbqi$)FJ8TAw=LGA?po3)BCH(Kc0X*JjXQvxKI;Knr& zR0$n*L(O~O;JO#k{tu@c{`?AxPLr?33WlpQ%hY?sPVp68!6k$LXS-YoE|8ulL8$5$ zC~@<$11pGUEWrYh%I-w@>19b9!#vMldn!Ns=wgG_;o{HZQgd_75x@A=1^Ei51_B~X zKNNxMTiI)2=m(By5^1b9nA%lT{|JJZ>-%c>J{vsPOX&SyTF;w!NB%u6pIRxZG{Ixb z&^Emytl$!dnpqzD|B-jYpI|sG9b$i?^}DI}-^2dL%SjeN04{z}nF!?GyL*47HJJwe zU9IgGKo)+PY~Soz>>fdf23%-L(~B7j9=&^KJd|G>XNTn z1&VidhhF6)x$@wtLg#A@ANQeu%1#X>sB|3YM6YNvF$@6PJ$$rzd^{v@_BnZ0n$TZ0(KOw~41%h|`_U(TB;V?alf#T{ef+)!*wl*AP%UftJ z6gEj#DGgUh)vQw<0iW|Vlwp(ll-;2cezP}3-xth| zkPh9mZt2C*OX#Na73?HmNMB0Ln4xl{Jh}O9^>_+*`tPS{?GQHJBBDI@(<8g@rao@D z!WU{f_^Kk(@li)yo#RThU~dLj4~ZRWq(}`g{=>0elHVS`s-Vxfkevi!OTef6ra8Dt z!Ur~u`sBDUX;dElWObfD*et$}HeK;_{}Z$OG&6e_TqU`eLm=eg=F~j;3|zSG$6k;! zlZvPsO@Le!>A&84`+W+eNjP_Pz#6dShHQ}_X9zj3^=F3CghgofPny;yX!50L0(ak8 zT;}%{4pIz&lxGoN8xsdWmKk#xN+YY9t11k>vo)$jUNx@iOP2?cnNf6FOBuO z_;j(XY`z^)s3h7o5T8`e2>N`$g>;VZ=5eQg{f+$HsN`h(nv_k?4yW*izhr4_0L`qseEVv9x5WjzS%EAGuStK-cHOtIaj+Du6D*r-~ z5&p1FFM1*st)tGv?~m8nv^N4*Mn2^iDK8h4tqxK}lh>S&CutJ5L>}I- zFXfmMR+74NBvL;2o;qJ*0}zJ>b#-IbkiUU1j{>&91zfbaac%}e)b-8%8@+E5X#}jR zs7zl;{59F+L)XyeOe;;2)31$k^h>v2oD!Gc%2 z;#z?-%m$6dB46JVtaBY*4H-hD>Bp4l>D+sohi<23JFa zo?q1ctyA@RT1i`;`9Lw>v*or+5?S(j;YPa?I!)@!Reze_QXAA7?CP*3KFZ|1UhQOT zz9FK-I{pZK<#CoPgW7we7EHh;W*(Yhn;8BWf#YJ%eZ!z#m`KFNoM{T(kL!1`9ONhV z%&ax{3FkgOzOqx!eoN?-oB=h(A43N`eKoyIQ_$jfh}Ysh^CNPOEPhyj-ebx5ZQm`Z zYNAU*bWbsbsWBE*m8FdERB>^mXQMl+J%Q11=|kM{Yrn2k%FH%BKA!V6^hbjei{lI% zYX;@&hb4`Nmf*JHqoz}o%rA(3+5CcK6G_C$dk}ifxnGXR`pKfUkK(c&iz;xdk<7U8 z_049nhd&Xsaev^ZEk4^riPry>e&m=?fN{db!xp1a4F+bSxcyU1zRr<-!;&uVp(bj! z<9H!JKJ3jp@?&g{%-geG;$V|eyiB5cYR)<&;awLp>mHu?g;YU`@`q0>m>xZBdpn#W zVQJtp-66R&N@jR(3$5Mw5vD?lgPO3Z9xp*aCMadm^8N?HiLr+^`{X8fX0kiW7#AoA zlb=(UcgG>4BUusNyH|gqr(ed(H4?SB;@&*PU!qkVw*ARyM;M#P;Da)j(*((WSiz4v zrO>+@rWGGo7vJU$-+1GTDiz<{-oiW@OL~%Ff9W}rXtx zoT|YR`CylGTm?>#I>hX!&|>JO`+x7M8hQ*e2DvA3i-~yqi$5}T>`RWJ+s6rVNTPZC zP+UE=(P!2FJT(UP9HnkjXlUui?k90uvpq=-bV4q?=4PfL=@0lr$ceU}vE9Rw2@dQQ z|5Bou&St9W?qt)((EP*aSw;10ry9oH-ZZ<}^}oKANG`g4sSProewH8N06xt_xXZty zcSmc?@EOU{I{uv%X#2rDTc&|8&EZ&w_5_Cr>o5%mS>CDhS=|1VJV zLYlU1_!+UZdiDYin7d3dVtB$U9nDKPb+?~o#)MM@oJ;ikEsK?dj616{Ik}X9WzWZ}%;>f>c-x$sQ5KynYp;gM2 zL8qB;kpIytv`n3}=)w%0Xh8oT$=|5^r+ z8#4Z-o5^csEEn<r+rDpfFd(o44>Yqwy{@`3Ie5ZY}!>hlHQ^WoXnH@uMmbNAxFO$>6rN9)zlzG zw`QZh_TKNNli%;FOA6d_K1<@V2lv2yX678-u@TK@Hg$|m3&s|FK>@78g+IN)Mcy|m zyl;H0C%srXp1c<91vBykJcm2t^6>KT5q3S;Ws=uxdLmajH1Ah=u9N)YfpXsPziX<0 zmzYu(x^@}*H;-Cx4E^GO=&0=hO^ZjXNu_(j2G-5VCpIpY_H=nmE0{yqxBx%_6H{VAAm3X72_D9u|ieoQRjgr}hu?Tu^V z`wxb66l!Amr6%6g>dE*z$Q$1A-@7EzD^tt9Sq<-irpZyx$o@Kd;|ldzY`rttY7eJH z{N%+I)C(4DK9w(A-)WT1(}A`%znvBN6nlc_C8nZ9C)Ss`{iSU zAY&cnl*2{x-+RAGolHK`Hjv!W$coYIk6gt%cBb92qv+S*4hIK^@($18!%|wnHNh6w z68*iFd8>cpiN)9RV|BDI#O*%tg}3dJldH$39x)SLjg5$Xf40pPaQ-%Qta5kr7HmfX z`God@e)3y?@r7rsn4BkFDbH6eGjH@Y{g&t(uHT&#c8zb%#xkv*lExolw^laPv=@mE zbOjd`Cw%`ftNci`$&3|ymrwMR(+%d^IiX7|GR*fy$#3q6xFvs|4)|-&TKj9`zHZ;P zylvi#ikQkz+X`pDta(xqR^=g=DV=@|gWNVt?b}9eHPJ#d=NjK@s-KQs2*72_xm8K- zvgsX-fxH3BjpIzc_rzAE4{l5E{A^&|`KfY2c{{5y*)grR{pI6Nv-*B-&HU9;dQf%X z-NnIpW@Pw-?uEHZjhR7J`;Uu*$-0nhcH&R&k8R#4btXOQELUIs?bEyW3UBreR!17B z4KD2H2pb5x7;f&>e)?}(OGWRUi-CSUS^WjfQ$LLq+C1)rAIS2qIi5H8MLDR0uV2K^ zbzyy=pft1OWZtv5oP$j3HnqVspR@b5(xOb<)B}q%j9-q=j9ZzY`_5^0ufw->%LQj% zvsBFfg_3e;LpJlk5&T5B;Ik!8IyHQ%Ia=`WHv7HvB5gPI*XcW=>~5i<16|?-MYL6i ze(Kc8zQ5g_tK`7CgV_sZk&E6xo9DrQaOs4)B>yZ8+zi(lc*o1{lW(YUcT<1c z@#If44$jdU#sWU4)h_jzm}A%5y`**bt;dDkNxRS8ZoGbe+7cUo{jxjJrB=UQH~cWQ zG)(xD*VT})@qpWhePIROYJ>R!fu9~a+&CZa^~193SJOtA`kBsHq2}LRRkA0=bntFw zSXus`hVSO#F#{n+WldLe?fAZ@H4OH@4p`gPapY59nE0xsyRGM5re_Ye6zxmUPOPa8 zZco%=gp`?4EFFuK>&@oyhjj<}k2LDio34XV zs`P@`0cD@Ge8jo@skOSEEWb(1IBW*{sAp`WDB5Wze%buH@NRYd-quaCe+9KG9^{&4 zDp4Ka!CH5zv+MVPoXUk-vtw4a34U5~q|@N#Y}pj%_+y(dOii3SyUI1qWLA|jb6;Eb z92++?!@KtD9TlwPyc6Z?PZkG#o)lcXBdA{U4iU zLmg(Tn0i&+ac{^|UA#T{vhCr|lQ*^&R&{AkOP^3tW0`Ps=Bpjj%%|abcCEKM8zZjW z3$ySKYRz@ED@)BYS(Ox(cd_$#@SZpQAN%{>+Z(?b^x>^`^zeqYX&>dLjVtMkJ?~mH& z!)Ff70#kweV>Tvzd3aDjG`BsUb)aZKxUM6y>V?yU*J#H<XSx&saNGA&eyskE-vC zYHC}%K7tB}f=Cl-3W_Mb_oCS8BE5qU>AePsh!m+7dRGLbm(U>;X;MRx8X)u*AV462 zge2ego^#%NzcKP7e;BY?Yp-X{`8;b*$+J_Mr{*&7mW;J)V;y&)%EGD5vb)REpSWL} zv=(&=LY?ap3WwC2RZ8gj9_1)Gg~EbNF{mA}2HMquKxzMdE-wz?yfeQzFNkq&-LM0u z2^_K$5@IAG&0P50Imt^HENGm`DtV9e8V?zIN`N{hJCT8R6x%$Lt}brX*aG6&?*dydA2f0@TS6tzI2@ius4?g*$JsS0&0ro76czq0y}(S< zdJddAD}${ehQ`SfIbWHH5pwoS@xoiz|n`PG+HZMM4N+F#81s4ndh2{M){(SxfNWPbKV?sYRvET|ghiVqkL08PW?X434k3bnF%p)k2+Sf*mJrD2)EHW6vh z=B@XOz^L-P+1{R z@SR!Z$+>Kl=cY*vAtPPS*J)zi0Njep#ojj(J!Tc&3BTOT?%Md$Jjc}*zK3YGq@pJ~ z&ocgF`}v1G{%K#IJOy_j&RSFCr}Cb^RFH8BguzjpH-ZN}Y}xubE)kN|gs`L#e=Bif85$P~DB;(;gP` z$dX;^kn=)whO#hb82P0n>xVJsDR*t!o$g(=NMAHW{_F>8J&nNKNF15?O%9RwY90JM z&@t5FCx09rFYA`<9)eOq_X}QdDYtarnsJ=K)(OgZY4alz1`GyTdZ*{Wh6C(_w^oM+ zFNGX89^5$YSHQ9{4kH8HhWmj_2sm9dxh|Y@A(*tq111tW(X}MkQP17!I@JDzEqA|x z>~I8}GD7KVkBqrBcf;zT*Y4=xp>${&(esU8-|*7F7Zi|+F2yRnw9!}UE(pflgwt82h=&vP^!g9Bz~tTk_#p=Ff?cDI-DXx zIDE=Q7dHg6FDRFbs80K<1yr~pbx^j2^~G4Mu|7Qpw7>2hKPcgKPY{aK{`Eji-8{p~ z{<#BiZxEIfq-!tjjxo?o43WTHs9!uCs8Ce#e_>y=RU>jM2uK-bp0Y^v1rbX`Gzcwk zNMkkdQ`#=ns*o$B=en55ca^ZV;nnOd|Z|;8l1Xq=@Xh9lF_8m$c6@t%%)LW zeqI|vLKuwW@H}!|+Uu9MDS!dft}Zxp7n&{*#?vt4S!A5~T+Z-`+w5sRGQX~a$r%rt zdxz*9Uw0UVr1YOTr=yHr_;%pV>JZ4{^|suPB#S>@q%{|Q{27#uY6VoNqoE?*`>86q zPu=(nj+VS^US5&}4yv1gf<|@aq9#E5=r4`j`KR{$GO$9n60w0eQo{6|@SzkI9P+!L za^UHYvMraX)Pbg&2j&y9#McD5L~{~Fk#&*ri_@5H#zc<{ad3lBfmKIdm>T$2=kWQ) zECk&P1p*1djVebeZ1&)R9yxf&eIHoVwwl9Usi&@y5BC@2RLCc&Pg8XB8S~B#dKUY} zUYCUxlu?}`F8;2=N|U=GoR;M^<`no(U@)rZB7Oda_VvIY2wddDiBK4caeEi53}wRq zftt`%%|*wD`zgqsvUS{i>elBGR?Cobd0fb}>lWxT75oCH%hHxFd1uC{jaj4q5%^DL z70B240z4|Y;mm&w0mf>jZhN!ZC5o-ITh7W_NIy_UDPG@V(ZEG zo)(qgA<{?*SKC6xk`TC3!2!2&g?MkuCFSA&$YM7o&JEvMXk3<0T^%RRrx(M zr0wEnQ&zz(sQ~$(KYsya{w2^}(&L=|&y113(ObYi38+$CPukDdH2V?rhy=!+x?qBE z8e7_yDKubQno#Ti;ak&6b`KTO1I zN`JNP5eoKadyxhV0{hDCF2d}el%}2IJPR=#=qdJfv?J8cT;cQ~bDGCbYg~UL!Zmvw zcoxoEo(9(B58QlNKsHZwodJ1uE-F{_opmE~P|~Rt;^#ms88@ckF)U}zkB(-1;FTNV z2!Q(JX_2dZ^W;_1ZXFV7XO_6?9hR7s1?%8rW7Kkbzqvk z>*Ba{<=1m0yzQ6!Sw&NUK;}%HM+4Orou!FBefBnuF7ajYyt~Z9|582Xm zj>j(gOdKv{93Mdwie?>(9(aBF7Vd2+t$u%_whyCBz(?`e!%cGidf;P}33Jwn-;LU+ znzU}H^4Zt|*nAv+-{;p<$n*LE#|KU3081^ZquiBEMKm9~InnjbwVrr?GB=pL?hRRI zfXNmY-p_PD6U$MUyt2;9ve#S&EpJ`qN`tSHgxK{U)<7T3X1!#7@bYWI(#YPV6ZdG= zRK215lasG{*fzg9=hDT))%EEzOLnj_)coMu@rS#uNP?RSE@T`zXAg+X-+K zN;v7)=Sb{nv^!B8rGutMzNd+79dOZqpBMM-_lkUX$|`AN22q;cql?Q{lr=Ohk*+UD zI-QGheR_o6X(}ugF0MowUb`F$AloLnCW+eM23@2 zqcWlkOd~_9_+^L1!pRg8j|c8P6x3VVQchn%)lWP1&ZgbT3R@9hO&TuNsoJUHdfpsj zig^+U!BWq=W0)Pz`OkKng`A*4$l1G^{-#adG-+0I*|IePpM-UQE2Q$?e8+9}lQn6^ zinx7f5y-36Es!vQy(Q6_qmctr$;hIq0l_ofl)1K1Nq-Ekh?(={FD4jYt<-!OcP%m@ zKFWHzayt#v@ug#JXy|(CO%O;lQ1E^u>y=)-gJ4Q}P` zf6-zPj}?jS=lfxG5*nE{3`9zE1wm@!_Gh?PG(_g_xbHv|d<`LQ{#URaX4%(84eqE* z#9&lb@ThKGSp4>BU7O#m7vF6`gO(_wbFxLqQBgA1D+Q}obCSWlJ%0L_K>Va76i>ai z({~-M@t52W9K>0m+$AWjyaCHYkZX__2xJw0`AlwRP@-catQYXAQbIryiH`QB8T3gd zuU-*`iws~n*X=v)ycV4G_=0Wdd|4V#-PMRx6J;wG1WQ2-VY$d zgAc|RGF%cG=OQF-woAgv6yN=sCZyAdt@70VPQ*cFJiiyO;Z$l5g)4c=E!yK2 zas}8eoWo#rI2`mTBT1^Q?E_4OquD*_;Agwccyh|#beXz&uWtf!2O!@A$@6uU(1VLwv~%^J|J_h;;KpMlHd+5^4cm zw2V8aZ8C0Cf2ws3I$)C}sY0jcMmpO#EtvpQa`UC4=SvTxIE^>s8XZgzLBT*iKxM-Q z{%HRB_)$>j%wl3<~(iex_RaPEe z==`^T158kD?&MVYdTC40=FsyMG&HK$D8*7RF`ENw&Ss$A{|>VN7wJ!YmplpgRtO%H zp>Oxxz|An0x%r91i{aIo9{Z%D-tV30bs{N)TM`X*i=Sl~A}bSjZ$Yx9j@1|01Z}+g)3mPpF4qlUNG7fZ_yxTM-0K5#a>&#$jZJpyGxl_< zFmJD_S6jHpIoD1evmwNPsPbluV5tP~)FNuV2p8y@2p4Z+S3^0;)R6nutJZhBYcqZK+^ z(zT$;Cur}7%O6G+D5_Co8DEt_B5hn!2Dx$`ocT+^s%!DSA})3_dWoRnrlML)BG6f(Vi7`&a(y2ZS}%7q_a$Z4eCfiJ~5kR zBL)L4@bhr&X_s0@`RUbPz-_h6nBUSqha7g7jiJR(J&AA^Be!zD&7d5)X;PYBNQOw9 z>kkl}gXuo&<-reUrz`s8blRb(!Prp>@Zi8+t91R$TCXPC_yS>&S@Vc{P=mP9ImeWkm{_VD_VmY6Sy}Bqf^28p1q6vsY}QRSeYd7% zqvFKFvAYUVPFRSPT@T1tKU=NP^9bpdTsl(8up)Wd`FrZJAg&tEv~P{=6=k!_Iy)QJQsc=;{8VN>)K-LTG%LOHj(KO`la z5@FYL47r6eE>$TzQNc8D1sCVX3+Ro73^$+vVQz2^X`$Wn(RT~(!)|A9iPS+qI1bqE zuEB7(e8ID-e~4@u>N{!h_loM5-k$LD#!R>{@96m^U8J;tuKLA|mrR>(1f3-*rJMKQ zwC~>LkSyF~f$;mc?vHuBRO#&%kZG&5;#O`EFmHPA+O#s;iF`?~eH18q+$n}F*ahl~ zro95LCEdX<$7i?*n<$f|b$E;E|Ii;SADp3oqq6zkb zrhzos3QCp8J45<~j#&qbLS?B_XwWlYO>~_-978cOZPy*^{H1&vrd<>KbSDf%Y5jBK=?zw(fjbIVRN(<(pDaO|qA-^C%)WyUI}z&~vA zJ-4Oyb^jwsTOJP42QChm2ktC^UfZ`uT;rE^e5s97^oH&^&luVFt;S~1NTWk?i}qZC zW6F3F=ku>@&*FqKR>F4oMix^PoYo=8kslu@UE~0rE!wkL(!U4q1}phA7`utcC=|wJ z9t7?adfMvvPn2JK4PR$Bl=y;ZVV?!M7pytLW9xCIwIJsgC4vCR%K4r&15 z7`lbnomn#1Cl}NHF5czDDoc2Q@y%X48xfH`HE*hT2d3M|Z(;Vnf9N?{P`a&Qe>=7H zRzkS(WXsUJl3jd3=AylQBzeE>x1S~zJUHN&*ooY=Ue=4T2KE`o)k-qQWyZuv6Up80 zqhF|;4xd(VRQUuq4e36kDUO>Jv4nJL?;0cP~x~kKd0B8ciiYMNj=l&hJ{WEP=^_J#xZya8HL6N~QGca9SOu1FZ@3wY{4cB>80 zCx2QLgv<#lMt8cv(;~HVo($lDgaJbVS?F2QREDl#IK(n*Z z`1G!Rk$YF&35vOHx_CmX2IzOB7)HeF1C7V{2Dl<;j31LA8R@J=Xior0TVqA&5QS}0`eW%qci!V={Yl<`TZ^vVBZvV@w^ z?Ehn$F30*z)?J6#)K(01%%6k(k4nBs9Zi(uA=qIGt>WSsJHLDJL}=bd$P@gzC(k`XR^3#F#ZhPH5@!l z$X-x0U5e|Xd63dw^UGznuCD5*;KB0{uyHT-<3}dSA{Gh^HU7J^h4*Z_V)u-0&n<@- zOIS7raiR=JR_~AS`U;W#{x-mWIsi?SJXgm&P%?KIrx!Qj)5fs7Z#=M_+l>B>zAf!z z+a3R5eRtbt^JMtsdk}-pCg@3~Y?c2djQiOywsESmdN~#^hF_GA*A6<@)5n;Sz1D}E zm*XSbD&|E~Xe<-lh9Ag{L^tRjm&<|=zZJ2d?l3BIoZ$y1jATJc&kId=+@!UiF5g}- zXv@1e)P>haXj-__x8*dRN0#?);e*?MVBJ~#$?s;T#x9^#oxG~mKc5M4Pi$xrxLYmJ zyG>O+g?6Km*I?*h?|C4-_G%VYB&@D6E6+`ezdu}R?P;4F5>3c&rM((+kNG~|Bsryu zm8(?S4_iH{u^wf<82_&pfYRD`(~aoJE6k|5$qm?S=Jz)gSz3?$VB^!sf=#cw5j_Co zGyLI1hUN`=^zC5UH4 zsGeD4(3P6%@5lQfp<*^#b-n2vwPMM>5x+N1Eje;oRf{#zt?jgoN)2S0QnNa_F6;4G z&H|-2I`6iiy`4MGB-guqahZ{`c8ISgMF!Vr!Ra2HA!}n&ZN*QFh3f=&+T) z^}Jd}%)uAZe0;KKp(k3ov8qZ_6XgEp21Xuu&iRJ1a>F9tR`TB6io_8jdG$cgOc7TI z(~ZyZ%G-Clqm@%hT{E{Xg^av2z)Znz%k!J#JyL)(KIoeF)pHDgfA*hIXy?HG z!g<%tIgO9aFh2&VKdtRxDaTpsRMefg;I^&8i}Ju!fu$AQadBxYggl$H1W~V_e?5x3 zaRFJ5pct4w5tc3AmXgQ$Wl4-egYH zJAw?d4R^JMrOcpM>VDFjcx(>+lQv;SRR%Ys9Ea;;PQ?tEi^r+&m9u)js+TOi8GrNF zo5yD5?u<Htp zoVI}PBXT)o7Cr0vU}HP}_aN?ti2t9r8@ z?;#;?v_p=@vTBt&1U^eP)&u^VZgt;YwMOuNEQ(0bIqM9}^>;94Oer%PEHPLli{L$L zgAX1indIwK1=4UQ-P1r5*9@HzEr{=sk9V@#Z^ngTTSQoYDrvf{#W6wp&7<<%mg%RDq@#YJN;n z(ONXMZ-Bk$SYZsf+G##=Sm~CiLpkp34I7-$TW$8p>eA-F#|+P+*m-{Wgi|b+nYlOL zJ_v}Dc<)4>`>V`5E4=fmcB(kU3_lJRFZCm$*$XmDINzKqda6EkM}y*B`b!@xF2THu zbZdiXc%SHfw2xX|Mg2;VPp`OC@97*0LR%Z=h%Hf0l} zpY{LWXw>4NvBnEhKASxF0dm~Kb!T*%lk(Li(ooE#hU)2kZnhHLOO0UId(kFBK4Q5R zNqUPmaFMWCiI7sL^jQ%;Yaza6ICsxtOngFe-RGC3Y~<7^L1kV{;>l>eUPTYJ!<(^U zz6^)7@didUi z$`tuH&`5IL$WEKHd4&38B@!-`rSnlE=T_1Of=>ek7pjC>%In28FrU^uw{zEah)yv` zM@wK11LjMr#=*BLe~Ka&DK5sR9hAz6=c*;ZuSNyG&$Z6ENP%{8km zOx49v+4MX@M}{e10-NjHBwLRQS4>05#<&vZywPvL^W$%2c-g zRJFMQPCQl=e*@rx{}i;Vebh$ZFrzWrpTs?0H5BJVeN0Q+`slexSIU~{d~O)Dcrz0_ z<6&BuvOp%?GG9u0ghdPWk7ucCB3TM769Op@k-|f9l^kR7=`zKk%H|mvBY2E_LF4k{ z!*r*DsbZ7a?{Zwx%)?KYQ|IpW=~ni0AvB0-CL6)1q?j3CUkV$Tdql)Z}Vz*I7cxn6tG32DKE5G zGd8swzxmygj$Z!i3z%G+@Q&Xnpc+eJ-?~XHd1y=Sg)?S`U<=T zQ;P7`vL}W?+dW`{%jkOth!5>b-$24#7frmNq8t7@`wmayYJF2$fv!qvYem#>!P}`@ zqwF-IjxYSY_b`o9%&`}a8=;WY209?>?ELR?>ZrHWQK~0b-DO78URku%_!k_zWfb@< z2{H+t+={tDYYjRzFgf&FkY3}#yRWRfWRi&Al$;3;B6P&SYxS;3DYY0*2|iCd;$JDG zmgpo@9iCcXGRUoezw%HaC%|Av4>T;H@M~!gMzv@Z5lf=z76^*qY{qut+D_FC@?K9A zT$ixR?rZZrc5|=FM|+lg3mwcP?M3t~7oGp+zuhG%!f-WI=Wg!B$Nz_zZazEDFWwW+ zIDnLw&bUIu*rPV<-4}Pqd03JAreCXIuBmHugW@=k#M3=`)tD)qM4OYKw%+#_Hhy4d zAJI47RL*l!^irr4=;w#tAqrdU1+cj0)`vkN9utm(MlLuMWq0#mQ!uE0wBkxkx885iGHUVV;op=`rs3BT*coGvIpLoy2lECkC-rn+ z3A#e~-X+|vE$3Wo{AR=`{9=o^vow40#OZn3 zR!*n)n02jEC@gxbjr#qKa~VV6)5xLqV7l6f2^}5kAEm$+x_z_K70Ej?Cij4Yebyi< zGIi9P?1k(50$Lwl{guv8rc$vhnaH1xOzcZh$QTbQ0i3@B-5%InqH^~?w?Ruw`Ge)h zPH0}iSDP$p>_|1n>i21jfV3NN=C_LH8B-u#`l6)HiBxzCU1!g*w~776UYJE=C>eq# zQ3frvs(7+iT!>#ot)ceen&=Cy0iO0fhZQ}xKlizQB@rpdH}eM!#Xuc0Zzip8MjJZs z=vPRGs6b{`8@D^6;C7a3%jb1t*D%#t6~g5{6ID)TJd1SaZ!0!;nvY%ov+vrqR2lvO zmRHZUQR{5RvZ@H%^h7Tie!7{jCu#>iSnj2Hse}x7(0}2PNLa@YL(7pb4lf!-gc{Ts zG(jc8t?G>HbuWNsw8r^k>vkvqnx~SKAxb)1OlYf{g04J@VPU>JeE3j6$S_+YH^#Hc zrhfKy4$~J2`xj1kX5dW3dp8Wr^{?Gg?n`*(@OcLF@Y>gWck+^pB|{UXql62dspnAP zc7=+G;dpfp=CDLXxXUUHSmaavF62?d0Mnz!e(qaO1~*B`n5@%1@V(Je^IaW}gUx0a z^O(21=LTN(%PXwk6Q=kS^VVK~!dgA|<$}?#Y-xGdc}S>!Gdj`*^z}DBEOLRun#uH} z{{}HayPFUoa8aOUPyRP@Mg`)~y=(Zjp~`kC?6O1f`QGY5Oz@DTz-{g1E-?i1WX3C{ za#Vdko>itCX4VlTH_~RR9@OS3y{^UfP64-fE2O0%RmO)O>uMe?(t~@t5~#oLy3JIe zwJc-#H2u|Aj9;UJXe=E&y>i#FDg2YN@vB!N*A-#|b)h_0i8Wq3TUDDh5u^tt9PtJMf5HXDLQw?cD&D z*-49KpS?l_F>|G7isdZ)!iyjni9y~e31&<5WW#m_s`!G3S0C{0#!WG%I`tmjQ8}#p zOXk9vtTWL=hW}$q#r!3t3yDEVJ|w=67i^7N?@m?nxanvp5a#!}H5>^ihr&&cAFN0R zA1rpLwXn!YM>G8jFLzPtoXyv(a@keXI4lN1XU;bJq&~OJAOFQpulT6xyY47#+bN2< z<~X%nj3(~kd9&2F??J4sayQcdb9VoEa^(3$-v24T|A$Dg22qTDn;pr2VaBVBmS1XG zhDxaoEX&!)?(1Gc&qJ)5$}ORat?AN&Mxj4FOZaLv=lOLlm|y2TjfpT4vz=B0a;6rM zZ2}PUdQhPjL(sr7iagiV@>pQkMK@^u@#p%5F2o1Mr4^ggt12W&GJKGhztRFq z%hyw;ta`41*N-+VCM?xTuU9O5q2|n$XFW%M^J+KcdhWeHW#`||qs!-x?^6hCFXAWI z8-h`;AA3&sJ9y8$h?a9OMl1{6gBz)r{$AmKengd@(Vb7ZdE1vt#?>D!rRYSu6m+61 zRQMHH*$0HabeCkVn;r{(onZ3y^xq#rG^HEgQMvzCu~D2#An~-}>a28$)Ap?MEmpaN z9L0fKp_4-g%NI1Sw_rogUZ!K$I#(C%RCp8-c>YF&jVMv2}`l_cOJy z!Dr_4ziMi=RqbwC2oU_Zu_CX0XoStEHBDWs?x^47;0^qRjvUZ3pkxfC22he5#ZrmW z|D7R!zEIx_1@ay8R10qKondfoS{VvnhdkScyRiUiJN<=(qN1MX$l7Elc!O9w0!~&f zv#yjt9t~U!7PH@X2F+iPiv#DGlTjDx&?=!m0+7Epet$Qhe|3L>V;<HC_m(m|t)B z>ZSA5NKY`6kaI!RN&uRZg}||wJGISh*WBn0T$;<#!X)zlf7@nBv%UVLWigVlk9IrV z=gOHt)Txj8G#c))>s)y6^tGFM!o)LPOJ*um%r;YT;mpKstV&^>m2qg#;>pp6OUOl`-3$D3e- zp!TGJDK$|Fedd3uU1itCj>9)=^wwSX#|M9mDWqi_XH#1N@x!suT1UjKWbUHReYv6f zZDx_rQ#ET-OGh&pY$+4^c2zI0_(RNTp#$?gIQEZEc0_>HCN1k0{Qs-194hN!oA%%dfXXv*Xt{_jMi%RiQn!QSl#(jz zW8W_!$8gkoy2E7y{LDD(?iL0V663Ja)o5%4tzfq$%lp#)&QiQ(B;?jE6N?-!fuA1n*26uXLJ3mTYx7MxD zBiCQab=qt&y_zXzqoNz2x$ahIF^S~FqR%{*OB_E;2#hsbvw!6kV%x{ie73!x@>6Ty zTo(s{;R|)P@0Ug7gtFR(qh^`v=y#M{qd8`98A@@)DrAWvsi$tJSuEtl%-cojXViR> zdW|ZeuM8@>Ei}Zv?n6GzTc6mUh#vJms*_9`BALz3ZoOij8_4D-e<9ll{8;}Fr)@j3QH$p%?bw-)&=+m0-mP5!DNr8r z@X1@(Es;zDW6+g_#$aSieHqSQXE;c+T1dFx3VbduI>tte=u7vME?W}4MQMRXwVw}^ zmGwQTIlUakBIT$$&u{r}S-tre1yhcKK{Tx)Q%;Uza5Qv-EGqFVdq>ENZlLqS_=YB? zNRLmgWvYd>ApJeH{D?{OMlMZ(U(-yver@R=+P-ycx_j2GQnizD1RaBY1`{bGL2>ad>71ato#hk`+DGr3##$!uobSDoWEAn=lwM-Z*vZccZ#}&n-%u< zlVsAqbJgM}wD54e<-f)L4`8#SeiXM%+#o&{IrrJ-e)mR^EsNEGq0``X5sL;23)9f# z%E8=^Z}Nvy8>neP6#|LhPqa~?TNo-^ zl8o)BtrhJ!sK_(Ca<%#Sb(uWYrXwPU54*l)K^YH2IDF44;ZaA7PlqWV zyIj0vC8#BqGIhD8vf%h294WH$D-^lk7LKa&LWGzBr@nDu_}7?U_DZeP-gU8W8Hb@t?rl471=rHFQTmq-nHC+2xTdkZO&pd294eh( zgO$x$pBzoU8zVmu=}4J8S-T|Darcz{+oL^v2ThN{!!3%O&=~QidM<{=t2SLnAxd%S zW1OZqq028Tl`X$@N3mF`-2X2=5e@yJ>kOPvX*|VJ_}9-nE&P=|cfM~4I~81B=lB%4 zau@RSID)eZlM-fsozqn2QReglZJ6fIfzHmS36?!?ky=F8Wpu%F>*2{;$=nvzr9s(S z`F+Ozq_Yc9O@Hi}TxLpu>!JD5&Cwa=y>~rV*=YP#(xPJ}5)!>8zyFs}s-EYe45fJN zY4fW=>$(Drm2Yq-tZtq?-Jvi*MviZA&xu|WF)6)O!z8_BVP_1gG@SozcPUK~6bTZ+ zsn-Q4C3+^K6@=CYBH4AnT|C3AEX-5oPVnOLg)Q!@yf74uzLvB4wBuXjN2Mu(zliM( zTiwi?OHNTYhMHl3Ywr>OdPo;d?vp*1L^za!E+uf0aH<6lCzju!?>OseXlLGL0EpQd zZ(`Z2LF$d#?G%Zho}X9UZW%bc4ZM9JrQ9>i4PyTq49Ei~H6C}2ewMmjjGy{|)Ozn= zdFA2oT$+Y>*&y3s_WN@p*Cw9Su- zckyKIIq;iOSGjt?Gj!^hYNwalMH-DuORe*W4r=#qHDt(OqWIjOA(g(Ia`e#o+q4yAVdn&S; zWd-s@8ttnHs7|AW0$AcyJ$SoDBMHyBW5*-TGb+ckRf7Jdb@Rn*s@&5U)dohL$p7mc z@mzgK!F01Q-kjQGam*&!)n#V&-3-!Z_&3>lC7qLh@6P19$mdR@yP*Ee_!)l%W1H2! zoC&U%`OodgzT5_nE0kGDS8CBzG|72FtPV3dfhuJ6In43c@%{z(hO=Hv`<$tZ`U-hK zTjs~Bmc|_GH)w}~THs~D8}}4juB{~h(619ppV+<9#30QKqYGEYUuF83z$H&(BGQ&3 zCe*J_`o(3_6-{>-$1W1jki0dfFspt`=)m-Y>etDVw43AvMj4hT{vRfi1@<<@i1m|a zsD5N_25S6ni#h2+qZ(_8YK%8>Y5wxP;MmUZ^T0IK3f9T2eTirB;!eAwx$NMHF?U2j7doqcguwZseZDfolJv`HChH*Q6h8B z)s_S?M2S*t8~v#obE$7jKER!10^PV1Rs8Bi3-O)t^H}8c;^yalD}>${!|aDo4sctEAoYs^V_2X zi<%pomxPUUzCmdhn6BJ=$?$QXqsX);|alz{`~`7?B_Ixg0OSG(%sW42LoE*NJECO{Pi%pj(4O z48D-fJk#Wn!Vp#vYy9>P@(A}z(VRSdj2e;}PZl~G{!ZM!v#7;hfA!1Lknmfuf_Hl` z%_leM0i`m*EI?vqMf}18rxie&>8wx{u#;A2n5qyrkVkyW%|@vEg90X@4@;-TMjP}s zy-wRIU>hAVy$RV?Kszt?UGga3vJbV;K>t)r*G`q?QO{f5U0pzLsz?qd0qwZ=OV5&d z@o>>Jupehtp>g?`W`qir$qP}17fe$pr?|jxC)br~dj+gJWNZ&smhR+sEA`` zGT3~!bV^?-3ld$cX-+TM`)yU>Wn_hm{RR5iqd4!fe0!X5vDH3^Dx>GfwH7o}FBxkAry7%U}#sk}ZuyqRGj2B>wLhzIlZg~ayfnLjx+sn>t?bL;g&4fPah(Wt$$66 zh+<0Cl$(m?zthf2k(mI<`7`>IaisV|eeZql@D^bpEiIavmhYPr0_JH&`#CwcXB`c%|Fk7X{SmXx1N44++$al zXJuUYAYh~xyC{~WI@R_c`tX9l>iX&$1}hnS89k`Gpt@+yK+rMLWr;qTE4CQ)-18L=|Du8i;Mu zmc790I_JqqEbaMOZx<`{QrD;iwxQ&SO~8lJdoS;tQ=6NzY2Fq!4>9u=Ydgw+%RLQ6 zhu;=fd45Ib&)ddx_uSBI9L=Mele3dPy(2d9zN_Ceb~$DiWIWpF5^|KKi~-6mwgH44 z+Wy)U5e-=95yT_?j2c}9S}j`Xz*ugnQy}J00)*OMffK68BOYGHMWr~m^Ii-QR88X+ z_@RsAYI#jb2NN~c&$7hX06s~(3yxQvldakZ27ej?i5Iz)u-U9Z#5~o71`FmR)a1|i zEOAaeUcd>0a<+WDn*u>LI3y@Md71yr5x;SrLv8jIdO9Zm`KLjLG#SP_H7PV`>c<=0 z2};RXO7x%q)dDs-78WORs84u+eh2GS^M9+>Do^eV@V$Ze+$GcQ7wZ@1?N$6wMwG+V zQ_62l&3dP3o=adu!*VVPNNZjZ6+H13jN$biOkLmc=Qpmq+M|UI2Wqr9NWcx~cvLu>Y9IT$OGSXL2vS4e{;!}W7=y@0IgVV2|HKapD3iH#X*=C*rl-7#MbeN z9O}Ay1p|$OGXQb4`0puw8oxViJKmI&839NPUE6D>`xC6lRN*c81eSgSBY6ntMemF# za}_Sh(_uO}jGZ)v;$#2#f%~0K5l@CnjGvRT%MQ5Y{I3DRgXfLO5a>kBACy{nY5+sV zXG^X9#DBb}9tdV#bvDF@Z;3Y?Y6}QKX%4a`VE+v)IXS0=hqcR&+ z?N$X%IPYrbL>{{>EbDJ7TPZdjb5p7BXl2MZChgXNJ`B5pQIhWTf0}TVZp8(+|J8C9 z?axb^F;MfJD_^KLdjO@mq_Z&`7-Lb#zd*ltntSH};dV23-{7;%%=__ut?2p(VhV&v zG@=X;D9?ne*MC{jJ6K#Abi1wfX3TT_^smS2tLNs8R05BtYY00t5?*vWOMsjFAC5f| zji14Q_Bl_iqFhGr&-i8g3^h%Wn>uVN&R-gIQAQ<1Of&(V`eE5)gq)6<>qKRap$Y3; ziwENO*1Sh)qpL}MO3KF;3b^GZIHG<>Y+3BWYoxUfye}8LBf=*n?V_`~hj8F174=wE z)T!Z6@UH9g^L>_f|K6r&=GTW4*9xf3!!hZh4;!CfUTmMDiD}8Wbw}CFeB6OwNAhk= zdz*M^hTy4bfteBaw?|iHNInh;b1ytsEBUJ|)LFh18@pW2aOK zM%>!6JC0~#G-UlI2^~NB`~#@BjY!yQ6LNGByQUG#QOJ1H!h znkv!qwwxT{-^qw5J*uWRv$66PE-&MIcrFjE}-Y5Lx+0iN2iLn(lfyw zn1>|7&_O8q+OYgX6&X_Z_OXi9P=t$t^riIy>x5?8N8g|d3sP}2Uue#7P77Z^MU5Z+ zRdfGnw5ordpA#cYe;W6#pW=XIHdMtX@va!;hC6<8u4T|UxeaNbq;$sga$^tQ56&PZ zHr~={=P1@D9CWC&PM({nI?Q{5^937L8VL)Y*zX8@#pN0l@SE!^41jKgzha5LA#`6` z`QeVN*e3xudnWSjHV?lc-|N+D{clQhVv+`(vNVIrZ&8+e5OPF1jGjt|4=@?LFIx0hIabdTj%UbMDwjzTq zcuu_TmYrx+cTEV+NaT8y+|Z(ArKvR7Ycc+#F)sv*Fvo-kOhYl1F#0z9_Xc=4jX_7l z!LpI=h>POm5P?u!;}e*85AWNgx--=A=A`|1^B_`#_X7c1Q<=T$HrL$`BD~%mBymRz zZiBfBFZZ6$g{snEFM=;;RWI8TPXw_!LEQ1@67lZ-A_v*7P<{-DQMwR)CFrfXKbhDF5 z?NVy#zX?MHf~*?-ws7?V4U|~LkGA<$@0CNvKK?A}^}!M@^Yt_#d*jxeE#{@%hkIQk zqPts-Y&x43!ye8l*e^d_EREQA*^Xa%R+qYT-tQRaY8}A-*5|4YFPZ4E;8F}u&^}~Vv^hCv<|?_?OMPly6t}jg(N_gGNZKPFbmfl* zF-@3tr4VMmeeodA)++nXbI-hrVaIz$pvEp6frFBHyrE_JrD9)x3k5MNw~lEce?*?M zknOX5m-6@LTjximjw`PPaKA?Ejb7l zBWaR9_4aaHgYGX1<>SP-%vo3)(2%S&F z$b-(Dy8=_fFF7x&c4kV^Ngb@AcV~!13)yigZ1eXyOxf&)_ZVF^Vu?2ENJk5B{PyFi z)$50g*{{q)nRhF-B>k2Y!iie3`q>_`$UNA58NYYvJf&5&;L>fg+EN_HHd`Y(s(ft6 z-pgKl{qWTb&0KMhY~sbV8N$7 ztKU!bmnTQwdq5l!=uSn10h3*EpSV@;ywo4%7rWnxTl3Z|&*s~YeGE16Esjmf(b0je zRbH1(R6loX0jJ32T~;e?G+nZqm=rJ~fMHT-pHa$F;qVbXG4Clrpb-vE&Y2T9Sxj>0SE~#~n?s%(!v^CqOVPsZgZmphJgTz_Eu5QKht$mL}(6xF7kz3VQ zrs+d~rLSu0@!sap|=pM1ok`MeHq z((aKm$EMmhA0;IYL@pFw8d3u3j`qQ3s?~Ppv#@U8Sr%OPWlr)j)xvI;#m~hl4HtN4 zD!$H$dv-21(cE}3BnAM<_|A&^_Bi(G1sP+pUpLDQH46+-&iZyL?vx`xrt-dwp5Hf3 zJlyo1cYbYf-Z{T(NSF_YbU%)TxRR$V_u2Z!LQjd~k67kd7aX!K)0rchE0+^%L*9Hz zlk}dFDjD(gN!*1riQRJr2!iU{9^k_jH)RsObDx}c$M z{*O?Ji8{!rbN)sIi=snd^PN#=@+H`tiVlm+LcaAsH-_En!rr^QFkC1Mm-6z|Y^>CK z^Gu%yzK6ezK0Up@I9?+}C1?`{TSFQ3tDOxR`0k~A&Xq68_Sq9A$~(H=;bCKlli$7dgSTc_bV=O)&tvOC%l`Guc~5 z^0wYNR)+>XjY_8lS{2FWb;F*!9}ZlY3zdh?OwqQ_H&4ecMq^|xP4ltzB#E z(%cUy5SgsN@zFSQ`m2@8N3A5^jBlu_#Ws&=F_R6eM+pxvDjwX(xFcx!vqI~gWu?b# zBH`DnAs!FzBdc>1tPkEa2h_E70_DT4WgfhvNM1bkskI?FIv9I4%}I+^XJE-V_*d-4 zfWqOcC(2n4J<>+}ygp9rXdPVXbwoC8+7uJ^XCjmLmpLbId?^|9inUi0#t22pIW=pu zs=a*SsB$xDxP`@~b*Xs2OSlEo(vTAE^c+yOBmL$|S|*0#ji)g*k_BC}>u?##a!*6b@cdNk%T{)-t>b16q0{eajr}1j_aMySHh#fNR zT@yI$$>x06ZuZmc1SKWzdik!?^0ltxzsWPdm4qKlD=BEa+;2(!k<^apDTFAoLlz#X z4W+Bu?y73jNbQvWW9@knEpX`KA&o(p_zu4|Ep5iDNnxEx%T!ZPU%9QW)BIKk# zp+|lF!YWZCbkjgsT{b075oasfsQeWvr`pt?Nm zNsbt~*|PC`f-DNN4r2;T*bi1u%JS7eWqF2#N8e+QUvnuUVzlis`^Vk-f<%Ue6vn7R z8=4MP3v=2wQRAk&>MyoSlGeOiNy0OEH}!3geGc<1#ct}^3r&)cq)0nPI~h$0ppO@B zP^<3l+ph|0$NUh+=`0N__2%eeCw|DcV@k_c$dVpX-!htI@aV?W5?hw!y|#6;IjxmZ z!((BCQF1(ob^p~y5$%w|5USdvr+S1LO1snhhMg%8^IX?WuB1fBb&WK@DIwz1z||^l z1JD^bvm8F#@TI0Rb;$?psUyBVo9&hkDq|8-G?y*QCSstoIkYt|3y1n){YIj8Z*wbF ztJH^Bq5xdy(wk>i&9|%EvT>BIU&Yc#S^b8ljo1OOVTD4`REM+wehOJx5D1iU$c8i89)5s}y)1imT$z*x4aB~_?G2CP)^ zU;rql-0R#>m4L+F`j*0^Kt8T(J`3x=hNt^?w|d!@$I9uB^^S)$c_ewb$Y)@eMdO}R zk^%PdM6E5ms}*1lhfR{?}qAiPC-=3?QOeXMCHwxEwzCYyxZ1Ez$IYAJj3+JFZnUZA&i6^W$!DOkcbVL?({$ zy}mvXbNW#E%IrpfbS27ML=&s-OvSs+y`Zjp!53yljU4D(+CPl*f{nLRTNGu_w0>mc z6tZW5dx7yTjG`)cydc-EbNfdxQ`TpMDvUU#ZwfmOC>sub;vDTX921Mg#to z7GK=y0fR;NSnqf<6&Su9AIM&^GT#GFH)>qL4b=UW%fspp_gNR2(r>NlRT$#|W}ivm zwecob%U7?uQaq>qRXfR6*r~&Yy+M4e&WTQ9G=^U@kz*YwHOlxZqqjxFuixuBA1wV8 zPy@7?hm2mexz$+lVX^mvA58W571$o0S`14ywJ;ieCT=1(-4@$y+dPmuk}0K2FYEl z=#sha%&v)^cyyN6tIs-qFtj?gn3Y~|P1kx|OR>D+d5&hxZOq`P#anyXQ8ThYcQ0uD zw)D_w%deYlFJ$k>fN|IN`#k>M{85 zpO~#wP%r!IjSFHAzw?0;^8NR9u!&?1z9!|g*7=+pX7)@hLpzl09WLjB*j)P~Y*Tj9 z(}lA6LtN)3r|Wk5li63zuI=5R?a(MZ#AYAdrEq?p##*A{IH>OJu{+yrnB`u#omM#f z#*w_-uVFvIVb{N6Yr)XZz>lei{kSF1@U`W*iq_GVr(T2Stm%@Zir?X$kdEN8HO8pu zISzWoZQML*C^PzAx)Br8f$1obXVm}DD<)+LFp5xfW);@-^nm?B@AO8~@N28Ix@STY zn`zN^+Rbow13Kh*Vl+Ie`O0T9JY&eX*e&8a_tv*oh9sV!b^=dP7eg4@IP;szSk*T+ zGW!CCS9JxCY#Q>+Pwj_D#rIMuJ~Xi(UD)V|2|@^rZOz1sTH&U~NRqk0=u}5oI<;-`5(ZT3k9a|jfsw0Mq+W2pI#GN&uH}!MF z@lhnKML1SpU=0}F;J8B zOQD{!TU8ASH?iL9wS(K0#wIPPbTSp+y??y(_;JVW(FZl= z0MorA(2(RwOns`U{8}yQ zZrj~aX*18HiOr2U8s|s@d_GvmdR`Lq)1idwG_Ot9Yh7GT#qa30BLACfg zQ`vWQ{2w(!SDqV08)BDL&&RP*AhhFB`S)EmNn1T^`#R@aU81-ov{J?W{aT@qIyQ^X zoF8iKbiyTlmC*QROU+?*1-&KC!x_EX$)V*Di^`8XmiigO*BR!zm$=?Jaca!xD#R)~ zzker}H7J1Ik@ilSTCi}#l`vz$^h>~tnQb{L{=&1|BvZ19ora+=jmc*~r1J*5)tqMPh*AacxW|NX<_yLfc^4t5~Yl{_~+pf8lLlPfq) z|Jg;_{63pzC3fn-cO$)T{de9P8fmS*+@AL=qdVR3@lxI4LQvlu8N&hYFL;sjg(X9| zOZz_!IHlMV@IB6&U0w0kR%(CvL&E0ELFBqBuU)&%Mc)yAJQfcsmR6z}c7Dac(p96Tz|-$f3+kKV zQ}CX0n(u6y?@Du=d4~-~_;cECOk`jKSRX7ogPIZpcH2r173trqakVAk)FOZb#Q(L~ zdO3R})_&cidw$=bLBt@~jNGb&2`hM<{-S6ojqY1cl#w#fg<8ZK`~O4;b>_l*;%{RU-u;2e7FP?J9o&sS#h6t#C>#&r`NYXT4C|p8zOFP zdpdGh;XQegburR~zrHql@U9&>cCOYhNSvv@Ar#_G6GJO`np^Ph z{aZW%vE~iU8%Y|hF`p;8KT5j2xz?mz6{h6HWk9`2J@82~xOk!HN^5LtHn@#hHD6%o zMeADhARQ;4Os`osxJHq%Wwfn-s`dLx`jZW{&pI{70Ov_W*R#K3(EF%ar0|7^Q#=+| zNms~FKrzc?u}iUu-*LlQ^|5n9&k#;w-nUny;Ae2mzm&L>Pu>6R=Kk6dai#n8SvygW zOx+*izMJnV-xc4fr&+w8_HFR{V|m~lDc^<)O(=yG`J__OQrl;TDKiE zSG!64>SSnE&K)67%=z9a*Yabf+>%n*ZRDCUkHZ)i9`6Y8k4D*qnYXP=<>X)IAl1|mf zW9>mfOZ}EgW&6ooLW`;{>Bub+MFsyE@m9h7jF$&L8|6?f`!|I&olCpk%s0mdnFbv0 zt`n;TMxxyD&6TwyNF#*;i|UgAy#(=$ODM#Wbv?#eZZg~NIV%MqGN5q#hKORECsT{& zmF!r_cg+d2jaB;}FDEHIui5!1pqOfH9_qe6o8uhPyj=jlzu<|xun|KvxSIL-0u4^c z*8{vjx1!pVAI5JOJkFYw=44^fFhxwxmXJG#z1vCU7@z4^7SPvnGWt0Dt&ZRmucsA$ zuYl_gT357b>D46n-L*@2%OZB1pE}6waD5Hd-zwpsaegvhdFPyL^sn#Y?HhjQpQpC6 z+Snhj z>B59SbIDZLjYn}TLs5GV*12X8JYiO*BH_{@+4??swb-Ce>Bt`qz4z&L;>YZF&O$hp zH1PT%a9q9dqL!5?Q{ubtgEkWgVwk2|gk%^4^L`ixhon1(8TbAxj?ts+q#N(I9c+G3 zi=tjTePiC%zo<~20_O@|CaOEo{yl?j^;~UPXjICldtlju?%TZUUjX1aF6b4iTSHfK z+tYPv!iVM$fW@UON!3WWaL#>?2ljXK7_Sl46;laS=O@`W2uINerHPHWRDbWV^V*T@p9Y<#hCS3 zR$1LZ1FK@k)W87o-k(Wcp?sV>MCZ`8eR>D+MAZYO)<4@0{=Jo-jOL{L42X&&xa}JUjT2>s8UjrdiRE zwp)3(`!pZi0xEa=fEHc1_92}rs`bZr7sa3r*4qq1mAoMZSET%bBAMu2sCkgou?bAk;bCiHc=t@@Ap})2OY&5jy%146C|Y?7N`9^%KYcO(ldQX zGE?%VGB9ieS3}rIJja~QP`w2rLyXvcd245^%4uN@$kv&q;)eHOgpAUfBd}GoZF!`$ z#Bo-hTFRIDKMz2RdP)H@dxy!xY>z^wz777JIT+ z%t^bfv%dHr%XV-Z6la!?Q)OAE>FgHB32cbw+~I7kukikn^h2eeFjWps;!di`)c%ZG zu}ET(7DmdOXKq#{w4c#ko|Ob|=^5Hin%@BFoA>?=x6;L+oK5I-e|>M3f8d4YnUZ_0 zYudw^922@{d(+%{Fk3yinX`0%J%ll&n1?T4agsCNExqpUI{hU#JKSG^5U6cDRt7bt z3;}C0R&F(uykVujl$i~{*zv5l09igcep%k?;xAg~KkRe*0j zTOI(^i)`oq2mChw&Vd!o(u%Fc8c|Kltu0N5D&HO?G5iGnM~35?4ilzXU>SYEcP7u9 zDMF1{9nUyON;D&(D82U%_q_GF2*-4EgCoUX-MU%A*Ge{9YPI7yRPt1@t2Rt8p*RcW zh#Q_Pn%Z}(pv#xHyw~4Q{n+#-<=)p%E|22Di@%Uid;5#4ZCHY?S=OT@|5cZ7tA0P7 zoxhCvseAET8JwfTyu#bDE2Fb|n31M_ne0moiz}KTdcD}w-OuJ)){`G@7PIAT2u!j5 z`pS`x4n6XX=3M!?mS09K#$KJVAXO~sv1GhK5aU875{<7>Uo{yjis!>^6dV`#)4Ec9faCrr6_SxW!Ojofh1MX9B}C*sd31;-@$fp$CWXWix31V zTZ;6m-h6nTW>ejPY#?>aR2CY&{_tXa{<4Fo{;&;EW()RPMK{L2k!SX?XIM}dfI9;SE3ej)Jh3jj#8UFkPCEt8Mxq~>=cgtrusdExXc*w#MV7=W(z)`~PwDJ5`a zye8Lap*xw^2n8rDK*DQ#3i7@D$H#29UZ`Fec&XO*I7Qfz;S4@)6zp}$R!X_to-R^K zn3L^Cc%#wG>yEeY_JLe*%=IUsbZGU@zZ!@gxaYGFV%a0uG}Nv5yUJgwtkDJA!UUe# z|Nej#kr|Rc5s~CP_kdH^dSikuA4?kzB5jsRrsVESB+uHo+vN0+q2K8a)6QhVXEzeA zz}by@%cpO;^L-EpV73CpsW?Gfop(``d?>SNd42gQRa?Q#nT>+z9r*fC_Sb}6xcWrW zrSs1dhDk#m&PY&SP4*vUy#b3=|L?m5!j}=T4CHlT_A}=M!NF}Ks`NXSM0mfhG$CW) z11R_{;v7RH{_Pe>7YTA-pSb|sAp+n*ST^3ar3FlnXv+ZcFQ{aQUrXg@jZ()4K_G731MHS8>cS4hv}N$@|47<%A0Fl2Z3=v$Un2;T_Sx!> zw3kh=Qibee-k5eUC?;}Vg9AVjtI-w8f|jN{ z8u#}-oVcjmiO{-!E1~q4315%cm{ogA+cJnE{g9++)s07x`_~|L7{gL|3O=(a#{^~a zVLr3YM%ZxfFxO6qu&tDrO&VdFdQ^|(KJMYKtrmEjeL%7BTlAiy^VuW>1}+rX)~dk+ zf#E6mUtE;Lj7|3%m~pG-d@??3Aa}qjfKs7{2S&V-Gyi{%meF--+Y@KBF!G;@hZ0-4 zFrqFnORpyvy{WJn3G~>QH(Hx&vKX%xu*g0b)HE~#7l^RWFaDW#;XwdXa$&Cnv)}I8 zG=-F}xTwqbU@8GCdXNI#7oNDyv5UQPdslZJc~3PvG|rNq5#1Z*V{H@tDsdvFe>0We zkXUiHI$TC97J_E9Ywma#r0@KH;zht3eU_vw{pAxXNPa`c#U#0So)xun#lPqcKDZSi zYTx^{`7P_T6D*FF(H!YWuW|VLk#v?_%Foip| zK)aOT7W6z_wvFaX$JT?P-kNT)vTuep9hPU*I!E2{domiZ7H++$>1AkKy&uty3I5A& z{Z~+6a+O;tVCbdz2QTziiCO)(-2F%2gl=_<2S!RDvaV6T4;!q-!no!?Ll-jlwFAKJ zaEYtt2ub=-fj0WtUa;FJz}t_`UxxkBIdH3!1#PK*ZU2arkEY6od&4Z{x;%`w{Twm4 za%dLufBrdCWFR+Rxv#o-xJZ5@L9mGAPbZK~Vt245vOrYH}M0B`mF zrP_1pbz$9doA>up549r$+U#>`-%l%$l` zw3e(R=p}uB^b$hEVTaMIIrRH`rd5`HMEsvfj-)^=28dwIP6Y8U-7hk)?XDXi9PO_T z*ZYW(aqC%dKC*08s%V9TcUs>xQ`iyJm#d)gxj_3?k)BAIMIQ>dnATuyVklMKS`DJ~ zO`j{J5CK$;e#d{6-{lV8MYOYzoL?$)EP&i|!EI&i{YMc<>%Qf8OZP}JpBFcTniFLn z&XL}ttgUzhvGW(iPQ6HookP`hRMCH9r}PUVRpUR$^yFZy$Tpg7kY!lD{dRNqvz8ov z0XCFQm~F9iZE#au1?aCq$tEths#Bh8MVdGR60zfCcHP4AzWetQGFHu=#t%- za1_NQRH1H#d}{$>uv^MShl z8*F%o(X_L(Goxtb{EH8*hl-34azR>QXK1|Ih41r+G5ftQ_6@B7#2jYdpL=@q2^D-G zxjN6SC=T1iXK$S#v8%pPXET935BY10RWdbdpK!|B6Sk;Rh`aN08`N49tX3sCl|%IA zr$iD}oPUU#(S#vgV)vaH1_%*yCe!>F5at=C?qSp(r@EEMSPK99S;OmWMd`x7Hej)n zkgL%#GeWbH_@3f6%;S?3xH8uLM6AT*0}-5Nsvln}g!Vam(nW}!uX}GU-da0cYr>?P zdZZ$W#wCl1M;&(k5p%XeEbZT-mEZCcMbhX6nn&Lwr7ei27|!a9`E7IwnKi5dzelyS zKgAt}|HUMrRx$nulb~0BqJ=a}_%vUm&}#dg^23YR zP`Arb+2P2d?^vM90>^7TN=F*@4)!+Qe@ywjOXs_56t-YndfglE(mPcP|D28Vt{umz zWnz`R%x28SF_9~hQ~M3Dh`~qO&y)xq1Wqr}5rN8&3L>09u`T!Osr{g$*_Qhck!SgOZmGuhkLgjikrGP0?iZ}e7z`Qy z^8ddK7at>ivCKWjd1si0SqaB9qMhUs8#|(BoS2)PdcMXv z+lwo^N7)?X&M{JmS5*tc}D75adwgS{OA=^crO& zwXF;HQjDkOzCKT`Kca;(7KHCK)Wzw+qlL}@(_jhEkU$(6+>Jy7nBu{NGywefk6;A* zlJ!h~(DgwZi`@eYm{yG|7hGGjF%#H9LFk;OyffmQ>vQGyRT4fYAs+>g3|OZK_Qb3a2WDX>03Zs$H*pxuN9b?J=SRS)XK0HLy>aU$u{FSz`d`+H#d`)~L z^g^jZ$S5DxOO-lWg0;9Th=Cw6Pn59BcM_ONUJvry(;1JXgt_X%4~35|+2_gm>b<-*sCyZ)q8%kd(t@Hd^zpR8jzx3V?VK z-Mxlhzs}QTt}BiF!$T&%&*`uu_$`(@JKFL578I?iJMHjSDPQ7#zc^OKN5rgTQKUb8 zH@wHZNIc}-Lfm-#LXY8H5aWdJA7Q_F9{zy)BxTt5T)bed{T4oiIN)7#mHL|0w0|Bp z3t_L`m1}orKS`DN_L-i()N3tWj8=DMlgc4~sImLp(AC{@iw1*S(|aSO<|_gY(Sprb z;_hpw;8wrene>YV*T|=3o{q!h&~xX{L>Q0xectiyL?Rt1c0nSf;RRpUQ}91Wt3@i}?R zbD^SxrZ>BE$(NXaC^E?Kp@MdUcF7v&+x1RuI*B}b9i)KTPr+QqiBrX z6F=j+FYK|-=s{yP( z)nzojeuJ+MqI7_F>$JYr{z%GY2>J&XUt14xZ`9``I8{4;i)wWOO5uQW)ryiRGsstg zvu|&>_4)g{a@mC}KJ{o-=B)WKq$IAWF{OI_&sq8NLRK6t8bH4^MsuL_W7dh-R~C23 z$$sQ34>7K7ep5rlKQXtJci=X@1Y=&x>?bF}^h?dUn%_sCcRbj2EM>g_)i|qeIVV_) z0xn#AaJM-aTRyHxyOjCoLQkyQgh$(Br#fvbS!8-8Vom_~VKh% zhh%HzIo3yTuFxMt#=FQ$N*r+Q8a=Dp_K~$DtAM)3e{kFHe24tnNQz~F%P{4L!8xr> z)N`16u!&|u( zVE6i4hFgE0a(98)6qDqE z2qWMz5U()HZi@65BdBy+rOmtfWIc2#D8b)}}aaW#b_(5lsLQjT7Ux~3o6rB_;heko;M4cDl;d90k+GQ5E28s>o05V@@ z;45T1FJNWD$=(k%N%AFQPg?q}YZ!Xzjngfm(OzElv4Aiv3(^%6*uQ?(=t+=P;`5BG8RbX&sc4Uw79b}9{p?%0*B*b?*$|r{$+XKj2k!l zqvdfHvH;T(3G~W^JFnEkfT7)0k(PiK*i zF#!e&t=iVd+6wmg6$^6GVv=O`==+dawwh1oIJMnyjP|nSruvv6AqGTnD41~0e1H4& z3KGkwpvo;}JlFa+vnpY~H~|B{$z|l%0Dr9Z84>y`*_p=>Rnn#WXr+#J8KJ}tgD*c9 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 literal 0 HcmV?d00001 diff --git a/diagrams/workflow-builder-preview-decisions.svg b/diagrams/workflow-builder-preview-decisions.svg new file mode 100644 index 000000000000..8bd421323396 --- /dev/null +++ b/diagrams/workflow-builder-preview-decisions.svg @@ -0,0 +1 @@ +revise + 修改意见cancelconfirm用户输入 AgentLoop是否是工作流搭建或修改任务?简洁回答,不创建计划,不查询画布核对业务目标、当前画布和必要资源需求和必要依赖已闭合?ask_agent一次性收集所有业务缺口暂停等待用户回答workflow_builder_present_previewtitle + mermaid + sectionsPreview payload 校验通过?返回结构化协议错误模型重新调用 Preview 工具用户选择requirePreview = true合并反馈并重新调用Preview 工具workflow_builder_cancel结构化 cancelledpreviewConfirmed = true恢复同一 AgentLoop连续搭建重要:不是判断是否需要Mermaid所有工作流任务都必须确认Mermaid \ No newline at end of file diff --git a/diagrams/workflow-builder-system-tools.excalidraw b/diagrams/workflow-builder-system-tools.excalidraw new file mode 100644 index 000000000000..b2241f8e0081 --- /dev/null +++ b/diagrams/workflow-builder-system-tools.excalidraw @@ -0,0 +1 @@ +{"type":"excalidraw","version":2,"source":"gstack-diagram-render","elements":[{"id":"z6VAeRfhqD7P4JurkKurd","type":"rectangle","x":0,"y":49.5,"width":271.109375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a0","roundness":null,"seed":1297649861,"version":3,"versionNonce":1323494219,"isDeleted":false,"boundElements":[{"type":"text","id":"zpIQflUM3SUympz8eAbxz"},{"id":"8b7XxU_L6RfWrD_iTtD1K","type":"arrow"}],"updated":1785827506749,"link":null,"locked":false},{"id":"akDOjokm8n_gdXNAB3iHp","type":"rectangle","x":321.109375,"y":52,"width":189.9375,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a1","roundness":null,"seed":1053395467,"version":4,"versionNonce":1725093003,"isDeleted":false,"boundElements":[{"type":"text","id":"UOxUrtDZiiyxvnvK6j29L"},{"id":"8b7XxU_L6RfWrD_iTtD1K","type":"arrow"},{"id":"gCmv7eqj0u7ekRDxvI61I","type":"arrow"}],"updated":1785827506749,"link":null,"locked":false},{"id":"jnwCRTrGaUkL-jg6xIUPw","type":"rectangle","x":561.046875,"y":49.5,"width":338.75,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a2","roundness":null,"seed":334770213,"version":4,"versionNonce":743009739,"isDeleted":false,"boundElements":[{"type":"text","id":"68Dx0UNKWPDyndol9mTwp"},{"id":"gCmv7eqj0u7ekRDxvI61I","type":"arrow"},{"id":"wL_KQcya242eC6qBTXrc2","type":"arrow"}],"updated":1785827506749,"link":null,"locked":false},{"id":"kPCjgVtCTkbH8XwjTf-Mz","type":"rectangle","x":949.796875,"y":52,"width":284.8125,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a3","roundness":null,"seed":2025984171,"version":4,"versionNonce":291157771,"isDeleted":false,"boundElements":[{"type":"text","id":"uUfPjEqTo7OHppoTZdCet"},{"id":"wL_KQcya242eC6qBTXrc2","type":"arrow"},{"id":"IVBGOYtqFufvP_ZMdWlb4","type":"arrow"}],"updated":1785827506749,"link":null,"locked":false},{"id":"qzkJ0udIf3OUw3xRMeIkM","type":"rectangle","x":1284.609375,"y":52,"width":154.765625,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a4","roundness":null,"seed":2024072069,"version":5,"versionNonce":2030778955,"isDeleted":false,"boundElements":[{"type":"text","id":"fT3TWCWy5dnqE0f7P9SBu"},{"id":"IVBGOYtqFufvP_ZMdWlb4","type":"arrow"},{"id":"lV_p5LEcGgBr04ieRL19A","type":"arrow"},{"id":"eRLikodTVmhHfZd3moIW5","type":"arrow"}],"updated":1785827506750,"link":null,"locked":false},{"id":"heypXTZxioQ1cOEwtDHao","type":"rectangle","x":1489.375,"y":101.5,"width":234.359375,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a5","roundness":null,"seed":2066793291,"version":4,"versionNonce":2040355211,"isDeleted":false,"boundElements":[{"type":"text","id":"fFEnItGkrYQeF0lbict0g"},{"id":"lV_p5LEcGgBr04ieRL19A","type":"arrow"},{"id":"1fxcNfP8dJab0GGW69_yP","type":"arrow"}],"updated":1785827506749,"link":null,"locked":false},{"id":"cQv6raAgRZ9vg42hD9N3z","type":"rectangle","x":1773.734375,"y":99,"width":217.609375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a6","roundness":null,"seed":531114725,"version":4,"versionNonce":402043595,"isDeleted":false,"boundElements":[{"type":"text","id":"vTIqUguft6Yzy6lHo5d8w"},{"id":"1fxcNfP8dJab0GGW69_yP","type":"arrow"},{"id":"yrwfUO0Jz5lGg8idLM_Cg","type":"arrow"}],"updated":1785827506749,"link":null,"locked":false},{"id":"6VHhKYR7ZF0TJXwwshGyP","type":"rectangle","x":2041.34375,"y":99,"width":480.5,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a7","roundness":null,"seed":779100651,"version":4,"versionNonce":205175819,"isDeleted":false,"boundElements":[{"type":"text","id":"CjGQgDWj6YnzS6OwDNC4P"},{"id":"yrwfUO0Jz5lGg8idLM_Cg","type":"arrow"},{"id":"gTqRuXDdY_Eq2d08C7N0d","type":"arrow"}],"updated":1785827506749,"link":null,"locked":false},{"id":"6wmG8IXhJM8HwSW7JdHcN","type":"rectangle","x":2571.84375,"y":99,"width":473.65625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a8","roundness":null,"seed":1233880645,"version":4,"versionNonce":2138928459,"isDeleted":false,"boundElements":[{"type":"text","id":"nOUxyJUPam7W9G1hV2iar"},{"id":"gTqRuXDdY_Eq2d08C7N0d","type":"arrow"},{"id":"Ulxt_Qesyjabg1JSr8BWj","type":"arrow"}],"updated":1785827506750,"link":null,"locked":false},{"id":"K5_MDae5_2dpubXHP24q1","type":"rectangle","x":3095.5,"y":99,"width":405.4375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"a9","roundness":null,"seed":193637515,"version":4,"versionNonce":1708318347,"isDeleted":false,"boundElements":[{"type":"text","id":"OtIgdkg65vo22cBQxpFp3"},{"id":"Ulxt_Qesyjabg1JSr8BWj","type":"arrow"},{"id":"kbpFYshL9MUoGVRjcwspO","type":"arrow"}],"updated":1785827506750,"link":null,"locked":false},{"id":"pT2bgt22nnmXKWskpwsW_","type":"rectangle","x":3580.9140625,"y":101.5,"width":315.859375,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aA","roundness":null,"seed":1227650469,"version":4,"versionNonce":1045362635,"isDeleted":false,"boundElements":[{"type":"text","id":"9QHU5X9rcfPJ3BXqfTDrs"},{"id":"kbpFYshL9MUoGVRjcwspO","type":"arrow"},{"id":"iE0pcHXuLGhGmeECByhE7","type":"arrow"}],"updated":1785827506750,"link":null,"locked":false},{"id":"kq-kjUZv41nQIK_nq_v0w","type":"rectangle","x":3976.75,"y":99,"width":437.734375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aB","roundness":null,"seed":104522539,"version":4,"versionNonce":1392886027,"isDeleted":false,"boundElements":[{"type":"text","id":"zrxXiuX0l8PccDbIhS-F7"},{"id":"iE0pcHXuLGhGmeECByhE7","type":"arrow"},{"id":"Jw1pkEe-PYq2hDwNiMG62","type":"arrow"}],"updated":1785827506750,"link":null,"locked":false},{"id":"QEIIvdojOnLu25Q9AcIDB","type":"rectangle","x":4611.9453125,"y":101.5,"width":232.28125,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aC","roundness":null,"seed":968390917,"version":4,"versionNonce":1325433291,"isDeleted":false,"boundElements":[{"type":"text","id":"228h8LRx7aEHvEM2s0rBF"},{"id":"Jw1pkEe-PYq2hDwNiMG62","type":"arrow"},{"id":"7GyhmyhWZ71Djy9BzJCrJ","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"Br_sc_zb6BwOvKnSsNYWL","type":"rectangle","x":2630.140625,"y":0,"width":357.0625,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aD","roundness":null,"seed":921388491,"version":4,"versionNonce":1349739403,"isDeleted":false,"boundElements":[{"type":"text","id":"mwRWo44ZV4xcf0uffI0iW"},{"id":"eRLikodTVmhHfZd3moIW5","type":"arrow"},{"id":"MDPnaj9eFJJhH6UA3i-38","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"DUAyk1c1cR9_WghlCmIGr","type":"rectangle","x":3232.953125,"y":0,"width":130.53125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aE","roundness":null,"seed":1957498981,"version":4,"versionNonce":72498379,"isDeleted":false,"boundElements":[{"type":"text","id":"oU-iVJ3prnFYPvBWAJySf"},{"id":"MDPnaj9eFJJhH6UA3i-38","type":"arrow"},{"id":"01K5VoA4hgm-cV8ZWPS-N","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"_YE5BxJaNJ4SYm1P5od2k","type":"rectangle","x":3550.9375,"y":0,"width":375.8125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aF","roundness":null,"seed":1152799851,"version":4,"versionNonce":180078091,"isDeleted":false,"boundElements":[{"type":"text","id":"aLj6fNT4Jtftu1T_aKvfd"},{"id":"01K5VoA4hgm-cV8ZWPS-N","type":"arrow"},{"id":"4DGqyHWrOYqrvw77yPHRD","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"uMgId3S-D2tsAvmqkNkWG","type":"rectangle","x":3981.84375,"y":0,"width":427.546875,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aG","roundness":null,"seed":1205320645,"version":4,"versionNonce":1690566475,"isDeleted":false,"boundElements":[{"type":"text","id":"XpDZFWqYs9Ym2rs9KjFOT"},{"id":"4DGqyHWrOYqrvw77yPHRD","type":"arrow"},{"id":"q8lJAhWwN5XalBD7q93JU","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"KyxwHyVjdCzyQ490GAWop","type":"rectangle","x":4464.484375,"y":0,"width":527.203125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aH","roundness":null,"seed":258379531,"version":4,"versionNonce":1585375371,"isDeleted":false,"boundElements":[{"type":"text","id":"qvh0tsqnUK1uh-IOCeVUB"},{"id":"q8lJAhWwN5XalBD7q93JU","type":"arrow"},{"id":"HKAkNEa1pJi_0V_TWtxON","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"WH1xHFYZN53hl8pLoUqRb","type":"rectangle","x":5041.6875,"y":49.5,"width":192.28125,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aI","roundness":null,"seed":1800796965,"version":5,"versionNonce":1482476299,"isDeleted":false,"boundElements":[{"type":"text","id":"RLGCd-BVyoV05yPvVZpVQ"},{"id":"HKAkNEa1pJi_0V_TWtxON","type":"arrow"},{"id":"7GyhmyhWZ71Djy9BzJCrJ","type":"arrow"},{"id":"WewBfI_F4M_1bSJOp5dyb","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"TVu0_WMn1kpGQ-A9hsdRn","type":"rectangle","x":5283.96875,"y":49.5,"width":217.609375,"height":49,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aJ","roundness":null,"seed":427193771,"version":4,"versionNonce":665306187,"isDeleted":false,"boundElements":[{"type":"text","id":"Dwf06Wghl1kM3vrvvTODh"},{"id":"WewBfI_F4M_1bSJOp5dyb","type":"arrow"},{"id":"BtJEIoR8fwTS-ddW-rpLY","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"IENGQmoGcoCzcaT0B5dJR","type":"rectangle","x":5551.578125,"y":52,"width":294.015625,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aK","roundness":null,"seed":932531845,"version":4,"versionNonce":888499595,"isDeleted":false,"boundElements":[{"type":"text","id":"ln8O5pEfUQu5B0-rPFah-"},{"id":"BtJEIoR8fwTS-ddW-rpLY","type":"arrow"},{"id":"pyVqQkGnNskknX9WgjuGu","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"WNG5Qab9xFKnh0JJD06c7","type":"rectangle","x":5895.59375,"y":52,"width":320.96875,"height":44,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aL","roundness":null,"seed":839944267,"version":3,"versionNonce":379946027,"isDeleted":false,"boundElements":[{"type":"text","id":"WKEned6fCny_ca8H1fQFO"},{"id":"pyVqQkGnNskknX9WgjuGu","type":"arrow"}],"updated":1785827506751,"link":null,"locked":false},{"id":"8b7XxU_L6RfWrD_iTtD1K","type":"arrow","x":271.109,"y":74,"width":44.700000000000045,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aM","roundness":{"type":2},"seed":458438117,"version":4,"versionNonce":898400997,"isDeleted":false,"boundElements":null,"updated":1785827506749,"link":null,"locked":false,"points":[[0.5,0],[44.200000000000045,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"z6VAeRfhqD7P4JurkKurd","focus":0,"gap":1},"endBinding":{"elementId":"akDOjokm8n_gdXNAB3iHp","focus":0,"gap":5.300374999999974},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"gCmv7eqj0u7ekRDxvI61I","type":"arrow","x":511.047,"y":74,"width":44.69999999999993,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aN","roundness":{"type":2},"seed":1594836715,"version":4,"versionNonce":1138412965,"isDeleted":false,"boundElements":null,"updated":1785827506749,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999993,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"akDOjokm8n_gdXNAB3iHp","focus":0,"gap":1},"endBinding":{"elementId":"jnwCRTrGaUkL-jg6xIUPw","focus":0,"gap":5.299875000000043},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"wL_KQcya242eC6qBTXrc2","type":"arrow","x":899.797,"y":74,"width":44.69999999999993,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aO","roundness":{"type":2},"seed":1369256261,"version":4,"versionNonce":698706021,"isDeleted":false,"boundElements":null,"updated":1785827506749,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999993,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"jnwCRTrGaUkL-jg6xIUPw","focus":0,"gap":1},"endBinding":{"elementId":"kPCjgVtCTkbH8XwjTf-Mz","focus":0,"gap":5.299875000000043},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"IVBGOYtqFufvP_ZMdWlb4","type":"arrow","x":1234.609,"y":74,"width":44.700000000000045,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aP","roundness":{"type":2},"seed":117256587,"version":4,"versionNonce":1343771429,"isDeleted":false,"boundElements":null,"updated":1785827506749,"link":null,"locked":false,"points":[[0.5,0],[44.200000000000045,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"kPCjgVtCTkbH8XwjTf-Mz","focus":0,"gap":1},"endBinding":{"elementId":"qzkJ0udIf3OUw3xRMeIkM","focus":0,"gap":5.300375000000031},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"lV_p5LEcGgBr04ieRL19A","type":"arrow","x":1407.496,"y":96,"width":76.57899999999995,"height":27.5,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aQ","roundness":{"type":2},"seed":1473298597,"version":4,"versionNonce":1163890149,"isDeleted":false,"boundElements":null,"updated":1785827506749,"link":null,"locked":false,"points":[[0.5,0],[56.878999999999905,27.5],[76.07899999999995,27.5]],"lastCommittedPoint":null,"startBinding":{"elementId":"qzkJ0udIf3OUw3xRMeIkM","focus":-0.00000498429388151793,"gap":1},"endBinding":{"elementId":"heypXTZxioQ1cOEwtDHao","focus":0,"gap":5.2999999999999545},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"1fxcNfP8dJab0GGW69_yP","type":"arrow","x":1723.734,"y":123.5,"width":44.700000000000045,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aR","roundness":{"type":2},"seed":1528088619,"version":4,"versionNonce":2091325605,"isDeleted":false,"boundElements":null,"updated":1785827506749,"link":null,"locked":false,"points":[[0.5,0],[44.200000000000045,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"heypXTZxioQ1cOEwtDHao","focus":0,"gap":1},"endBinding":{"elementId":"cQv6raAgRZ9vg42hD9N3z","focus":0,"gap":5.300375000000031},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"yrwfUO0Jz5lGg8idLM_Cg","type":"arrow","x":1991.344,"y":123.5,"width":44.700000000000045,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aS","roundness":{"type":2},"seed":597386245,"version":4,"versionNonce":236647269,"isDeleted":false,"boundElements":null,"updated":1785827506749,"link":null,"locked":false,"points":[[0.5,0],[44.200000000000045,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"cQv6raAgRZ9vg42hD9N3z","focus":0,"gap":1},"endBinding":{"elementId":"6VHhKYR7ZF0TJXwwshGyP","focus":0,"gap":5.299749999999904},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"gTqRuXDdY_Eq2d08C7N0d","type":"arrow","x":2521.844,"y":123.5,"width":44.69999999999982,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aT","roundness":{"type":2},"seed":21007051,"version":4,"versionNonce":1994858021,"isDeleted":false,"boundElements":null,"updated":1785827506750,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999982,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"6VHhKYR7ZF0TJXwwshGyP","focus":0,"gap":1},"endBinding":{"elementId":"6wmG8IXhJM8HwSW7JdHcN","focus":0,"gap":5.299750000000131},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Ulxt_Qesyjabg1JSr8BWj","type":"arrow","x":3045.5,"y":123.5,"width":44.69999999999982,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aU","roundness":{"type":2},"seed":419076965,"version":4,"versionNonce":1496815845,"isDeleted":false,"boundElements":null,"updated":1785827506750,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999982,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"6wmG8IXhJM8HwSW7JdHcN","focus":0,"gap":1},"endBinding":{"elementId":"K5_MDae5_2dpubXHP24q1","focus":0,"gap":5.300000000000182},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"kbpFYshL9MUoGVRjcwspO","type":"arrow","x":3500.938,"y":123.5,"width":74.67599999999993,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aV","roundness":{"type":2},"seed":2115697003,"version":4,"versionNonce":1010328485,"isDeleted":false,"boundElements":null,"updated":1785827506750,"link":null,"locked":false,"points":[[0.5,0],[25,0],[74.17599999999993,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"K5_MDae5_2dpubXHP24q1","focus":0,"gap":1},"endBinding":{"elementId":"pT2bgt22nnmXKWskpwsW_","focus":0,"gap":5.300062499999967},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"iE0pcHXuLGhGmeECByhE7","type":"arrow","x":3896.773,"y":123.5,"width":74.67699999999968,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aW","roundness":{"type":2},"seed":1077667525,"version":4,"versionNonce":1276477029,"isDeleted":false,"boundElements":null,"updated":1785827506750,"link":null,"locked":false,"points":[[0.5,0],[74.17699999999968,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"pT2bgt22nnmXKWskpwsW_","focus":0,"gap":1},"endBinding":{"elementId":"kq-kjUZv41nQIK_nq_v0w","focus":0,"gap":5.300000000000182},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"Jw1pkEe-PYq2hDwNiMG62","type":"arrow","x":4414.484,"y":123.5,"width":192.16100000000006,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aX","roundness":{"type":2},"seed":1592693771,"version":4,"versionNonce":435874085,"isDeleted":false,"boundElements":null,"updated":1785827506750,"link":null,"locked":false,"points":[[0.5,0],[25,0],[191.66100000000006,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"kq-kjUZv41nQIK_nq_v0w","focus":0,"gap":1},"endBinding":{"elementId":"QEIIvdojOnLu25Q9AcIDB","focus":0,"gap":5.300312499999563},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"eRLikodTVmhHfZd3moIW5","type":"arrow","x":1407.496,"y":52,"width":1217.3449999999998,"height":27.5,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aY","roundness":{"type":2},"seed":1006421541,"version":4,"versionNonce":1544856549,"isDeleted":false,"boundElements":null,"updated":1785827506750,"link":null,"locked":false,"points":[[0.5,0],[56.878999999999905,-27.5],[199.05899999999997,-27.5],[341.23799999999983,-27.5],[475.0429999999999,-27.5],[608.848,-27.5],[874.098,-27.5],[1139.348,-27.5],[1216.8449999999998,-27.5]],"lastCommittedPoint":null,"startBinding":{"elementId":"qzkJ0udIf3OUw3xRMeIkM","focus":0.000004984293881614541,"gap":1},"endBinding":{"elementId":"Br_sc_zb6BwOvKnSsNYWL","focus":0,"gap":5.2996250000001055},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"MDPnaj9eFJJhH6UA3i-38","type":"arrow","x":2987.203,"y":24.5,"width":240.44999999999982,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aZ","roundness":{"type":2},"seed":599120555,"version":4,"versionNonce":764325541,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"points":[[0.5,0],[83.29700000000003,0],[239.94999999999982,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"Br_sc_zb6BwOvKnSsNYWL","focus":0,"gap":1},"endBinding":{"elementId":"DUAyk1c1cR9_WghlCmIGr","focus":0,"gap":5.300125000000207},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"01K5VoA4hgm-cV8ZWPS-N","type":"arrow","x":3363.484,"y":24.5,"width":182.154,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aa","roundness":{"type":2},"seed":2133506437,"version":4,"versionNonce":1318390117,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"points":[[0.5,0],[181.654,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"DUAyk1c1cR9_WghlCmIGr","focus":0,"gap":1},"endBinding":{"elementId":"_YE5BxJaNJ4SYm1P5od2k","focus":0,"gap":5.29950000000008},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"4DGqyHWrOYqrvw77yPHRD","type":"arrow","x":3926.75,"y":24.5,"width":49.79399999999987,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ab","roundness":{"type":2},"seed":1763396939,"version":4,"versionNonce":1683207205,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"points":[[0.5,0],[25,0],[49.29399999999987,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"_YE5BxJaNJ4SYm1P5od2k","focus":0,"gap":1},"endBinding":{"elementId":"uMgId3S-D2tsAvmqkNkWG","focus":0,"gap":5.299750000000131},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"q8lJAhWwN5XalBD7q93JU","type":"arrow","x":4409.391,"y":24.5,"width":49.793000000000575,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ac","roundness":{"type":2},"seed":1124286693,"version":4,"versionNonce":955690725,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"points":[[0.5,0],[49.293000000000575,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"uMgId3S-D2tsAvmqkNkWG","focus":0,"gap":1},"endBinding":{"elementId":"KyxwHyVjdCzyQ490GAWop","focus":0,"gap":5.3003749999998035},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"HKAkNEa1pJi_0V_TWtxON","type":"arrow","x":4991.688,"y":24.5,"width":81.27499999999964,"height":22.994999999999997,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ad","roundness":{"type":2},"seed":1383689195,"version":4,"versionNonce":2074737061,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"points":[[0.5,0.5],[25,0],[80.77499999999964,22.494999999999997]],"lastCommittedPoint":null,"startBinding":{"elementId":"KyxwHyVjdCzyQ490GAWop","focus":0,"gap":1},"endBinding":{"elementId":"WH1xHFYZN53hl8pLoUqRb","focus":-0.000001302238902691215,"gap":2.0050000000000026},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"7GyhmyhWZ71Djy9BzJCrJ","type":"arrow","x":4844.227,"y":123.5,"width":228.73599999999988,"height":22.995000000000005,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ae","roundness":{"type":2},"seed":1024711749,"version":4,"versionNonce":10064997,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"points":[[0.5,-0.5],[172.46100000000024,0],[228.23599999999988,-22.495000000000005]],"lastCommittedPoint":null,"startBinding":{"elementId":"QEIIvdojOnLu25Q9AcIDB","focus":0,"gap":1},"endBinding":{"elementId":"WH1xHFYZN53hl8pLoUqRb","focus":0.0000013022388941263886,"gap":2.0049999999999955},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"WewBfI_F4M_1bSJOp5dyb","type":"arrow","x":5233.969,"y":74,"width":44.69999999999982,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"af","roundness":{"type":2},"seed":869971595,"version":4,"versionNonce":15826725,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999982,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"WH1xHFYZN53hl8pLoUqRb","focus":0,"gap":1},"endBinding":{"elementId":"TVu0_WMn1kpGQ-A9hsdRn","focus":0,"gap":5.299750000000131},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"BtJEIoR8fwTS-ddW-rpLY","type":"arrow","x":5501.578,"y":74,"width":44.69999999999982,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ag","roundness":{"type":2},"seed":356125605,"version":4,"versionNonce":1524480485,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999982,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"TVu0_WMn1kpGQ-A9hsdRn","focus":0,"gap":1},"endBinding":{"elementId":"IENGQmoGcoCzcaT0B5dJR","focus":0,"gap":5.300124999999753},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"pyVqQkGnNskknX9WgjuGu","type":"arrow","x":5845.594,"y":74,"width":44.69999999999982,"height":0,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ah","roundness":{"type":2},"seed":2079960363,"version":4,"versionNonce":1368016037,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"points":[[0.5,0],[44.19999999999982,0]],"lastCommittedPoint":null,"startBinding":{"elementId":"IENGQmoGcoCzcaT0B5dJR","focus":0,"gap":1},"endBinding":{"elementId":"WNG5Qab9xFKnh0JJD06c7","focus":0,"gap":5.299750000000131},"startArrowhead":null,"endArrowhead":"arrow","elbowed":false},{"id":"zpIQflUM3SUympz8eAbxz","type":"text","x":37.7763671875,"y":61.5,"width":195.556640625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ai","roundness":null,"seed":1104534853,"version":3,"versionNonce":864315397,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"用户 / 工作流生成对话","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"z6VAeRfhqD7P4JurkKurd","originalText":"用户 / 工作流生成对话","autoResize":true,"lineHeight":1.25},{"id":"UOxUrtDZiiyxvnvK6j29L","type":"text","x":351.3759765625,"y":61.5,"width":129.404296875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aj","roundness":null,"seed":336850085,"version":3,"versionNonce":56215243,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"Builder Handler","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"akDOjokm8n_gdXNAB3iHp","originalText":"Builder Handler","autoResize":true,"lineHeight":1.25},{"id":"68Dx0UNKWPDyndol9mTwp","type":"text","x":605.34375,"y":61.5,"width":250.15625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ak","roundness":null,"seed":1184436229,"version":3,"versionNonce":1294147429,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"authApp:登录 + 应用写权限","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"jnwCRTrGaUkL-jg6xIUPw","originalText":"authApp:登录 + 应用写权限","autoResize":true,"lineHeight":1.25},{"id":"uUfPjEqTo7OHppoTZdCet","type":"text","x":990.513671875,"y":61.5,"width":203.37890625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"al","roundness":null,"seed":1734526821,"version":3,"versionNonce":1638708587,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"WorkflowBuilder Runner","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"kPCjgVtCTkbH8XwjTf-Mz","originalText":"WorkflowBuilder Runner","autoResize":true,"lineHeight":1.25},{"id":"fT3TWCWy5dnqE0f7P9SBu","type":"text","x":1307.8466796875,"y":61.5,"width":108.291015625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"am","roundness":null,"seed":1757319877,"version":3,"versionNonce":1689512645,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"CLI Gateway","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"qzkJ0udIf3OUw3xRMeIkM","originalText":"CLI Gateway","autoResize":true,"lineHeight":1.25},{"id":"fFEnItGkrYQeF0lbict0g","type":"text","x":1525.4560546875,"y":111,"width":162.197265625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"an","roundness":null,"seed":390722085,"version":3,"versionNonce":1625870347,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"workflow_cli_query","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"heypXTZxioQ1cOEwtDHao","originalText":"workflow_cli_query","autoResize":true,"lineHeight":1.25},{"id":"vTIqUguft6Yzy6lHo5d8w","type":"text","x":1802.5390625,"y":111,"width":160,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ao","roundness":null,"seed":1341285765,"version":3,"versionNonce":450120229,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"系统工具能力服务","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"cQv6raAgRZ9vg42hD9N3z","originalText":"系统工具能力服务","autoResize":true,"lineHeight":1.25},{"id":"CjGQgDWj6YnzS6OwDNC4P","type":"text","x":2100.177734375,"y":111,"width":362.83203125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ap","roundness":null,"seed":1979018469,"version":3,"versionNonce":1661507243,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"SystemToolRepo + 插件服务 + Mongo 配置","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"6VHhKYR7ZF0TJXwwshGyP","originalText":"SystemToolRepo + 插件服务 + Mongo 配置","autoResize":true,"lineHeight":1.25},{"id":"nOUxyJUPam7W9G1hV2iar","type":"text","x":2639.3798828125,"y":111,"width":338.583984375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aq","roundness":null,"seed":685803589,"version":3,"versionNonce":544324997,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"权限过滤:来源 / 状态 / hideTags / 团队","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"6wmG8IXhJM8HwSW7JdHcN","originalText":"权限过滤:来源 / 状态 / hideTags / 团队","autoResize":true,"lineHeight":1.25},{"id":"OtIgdkg65vo22cBQxpFp3","type":"text","x":3147.59375,"y":111,"width":301.25,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ar","roundness":null,"seed":982595493,"version":3,"versionNonce":649496907,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"授权工具快照:schema + 节点信息","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"K5_MDae5_2dpubXHP24q1","originalText":"授权工具快照:schema + 节点信息","autoResize":true,"lineHeight":1.25},{"id":"9QHU5X9rcfPJ3BXqfTDrs","type":"text","x":3627.5888671875,"y":111,"width":222.509765625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"as","roundness":null,"seed":1697970949,"version":3,"versionNonce":751420645,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"WorkflowTemplateProvider","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"pT2bgt22nnmXKWskpwsW_","originalText":"WorkflowTemplateProvider","autoResize":true,"lineHeight":1.25},{"id":"zrxXiuX0l8PccDbIhS-F7","type":"text","x":4038.3662109375,"y":111,"width":314.501953125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"at","roundness":null,"seed":1095324261,"version":3,"versionNonce":827140075,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"Workflow Core:解析 / 实例化 / 校验","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"kq-kjUZv41nQIK_nq_v0w","originalText":"Workflow Core:解析 / 实例化 / 校验","autoResize":true,"lineHeight":1.25},{"id":"228h8LRx7aEHvEM2s0rBF","type":"text","x":4646.6748046875,"y":111,"width":162.822265625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"au","roundness":null,"seed":2073804229,"version":3,"versionNonce":862576709,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"WorkflowDocument","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"QEIIvdojOnLu25Q9AcIDB","originalText":"WorkflowDocument","autoResize":true,"lineHeight":1.25},{"id":"mwRWo44ZV4xcf0uffI0iW","type":"text","x":2679.794921875,"y":12,"width":257.75390625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"av","roundness":null,"seed":1263123749,"version":3,"versionNonce":2027352715,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"workflow_cli_stage:草稿分块","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"Br_sc_zb6BwOvKnSsNYWL","originalText":"workflow_cli_stage:草稿分块","autoResize":true,"lineHeight":1.25},{"id":"oU-iVJ3prnFYPvBWAJySf","type":"text","x":3254.6201171875,"y":12,"width":87.197265625,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"aw","roundness":null,"seed":666947717,"version":3,"versionNonce":1513066405,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"私有 Draft","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"DUAyk1c1cR9_WghlCmIGr","originalText":"私有 Draft","autoResize":true,"lineHeight":1.25},{"id":"aLj6fNT4Jtftu1T_aKvfd","type":"text","x":3602.955078125,"y":12,"width":271.77734375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ax","roundness":null,"seed":1052669925,"version":3,"versionNonce":1309567275,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"Draft validate:计划 + 引用校验","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"_YE5BxJaNJ4SYm1P5od2k","originalText":"Draft validate:计划 + 引用校验","autoResize":true,"lineHeight":1.25},{"id":"XpDZFWqYs9Ym2rs9KjFOT","type":"text","x":4042.3017578125,"y":12,"width":306.630859375,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"ay","roundness":null,"seed":709899077,"version":3,"versionNonce":793268997,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"workflow_cli_commit:draftRevision","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"uMgId3S-D2tsAvmqkNkWG","originalText":"workflow_cli_commit:draftRevision","autoResize":true,"lineHeight":1.25},{"id":"qvh0tsqnUK1uh-IOCeVUB","type":"text","x":4532.529296875,"y":12,"width":391.11328125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"az","roundness":null,"seed":1725137573,"version":3,"versionNonce":106826699,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"提交前重检:快照版本 / 工具状态 / 可访问性","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"KyxwHyVjdCzyQ490GAWop","originalText":"提交前重检:快照版本 / 工具状态 / 可访问性","autoResize":true,"lineHeight":1.25},{"id":"RLGCd-BVyoV05yPvVZpVQ","type":"text","x":5067.828125,"y":61.5,"width":140,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b00","roundness":null,"seed":150332933,"version":3,"versionNonce":523348581,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"原子应用到画布","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"WH1xHFYZN53hl8pLoUqRb","originalText":"原子应用到画布","autoResize":true,"lineHeight":1.25},{"id":"Dwf06Wghl1kM3vrvvTODh","type":"text","x":5312.7734375,"y":61.5,"width":160,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b01","roundness":null,"seed":867491173,"version":3,"versionNonce":1709202027,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"现有工作流运行时","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"TVu0_WMn1kpGQ-A9hsdRn","originalText":"现有工作流运行时","autoResize":true,"lineHeight":1.25},{"id":"ln8O5pEfUQu5B0-rPFah-","type":"text","x":5592.8974609375,"y":61.5,"width":211.376953125,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b02","roundness":null,"seed":1314777285,"version":3,"versionNonce":716772805,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"SystemToolRepo Runtime","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"IENGQmoGcoCzcaT0B5dJR","originalText":"SystemToolRepo Runtime","autoResize":true,"lineHeight":1.25},{"id":"WKEned6fCny_ca8H1fQFO","type":"text","x":5943.734375,"y":61.5,"width":224.6875,"height":25,"angle":0,"strokeColor":"#1e1e1e","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":2,"strokeStyle":"solid","roughness":1,"opacity":100,"groupIds":[],"frameId":null,"index":"b03","roundness":null,"seed":2056161317,"version":3,"versionNonce":1231017227,"isDeleted":false,"boundElements":null,"updated":1785827506751,"link":null,"locked":false,"text":"pluginClient.runToolStream","fontSize":20,"fontFamily":5,"textAlign":"center","verticalAlign":"middle","containerId":"WNG5Qab9xFKnh0JJD06c7","originalText":"pluginClient.runToolStream","autoResize":true,"lineHeight":1.25}],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}} \ No newline at end of file diff --git a/diagrams/workflow-builder-system-tools.mmd b/diagrams/workflow-builder-system-tools.mmd new file mode 100644 index 000000000000..eae28a3b103b --- /dev/null +++ b/diagrams/workflow-builder-system-tools.mmd @@ -0,0 +1,26 @@ +graph LR + U[用户 / 工作流生成对话] --> H[Builder Handler] + H --> A[authApp:登录 + 应用写权限] + A --> R[WorkflowBuilder Runner] + R --> G[CLI Gateway] + + G --> Q[workflow_cli_query] + Q --> C[系统工具能力服务] + C --> S[SystemToolRepo + 插件服务 + Mongo 配置] + S --> F[权限过滤:来源 / 状态 / hideTags / 团队] + F --> K[授权工具快照:schema + 节点信息] + K --> P[WorkflowTemplateProvider] + P --> CORE[Workflow Core:解析 / 实例化 / 校验] + CORE --> D[WorkflowDocument] + + G --> ST[workflow_cli_stage:草稿分块] + ST --> DR[私有 Draft] + DR --> V[Draft validate:计划 + 引用校验] + V --> CM[workflow_cli_commit:draftRevision] + CM --> RE[提交前重检:快照版本 / 工具状态 / 可访问性] + RE --> AP[原子应用到画布] + D --> AP + + AP --> RT[现有工作流运行时] + RT --> RR[SystemToolRepo Runtime] + RR --> X[pluginClient.runToolStream] diff --git a/diagrams/workflow-builder-system-tools.png b/diagrams/workflow-builder-system-tools.png new file mode 100644 index 0000000000000000000000000000000000000000..689fe0bf268c53f70c8adcdc3bc9da5c5e8587f6 GIT binary patch literal 32440 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

raXlIouco0_eG6bs@zvPUwr7&5g7?7AvtB!) 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用户 / 工作流生成对话Builder HandlerauthApp:登录 +应用写权限WorkflowBuilder RunnerCLI Gatewayworkflow_cli_query系统工具能力服务SystemToolRepo +插件服务 + Mongo 配置权限过滤:来源 / 状态 /hideTags / 团队授权工具快照:schema +节点信息WorkflowTemplateProviderWorkflow Core:解析 /实例化 / 校验WorkflowDocumentworkflow_cli_stage:草稿分私有 DraftDraft validate:计划 +引用校验workflow_cli_commit:draftRevision提交前重检:快照版本 /工具状态 / 可访问性原子应用到画布现有工作流运行时SystemToolRepo RuntimepluginClient.runToolStream \ No newline at end of file diff --git a/packages/global/core/workflow/runtime/utils.ts b/packages/global/core/workflow/runtime/utils.ts index f32a26449d3c..a01fd31906dc 100644 --- a/packages/global/core/workflow/runtime/utils.ts +++ b/packages/global/core/workflow/runtime/utils.ts @@ -225,6 +225,13 @@ export const getLastInteractiveValue = ( if (lastValue.interactive.type === 'paymentPause' && !lastValue.interactive.params.continue) { return lastValue.interactive; } + + if ( + lastValue.interactive.type === 'workflowBuilderPreview' && + !lastValue.interactive.params.answerValue + ) { + return lastValue.interactive; + } } return; diff --git a/packages/global/core/workflow/template/system/interactive/type.ts b/packages/global/core/workflow/template/system/interactive/type.ts index 09aac1e15bfc..039c97b93c43 100644 --- a/packages/global/core/workflow/template/system/interactive/type.ts +++ b/packages/global/core/workflow/template/system/interactive/type.ts @@ -93,9 +93,28 @@ export type LoopRunInteractive = InteractiveNodeType & { }; }; -export const AgentPlanAskOptionSchema = z.string().min(1); +export const AgentPlanAskOptionSchema = z.union([ + z.string().trim().min(1), + z + .object({ + value: z.string().trim().min(1), + label: z.string().trim().min(1), + inputMode: z.enum(['none', 'text']).optional(), + inputPlaceholder: z.string().trim().min(1).optional() + }) + .strict() +]); export type AgentPlanAskOption = z.infer; +export const AgentPlanAskResponseSchema = z + .object({ + askId: z.string().min(1), + optionValue: z.string().min(1), + text: z.string().trim().min(1).optional() + }) + .strict(); +export type AgentPlanAskResponse = z.infer; + /** * Legacy `ask_user` schema. * @@ -124,6 +143,40 @@ export const AgentPlanAskQueryInteractiveSchema = z */ export type AgentPlanAskQueryInteractive = z.infer; +export const WorkflowBuilderPreviewActionSchema = z.object({ + value: z.enum(['confirm', 'revise', 'cancel']), + label: z.string().trim().min(1), + inputMode: z.enum(['none', 'text']), + inputPlaceholder: z.string().trim().min(1).optional() +}); +export type WorkflowBuilderPreviewAction = z.infer; + +export const WorkflowBuilderPreviewSectionSchema = z.object({ + title: z.string().trim().min(1), + content: z.string() +}); +export type WorkflowBuilderPreviewSection = z.infer; + +/** + * Workflow Builder 的唯一预览载荷。 + * Mermaid、说明和用户动作都挂在同一个交互节点上,避免 assistant 文本与预览字段各自维护一份方案。 + */ +export const WorkflowBuilderPreviewInteractiveSchema = z.object({ + type: z.literal('workflowBuilderPreview'), + previewId: z.string().min(1), + params: z.object({ + title: z.string().trim().min(1), + mermaid: z.string().trim().min(1), + sections: z.array(WorkflowBuilderPreviewSectionSchema), + actions: z.array(WorkflowBuilderPreviewActionSchema).length(3), + answerValue: z.enum(['confirm', 'revise', 'cancel']).optional(), + answerText: z.string().optional() + }) +}); +export type WorkflowBuilderPreviewInteractive = z.infer< + typeof WorkflowBuilderPreviewInteractiveSchema +>; + // User selector export const UserSelectOptionItemSchema = z.object({ key: z.string(), @@ -208,7 +261,8 @@ export const InteractiveNodeResponseTypeSchema = z.intersection( LoopRunInteractiveSchema, PaymentPauseInteractiveSchema, AgentPlanAskQueryInteractiveSchema, - AgentAskInteractiveSchema + AgentAskInteractiveSchema, + WorkflowBuilderPreviewInteractiveSchema ]), z.object({ askId: z.string().nullish() diff --git a/packages/global/openapi/core/workflow/builder/api.ts b/packages/global/openapi/core/workflow/builder/api.ts index e1a5f07d83be..8ab85cacaef5 100644 --- a/packages/global/openapi/core/workflow/builder/api.ts +++ b/packages/global/openapi/core/workflow/builder/api.ts @@ -3,6 +3,7 @@ import { AppChatConfigTypeSchema } from '../../../../core/app/type'; import { ChatCompletionMessageParamSchema } from '../../../../core/ai/llm/type'; import { StoreNodeItemTypeSchema } from '../../../../core/workflow/type/node'; import { ObjectIdSchema } from '../../../../common/type/mongo'; +import { AgentPlanAskResponseSchema } from '../../../../core/workflow/template/system/interactive/type'; /* ============================================================================ * API: Workflow Builder 辅助生成对话 @@ -96,6 +97,9 @@ export const WorkflowBuilderChatBodySchema = z description: 'Workflow Builder 使用的 LLM 模型', example: 'gpt-5' }), + agentPlanAskResponse: AgentPlanAskResponseSchema.optional().meta({ + description: '用户对当前 Agent 结构化选项的回答' + }), workflowContext: z .object({ document: WorkflowBuilderDocumentSchema, @@ -111,6 +115,9 @@ export type WorkflowBuilderChatBody = z.infer { expect(getLastInteractiveValue(histories)).toBeUndefined(); }); + + it('should return an unanswered workflow builder preview', () => { + const interactive = { + type: 'workflowBuilderPreview', + previewId: 'preview-1', + entryNodeIds: ['node1'], + memoryEdges: [], + nodeOutputs: [], + params: { + title: 'Workflow preview', + mermaid: 'flowchart LR\n A --> B', + sections: [], + actions: [ + { value: 'confirm', label: 'Confirm', inputMode: 'none' }, + { value: 'revise', label: 'Revise', inputMode: 'text' }, + { value: 'cancel', label: 'Cancel', inputMode: 'none' } + ] + } + } as WorkflowInteractiveResponseType; + + expect(getLastInteractiveValue([{ obj: ChatRoleEnum.AI, value: [{ interactive }] }])).toBe( + interactive + ); + }); + + it('should not return a workflow builder preview after an answer', () => { + const interactive = { + type: 'workflowBuilderPreview', + previewId: 'preview-1', + entryNodeIds: ['node1'], + memoryEdges: [], + nodeOutputs: [], + params: { + title: 'Workflow preview', + mermaid: 'flowchart LR\n A --> B', + sections: [], + actions: [ + { value: 'confirm', label: 'Confirm', inputMode: 'none' }, + { value: 'revise', label: 'Revise', inputMode: 'text' }, + { value: 'cancel', label: 'Cancel', inputMode: 'none' } + ], + answerValue: 'confirm' + } + } as WorkflowInteractiveResponseType; + + expect( + getLastInteractiveValue([{ obj: ChatRoleEnum.AI, value: [{ interactive }] }]) + ).toBeUndefined(); + }); }); describe('storeEdges2RuntimeEdges', () => { diff --git a/packages/service/core/ai/llm/agentLoop/domain/mainPrompt.ts b/packages/service/core/ai/llm/agentLoop/domain/mainPrompt.ts index 1f6aa90fd9e5..56751a58aa9f 100644 --- a/packages/service/core/ai/llm/agentLoop/domain/mainPrompt.ts +++ b/packages/service/core/ai/llm/agentLoop/domain/mainPrompt.ts @@ -13,6 +13,14 @@ export type BuildDefaultAgentSystemPromptParams = { sandboxEnabled?: boolean; }; +export type AgentLoopSystemPromptBuilderInput = { + systemPrompt?: string; + hasExecutableTools: boolean; +}; + +/** AgentLoop 顶层系统提示词构建策略。 */ +export type AgentLoopSystemPromptBuilder = (input: AgentLoopSystemPromptBuilderInput) => string; + /** * 构建 Agent 的最终 system prompt。 * @@ -34,3 +42,14 @@ export const buildDefaultAgentSystemPrompt = ({ ] .filter(Boolean) .join('\n\n'); + +/** + * 解析当前 AgentLoop 使用的最终系统提示词。 + * 默认保留调用方已组装的提示词,只在业务场景注入 builder 时替换顶层角色。 + */ +export const resolveAgentLoopSystemPrompt = ({ + systemPromptBuilder, + ...input +}: AgentLoopSystemPromptBuilderInput & { + systemPromptBuilder?: AgentLoopSystemPromptBuilder; +}) => systemPromptBuilder?.(input) ?? input.systemPrompt ?? ''; diff --git a/packages/service/core/ai/llm/agentLoop/domain/runtime.ts b/packages/service/core/ai/llm/agentLoop/domain/runtime.ts index ed8713514ada..dcca9c08ed89 100644 --- a/packages/service/core/ai/llm/agentLoop/domain/runtime.ts +++ b/packages/service/core/ai/llm/agentLoop/domain/runtime.ts @@ -4,6 +4,7 @@ import type { OpenaiAccountType } from '@fastgpt/global/support/user/team/type'; import type { CreateLLMResponseProps } from '../../request'; import type { AgentLoopEvent } from './event'; import type { AgentLoopInteractiveToolExecuteParams } from './interactive'; +import type { AgentLoopSystemPromptBuilder } from './mainPrompt'; import type { AgentLoopSystemTools, AgentLoopToolCatalog, @@ -32,13 +33,27 @@ export type AgentLoopResponseParams = { retainDatasetCite?: boolean; }; +export type AgentLoopCompletionDecision = + | { action: 'complete' } + | { action: 'continue'; message: string }; + +/** + * 在模型自然结束且没有工具调用时,决定是否接受本次结束。 + * 策略只接收运行时事实,不接收模型文本,避免业务层通过关键词判断完成状态。 + */ +export type AgentLoopCompletionPolicy = (context: { + requestIndex: number; +}) => AgentLoopCompletionDecision | Promise; + export type AgentLoopRuntime = { teamId: string; llmParams: AgentLoopLLMParams; + systemPromptBuilder?: AgentLoopSystemPromptBuilder; responseParams?: AgentLoopResponseParams; lang?: localeType; systemTools?: AgentLoopSystemTools; maxRunAgentTimes?: number; + completionPolicy?: AgentLoopCompletionPolicy; checkIsStopping?: () => boolean; toolCatalog: AgentLoopToolCatalog; executeTool: ( diff --git a/packages/service/core/ai/llm/agentLoop/domain/tool.ts b/packages/service/core/ai/llm/agentLoop/domain/tool.ts index 025a195cd9d4..f485eaa1d791 100644 --- a/packages/service/core/ai/llm/agentLoop/domain/tool.ts +++ b/packages/service/core/ai/llm/agentLoop/domain/tool.ts @@ -3,8 +3,8 @@ import type { ChatCompletionMessageToolCall, ChatCompletionTool } from '@fastgpt/global/core/ai/llm/type'; -import type { SandboxClient } from '../../../sandbox/interface/runtime'; import type { AgentLoopDatasetSearchExecutor } from './systemTool/datasetSearch'; +import type { AgentAskPayload } from './systemTool/ask'; import type { AgentLoopUsage } from './usage'; export type AgentLoopToolCatalog = { @@ -45,16 +45,47 @@ export type AgentLoopReadFileExecutor = ( params: AgentLoopReadFileExecuteParams ) => Promise; +/** + * AgentLoop 使用的 Sandbox 工具执行边界。 + * + * 默认 Agent 可以由适配层继续使用 SandboxClient;需要隔离工作目录的业务 + * (例如 Workflow Builder)应注入自己的执行器,避免把物理 Sandbox 直接交给模型。 + */ +export type AgentLoopSandboxExecutionResult = { + success: boolean; + response: string; + errorMessage?: string; +}; + +export type AgentLoopSandboxExecutor = (params: { + toolName: string; + args: string; +}) => Promise; + +export type AgentLoopAskValidationContext = { + /** 当前 ask_agent 工具调用所属 assistant 消息的正文。 */ + assistantContent: string; +}; + +export type AgentLoopAskValidator = ( + ask: AgentAskPayload, + context: AgentLoopAskValidationContext +) => string | undefined | Promise; + export type AgentLoopSystemTools = { plan?: { enabled: boolean; }; ask?: { enabled: boolean; + /** 由具体 Agent 注入交互约束;返回错误时将结果反馈给模型并继续当前 loop。 */ + validate?: AgentLoopAskValidator; }; sandbox?: { enabled: boolean; - client: SandboxClient; + /** 普通 Agent 的兼容入口。Workflow Builder 应优先使用 executor。 */ + client?: import('../../../sandbox/interface/runtime').SandboxClient; + executor?: AgentLoopSandboxExecutor; }; readFile?: { enabled: boolean; diff --git a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/index.ts b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/index.ts index 427837cea44b..93f1eb7b1bb1 100644 --- a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/index.ts +++ b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/index.ts @@ -67,6 +67,7 @@ export const runFastAgentLoop = async ({ const fastAgentRuntime: FastAgentInternalRuntime = { teamId: runtime.teamId, model: runtime.llmParams.model, + systemPromptBuilder: runtime.systemPromptBuilder, reasoningEffort: runtime.llmParams.reasoningEffort, userKey: runtime.llmParams.userKey, stream: runtime.llmParams.stream, @@ -83,8 +84,10 @@ export const runFastAgentLoop = async ({ lang: runtime.lang, hasExecutableTools: hasAgentLoopExecutableTools(runtime), maxRunAgentTimes: runtime.maxRunAgentTimes, + completionPolicy: runtime.completionPolicy, batchToolSize: runtime.toolCatalog.batchToolSize, checkIsStopping: runtime.checkIsStopping, + validateAsk: runtime.systemTools?.ask?.validate, toolCatalog: { runtimeTools: runtime.toolCatalog.runtimeTools, ...(runtime.systemTools?.ask?.enabled ? { askTool: createAskUserAgentTool() } : {}), @@ -94,7 +97,8 @@ export const runFastAgentLoop = async ({ updatePlanTool: createUpdatePlanAgentTool() } : {}), - ...(runtime.systemTools?.sandbox?.enabled && runtime.systemTools.sandbox.client + ...(runtime.systemTools?.sandbox?.enabled && + (runtime.systemTools.sandbox.client || runtime.systemTools.sandbox.executor) ? { sandboxTools: createAgentLoopSandboxTools() } : {}), ...(runtime.systemTools?.readFile?.enabled @@ -111,9 +115,11 @@ export const runFastAgentLoop = async ({ executeTool: runtime.executeTool, executeInteractiveTool: runtime.executeInteractiveTool, sandboxToolContext: - runtime.systemTools?.sandbox?.enabled && runtime.systemTools.sandbox.client + runtime.systemTools?.sandbox?.enabled && + (runtime.systemTools.sandbox.client || runtime.systemTools.sandbox.executor) ? { - client: runtime.systemTools.sandbox.client + client: runtime.systemTools.sandbox.client, + executor: runtime.systemTools.sandbox.executor } : undefined, executeReadFileTool: runtime.systemTools?.readFile?.execute, diff --git a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/base.ts b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/base.ts index 31729567345e..dc7f8c505de3 100644 --- a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/base.ts +++ b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/base.ts @@ -15,6 +15,7 @@ import { formatModelChars2Points } from '../../../../../../../support/wallet/usa import type { LLMModelItemType } from '@fastgpt/global/core/ai/model.schema'; import type { AgentLoopChildrenInteractiveParams, + AgentLoopCompletionPolicy, AgentLoopInteractiveToolExecuteParams, AgentLoopToolExecutionResult, AgentLoopUsage @@ -26,6 +27,7 @@ import type { AgentPlanType } from '@fastgpt/global/core/ai/agent/type'; type RunAgentCallProps = { maxRunAgentTimes: number; + completionPolicy?: AgentLoopCompletionPolicy; batchToolSize?: number; body: CreateLLMResponseProps['body'] & { tools: ChatCompletionTool[]; @@ -189,6 +191,7 @@ export const onCompressContext = async ({ */ export const runAgentLoop = async ({ maxRunAgentTimes, + completionPolicy, batchToolSize = 1, body: { model, messages, max_tokens, ...body }, @@ -693,6 +696,32 @@ export const runAgentLoop = async ({ } } + if ( + toolCalls.length === 0 && + !toolChildPause && + !stopAgentLoop && + !isAborted?.() && + completionPolicy + ) { + try { + const decision = await completionPolicy({ requestIndex: runTimes }); + if (decision.action === 'continue') { + if (runTimes >= maxRunAgentTimes) { + requestError = new Error(`Agent loop reached max run times: ${maxRunAgentTimes}`); + break; + } + await appendRequestMessages({ + role: ChatCompletionRequestMessageRoleEnum.System, + content: decision.message + }); + continue; + } + } catch (error) { + requestError = error; + break; + } + } + if (toolCalls.length === 0 || !!toolChildPause || stopAgentLoop || isAborted?.()) { break; } diff --git a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/index.ts b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/index.ts index 24afa3b5694b..e08dd7a4c55f 100644 --- a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/index.ts +++ b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/index.ts @@ -7,6 +7,10 @@ import type { AgentPlanType } from '@fastgpt/global/core/ai/agent/type'; import { getErrText } from '@fastgpt/global/common/error/utils'; import { parseJsonArgs } from '../../../../../utils'; import { runAgentLoop } from './base'; +import { + resolveAgentLoopSystemPrompt, + type AgentLoopSystemPromptBuilder +} from '../../../domain/mainPrompt'; import { formatAgentAskToolResponse, parseAgentAskToolCall, @@ -97,14 +101,44 @@ const pushAgentLoopUsages = ( const stripSystemMessages = (messages: ChatCompletionMessageParam[]) => messages.filter((message) => message.role !== ChatCompletionRequestMessageRoleEnum.System); +/** 读取 ask_agent 所属 assistant 消息的可展示正文,供业务校验交互内容。 */ +const getAssistantMessageContent = (message?: ChatCompletionMessageParam) => { + if (message?.role !== ChatCompletionRequestMessageRoleEnum.Assistant || !message.content) + return ''; + if (typeof message.content === 'string') return message.content; + return message.content + .map((item) => { + if (item.type === 'text') return item.text; + if (item.type === 'refusal') return item.refusal; + return ''; + }) + .join(''); +}; + /** * 构建进入主 Agent 的初始消息链。 * systemPrompt 是调用方已经组装完成的最终提示词;messages 中的 system message 不再重复注入。 */ -const buildInitialMessages = ({ input }: { input: FastAgentLoopInput }) => [ - ...(input.systemPrompt ? [createSystemMessage(input.systemPrompt)] : []), - ...stripSystemMessages(input.messages) -]; +const buildInitialMessages = ({ + input, + hasExecutableTools, + systemPromptBuilder +}: { + input: FastAgentLoopInput; + hasExecutableTools: boolean; + systemPromptBuilder?: AgentLoopSystemPromptBuilder; +}): ChatCompletionMessageParam[] => { + const systemPrompt = resolveAgentLoopSystemPrompt({ + systemPrompt: input.systemPrompt, + hasExecutableTools, + systemPromptBuilder + }); + + return [ + ...(systemPrompt ? [createSystemMessage(systemPrompt)] : []), + ...stripSystemMessages(input.messages) + ]; +}; /** * ask_user 暂停时保存恢复所需上下文。 @@ -192,7 +226,11 @@ export const runFastAgentMainLoop = async ({ ) } as ChatCompletionMessageParam ] - : buildInitialMessages({ input }); + : buildInitialMessages({ + input, + hasExecutableTools: runtime.hasExecutableTools, + systemPromptBuilder: runtime.systemPromptBuilder + }); // 普通续轮通过 input.activePlan 恢复结构化 plan;ask_user 续跑则优先使用暂停时的完整快照。 // 历史 checkpoint 只负责给模型提供上下文,不再作为运行时状态的反序列化来源。 let activePlan = input.pendingMainContext?.activePlan ?? input.activePlan; @@ -223,6 +261,7 @@ export const runFastAgentMainLoop = async ({ const result = await runAgentLoop({ maxRunAgentTimes: runtime.maxRunAgentTimes ?? 100, + completionPolicy: runtime.completionPolicy, batchToolSize: runtime.batchToolSize ?? 5, childrenInteractiveParams: input.childrenInteractiveParams, body: { @@ -368,6 +407,13 @@ export const runFastAgentMainLoop = async ({ return createToolResponse(parsed.error, { skipResponseCompress: true }); } + const validationError = await runtime.validateAsk?.(parsed.ask, { + assistantContent: getAssistantMessageContent(assistantMessage) + }); + if (validationError) { + return createToolResponse(validationError, { skipResponseCompress: true }); + } + emitAgentLoopEvent(runtime, { type: 'ask_start', ask: parsed.ask, @@ -439,11 +485,21 @@ export const runFastAgentMainLoop = async ({ return createToolResponse(response, { skipResponseCompress: true }); } - const sandboxResult = await runSandboxTools({ - toolName: sandboxToolName, - args: call.function.arguments ?? '', - sandboxClient: runtime.sandboxToolContext.client - }); + const sandboxResult = runtime.sandboxToolContext.executor + ? await runtime.sandboxToolContext.executor({ + toolName: sandboxToolName, + args: call.function.arguments ?? '' + }) + : runtime.sandboxToolContext.client + ? await runSandboxTools({ + toolName: sandboxToolName, + args: call.function.arguments ?? '', + sandboxClient: runtime.sandboxToolContext.client + }) + : { + success: false, + response: 'Sandbox executor is not available.' + }; return createToolResponse(sandboxResult.response, { skipResponseCompress: true, errorMessage: sandboxResult.success ? undefined : sandboxResult.response diff --git a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/type.ts b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/type.ts index 0e266480c9cf..d6ceb88d6b1a 100644 --- a/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/type.ts +++ b/packages/service/core/ai/llm/agentLoop/provider/fastAgent/loop/type.ts @@ -6,22 +6,26 @@ import type { import type { AgentPlanType } from '@fastgpt/global/core/ai/agent/type'; import type { localeType } from '@fastgpt/global/common/i18n/type'; import type { CreateLLMResponseProps } from '../../../../request'; -import type { SandboxClient } from '../../../../../sandbox/interface/runtime'; import type { AgentLoopToolCatalog } from '../tools'; import type { AgentLoopDatasetSearchExecutor } from '../../../domain/systemTool/datasetSearch'; import type { AgentLoopChildrenInteractiveParams, + AgentLoopCompletionPolicy, + AgentLoopAskValidator, AgentLoopEvent, AgentLoopInteractiveToolExecuteParams, AgentLoopPendingMainContext, AgentLoopPause, AgentLoopReadFileExecutor, + AgentLoopSystemPromptBuilder, AgentLoopToolExecutionResult, + AgentLoopSandboxExecutor, AgentLoopUsage } from '../../../domain'; export type { AgentLoopChildrenInteractiveParams, + AgentLoopCompletionPolicy, AgentLoopEvent, AgentLoopInteractiveToolExecuteParams, AgentLoopPause, @@ -32,6 +36,7 @@ export type { export type AgentLoopRuntime = { teamId: string; model: string; + systemPromptBuilder?: AgentLoopSystemPromptBuilder; reasoningEffort?: CreateLLMResponseProps['body']['reasoning_effort']; userKey?: CreateLLMResponseProps['userKey']; stream?: boolean; @@ -48,8 +53,10 @@ export type AgentLoopRuntime = { lang?: localeType; hasExecutableTools: boolean; maxRunAgentTimes?: number; + completionPolicy?: AgentLoopCompletionPolicy; batchToolSize?: number; checkIsStopping?: () => boolean; + validateAsk?: AgentLoopAskValidator; toolCatalog: AgentLoopToolCatalog; executeTool: (e: { call: ChatCompletionMessageToolCall; @@ -59,7 +66,8 @@ export type AgentLoopRuntime = { e: AgentLoopInteractiveToolExecuteParams ) => Promise>; sandboxToolContext?: { - client: SandboxClient; + client?: import('../../../../../sandbox/interface/runtime').SandboxClient; + executor?: AgentLoopSandboxExecutor; }; executeReadFileTool?: AgentLoopReadFileExecutor; executeDatasetSearchTool?: AgentLoopDatasetSearchExecutor; diff --git a/packages/service/core/ai/llm/agentLoop/provider/piAgent/run.ts b/packages/service/core/ai/llm/agentLoop/provider/piAgent/run.ts index 4d5c53d23a5b..65097ed76c98 100644 --- a/packages/service/core/ai/llm/agentLoop/provider/piAgent/run.ts +++ b/packages/service/core/ai/llm/agentLoop/provider/piAgent/run.ts @@ -15,6 +15,7 @@ import { loadRequestMessages } from '../../../utils'; import { formatModelChars2Points } from '../../../../../../support/wallet/usage/utils'; import { getLLMModel } from '../../../../model'; import { AgentUsageModuleName } from '../../domain/usage'; +import { resolveAgentLoopSystemPrompt } from '../../domain/mainPrompt'; import { askUserToolName, formatAgentAskToolResponse, @@ -22,6 +23,7 @@ import { } from '../../domain/systemTool/ask'; import { setPlanToolName, updatePlanToolName } from '../../domain/systemTool/plan'; import { + hasAgentLoopExecutableTools, normalizeAgentLoopUsages, type AgentLoopInput, type AgentLoopResult, @@ -88,6 +90,7 @@ export const runPiAgentLoop = async ({ let requestIndex = 0; let answerText = ''; let reasoningText = ''; + let currentAssistantContent = ''; let inputTokens = 0; let outputTokens = 0; let llmTotalPoints = 0; @@ -395,6 +398,7 @@ export const runPiAgentLoop = async ({ abortCurrentRunRef.current?.(); }, getMessages: () => completeMessages, + getAssistantContent: () => currentAssistantContent, onToolCall: emitOrdinaryToolExecution, onToolResult: ({ call, response, assistantMessages }) => { recordToolResult({ @@ -407,9 +411,14 @@ export const runPiAgentLoop = async ({ const pendingRequests: Array<{ requestId: string; requestIndex: number; startedAt: number }> = []; const maxRunAgentTimes = Math.max(1, runtime.maxRunAgentTimes ?? 100); + const systemPrompt = resolveAgentLoopSystemPrompt({ + systemPrompt: input.systemPrompt, + hasExecutableTools: hasAgentLoopExecutableTools(runtime), + systemPromptBuilder: runtime.systemPromptBuilder + }); const agent = new Agent({ initialState: { - systemPrompt: input.systemPrompt ?? '', + systemPrompt, model: piModel, thinkingLevel: getPiThinkingLevel(modelName, runtime.llmParams.reasoningEffort), tools, @@ -420,6 +429,7 @@ export const runPiAgentLoop = async ({ toolExecution: 'sequential', getApiKey: () => getModelApiKey(modelName, runtime.llmParams.userKey), onPayload: (payload) => { + currentAssistantContent = ''; if (requestIndex >= maxRunAgentTimes) { reachedRunLimit = true; throw new Error(`Agent loop reached max run times: ${maxRunAgentTimes}`); @@ -515,6 +525,7 @@ export const runPiAgentLoop = async ({ const assistantEvent = event.assistantMessageEvent; if (assistantEvent.type === 'text_delta') { answerText += assistantEvent.delta; + currentAssistantContent += assistantEvent.delta; runtime.emitEvent?.({ type: 'answer_delta', text: assistantEvent.delta @@ -575,6 +586,7 @@ export const runPiAgentLoop = async ({ ? normalizedMessage : event.message; const messageData = readAssistantMessage(assistantMessage); + currentAssistantContent = messageData.answerText; messageData.toolCalls.forEach(emitOrdinaryToolCall); if (!answerText && messageData.answerText) { answerText = messageData.answerText; @@ -682,6 +694,32 @@ export const runPiAgentLoop = async ({ await agent.prompt(prompt); } } + + while ( + runtime.completionPolicy && + !pendingAsk && + !pendingToolChild && + !pendingToolStop && + !runtime.checkIsStopping?.() && + !latestError && + !agent.state.errorMessage && + !reachedRunLimit + ) { + const decision = await runtime.completionPolicy({ requestIndex }); + if (decision.action === 'complete') break; + if (requestIndex >= maxRunAgentTimes) { + reachedRunLimit = true; + latestError = new Error(`Agent loop reached max run times: ${maxRunAgentTimes}`); + break; + } + + const continuationMessage: ChatCompletionMessageParam = { + role: ChatCompletionRequestMessageRoleEnum.User, + content: decision.message + }; + completeMessages.push(continuationMessage); + await agent.prompt(decision.message); + } } catch (error) { latestError = error; } finally { @@ -811,6 +849,20 @@ export const runPiAgentLoop = async ({ } if (reachedRunLimit) { + if (runtime.completionPolicy) { + return { + status: 'error', + activePlan, + providerState: nextProviderState, + completeMessages, + assistantMessages, + requestIds, + contextCheckpoint: latestContextCheckpoint, + finishReason: 'error', + usages: resultUsages, + error: latestError || new Error(`Agent loop reached max run times: ${maxRunAgentTimes}`) + }; + } return { status: 'done', activePlan, diff --git a/packages/service/core/ai/llm/agentLoop/provider/piAgent/tool/build.ts b/packages/service/core/ai/llm/agentLoop/provider/piAgent/tool/build.ts index fd4b5be17e31..72a72ba85bdf 100644 --- a/packages/service/core/ai/llm/agentLoop/provider/piAgent/tool/build.ts +++ b/packages/service/core/ai/llm/agentLoop/provider/piAgent/tool/build.ts @@ -71,6 +71,7 @@ export const buildPiAgentTools = async ({ onToolChildPending, onToolStop, getMessages, + getAssistantContent, onToolCall, onToolResult }: { @@ -82,6 +83,7 @@ export const buildPiAgentTools = async ({ onToolChildPending?: (pause: { childrenResponse: TChildrenResponse; toolCallId: string }) => void; onToolStop?: () => void; getMessages: () => ChatCompletionMessageParam[]; + getAssistantContent: () => string; onToolCall: (call: ChatCompletionMessageToolCall) => void; onToolResult: (params: { call: ChatCompletionMessageToolCall; @@ -218,7 +220,8 @@ export const buildPiAgentTools = async ({ } } - if (runtime.systemTools?.ask?.enabled) { + const askSystemTool = runtime.systemTools?.ask; + if (askSystemTool?.enabled) { const askTool = createAskUserAgentTool(); tools.push({ name: askTool.function.name, @@ -238,6 +241,17 @@ export const buildPiAgentTools = async ({ return { content: [{ type: 'text' as const, text: response }], details: {} }; } + const validationError = await askSystemTool.validate?.(parsed.data, { + assistantContent: getAssistantContent() + }); + if (validationError) { + onToolResult({ + call: createToolCall({ id: callId, name: askTool.function.name, args: toolArgs }), + response: validationError + }); + return { content: [{ type: 'text' as const, text: validationError }], details: {} }; + } + setPendingAsk(parsed.data, callId); runtime.emitEvent?.({ type: 'ask_start', @@ -259,7 +273,10 @@ export const buildPiAgentTools = async ({ }); } - if (runtime.systemTools?.sandbox?.enabled && runtime.systemTools.sandbox.client) { + if ( + runtime.systemTools?.sandbox?.enabled && + (runtime.systemTools.sandbox.client || runtime.systemTools.sandbox.executor) + ) { for (const sandboxTool of createAgentLoopSandboxTools()) { const agentLoopToolName = sandboxTool.function.name; const sandboxToolName = toSandboxToolName(agentLoopToolName); @@ -279,16 +296,22 @@ export const buildPiAgentTools = async ({ const result = await executeOrdinaryTool({ call, execute: async () => { + const sandboxExecutor = runtime.systemTools?.sandbox?.executor; const sandboxClient = runtime.systemTools?.sandbox?.client; - if (!sandboxClient) { + if (!sandboxExecutor && !sandboxClient) { const response = 'Sandbox executor is not available.'; return { response, assistantMessages: [], usages: [], errorMessage: response }; } - const sandboxResult = await runSandboxTools({ - toolName: sandboxToolName, - args: call.function.arguments ?? '', - sandboxClient - }); + const sandboxResult = sandboxExecutor + ? await sandboxExecutor({ + toolName: sandboxToolName, + args: call.function.arguments ?? '' + }) + : await runSandboxTools({ + toolName: sandboxToolName, + args: call.function.arguments ?? '', + sandboxClient: sandboxClient! + }); return { response: sandboxResult.response, assistantMessages: [], diff --git a/packages/service/core/ai/llm/agentLoop/provider/piAgent/tool/catalog.ts b/packages/service/core/ai/llm/agentLoop/provider/piAgent/tool/catalog.ts index 7d08888a3ee2..5d7554f8f0b1 100644 --- a/packages/service/core/ai/llm/agentLoop/provider/piAgent/tool/catalog.ts +++ b/packages/service/core/ai/llm/agentLoop/provider/piAgent/tool/catalog.ts @@ -11,7 +11,8 @@ const getPiAgentSystemTools = ( ): ChatCompletionTool[] => [ ...(runtime.systemTools?.plan?.enabled ? createPlanAgentTools() : []), ...(runtime.systemTools?.ask?.enabled ? [createAskUserAgentTool()] : []), - ...(runtime.systemTools?.sandbox?.enabled && runtime.systemTools.sandbox.client + ...(runtime.systemTools?.sandbox?.enabled && + (runtime.systemTools.sandbox.client || runtime.systemTools.sandbox.executor) ? createAgentLoopSandboxTools() : []), ...(runtime.systemTools?.readFile?.enabled diff --git a/packages/service/core/workflow/dispatch/ai/agentLoopCore/application/runtime/systemTools.ts b/packages/service/core/workflow/dispatch/ai/agentLoopCore/application/runtime/systemTools.ts index a11879ff580e..06f4e0633562 100644 --- a/packages/service/core/workflow/dispatch/ai/agentLoopCore/application/runtime/systemTools.ts +++ b/packages/service/core/workflow/dispatch/ai/agentLoopCore/application/runtime/systemTools.ts @@ -1,4 +1,7 @@ -import type { AgentLoopSystemTools } from '../../../../../../ai/llm/agentLoop/interface'; +import type { + AgentLoopSandboxExecutor, + AgentLoopSystemTools +} from '../../../../../../ai/llm/agentLoop/interface'; import type { SandboxClient } from '../../../../../../ai/sandbox/interface/runtime'; import type { AgentLoopDatasetSearchExecutor } from '../../../../../../ai/llm/agentLoop/interface'; import type { AgentLoopReadFileExecutor } from '../../../../../../ai/llm/agentLoop/interface'; @@ -7,6 +10,7 @@ export type CreateAgentLoopCoreSystemToolsParams = { planEnabled: boolean; askEnabled: boolean; sandboxClient?: SandboxClient; + sandboxExecutor?: AgentLoopSandboxExecutor; readFile?: { enabled: boolean; maxFileAmount: number; @@ -29,6 +33,7 @@ export const createAgentLoopCoreSystemTools = ({ planEnabled, askEnabled, sandboxClient, + sandboxExecutor, readFile, datasetSearch }: CreateAgentLoopCoreSystemToolsParams): AgentLoopSystemTools => ({ @@ -38,11 +43,12 @@ export const createAgentLoopCoreSystemTools = ({ ask: { enabled: askEnabled }, - ...(sandboxClient + ...(sandboxClient || sandboxExecutor ? { sandbox: { enabled: true, - client: sandboxClient + ...(sandboxClient ? { client: sandboxClient } : {}), + ...(sandboxExecutor ? { executor: sandboxExecutor } : {}) } } : {}), diff --git a/packages/service/test/core/ai/llm/agentLoop/_mocks/llmQueue.ts b/packages/service/test/core/ai/llm/agentLoop/_mocks/llmQueue.ts index 6f8c67a1982a..dcc798e64485 100644 --- a/packages/service/test/core/ai/llm/agentLoop/_mocks/llmQueue.ts +++ b/packages/service/test/core/ai/llm/agentLoop/_mocks/llmQueue.ts @@ -36,14 +36,17 @@ export const toolCall = ({ id, name, args = {}, + content, reasoning }: { id?: string; name: string; args?: string | Record; + content?: string; reasoning?: string; }): LLMQueueItem => ({ requestId: `req_${id || name}`, + answerText: content, finishReason: 'tool_calls', reasoningText: reasoning || '', toolCalls: [ diff --git a/packages/service/test/core/ai/llm/agentLoop/fastAgentLoop.test.ts b/packages/service/test/core/ai/llm/agentLoop/fastAgentLoop.test.ts index d3559c75e725..e08f660543db 100644 --- a/packages/service/test/core/ai/llm/agentLoop/fastAgentLoop.test.ts +++ b/packages/service/test/core/ai/llm/agentLoop/fastAgentLoop.test.ts @@ -164,6 +164,113 @@ describe('runFastAgentMainLoop', () => { expect(mainAgentPrompt).toContain('你是一个 Work Agent'); }); + it('continues the same loop when completion policy rejects a natural completion', async () => { + mockCreateLLMResponseQueue(createLLMResponseMock, [ + text({ requestId: 'req_early', content: 'phase summary' }), + text({ requestId: 'req_terminal', content: 'terminal answer' }) + ]); + const completionPolicy = vi + .fn() + .mockResolvedValueOnce({ + action: 'continue', + message: 'Continue until terminal facts exist.' + }) + .mockResolvedValueOnce({ action: 'complete' }); + + const result = await runFastAgentMainLoop({ + runtime: createRuntime({ completionPolicy }), + input: { + messages: [{ role: ChatCompletionRequestMessageRoleEnum.User, content: 'build it' }] + } + }); + + expect(result.status).toBe('done'); + expect(createLLMResponseMock).toHaveBeenCalledTimes(2); + expect(completionPolicy).toHaveBeenNthCalledWith(1, { requestIndex: 1 }); + expect(completionPolicy).toHaveBeenNthCalledWith(2, { requestIndex: 2 }); + expect(createLLMResponseMock.mock.calls[1][0].body.messages).toContainEqual({ + role: ChatCompletionRequestMessageRoleEnum.System, + content: 'Continue until terminal facts exist.' + }); + }); + + it('returns an error when completion policy cannot reach terminal facts within the run budget', async () => { + mockCreateLLMResponseQueue(createLLMResponseMock, [ + text({ requestId: 'req_budget', content: 'still incomplete' }) + ]); + + const result = await runFastAgentMainLoop({ + runtime: createRuntime({ + maxRunAgentTimes: 1, + completionPolicy: () => ({ action: 'continue', message: 'Continue.' }) + }), + input: { + messages: [{ role: ChatCompletionRequestMessageRoleEnum.User, content: 'build it' }] + } + }); + + expect(result.status).toBe('error'); + expect(String(result.error)).toContain('Agent loop reached max run times: 1'); + expect(createLLMResponseMock).toHaveBeenCalledTimes(1); + }); + + it.each([ + { + name: 'no runtime-capable tools', + toolCatalog: { runtimeTools: [] }, + expectedConstraint: true + }, + { + name: 'sandbox tools only', + toolCatalog: { runtimeTools: [], sandboxTools: [tool('sandbox_shell')] }, + expectedConstraint: false + }, + { + name: 'read file tool only', + toolCatalog: { runtimeTools: [], readFileTool: tool('read_files') }, + expectedConstraint: false + }, + { + name: 'dataset search tool only', + toolCatalog: { runtimeTools: [], datasetSearchTool: tool('dataset_search') }, + expectedConstraint: false + } + ] satisfies Array<{ + name: string; + toolCatalog: AgentLoopRuntime['toolCatalog']; + expectedConstraint: boolean; + }>)( + 'sets the runtime tool constraint correctly with $name', + async ({ toolCatalog, expectedConstraint }) => { + mockCreateLLMResponseQueue(createLLMResponseMock, [ + text({ + requestId: 'req_runtime_tool_constraint', + content: 'direct answer' + }) + ]); + + await runFastAgentMainLoop({ + runtime: createRuntime({ + toolCatalog, + hasExecutableTools: !expectedConstraint, + systemPromptBuilder: ({ hasExecutableTools }) => + hasExecutableTools ? '' : 'Use a tool.' + }), + input: { + messages: [ + { + role: ChatCompletionRequestMessageRoleEnum.User, + content: 'hello' + } + ] + } + }); + + const mainAgentPrompt = createLLMResponseMock.mock.calls[0][0].body.messages[0].content; + expect(mainAgentPrompt.includes('')).toBe(expectedConstraint); + } + ); + it('creates an active plan through set_plan', async () => { const events: any[] = []; mockCreateLLMResponseQueue(createLLMResponseMock, [ @@ -612,6 +719,60 @@ describe('runFastAgentMainLoop', () => { expect(createLLMResponseMock).toHaveBeenCalledTimes(2); }); + it('returns an injected ask validation error to the model without pausing', async () => { + const validateAsk = vi.fn(() => 'Preview markdown is required.'); + mockCreateLLMResponseQueue(createLLMResponseMock, [ + toolCall({ + id: 'call_invalid_preview', + name: 'ask_user', + content: '```mermaid\nflowchart LR\n A --> B\n```', + args: { + reason: 'Need workflow confirmation', + blockerType: 'user_choice', + questions: [ + { + question: 'Confirm this workflow?', + options: [ + { summary: 'Confirm', value: 'Confirm the workflow.' }, + { summary: 'Revise', value: 'Revise the workflow.' } + ] + } + ] + } + }), + text({ + requestId: 'req_after_preview_validation', + content: 'Recovered after preview validation.' + }) + ]); + + const result = await runFastAgentMainLoop({ + runtime: createRuntime({ validateAsk }), + input: { + messages: [ + { + role: ChatCompletionRequestMessageRoleEnum.User, + content: 'Build a workflow' + } + ] + } + }); + + expect(result.status).toBe('done'); + expect(validateAsk).toHaveBeenCalledWith( + expect.objectContaining({ + questions: [expect.objectContaining({ question: 'Confirm this workflow?' })] + }), + { assistantContent: '```mermaid\nflowchart LR\n A --> B\n```' } + ); + expect(result.completeMessages).toContainEqual({ + role: 'tool', + tool_call_id: 'call_invalid_preview', + content: 'Preview markdown is required.' + }); + expect(getFinalAssistantText(result)).toBe('Recovered after preview validation.'); + }); + it('normalizes empty ask_agent resume answer to none in tool message', async () => { mockCreateLLMResponseQueue(createLLMResponseMock, [ text({ diff --git a/packages/service/test/core/ai/llm/agentLoop/fastAgentProvider.test.ts b/packages/service/test/core/ai/llm/agentLoop/fastAgentProvider.test.ts index be9a3c8e278d..b4e2ffed4667 100644 --- a/packages/service/test/core/ai/llm/agentLoop/fastAgentProvider.test.ts +++ b/packages/service/test/core/ai/llm/agentLoop/fastAgentProvider.test.ts @@ -241,12 +241,48 @@ describe('runFastAgentLoop', () => { const systemMessage = createLLMResponseMock.mock.calls[0][0].body.messages.find( (message: { role: string }) => message.role === ChatCompletionRequestMessageRoleEnum.System ); - expect(systemMessage.content).toContain( - '\nSandbox is available.\n' - ); + expect(systemMessage.content).toBe('Sandbox is available.'); expect(systemMessage.content).not.toContain(''); }); + it('uses the injected system prompt builder', async () => { + mockCreateLLMResponseQueue(createLLMResponseMock, [ + text({ + requestId: 'req_custom_prompt', + content: 'direct answer' + }) + ]); + const systemPromptBuilder = vi.fn( + ({ systemPrompt, hasExecutableTools }) => + `Workflow Builder\n${systemPrompt}\ntools=${hasExecutableTools}` + ); + + await runFastAgentLoop({ + input: { + messages: [ + { + role: ChatCompletionRequestMessageRoleEnum.User, + content: 'build workflow' + } + ], + systemPrompt: 'runtime context' + }, + runtime: createRuntime({ + systemPromptBuilder + }) + }); + + const systemMessage = createLLMResponseMock.mock.calls[0][0].body.messages.find( + (message: { role: string }) => message.role === ChatCompletionRequestMessageRoleEnum.System + ); + expect(systemPromptBuilder).toHaveBeenCalledWith({ + systemPrompt: 'runtime context', + hasExecutableTools: true + }); + expect(systemMessage.content).toBe('Workflow Builder\nruntime context\ntools=true'); + expect(systemMessage.content).not.toContain('你是 Work Agent'); + }); + it('initializes runtime plan from history without changing request messages', async () => { const activePlan = { planId: 'plan_resume', diff --git a/packages/service/test/core/ai/llm/agentLoop/mainPrompt.test.ts b/packages/service/test/core/ai/llm/agentLoop/mainPrompt.test.ts index 00e7f0443adc..6a5cf1329bb4 100644 --- a/packages/service/test/core/ai/llm/agentLoop/mainPrompt.test.ts +++ b/packages/service/test/core/ai/llm/agentLoop/mainPrompt.test.ts @@ -1,5 +1,8 @@ import { describe, expect, it } from 'vitest'; -import { buildDefaultAgentSystemPrompt } from '@fastgpt/service/core/ai/llm/agentLoop/interface'; +import { + buildDefaultAgentSystemPrompt, + resolveAgentLoopSystemPrompt +} from '@fastgpt/service/core/ai/llm/agentLoop/interface'; describe('buildDefaultAgentSystemPrompt', () => { it('uses the fixed prompt without capability-specific rules', () => { @@ -64,4 +67,25 @@ describe('buildDefaultAgentSystemPrompt', () => { '' ); }); + + it('uses an injected prompt builder without applying the default Work Agent prompt', () => { + const prompt = resolveAgentLoopSystemPrompt({ + systemPrompt: 'runtime context', + hasExecutableTools: true, + systemPromptBuilder: ({ systemPrompt, hasExecutableTools }) => + `Workflow Builder\n${systemPrompt}\ntools=${hasExecutableTools}` + }); + + expect(prompt).toBe('Workflow Builder\nruntime context\ntools=true'); + expect(prompt).not.toContain('你是一个 Work Agent'); + }); + + it('preserves the caller prompt when no builder is injected', () => { + expect( + resolveAgentLoopSystemPrompt({ + systemPrompt: 'prepared prompt', + hasExecutableTools: false + }) + ).toBe('prepared prompt'); + }); }); diff --git a/packages/service/test/core/ai/llm/agentLoop/piAgentProvider.test.ts b/packages/service/test/core/ai/llm/agentLoop/piAgentProvider.test.ts index 1f9947925aa4..3c475a169b88 100644 --- a/packages/service/test/core/ai/llm/agentLoop/piAgentProvider.test.ts +++ b/packages/service/test/core/ai/llm/agentLoop/piAgentProvider.test.ts @@ -1,6 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'; import type { LLMModelItemType } from '@fastgpt/global/core/ai/model.schema'; import { ModelTypeEnum } from '@fastgpt/global/core/ai/constants'; +import type { AgentLoopSystemTools } from '@fastgpt/service/core/ai/llm/agentLoop/domain'; const { agentPromptMock, @@ -37,6 +38,7 @@ const { name: string; callId: string; args: Record; + assistantContent?: string; } | undefined }, @@ -136,6 +138,17 @@ vi.mock('@mariozechner/pi-agent-core', () => ({ } if (agentToolToExecute.value) { const pendingTool = agentToolToExecute.value; + if (pendingTool.assistantContent) { + subscribers.forEach((subscriber) => { + subscriber({ + type: 'message_update', + assistantMessageEvent: { + type: 'text_delta', + delta: pendingTool.assistantContent + } + }); + }); + } subscribers.forEach((subscriber) => { subscriber({ type: 'message_update', @@ -179,6 +192,9 @@ vi.mock('@mariozechner/pi-agent-core', () => ({ message: { role: 'assistant', content: [ + ...(pendingTool.assistantContent + ? [{ type: 'text', text: pendingTool.assistantContent }] + : []), { type: 'toolCall', id: pendingTool.callId, @@ -358,6 +374,107 @@ describe('runPiAgentLoop', () => { ]); }); + it('continues the same pi agent when completion policy rejects a natural completion', async () => { + const completionPolicy = vi + .fn() + .mockResolvedValueOnce({ + action: 'continue', + message: 'Continue until terminal facts exist.' + }) + .mockResolvedValueOnce({ action: 'complete' }); + + const result = await runPiAgentLoop({ + input: { messages: [{ role: 'user', content: 'build it' }] }, + runtime: { + teamId: 'team_1', + llmParams: { model: 'gpt-5' }, + completionPolicy, + toolCatalog: { runtimeTools: [] }, + executeTool: vi.fn(), + checkIsStopping: vi.fn(() => false) + } + }); + + expect(result.status).toBe('done'); + expect(agentPromptMock).toHaveBeenNthCalledWith(1, 'build it'); + expect(agentPromptMock).toHaveBeenNthCalledWith(2, 'Continue until terminal facts exist.'); + expect(completionPolicy).toHaveBeenNthCalledWith(1, { requestIndex: 1 }); + expect(completionPolicy).toHaveBeenNthCalledWith(2, { requestIndex: 2 }); + expect(result.completeMessages).toContainEqual({ + role: 'user', + content: 'Continue until terminal facts exist.' + }); + }); + + it.each([ + { + name: 'no runtime-capable tools', + systemTools: undefined, + expectedConstraint: true + }, + { + name: 'sandbox tools only', + systemTools: { + sandbox: { + enabled: true, + client: {} as any + } + }, + expectedConstraint: false + }, + { + name: 'read file tool only', + systemTools: { + readFile: { + enabled: true, + maxFileAmount: 20, + execute: vi.fn() + } + }, + expectedConstraint: false + }, + { + name: 'dataset search tool only', + systemTools: { + datasetSearch: { + enabled: true, + execute: vi.fn() + } + }, + expectedConstraint: false + } + ] satisfies Array<{ + name: string; + systemTools?: AgentLoopSystemTools; + expectedConstraint: boolean; + }>)( + 'sets the runtime tool constraint correctly with $name', + async ({ systemTools, expectedConstraint }) => { + await runPiAgentLoop({ + input: { + messages: [{ role: 'user', content: 'hello' }] + }, + runtime: { + llmParams: { + model: 'gpt-5' + }, + systemTools, + systemPromptBuilder: ({ hasExecutableTools }) => + hasExecutableTools ? '' : 'Use a tool.', + toolCatalog: { + runtimeTools: [] + }, + executeTool: vi.fn(), + checkIsStopping: vi.fn(() => false) + } + }); + + expect( + agentConstructorArgs.at(-1).initialState.systemPrompt.includes('') + ).toBe(expectedConstraint); + } + ); + it('preserves multimodal content in the current user prompt', async () => { await runPiAgentLoop({ input: { @@ -493,6 +610,40 @@ describe('runPiAgentLoop', () => { }); }); + it('uses the injected system prompt builder', async () => { + const systemPromptBuilder = vi.fn( + ({ systemPrompt, hasExecutableTools }) => + `Workflow Builder\n${systemPrompt}\ntools=${hasExecutableTools}` + ); + + await runPiAgentLoop({ + input: { + messages: [{ role: 'user', content: 'build workflow' }], + systemPrompt: 'runtime context' + }, + runtime: { + llmParams: { + model: 'gpt-5', + stream: true + }, + systemPromptBuilder, + toolCatalog: { + runtimeTools: [] + }, + executeTool: vi.fn() + } + }); + + expect(systemPromptBuilder).toHaveBeenCalledWith({ + systemPrompt: 'runtime context', + hasExecutableTools: false + }); + expect(agentConstructorArgs[0].initialState.systemPrompt).toBe( + 'Workflow Builder\nruntime context\ntools=false' + ); + expect(agentConstructorArgs[0].initialState.systemPrompt).not.toContain('你是 Work Agent'); + }); + it('reuses the compressed transcript for later requests in the same pi run', async () => { const events: any[] = []; agentRunTransformContext.value = true; @@ -568,6 +719,25 @@ describe('runPiAgentLoop', () => { expect(events.filter((event) => event.type === 'llm_request_end')).toHaveLength(1); }); + it('returns an error when completion policy cannot reach terminal facts within the run budget', async () => { + const result = await runPiAgentLoop({ + input: { messages: [{ role: 'user', content: 'build it' }] }, + runtime: { + teamId: 'team_1', + llmParams: { model: 'gpt-5' }, + maxRunAgentTimes: 1, + completionPolicy: () => ({ action: 'continue', message: 'Continue.' }), + toolCatalog: { runtimeTools: [] }, + executeTool: vi.fn(), + checkIsStopping: vi.fn(() => false) + } + }); + + expect(result.status).toBe('error'); + expect(String(result.error)).toContain('Agent loop reached max run times: 1'); + expect(agentPromptMock).toHaveBeenCalledTimes(1); + }); + it('closes a started LLM request when pi-agent-core ends before message_end', async () => { const events: any[] = []; agentFailAfterPayload.value = 'network unavailable'; @@ -671,9 +841,7 @@ describe('runPiAgentLoop', () => { } }); - expect(agentConstructorArgs.at(-1).initialState.systemPrompt).toContain( - '\nSandbox is available.\n' - ); + expect(agentConstructorArgs.at(-1).initialState.systemPrompt).toBe('Sandbox is available.'); expect(agentConstructorArgs.at(-1).initialState.systemPrompt).not.toContain( '' ); @@ -1491,6 +1659,55 @@ describe('runPiAgentLoop', () => { ); }); + it('returns an injected ask validation error without creating a pause', async () => { + const validate = vi.fn(() => 'Preview markdown is required.'); + agentToolToExecute.value = { + name: 'ask_user', + callId: 'call_invalid_preview', + args: { + reason: '需要确认流程拓扑', + blockerType: 'user_choice', + questions: [ + { + question: '请确认工作流', + options: [ + { summary: '确认', value: '确认当前工作流。' }, + { summary: '修改', value: '修改当前工作流。' } + ] + } + ] + }, + assistantContent: '```mermaid\nflowchart LR\n A --> B\n```' + }; + + const result = await runPiAgentLoop({ + input: { + messages: [{ role: 'user', content: '搭建工作流' }] + }, + runtime: { + llmParams: { model: 'gpt-5' }, + toolCatalog: { runtimeTools: [] }, + systemTools: { ask: { enabled: true, validate } }, + executeTool: vi.fn(), + checkIsStopping: vi.fn(() => false) + } + }); + + expect(result.status).toBe('done'); + expect(validate).toHaveBeenCalledWith( + expect.objectContaining({ + questions: [expect.objectContaining({ question: '请确认工作流' })] + }), + { assistantContent: '```mermaid\nflowchart LR\n A --> B\n```' } + ); + expect(result.providerState).not.toHaveProperty('pendingMainContext'); + expect(result.completeMessages).toContainEqual({ + role: 'tool', + tool_call_id: 'call_invalid_preview', + content: 'Preview markdown is required.' + }); + }); + it('stores ask pause as standard pending context without pi messages', async () => { agentToolToExecute.value = { name: 'ask_user', diff --git a/packages/web/components/common/Image/PhotoView.tsx b/packages/web/components/common/Image/PhotoView.tsx index 0fa53b53e7f0..88e8a65d430b 100644 --- a/packages/web/components/common/Image/PhotoView.tsx +++ b/packages/web/components/common/Image/PhotoView.tsx @@ -6,11 +6,17 @@ import { useSystem } from '../../../hooks/useSystem'; import Loading from '../MyLoading'; import MyImage from './MyImage'; +type PhotoSliderImage = React.ComponentProps['images'][number]; + type MyPhotoSliderProps = { src?: string; visible: boolean; onClose: () => void; imageKey?: string; + initialScale?: number; + render?: PhotoSliderImage['render']; + width?: number; + height?: number; }; const MyPhotoView = (props: ImageProps) => { @@ -30,18 +36,62 @@ const MyPhotoView = (props: ImageProps) => { ); }; -export const MyPhotoSlider = ({ src, visible, onClose, imageKey }: MyPhotoSliderProps) => { +export const MyPhotoSlider = ({ + src, + visible, + onClose, + imageKey, + initialScale = 1, + render, + width, + height +}: MyPhotoSliderProps) => { const { isPc } = useSystem(); + const scaleKey = `${imageKey || src || 'custom-render'}:${initialScale}`; + const appliedScaleKey = React.useRef(); + const images = (() => { + if (!src && !render) return []; + + return [ + { + key: imageKey || src || 'custom-render', + src, + render, + width, + height + } + ]; + })(); + + React.useEffect(() => { + if (!visible) { + appliedScaleKey.current = undefined; + } + }, [visible, scaleKey]); return ( } + // react-photo-view 默认会把整图适配到视口,Mermaid 预览需要恢复调用方的原始刻度。 + overlayRender={ + initialScale > 1 + ? ({ onScale }) => { + if (appliedScaleKey.current !== scaleKey) { + appliedScaleKey.current = scaleKey; + window.requestAnimationFrame(() => { + if (visible) onScale(initialScale); + }); + } + return null; + } + : undefined + } /> ); }; diff --git a/packages/web/i18n/en/common.json b/packages/web/i18n/en/common.json index 0d00082de252..c96c4bb3dce4 100644 --- a/packages/web/i18n/en/common.json +++ b/packages/web/i18n/en/common.json @@ -47,7 +47,7 @@ "Finish": "Finish", "Folder": "Folder", "FullScreen": "FullScreen", - "FullScreenLight": "FullScreenLight", + "FullScreenLight": "Full-screen preview", "Import": "Import", "Input": "Input", "Instructions": "Instruction", diff --git a/packages/web/i18n/en/workflow.json b/packages/web/i18n/en/workflow.json index 7ea3a528ad26..63cf8ff397d0 100644 --- a/packages/web/i18n/en/workflow.json +++ b/packages/web/i18n/en/workflow.json @@ -35,6 +35,20 @@ "cli.input.system_prompt": "Instructions that define the assistant's role and response rules", "cli.input.text_editor": "Static text or text assembled from upstream variables", "cli.input.user_question": "User question supplied by the workflow start node", + "cli.config.auto_execute": "Configure this when the app should run automatically as soon as a conversation opens; set both the switch and the default prompt.", + "cli.config.auto_execute_open": "Enable this only when opening a conversation should immediately run the workflow without waiting for user input.", + "cli.config.auto_execute_prompt": "Set the user question injected when automatic execution starts; configure it before enabling automatic execution.", + "cli.config.chat_input_guide": "Configure this when the chat input should use a custom guide page instead of the standard input experience.", + "cli.config.file_select": "Enable this before building a workflow that consumes files supplied by the user at the chat entry. Select the matching file types; enabling it adds the userFiles output to the workflow start node.", + "cli.config.instruction": "Configure this when users need persistent usage instructions on the application conversation page.", + "cli.config.question_guide": "Configure this when the application should generate follow-up question suggestions after a reply; enable it and bind an available model.", + "cli.config.question_guide_model": "Bind the available model used to generate follow-up question suggestions before enabling the question guide.", + "cli.config.question_guide_open": "Enable this when users should receive generated follow-up question suggestions after application replies.", + "cli.config.question_guide_prompt": "Set additional instructions only when generated follow-up question suggestions need application-specific guidance.", + "cli.config.scheduled_trigger": "Configure this when the workflow must run on a schedule; provide the cron expression, timezone, and injected default prompt together.", + "cli.config.tts": "Configure this when users need application replies to be read aloud by the browser or a speech model.", + "cli.config.welcome_text": "Configure this when a new conversation should begin with predefined guidance, examples, or quick actions.", + "cli.config.whisper": "Configure this when users should be able to submit questions through speech recognition.", "code.Reset template": "Reset Template", "code.Reset template confirm": "Confirm reset code template? This will reset all inputs and outputs to template values. Please save your current code.", "code.Switch language confirm": "Switching the language will reset the code, will it continue?", @@ -284,6 +298,7 @@ "workflow_builder_clear_history": "Clear history", "workflow_builder_clear_history_confirm": "Clear this Workflow Builder conversation? The workflow canvas and model selection will not be changed.", "workflow_builder_apply_failed": "The generated workflow could not be applied", + "workflow_builder_canvas_changed": "The canvas changed while the workflow was being built. Please run the builder again.", "workflow_builder_applied": "Applied to the current canvas", "connection_invalid": "This connection violates workflow rules" } diff --git a/packages/web/i18n/zh-CN/workflow.json b/packages/web/i18n/zh-CN/workflow.json index a0e7da120d91..b97bc8a97235 100644 --- a/packages/web/i18n/zh-CN/workflow.json +++ b/packages/web/i18n/zh-CN/workflow.json @@ -35,6 +35,20 @@ "cli.input.system_prompt": "定义助手角色和回答规则的指令", "cli.input.text_editor": "静态文本或由上游变量拼接的文本", "cli.input.user_question": "由工作流开始节点提供的用户问题", + "cli.config.auto_execute": "当应用需要在用户进入会话后立即自动运行时配置;应同时设置开启状态和默认问题。", + "cli.config.auto_execute_open": "仅当进入会话后应立即运行工作流、无需等待用户输入时开启。", + "cli.config.auto_execute_prompt": "设置自动执行时注入的用户问题;开启自动执行前必须先配置。", + "cli.config.chat_input_guide": "当对话输入需要使用自定义引导页面而不是标准输入体验时配置。", + "cli.config.file_select": "当工作流需要消费用户从对话入口提供的文件时,必须在搭建文件处理节点前开启,并选择匹配的文件类型;开启后会为工作流开始节点增加 userFiles 输出。", + "cli.config.instruction": "当用户需要在应用对话页持续查看使用说明时配置。", + "cli.config.question_guide": "当应用回复后需要生成后续问题建议时配置;应开启功能并绑定可用模型。", + "cli.config.question_guide_model": "绑定用于生成后续问题建议的可用模型;开启问题引导前必须完成配置。", + "cli.config.question_guide_open": "当用户应在应用回复后看到生成的后续问题建议时开启。", + "cli.config.question_guide_prompt": "仅当后续问题建议需要应用特定的生成规则时设置补充提示词。", + "cli.config.scheduled_trigger": "当工作流需要定时运行时配置;应同时提供 Cron 表达式、时区和注入的默认问题。", + "cli.config.tts": "当用户需要通过浏览器或语音模型播报应用回复时配置。", + "cli.config.welcome_text": "当新会话需要展示预设引导、示例或快捷操作时配置。", + "cli.config.whisper": "当用户需要通过语音识别提交问题时配置。", "code.Reset template": "还原模板", "code.Reset template confirm": "确认还原代码模板?将会重置所有输入和输出至模板值,请注意保存当前代码。", "code.Switch language confirm": "切换语言将重置代码,是否继续?", @@ -284,6 +298,7 @@ "workflow_builder_clear_history": "清除历史记录", "workflow_builder_clear_history_confirm": "确认清除当前 Workflow Builder 对话?工作流画布和模型选择不会受到影响。", "workflow_builder_apply_failed": "无法应用生成的工作流", + "workflow_builder_canvas_changed": "工作流搭建期间画布发生了变化,请重新运行 Workflow Builder。", "workflow_builder_applied": "已应用到当前画布", "connection_invalid": "该连接不符合工作流规则" } diff --git a/packages/web/i18n/zh-Hant/workflow.json b/packages/web/i18n/zh-Hant/workflow.json index a8940fdd1154..eec24c0dc9ac 100644 --- a/packages/web/i18n/zh-Hant/workflow.json +++ b/packages/web/i18n/zh-Hant/workflow.json @@ -35,6 +35,20 @@ "cli.input.system_prompt": "定義助手角色和回答規則的指令", "cli.input.text_editor": "靜態文字或由上游變數組合的文字", "cli.input.user_question": "由工作流程開始節點提供的使用者問題", + "cli.config.auto_execute": "當應用程式需要在使用者進入對話後立即自動執行時設定;應同時設定開啟狀態和預設問題。", + "cli.config.auto_execute_open": "僅當進入對話後應立即執行工作流程、無需等待使用者輸入時開啟。", + "cli.config.auto_execute_prompt": "設定自動執行時注入的使用者問題;開啟自動執行前必須先設定。", + "cli.config.chat_input_guide": "當對話輸入需要使用自訂引導頁面而不是標準輸入體驗時設定。", + "cli.config.file_select": "當工作流程需要使用者從對話入口提供檔案時,必須在建立檔案處理節點前開啟,並選擇相符的檔案類型;開啟後會為工作流程開始節點增加 userFiles 輸出。", + "cli.config.instruction": "當使用者需要在應用程式對話頁持續查看使用說明時設定。", + "cli.config.question_guide": "當應用程式回覆後需要產生後續問題建議時設定;應開啟功能並綁定可用模型。", + "cli.config.question_guide_model": "綁定用於產生後續問題建議的可用模型;開啟問題引導前必須完成設定。", + "cli.config.question_guide_open": "當使用者應在應用程式回覆後看到產生的後續問題建議時開啟。", + "cli.config.question_guide_prompt": "僅當後續問題建議需要應用程式特定的產生規則時設定補充提示詞。", + "cli.config.scheduled_trigger": "當工作流程需要定時執行時設定;應同時提供 Cron 表達式、時區和注入的預設問題。", + "cli.config.tts": "當使用者需要透過瀏覽器或語音模型播報應用程式回覆時設定。", + "cli.config.welcome_text": "當新對話需要顯示預設引導、範例或快捷操作時設定。", + "cli.config.whisper": "當使用者需要透過語音識別提交問題時設定。", "code.Reset template": "重設範本", "code.Reset template confirm": "確定要重設程式碼範本嗎?這將會把所有輸入和輸出重設為範本值。請儲存您目前的程式碼。", "code.Switch language confirm": "切換語言將重設代碼,是否繼續?", @@ -284,6 +298,7 @@ "workflow_builder_clear_history": "清除歷史記錄", "workflow_builder_clear_history_confirm": "確認清除目前的 Workflow Builder 對話?工作流程畫布和模型選擇不會受到影響。", "workflow_builder_apply_failed": "無法套用產生的工作流程", + "workflow_builder_canvas_changed": "工作流程建立期間畫布發生了變更,請重新執行 Workflow Builder。", "workflow_builder_applied": "已套用到目前畫布", "connection_invalid": "此連線不符合工作流程規則" } diff --git a/packages/workflow-cli/src/commands/config.ts b/packages/workflow-cli/src/commands/config.ts index 656d484e854f..ded3fb8d18dd 100644 --- a/packages/workflow-cli/src/commands/config.ts +++ b/packages/workflow-cli/src/commands/config.ts @@ -1,4 +1,5 @@ -import { CHAT_CONFIG_PATHS, getChatConfigValue } from '@fastgpt/workflow-core'; +import { getChatConfigDescriptor, listChatConfigDescriptors } from '@fastgpt/workflow-core'; +import { createTranslator } from '../i18n'; import { readWorkflowFile } from '../io/workflowFile'; import type { CliContext, CliResult } from '../type'; import { readInputValue, requireString, runMutation } from './helpers'; @@ -10,7 +11,10 @@ export const listConfig = async ( const document = await readWorkflowFile(context.dir); return { changed: false, - result: CHAT_CONFIG_PATHS.map((path) => ({ path, value: getChatConfigValue(document, path) })) + result: listChatConfigDescriptors({ + document, + translate: createTranslator(context.locale) + }) }; }; @@ -21,7 +25,11 @@ export const getConfig = async ( const path = requireString(input, 'path'); return { changed: false, - result: { path, value: getChatConfigValue(await readWorkflowFile(context.dir), path) } + result: getChatConfigDescriptor({ + document: await readWorkflowFile(context.dir), + path, + translate: createTranslator(context.locale) + }) }; }; diff --git a/packages/workflow-cli/test/e2e.test.ts b/packages/workflow-cli/test/e2e.test.ts index d72b32759730..dd535d0f478a 100644 --- a/packages/workflow-cli/test/e2e.test.ts +++ b/packages/workflow-cli/test/e2e.test.ts @@ -1137,6 +1137,25 @@ describe('PR1 through PR4 CLI end to end', () => { ) ).exitCode ).toBe(0); + const fileSelectDescriptor = JSON.parse( + ( + await invoke( + jsonArgs(dir, ['config', 'get', '--path', 'fileSelectConfig', '--locale', 'zh-CN']) + ) + ).stdout[0] + ).result; + expect(fileSelectDescriptor).toMatchObject({ + path: 'fileSelectConfig', + description: expect.stringContaining('用户从对话入口提供的文件'), + capabilities: ['user-file-input'], + value: { maxFiles: 1, canSelectFile: true }, + valueSchema: { + type: 'object', + properties: { + canSelectFile: expect.objectContaining({ type: 'boolean' }) + } + } + }); expect( ( await invoke( diff --git a/packages/workflow-core/src/command/mergeChangeSet.ts b/packages/workflow-core/src/command/mergeChangeSet.ts new file mode 100644 index 000000000000..84c1dee49af0 --- /dev/null +++ b/packages/workflow-core/src/command/mergeChangeSet.ts @@ -0,0 +1,210 @@ +import { + WorkflowChangeSetChunkSchema, + WorkflowChangeSetSchema, + type WorkflowChangeSet, + type WorkflowChangeSetChunk, + type WorkflowCommand +} from './type'; + +export class WorkflowChangeSetMergeError extends Error { + readonly code: string; + readonly params?: Record; + + constructor(code: string, message: string, params?: Record) { + super(message); + this.name = 'WorkflowChangeSetMergeError'; + this.code = code; + this.params = params; + } +} + +const stableJson = (value: unknown) => JSON.stringify(value); + +export const getWorkflowCommandTarget = (command: WorkflowCommand): string | undefined => { + switch (command.type) { + case 'node.add': + case 'node.update': + case 'node.move': + case 'node.insert': + case 'node.remove': + return `node:${command.nodeId}`; + case 'node.clone': + return `node:${command.nodeId}`; + case 'input.set': + case 'input.ref': + case 'input.unset': + return `input:${command.nodeId}:${command.inputKey}`; + case 'input.add': + return `input:${command.nodeId}:${command.input.key}`; + case 'input.remove': + return `input:${command.nodeId}:${command.inputKey}`; + case 'output.add': + return `output:${command.nodeId}:${command.output.key}`; + case 'output.remove': + return `output:${command.nodeId}:${command.outputKey}`; + case 'tool.attach': + return `tool:${command.toolCallNodeId}:${command.toolNodeId ?? command.newNodeId ?? ''}`; + case 'tool.detach': + return `tool:${command.toolCallNodeId}:${command.toolNodeId}`; + case 'config.set': + case 'config.unset': + return `config:${command.path}`; + case 'variable.add': + return `variable:${command.variable.key}`; + case 'variable.update': + case 'variable.remove': + return `variable:${command.key}`; + case 'edge.connect': + case 'edge.disconnect': + return `edge:${stableJson(command.edge)}`; + case 'edge.reconnect': + return `edge:${stableJson(command.oldEdge)}`; + case 'meta.update': + return 'meta'; + } +}; + +const mergePatchCommand = ( + left: WorkflowCommand, + right: WorkflowCommand +): WorkflowCommand | undefined => { + if (left.type !== right.type) return; + if (left.type === 'node.update' && right.type === 'node.update') { + const leftFields = Object.keys(left).filter((key) => key !== 'type' && key !== 'nodeId'); + const rightFields = Object.keys(right).filter((key) => key !== 'type' && key !== 'nodeId'); + if (rightFields.some((key) => leftFields.includes(key))) return; + return { ...left, ...right }; + } + if (left.type === 'meta.update' && right.type === 'meta.update') { + const leftFields = Object.keys(left).filter((key) => key !== 'type'); + const rightFields = Object.keys(right).filter((key) => key !== 'type'); + if (rightFields.some((key) => leftFields.includes(key))) return; + return { ...left, ...right }; + } + if (left.type === 'variable.update' && right.type === 'variable.update') { + const leftFields = Object.keys(left.patch); + const rightFields = Object.keys(right.patch); + if (rightFields.some((key) => leftFields.includes(key))) return; + return { ...left, patch: { ...left.patch, ...right.patch } }; + } + return; +}; + +const sortChunks = (chunks: WorkflowChangeSetChunk[]) => { + const byId = new Map(chunks.map((chunk) => [chunk.chunkId, chunk])); + const state = new Map(); + const sorted: WorkflowChangeSetChunk[] = []; + const visit = (chunk: WorkflowChangeSetChunk) => { + const currentState = state.get(chunk.chunkId); + if (currentState === 'visited') return; + if (currentState === 'visiting') { + throw new WorkflowChangeSetMergeError( + 'WORKFLOW_CHANGESET_CHUNK_DEPENDENCY_CYCLE', + `Chunk dependency cycle includes ${chunk.chunkId}` + ); + } + state.set(chunk.chunkId, 'visiting'); + for (const dependencyId of chunk.dependsOn) { + const dependency = byId.get(dependencyId); + if (!dependency) { + throw new WorkflowChangeSetMergeError( + 'WORKFLOW_CHANGESET_CHUNK_DEPENDENCY_MISSING', + `Chunk ${chunk.chunkId} depends on missing chunk ${dependencyId}` + ); + } + visit(dependency); + } + state.set(chunk.chunkId, 'visited'); + sorted.push(chunk); + }; + chunks.forEach(visit); + return sorted; +}; + +/** + * 按依赖关系合并分片,并拒绝会让结果依赖到达顺序的冲突命令。 + * 该函数只产生完整 ChangeSet,不执行任何工作流写入。 + */ +export const mergeWorkflowChangeSetChunks = ({ + baseChecksum, + chunks +}: { + baseChecksum: string; + chunks: WorkflowChangeSetChunk[]; +}): WorkflowChangeSet => { + if (chunks.length === 0) { + throw new WorkflowChangeSetMergeError( + 'WORKFLOW_CHANGESET_CHUNKS_EMPTY', + 'At least one ChangeSet chunk is required' + ); + } + const parsedChunks = chunks.map((chunk) => WorkflowChangeSetChunkSchema.parse(chunk)); + const sortedChunks = sortChunks(parsedChunks); + const commands: WorkflowCommand[] = []; + const commandIndexes = new Map(); + const commandContributors = new Map< + string, + { + command: WorkflowCommand; + origin: { + chunkId: string; + commandIndex: number; + commandType: WorkflowCommand['type']; + }; + }[] + >(); + + for (const chunk of sortedChunks) { + for (const [commandIndex, command] of chunk.commands.entries()) { + const target = getWorkflowCommandTarget(command); + const identity = target ?? stableJson(command); + const incomingOrigin = { + chunkId: chunk.chunkId, + commandIndex, + commandType: command.type + }; + const existingIndex = commandIndexes.get(identity); + if (existingIndex === undefined) { + commandIndexes.set(identity, commands.length); + commandContributors.set(identity, [{ command, origin: incomingOrigin }]); + commands.push(command); + continue; + } + const existing = commands[existingIndex]; + const contributors = commandContributors.get(identity) ?? []; + if ( + stableJson(existing) === stableJson(command) || + contributors.some((contributor) => stableJson(contributor.command) === stableJson(command)) + ) { + continue; + } + const merged = mergePatchCommand(existing, command); + if (merged) { + commands[existingIndex] = merged; + contributors.push({ command, origin: incomingOrigin }); + continue; + } + const conflictingContributor = + contributors.find( + (contributor) => + contributor.command.type !== command.type || + mergePatchCommand(contributor.command, command) === undefined + ) ?? contributors[0]; + throw new WorkflowChangeSetMergeError( + 'WORKFLOW_CHANGESET_COMMAND_CONFLICT', + `Conflicting commands target ${target ?? identity}`, + { + target: target ?? identity, + existing: conflictingContributor?.origin, + incoming: incomingOrigin + } + ); + } + } + + return WorkflowChangeSetSchema.parse({ + schemaVersion: 'fastgpt-workflow-changeset/v1', + baseChecksum, + commands + }); +}; diff --git a/packages/workflow-core/src/command/type.ts b/packages/workflow-core/src/command/type.ts index 0bc7aede29fe..345ada017a8b 100644 --- a/packages/workflow-core/src/command/type.ts +++ b/packages/workflow-core/src/command/type.ts @@ -232,6 +232,7 @@ export const WorkflowChangeSummarySchema = z.object({ export type WorkflowChangeSummary = z.infer; export const WORKFLOW_CHANGESET_SCHEMA_VERSION = 'fastgpt-workflow-changeset/v1' as const; +export const WORKFLOW_CHANGESET_CHUNK_SCHEMA_VERSION = 'fastgpt-workflow-chunk/v1' as const; export const WORKFLOW_PLAN_SCHEMA_VERSION = 'fastgpt-workflow-plan/v1' as const; const WorkflowChecksumSchema = z.string().regex(/^sha256:[a-f0-9]{64}$/); @@ -246,6 +247,21 @@ export const WorkflowChangeSetSchema = z export type WorkflowChangeSet = z.infer; +/** + * Agent 分片提交的最小单元。分片不携带 baseChecksum,版本和基准由服务端事务会话持有, + * 避免模型在多个分片之间自行维护容易失真的工作流版本信息。 + */ +export const WorkflowChangeSetChunkSchema = z + .object({ + schemaVersion: z.literal(WORKFLOW_CHANGESET_CHUNK_SCHEMA_VERSION), + chunkId: z.string().min(1).max(128), + dependsOn: z.array(z.string().min(1).max(128)).max(128).default([]), + commands: z.array(WorkflowCommandSchema).min(1).max(100) + }) + .strict(); + +export type WorkflowChangeSetChunk = z.infer; + export const WorkflowPlanSchema = z .object({ schemaVersion: z.literal(WORKFLOW_PLAN_SCHEMA_VERSION), diff --git a/packages/workflow-core/src/config/automationMeta.ts b/packages/workflow-core/src/config/automationMeta.ts new file mode 100644 index 000000000000..cacadd9d9232 --- /dev/null +++ b/packages/workflow-core/src/config/automationMeta.ts @@ -0,0 +1,61 @@ +import type { ChatConfigPath, ConfigAutomationMeta } from './type'; + +/** 为系统配置补充 Agent 决策语义;字段结构和基础说明仍由 ChatConfig Schema 提供。 */ +export const configAutomationMetaMap = { + welcomeText: { + agentHint: 'workflow:cli.config.welcome_text', + capabilities: ['conversation-welcome'] + }, + autoExecute: { + agentHint: 'workflow:cli.config.auto_execute', + capabilities: ['automatic-conversation-start'] + }, + 'autoExecute.open': { + agentHint: 'workflow:cli.config.auto_execute_open', + capabilities: ['automatic-conversation-start'] + }, + 'autoExecute.defaultPrompt': { + agentHint: 'workflow:cli.config.auto_execute_prompt', + capabilities: ['automatic-conversation-start'] + }, + questionGuide: { + agentHint: 'workflow:cli.config.question_guide', + capabilities: ['follow-up-question-suggestions'] + }, + 'questionGuide.open': { + agentHint: 'workflow:cli.config.question_guide_open', + capabilities: ['follow-up-question-suggestions'] + }, + 'questionGuide.model': { + agentHint: 'workflow:cli.config.question_guide_model', + capabilities: ['follow-up-question-suggestions'] + }, + 'questionGuide.customPrompt': { + agentHint: 'workflow:cli.config.question_guide_prompt', + capabilities: ['follow-up-question-suggestions'] + }, + ttsConfig: { + agentHint: 'workflow:cli.config.tts', + capabilities: ['text-to-speech'] + }, + whisperConfig: { + agentHint: 'workflow:cli.config.whisper', + capabilities: ['speech-to-text'] + }, + scheduledTriggerConfig: { + agentHint: 'workflow:cli.config.scheduled_trigger', + capabilities: ['scheduled-execution'] + }, + chatInputGuide: { + agentHint: 'workflow:cli.config.chat_input_guide', + capabilities: ['custom-chat-input'] + }, + fileSelectConfig: { + agentHint: 'workflow:cli.config.file_select', + capabilities: ['user-file-input'] + }, + instruction: { + agentHint: 'workflow:cli.config.instruction', + capabilities: ['conversation-instructions'] + } +} satisfies Record; diff --git a/packages/workflow-core/src/config/descriptor.ts b/packages/workflow-core/src/config/descriptor.ts new file mode 100644 index 000000000000..2979feeaafa2 --- /dev/null +++ b/packages/workflow-core/src/config/descriptor.ts @@ -0,0 +1,66 @@ +import { AppChatConfigTypeSchema } from '@fastgpt/global/core/app/type'; +import z from 'zod'; +import type { WorkflowDocument } from '../domain/document'; +import { configAutomationMetaMap } from './automationMeta'; +import { getChatConfigValue } from './service'; +import { CHAT_CONFIG_PATHS, type ChatConfigPath, type ConfigDescriptor } from './type'; + +const chatConfigValueSchema = z.toJSONSchema(AppChatConfigTypeSchema, { + io: 'input', + reused: 'inline', + unrepresentable: 'any' +}) as Record; + +const isRecord = (value: unknown): value is Record => + value !== null && typeof value === 'object' && !Array.isArray(value); + +const getConfigValueSchema = (path: ChatConfigPath): Record => { + const schema = path.split('.').reduce((current, key) => { + if (!isRecord(current)) return undefined; + const properties = current.properties; + if (!isRecord(properties)) return undefined; + return properties[key]; + }, chatConfigValueSchema); + + return isRecord(schema) ? structuredClone(schema) : {}; +}; + +/** 将 ChatConfig Schema 与 Agent automation metadata 归一化为 CLI 可查询的配置契约。 */ +export const getChatConfigDescriptor = ({ + document, + path, + translate = (value) => value +}: { + document: WorkflowDocument; + path: string; + translate?: (value: string) => string; +}): ConfigDescriptor => { + const value = getChatConfigValue(document, path); + const configPath = path as ChatConfigPath; + const valueSchema = getConfigValueSchema(configPath); + const automationMeta = configAutomationMetaMap[configPath]; + const schemaDescription = valueSchema.description; + + return { + path: configPath, + description: translate( + automationMeta.agentHint ?? + (typeof schemaDescription === 'string' && schemaDescription.trim().length > 0 + ? schemaDescription + : configPath) + ), + valueSchema, + capabilities: automationMeta.capabilities ?? [], + value + }; +}; + +/** 返回全部允许修改的系统配置及其当前值和 Agent 可读契约。 */ +export const listChatConfigDescriptors = ({ + document, + translate +}: { + document: WorkflowDocument; + translate?: (value: string) => string; +}): ConfigDescriptor[] => + CHAT_CONFIG_PATHS.map((path) => getChatConfigDescriptor({ document, path, translate })); diff --git a/packages/workflow-core/src/config/service.ts b/packages/workflow-core/src/config/service.ts index 41a0b719382b..add10c4570f1 100644 --- a/packages/workflow-core/src/config/service.ts +++ b/packages/workflow-core/src/config/service.ts @@ -10,23 +10,9 @@ import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; import { userFilesInput } from '@fastgpt/global/core/workflow/template/system/workflowStart'; import type { WorkflowDocument } from '../domain/document'; import { WorkflowCommandError } from '../domain/diagnostic'; +import { CHAT_CONFIG_PATHS } from './type'; -export const CHAT_CONFIG_PATHS = [ - 'welcomeText', - 'autoExecute', - 'autoExecute.open', - 'autoExecute.defaultPrompt', - 'questionGuide', - 'questionGuide.open', - 'questionGuide.model', - 'questionGuide.customPrompt', - 'ttsConfig', - 'whisperConfig', - 'scheduledTriggerConfig', - 'chatInputGuide', - 'fileSelectConfig', - 'instruction' -] as const; +export { CHAT_CONFIG_PATHS } from './type'; const assertConfigPath = (path: string) => { if (!(CHAT_CONFIG_PATHS as readonly string[]).includes(path)) { diff --git a/packages/workflow-core/src/config/type.ts b/packages/workflow-core/src/config/type.ts new file mode 100644 index 000000000000..167cba60e3ff --- /dev/null +++ b/packages/workflow-core/src/config/type.ts @@ -0,0 +1,31 @@ +export const CHAT_CONFIG_PATHS = [ + 'welcomeText', + 'autoExecute', + 'autoExecute.open', + 'autoExecute.defaultPrompt', + 'questionGuide', + 'questionGuide.open', + 'questionGuide.model', + 'questionGuide.customPrompt', + 'ttsConfig', + 'whisperConfig', + 'scheduledTriggerConfig', + 'chatInputGuide', + 'fileSelectConfig', + 'instruction' +] as const; + +export type ChatConfigPath = (typeof CHAT_CONFIG_PATHS)[number]; + +export type ConfigAutomationMeta = { + agentHint?: string; + capabilities?: string[]; +}; + +export type ConfigDescriptor = { + path: ChatConfigPath; + description: string; + valueSchema: Record; + capabilities: string[]; + value: unknown; +}; diff --git a/packages/workflow-core/src/index.ts b/packages/workflow-core/src/index.ts index 0cc9351ca7b4..8e60b24f965b 100644 --- a/packages/workflow-core/src/index.ts +++ b/packages/workflow-core/src/index.ts @@ -1,5 +1,6 @@ export * from './command/apply'; export * from './command/applyChangeSet'; +export * from './command/mergeChangeSet'; export * from './command/type'; export * from './code/io'; export * from './binding/service'; @@ -18,6 +19,9 @@ export * from './node/add'; export * from './io/service'; export * from './nesting/service'; export * from './config/service'; +export * from './config/automationMeta'; +export * from './config/descriptor'; +export * from './config/type'; export * from './store/compile'; export * from './store/decompile'; export * from './template/automationMeta'; diff --git a/packages/workflow-core/src/validation/index.ts b/packages/workflow-core/src/validation/index.ts index b63acd874f1c..f58f8bbee4ee 100644 --- a/packages/workflow-core/src/validation/index.ts +++ b/packages/workflow-core/src/validation/index.ts @@ -29,6 +29,38 @@ const hasRequiredValue = (value: unknown) => value !== '' && (!Array.isArray(value) || value.length > 0); +const isNonEmptyReference = (value: unknown): value is [string, string] => + Array.isArray(value) && + value.length === 2 && + typeof value[0] === 'string' && + value[0].length > 0 && + typeof value[1] === 'string' && + value[1].length > 0; + +const isVariableUpdateValueMissing = (item: { + value?: unknown; + renderType?: unknown; + arrayMode?: unknown; + booleanMode?: unknown; +}) => { + if (item.renderType === FlowNodeInputTypeEnum.reference) { + if (isNonEmptyReference(item.value)) return false; + return !( + Array.isArray(item.value) && + item.value.length > 0 && + item.value.every(isNonEmptyReference) + ); + } + + if (item.arrayMode === 'clear' || item.booleanMode) return false; + return ( + !Array.isArray(item.value) || + item.value[1] === undefined || + item.value[1] === null || + item.value[1] === '' + ); +}; + const getReachableNodeIds = (document: WorkflowDocument, startNodeId: string) => { const reachable = new Set([startNodeId]); const pending = [startNodeId]; @@ -319,6 +351,50 @@ const validateSpecialNode = ({ const getInputValue = (key: NodeInputKeyEnum) => node.inputs.find((item) => item.key === key)?.value; + if (node.flowNodeType === FlowNodeTypeEnum.variableUpdate) { + const updateList = getInputValue(NodeInputKeyEnum.updateList); + if (Array.isArray(updateList)) { + updateList.forEach((item, index) => { + if (!item || typeof item !== 'object' || Array.isArray(item)) { + diagnostics.push({ + code: 'WORKFLOW_VARIABLE_UPDATE_ITEM_INVALID', + severity: 'error', + nodeId: node.nodeId, + inputKey: NodeInputKeyEnum.updateList, + params: { index } + }); + return; + } + + const update = item as { + variable?: unknown; + value?: unknown; + renderType?: unknown; + arrayMode?: unknown; + booleanMode?: unknown; + }; + if (!isNonEmptyReference(update.variable)) { + diagnostics.push({ + code: 'WORKFLOW_VARIABLE_UPDATE_TARGET_MISSING', + severity: 'error', + nodeId: node.nodeId, + inputKey: NodeInputKeyEnum.updateList, + params: { index, field: 'variable' } + }); + } + if (isVariableUpdateValueMissing(update)) { + diagnostics.push({ + code: 'WORKFLOW_VARIABLE_UPDATE_VALUE_MISSING', + severity: 'error', + nodeId: node.nodeId, + inputKey: NodeInputKeyEnum.updateList, + params: { index, field: 'value' } + }); + } + }); + } + } + if (node.flowNodeType === FlowNodeTypeEnum.ifElseNode) { const branches = getInputValue(NodeInputKeyEnum.ifElseList); const invalid = diff --git a/packages/workflow-core/test/command/mergeChangeSet.test.ts b/packages/workflow-core/test/command/mergeChangeSet.test.ts new file mode 100644 index 000000000000..c9c758ddef86 --- /dev/null +++ b/packages/workflow-core/test/command/mergeChangeSet.test.ts @@ -0,0 +1,175 @@ +import { describe, expect, it } from 'vitest'; +import { + mergeWorkflowChangeSetChunks, + WorkflowChangeSetMergeError, + type WorkflowChangeSetChunk +} from '../../src'; + +const baseChecksum = `sha256:${'a'.repeat(64)}`; +const chunk = (value: Partial): WorkflowChangeSetChunk => ({ + schemaVersion: 'fastgpt-workflow-chunk/v1', + chunkId: 'chunk', + dependsOn: [], + commands: [{ type: 'meta.update', name: 'name' }], + ...value +}); + +describe('mergeWorkflowChangeSetChunks', () => { + it('orders dependencies deterministically and merges disjoint metadata patches', () => { + const result = mergeWorkflowChangeSetChunks({ + baseChecksum, + chunks: [ + chunk({ + chunkId: 'intro', + dependsOn: ['name'], + commands: [{ type: 'meta.update', intro: 'intro' }] + }), + chunk({ chunkId: 'name', commands: [{ type: 'meta.update', name: 'workflow' }] }) + ] + }); + expect(result.baseChecksum).toBe(baseChecksum); + expect(result.commands).toEqual([{ type: 'meta.update', name: 'workflow', intro: 'intro' }]); + }); + + it('deduplicates identical commands but rejects conflicting commands', () => { + const same = chunk({ chunkId: 'same' }); + expect( + mergeWorkflowChangeSetChunks({ baseChecksum, chunks: [same, { ...same, chunkId: 'copy' }] }) + .commands + ).toHaveLength(1); + + try { + mergeWorkflowChangeSetChunks({ + baseChecksum, + chunks: [ + chunk({ chunkId: 'one', commands: [{ type: 'config.set', path: 'x', value: 1 }] }), + chunk({ chunkId: 'two', commands: [{ type: 'config.set', path: 'x', value: 2 }] }) + ] + }); + expect.fail('Expected a command conflict'); + } catch (error) { + expect(error).toBeInstanceOf(WorkflowChangeSetMergeError); + expect(error).toMatchObject({ + code: 'WORKFLOW_CHANGESET_COMMAND_CONFLICT', + params: { + target: 'config:x', + existing: { + chunkId: 'one', + commandIndex: 0, + commandType: 'config.set' + }, + incoming: { + chunkId: 'two', + commandIndex: 0, + commandType: 'config.set' + } + } + }); + } + }); + + it('rejects different command types that write the same semantic target', () => { + expect(() => + mergeWorkflowChangeSetChunks({ + baseChecksum, + chunks: [ + chunk({ + chunkId: 'literal', + commands: [ + { + type: 'input.set', + nodeId: 'answer', + inputKey: 'text', + value: 'literal' + } + ] + }), + chunk({ + chunkId: 'reference', + commands: [ + { + type: 'input.ref', + nodeId: 'answer', + inputKey: 'text', + ref: { nodeId: 'upstream', outputKey: 'text' } + } + ] + }) + ] + }) + ).toThrowError( + expect.objectContaining({ + code: 'WORKFLOW_CHANGESET_COMMAND_CONFLICT', + params: { + target: 'input:answer:text', + existing: { + chunkId: 'literal', + commandIndex: 0, + commandType: 'input.set' + }, + incoming: { + chunkId: 'reference', + commandIndex: 0, + commandType: 'input.ref' + } + } + }) + ); + }); + + it('reports the actual patch contributor when a merged field conflicts', () => { + expect(() => + mergeWorkflowChangeSetChunks({ + baseChecksum, + chunks: [ + chunk({ + chunkId: 'name', + commands: [{ type: 'meta.update', name: 'Workflow' }] + }), + chunk({ + chunkId: 'intro', + commands: [{ type: 'meta.update', intro: 'First intro' }] + }), + chunk({ + chunkId: 'intro-conflict', + commands: [{ type: 'meta.update', intro: 'Second intro' }] + }) + ] + }) + ).toThrowError( + expect.objectContaining({ + code: 'WORKFLOW_CHANGESET_COMMAND_CONFLICT', + params: expect.objectContaining({ + existing: { + chunkId: 'intro', + commandIndex: 0, + commandType: 'meta.update' + }, + incoming: { + chunkId: 'intro-conflict', + commandIndex: 0, + commandType: 'meta.update' + } + }) + }) + ); + }); + + it('rejects missing dependencies and cycles', () => { + expect(() => + mergeWorkflowChangeSetChunks({ + baseChecksum, + chunks: [chunk({ chunkId: 'child', dependsOn: ['missing'] })] + }) + ).toThrow(/missing chunk/); + expect(() => + mergeWorkflowChangeSetChunks({ + baseChecksum, + chunks: [ + chunk({ chunkId: 'one', dependsOn: ['two'] }), + chunk({ chunkId: 'two', dependsOn: ['one'] }) + ] + }) + ).toThrow(/cycle/); + }); +}); diff --git a/packages/workflow-core/test/config/service.test.ts b/packages/workflow-core/test/config/service.test.ts index c9a8b2e1ba88..44b6a1e94de4 100644 --- a/packages/workflow-core/test/config/service.test.ts +++ b/packages/workflow-core/test/config/service.test.ts @@ -3,6 +3,8 @@ import { applyWorkflowCommand, builtinTemplateProvider, createWorkflowDocument, + getChatConfigDescriptor, + listChatConfigDescriptors, parseNodeTemplateRef } from '../../src'; import { describe, expect, it } from 'vitest'; @@ -22,6 +24,44 @@ const createDocument = async () => }) ).document; +describe('ChatConfig descriptors', () => { + it('exposes Agent guidance, value schema, capabilities and current value', () => { + const document = createWorkflowDocument({ + chatConfig: { fileSelectConfig: { maxFiles: 1, canSelectFile: true } } + }); + const descriptor = getChatConfigDescriptor({ + document, + path: 'fileSelectConfig', + translate: (value) => + value === 'workflow:cli.config.file_select' ? 'Enable user file input' : value + }); + + expect(descriptor).toMatchObject({ + path: 'fileSelectConfig', + description: 'Enable user file input', + capabilities: ['user-file-input'], + value: { maxFiles: 1, canSelectFile: true }, + valueSchema: { + type: 'object', + properties: { + maxFiles: expect.objectContaining({ type: 'integer' }), + canSelectFile: expect.objectContaining({ type: 'boolean' }) + } + } + }); + }); + + it('returns one descriptor for every allowlisted configuration path', () => { + const descriptors = listChatConfigDescriptors({ document: createWorkflowDocument() }); + + expect(descriptors).toHaveLength(14); + expect(descriptors.every(({ description }) => description.length > 0)).toBe(true); + expect(descriptors.find(({ path }) => path === 'autoExecute.open')?.valueSchema).toMatchObject({ + type: 'boolean' + }); + }); +}); + describe('fileSelectConfig output synchronization', () => { it.each([ 'canSelectFile', diff --git a/packages/workflow-core/test/validation/validation.test.ts b/packages/workflow-core/test/validation/validation.test.ts index 9a1c8a93b2c9..132e98b9a41e 100644 --- a/packages/workflow-core/test/validation/validation.test.ts +++ b/packages/workflow-core/test/validation/validation.test.ts @@ -36,6 +36,33 @@ describe('validateWorkflow', () => { expect(codes).toContain('WORKFLOW_REQUIRED_INPUT_MISSING'); }); + it('reports incomplete variable update rows', async () => { + const dependencies = { templateProvider: builtinTemplateProvider, locale: 'en' }; + const start = await applyWorkflowCommand({ + document: createWorkflowDocument(), + command: { + type: 'node.add', + nodeId: 'start', + template: parseNodeTemplateRef('builtin:workflow-start') + }, + dependencies + }); + const update = await applyWorkflowCommand({ + document: start.document, + command: { + type: 'node.add', + nodeId: 'update', + template: parseNodeTemplateRef('builtin:variable-update'), + connectFrom: { kind: 'next', nodeId: 'start' } + }, + dependencies + }); + + const codes = validateWorkflow(update.document).map((item) => item.code); + expect(codes).toContain('WORKFLOW_VARIABLE_UPDATE_TARGET_MISSING'); + expect(codes).toContain('WORKFLOW_VARIABLE_UPDATE_VALUE_MISSING'); + }); + it('reports malformed and non-upstream references', () => { const malformed: WorkflowDocument = structuredClone(WorkflowDocumentSchema.parse(aiWorkflow)); const input = malformed.nodes diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 36d4a5dd8f47..a43496d246f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1124,6 +1124,9 @@ importers: lodash-es: specifier: 'catalog:' version: 4.18.1 + mermaid: + specifier: ^10.9.6 + version: 10.9.6 mongoose: specifier: 'catalog:' version: 8.23.1(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.9) diff --git a/projects/app/src/components/Markdown/img/MermaidCodeBlock.tsx b/projects/app/src/components/Markdown/img/MermaidCodeBlock.tsx index a49392b5a0a1..aeb492225a6f 100644 --- a/projects/app/src/components/Markdown/img/MermaidCodeBlock.tsx +++ b/projects/app/src/components/Markdown/img/MermaidCodeBlock.tsx @@ -1,6 +1,9 @@ import React, { useEffect, useRef, useCallback, useState } from 'react'; -import { Box } from '@chakra-ui/react'; +import { Box, Flex, IconButton, useDisclosure } from '@chakra-ui/react'; import MyIcon from '@fastgpt/web/components/common/Icon'; +import MyTooltip from '@fastgpt/web/components/common/MyTooltip'; +import { MyPhotoSlider } from '@fastgpt/web/components/common/Image/PhotoView'; +import { useTranslation } from 'next-i18next'; const punctuationMap: Record = { ',': ',', @@ -22,12 +25,23 @@ const punctuationMap: Record = { '、': ',' }; +type MermaidPreview = { + key: string; + markup: string; + width: number; + height: number; + initialScale: number; +}; + const MermaidBlock = ({ code }: { code: string }) => { + const { t } = useTranslation(); const ref = useRef(null); const [svg, setSvg] = useState(''); const [mermaid, setMermaid] = useState(null); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(''); + const [preview, setPreview] = useState(); + const { isOpen, onOpen, onClose } = useDisclosure(); useEffect(() => { let mounted = true; @@ -121,6 +135,37 @@ const MermaidBlock = ({ code }: { code: string }) => { }; }, []); + const onOpenPreview = useCallback(() => { + const svgElement = ref.current?.querySelector('svg'); + if (!svgElement) return; + + // 放大层直接渲染 SVG DOM,保持 foreignObject 内文字与行内 Mermaid 的布局一致。 + const previewSvg = svgElement.cloneNode(true) as SVGSVGElement; + const [viewBoxX, viewBoxY, viewBoxWidth, viewBoxHeight] = previewSvg + .getAttribute('viewBox')! + .split(/\s+/); + const background = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); + background.setAttribute('x', viewBoxX); + background.setAttribute('y', viewBoxY); + background.setAttribute('width', viewBoxWidth); + background.setAttribute('height', viewBoxHeight); + background.setAttribute('fill', '#fff'); + previewSvg.insertBefore(background, previewSvg.firstChild); + previewSvg.setAttribute('width', '100%'); + previewSvg.setAttribute('height', '100%'); + previewSvg.style.display = 'block'; + const { width, height } = svgElement.getBoundingClientRect(); + const fitScale = Math.min(1, window.innerWidth / width, window.innerHeight / height); + setPreview({ + key: previewSvg.id, + markup: previewSvg.outerHTML, + width, + height, + initialScale: Math.max(1, 1 / fitScale) + }); + onOpen(); + }, [onOpen]); + if (isLoading) { return ( { } return ( - .export': { - display: 'block' + <> + + {!isOpen && ( + + )} + + + } + size={'xs'} + variant={'ghost'} + isDisabled={!svg} + onClick={onOpenPreview} + /> + + + } + size={'xs'} + variant={'ghost'} + isDisabled={!svg} + onClick={onclickExport} + /> + + + + +
+ : undefined } - }} - > - - - + ); }; diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/hooks/useChatGenerate.ts b/projects/app/src/components/core/chat/ChatContainer/ChatBox/hooks/useChatGenerate.ts index a86813d64871..797fc742224c 100644 --- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/hooks/useChatGenerate.ts +++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/hooks/useChatGenerate.ts @@ -650,6 +650,7 @@ export const useChatGenerate = ({ files = [], history = chatRecords, interactive, + agentPlanAskResponse, autoTTSResponse = false, hideInUI = false, clearInput = false @@ -763,7 +764,8 @@ export const useChatGenerate = ({ ? rewriteHistoriesByInteractiveResponse({ histories: newChatList, interactive, - interactiveVal: text + interactiveVal: text, + agentPlanAskResponse }) : newChatList ); @@ -796,6 +798,7 @@ export const useChatGenerate = ({ messages, responseChatItemId: responseChatId, interactive, + agentPlanAskResponse, controller: abortSignal, generatingMessage: (e) => generatingMessage({ ...e, autoTTSResponse }), variables: requestVariables diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/type.ts b/projects/app/src/components/core/chat/ChatContainer/ChatBox/type.ts index a28ee8028dd9..63f7e9d026d5 100644 --- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/type.ts +++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/type.ts @@ -9,7 +9,10 @@ import type { ChatItemObjItemType, ResponseTagItemType } from '@fastgpt/global/core/chat/type'; -import type { WorkflowInteractiveResponseType } from '@fastgpt/global/core/workflow/template/system/interactive/type'; +import type { + AgentPlanAskResponse, + WorkflowInteractiveResponseType +} from '@fastgpt/global/core/workflow/template/system/interactive/type'; export type UserInputFileItemType = { id: string; @@ -37,6 +40,7 @@ export type ChatBoxInputType = { text?: string; files?: UserInputFileItemType[]; interactive?: WorkflowInteractiveResponseType; + agentPlanAskResponse?: AgentPlanAskResponse; hideInUI?: boolean; /** 发送后是否清空输入框;默认不清空,只有主输入框确认发送等占用输入框内容的场景显式设为 true。 */ clearInput?: boolean; diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/utils/interactive.ts b/projects/app/src/components/core/chat/ChatContainer/ChatBox/utils/interactive.ts index fd128c41d95c..ffba139cee5e 100644 --- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/utils/interactive.ts +++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/utils/interactive.ts @@ -5,6 +5,7 @@ import { getLastInteractiveValue } from '@fastgpt/global/core/workflow/runtime/utils'; import type { + AgentPlanAskResponse, UserInputInteractive, WorkflowInteractiveResponseType } from '@fastgpt/global/core/workflow/template/system/interactive/type'; @@ -56,13 +57,50 @@ export const isUserInputInteractiveSubmitted = ({ export const persistAgentAskAnswersToHistories = ({ histories, interactive, - answer + answer, + agentPlanAskResponse }: { histories: ChatSiteItemType[]; interactive: WorkflowInteractiveResponseType; answer: string; + agentPlanAskResponse?: AgentPlanAskResponse; }): ChatSiteItemType[] => { const sourceInteractive = extractDeepestInteractive(interactive); + + if (sourceInteractive.type === 'workflowBuilderPreview') { + if (agentPlanAskResponse?.askId !== sourceInteractive.previewId) return histories; + + return histories.map((item) => { + if (item.obj !== ChatRoleEnum.AI) return item; + + return { + ...item, + value: item.value.map((val) => { + if (!('interactive' in val) || !val.interactive) return val; + + const finalInteractive = extractDeepestInteractive(val.interactive); + if ( + finalInteractive.type !== 'workflowBuilderPreview' || + finalInteractive.previewId !== sourceInteractive.previewId + ) { + return val; + } + + return { + ...val, + interactive: { + ...finalInteractive, + params: { + ...finalInteractive.params, + answerValue: agentPlanAskResponse.optionValue as 'confirm' | 'revise' | 'cancel', + answerText: agentPlanAskResponse.text + } + } + }; + }) + }; + }); + } if (sourceInteractive.type !== 'agentAsk') { return histories; } @@ -287,6 +325,11 @@ export const getInteractiveByHistories = ( interactive: finalInteractive, canSendQuery: true }; + } else if (finalInteractive.type === 'workflowBuilderPreview') { + return { + interactive: finalInteractive, + canSendQuery: true + }; } return { @@ -324,11 +367,13 @@ export const resolveInteractiveResponseChatItemId = ({ export const rewriteHistoriesByInteractiveResponse = ({ histories, interactiveVal, - interactive + interactive, + agentPlanAskResponse }: { histories: ChatSiteItemType[]; interactiveVal: string; interactive: WorkflowInteractiveResponseType; + agentPlanAskResponse?: AgentPlanAskResponse; }): ChatSiteItemType[] => { const status = checkInteractiveResponseStatus({ interactive, input: interactiveVal }); @@ -344,7 +389,8 @@ export const rewriteHistoriesByInteractiveResponse = ({ ? persistAgentAskAnswersToHistories({ histories: formatHistories, interactive, - answer: interactiveVal + answer: interactiveVal, + agentPlanAskResponse }) : formatHistories; @@ -440,6 +486,24 @@ export const rewriteHistoriesByInteractiveResponse = ({ }; } + if (finalInteractive.type === 'workflowBuilderPreview') { + return { + ...val, + interactive: { + ...finalInteractive, + params: { + ...finalInteractive.params, + answerValue: agentPlanAskResponse?.optionValue as + | 'confirm' + | 'revise' + | 'cancel' + | undefined, + answerText: agentPlanAskResponse?.text + } + } + }; + } + return val; }); diff --git a/projects/app/src/components/core/chat/ChatContainer/type.ts b/projects/app/src/components/core/chat/ChatContainer/type.ts index 0119c0c73205..c3755a6eefb7 100644 --- a/projects/app/src/components/core/chat/ChatContainer/type.ts +++ b/projects/app/src/components/core/chat/ChatContainer/type.ts @@ -8,7 +8,10 @@ import type { } from '@fastgpt/global/core/chat/type'; import type { SseResponseEventEnum } from '@fastgpt/global/core/workflow/runtime/constants'; import type { WorkflowToolDeltaType } from '@fastgpt/global/core/workflow/runtime/sse'; -import type { WorkflowInteractiveResponseType } from '@fastgpt/global/core/workflow/template/system/interactive/type'; +import type { + AgentPlanAskResponse, + WorkflowInteractiveResponseType +} from '@fastgpt/global/core/workflow/template/system/interactive/type'; import type { ChatAgentConfigFormDataType } from '@fastgpt/global/core/ai/auxiliaryGeneration/type'; import type { AuxiliaryGenerationEventEnum } from '@fastgpt/global/core/ai/auxiliaryGeneration/constants'; import type { AgentPlanStatusType, AgentPlanType } from '@fastgpt/global/core/ai/agent/type'; @@ -62,6 +65,7 @@ export type StartChatFnProps = { messages: ChatCompletionMessageParam[]; responseChatItemId?: string; interactive?: WorkflowInteractiveResponseType; + agentPlanAskResponse?: AgentPlanAskResponse; controller: AbortController; variables: Record; generatingMessage: (e: generatingMessageProps) => void; diff --git a/projects/app/src/components/core/chat/components/AIResponseBox/RenderWorkflowBuilderPreviewInteractive.tsx b/projects/app/src/components/core/chat/components/AIResponseBox/RenderWorkflowBuilderPreviewInteractive.tsx new file mode 100644 index 000000000000..c3f0f0dddd9b --- /dev/null +++ b/projects/app/src/components/core/chat/components/AIResponseBox/RenderWorkflowBuilderPreviewInteractive.tsx @@ -0,0 +1,163 @@ +import Markdown from '@/components/Markdown'; +import { Box, Button, Flex, Textarea } from '@chakra-ui/react'; +import type { WorkflowBuilderPreviewInteractive } from '@fastgpt/global/core/workflow/template/system/interactive/type'; +import LeftRadio from '@fastgpt/web/components/common/Radio/LeftRadio'; +import { useTranslation } from 'next-i18next'; +import React, { useCallback, useMemo, useState } from 'react'; +import { onSendPrompt } from './utils'; +import { + ChoiceCollapseToggleButton, + SelectedAnswerText, + useInteractiveChoiceCollapse +} from '../Interactive/InteractiveChoiceCollapse'; + +const RenderWorkflowBuilderPreviewInteractive = React.memo( + function RenderWorkflowBuilderPreviewInteractive({ + interactive, + isLastChild + }: { + interactive: WorkflowBuilderPreviewInteractive; + isLastChild: boolean; + }) { + const { t } = useTranslation(); + const { title, mermaid, sections, actions, answerValue, answerText } = interactive.params; + const [selectedAction, setSelectedAction] = useState(''); + const [feedback, setFeedback] = useState(''); + const [submittedValue, setSubmittedValue] = useState(''); + const [submittedText, setSubmittedText] = useState(''); + const effectiveValue = answerValue || submittedValue; + const effectiveText = answerText || submittedText; + const selectedOption = actions.find( + (action) => action.value === (effectiveValue || selectedAction) + ); + const effectiveAnswer = effectiveText || selectedOption?.label || ''; + const isDisabled = !!effectiveValue || !isLastChild; + const { + isOptionsExpanded, + selectedAnswerPlacement, + shouldShowOptions, + collapseOptions, + toggleOptionsExpanded + } = useInteractiveChoiceCollapse(effectiveAnswer); + const radioOptions = useMemo( + () => + actions.map((action) => ({ + title: ( + + {action.label} + + ), + value: action.value + })), + [actions] + ); + + const submitRevision = useCallback(() => { + const text = feedback.trim(); + if (!text || isDisabled) return; + + setSubmittedValue('revise'); + setSubmittedText(text); + collapseOptions(); + onSendPrompt(text, { + askId: interactive.previewId, + optionValue: 'revise', + text + }); + }, [collapseOptions, feedback, interactive.previewId, isDisabled]); + + return ( + + + {title} + + + {sections.map((section, index) => ( + + + {section.title} + + + + ))} + + + {selectedAnswerPlacement === 'above' && ( + + + + )} + {shouldShowOptions && ( + + + px={4} + py={4} + gridGap={2} + align={'center'} + list={radioOptions} + value={effectiveValue || selectedAction} + defaultBg={'white'} + activeBg={'white'} + isDisabled={isDisabled} + onChange={(value) => { + if (!value || isDisabled) return; + const action = actions.find((item) => item.value === value); + if (!action) return; + + setSelectedAction(action.value); + if (action.inputMode === 'text') return; + + setSubmittedValue(action.value); + collapseOptions(); + onSendPrompt(action.label, { + askId: interactive.previewId, + optionValue: action.value + }); + }} + /> + {selectedOption?.inputMode === 'text' && ( + +