QiuSWandClaude Opus 5 656b7a8c49 feat: 专属 Chrome 管理与淘宝登录检查 (#9)
由 Codex (gpt-5.6-sol) 实施,Claude 审核。MVP2 第一块。

internal/taobao/chrome.go
- EnsureBrowser 按四项条件判断能否复用已有实例:PID 存在、进程命令行
  属于本程序专属 profile、CDP 端口可访问、存在 page 类型目标
- 启动前遍历整个端口段,发现已有 Chrome 但状态文件丢失时报错而不是
  再起一个,避免同一 profile 出现两个实例损坏登录数据
- CloseBrowser 必须先校验 PID 归属才允许 taskkill,防止误杀使用者
  自己的 Chrome

internal/taobao/cdp.go
- 基于 gorilla/websocket 的最小 CDP 客户端(该依赖原本就在模块图里,
  由 Wails 引入,此处仅从 indirect 提为直接依赖)
- CookieNames 的结构体只声明 Name 和 Domain,Cookie 的值根本不会
  进入内存,比"取到但不使用"更彻底

internal/taobao/login.go
- 两层判定:四个必需 Cookie 齐全,且我的淘宝页面标题与正文不含
  六个阻断词
- 昵称只作展示,不参与判定。这是对参考 Python 实现的一处有意偏离:
  参考实现要求解析出昵称才算有效,但该解析依赖淘宝页面文案,
  淘宝一改版就会永远解析不到,导致登录永远判为无效、全局停止门
  永久触发、工具彻底不可用。放宽的代价可控:误判为已登录时后续
  MTOP 请求会失败,那条链路本就有 token 失效处理。

app.go 只在点击按钮时启动 Chrome,startup 不自动启动。

前端:设置页两个按钮接真实方法并显示检查结果;侧栏淘宝状态灯
监听 taobao:status 事件。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LbdtsD3ohhSMy3KPoCgARq
2026-09-03 09:13:40 +08:00

cmsp

cmsp 是内部使用的 Windows 桌面工具:把货憨憨 ERP 中指定 Shopee 店铺的商品,按商品主图到淘宝搜同款,抓取同款商品详情页的介绍视频,下载到本地,再批量上传回货憨憨对应商品,使 Shopee 商品页刷新后能看到视频。

技术栈为 Go + Wails v2 + Vue 3 + Naive UI + SQLite,只支持 Windows。项目采用 DevHarness 工作流:需要工单的任务以 Gitea 工单为单次任务事实来源,Gitea Wiki 保存长期文档,Git 记录代码变更,人负责确认目标和验收。

治理模式为轻量。内部工具、单人开发、不对外交付、无常驻服务,因此不设置超出实际风险的门禁。

当前状态

Go 骨架已建立:Wails v2 窗口、参数设置读写、SQLite 存储和脱敏日志可用并有单元测试覆盖。

货憨憨与淘宝的业务功能尚未实现——界面上「下载数据」「下载视频」「上传数据」三个按钮点击后会明确提示还没实现。这些能力目前只存在于仓库外的两份已验证 Python 实现,正在按工单逐步迁移为 Go。

详见 项目档案 与 需求总览。

任务闭环

讨论需求或缺陷
  -> 阅读代码并提出方案
  -> 人工确认方案
  -> 创建单元任务工单(需要时先建 Epic / MVP)
  -> Agent 实现并测试
  -> 提交代码并更新工单
  -> 工单集中回写最终证据并等待人工验收
  -> 人工验收后在工单记录结论
  -> 关闭工单并更新父工单;长期事实变化时才同步 Wiki

轻量模式下符合直接实施条件的小 Bug、局部 UI 和单模块低风险调整不走上述闭环:确认目标 → 最小修改 → 受影响范围测试 → 提交并报告结果。

涉及货憨憨写操作、账号凭据、SQLite 结构迁移、并发或删除数据时必须建工单并按高风险处理。

快速开始

  1. 克隆本仓库到本机,例如 D:\chengma\cmsp。

  2. 创建 Gitea 远端仓库并推送当前引导提交,启用工单和 Wiki。

  3. 配置 wiki-docs.json 和安全访问方式;优先使用已配置的 Gitea MCP,MCP 不可用时才使用 Gitea API 并记录原因。令牌只通过环境变量或 MCP 安全配置提供,不写入仓库。

  4. 按 新项目文档初始化 查询线上 Wiki;Home 不存在时先创建并回读 Home,取得 revision 后再创建其他核心页面。

  5. 治理模式已在 项目档案 选定为轻量;不可违反的安全规则写在根目录 AGENTS.md 的「项目专用规则」。

  6. 需要工单时使用 .gitea/issue_template/ 中的模板。本地 docs/ 的存在不能证明线上 Wiki 已初始化。

  7. 开始产品代码前运行:

    python dev_scripts/harness.py sync --verify
    

常用命令

git status --short --branch
python dev_scripts/harness.py check --strict
python -m unittest discover -s tests -v
python dev_scripts/harness.py sync --check

产品构建与测试命令在 Go 骨架建立后补入 本地开发与验证。

目录

AGENTS.md                         Agent 的通用工作规则与本项目专用红线
CLAUDE.md                         Claude Code 的规则入口
.gitea/issue_template/            Epic、MVP、单元任务工单模板
docs/                             Gitea Wiki 核心页面的只读镜像
docs/task/                        人工明确要求的专项快照,默认为空
wiki-docs.json                    核心 Wiki 页面到本地镜像的显式映射
dev_scripts/harness.py            check / sync / archive / export 单一入口
dev_scripts/wiki_docs.py          Gitea Wiki 客户端与镜像生成库
tests/                            DevHarness 结构自测
main.go / app.go                  Wails 入口与暴露给前端的方法
internal/config/                  参数设置的读写与校验
internal/store/                   SQLite,所有状态的唯一事实来源
internal/logx/                    带脱敏的日志
frontend/src/                     Vue 3 + Naive UI 界面
config.example.yaml               本机配置模板(config.yaml 不进 Git)

docs/ 由同步工具生成,不要直接编辑。

安全底线

无论治理模式如何裁剪流程,下面几条不可违反:

  • 账号、密码、token、Cookie、Chrome Profile 内容不得写入代码、日志、工单、Wiki 和提交。
  • 淘宝登录必须由使用者手动完成,程序不代填密码、不绕过验证码与安全验证。
  • 淘宝登录失效必须中断整批任务,不得降级为单商品失败后继续。
  • 对真实店铺的批量写入、覆盖和删除必须获得明确授权。
  • 测试结果必须真实,未执行或无法覆盖的验证必须写明。

文档

默认不创建任务归档;archive、export 只作为人工显式触发的兼容能力。长期文档的唯一编辑入口是 Gitea Wiki,修改顺序为:修改 Wiki → 读取确认 → 导出核心 docs → 校验差异 → 提交镜像。

S
Description
No description provided
Readme
1.1 MiB
Languages
Go 64.2%
Python 17%
Vue 11.6%
NSIS 3%
Batchfile 2.3%
Other 1.9%