@round2ai/r2-cli 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@round2ai/r2-cli",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "R2-CLI,向 AI 开放二手潮奢交易全链路能力",
5
5
  "main": "dist/r2-cli.js",
6
6
  "type": "module",
@@ -23,7 +23,7 @@
23
23
  ],
24
24
  "files": [
25
25
  "dist",
26
- ".claude/skills/r2-cli-0.1.0",
26
+ "skills",
27
27
  "package.json",
28
28
  "README.md"
29
29
  ],
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: r2-auth
3
+ description: R2-CLI 认证登录专家。两步式扫码登录:生成二维码图片 + 轮询确认。用于登录、login、auth、扫码、二维码场景。
4
+ ---
5
+
6
+ # R2-Auth Skill
7
+
8
+ 两步式扫码登录,专为 AI Agent 设计。第一步生成二维码,Agent 将 unicodeQR 直接输出到聊天窗口展示给用户;第二步轮询等待用户扫码确认。
9
+
10
+ ## 安装
11
+
12
+ ```bash
13
+ npm install -g @round2ai/r2-cli@latest
14
+ ```
15
+
16
+ ## 命令前缀
17
+
18
+ 见 **r2-cli** skill 的"命令前缀自动检测"章节。以下文档使用 `r2-cli` 作为前缀,根据检测结果替换。
19
+
20
+ ## 登录流程(两步)
21
+
22
+ ### 第1步:生成二维码
23
+
24
+ ```bash
25
+ r2-cli auth login qr
26
+ ```
27
+
28
+ 输出 JSON:
29
+ ```json
30
+ {
31
+ "qrToken": "xxx",
32
+ "expireTimeMs": 300000,
33
+ "pollIntervalMs": 800,
34
+ "qrPath": "C:\\Users\\xxx\\.r2-cli\\qrcode.png",
35
+ "unicodeQR": "█▀▀▀▀▀█ ..."
36
+ }
37
+ ```
38
+
39
+ **Agent 必须**:将 `unicodeQR` 字段的值直接输出到聊天窗口(作为文本回复),不要使用 Read 工具读取 PNG 图片——聊天窗口无法渲染图片,但 unicode 半块字符(█▀▄)可以正常显示。
40
+
41
+ ### 第2步:立即轮询登录状态
42
+
43
+ **关键**:输出二维码后,Agent 必须立即在后台启动轮询,不要等待用户回复。
44
+
45
+ ```bash
46
+ r2-cli auth login poll --token <qrToken> --expire <expireTimeMs> --interval <pollIntervalMs>
47
+ ```
48
+
49
+ 使用 Bash 工具的 `run_in_background: true` 启动轮询,然后用 `TaskOutput` 阻塞等待结果。参数取自第1步返回的 JSON 字段。
50
+
51
+ 成功输出:
52
+ ```json
53
+ {
54
+ "success": true,
55
+ "userInfo": { "nickname": "...", "mobile": "..." },
56
+ "token": "..."
57
+ }
58
+ ```
59
+
60
+ 失败输出:
61
+ ```json
62
+ {
63
+ "success": false,
64
+ "error": "轮询超时 ..."
65
+ }
66
+ ```
67
+
68
+ ## 其他命令
69
+
70
+ | 命令 | 说明 |
71
+ |------|------|
72
+ | `r2-cli auth status` | 查看登录状态 |
73
+ | `r2-cli auth logout` | 退出登录 |
74
+
75
+ ## 人类一键登录
76
+
77
+ ```bash
78
+ r2-cli auth login
79
+ ```
80
+
81
+ 直接在终端显示 unicode 二维码,适合人类在 CLI 中使用。
82
+
83
+ ## 注意事项
84
+
85
+ - Token 存储在 `~/.r2-cli/config.json`,过期会自动刷新
86
+ - 二维码默认5分钟过期,超时需重新执行第1步
87
+ - 登录成功后,后续 goods 等命令可直接使用
@@ -0,0 +1,5 @@
1
+ {
2
+ "ownerId": "round2ai",
3
+ "slug": "r2-auth",
4
+ "version": "0.1.0"
5
+ }
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: r2-cli
3
+ description: R2-CLI 二手潮奢交易工具。用于认证登录、基本操作(登录、login、auth、商品、goods)。安装后 AI Agent 可直接调用全部交易能力。
4
+ ---
5
+
6
+ # R2-CLI Skill
7
+
8
+ R2-CLI 是二手潮奢交易命令行工具,支持商品管理(上架/下架/改价/列表)、认证登录等。
9
+
10
+ ## 安装
11
+
12
+ ```bash
13
+ npm install -g @round2ai/r2-cli@latest
14
+ ```
15
+
16
+ ## 命令前缀自动检测
17
+
18
+ 首次使用时检测一次,后续所有命令使用检测到的前缀:
19
+
20
+ 1. 项目目录有 `package.json`(name 含 r2-cli)→ `npm run dev --`
21
+ 2. 存在 `dist/r2-cli.js` → `node dist/r2-cli.js`
22
+ 3. `r2-cli --version` 成功 → `r2-cli`
23
+
24
+ 以下文档使用 `r2-cli` 作为前缀,根据检测结果替换。
25
+
26
+ > **注意**:部分平台 npm 会拦截 `--help`/`-h` 等 flag,若 `npm run dev -- --help` 显示的是 npm 帮助,改用 `npx tsx src/entrypoints/r2-cli.tsx --help`。
27
+
28
+ ## 前置条件
29
+
30
+ - 必须先登录:`r2-cli auth login`(扫码登录)
31
+ - 检查登录状态:`r2-cli auth status`
32
+ - Token 过期会自动刷新,刷新失败才需要重新登录
33
+ - Token 存储在 `~/.r2-cli/config.json`
34
+
35
+ ## 认证命令 `r2-cli auth`
36
+
37
+ | 命令 | 说明 |
38
+ |------|------|
39
+ | `r2-cli auth login` | 扫码登录(生成二维码 → 手机扫码 → 确认) |
40
+ | `r2-cli auth logout` | 退出登录 |
41
+ | `r2-cli auth status` | 查看登录状态和用户信息 |
42
+
43
+ ## 商品管理命令 `r2-cli goods`
44
+
45
+ | 命令 | 说明 |
46
+ |------|------|
47
+ | `r2-cli goods shops` | 查看已授权店铺(`-p xianyu/douyin`) |
48
+ | `r2-cli goods list` | 寄售商品列表(`--status wait/on/sold/down`) |
49
+ | `r2-cli goods up` | 上架商品(交互式7步向导) |
50
+ | `r2-cli goods down <ids...>` | 下架商品(支持批量) |
51
+ | `r2-cli goods reup <ids...>` | 重新上架(支持批量) |
52
+ | `r2-cli goods price <id> --price <amount>` | 修改售价 |
53
+
54
+ > 商品管理的详细用法(交互式向导、AI Agent 分步上架)见 **r2-goods** skill。
55
+ > 认证登录的 Agent 两步式流程见 **r2-auth** skill。
@@ -0,0 +1,5 @@
1
+ {
2
+ "ownerId": "round2ai",
3
+ "slug": "r2-cli",
4
+ "version": "0.1.0"
5
+ }
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: r2-goods
3
+ description: R2-CLI 商品管理专家。用于商品上架、下架、改价、列表等操作,支持交互式向导和 AI Agent 分步执行(上架、下架、商品列表、改价、goods、商品、寄售)。
4
+ ---
5
+
6
+ # R2-Goods Skill
7
+
8
+ 商品管理专家,理解闲鱼/抖音商品上架全流程,能指导 AI Agent 正确调用 CLI 命令完成商品操作。
9
+
10
+ ## 安装
11
+
12
+ ```bash
13
+ npm install -g @round2ai/r2-cli@latest
14
+ ```
15
+
16
+ ## 命令前缀
17
+
18
+ 见 **r2-cli** skill 的"命令前缀自动检测"章节。以下文档使用 `r2-cli` 作为前缀,根据检测结果替换。
19
+
20
+ ## 命令概览
21
+
22
+ | 命令 | 说明 |
23
+ |------|------|
24
+ | `r2-cli goods shops` | 查看已授权店铺(`-p xianyu/douyin`) |
25
+ | `r2-cli goods list` | 寄售商品列表(`--status wait/on/sold/down`) |
26
+ | `r2-cli goods up` | 交互式上架向导(7步) |
27
+ | `r2-cli goods down <ids...>` | 下架商品(支持批量) |
28
+ | `r2-cli goods reup <ids...>` | 重新上架(支持批量) |
29
+ | `r2-cli goods price <id> --price <amount>` | 修改售价 |
30
+
31
+ ## goods list 选项
32
+
33
+ - `--status <status>` — `wait`(待上架)、`on`(已上架)、`sold`(已售)、`down`(已下架)
34
+ - `--keyword <keyword>` — 搜索关键词
35
+ - `--page <n>` / `--size <n>` — 分页(size 上限 100)
36
+
37
+ ## 交互式上架(7步)
38
+
39
+ `r2-cli goods up` 直接进入交互式向导:
40
+
41
+ 1. **店铺选择**(缓存优先)— 有缓存直接确认,无缓存则选平台+店铺
42
+ 2. **选择商品** — 从待同步列表中选择
43
+ 3. **选择成色** — 成色等级(商品类型固定为普通商品)
44
+ 4. **商品描述** — 输入描述
45
+ 5. **选择类目** — 主类目 → 子类目
46
+ 6. **售价** — 输入售价(必须为正数)
47
+ 7. **选择属性** — 品牌/尺码/成色自动匹配
48
+ 8. **确认提交** — 展示摘要确认
49
+
50
+ > 目前仅支持普通商品(bizType=2),严选商品暂不支持。
51
+
52
+ ## AI Agent 分步上架流程
53
+
54
+ Agent 无法操作交互式选择器,使用子命令逐步执行:
55
+
56
+ ```
57
+ 1. r2-cli goods list --status wait → 获取待上架商品列表
58
+ 2. r2-cli goods up info <id> → 获取商品详情 + 店铺 + 地址 + 预填值
59
+ 3. r2-cli goods up address ... → (仅地址为 null 时)设置发货地址
60
+ 4. r2-cli goods up categories → 获取分类树
61
+ 5. r2-cli goods up props <catId> → 获取分类属性 + 品牌搜索
62
+ 6. r2-cli goods up submit ... → 提交上架
63
+ ```
64
+
65
+ ### 第1步:获取待上架商品列表
66
+
67
+ ```bash
68
+ r2-cli goods list --status wait
69
+ # 表格输出:ID、名称、货号、规格、售价
70
+ ```
71
+
72
+ ### 第2步:获取商品详情
73
+
74
+ ```bash
75
+ r2-cli goods up info <goodsInfoId>
76
+ # 返回: { shops, selectedShop, goodsDetail(含goodsInfoId), prefill, address }
77
+ ```
78
+
79
+ **prefill 字段**(建议值,Agent 可参考或调整):
80
+
81
+ | 字段 | 说明 | 可选值 |
82
+ |------|------|--------|
83
+ | `stuffStatus` | 成色 | `"100"`全新, `"-1"`准新, `"99"`99新, `"95"`95新, `"90"`9新 |
84
+ | `reservePrice` | 建议售价 | 金额 |
85
+ | `desc` | 商品描述 | 文本 |
86
+ | `brandName` | 品牌名 | 用于品牌属性搜索 |
87
+ | `size` | 规格/尺码 | 用于尺码属性匹配 |
88
+
89
+ **address**:为 `null` 时需先执行 `r2-cli goods up address --save`。
90
+
91
+ 选项:`--shop <shopId>` `-p, --platform <xianyu|douyin>`
92
+
93
+ ### 第3步:设置发货地址(如需要)
94
+
95
+ 非交互式(Agent 推荐):
96
+
97
+ ```bash
98
+ # 列出省份
99
+ r2-cli goods up address --provinces
100
+ # 列出城市
101
+ r2-cli goods up address --cities <省份名>
102
+ # 列出地区
103
+ r2-cli goods up address --areas <城市名> --province <省份名>
104
+ # 保存地址
105
+ r2-cli goods up address --save --province <省> --city <市> --area-code <code>
106
+ ```
107
+
108
+ 交互式(人类使用):
109
+
110
+ ```bash
111
+ r2-cli goods up address --set
112
+ ```
113
+
114
+ 查看当前地址:
115
+
116
+ ```bash
117
+ r2-cli goods up address
118
+ ```
119
+
120
+ ### 第4步:获取分类列表
121
+
122
+ ```bash
123
+ r2-cli goods up categories
124
+ # 返回: [{ catId, catName, children: [{ channel, channelCatId }] }]
125
+ ```
126
+
127
+ 先选主类目(catId),再选子类目(channelCatId)。
128
+
129
+ ### 第5步:获取分类属性
130
+
131
+ ```bash
132
+ r2-cli goods up props <channelCatId> --brand <keyword>
133
+ # 返回: [{ propId, propName, propsValues: [{ valueId, valueName }], matched? }]
134
+ ```
135
+
136
+ - 品牌属性传 `--brand` 会返回 `matched` 匹配结果
137
+ - Agent 应优先使用 `matched` 中的值
138
+
139
+ ### 第6步:提交上架
140
+
141
+ ```bash
142
+ r2-cli goods up submit \
143
+ --data @detail.json \
144
+ --division-id <id> \
145
+ --cat-id <catId> \
146
+ --channel-cat-id <channelCatId> \
147
+ --goods-no <货号> \
148
+ --size <规格> \
149
+ --attrs @attrs.json \
150
+ --services @services.json
151
+ ```
152
+
153
+ **`--data`**:goodsDetail JSON(`@file.json` 从文件读取,或直接传 JSON 字符串)。goodsDetail 中已包含 `goodsInfoId`、`account`、`imageList`、`spBizType` 等全量字段,会透传给上架接口。
154
+
155
+ **必填参数**:`--data`、`--division-id`、`--cat-id`、`--channel-cat-id`
156
+
157
+ **可选覆盖参数**:
158
+ - `--price <amount>` — 覆盖售价
159
+ - `--stuff <status>` — 覆盖成色
160
+ - `--desc <desc>` — 覆盖描述
161
+ - `--goods-no <no>` — 货号
162
+ - `--size <size>` — 规格
163
+ - `--title <title>` — 标题
164
+ - `--attrs <json>` — 属性列表 JSON(`@file.json` 从文件读取)
165
+ - `--services <json>` — 服务保障 JSON(`@file.json` 从文件读取)
166
+
167
+ **attrs 格式**:
168
+ ```json
169
+ [
170
+ { "propId": "xxx", "valueId": "yyy", "valueName": "JORDAN" }
171
+ ```
172
+
173
+ ## 缓存
174
+
175
+ - **店铺**:首次选择后缓存到 `~/.r2-cli/config.json`,下次自动使用
176
+ - **地址**:`address --save` 或交互式设置后缓存
177
+
178
+ ## 业务约束
179
+
180
+ - 排除商品原始 `price`,只用用户确认的 `reservePrice` 和 `originalPrice`
181
+ - 目前仅支持普通商品(itemBizType=2)
182
+ - Windows 下 JSON 参数建议用 `@file.json` 方式传
@@ -0,0 +1,5 @@
1
+ {
2
+ "ownerId": "round2ai",
3
+ "slug": "r2-goods",
4
+ "version": "0.1.0"
5
+ }