From 9742448750abc2a6ee6bef5c8605a3ad82d24d7f Mon Sep 17 00:00:00 2001 From: chengma Date: Fri, 10 Jul 2026 08:55:16 +0800 Subject: [PATCH] docs(tasks): add T-579 default prompts packaging --- docs/tasks/T-579.md | 62 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 docs/tasks/T-579.md diff --git a/docs/tasks/T-579.md b/docs/tasks/T-579.md new file mode 100644 index 0000000..74b6bad --- /dev/null +++ b/docs/tasks/T-579.md @@ -0,0 +1,62 @@ +--- +id: T-579 +title: 打包版内置默认标题和封面提示词,首次运行自动写入用户 data +phase: 8 +deps: [T-524, T-538, T-540] +status: TODO +created: 2026-07-10 +--- + +## 问题 / 背景 + +当前 release 包不包含 `data/title_prompt.txt` 和 `data/prompts/cover/*.txt`。全新用户第一次打开软件时,②AI生成模块的标题提示词为空,封面模板下拉只显示空占位「默认」,用户必须先手工填写提示词才能使用。 + +用户希望把当前已验证使用的标题提示词和封面提示词模板随打包版本一起提供,让最终用户安装后无需手动填写即可直接生成标题和封面。 + +必须注意:`data/` 是用户数据目录,包含配置、数据库、账号登录态、图片、日志和可能的密钥,**不能整体打进 release 包**。本任务只能打包“默认提示词资源”,并在用户本地缺失提示词时初始化到 `data/`。 + +## 方案 + +### 1. 新增内置默认提示词资源 + +- 新增 `app/default_prompts/title_prompt.txt`:来自当前本机 `data/title_prompt.txt`,发布前已人工检查不包含 API Key、Cookie、账号密码等密钥类内容。 +- 新增 `app/default_prompts/cover/papa1.txt`:来自当前本机 `data/prompts/cover/papa1.txt`,发布前已人工检查不包含 API Key、Cookie、账号密码等密钥类内容。 +- 新增 `app/default_prompts/__init__.py`,使其作为应用资源包存在。 + +### 2. 首次运行自动初始化到用户 `data/` + +- 在 `app/prompts.py` 增加默认提示词初始化函数,例如 `ensure_default_prompts(...)`。 +- 初始化规则: + - 若用户 `data/title_prompt.txt` 不存在或为空,则写入内置默认标题提示词。 + - 若用户 `data/prompts/cover/` 下没有任何 `.txt` 模板,则复制内置默认封面模板。 + - 若用户已经有标题提示词或封面模板,**不得覆盖**。 +- ②AI生成页初始化时,在读取提示词前调用该函数,确保首开界面能直接看到默认标题提示词和封面模板。 + +### 3. 打包脚本包含默认资源,但仍排除用户数据 + +- 修改 `cmshopee.spec`,把 `app/default_prompts/**/*.txt` 作为 PyInstaller data 放入 `_internal/app/default_prompts/...`。 +- 保持 `scripts/build_exe.ps1` 的用户数据排除规则不变:`data/`、`title_prompt.txt`、`prompts/`、DB、配置、图片、日志、登录态仍不得出现在 release 根目录。 +- 发布包允许包含 `_internal/app/default_prompts/...`,这是只读默认资源,不是用户数据。 + +## 验收要点 + +- 全新 data 目录下打开②AI生成页后: + - 自动生成 `data/title_prompt.txt`,内容等于内置默认标题提示词。 + - 自动生成 `data/prompts/cover/papa1.txt`,封面模板下拉显示 `papa1` 且内容回显。 +- 用户已有 `data/title_prompt.txt` 时不覆盖用户内容。 +- 用户已有任意封面模板时不复制默认 `papa1`,不打乱用户模板。 +- `cmshopee.spec` 会把 `app/default_prompts` 文本资源打进 PyInstaller 包。 +- release 根目录和 zip 仍不包含用户数据:`data/`、根 `title_prompt.txt`、根 `prompts/`、DB、配置、图片、日志、登录态。 +- 验证命令: + - `py -3.10 -m unittest tests.test_prompts tests.test_gui tests.test_packaging` + - `python -m ruff check app tests main.py` + - `py -3.10 -m compileall app main.py` + - `py -3.10 -m unittest discover -s tests` + - `git diff --check` + +## 边界(不改什么) + +- 不把整个 `data/` 打进 release 包。 +- 不提交 `data/config.json`、`data/config/cmhub.json`、`data/cmshopee.db`、`data/images/`、`data/chrome_user_data_dir/`、`data/logs/`。 +- 不改 AI/cmhub 请求协议、生成并发、DB schema、Excel、Shopee/CDP 更新流程。 +- 不在升级时覆盖用户已经修改过的提示词。