## ADDED Requirements ### Requirement: 服务层文件统一归入 services/ 包 所有业务服务模块 SHALL 位于 `services/` 目录下,根目录除 `main.py` 外 SHALL 不包含任何 `.py` 业务文件。 迁移文件清单: - `config_manager.py` → `services/config_manager.py` - `llm_service.py` → `services/llm_service.py` - `sd_service.py` → `services/sd_service.py` - `mcp_client.py` → `services/mcp_client.py` - `analytics_service.py` → `services/analytics_service.py` - `publish_queue.py` → `services/publish_queue.py` #### Scenario: 根目录不存在游离服务文件 - **WHEN** 开发者查看项目根目录 - **THEN** 根目录 SHALL 仅含 `main.py` 作为唯一 Python 入口,其余 `.py` 文件均位于 `ui/` 或 `services/` 子目录 ### Requirement: 外部模块使用绝对导入访问 services/ `main.py`、`ui/app.py`、`ui/tab_create.py` 等根目录/UI 层文件在导入服务模块时 SHALL 使用绝对导入格式 `from services. import ...`。 #### Scenario: main.py 正常启动无 ImportError - **WHEN** 在项目根目录执行 `python main.py` - **THEN** 应用 SHALL 正常启动,不抛出任何 `ImportError` 或 `ModuleNotFoundError` #### Scenario: UI 层导入路径正确 - **WHEN** 执行 `python -c "import ui.app"` - **THEN** 不抛出导入错误,所有 `from services.*` 引用 SHALL 可正常解析 ### Requirement: services/ 内部使用相对导入 `services/` 包内各模块之间的相互引用 SHALL 使用相对导入格式 `from . import ...`,不依赖根目录在 `sys.path` 中的位置。 #### Scenario: services 内部导入独立于运行上下文 - **WHEN** 在任意工作目录执行 `python -m services.scheduler`(或类似模块测试) - **THEN** 内部相对导入 SHALL 正常解析,不因工作目录不同而失败