zhoujie 2ba87c8f6e
Some checks failed
CI / Lint (ruff) (push) Has been cancelled
CI / Import Check (push) Has been cancelled
📝 docs(project): 添加开源社区标准文档与 CI 工作流
- 新增 GitHub Issue 模板(Bug 报告、功能请求)和 Pull Request 模板
- 新增 Code of Conduct(贡献者行为准则)和 Security Policy(安全政策)
- 新增 CI 工作流(GitHub Actions),包含 ruff 代码检查和导入验证
- 新增开发依赖文件 requirements-dev.txt

📦 build(ci): 配置 GitHub Actions 持续集成

- 在 push 到 main 分支和 pull request 时自动触发 CI
- 添加 lint 任务执行 ruff 代码风格检查
- 添加 import-check 任务验证核心服务模块导入

♻️ refactor(structure): 重构项目目录结构

- 将根目录的 6 个服务模块迁移至 services/ 包
- 更新所有相关文件的导入语句(main.py、ui/、services/)
- 根目录仅保留 main.py 作为唯一 Python 入口文件

🔧 chore(config): 调整配置和资源文件路径

- 将 config.json 移至 config/ 目录,更新相关引用
- 将个人头像图片移至 assets/faces/ 目录,更新 .gitignore
- 更新 Dockerfile 和 docker-compose.yml 中的配置路径

📝 docs(readme): 完善 README 文档

- 添加项目状态徽章(Python 版本、License、CI)
- 更新项目结构图反映实际目录布局
- 修正使用指南中的 Tab 名称和操作路径
- 替换 your-username 占位符为格式提示

🗑️ chore(cleanup): 清理冗余文件

- 删除旧版备份文件、测试脚本、临时记录和运行日志
- 删除散落的个人图片文件(已归档至 assets/faces/)
2026-02-27 22:12:39 +08:00

3.4 KiB
Raw Permalink Blame History

Context

当前项目根目录同时存在 6 个业务服务文件(config_manager.pyllm_service.pysd_service.pymcp_client.pyanalytics_service.pypublish_queue.py)与 services/ 包目录并列,架构层次混乱。services/ 下游代码(scheduler.py通过裸名导入flat import引用这些文件依赖 Python 将根目录隐式加入 sys.path 这一运行时特性。

迁移约束:

  • services/__init__.py 已存在,services/ 是合法 Python 包
  • 所有受影响文件共约 20 处 import分布在 main.pyui/app.pyui/tab_create.pyservices/*.py
  • 必须保证 Python 不产生循环导入circular import

Goals / Non-Goals

Goals:

  • 将 6 个服务文件移入 services/,根目录只保留 main.py 一个 Python 文件
  • 所有 import 使用绝对路径(from services.xxx import ...),保持一致性、可读性
  • services/ 内部文件之间使用相对导入(from .xxx import ...),减少路径依赖
  • 不引入任何新的运行时依赖或行为变更

Non-Goals:

  • 不拆分或合并任何模块的内部逻辑
  • 不更改 services/__init__.py 的公开导出(除非需要兼容性垫片)
  • 不迁移 ui/ 下的文件(已有独立模块结构)

Decisions

决策 1外部文件用绝对导入 from services.xxx import ...

  • main.pyui/app.pyui/tab_create.py 均从根目录运行,绝对导入路径清晰、错误信息可读
  • 替代:在 services/__init__.py 重新导出所有符号(向后兼容)→ 增加维护负担,拒绝

决策 2services/ 内文件之间用相对导入 from .xxx import ...

  • 避免 services/ 内部对根目录的隐式依赖,打包或测试时不受 sys.path 影响
  • 替代:也用绝对导入 → 可行但不如相对导入内聚

决策 3分两阶段迁移先移文件再改 import

  • 防止中间状态同时修改多文件导致错误难以定位
  • 迁移顺序:config_managermcp_clientllm_servicesd_serviceanalytics_servicepublish_queue(按依赖深度从浅到深)

决策 4不添加兼容性垫片shim

  • 项目无外部 PyPI 消费者,无向后兼容压力,直接修改所有 import 更干净

Risks / Trade-offs

  • [风险] services/ 内循环导入 → 缓解:迁移前用 grep 确认依赖关系,config_manager 通常是叶节点(最少依赖),优先迁移
  • [风险] ui/app.py 在迁移中途启动失败 → 缓解:一次性修改所有文件 import不留半迁移状态迁移后立即用 ast.parse() 验证语法
  • [风险] Dockerfile COPY . . 已是整目录复制 → 无影响,services/ 子目录正常复制
  • [风险] CI 首次运行可能因 GitHub Secrets 缺失(如无 GITHUB_TOKEN)报错 → 缓解CI 仅做静态检查,不需要 Secrets

Migration Plan

  1. 将 6 个文件 Move-Itemservices/
  2. 批量替换所有外部文件(main.pyui/*.py)中的 importfrom xxxfrom services.xxx
  3. 批量替换 services/*.py 中的内部 importfrom xxxfrom .xxx
  4. 语法验证:对所有修改文件执行 ast.parse()
  5. 启动验证:python -c "from ui.app import build_app" 确认无导入错误

回滚方案: 删除 services/ 下新迁移的文件,将 git 恢复(或手动移回根目录),改回 import