- 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"
1.1 KiB
1.1 KiB
ADDED Requirements
Requirement: 频率控制与每日限额函数迁移至独立模块
系统 SHALL 将频率控制、每日限额及冷却相关的所有状态变量和函数从 main.py 提取至 services/rate_limiter.py,包括:_auto_running、_op_history、_daily_stats、DAILY_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_hour至end_hour范围内时调用_is_in_operating_hours - THEN 返回
False,阻止自动化操作执行