把 mod.rs 残留 4095 行按职责再拆 6 组(model_inject/repair/native_proxy/ run_convert/ws/bootstrap),mod.rs 瘦到 ~1000-1200。纯机械移动,编译器+5测试验证。 Co-Authored-By: Claude <noreply@anthropic.com>
3.8 KiB
workflow_ui/mod.rs 续拆(6 子模块)设计
日期:2026-06-18
分支:feat/comfy-cloud-adapter
状态:已通过 brainstorming,待用户复审
背景
上一轮已把 workflow_ui.rs(6181 行)拆成 8 模块,但 mod.rs 仍 4095 行——一批
未在上轮清单内的函数(native proxy / repair 链 / bootstrap 注入 / run 转换 / ws / 模型注入)
留在了 mod.rs。本轮继续把这 6 组抽出,让 mod.rs 瘦到 ~1000-1200 行(只剩 routes()
- 共享 struct + 小工具)。
延续上轮纪律:纯机械移动,函数体一字不改,只调可见性 + use,编译器 + 5 测试验证。
已确认决策
- 续拆 workflow_ui/mod.rs 残留。
- 拆成 6 子模块(见下表)。
- 纯机械移动,零逻辑改动。
- 安全:每抽一组即 cargo build -j 2 + 5 测试保持;末尾各文件行数核对。
子模块划分
| 子模块 | 函数组 |
|---|---|
model_inject.rs |
comfy_combo_input, inject_model_choices, is_boosapi_extension_node_type, workflow_node_defs_with_models, inject_boosapi_object_info, builtin_model_folders, inject_boosapi_model_folders, workflow_model_folder_payload, native_model_folder_payload_or_fallback, model_payload_items_from_names, normalize_model_item_name, workflow_model_display_aliases, model_payload_item_with_name, merge_model_payload_items, normalize_model_folder_payload |
repair.rs |
inject_native_prompt_cloud_api_key, repair_resize_image_mask_nodes(+without_workflow), repair_text_generate_ltx2_prompt_nodes, repair_dynamic_combo_nodes(+ dynamic_combo* 全部 helper), repair_wan2_api_nodes(+ wan2_* / is_wan2_* helper), collect_workflow_nodes, prompt_subgraph_node_id, id_to_prompt_key |
native_proxy.rs |
native_workflow_enabled/base/http_path/request/json/json_cached/response/view_response/video_response/file_response/raw_response/api_proxy, archive_native_workflow_asset, repair_native_prompt_body_value, workflow_cache_kind_from_key, workflow_cache_status, upload_image(+_to_local_backend/_to_native_backend), upload_mask, timestamp_ms |
run_convert.rs |
workflow_run_to_history/_task/_queue_task/_prompt_tuple, run_status_messages, run_outputs_for_comfy, node_output_for_comfy, comfy_media_items, normalize_comfy_media_item, workflow_text_output, workflow_graph_to_comfy_workflow, workflow_timestamp_ms |
ws.rs |
workflow_session_sender, publish_workflow_ws_event, workflow_node_label, workflow_progress_callback_with_run_sender, publish_run_events, workflow_ws, native_workflow_ws_bridge |
bootstrap.rs |
inject_bootstrap, workflow_secret_cleanup_bootstrap, inject_external_bootstrap, inject_enhanced_bootstrap |
留 mod.rs:routes()、共享 struct(WorkflowCaller/CachedJson/各 Query/Payload)、跨多模块小工具 (safe_view_path/user_home/guess_mime_from_path/parse_boolish/auth_caller_optional/ workflow_context/parse_workflow_cookie/build_query_string/simple_urlencode/各 workflow_widget_* validation helper 等)、experiment_models/view_metadata/custom_nodes_i18n/internal_* 等零散 handler。 实现时按实际依赖判定:被多组共用的留 mod.rs
pub(super)。
安全策略
同上轮:每抽一组 → cargo build -j 2(编译器是主安全网,纯移动)→ cargo test -p boosapi --lib routes::workflow_ui(5 测试基线不减)→ 提交。跨模块依赖的私有符号按编译报错逐个
改 pub(super)。子模块内部 helper 也 pub(super) 或保持模块私有(看是否跨文件用)。
测试
编译器逐组验证;5 个现有测试全程保持;末尾核对 8+6 个子文件行数,mod.rs 应 <1500。
非目标
- 不改逻辑、不改路由、不动 handler 行为。
- 不拆其他巨文件(oauth/payment/digital_human 各自后续循环)。
- 不顺手优化函数实现。
提交约定
分支 feat/comfy-cloud-adapter。每抽 1 组 + 编译通过即提交。中文 commit。