## @flowlab/main 修改意见和未来的拓展建议

非常棒！你准确地抓住了 FlowLab 这类工作流引擎的核心价值所在：**通过结构化的方式编排和管理业务逻辑，从而提升代码质量、可维护性和可扩展性，并将开发者从繁琐的流程控制、状态管理、错误处理等“管道代码”中解放出来，更专注于核心业务功能的实现。**

基于我们之前讨论的统一设计，以下是一些针对性的修改意见和未来可能的拓展模块想法：

## 对当前统一设计的修改意见 (Modification Suggestions)

这些建议旨在进一步优化易用性、健壮性和灵活性：

1.  **增强 Input/Output Mapping:**
    * **痛点:** 当前的字符串路径映射 (`'variables.user.id'`) 虽然直观，但在处理嵌套数据、数组、或需要简单转换（如类型转换、默认值）时可能不够灵活。
    * **建议:**
        * **引入简单转换函数:** 允许映射值是一个小函数或预定义转换器，例如 `{ targetField: 'variables.order.total | toInt | default(0)' }` 或 `{ targetField: (ctx) => ctx.variables.price * ctx.variables.quantity }` (后者需注意安全性)。
        * **JSONata 或类似查询语言:** 对于复杂的对象导航和转换，考虑集成类似 JSONata 的查询/转换语言。
        * **更清晰的步骤输出引用:** 定义更明确、更健壮的方式来引用先前步骤的输出，例如引入一个专门的上下文属性 `stepsOutput.stepId.outputFieldName`，而不是依赖可能不稳定的 `history` 或易混淆的 `variables` 约定。

2.  **细化错误处理与分支:**
    * **痛点:** 目前主要是通过 `retryOptions` 和 `compensateOnFailure` 处理失败。但有时我们希望根据 *不同类型* 的错误执行 *不同* 的后续步骤（例如，瞬时错误重试，验证错误走修正流程，权限错误直接拒绝）。
    * **建议:** 在 `StepConfig` 中增加 `onError` 配置，允许定义错误处理分支。
      ```typescript
      interface TaskStepConfig extends BaseStepConfig {
          // ... 其他配置
          onError?: {
              // 可以匹配错误名称 (TimeoutError, AuthorizationError) 或自定义错误码
              [errorMatcher: string]: string; // 错误匹配符 -> 下一个步骤 ID
              _default?: string; // 可选的默认错误处理步骤 ID
          }
      }
      ```
      执行器在捕获到节点错误时，会检查 `onError` 配置，如果匹配到，则跳转到指定的错误处理步骤，而不是直接失败整个流程。

3.  **增强 Context API:**
    * **痛点:** `INodeContext` 提供了 `get/setVariable`，但对于复杂状态管理可能略显不足。
    * **建议:**
        * **类型化的 Variables:** 考虑引入一种方式让开发者能为 `context.variables` 提供类型定义，增强类型安全。
        * **作用域变量 (Scoped Variables):** 对于并行或子流程，可能需要提供局部作用域的变量，避免命名冲突。 (这个比较复杂，可能是 V2 功能)
        * **更丰富的日志上下文:** `context.log` 可以自动附加更多信息，如 `stepId`, `nodeId`, `traceId`。

4.  **节点元数据与发现:**
    * **痛点:** 如果节点非常多，管理和查找节点会变得困难。可视化编辑器的集成也需要知道节点的输入输出。
    * **建议:**
        * **强制 Input/Output Schema:** 对于 `BaseNode`，可以考虑将 `inputSchema` 和 `outputSchema` (使用 JSON Schema 定义) 作为 `metadata` 的必填项（或者强烈推荐），引擎可以在执行前后进行校验。
        * **节点标签/分类:** 在 `NodeMetadata` 中增加 `tags` 或 `category` 字段，方便组织和查找。
        * **自动注册/发现机制 (高级):** （可能过于复杂）考虑提供 CLI 工具或装饰器 (`@Node(...)`) 来扫描代码并自动注册节点及其元数据。

5.  **版本控制:**
    * **痛点:** 工作流定义会演进，需要管理不同版本。
    * **建议:** 在 `WorkflowDefinitionData` 中明确 `version` 字段。`IPersistence` 接口的 `loadDefinition` 应支持按版本加载。引擎在执行时应记录所使用的定义版本。

6.  **补偿机制 (Compensation):**
    * **痛点:** 当前 `compensateOnFailure` 比较简单。真正的补偿（Saga 模式）通常需要按相反顺序执行补偿操作。
    * **建议:** 考虑引入专门的 `CompensationWorkflow` 或在 `WorkflowDefinition` 中定义一个可选的、与主流程关联的补偿流程。当主流程某一步失败且需要补偿时，引擎根据执行历史逆序触发补偿流程中对应的补偿节点。`BaseNode` 的 `compensate` 方法是实现补偿逻辑的基础。

## 未来拓展模块建议 (Future Extension Module Ideas)

这些模块可以作为独立的包 (`@flowlab/xxx`) 发布，依赖于 `@flowlab/core`，提供特定领域的功能和节点：

1.  **`@flowlab/data` (数据处理流):**
    * **目标:** 专注于 ETL、数据清洗、转换、同步等场景。
    * **核心节点:**
        * `ReaderNode`: 从各种来源读取数据 (CSV, JSON, Database, API, Queue)。提供适配器模式。
        * `WriterNode`: 写入数据到各种目标。
        * `TransformNode`: 执行数据转换（JS 函数、表达式语言如 JSONata、或集成 Dask/Pandas 等库）。
        * `ValidationNode`: 基于 Schema (JSON Schema, Zod 等) 验证数据。
        * `FilterNode`: 根据条件过滤数据记录。
        * `AggregationNode`: 对数据进行聚合操作 (Count, Sum, Avg)。
        * `JoinNode`: 合并来自不同来源的数据。
        * `BatchNode` / `UnbatchNode`: 处理批量数据。
    * **特性:** 可能包含数据流模式（处理记录流而非单个上下文）、Schema 管理集成、连接器管理等。

2.  **`@flowlab/message` (消息/事件驱动流):**
    * **目标:** 简化与消息队列 (MQ)、事件总线 (Event Bus) 的集成，构建事件驱动的流程。
    * **核心节点:**
        * `MQListenerNode` / `EventListenerNode` (作为起点): 监听来自 RabbitMQ, Kafka, SQS, Google Pub/Sub, Azure Event Hub, Webhook 等的事件/消息，触发工作流。需要与 `IEventManager` 或专门的适配器集成。
        * `MQPublishNode` / `EventPublishNode`: 向 MQ 或事件总线发布消息/事件。
        * `RequestReplyNode`: 发送请求到 MQ 并等待回复。
        * `MessageRouterNode`: 根据消息内容或头部路由到不同处理分支。
        * `DeadLetterHandlerNode`: 处理无法成功处理的消息。
    * **特性:** 消息确认机制 (自动/手动 ack/nack)、消息属性处理、相关性 ID (Correlation ID) 传递、与 `@flowlab/core` 的 `IEventManager` 紧密集成。

3.  **`@flowlab/ai` (AI Flow - 如前所述):**
    * **目标:** 封装与 AI 模型（特别是 LLMs）交互的常用模式。
    * **核心节点:** `LLMCompletionNode`, `LLMChatNode`, `EmbeddingNode`, `FunctionCallingNode`, `StructuredDataExtractionNode`, `ClassificationNode`, `VectorSearchNode` (可能需要向量数据库客户端), `ImageGenerationNode` 等。
    * **特性:** Prompt 模板管理、AI Provider 抽象与管理、Token 使用统计、内容安全过滤处理等。

4.  **`@flowlab/human` (人机交互流):**
    * **目标:** 将需要人工干预的步骤（审批、审核、数据录入）集成到自动化流程中。
    * **核心节点:**
        * `AssignTaskNode`: 创建并分配一个人工任务给指定用户或角色组。
        * `WaitForTaskCompletionNode`: 暂停工作流，等待指定的人工任务完成。
        * `GetTaskOutcomeNode`: 获取人工任务的结果（如批准/拒绝、填写的表单数据）。
        * `EscalateTaskNode`: 如果任务超时未处理，进行升级（重新分配、通知等）。
        * `GenerateFormNode`: 定义需要在人工任务中展示和填写的表单。
    * **特性:** 需要与外部的人工任务管理系统（Tasklist UI）或服务集成。涉及工作流的暂停与恢复，对持久化 (`IPersistence`) 和可能的回调机制有较高要求。

5.  **`@flowlab/testing` (测试工具库):**
    * **目标:** 提供测试 FlowLab 工作流和节点的工具。
    * **核心功能:**
        * `MockNode`: 轻松模拟特定节点的行为和输出。
        * `TestExecutor`: 用于在测试环境中执行工作流，可以注入 Mock 节点和服务。
        * `ContextBuilder`: 方便地构建测试用的 `IWorkflowContext` 或 `INodeContext`。
        * `HistoryAsserter`: 提供断言方法来检查执行历史是否符合预期。

6.  **`@flowlab/connectors` (通用连接器库):**
    * **目标:** 提供一系列预构建的节点，用于连接常见的第三方 SaaS 服务或数据库。
    * **示例节点:** `SalesforceNode`, `SlackNotificationNode`, `DatabaseQueryNode`, `RestApiNode` (更通用的 HTTP 请求节点), `GraphQLNode` 等。这个模块可以包含许多子模块。

通过这些修改建议和拓展模块，FlowLab 可以逐步发展成为一个既易用又强大，且能适应多种复杂业务场景的综合性工作流平台生态。