## ADDED Requirements ### Requirement: 会话级结构化分析状态存储 系统 SHALL 在 `services/hotspot.py` 中维护一个模块级变量 `_last_analysis: dict | None`,用于保存最近一次热点分析的完整结构化结果。 #### Scenario: 初始状态为空 - **WHEN** 应用启动且尚未执行任何热点分析 - **THEN** `get_last_analysis()` SHALL 返回 `None` #### Scenario: 分析完成后自动写入 - **WHEN** `analyze_and_suggest` 成功调用 `LLMService.analyze_hotspots()` 并获得结构化 dict - **THEN** 系统 SHALL 调用 `set_last_analysis(analysis)` 将结果写入 `_last_analysis` #### Scenario: 并发安全 - **WHEN** 多个线程同时调用 `get_last_analysis()` 和 `set_last_analysis()` - **THEN** 所有读写操作 SHALL 通过 `_cache_lock`(RLock)互斥,不发生数据竞态 ### Requirement: 线程安全的分析状态存取接口 系统 SHALL 提供 `get_last_analysis() -> dict | None` 和 `set_last_analysis(data: dict) -> None` 两个公开函数。 #### Scenario: get_last_analysis 返回深拷贝 - **WHEN** 调用 `get_last_analysis()` - **THEN** SHALL 返回 `_last_analysis` 的副本(而非引用),防止外部修改影响缓存 #### Scenario: set_last_analysis 合并多关键词结果 - **WHEN** 调用 `set_last_analysis(new_data)` 且 `_last_analysis` 已有数据 - **THEN** SHALL 将 `new_data` 的 `hot_topics` 和 `suggestions` 追加到已有列表并去重,而非完全覆盖