## 1. 分析状态缓存(hotspot-analysis-state) - [x] 1.1 在 `services/hotspot.py` 中新增模块级变量 `_last_analysis: dict | None = None` - [x] 1.2 实现 `get_last_analysis() -> dict | None`:加 `_cache_lock` 锁,返回 `_last_analysis` 的深拷贝 - [x] 1.3 实现 `set_last_analysis(data: dict) -> None`:加 `_cache_lock` 锁,合并 `hot_topics` 和 `suggestions`(去重),更新 `_last_analysis` - [x] 1.4 在 `analyze_and_suggest` 中添加 `set_last_analysis(analysis)` 调用(在渲染 Markdown 之前) ## 2. 修改 services-hotspot 已有函数 - [x] 2.1 修改 `generate_from_hotspot`:在函数内部调用 `get_last_analysis()` 获取结构化摘要,拼接到 `reference_notes` 前部,总长度限制 3000 字符 - [x] 2.2 在 `services/hotspot.py` 的 `__init__.py` 或模块顶部导出新增函数:`get_last_analysis`、`set_last_analysis`、`feed_hotspot_to_engine` ## 3. 热点选题下拉组件(hotspot-topic-selector) - [x] 3.1 在 `ui/app.py` 热点探测 Tab 中新增 `gr.Dropdown` 组件(label="推荐选题") - [x] 3.2 修改 `analyze_and_suggest` 的返回值处理:新增第四个输出绑定到 Dropdown 的 `gr.update(choices=...)`,choices 从 `suggestions` 提取 `topic` 列表 - [x] 3.3 绑定 Dropdown 的 `change` 事件:选中后将 `topic` 写入 `topic_from_hot` Textbox ## 4. TopicEngine 桥接(hotspot-engine-bridge) - [x] 4.1 在 `services/hotspot.py` 中实现 `feed_hotspot_to_engine(topic_engine) -> list[dict]`:读取 `get_last_analysis()`,调用 `topic_engine.recommend_topics(hotspot_data=data)` - [x] 4.2 在智能选题相关 UI 中,调用 `feed_hotspot_to_engine` 传入 TopicEngine 实例,使选题推荐获得热点加权 ## 5. 自动采集任务(hotspot-auto-collector) - [x] 5.1 在 `services/config_manager.py` 的 `DEFAULT_CONFIG` 中添加 `hotspot_auto_collect` 默认配置节点 - [x] 5.2 在 `services/scheduler.py` 中新增 `_hotspot_collector_running = threading.Event()` 和 `_hotspot_collector_thread` 状态变量 - [x] 5.3 实现 `_hotspot_collector_loop(keywords, interval_hours, mcp_url, model)`:遍历 keywords 执行搜索 + 分析,结果写入 `set_last_analysis()`,休眠 `interval_hours` - [x] 5.4 实现 `start_hotspot_collector(keywords, interval_hours, mcp_url, model)` 和 `stop_hotspot_collector()` - [x] 5.5 在 UI 中(调度器设置或热点 Tab)添加自动采集的启停控件和状态显示 ## 6. 验证与收尾 - [x] 6.1 运行 `ast.parse()` 验证所有修改文件语法正确 - [ ] 6.2 手动测试:搜索 → 分析 → 查看 `get_last_analysis()` 有值 → 下拉组件填充 → 选题写入 → 生成文案引用分析摘要 - [ ] 6.3 手动测试:启动自动采集 → 等待一轮完成 → 确认状态缓存更新