📝 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/)
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
schema: spec-driven
|
||||
created: 2026-02-26
|
||||
@@ -0,0 +1,36 @@
|
||||
## Context
|
||||
|
||||
项目工作区根目录(`f:\3_Personal\AI\xhs_bot\autobot\`)随开发过程积累了多个无用文件:旧版备份(`main_v1_backup.py`)、配置副本(`config copy.json`)、一次性测试脚本(`_test_config_save.py`)、临时记录(`Todo.md`)、运行日志(`autobot.log``)以及散落的个人图片(4 张 `.png`/`.jpg`)。
|
||||
|
||||
这些文件虽已被 `.gitignore` 排除出版本控制,但依然存在于工作区,干扰了目录可读性。无需改动任何运行时逻辑。
|
||||
|
||||
## Goals / Non-Goals
|
||||
|
||||
**Goals:**
|
||||
- 删除 5 个明确无用的文件
|
||||
- 将 4 张个人图片归入 `assets/faces/` 目录并更新 `.gitignore`
|
||||
- 完善 `.gitignore` 注释与规则覆盖
|
||||
- 建立 `project-structure` 规范 spec,为后续维护提供参考
|
||||
|
||||
**Non-Goals:**
|
||||
- 不将根目录服务文件(`analytics_service.py`、`llm_service.py` 等)迁移至 `services/`(涉及 import 改动,留作独立变更)
|
||||
- 不修改任何 Python 业务代码
|
||||
- 不调整 Docker / CI 配置
|
||||
|
||||
## Decisions
|
||||
|
||||
**决策 1:图片归档至 `assets/faces/`**
|
||||
- 选择 `assets/faces/` 而非直接删除,因为换脸功能可能在 UI 中需要默认头像路径,保留文件可避免破坏演示/教学场景
|
||||
- 替代方案:直接删除 → 风险是用户文档引用了这些文件路径
|
||||
|
||||
**决策 2:`assets/faces/` 整体纳入 `.gitignore`**
|
||||
- 个人图片属于隐私敏感数据,不应进入版本控制
|
||||
- 在 `.gitignore` 中新增 `assets/faces/` 规则,并补充注释
|
||||
|
||||
**决策 3:`Todo.md` 直接删除而非迁移**
|
||||
- 内容已过时且已有 openspec 任务管理体系替代,迁移意义不大
|
||||
|
||||
## Risks / Trade-offs
|
||||
|
||||
- **[风险] `my_face.png` 等文件路径可能被 `config.json` 引用** → 缓解:删除前检查 `config.json` 中是否存在相关路径字段;若存在则仅移动不删除,并在 `config.example.json` 中更新说明
|
||||
- **[风险] `_autostart.bat` / `_autostart.vbs` 与 `assets/faces/` 路径无关,但同属根目录非标准文件** → 此次保留,自动启动脚本属于有效使用场景
|
||||
@@ -0,0 +1,33 @@
|
||||
## Why
|
||||
|
||||
项目根目录混入备份文件、临时测试脚本、个人图片等无关文件,导致目录结构混乱、难以辨别哪些是正式代码。部分内容(人脸图片、日志文件)已被 `.gitignore` 排除但仍残留在工作区,须手动清理。
|
||||
|
||||
## What Changes
|
||||
|
||||
- **删除冗余/备份文件**:
|
||||
- `main_v1_backup.py`(旧版备份,已被 `.gitignore` 的 `*_backup.py` 规则覆盖)
|
||||
- `config copy.json`(配置副本,已被 `.gitignore` 覆盖)
|
||||
- `_test_config_save.py`(一次性测试脚本,无保留价值)
|
||||
- `Todo.md`(个人临时记录,已有 openspec 任务管理替代)
|
||||
- `autobot.log`(运行日志,已被 `*.log` 规则覆盖)
|
||||
|
||||
- **整理个人图片**:将散落在根目录的人脸/头像图片(`beauty.png`、`myself.jpg`、`my_face.png`、`zjz.png`)移入 `assets/faces/` 目录,更新 `.gitignore` 将该目录纳入忽略范围
|
||||
|
||||
- **评估根目录服务文件**:检查 `analytics_service.py`、`llm_service.py`、`sd_service.py`、`mcp_client.py`、`publish_queue.py`、`config_manager.py` 是否应迁移至 `services/`;若涉及大量 import 改动则列为独立后续变更,本次仅做评估记录
|
||||
|
||||
- **补全 `.gitignore`**:确保 `assets/faces/`、`*.log`、`__pycache__/` 等规则完整且注释清晰
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
- `project-structure`: 定义项目标准目录结构、根目录文件清单规范及 `.gitignore` 策略
|
||||
|
||||
### Modified Capabilities
|
||||
(无需修改现有 spec)
|
||||
|
||||
## Impact
|
||||
|
||||
- 删除 5 个文件,不影响任何运行时逻辑
|
||||
- `assets/faces/` 目录新增后,换脸功能的默认头像路径可能需要在 `config.example.json` 中更新说明
|
||||
- 对 Docker 构建无影响(`.dockerignore` 已存在)
|
||||
- 无 API 变更,无依赖变更
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 根目录只包含正式项目文件
|
||||
项目根目录 SHALL 不包含备份文件、一次性测试脚本、个人媒体资源或临时记录文件。具体地:
|
||||
|
||||
- `*_backup.py` 命名的文件 SHALL 不存在于根目录
|
||||
- `config copy.json`(或同类配置副本)SHALL 不存在
|
||||
- `_test_*.py` 命名的一次性测试脚本 SHALL 不存在于根目录
|
||||
- `*.log` 运行日志文件 SHALL 不进入版本控制(由 `.gitignore` 保证)
|
||||
- 个人图片(`.png`、`.jpg` 等媒体文件)SHALL 不散落在根目录,统一归入 `assets/` 下对应子目录
|
||||
|
||||
#### Scenario: 克隆仓库后根目录无冗余文件
|
||||
- **WHEN** 开发者执行 `git clone` 并查看根目录
|
||||
- **THEN** 根目录 SHALL 仅包含:`main.py`、服务模块文件(`*_service.py`、`*_client.py`、`*_manager.py`、`*_queue.py`)、标准配置(`config.example.json`、`requirements.txt`、`Dockerfile`、`docker-compose.yml`、`.gitignore`、`.dockerignore`)、自动启动脚本(`_autostart.*`)、文档(`README.md`、`CHANGELOG.md`、`CONTRIBUTING.md`、`mcp.md`)
|
||||
|
||||
#### Scenario: 备份文件不出现在版本控制
|
||||
- **WHEN** 开发者执行 `git status` 或 `git ls-files`
|
||||
- **THEN** 输出中 SHALL 不包含 `*_backup.py`、`config copy.json` 等备份/副本文件
|
||||
|
||||
### Requirement: 媒体资源归入 assets/ 目录
|
||||
项目所需的图片等媒体资源 SHALL 存放于 `assets/` 目录下的对应子目录,根据用途分类:
|
||||
|
||||
- 换脸/头像相关图片 SHALL 放入 `assets/faces/`
|
||||
- `assets/faces/` SHALL 被 `.gitignore` 覆盖(不进入版本控制,属隐私数据)
|
||||
|
||||
#### Scenario: 换脸图片存放路径符合规范
|
||||
- **WHEN** 用户配置换脸头像功能
|
||||
- **THEN** 头像文件 SHALL 存放于 `assets/faces/` 目录,而非项目根目录
|
||||
|
||||
#### Scenario: assets/faces/ 不进入版本控制
|
||||
- **WHEN** 开发者执行 `git status`
|
||||
- **THEN** `assets/faces/` 目录下的文件 SHALL 显示为已忽略(不出现在 staged 或 unstaged 区域)
|
||||
|
||||
### Requirement: .gitignore 覆盖所有非版本控制内容
|
||||
项目 `.gitignore` SHALL 包含以下规则类别,且每类规则 SHALL 有注释说明用途:
|
||||
|
||||
- Python 编译产物(`__pycache__/`、`*.py[cod]`)
|
||||
- 虚拟环境目录(`.venv/`、`venv/`)
|
||||
- 敏感配置(`config.json`、`cookies.json`、`*.cookie`)
|
||||
- 运行日志(`*.log`、`logs/`)
|
||||
- 备份与副本文件(`*_backup.py`、`config copy.json`)
|
||||
- 个人媒体资产(`assets/faces/`)
|
||||
- IDE 配置(`.vscode/`、`.idea/`)
|
||||
- 系统文件(`.DS_Store`、`Thumbs.db`)
|
||||
- 工作空间输出目录(`xhs_workspace/`)
|
||||
|
||||
#### Scenario: 新增备份文件不被 git 追踪
|
||||
- **WHEN** 开发者在根目录创建 `main_v2_backup.py`
|
||||
- **THEN** `git status` SHALL 将其显示为已忽略文件
|
||||
@@ -0,0 +1,25 @@
|
||||
## 1. 删除冗余文件
|
||||
|
||||
- [x] 1.1 删除 `main_v1_backup.py`(旧版备份,无保留价值)
|
||||
- [x] 1.2 删除 `config copy.json`(配置副本,无保留价值)
|
||||
- [x] 1.3 删除 `_test_config_save.py`(一次性测试脚本)
|
||||
- [x] 1.4 删除 `Todo.md`(临时记录,已由 openspec 替代)
|
||||
- [x] 1.5 删除 `autobot.log`(运行日志,已被 `.gitignore` 覆盖)
|
||||
|
||||
## 2. 整理图片资源
|
||||
|
||||
- [x] 2.1 创建 `assets/faces/` 目录
|
||||
- [x] 2.2 将 `my_face.png` 移入 `assets/faces/my_face.png`
|
||||
- [x] 2.3 将 `beauty.png`、`myself.jpg`、`zjz.png` 移入 `assets/faces/`
|
||||
- [x] 2.4 更新 `sd_service.py` 第 22 行的 `FACE_IMAGE_PATH`,将路径从 `"my_face.png"` 改为 `os.path.join(os.path.dirname(__file__), "assets", "faces", "my_face.png")`
|
||||
|
||||
## 3. 完善 .gitignore
|
||||
|
||||
- [x] 3.1 在 `.gitignore` 中新增 `assets/faces/` 规则,并加注释(个人头像不入版本控制)
|
||||
- [x] 3.2 确认 `.gitignore` 中 `*.log` 规则已存在(已有,检查确认即可)
|
||||
|
||||
## 4. 回归验证
|
||||
|
||||
- [ ] 4.1 启动应用 `python main.py`,确认换脸功能(⚙️ 配置 Tab AI 换脸头像)加载正常
|
||||
- [ ] 4.2 确认 `SDService.load_face_image()` 能正确读取新路径下的 `my_face.png`
|
||||
- [x] 4.3 执行 `git status` 确认 `assets/faces/` 已被忽略,根目录无残留冗余文件
|
||||
Reference in New Issue
Block a user