""" run_full_sync_pipeline_simple_sm.py 独立执行:基于 sync_state_machine 的 JSONL -> API Pipeline。 """ from __future__ import annotations import asyncio import sys from pathlib import Path PROJECT_ROOT = Path(__file__).resolve().parent.parent if str(PROJECT_ROOT) not in sys.path: sys.path.insert(0, str(PROJECT_ROOT)) import sync_state_machine.domain # noqa: F401, E402 from sync_state_machine.pipeline import ( # noqa: E402 build_config, run_pipeline_from_config, ) from sync_state_machine.config import load_named_preset_overrides # noqa: E402 PRESET_NAME = "simple_sm" async def main() -> int: try: overrides, preset_file, used_default = load_named_preset_overrides(PROJECT_ROOT, PRESET_NAME) source_label = "default" if used_default else "custom" print(f"🧩 Loaded preset ({source_label}): {preset_file}") config = build_config(project_root=PROJECT_ROOT, overrides=overrides) await run_pipeline_from_config( config, title="sync_state_machine JSONL -> API pipeline", print_summary=True, ) return 0 except KeyboardInterrupt: print("\n⚠️ Interrupted by user") return 130 except Exception as exc: print(f"\n❌ Pipeline failed: {type(exc).__name__}: {exc}") import traceback traceback.print_exc() return 1 if __name__ == "__main__": raise SystemExit(asyncio.run(main()))