## Why 当前项目已具备完整的核心功能(文案生成、图片绘制、发布队列、评论管家、数据分析),但在安全性、健壮性、可维护性上存在若干生产级隐患:配置文件明文保存 API Key、全局可变状态缺乏线程锁、临时文件无清理机制、单文件超 4400 行难以维护。这些问题会在长期运营中导致数据泄露、并发竞态或内存增长,亟需在持续迭代前统一修复。 ## What Changes - **安全加固**:`config.json` 中的 API Key 等敏感字段改用操作系统 keyring / 环境变量存储,文件中只保留非敏感配置 - **线程安全**:全局笔记缓存 (`_cached_proactive_entries` / `_cached_my_note_entries`) 及 `ConfigManager` 写操作加 `threading.Lock` - **临时文件清理**:发布完成或失败后自动清理 `_temp_publish/` 目录下的临时图片 - **原子写文件**:`analytics_service.py` 和 `config_manager.py` 的 JSON 持久化改为「写临时文件 → rename」方式,防止写中断导致数据损坏 - **发布前输入校验**:标题长度(≤20字)、正文长度、图片数量(1-18张)在提交发布前统一校验并给出明确提示 - **代码拆分**:将 `main.py` 的 Gradio UI 构建与业务逻辑分离,拆分为 `ui/` 目录下的多个 tab 模块,主文件只负责组装 ## Capabilities ### New Capabilities - `secure-config`:安全配置管理——敏感字段加密/外置存储,支持环境变量覆盖 - `thread-safe-cache`:线程安全的笔记列表缓存管理器,替换全局裸列表 - `temp-file-lifecycle`:临时发布文件的自动生命周期管理(创建→使用→清理) - `atomic-persistence`:JSON 持久化原子写操作,防止文件损坏 - `publish-input-validation`:发布前内容合规校验(长度/图片数/必填项) - `ui-module-split`:将 `main.py` UI 构建逻辑拆分为独立 tab 模块 ### Modified Capabilities (无现有 spec,首次建立规范) ## Impact - **`config_manager.py`**:`save()` 方法改为原子写;新增 `get_secure()` / `set_secure()` 接口 - **`analytics_service.py`**:`_save_analytics()` / `_save_weights()` 改为原子写 - **`publish_queue.py`**:无需修改(已使用 SQLite WAL,自身较健壮) - **`main.py`**: - 全局缓存变量引入 `threading.Lock` - `publish_to_xhs()` 增加校验逻辑与 temp 清理 - UI 构建代码逐步迁移至 `ui/tab_*.py` - **`requirements.txt`**:可能新增 `keyring` 依赖 - **无破坏性 API 变更**:所有 Gradio 回调签名保持不变