zhoujie b635108b89 refactor: split monolithic main.py into services/ + ui/ modules (improve-maintainability)
- main.py: 4360 → 146 lines (96.6% reduction), entry layer only
- services/: rate_limiter, autostart, persona, connection, profile,
  hotspot, content, engagement, scheduler, queue_ops (10 business modules)
- ui/app.py: all Gradio UI code extracted into build_app(cfg, analytics)
- Fix: with gr.Blocks() indented inside build_app function
- Fix: cfg.all property (not get_all method)
- Fix: STATUS_LABELS, get_persona_keywords, fetch_proactive_notes imports
- Fix: queue_ops module-level set_publish_callback moved into configure()
- Fix: pub_queue.format_*() wrapped as queue_format_table/calendar helpers
- All 14 files syntax-verified, build_app() runtime-verified
- 58/58 tasks complete"
2026-02-24 22:50:56 +08:00

1.1 KiB
Raw Blame History

ADDED Requirements

Requirement: 频率控制与每日限额函数迁移至独立模块

系统 SHALL 将频率控制、每日限额及冷却相关的所有状态变量和函数从 main.py 提取至 services/rate_limiter.py,包括:_auto_running_op_history_daily_statsDAILY_LIMITS_consecutive_errors_error_cooldown_until_reset_daily_stats_if_needed_check_daily_limit_increment_stat_record_error_clear_error_streak_is_in_cooldown_is_in_operating_hours_get_stats_summary

Scenario: 模块级状态初始化一次

  • WHEN Python 首次导入 services/rate_limiter.py
  • THEN _daily_stats_op_history 等模块级变量 SHALL 仅初始化一次Python 模块单例语义)

Scenario: 每日限额检查正常工作

  • WHEN _check_daily_limit("comment") 被调用
  • THEN 返回值 SHALL 与迁移前行为完全一致

Scenario: 运营时段限制正常工作

  • WHEN 当前时间不在 start_hourend_hour 范围内时调用 _is_in_operating_hours
  • THEN 返回 False,阻止自动化操作执行