feat: add versioned release packaging

This commit is contained in:
chengma
2026-07-07 14:21:30 +08:00
parent 148c4a73eb
commit 7838554c3d
14 changed files with 407 additions and 113 deletions
+20 -14
View File
@@ -1,6 +1,6 @@
# 常见问题排查
> 本文只记录可复用的本地排障步骤。T-538 后用户数据默认位于 `data/`,涉及 `data/config.json`、`data/data/config/ai_models.json`、`data/config/cmhub.json`、`data/cmshopee.db`、`data/chrome_user_data_dir/`、`data/images/` 时,默认它们是本机敏感或业务数据,必须保持 gitignore,不把真实密码、API Key、Cookie、token 写入文档、日志或提交。
> 本文只记录可复用的本地排障步骤。T-538 后用户数据默认位于 `data/`,涉及 `data/config.json`、`data/config/ai_models.json`、`data/config/cmhub.json`、`data/cmshopee.db`、`data/chrome_user_data_dir/`、`data/images/` 时,默认它们是本机敏感或业务数据,必须保持 gitignore,不把真实密码、API Key、Cookie、token 写入文档、日志或提交。
## 启动时报 “AI 模型 category 必须是 text 或 image”
@@ -14,17 +14,17 @@ AI 模型 category 必须是 text 或 image
### 原因
`data/data/config/ai_models.json` 是本地 AI 模型清单,里面每个模型都必须有合法的 `category`:
`data/config/ai_models.json` 是本地 AI 模型清单,里面每个模型都必须有合法的 `category`:
- `text`:标题生成模型,会出现在“标题大模型”下拉。
- `image`:封面生成模型,会出现在“图片大模型”下拉。
早期或手工维护过的 `data/data/config/ai_models.json` 可能缺少 `category`,或者填了中文、空值、旧字段,导致 `appconfig.load_ai_models_config()` 严格校验失败,GUI 启动被阻断。
早期或手工维护过的 `data/config/ai_models.json` 可能缺少 `category`,或者填了中文、空值、旧字段,导致 `appconfig.load_ai_models_config()` 严格校验失败,GUI 启动被阻断。
### 不要这样做
- 不要删除 `data/data/config/ai_models.json` 来“重置”,否则会丢失本地明文 API Key 和模型配置。
- 不要把 `data/data/config/ai_models.json` 提交到 git。
- 不要删除 `data/config/ai_models.json` 来“重置”,否则会丢失本地明文 API Key 和模型配置。
- 不要把 `data/config/ai_models.json` 提交到 git。
- 不要把完整文件内容贴到聊天、文档或日志里;该文件含本地明文 API Key。
### 推荐修复
@@ -35,7 +35,7 @@ AI 模型 category 必须是 text 或 image
python -c "import json; p='data/config/ai_models.json'; data=json.load(open(p,encoding='utf-8')); [print({'index': i+1, 'name': m.get('name'), 'category': m.get('category'), 'api_type': m.get('api_type'), 'enabled': m.get('enabled'), 'has_api_key': bool(m.get('api_key'))}) for i,m in enumerate(data.get('models', []))]"
```
然后手工编辑 `data/data/config/ai_models.json`,只补这些字段:
然后手工编辑 `data/config/ai_models.json`,只补这些字段:
```json
{
@@ -75,7 +75,7 @@ print('updated' if changed else 'unchanged')"
python -c "import os,sys; sys.path.insert(0, os.getcwd()); from app import appconfig; print([(m['name'], m['category'], m['enabled'], m['api_key_set']) for m in appconfig.list_ai_models()])"
```
确认 `data/data/config/ai_models.json` 仍被忽略:
确认 `data/config/ai_models.json` 仍被忽略:
```powershell
git status --short --ignored data/config/ai_models.json
@@ -125,7 +125,7 @@ https://api.vectorengine.ai/v1
https://api.vectorengine.ai/v1/chat/completions
```
如果仍然 404,优先检查服务商文档要求的 endpoint 路径和 `api_type`,不要把 `data/data/config/ai_models.json` 或 API Key 贴到日志、文档或聊天里。
如果仍然 404,优先检查服务商文档要求的 endpoint 路径和 `api_type`,不要把 `data/config/ai_models.json` 或 API Key 贴到日志、文档或聊天里。
### 非敏感检查
@@ -207,7 +207,7 @@ T-530 已实现:保存和请求前都会把 Base URL 规整为网关根,去
2. 如果②状态列显示“生成失败”:留在②,确认 cmhub Base URL、API Key、别名和点数正常后,直接点击「开始生成」重试当前筛选结果。
3. 如果②状态列显示“更新失败”:到③更新shopee处理;需要重复更新时使用③的重置更新状态入口,不要在②重新生成。
排查时不要把 `data/cmshopee.db`、`data/config/cmhub.json`、`data/data/config/ai_models.json` 或任何 API Key、密码、Cookie 发到聊天、文档或提交里。
排查时不要把 `data/cmshopee.db`、`data/config/cmhub.json`、`data/config/ai_models.json` 或任何 API Key、密码、Cookie 发到聊天、文档或提交里。
## AI生成:标题成功但图片生成失败,且看不到原因
@@ -216,7 +216,7 @@ T-530 已实现:保存和请求前都会把 Base URL 规整为网关根,去
- 页面右下「AI生成运行日志」显示最近一次 `run_type=generate` 的逐条事件,例如 `phase=cover step=cover_request result=failed detail=...`。
- 本地 `data/logs/cmshopee.log` 保存脱敏后的 traceback、任务 id、alias、item_id、phase 和 step,用于判断卡在模型配置、封面请求、图片解析、保存文件还是写库。
排查顺序:先看 ② 页面运行日志里的 `phase` / `step` / `detail`;如果只看到简短错误,再查看本地 `data/logs/cmshopee.log`。不要把 `data/data/config/ai_models.json` 或 API Key 发到聊天、文档或提交里。
排查顺序:先看 ② 页面运行日志里的 `phase` / `step` / `detail`;如果只看到简短错误,再查看本地 `data/logs/cmshopee.log`。不要把 `data/config/ai_models.json` 或 API Key 发到聊天、文档或提交里。
## ④启动登录重复打开 Chrome
@@ -232,17 +232,23 @@ T-530 已实现:保存和请求前都会把 Base URL 规整为网关根,去
### 现象
在 Windows 10 虚拟机或小分辨率环境运行打包后的 `dist/cmshopee/cmshopee.exe` / release 包后,主窗口出现在屏幕左上角,左边和标题栏显示不全,看不到「蝦皮圈優化助手」标题,导致无法用鼠标拖动窗口到中间。
在 Windows 10 虚拟机或小分辨率环境运行打包后的 `dist/cmshopee/cmshopee.exe` / `release/cmshopee-<版本>-portable.zip` 后,主窗口出现在屏幕左上角,左边和标题栏显示不全,看不到「蝦皮圈優化助手 v<版本>」标题,导致无法用鼠标拖动窗口到中间。
### 原因
旧逻辑只设置固定窗口大小:
修复前旧逻辑只设置了固定窗口大小:
```python
self.resize(1180, 760)
```
没有按当前屏幕可用区域限制初始尺寸、居中显示,也没有保证窗口标题栏完整落在屏幕内。虚拟机、小分辨率、高 DPI、任务栏占用较多或多显示器切换环境下更容易暴露该问题;PyInstaller 打包不是根因。
没有按当前屏幕可用区域做以下处理:
- 限制初始尺寸不超过屏幕可用区域。
- 居中显示。
- 保证窗口 frame/title bar 完整落在屏幕内。
因此在虚拟机、小分辨率、高 DPI、任务栏占用较多或多显示器切换环境下,Qt/Windows 默认放置窗口时可能让标题栏或左边缘落到屏幕外。PyInstaller 打包不是根因,只是打包版更常在目标虚拟机里暴露该问题。
### 临时处理
@@ -261,7 +267,7 @@ T-541 已在主窗口启动时读取 `QApplication.primaryScreen().availableGeom
- 大屏保持接近 `1180x760`。
- 小屏自动缩小到可用区域内。
- `resize()` 后按可用区域居中 `move()`。
- 确保窗口左上角不小于可用区域左上角,标题栏完整可见、可拖动。
- 确保窗口 frame 左上角不小于可用区域左上角,标题栏完整可见、可拖动。
- 不保存坏的历史窗口坐标,避免下次继续打开到屏幕外。
修复后需要在普通桌面和 Windows 10 虚拟机/小分辨率环境各启动一次打包版,确认标题栏完整可见。