Skill: hnc87/solo-ecommerce-agent (version 1.0.0)

# solo-ecommerce-agent — 全平台全自动电商运营智能体 > 一人运营多平台店铺，无需人工干预。 > **关键词**：电商运营、自动上架、自动客服、自动发货、选品、订单处理 --- ## 功能模块 | 模块 | 说明 | 自动化 | |------|------|--------| | 选品扫描 | 多平台热销榜单分析、机会品类推荐 | ✅ 每小时自动扫描 | | 商品上架 | 商品信息生成、图文处理、一键发布 | ✅ 开启后自动上架 | | 客服回复 | 买家咨询自动分类+回复，争议自动升级 | ✅ 每5分钟自动处理 | | 订单处理 | 自动发货、物流录入、退款审核 | ✅ 每10分钟自动处理 | | 日报汇总 | 每日23:00汇总运营数据发送通知 | ✅ 每日自动推送 | --- ## 快速开始 ### 第一步：配置平台 编辑 `~/.qclaw/solo-ecommerce-data/config.json`，填入你的平台信息： ```json { "platform": "douyin", // douyin | taobao | pinduoduo | jingdong "store_name": "你的店铺名", "backend_url": "http://127.0.0.1:8080", // 平台API地址（如有） "automation": { "publish": { "enabled": true, "need_review": false }, "customer_service": { "enabled": true, "auto_reply": true }, "order": { "enabled": true, "auto_ship": true } }, "enabled": true } ``` ### 第二步：开启定时任务 技能加载后，创建以下 cron 任务： | 任务名 | 触发时间 | 作用 | |--------|---------|------| | 选品扫描 | 每小时整点 | 分析热销榜单，推荐机会品类 | | 客服回复 | 每5分钟 | 自动处理买家消息 | | 订单处理 | 每10分钟 | 自动发货+物流录入 | | 日报汇总 | 每天23:00 | 推送当日运营数据 | ### 第三步：触发运营 **对话触发示例：** - 「帮我扫描今天的选品机会」 - 「上架这款商品：[商品链接/信息]」 - 「检查今天的订单」 - 「生成今天运营日报」 --- ## 脚本说明 | 脚本 | 功能 | 数据文件 | |------|------|---------| | `product_scanner.py` | 扫描热销榜单，生成推荐 | `recommendations.json` | | `product_publisher.py` | 发布商品到店铺 | `products.json` | | `customer_service.py` | 自动回复买家 | `customers.json` | | `order_processor.py` | 处理订单+物流 | `orders.json` | | `daily_report.py` | 汇总运营数据 | 日志文件 | --- ## 数据目录 `~/.qclaw/solo-ecommerce-data/` ``` solo-ecommerce-data/ ├── config.json # 主配置文件（必填） ├── products.json # 商品列表 ├── orders.json # 订单记录 ├── customers.json # 客户对话记录 ├── recommendations.json # 选品推荐 └── logs/ └── YYYY-MM-DD.log # 每日运行日志 ``` --- ## 平台接入说明 ### 抖音小店 - 使用 Chrome CDP 浏览器自动化 - Chrome 需开启 `--remote-debugging-port=9222` - 自动化流程：登录 → 商品管理 → 上架/客服/订单 ### 其他平台 - 通过平台开放 API（需申请 AppKey/AppSecret） - 或使用浏览器自动化模拟操作 - 具体接入方式根据平台文档配置 --- ## 状态说明 - `enabled: false` → 技能休眠，所有定时任务跳过 - `enabled: true` → 全速运转 - 单个模块关闭 → 仅该模块跳过，其他模块继续 --- > 最后更新：2026-04-26

path: metadata.json
content: {
  "name": "solo-ecommerce-agent",
  "version": "1.0.0",
  "description": "全平台全自动电商运营智能体，支持选品、上架、客服、订单全路线自动化",
  "author": "HNC87",
  "created": "2026-04-26",
  "tags": ["ecommerce", "automation", "dropshipping", "customer-service", "order-management"],
  "scripts": [
    "product_scanner.py - 选品扫描",
    "product_publisher.py - 商品上架",
    "customer_service.py - 客服自动回复",
    "order_processor.py - 订单处理",
    "daily_report.py - 每日运营报告",
    "init_agent.py - 初始化配置"
  ],
  "data_dir": "solo-ecommerce-data",
  "dependencies": {
    "browser_automation": "xbrowser skill（浏览器自动化，必装）",
    "python": ">=3.8"
  }
}

path: README.md
content: # solo-ecommerce-agent

**全平台全自动电商运营智能体** — 一人运营多平台店铺，无需人工干预。

## 功能

| 模块 | 说明 | 自动化 |
|------|------|--------|
| 选品扫描 | 多平台热销榜单分析、机会品类推荐 | 每小时自动扫描 |
| 商品上架 | 商品信息生成、图文处理、一键发布 | 开启后自动上架 |
| 客服回复 | 买家咨询自动分类+回复，争议自动升级 | 每5分钟自动处理 |
| 订单处理 | 自动发货、物流录入、退款审核 | 每10分钟自动处理 |
| 日报汇总 | 每日23:00汇总运营数据推送通知 | 每日自动推送 |

## 支持平台

- 抖音小店（浏览器自动化）
- 淘宝/天猫（API 或浏览器自动化）
- 拼多多（API 或浏览器自动化）
- 京东（API 或浏览器自动化）
- 其他平台（可扩展）

## 安装

```bash
openclaw skill install solo-ecommerce-agent
```

## 配置

编辑 `~/.qclaw/solo-ecommerce-data/config.json`：

```json
{
  "platform": "douyin",
  "store_name": "你的店铺名",
  "automation": {
    "publish": { "enabled": true },
    "customer_service": { "enabled": true },
    "order": { "enabled": true }
  },
  "enabled": true
}
```

## 使用方式

### 对话触发（按需）
- 「帮我扫描今天的选品机会」
- 「上架这款商品：[商品信息]」
- 「检查今天的订单状态」
- 「生成今天运营日报」

### 全自动（定时）
配置 cron 任务后，智能体在后台自动运行：
- 每小时整点：选品扫描
- 每5分钟：客服回复
- 每10分钟：订单处理
- 每天23:00：运营日报

## 数据目录

`~/.qclaw/solo-ecommerce-data/`

```
solo-ecommerce-data/
├── config.json           # 主配置文件
├── products.json         # 商品列表
├── orders.json           # 订单记录
├── customers.json        # 客户对话
├── recommendations.json  # 选品推荐
└── logs/                 # 运行日志
```

## 系统要求

- Python 3.8+
- Chrome 浏览器（平台自动化用）
- OpenClaw 最新版

## License

MIT

path: references/platform_guides.md
content: # 平台操作指南

本文档描述如何通过浏览器自动化（xbrowser）操作各电商平台后台。

---

## 通用前提

1. **保持登录态**：提前在浏览器中登录店铺后台
2. **使用xbrowser**：通过OpenClaw的浏览器自动化功能操作
3. **稳定网络**：确保网络稳定，避免操作中断

---

## 淘宝/天猫（千牛后台）

### 后台地址
- 千牛工作台：https://myseller.taobao.com

### 商品发布流程
```
1. 打开：https://myseller.taobao.com
2. 导航：商品管理 → 发布商品
3. 填写：
   - 选择类目（搜索框输入类目名）
   - 商品标题（input[name="title"]）
   - 价格（input[type="price"]）
   - 库存（input[type="quantity"]）
   - 上传图片（input[type="file"]）
   - 详情页编辑器（iframe富文本）
4. 提交：点击"发布"按钮
```

### 客服回复流程
```
1. 打开：https://myseller.taobao.com
2. 导航：客服中心 → 待回复消息
3. 选择对话
4. 输入回复（textarea输入框）
5. 发送（点击"发送"按钮）
```

### 订单处理流程
```
1. 打开：https://myseller.taobao.com
2. 导航：交易管理 → 待发货
3. 点击"发货"
4. 选择物流公司
5. 输入快递单号
6. 确认发货
```

---

## 抖音小店（抖店后台）

### 后台地址
- 抖店工作台：https://fxg.jinritemai.com

### 商品发布流程
```
1. 打开：https://fxg.jinritemai.com
2. 导航：商品管理 → 商品创建
3. 填写：
   - 商品标题
   - 价格（售价）
   - 库存
   - 商品详情（详情页编辑器）
   - 上传图片（主图/详情图）
4. 提交审核
```

### 客服回复流程
```
1. 打开：https://fxg.jinritemai.com
2. 导航：客服中心 → 飞鸽客服
3. 选择会话
4. 输入回复
5. 发送
```

### 订单处理流程
```
1. 打开：https://fxg.jinritemai.com
2. 导航：订单管理 → 待发货
3. 点击"发货"
4. 选择物流公司
5. 输入快递单号
6. 确认发货
```

---

## 拼多多（商家后台）

### 后台地址
- 拼多多商家后台：https://mms.pinduoduo.com

### 商品发布流程
```
1. 打开：https://mms.pinduoduo.com
2. 导航：商品管理 → 发布新商品
3. 填写：
   - 商品标题
   - 价格（拼团价）
   - 库存
   - 商品详情
   - 上传图片
4. 提交审核
```

### 订单处理流程
```
1. 打开：https://mms.pinduoduo.com
2. 导航：订单查询 → 待发货
3. 点击"发货"
4. 录入物流信息
5. 确认发货
```

---

## 京东（京麦后台）

### 后台地址
- 京麦工作台：https://shop.jd.com

### 商品发布流程
```
1. 打开：https://shop.jd.com
2. 导航：商品管理 → 添加新商品
3. 填写商品信息
4. 提交审核
```

### 订单处理流程
```
1. 打开：https://shop.jd.com
2. 导航：订单管理 → 待发货
3. 处理发货
```

---

## 浏览器自动化注意事项

### 元素选择器
- 优先使用：`id`、`name`、`data-*` 属性
- 避免：动态生成的class名（可能变化）
- 兜底：XPath或CSS选择器

### 等待策略
- 使用 `snapshot` 确认页面加载完成
- 等待关键元素出现后再操作
- 处理弹窗/确认框

### 错误处理
- 网络超时：重试机制
- 登录失效：提醒用户重新登录
- 元素找不到：截图报错，转人工

### 反爬规避
- 模拟人工操作速度（不秒发）
- 随机间隔
- 避免高频操作同一页面

---

## API对接（如有密钥）

各平台开放API：

| 平台 | API地址 | 文档 |
|------|---------|------|
| 淘宝 | open.taobao.com | 淘宝开放平台 |
| 抖店 | developer.jinritemai.com | 抖店开放平台 |
| 拼多多 | open.pinduoduo.com | 多多进宝 |
| 京东 | open.jd.com | 京东宙斯 |

**API优势：**
- 稳定高效
- 无需浏览器
- 可批量操作

**API劣势：**
- 需申请权限
- 需配置密钥
- 有调用限制

---

## 快速验证

使用xbrowser测试后台操作：

```
用户："打开淘宝店铺后台"
→ 启动浏览器
→ 导航到 myseller.taobao.com
→ 确认登录状态
→ 截图确认
```

测试完整流程后，再让智能体自动执行。


path: scripts/config_template.json
content: {
  "version": "1.0.0",
  "created": "2026-04-26",
  "platforms": [],
  "automation_scope": {
    "auto_publish": false,
    "auto_pricing": false,
    "auto_reply": true,
    "auto_ship": false,
    "complaint_to_manual": true,
    "refund_threshold": 50
  },
  "risk_controls": {
    "publish_needs_review": true,
    "ship_needs_confirm": true,
    "complaint_auto_escalate": true,
    "logistics_alert_days": 3
  },
  "schedules": {
    "product_scan": "0 * * * *",
    "customer_service": "*/5 * * * *",
    "order_process": "*/10 * * * *",
    "daily_report": "0 23 * * *"
  }
}

path: scripts/customer_service.py
content: # -*- coding: utf-8 -*-
"""客服引擎 - 自动回复买家咨询"""
import json, os, sys, time
from pathlib import Path

DATA_DIR  = Path.home() / ".qclaw" / "solo-ecommerce-data"
CONFIG_FILE = DATA_DIR / "config.json"
CUST_FILE   = DATA_DIR / "customers.json"
LOG_FILE    = DATA_DIR / "logs" / f"{time.strftime('%Y-%m-%d')}.log"

REPLIES = {
    "咨询": "感谢您的咨询！小店商品均为正品，支持7天无理由退换，有任何问题随时联系客服~",
    "尺码": "您好！尺码对照表已更新在商品详情页，建议您根据平时尺码结合详情页推荐选择~",
    "库存": "您好，该商品有现货，付款后24小时内发货，请放心下单！",
    "催发货": "您好，非常抱歉给您带来不便！您的订单已在打包中，预计今天发出，请耐心等待~",
    "物流": "您好，您的包裹已发出，请点击订单详情查看实时物流，如有异常请联系我们~",
    "售后": "您好，小店支持7天无理由退换货，请在订单中申请退款退货，我们会第一时间处理~",
}

def log(msg):
    ts = time.strftime('%H:%M:%S')
    line = f"[{ts}] {msg}"
    print(line)
    LOG_FILE.parent.mkdir(parents=True, exist_ok=True)
    with open(LOG_FILE, "a", encoding="utf-8") as f:
        f.write(line + "\r\n")

def classify(text):
    text = text or ""
    if any(k in text for k in ["什么时候发","发货","发货时间"]): return "催发货"
    if any(k in text for k in ["物流","到哪了","查物流"]): return "物流"
    if any(k in text for k in ["尺码","大小","选哪个"]): return "尺码"
    if any(k in text for k in ["有没有货","库存","还有吗"]): return "库存"
    if any(k in text for k in ["退货","退款","售后","不满意"]): return "售后"
    return "咨询"

def get_reply(msg_type):
    return REPLIES.get(msg_type, REPLIES["咨询"])

def main():
    cfg = load_config()
    if not cfg or not cfg.get("enabled"):
        log("[SKIP] 智能体未启用，跳过客服处理")
        return
    auto = cfg.get("automation", {}).get("customer_service", {})
    if not auto.get("enabled"):
        log("[SKIP] 客服功能未启用")
        return

    log(f"[START] 客服引擎启动")
    # TODO: 接入平台消息API或浏览器自动化
    log("[DONE] 客服功能待配置平台接入")

if __name__ == "__main__":
    main()

path: scripts/daily_report.py
content: #!/usr/bin/env python3
"""
每日运营日报脚本
汇总选品、商品、客服、订单数据，生成日报
"""

import json
from datetime import datetime
from pathlib import Path

# 数据目录
DATA_DIR = Path.home() / "solo-ecommerce-data"
DATA_DIR.mkdir(exist_ok=True)

def generate_daily_report():
    """
    生成每日运营日报
    """
    today = datetime.now().strftime("%Y-%m-%d")
    
    # 读取各模块数据
    products = load_json(DATA_DIR / "products.json", [])
    orders = load_json(DATA_DIR / "orders.json", [])
    recommendations = load_json(DATA_DIR / "recommendations.json", [])
    customers = load_json(DATA_DIR / "customers.json", {})
    
    # 计算指标
    total_products = len(products)
    published_products = len([p for p in products if p.get("status") == "published"])
    
    total_orders = len(orders)
    total_amount = sum(o.get("amount", 0) for o in orders)
    pending_shipment = len([o for o in orders if o.get("status") == "待发货"])
    after_sale = len([o for o in orders if o.get("status") == "售后"])
    
    total_customers = len(customers)
    total_messages = sum(
        len(c.get("messages", [])) for c in customers.values()
    )
    
    top_recommendations = sorted(
        recommendations, 
        key=lambda x: x.get("opportunity_score", 0), 
        reverse=True
    )[:5]
    
    # 生成日报
    report = f"""
# 电商运营日报 - {today}

## 📊 核心指标

| 指标 | 数值 |
|------|------|
| 在售商品 | {published_products}/{total_products} |
| 订单数 | {total_orders} |
| 销售额 | ¥{total_amount:.2f} |
| 客单价 | ¥{(total_amount/total_orders if total_orders else 0):.2f} |
| 待发货 | {pending_shipment} |
| 售后中 | {after_sale} |
| 客户数 | {total_customers} |
| 消息数 | {total_messages} |

## 🔍 选品推荐 TOP5

"""
    
    for i, rec in enumerate(top_recommendations, 1):
        score = rec.get("opportunity_score", 0)
        keyword = rec.get("keyword", "未知")
        price = rec.get("suggested_price", "未知")
        report += f"{i}. **{keyword}** - 机会指数：{score}，建议定价：{price}\n"
    
    report += f"""
## 📦 待处理事项

- 待发货订单：{pending_shipment}笔
- 售后申请：{after_sale}笔
- 客服消息：{total_messages}条

## ⚠️ 异常提醒

"""
    
    # 检查异常
    if pending_shipment > 10:
        report += f"- ⚠️ 待发货积压：{pending_shipment}笔，需及时处理\n"
    if after_sale > 3:
        report += f"- ⚠️ 售后积压：{after_sale}笔，需及时处理\n"
    
    if pending_shipment <= 10 and after_sale <= 3:
        report += "- ✅ 运营状态正常\n"
    
    # 保存日报
    report_file = DATA_DIR / "logs" / f"{today}.log"
    report_file.parent.mkdir(exist_ok=True)
    
    with open(report_file, "w", encoding="utf-8") as f:
        f.write(report)
    
    print(report)
    print(f"\n日报已保存：{report_file}")
    
    return report

def load_json(filepath, default=None):
    """加载JSON文件"""
    if not filepath.exists():
        return default if default is not None else []
    
    try:
        with open(filepath, "r", encoding="utf-8") as f:
            return json.load(f)
    except (json.JSONDecodeError, IOError):
        return default if default is not None else []

def main():
    """主入口"""
    print("=" * 50)
    print("电商运营日报")
    print("=" * 50)
    
    generate_daily_report()

if __name__ == "__main__":
    main()


path: scripts/init_agent.py
content: #!/usr/bin/env python3
"""
电商智能体初始化脚本
帮助用户快速配置智能体，创建必要的数据目录和配置文件
"""

import json
import os
from pathlib import Path

# 数据目录
DATA_DIR = Path.home() / "solo-ecommerce-data"

def init_data_directory():
    """初始化数据目录结构"""
    DATA_DIR.mkdir(exist_ok=True)
    (DATA_DIR / "logs").mkdir(exist_ok=True)
    
    print(f"✅ 数据目录已创建：{DATA_DIR}")
    
    # 创建初始数据文件
    init_file(DATA_DIR / "products.json", [])
    init_file(DATA_DIR / "orders.json", [])
    init_file(DATA_DIR / "recommendations.json", [])
    init_file(DATA_DIR / "customers.json", {})
    
    print("✅ 数据文件已初始化")

def init_file(filepath, default_content):
    """初始化文件"""
    if not filepath.exists():
        with open(filepath, "w", encoding="utf-8") as f:
            json.dump(default_content, f, ensure_ascii=False, indent=2)
        print(f"  - 创建：{filepath.name}")

def create_config(platforms, automation_config):
    """
    创建配置文件
    
    Args:
        platforms: 平台列表 ["淘宝", "抖店"]
        automation_config: 自动化配置
    """
    config = {
        "version": "1.0.0",
        "created": get_timestamp(),
        "platforms": platforms,
        "automation_scope": {
            "auto_publish": automation_config.get("auto_publish", False),
            "auto_pricing": automation_config.get("auto_pricing", False),
            "auto_reply": automation_config.get("auto_reply", True),
            "auto_ship": automation_config.get("auto_ship", False),
            "complaint_to_manual": True,
            "refund_threshold": automation_config.get("refund_threshold", 50)
        },
        "risk_controls": {
            "publish_needs_review": automation_config.get("publish_needs_review", True),
            "ship_needs_confirm": automation_config.get("ship_needs_confirm", True),
            "complaint_auto_escalate": True,
            "logistics_alert_days": 3
        },
        "schedules": {
            "product_scan": "0 * * * *",
            "customer_service": "*/5 * * * *",
            "order_process": "*/10 * * * *",
            "daily_report": "0 23 * * *"
        }
    }
    
    config_file = DATA_DIR / "config.json"
    with open(config_file, "w", encoding="utf-8") as f:
        json.dump(config, f, ensure_ascii=False, indent=2)
    
    print(f"✅ 配置文件已创建：{config_file}")
    return config_file

def get_timestamp():
    """获取当前时间戳"""
    from datetime import datetime
    return datetime.now().isoformat()

def setup_cron_jobs():
    """
    设置定时任务
    注意：需要通过OpenClaw的cron系统配置
    """
    print("\n定时任务配置：")
    print("需要在OpenClaw中配置以下cron任务：")
    print("1. 选品扫描：每小时执行（cron: 0 * * * *）")
    print("2. 客服回复：每5分钟执行（cron: */5 * * * *）")
    print("3. 订单处理：每10分钟执行（cron: */10 * * * *）")
    print("4. 数据复盘：每天23:00执行（cron: 0 23 * * *）")

def interactive_setup():
    """交互式配置"""
    print("=" * 50)
    print("电商智能体初始化向导")
    print("=" * 50)
    
    # 初始化数据目录
    init_data_directory()
    
    # 平台配置
    print("\n请选择运营平台（多选用逗号分隔）：")
    print("1. 淘宝/天猫")
    print("2. 抖音小店")
    print("3. 拼多多")
    print("4. 京东")
    print("5. 其他")
    
    platform_input = input("\n输入选项（如：1,2,3）：").strip()
    
    platform_map = {
        "1": "淘宝",
        "2": "抖店",
        "3": "拼多多",
        "4": "京东",
        "5": "其他"
    }
    
    platforms = []
    for p in platform_input.split(","):
        p = p.strip()
        if p in platform_map:
            platforms.append(platform_map[p])
    
    print(f"\n已选择平台：{', '.join(platforms)}")
    
    # 自动化配置
    print("\n请配置自动化范围：")
    
    auto_reply = input("自动回复客服消息？(y/n，默认y)：").strip().lower() != "n"
    auto_publish = input("自动上架商品？(y/n，默认n)：").strip().lower() == "y"
    auto_ship = input("自动处理发货？(y/n，默认n)：").strip().lower() == "y"
    
    if auto_publish:
        publish_review = input("上架前需要人工审核？(y/n，默认y)：").strip().lower() != "n"
    else:
        publish_review = True
    
    if auto_ship:
        ship_confirm = input("发货前需要人工确认？(y/n，默认y)：").strip().lower() != "n"
    else:
        ship_confirm = True
    
    refund_threshold = input("自动处理退款上限（元，默认50）：").strip()
    try:
        refund_threshold = int(refund_threshold) if refund_threshold else 50
    except ValueError:
        refund_threshold = 50
    
    # 创建配置
    config = {
        "auto_reply": auto_reply,
        "auto_publish": auto_publish,
        "auto_ship": auto_ship,
        "publish_needs_review": publish_review,
        "ship_needs_confirm": ship_confirm,
        "refund_threshold": refund_threshold
    }
    
    create_config(platforms, config)
    
    # 设置定时任务提示
    setup_cron_jobs()
    
    print("\n" + "=" * 50)
    print("✅ 初始化完成！")
    print("=" * 50)
    print("\n下一步：")
    print("1. 保持浏览器已登录店铺后台")
    print("2. 运行脚本开始自动运营")
    print("3. 查看日报了解运营情况")
    
    return DATA_DIR

def main():
    """主入口"""
    import sys
    
    if len(sys.argv) > 1 and sys.argv[1] == "--quick":
        # 快速初始化（无交互）
        init_data_directory()
        create_default_config()
        print("✅ 快速初始化完成")
    else:
        # 交互式初始化
        interactive_setup()

def create_default_config():
    """创建默认配置"""
    config = {
        "version": "1.0.0",
        "created": get_timestamp(),
        "platforms": ["淘宝", "抖店"],
        "automation_scope": {
            "auto_publish": False,
            "auto_pricing": False,
            "auto_reply": True,
            "auto_ship": False
        },
        "risk_controls": {
            "publish_needs_review": True,
            "ship_needs_confirm": True
        }
    }
    
    config_file = DATA_DIR / "config.json"
    with open(config_file, "w", encoding="utf-8") as f:
        json.dump(config, f, ensure_ascii=False, indent=2)

if __name__ == "__main__":
    main()


path: scripts/order_processor.py
content: # -*- coding: utf-8 -*-
"""订单引擎 - 自动处理发货、物流录入、售后申请"""
import json, os, sys, time
from pathlib import Path

DATA_DIR  = Path.home() / ".qclaw" / "solo-ecommerce-data"
CONFIG_FILE = DATA_DIR / "config.json"
ORDER_FILE  = DATA_DIR / "orders.json"
LOG_FILE    = DATA_DIR / "logs" / f"{time.strftime('%Y-%m-%d')}.log"

def log(msg):
    ts = time.strftime('%H:%M:%S')
    line = f"[{ts}] {msg}"
    print(line)
    LOG_FILE.parent.mkdir(parents=True, exist_ok=True)
    with open(LOG_FILE, "a", encoding="utf-8") as f:
        f.write(line + "\r\n")

def load_config():
    if not CONFIG_FILE.exists(): return None
    return json.loads(CONFIG_FILE.read_text(encoding="utf-8"))

def load_orders():
    if not ORDER_FILE.exists(): return []
    return json.loads(ORDER_FILE.read_text(encoding="utf-8"))

def save_orders(orders):
    ORDER_FILE.write_text(json.dumps(orders, ensure_ascii=False, indent=2), encoding="utf-8")

def main():
    cfg = load_config()
    if not cfg or not cfg.get("enabled"):
        log("[SKIP] 智能体未启用，跳过订单处理")
        return
    auto = cfg.get("automation", {}).get("order", {})
    if not auto.get("enabled"):
        log("[SKIP] 订单功能未启用")
        return

    log(f"[START] 订单引擎启动，平台: {cfg.get('platform')}")
    orders = load_orders()
    # TODO: 接入平台订单API
    log(f"[DONE] 订单功能待配置，共 {len(orders)} 条订单记录")

if __name__ == "__main__":
    main()

path: scripts/product_publisher.py
content: # -*- coding: utf-8 -*-
"""上架引擎 - 自动生成商品信息并发布到店铺"""
import json, os, sys, time
from pathlib import Path

DATA_DIR = Path.home() / ".qclaw" / "solo-ecommerce-data"
CONFIG_FILE = DATA_DIR / "config.json"
PROD_FILE   = DATA_DIR / "products.json"
LOG_FILE    = DATA_DIR / "logs" / f"{time.strftime('%Y-%m-%d')}.log"

def log(msg):
    ts = time.strftime('%H:%M:%S')
    line = f"[{ts}] {msg}"
    print(line)
    LOG_FILE.parent.mkdir(parents=True, exist_ok=True)
    with open(LOG_FILE, "a", encoding="utf-8") as f:
        f.write(line + "\r\n")

def load_config():
    if not CONFIG_FILE.exists(): return None
    return json.loads(CONFIG_FILE.read_text(encoding="utf-8"))

def load_products():
    if not PROD_FILE.exists(): return []
    return json.loads(PROD_FILE.read_text(encoding="utf-8"))

def save_products(products):
    PROD_FILE.write_text(json.dumps(products, ensure_ascii=False, indent=2), encoding="utf-8")

def generate_title(name, keywords, attrs, scene):
    parts = [keywords[:8], attrs[:8], scene[:8]]
    title = name + " " + " ".join(p for p in parts if p)
    return title[:30]

def main():
    cfg = load_config()
    if not cfg:
        log("[ERROR] 配置文件不存在")
        return
    if not cfg.get("enabled"):
        log("[SKIP] 智能体未启用")
        return
    auto = cfg.get("automation", {}).get("publish", {})
    if not auto.get("enabled"):
        log("[SKIP] 上架功能未启用")
        return

    log(f"[START] 上架引擎启动，平台: {cfg.get('platform')}")
    # TODO: 接入平台API或浏览器自动化
    log("[DONE] 上架功能待配置具体商品信息")

if __name__ == "__main__":
    main()

path: scripts/product_scanner.py
content: # -*- coding: utf-8 -*-
"""选品扫描引擎 - 扫描多平台热销榜单，推荐机会品类"""
import json, os, sys, time
from pathlib import Path

DATA_DIR = Path.home() / ".qclaw" / "solo-ecommerce-data"
DATA_DIR.mkdir(parents=True, exist_ok=True)
CONFIG_FILE = DATA_DIR / "config.json"
REC_FILE    = DATA_DIR / "recommendations.json"
LOG_FILE    = DATA_DIR / "logs" / f"{time.strftime('%Y-%m-%d')}.log"

def log(msg):
    ts = time.strftime('%H:%M:%S')
    line = f"[{ts}] {msg}"
    print(line)
    LOG_FILE.parent.mkdir(parents=True, exist_ok=True)
    with open(LOG_FILE, "a", encoding="utf-8") as f:
        f.write(line + "\r\n")

def load_config():
    if not CONFIG_FILE.exists():
        return None
    return json.loads(CONFIG_FILE.read_text(encoding="utf-8"))

def save_recommendations(recs):
    REC_FILE.write_text(json.dumps(recs, ensure_ascii=False, indent=2), encoding="utf-8")

def main():
    cfg = load_config()
    if not cfg:
        log("[ERROR] 配置文件不存在，请先配置电商智能体")
        return
    if not cfg.get("enabled"):
        log("[SKIP] 智能体未启用，跳过选品扫描")
        return

    platform = cfg.get("platform", "unknown")
    log(f"[START] 选品扫描启动，平台: {platform}")

    # TODO: 接入真实API或爬虫
    # 1. 抓取平台热销榜单
    # 2. 分析关键词趋势
    # 3. 计算机会指数
    # 4. 生成推荐清单

    demo_recs = [
        {"rank": 1, "category": "待配置", "score": 0.0,
         "reason": "请配置平台后获取真实数据", "suggested_price": "待定"},
    ]
    save_recommendations(demo_recs)
    log(f"[DONE] 推荐清单已保存，共 {len(demo_recs)} 条")

if __name__ == "__main__":
    main()

Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)