2026-06-26 15:30:37 +08:00
# 当前实现状态
> 本文是可覆盖的当前快照,记录代码与任务看板的现实状态。
> 历史执行流水追加到 [`../progress.md`](../progress.md),不在本文重复完整日志。
## 当前快照
2026-06-29 08:58:39 +08:00
- 日期:2026-06-29
2026-06-29 17:49:45 +08:00
- 阶段:V0 单账号 CDP 流程已验证;V1 已完成 T-000 正式代码包结构、T-001 `app/editor.py` 模块化、T-002 `app/appconfig.py` 应用配置、T-003 SQLite 持久化地基、T-004 本地数据忽略规则、T-005 AI 模型清单后端、T-006 单元测试基座、T-101 账号 user-data-dir 工具、T-102 Chrome 启动器、T-103 登录保活与检测、T-104 PySide6 主窗口骨架、T-104b PySide6 worker 基座、T-105 Tab④ 账号管理、T-106 账号快捷方式、T-201 Excel 导入入库、T-202 Tab① 任务列表与导入按钮、T-202b Tab① 导入汇总栏、T-203 采集旧标题旧封面、T-204 回写旧字段到原 Excel、T-204b 采集完成自动回写、T-205 首次未配账号/Chrome 未启动/未登录引导保护、T-205b 采集后关闭自动新建商品页 tab、T-301 AI 生成接口、T-302 Tab② AI 生成布局与任务列表、T-302p 提示词管理、T-303 Tab② 开始生成/停止/进度、T-303b ②/③ 商品ID筛选、T-401 Tab③ 更新列表筛选与开始更新确认、T-402 Tab③ 确认后串行更新、T-403 Tab③ 结果回写与结束汇总、T-501 Tab⑤ AI 模型管理 UI、T-501b Tab⑤ 角色与生成参数、T-501c Tab⑤ Shopee 更新安全开关、T-502 满 9 张封面删除再上传、T-503 敏感信息本地明文保存提示与日志脱敏、T-504 多账号并行/dry-run/运行日志、T-207 ①采集诊断日志、② AI生成图片失败诊断日志补丁。
2026-06-27 15:47:21 +08:00
- 技术栈:Python 3.10+,自研 CDP( websocket-client + requests),SQLite( sqlite3) + `config.json` + openpyxl + AI( `config/ai_models.json` 通用 HTTP, chat JSON / images_edits),GUI PySide6 5 Tab(已定)。
2026-06-29 17:49:45 +08:00
- 生产代码:已建立 `app/` 包 + 根入口 `main.py` ; `app/cdp.py` 为已验证 CDP 底座,已区分 `CDP.close()` 断开 WebSocket 与 `close_tab()` 关闭浏览器 target; `app/editor.py` 已封装登录状态检测、标题/封面/采集/更新按钮能力,并在采集结束后只关闭本轮自动新建的商品编辑页 tab、保留用户已有 tab,更新提交成功且设置开启时可关闭本轮自动新建商品页;`replace_cover()` 已实现满 9 张时先校验本地旧封面备份,再点第一张删除、可见确认框、上传新图并拖到第一位的代码路径;`app/appconfig.py` 已实现 `config.json` 默认值/读写/更新、AI 参数、端口读取、Shopee 更新安全与执行模式默认值,`config/ai_models.json` 模型清单 CRUD/过滤/打码/测试连接与 OpenAI-compatible base URL 自动补 endpoint,以及 `mask_secret()` 、`sanitize_for_log()` 、`redact_secrets()` 敏感信息脱敏工具;`app/ai.py` 已实现 `gen_title()` /`gen_cover()` /`generate_batch()` ,按默认文本/图片模型发起通用 HTTP 调用,支持重试、错误脱敏、图片 URL/base64 解析、resolution resize、jpg_quality 保存、先并发标题再并发封面、逐条 `set_generated` 、失败 `mark_failed` 、步骤级事件/错误回调与停止取消未开始项;`app/prompts.py` 已实现标题提示词读写、封面模板 CRUD 与变量替换;`app/db.py` 已实现 SQLite schema、连接 PRAGMA、批次/账号/任务与阶段写库函数,以及 `run_logs/run_log_events` 运行日志函数;`app/diagnostics.py` 已实现 gitignore 本地诊断日志、滚动写入、结构化 payload 和自由文本脱敏;`app/excel.py` 已实现多 Excel 输入列解析、整文件列校验、脏行统计跳过、导入批次与任务入库、别名匹配统计、旧标题/旧封面路径回写原 Excel、更新结果回写原 Excel 与另存副本;`app/config.py` 已实现账号 slug 与 user-data-dir 创建;`app/accounts.py` 已实现账号 CRUD 服务、端口默认分配、启动登录、检测登录、生成快捷方式;`app/chrome.py` 已实现 Chrome 参数拼装、启动、CDP 端口探测、PowerShell `.lnk` 快捷方式生成;`app/gui.py` 已实现 PySide6 `MainWindow` 、五 Tab、顶部 Tab 栏防误点样式、① 导入采集的 Excel 导入按钮/导入汇总栏/QTableView 任务列表/未匹配筛选与略过标记/采集旧标题旧封面 worker/采集前账号就绪预检与④引导/采集完成自动回写/旧数据回写重试按钮与 worker/采集运行日志视图、② AI生成左右布局/标题与封面提示词管理/批次/店铺/商品ID/状态筛选/任务列表/变量预览/开始生成/停止/进度/双击新旧封面预览/AI生成运行日志与 `GenerateWorker` 、③ 更新shopee批次/店铺/商品ID/状态筛选栏/任务列表/更新安全开关拦截/开始更新确认弹窗/确认后 `ApplyWorker` dry-run 预览或真实更新/账号就绪和端口冲突预检/按账号并行可选/逐条 `set_applied` /运行日志/自动回写结果到 Excel/结束汇总弹窗/手动回写重试按钮、④ 账号管理表格/弹窗/按钮/快捷方式与状态栏、密码明文保存提示、⑤ 设置 AI 模型同列上下布局、两列详情/参数表单、API Key 明文保存提示、`AIModelTestWorker` 后台测试连接、角色/生成参数/路径/端口配置、Shopee 更新安全和 dry-run/多账号并行设置并持久化 `config.json` ; `app/workers.py` 已实现 `BaseWorker` 、通用 signals、取消标记和 `QThread` 启动包装。
- 测试:`tests/` 已建立;T-006 后纯逻辑改动必须运行 `python -m unittest discover -s tests` ,当前覆盖 appconfig/db/config/accounts/chrome 启动与快捷方式/editor 登录检测与商品 tab 生命周期、更新成功后关闭本轮新开 tab、满 9 张封面备份缺失阻断/删除确认/上传拖首位 mock 路径/excel 导入/旧字段与更新结果回写/ai 标题与封面 HTTP 解析/`generate_batch` 正常、失败与停止/prompts 读写与渲染/gui ① 导入采集与采集诊断日志/gui ② AI生成布局与批次/店铺/商品ID/状态筛选、提示词管理、生成 worker、图片失败诊断日志与双击预览/gui ③ 更新shopee批次/店铺/商品ID/状态筛选列表、确认弹窗、Shopee 更新安全拦截、`ApplyWorker` 串行/dry-run/按账号并行/端口冲突预检、运行日志、结果回写与汇总/gui ④ 账号管理、密码打码与明文保存提示/gui ⑤ AI 模型管理、API Key 打码与明文保存提示、角色/生成参数设置、Shopee 更新安全设置、dry-run/多账号并行设置/worker signal 与线程包装;CDP/Shopee 改动仍需测试商品手动验证。
- 数据:`config.json` 、`config/ai_models.json` 、`cmshopee.db` 、`cmshopee.db-*` 、`chrome_user_data_dir/` 、`images/` 、`logs/` 已由 `.gitignore` 排除;密码与 API Key 本地明文保存但保存/变更时提示,UI 打码,日志/导出必须脱敏;运营填写后的 Excel 业务文件默认忽略,标准空模板 `shopee待处理任务模板.xlsx` 可提交;`app/appconfig.py` 首次读取缺失的 `config.json` 时会在本地写默认配置,`app/db.py` 调用 `init_db()` 时会在本地创建 SQLite DB。
2026-06-26 15:30:37 +08:00
## 既定设计要点(文档已定)
2026-06-26 16:09:09 +08:00
- GUI: **PySide6 5 Tab 流水线**,顺序 ① 导入采集 → ② AI生成 → ③ 更新shopee → ④ 账号管理 → ⑤ 设置;后台任务用 worker/QThread/signal。
2026-06-26 15:55:28 +08:00
- 流水线阶段:imported → collected(采集旧标题/旧封面+下载+回写)→ generated(AI 提示词生成新标题/新封面)→ applied(③ 弹窗批量确认后改 Shopee 并提交)。**无 confirmed、无常驻提交开关。**
2026-06-29 10:05:16 +08:00
- 存储:`config.json` (应用设置)+ `config/ai_models.json` (AI 模型清单与本地明文 Key) + SQLite `cmshopee.db` (账号/任务/各阶段结果,密码本地明文仅参考)+ openpyxl( Excel) + 本地 `images/` (旧/新封面);密码/API Key 保存或变更时提示,展示和日志/导出必须脱敏。
2026-06-26 15:30:37 +08:00
- 多账号隔离:每账号独立 user-data-dir(非 profile)。
- 账号↔任务绑定:以 Excel“别名”列为权威;未匹配略过,结束弹窗汇总。
2026-06-29 10:25:09 +08:00
- 执行:默认多账号串行、单条失败继续;⑤ 可开启 dry-run 只预览不提交、不改任务状态,可开启多账号并行(不同账号并行、同账号内串行)。③ 点击「开始更新」后先按模式检查 ⑤ 设置,再弹窗确认当前筛选范围和任务数量;真实更新确认后逐条点「更新」提交线上。
2026-06-27 15:47:21 +08:00
- AI:服务商/模型/Key 由 `config/ai_models.json` 配置;`app/ai.py` 支持 chat JSON 与 images_edits multipart;生成内容直接用于更新,本地留档+回写 Excel 供追溯。
2026-06-27 15:28:33 +08:00
- 登录:人工登录 + 程序检测,不自动登录;无 Shopee tab 时检测入口为 `https://<region_host>/` (默认 `https://seller.shopee.tw/` );首次未配账号、对应账号 Chrome 未启动或未登录时,① ③ 应禁用或执行前预检提示,并引导去④。
2026-06-26 15:30:37 +08:00
## 当前目录要点
| 路径 | 状态 | 说明 |
| --- | --- | --- |
| `docs/` | 已有 | 本 harness coding 文档集合 |
2026-06-27 16:39:12 +08:00
| `app/cdp.py` | 已有 | CDP 底座:连接/找 tab/开 tab/关闭 target/执行 JS/拖拽;`CDP.close()` 只断开 WebSocket, `close_tab()` 才关闭浏览器页面 |
2026-06-27 09:02:05 +08:00
| `prototypes/` | 已有 | 已验证原型/探查脚本(demo/set_title/set_cover/get_title/cookies/inspect_images/grab/1.py),保留作人工回归与探查参考;见 `prototypes/README.md` |
2026-06-26 15:30:37 +08:00
| `chrome-remote-debug-lan.md` | 已有 | WSL→Windows CDP 转发排查记录 |
2026-06-29 10:37:27 +08:00
| `docs/troubleshooting.md` | 已有 | 常见问题排查;已记录 `config/ai_models.json` 缺失 `category` 导致 GUI 启动报 “AI 模型 category 必须是 text 或 image” 的原因、修复和验证步骤 |
2026-06-26 17:24:23 +08:00
| `app/__init__.py` / `app/__main__.py` / `main.py` | 已有 | 正式包与启动入口;`python main.py` / `python -m app` 可运行占位入口 |
2026-06-29 17:49:45 +08:00
| `app/gui.py` | 已有 | T-104/T-105/T-106/T-202/T-202b/T-203/T-204/T-204b/T-205/T-207/T-302/T-302p/T-303/T-303b/T-401/T-402/T-403/T-501/T-501b/T-501c/T-503/T-504 产出:PySide6 `QMainWindow` + 五 Tab;顶部 Tab 栏防误点样式;① 导入采集导入按钮、导入汇总栏、`QTableView` 任务列表、未匹配筛选与略过标记、采集旧标题旧封面 worker、采集前账号就绪预检与④引导、采集完成自动回写与手动重试、采集运行日志视图;② AI生成左右布局、提示词管理、批次/店铺/商品ID/状态筛选栏、任务列表、开始生成/停止/进度、双击新旧封面预览、AI生成运行日志与 `GenerateWorker` ;③ 更新shopee批次/店铺/商品ID/状态筛选栏、任务列表、Shopee 更新安全拦截、开始更新确认弹窗、`ApplyWorker` 串行/dry-run/按账号并行、账号与端口预检、运行日志、逐条 `set_applied` 、自动回写结果到 Excel、结束汇总弹窗与手动回写重试;④ 账号管理表格、账号弹窗、密码本地明文保存提示、启动登录、检测登录、快捷方式;⑤ 设置 AI 模型下拉、新增/删除、详情编辑、密钥打码与本地明文保存提示、测试连接 worker、默认角色下拉、生成参数、路径端口配置、Shopee 更新安全与执行模式设置 |
2026-06-27 10:05:29 +08:00
| `app/workers.py` | 已有 | T-104b 产出:`BaseWorker` + 通用 signals + 取消标记 + `run_worker()` QThread 包装 |
2026-06-27 10:38:21 +08:00
| `app/accounts.py` | 已有 | T-105/T-106 产出:账号 CRUD 服务、目录创建、端口分配、启动登录、检测登录、快捷方式 |
2026-06-29 17:49:45 +08:00
| `app/editor.py` | 已有 | T-001/T-103/T-205b/T-207/T-501c/T-502 产出:登录状态检测、打开商品页、读/写标题、读/下载封面、采集步骤回调、采集后关闭自动新建商品页 tab、上传拖封面、满 9 张先校验旧封面备份再删第一张并上传、更新按钮、apply_task;更新成功后可按设置关闭本轮自动新建商品页 |
2026-06-29 10:25:09 +08:00
| `app/appconfig.py` | 已有 | T-002/T-501c/T-503/T-504 产出:`config.json` 默认值、读写、更新、路径/端口/AI 参数读取、Shopee 更新安全与 dry-run/多账号并行默认值;拒绝敏感字段写入;提供敏感值打码、结构化日志脱敏与自由文本替换工具 |
2026-06-29 17:49:45 +08:00
| `app/diagnostics.py` | 已有 | T-207 + AI生成诊断补丁产出:本地 `logs/cmshopee.log` 诊断日志、大小滚动、异常类型/traceback/step/耗时记录,结构化 payload 和自由文本脱敏后写入 |
| `app/ai.py` | 已有 | T-301/T-303 + AI生成诊断补丁产出:`gen_title()` /`gen_cover()` /`generate_batch()` ;读取默认模型;通用 HTTP 调用;失败重试;错误脱敏;标题/封面步骤级回调;封面按 resolution/jpg_quality 保存;批量生成先标题后封面、进度回调、逐条落库、失败标记、事件/错误回调、停止取消未开始项 |
2026-06-27 16:10:50 +08:00
| `app/prompts.py` | 已有 | T-302p 产出:标题提示词读写、封面模板列表/读取/保存/重命名/删除、变量替换 |
2026-06-29 10:25:09 +08:00
| `app/db.py` | 已有 | T-003/T-504 产出:batches/accounts/tasks schema; run_logs/run_log_events; WAL/busy_timeout/foreign_keys;账号/批次/任务与 set_* 阶段写库;运行日志写入与查询 |
2026-06-27 09:21:33 +08:00
| `app/config.py` | 已有 | T-101 产出:别名→稳定 slug;创建并返回绝对 user-data-dir |
2026-06-27 10:38:21 +08:00
| `app/chrome.py` | 已有 | T-102/T-106 产出:Chrome 启动参数、`subprocess.Popen` 启动、`/json/version` 端口探测、PowerShell `.lnk` 快捷方式 |
2026-06-29 17:49:45 +08:00
| `tests/` | 已有 | T-006/T-201/T-202/T-202b/T-203/T-204/T-204b/T-205/T-207/T-301/T-302/T-302p/T-303/T-303b/T-401/T-402/T-403/T-501/T-501b/T-501c/T-502/T-503/T-504 产出:stdlib unittest 基座;覆盖 appconfig/db/config/accounts/chrome/editor/excel/ai/prompts/gui/workers |
2026-06-27 17:28:33 +08:00
| `app/excel.py` | 已有 | T-201/T-204/T-403 产出:多文件 Excel 输入列解析、必需列整文件拒绝、脏行逐行跳过、批次/任务入库、匹配统计;按源文件/工作表/行号回写旧标题与旧封面路径;按源文件/工作表/行号回写新标题、新封面路径、更新状态;支持原文件被占用时另存副本 |
2026-06-27 15:47:21 +08:00
| `shopee待处理任务模板.xlsx` | 已有,已提交 | 标准空 Excel 模板;单工作表 `待处理任务` ,表头 `账号名 | 别名 | 商品id | 旧标题 | 旧封面图片路径 | 新标题 | 新封面图片路径 | 更新状态` ;运营复制后填写,填写副本不提交 |
2026-06-29 17:49:45 +08:00
| `config.json` / `config/ai_models.json` / `cmshopee.db` / `cmshopee.db-*` / `chrome_user_data_dir/` / `images/` / `logs/` | 本地存在或按需生成,已忽略 | 含配置、密钥、业务、登录态、图片、本地诊断日志,不提交版本库;密码/API Key 保存或变更时提示,展示/日志/导出脱敏 |
2026-06-26 15:30:37 +08:00
## 已验证能力(单账号)
- CDP 连接 Chrome、遍历 tab、读取 shopee.tw Cookie。
- 找到/新建商品详情页 tab,等编辑器就绪。
- 改标题:原生 setter + 派发事件,`value` 与 `modelvalue` 双等于新值。
2026-06-26 18:02:57 +08:00
- 换封面:`setFileInputFiles` 上传(`.shopee-image-manager__upload input[type=file]` )→ 等 CDN 链接 → 等 1 秒 → `Input.dispatchMouseEvent` 拖到第一位(落点 `first.left - 0.30*w` );使用 `1_TY030.jpg` 在测试商品验证通过。
2026-06-26 15:55:28 +08:00
- 「更新」按钮:可点才点,禁用态识别;③ 未批量确认前不提交。
2026-06-27 15:47:21 +08:00
- Tab① 真机冒烟(2026-06-27):账号 `papa` ,导入临时 Excel 5 行,采集 5 条旧标题/旧封面,下载 5 张旧封面并回写临时 Excel 成功。
2026-06-26 15:30:37 +08:00
## 任务看板状态
任务状态以 [`06-tasks.md` ](06-tasks.md ) 为准,历史记录见 [`../progress.md` ](../progress.md )。
2026-06-29 17:49:45 +08:00
- 已完成:T-000(正式代码包结构)、T-001(`app/editor.py` 模块化)、T-002( `app/appconfig.py` + `config.json` )、T-003( SQLite 建表)、T-004(本地数据 gitignore)、T-005( AI 模型清单后端)、T-006(单元测试基座)、T-101(账号 slug/user-data-dir)、T-102( Chrome 启动器)、T-103(登录保活与检测)、T-104( PySide6 五 Tab 主窗口骨架)、T-104b( PySide6 worker 基座)、T-105( Tab④ 账号管理)、T-106(账号快捷方式)、T-201(Excel 导入:解析多文件输入列入库)、T-202(Tab① 任务列表 + 导入按钮 + 别名匹配标记)、T-202b(Tab① 导入汇总栏)、T-203(采集旧标题+旧封面)、T-204(回写旧字段到原 Excel)、T-204b(采集完成自动回写旧字段)、T-205(首次未配账号 / Chrome 未启动 / 未登录引导保护)、T-205b(采集后关闭自动新建商品页 tab)、T-301(AI 生成接口)、T-302(Tab② 左右布局与任务列表)、T-302p(提示词管理)、T-303(Tab② 开始生成 + 停止 + 进度)、T-303b(②/③ 商品ID筛选)、T-401(Tab③ 更新列表筛选 + 开始更新确认弹窗)、T-402(Tab③ 确认后串行更新)、T-403(Tab③ 结果回写与结束汇总)、T-501(Tab⑤ AI 模型管理 UI)、T-501b(Tab⑤ 角色与生成参数)、T-501c(Tab⑤ Shopee 更新安全开关)、T-502(满 9 张封面删除再上传)、T-503(敏感信息本地明文保存提示与日志脱敏)、T-504(多账号并行 / dry-run / 运行日志)、T-207(①采集诊断日志)、② AI生成图片失败诊断日志补丁。
- 下一个可领取任务:**T-404(真实 Shopee 单条更新冒烟)**。T-206 删除批次依赖 T-404,T-505 全流程诊断日志扩展依赖 T-207/T-504,建议先完成真实更新单条验收。
2026-06-27 14:37:58 +08:00
2026-06-27 15:00:15 +08:00
## 当前已知限制
2026-06-27 14:37:58 +08:00
2026-06-29 17:49:45 +08:00
- ① 采集已接入 `run_type=collect` ,② AI生成已接入 `run_type=generate` 与本地 `logs/cmshopee.log` ;T-505 仍待把同类步骤级诊断扩展到 Excel 导入/回写、③更新、Chrome/登录检测与 AI 模型测试连接。
2026-06-27 15:00:15 +08:00
- ① 采集依赖对应账号 Chrome 已用专属 user-data-dir 和 CDP 端口启动并登录;T-205 已在采集前拦截未配置账号、Chrome 未启动、未登录,并引导去④账号管理,但不会无提示批量启动所有账号 Chrome。
2026-06-29 09:18:03 +08:00
- T-501/T-501b/T-501c 已完成 `config/ai_models.json` 模型清单 UI,以及 `config.json` 里的标题/图片默认模型角色、并发、重试、分辨率、jpg 质量、路径/端口设置和 Shopee 更新安全开关。
2026-06-29 17:49:45 +08:00
- T-301/T-303 已完成通用 HTTP AI 接口、批量生成编排和 GUI 接入 mock 单测;真实 AI 生成还需要在 `config/ai_models.json` 填入可用 url/model/api_key 后做一次成本可控的小样本实测;URL 可填完整 endpoint 或 OpenAI-compatible base URL。
2026-06-29 10:37:27 +08:00
- 本地 `config/ai_models.json` 若由旧版本或手工维护,可能缺少 `category` ;启动报 “AI 模型 category 必须是 text 或 image” 时,按 [`troubleshooting.md` ](troubleshooting.md ) 只补 `category` / `enabled` 等非密钥字段,保留 API Key,且不要提交该文件。
2026-06-29 09:18:03 +08:00
- T-403/T-501c 已完成③更新结果回写、结束汇总与真实更新安全开关;真实 Shopee 更新冒烟仍未执行,下一步 T-404 只允许在测试商品范围内做单条验收,默认先只测标题更新,封面更新作为可选子项。
2026-06-29 09:49:53 +08:00
- T-502 满 9 张封面删除流程已完成代码路径、mock 单测和真实 9 图商品不提交流程实测;删除第一张前必须已有本地旧封面备份(`old_cover_path` 存在且文件存在),缺失备份时拒绝删除线上图片。本轮实测只操作编辑页并关闭测试 tab,未点击「更新」保存线上。
2026-06-26 15:30:37 +08:00
## 当前可运行内容
```bash
2026-06-26 17:24:23 +08:00
# 语法检查(T-000 后;本机优先用 py -3)
py -3 -m compileall app main.py
2026-06-27 09:02:05 +08:00
# appconfig 默认配置读写(写入临时目录)
py -3 -c "import os,tempfile; from app import appconfig; d=tempfile.TemporaryDirectory(dir='.'); print(appconfig.load_config(os.path.join(d.name,'config.json'))['image_dir'])"
# db 临时库初始化与 PRAGMA 检查
py -3 -c "import os,tempfile; from app import db; d=tempfile.TemporaryDirectory(dir='.'); p=os.path.join(d.name,'cmshopee.db'); db.init_db(p); c=db.connect(p); print(c.execute('PRAGMA foreign_keys').fetchone()[0], c.execute('PRAGMA journal_mode').fetchone()[0], c.execute('PRAGMA busy_timeout').fetchone()[0]); c.close()"
# gitignore 核心本地数据检查
git check-ignore -v -- config.json config/ai_models.json cmshopee.db chrome_user_data_dir/ images/
2026-06-27 09:10:17 +08:00
# ai_models 临时清单读写与打码检查
py -3 -c "import os,tempfile; from app import appconfig; d=tempfile.TemporaryDirectory(dir='.'); p=os.path.join(d.name,'ai_models.json'); print([m['category'] for m in appconfig.list_ai_models(path=p)])"
2026-06-27 15:47:21 +08:00
# AI 接口单测(不连真实服务)
python -m unittest discover -s tests -p "test_ai.py"
2026-06-27 09:21:33 +08:00
# config slug 与 user-data-dir 临时目录检查
py -3 -c "import tempfile; from app import config; d=tempfile.TemporaryDirectory(dir='.'); print(config.ensure_user_data_dir(config.make_slug('alias'), root=d.name))"
2026-06-27 09:33:54 +08:00
# chrome 参数拼装 / 端口探测由 tests/test_chrome.py 覆盖
python -m unittest discover -s tests
2026-06-27 10:59:51 +08:00
# Excel 导入由 tests/test_excel.py 覆盖;默认 python 环境需可导入 openpyxl 才执行真实解析测试
python -m unittest discover -s tests -p "test_excel.py"
2026-06-27 10:30:45 +08:00
# GUI 骨架与 ④ 账号管理由 tests/test_gui.py 覆盖;worker 基座由 tests/test_workers.py 覆盖
2026-06-27 10:05:29 +08:00
# 默认 python 当前 PySide6=6.5.3, py -3 环境缺 PySide6 时相关测试会 skip
2026-06-27 09:56:53 +08:00
2026-06-26 17:24:23 +08:00
# 当前入口占位
python main.py
py -3 -m app
2026-06-26 15:30:37 +08:00
2026-06-27 09:17:20 +08:00
# 单元测试(T-006 后纯逻辑改动必跑)
2026-06-26 16:27:33 +08:00
python -m unittest discover -s tests
2026-06-26 15:30:37 +08:00
# 单账号闭环(不提交线上)
2026-06-26 17:05:18 +08:00
python prototypes/demo.py # 分步(T-000 后从项目根导入 app.cdp)
2026-06-26 15:30:37 +08:00
set AUTO = 1 && python prototypes/demo.py # 自动(cmd)
2026-06-27 17:58:08 +08:00
# 真实提交(谨慎;T-404 前不要扩大批量)
2026-06-26 15:30:37 +08:00
set UPDATE = 1 && python prototypes/demo.py
```
前置条件:
- Chrome 已用某 user-data-dir 带 `--remote-debugging-port` + `--remote-allow-origins=*` 启动并登录 Shopee。
2026-06-27 10:59:51 +08:00
- 已 `pip install websocket-client requests` ; Excel 导入还需要 `openpyxl` ,默认 `python` 环境本轮已可执行真实解析测试,`py -3` 环境缺 openpyxl 时 `tests/test_excel.py` 会按设计跳过。
2026-06-26 16:09:09 +08:00
- PySide6 当前环境已可导入(验证版本 6.5.3);GUI 实现固定使用 PySide6。
2026-06-26 15:30:37 +08:00
- 默认连 `127.0.0.1:9222` (开发期可用 `CDP_HOST` 指向 WSL 转发的 `192.168.0.224:9333` )。
2026-06-26 17:24:23 +08:00
- 本机 `python` 当前指向 `C:\Python37\python.exe` ( 3.7.9, isolated,不符合 Python 3.10+ 要求且 `python -m app` 不搜索当前目录);开发/验证优先用 `py -3` (当前 3.14.4)或确认 `python` 已指向 3.10+。
2026-06-26 15:30:37 +08:00
## 开始编码前检查
1. 读仓库级 `AGENTS.md` / `CLAUDE.md` (如有)。
2. 读 `docs/00-ai-start-here.md` 。
2026-06-26 15:55:28 +08:00
3. 读 `docs/05-coding-rules.md` 与 `docs/04-architecture.md` 第七节。
2026-06-26 15:30:37 +08:00
4. 在 `docs/06-tasks.md` 取第一个 `TODO` 且依赖 `DONE` 的任务。
5. 将该任务状态改为 `DOING` 。
## 维护规则
2026-06-26 16:09:09 +08:00
- 新建 `config/chrome/editor/gui/workers` 或改 CDP 选择器后,更新本文与 `04-architecture.md` 。
2026-06-26 15:30:37 +08:00
- 任务状态变化同步 [`06-tasks.md` ](06-tasks.md );执行记录追加 [`../progress.md` ](../progress.md )。
- 本文只保留当前快照,不保留完整历史。