This commit is contained in:
@@ -25,6 +25,7 @@ GUI(PySide6 QTabWidget,当前显示 6 Tab)
|
||||
├── cdp CDP 客户端(连接、找/开 tab、执行 JS、拖拽)
|
||||
├── editor 登录检测 / 检测商品状态 / 采集旧标题旧封面 / 改标题 / 换封面 / 点更新
|
||||
├── product_status 商品状态代码、显示和分组规则
|
||||
├── client_policy 启动订阅策略解析、非敏感缓存与兼容回退
|
||||
├── subscription cmhub 账号订阅状态查询、响应归一化与客户端预检状态
|
||||
├── ai 文本生成(提示词+旧标题→新标题)/ 图像生成(提示词+旧封面→新封面)/ 商品原图理解(商品套图AI帮写)
|
||||
├── image_studio 商品套图项目/资产/job数据服务(兼容旧AI工场终选)
|
||||
@@ -79,7 +80,8 @@ imported → collected → generated → applied
|
||||
- `cdp`:连接调试端口、找/开 tab、执行 JS、拖拽、注入文件。
|
||||
- `editor`:登录检测、读取商品状态、**采集**(读旧标题、下载旧封面)、改标题、换封面、点更新。
|
||||
- `product_status`:商品状态代码 `normal/unlisted/reviewing/unknown` 的归一化、中文显示、EDS 提示分类和下游任务分组;①②③只能复用该模块,不各自判断。
|
||||
- `subscription`:使用默认网关 API Key 查询 `GET /api/v1/cmshopee/subscription/status`,把远端权益结果归一化为有效、宽限、未订阅、到期、撤销、账号不可用、Key 无效、暂时不可用或旧服务兼容状态;不展示或记录 API Key,服务端始终是最终授权方。T-700 后当前开发版本固定为 `SUBSCRIPTION_CHECK_ENABLED = True`、`SUBSCRIPTION_ENFORCEMENT_ENABLED = True`:查询期间和明确不允许状态只保留“设置”Tab,新提交统一由主窗口预检拦截;有效、宽限和旧服务兼容状态恢复工作流。T-701 后缺少 Key 的干净安装不再裸露技术设置,而是显示只收集“会员 API Key”的激活窗口;输入值先在内存中验证,只有服务端未拒绝该凭据时才保存到 `data/config/cmhub.json`。
|
||||
- `client_policy`:解析启动版本接口顶层 `client_policy`,严格校验 `policy_version=1`、布尔开关和带时区 `updated_at`;把最后一次有效的非敏感策略及取得时间原子缓存到 `data/config/client_policy.json`。本轮运行按 `off/observe/enforce` 三种模式执行;远端缺失或非法时优先读缓存,无缓存回退观察模式。`check=false,enforcement=true` 防御性归一化为关闭,不会在未检测时锁死客户端。
|
||||
- `subscription`:使用默认网关 API Key 查询 `GET /api/v1/cmshopee/subscription/status`,把远端结果归一化为有效、宽限、未订阅、到期、账号不可用、Key 无效或暂时不可用;兼容识别历史撤销/旧接口状态,但不把它们视为真实权益。强制模式只以服务端顶层严格布尔字段 `real_entitlement_allowed` 放行业务功能,不依据展示用 `status` 或兼容 `allowed` 推断;服务端始终是最终授权方。T-701 后缺少 Key 的干净安装显示只收集“会员 API Key”的激活窗口,输入值先在内存中验证,只有服务端未拒绝该凭据时才保存到 `data/config/cmhub.json`。
|
||||
- `ai`:`gen_title(prompt, old_title)`、`gen_cover(prompt, old_cover_path)`、`analyze_product_images(instruction, context, image_paths)`;前两者分别负责②标题/生图,后者只供商品套图中的「AI帮写」调用 cmhub 图片理解接口,读取1至8张按 `source_order` 排序的本地商品原图并返回可编辑卖点与白名单计费元数据。
|
||||
- `cmhub_models`:格式化 cmhub 模型别名,并维护仅进程内有效的短期模型目录缓存;缓存键使用规整网关地址和别名,不含 API Key,不写入配置、SQLite、日志或导出文件。
|
||||
|
||||
@@ -88,7 +90,8 @@ imported → collected → generated → applied
|
||||
- 应用配置(模型选择、生成参数、目录、Chrome 路径)→ `data/config.json`。
|
||||
- AI 模型清单(direct 内部兼容模式 url/模型/密钥/类型/连接超时)→ `data/config/ai_models.json`(API Key 本地明文保存,必须 gitignore,UI 打码显示;普通设置页不再暴露 direct 切换入口)。
|
||||
- cmhub 网关 Key → `data/config/cmhub.json`,schema `{ "api_key": "..." }`;`config.json` 只保存 Base URL、别名和超时,不保存 Key。
|
||||
- 订阅状态 → 仅进程内 `SubscriptionStatus`;有效/宽限状态把服务端返回的账号显示名、套餐名和有效期追加到 Windows 原生窗口标题,其他状态恢复纯应用名称并在底部状态栏显示脱敏中文结果。Tabs 上方不保留会员状态行,状态不写入 SQLite、诊断日志或导出。强制模式首次进入 `expired` 时,在门禁生效后弹一次中文窗口;安全的同网关 HTTPS `manage_url` 可用默认浏览器打开,退出走主窗口正常关闭。重复 `expired` 不重弹,恢复允许状态后才重置本次运行的弹窗标记。设置页只发出“重新检测会员状态”信号,由主窗口复用异步查询和陈旧结果隔离;`404` 表示服务端尚未启用订阅接口并按旧服务兼容放行,网络异常不被误判为会员到期。首次激活后的使用清单只在 `config.json` 保存非敏感状态 `onboarding.first_use_guide_state`,取值为空、`pending`、`completed` 或 `dismissed`;默认空值保证存量用户不会被误判为新用户。
|
||||
- 客户端订阅策略 → `data/config/client_policy.json`,只含策略版本、两个布尔开关、服务端更新时间和本地取得时间,不含 Key、账号、套餐或订阅结果;线上有效响应覆盖缓存,接口失败、旧响应或策略字段非法时读取缓存,无缓存使用观察模式。
|
||||
- 订阅状态 → 仅进程内 `SubscriptionStatus`;有效/宽限状态把服务端返回的账号显示名、套餐名和有效期追加到 Windows 原生窗口标题,其他状态恢复纯应用名称并在底部状态栏显示脱敏中文结果。`off` 不请求状态且放行;`observe` 查询展示但不限制;`enforce` 查询期间及真实权益无效时只保留“设置”Tab,并按未配置、未开通、到期、撤销兼容、账号不可用、Key 无效、接口不可用显示对应中文处理窗口。窗口按状态转换去重,恢复真实权益后才允许同类状态再次提示;网络异常不得描述成未付费。首次激活后的使用清单只在 `config.json` 保存非敏感状态 `onboarding.first_use_guide_state`,取值为空、`pending`、`completed` 或 `dismissed`。
|
||||
- cmhub 模型目录与 AI帮写/正式套图预估价格 → 仅内存短期缓存;预估值只供用户确认,实际扣点仍以网关响应 metadata 为准。
|
||||
- 业务数据(账号、任务、各阶段结果)→ SQLite `data/cmshopee.db`。
|
||||
- 图片(采集的旧封面、AI 生成的新封面)→ `data/images/`(路径记在 DB)。
|
||||
|
||||
Reference in New Issue
Block a user