Files
cmshoppe/progress.md
T
chengmaandClaude Opus 4.8 479d02a2b8 docs: 初始化 cmshopee 文档、设计与项目骨架
- docs/ 完整 harness coding 文档集(愿景/需求/技术栈/架构/编码规则/任务/api/routes/current-state)
- 5 Tab 流水线设计 + UI 效果图 SVG(docs/ui/)
- cdp.py CDP 底座;prototypes/ 已验证原型脚本(待 editor.py 移植后清理)
- AGENTS.md/CLAUDE.md 入口、progress.md 执行流水、.gitignore(排除凭证/DB/图片)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 15:30:37 +08:00

15 KiB
Raw Blame History

执行进度记录

本文件是只追加的历史流水,记录任务执行过程、验证命令、阻塞点和关键决策。 当前目录、当前命令、下一个可领取任务等可覆盖快照,写入 docs/current-state.md。

职责边界

  • docs/06-tasks.md:任务看板,维护任务状态、依赖和验收要点。
  • progress.md:历史流水,只追加记录每轮执行发生了什么。
  • docs/current-state.md:当前快照,可覆盖更新仓库现实、可运行命令和下一步。

记录格式

## 【YYYY-MM-DD】T-【编号】 【任务名】

- 状态:【DONE / BLOCKED / PARTIAL】
- 变更:【修改了哪些文件或模块】
- 验证:【运行的真实命令和结果】
- 阻塞:【如有,写明原因和需要谁决策】
- 决策:【如有,记录本轮确定的关键取舍】
- 下一步:【建议下一个任务 ID 或待确认事项】

执行记录

【2026-06-25】Phase -1 单账号流程验证(建文档前)

  • 状态:DONE
  • 变更:新增 cdp.py、demo.py、set_title.py、set_cover.py、get_title.py、cookies.py、inspect_images.py、grab.py;本轮建立 docs/ 全套 harness coding 文档与 progress.md、AGENTS.md、CLAUDE.md。
  • 验证:
    • CDP 连接 Chrome(开发期经 WSL→Windows portproxy 192.168.0.224:9333→127.0.0.1:9222)成功。
    • cookies.py:读到 shopee.tw 标签页 50 个 Cookie(含 csrftoken)。
    • get_title.py:读到测试商品(ITEM_ID 51100639510)标题。
    • set_title.py:改标题后 value==modelvalue==新值。
    • set_cover.py:setFileInputFiles 上传成功(张数 5→6),拖拽落点 first.left-0.30*w 后新图到第一位。
    • demo.py:在 Windows 端跑通改标题 + 换封面(未提交)。
    • 文档:python -m py_compile *.py 通过;demo.py 增加 UPDATE=1 提交开关并语法校验通过。
  • 决策:
    • 浏览器自动化用自研 cdp.py(websocket-client + requests),不引入 playwright/selenium。
    • 必须清代理环境变量 + suppress_origin=True + --remote-allow-origins=*,否则连不上 CDP。
    • SPA 就绪用“标题框+图片 itembox+上传框”三元素存在判断,不用 load 事件。
    • 封面由位置决定,用模拟鼠标拖拽到第一位;「更新」默认不点,UPDATE=1 才提交。
    • 下一阶段做多账号管理 + GUI,GUI 暂定 Tkinter(待维护者确认)。
  • 下一步:从 docs/06-tasks.md 领取 T-001(抽 editor.py)或 T-002(accounts.json + config.py)。

【2026-06-25】决策 · 多账号隔离方案

  • 状态:DONE(仅文档决策,未涉及代码)
  • 变更:更新 docs/04-architecture.md(新增 3.0 多账号隔离方案决策表)、docs/02-requirements.md(功能加“生成快捷方式 P1”、决策表加“多账号隔离方式”)、docs/03-tech-stack.md(决策记录)、docs/api.md(chrome 模块加 create_shortcut)、docs/06-tasks.md(新增 T-105 生成快捷方式)。
  • 决策:
    • 多账号隔离采用方案 B:每账号独立 user-data-dir,否决方案 A(Chrome profile)。理由:--remote-debugging-port 绑在 user-data-dir/进程上而非 profile,方案 A 无法每账号独立 CDP 端点、无法并行、串号风险高。
    • 启动主路径用程序 subprocess 直接带参数启动;快捷方式为可选便利,用 PowerShell WScript.Shell.CreateShortcut 生成,参数须写在快捷方式「目标」字段而非「起始位置」。
  • 下一步:实现 chrome.py(T-102 启动器 + T-105 快捷方式),或先做 T-001/T-002 地基。

【2026-06-25】决策 · 双 Tab + 配置文件 + SQLite + Excel 批量 + 登录检测 + 导出

  • 状态:DONE(仅文档决策,未涉及代码)
  • 变更:系统性更新 docs/02-requirements.md(第二版功能/决策表/风险)、docs/03-tech-stack.md(config.json+SQLite+openpyxl)、docs/04-architecture.md(双 Tab 结构、4.1 config.json、4.2 SQLite schema、4.3 Excel 模板、5.x 批量与登录检测流程、第六节加登录检测事实)、docs/api.md(拆 appconfig/db/excel 模块、editor 加登录检测与 run_task)、docs/06-tasks.md(重排 Phase 0-4)、docs/routes.md(重写为双 Tab 线框)、docs/00-ai-start-here.md、docs/current-state.md。
  • 决策:
    • 存储拆两层:应用设置 config.json + 业务数据 SQLite cmshopee.db,取代早期 accounts.json。
    • GUI 双 Tab:Tab1 Excel 批量(导入/列表/执行/导出),Tab2 账号管理(密码加密仅参考、登录检测)。
    • 账号↔任务绑定以 Excel“别名”列为权威(弃文件名);未匹配略过,结束弹窗汇总。
    • Excel 模板列:别名/商品id/新标题/新封面图片路径/旧标题(留档)/旧封面图片路径(留档)/更新状态(输出结果)。
    • 是否提交更新由 Tab1 批次级开关控制,默认关;多账号串行、单条失败继续。
    • 密码不自动登录、仅参考、加密存;人工登录 + 程序检测登录态。
    • 引入 openpyxl;DB/config/用户数据目录均 gitignore。
  • 下一步:从 Phase 0 起步(T-001 editor.py / T-002 appconfig / T-003 db.py,任选其一)。

【2026-06-25】修正 · 旧数据为程序输出 + 回写时机 + 文件锁

  • 状态:DONE(仅文档修正)
  • 变更:docs/04-architecture.md(4.2 schema 注释、4.3 列性质、3.x 关键事实、5.1 流程)、docs/api.md(run_task 抓旧值、update_task_result 加旧数据参数、export_results→write_back 回写原文件 + export_copy 退路)、docs/06-tasks.md(T-303/304/305)、docs/02-requirements.md(功能行 + 决策表)。
  • 决策修正:
    • 「旧标题/旧封面」由“运营输入/留档”改为 程序改动前抓取的快照(输出列),用于审计/回滚。
    • SQLite 逐条实时写回(每条任务处理完立即写状态+旧数据),不是批末统一写。
    • Excel 回写到原文件:该 Excel 全部任务完成后,批量把旧数据+更新状态写回原 .xlsx;原文件被锁则提示关闭重试或 export_copy 另存副本。SQLite 为事实来源。
  • 下一步:Phase 0 起步(T-001/T-002/T-003)。

【2026-06-25】扩展 · 5 Tab 流水线 + AI 生成 + 采集回写 + 首次引导

  • 状态:DONE(仅文档)
  • 变更:重写 docs/routes.md(5 Tab + AI生成界面)、docs/04-architecture.md(流水线/ai 模块/采集/本地图片目录/扩展 tasks schema)、docs/api.md(新增 ai 模块、editor 加采集 read_cover/download_cover/collect、db 拆 set_collected/generated/confirmed/applied)、docs/06-tasks.md(Phase 0-5 按 5 Tab 重排);增量更新 docs/02-requirements.md、docs/03-tech-stack.md(AI 依赖待定)、docs/00-ai-start-here.md、docs/current-state.md。
  • 决策:
    • GUI 定为 5 Tab,工作流优先顺序:① 导入采集 ② AI生成 ③ 更新shopee ④ 账号管理 ⑤ 设置。
    • 流水线五阶段:imported→collected→generated→confirmed→applied,stage 字段贯穿。
    • 「采集」只读抓旧标题+下载旧封面到本地并回写 Excel;「旧数据」为程序输出(已确认)。
    • 新增 AI:提示词+旧标题→新标题、提示词+旧封面→新封面(image-to-image);服务商/模型待定;产出必须人工确认才进更新。
    • Excel 增 账号名 输入列;输出列扩为 旧标题/旧封面/新标题/新封面/更新状态。
    • 本地 images/<slug>/<item_id>_old|_new 存图,路径记 DB;images/ 加 gitignore。
    • 首次未配账号/未登录:① ③ 执行按钮禁用并提示去④。
  • 待确认:AI 服务商/模型/计费/合规;密码与 AI Key 加密密钥来源。
  • 下一步:Phase 0 起步(T-001/T-002/T-003)。

【2026-06-25】增补 · Tab① 导入汇总栏

  • 状态:DONE(文档 + 效果图)
  • 变更:docs/routes.md(Tab① 加导入汇总栏 + 说明)、docs/02-requirements.md(功能加“导入校验汇总”)、docs/api.md(import_tasks 返回 stats、新增 match_summary)、docs/06-tasks.md(新增 T-202b)、docs/ui/tab1-import-collect.svg(加汇总栏)。
  • 决策:导入多个 Excel 后即时展示 文件数/解析行数/有效/无效/匹配(按账号细分)/未匹配,作为跑采集前的校验关口;未匹配/无效可点击在列表筛出。与执行后的“结束弹窗汇总”互补。
  • 下一步:Phase 0 起步(T-001/T-002/T-003)。

【2026-06-25】简化 · 去掉人工确认 + 去掉提交开关 + Tab② 左右布局

  • 状态:DONE(文档;SVG 同步)
  • 变更:docs/04-architecture.md(流水线去 confirmed、schema 删 confirmed 列、config 删 commit_update_default、5.x/6.x 流程、第七/十节)、docs/api.md(删 set_confirmed、apply_task 去 commit 参数恒提交、ai 说明)、docs/routes.md(Tab② 左右布局无确认、Tab③ 去开关/改“已生成”、流程/组件)、docs/06-tasks.md(T-302/303/401/402、里程碑)、docs/02-requirements.md、docs/03-tech-stack.md、docs/00-ai-start-here.md、docs/current-state.md;SVG tab2/tab3/overview。
  • 决策(用户拍板):
    • 去掉人工确认:流水线 imported→collected→generated→applied(删 confirmed 阶段)。
    • 去掉提交开关:③ 执行即点「更新」总是提交线上。
    • Tab② 改左右布局:左 ~1/4 提示词(标题/封面),右 筛选(批次/店铺)+任务列表(店铺/商品id/旧标题/新标题),双击弹窗看新旧封面(纯查看);底部「开始生成」。
    • 新标题不可编辑,直接用 AI 输出。
    • 已知并接受风险:AI 标题/封面经 ③ 直接上线无核对,本地留档+回写 Excel 为唯一追溯。
  • 下一步:Phase 0 起步(T-001/T-002/T-003)。

【2026-06-25】AI 生成 · 并发参数 + 单按钮两段式

  • 状态:DONE(文档 + SVG)
  • 变更:docs/04-architecture.md(config.json ai 段加 title_concurrency/image_concurrency/retry/resolution/jpg_quality;6.2 两段式并发流程)、docs/api.md(gen_title/gen_cover 加重试/分辨率/质量、新增 generate_batch 并发编排、ai_config 字段)、docs/routes.md(Tab② 单按钮+停止+进度、参数移⑤、⑤ 设置补参数)、docs/06-tasks.md(T-301/303/501)、docs/03-tech-stack.md(concurrent.futures 并发、Pillow 存盘);SVG tab2(单按钮+停止+进度、参数移⑤)、tab5(AI 段加 5 参数)。
  • 决策(用户):
    • 配置(⑤)新增:标题并发数、图片并发数、失败重试次数、分辨率、jpg 质量。
    • Tab② 单个「开始生成」+「停止」;点击后先按 title_concurrency 并发生成标题,接着按 image_concurrency 并发生成图片;进度显示 标题/封面/失败。
    • 每条/每张完成即写库;停止取消未开始项,可继续。并发用 concurrent.futures.ThreadPoolExecutor。
  • 下一步:Phase 0 起步(T-001/T-002/T-003)。

【2026-06-25】AI 生成 · 提示词管理

  • 状态:DONE(文档 + SVG)
  • 变更:docs/04-architecture.md(存储加 title_prompt.txt + prompts/cover/、6.2 提示词管理与变量、目录结构)、docs/api.md(新增 prompts 模块:标题存取、封面模板 CRUD、render_prompt)、docs/routes.md(Tab② 左侧提示词管理说明)、docs/02-requirements.md(提示词管理功能行)、docs/06-tasks.md(T-302p)、SVG tab2(标题加保存、封面加模板下拉+图标工具栏+插入标题/预览)。
  • 决策(用户):
    • 标题提示词:单文件 title_prompt.txt +「保存」;启动回显。
    • 封面提示词:多模板,存 prompts/cover/<名>.txt;下拉 + 图标工具栏(新建/保存/另存为/重命名/删除)+「插入标题」(=插 {新标题})+「预览」。
    • 变量 {旧标题}/{新标题}/{商品id}/{店铺},生成前 render_prompt 替换;预览=替换后查看。
  • 下一步:Phase 0 起步(T-001/T-002/T-003)。

【2026-06-25】更新shopee · 加批次/店铺/状态筛选

  • 状态:DONE(文档 + SVG)
  • 变更:docs/routes.md(Tab③ 加筛选栏 + 「开始更新」作用于当前筛选 + 状态=失败重试说明)、docs/02-requirements.md(③ 功能行)、docs/06-tasks.md(T-401)、SVG tab3(顶部加批次/店铺/状态筛选行,表与按钮下移避让)。
  • 决策(用户):③ 与 ①② 一致加筛选;店铺筛选利于逐店铺更新,状态筛选用于失败重试;「开始更新」仅作用于当前筛选结果(兼作范围控制/安全)。
  • 下一步:Phase 0 起步(T-001/T-002/T-003)。

【2026-06-26】AI 模型配置 · 模型清单 + 角色分配 + 分辨率/超时

  • 状态:DONE(文档 + SVG)
  • 变更:docs/04-architecture.md(config.json ai 段改为 default_text/image_model + resolution + resolution_timeouts;新增 5.1b config/ai_models.json schema 含 category/api_type/connect_timeout;存储/目录/gitignore;6.2 模型选择与超时派生)、docs/api.md(appconfig 加 response_timeout、模型 CRUD/测试连接、get_model;ai 模块超时来源)、docs/02-requirements.md(⑤ 功能)、docs/03-tech-stack.md(AI 多模型行)、docs/06-tasks.md(T-501 模型管理 + T-501b 角色与参数);SVG tab5 重画为模型管理(master-detail)+角色下拉+分辨率/超时+路径。
  • 决策(用户 + 分析):
    • 模型清单 config/ai_models.json:每模型加 category(text/image)、唯一 name、api_type、connect_timeout_seconds(默认30,每模型)。
    • ⑤ 设置:模型下拉 + 新增/删除/测试连接 + 详情(服务商名/类别/api_type/模型ID/网址/密钥打码);至少各一个 text+image。
    • 角色:标题大模型/图片大模型下拉(按 category 过滤)→ config.json default_text/image_model。
    • 分辨率下拉 512/1k/2k/4k;返回超时由 resolution_timeouts 映射自动(180/240/360/600),不单独填。
    • 安全:密钥加密、打码、不入日志;config/ 必须 gitignore;提醒轮换已暴露的 Key。
  • 下一步:Phase 0 起步(T-001/T-002/T-003)。

【2026-06-26】整理 · 测试脚本迁入 prototypes/

  • 状态:DONE
  • 变更:git mv 把 demo.py/set_title.py/set_cover.py/get_title.py/cookies.py/inspect_images.py/grab.py/1.py 移入 prototypes/;cdp.py 留根目录(正式模块);新增 prototypes/README.md;批量把文档里的脚本引用改为 prototypes/ 路径(含 04/00/03/05/06/api/AGENTS、current-state);修掉 config.json 里残留的 api_key_enc 描述(密钥已移至 ai_models.json)。
  • 决策:这些是已验证原型/探查脚本,逻辑待 editor.py(T-001) 移植并实测后清理;现保留为唯一已验证参照。1.py 作为 ai.py 调用方式参考。
  • 注意:prototypes/demo.py 依赖根目录 cdp.py,需从项目根运行或设 PYTHONPATH。
  • 下一步:Phase 0 起步(T-001/T-002/T-003)。