@round2ai/r2-cli 1.0.15 → 1.0.17

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.
@@ -9,9 +9,20 @@
9
9
  1. `r2-cli goods shops --json` → 展示店铺 → 用户选择 `shopId`
10
10
  2. `r2-cli goods stocks --json` → 展示仓库 → 用户选择 `stockId`
11
11
  3. `r2-cli goods list --stock-id <stockId> --json` → 展示商品 → 用户选择 `stockGoodsId`
12
- 4. `r2-cli goods up --stock-goods-id <id> --shop-id <id> --price <amount> --json` → 提交上架
12
+ 4. `r2-cli goods xianyu up --stock-goods-id <id> --shop-id <id> --price <amount> --json` → 提交上架
13
13
 
14
- 命令自动轮询上架进度(每 2 秒,最多 10 秒),返回:
14
+ > **提交前提醒用户**:运费默认包邮(`--transport-fee 0`),如需收运费请提供金额。可选开启验货宝(`--yhb`),但价格须在品类验货宝价格区间内。
15
+
16
+ 命令自动轮询上架进度(每 2 秒,最多 10 秒),返回 `{ success, data: { submit, listing } }`。
17
+
18
+ **提交成功展示模板**:
19
+ ```
20
+ 上架成功!
21
+ - 商品:[goodsName]
22
+ - 店铺:[shopName]
23
+ - 价格:¥[price]
24
+ - 上架 ID:[listing.id](用于后续改价/下架)
25
+ ```
15
26
 
16
27
  ```json
17
28
  {
@@ -42,6 +53,30 @@
42
53
  | `platform` | 平台(xianyu) |
43
54
  | `gmtCreate` / `gmtModified` | 创建/修改时间戳 |
44
55
 
56
+ ### 友好输出指引
57
+
58
+ 上架响应 JSON 示例:
59
+ ```json
60
+ {
61
+ "success": true,
62
+ "data": {
63
+ "submit": { "id": 12345, "status": "init" },
64
+ "listing": { "id": 12345, "goodsName": "Nike 运动鞋", "price": 299, "shopName": "店铺A", "status": "up" }
65
+ }
66
+ }
67
+ ```
68
+
69
+ Agent 提取展示:
70
+ ```
71
+ 上架成功!
72
+ - 商品:Nike 运动鞋
73
+ - 店铺:店铺A
74
+ - 价格:¥299
75
+ - 上架 ID:12345(用于后续改价/下架)
76
+ ```
77
+
78
+ > **`data.listing` 中的字段**:`id`(上架记录 ID)、`goodsName`(商品名)、`price`(价格)、`shopName`(店铺名)、`status`(状态)。Agent 提取这些字段展示给用户。
79
+
45
80
  ## 上架参数
46
81
 
47
82
  | 参数 | 必填 | 说明 |
@@ -49,49 +84,87 @@
49
84
  | `--stock-goods-id <id>` | 是 | 库存商品 ID(来自 `stockGoodsId`) |
50
85
  | `--shop-id <id>` | 是 | 第三方店铺 ID(来自 `shopId`,**不是 `id`**) |
51
86
  | `--price <amount>` | 是 | 上架价格 |
87
+ | `--yhb` | 否 | 开启验货宝(价格区间因品类而异) |
88
+ | `--transport-fee <amount>` | 否 | 运费(元,默认 0 = 包邮) |
52
89
  | `--json` | 否 | JSON 输出(Agent 推荐) |
53
90
 
91
+ > **验货宝约束**:开启 `--yhb` 时,价格须在该品类的验货宝价格区间内(不同品类区间不同,如 100~20,000、1,000~50,000 等)。超出区间会返回 `YHB_PRICE_NOT_SUPPORT` 错误,错误信息中包含具体的价格范围。Agent 应在上架失败时根据错误信息提示用户调整价格或关闭验货宝。
92
+
54
93
  > 缺少必填参数时返回 `{ "success": false, "error": "Agent 模式需要 --stock-goods-id, --shop-id, --price" }`,不会进入交互模式。
55
94
 
56
95
  ## 下架(down)
57
96
 
58
97
  **Agent 必须先向用户确认后再执行下架。**
59
98
 
99
+ **确认模板**:
100
+ ```
101
+ 确认下架?
102
+ 商品:[goodsName] | [brandName] | ¥[price]
103
+ 店铺:[shopName]
104
+ 输入 yes 确认,其他取消
105
+ ```
106
+
60
107
  ```bash
61
108
  # 方式 1:上架记录 ID
62
- r2-cli goods down --id <goodsListingId> --json
109
+ r2-cli goods xianyu down --id <goodsListingId> --json
63
110
 
64
111
  # 方式 2:库存商品 ID + 店铺 ID
65
- r2-cli goods down --stock-goods-id <id> --shop-id <id> --json
112
+ r2-cli goods xianyu down --stock-goods-id <id> --shop-id <id> --json
113
+ ```
114
+
115
+ ### 友好输出指引
116
+
117
+ 下架响应 `{ "success": true, "data": "下架成功" }`。Agent 提取展示:
118
+ ```
119
+ 下架成功!
120
+ - 商品:[goodsName]
121
+ - 店铺:[shopName]
122
+ - 上架 ID:[id]
66
123
  ```
67
124
 
68
125
  ## 改价(price)
69
126
 
70
127
  **Agent 必须先询问用户新价格,不能自行决定。**
71
128
 
129
+ > **提交前提醒用户**:可同时修改运费(`--transport-fee`,默认 0 包邮)。
130
+
72
131
  ```bash
73
132
  # 方式 1:上架记录 ID
74
- r2-cli goods price --id <goodsListingId> --price <新价格> --json
133
+ r2-cli goods xianyu price --id <goodsListingId> --price <新价格> --json
75
134
 
76
135
  # 方式 2:库存商品 ID + 店铺 ID
77
- r2-cli goods price --stock-goods-id <id> --shop-id <id> --price <新价格> --json
136
+ r2-cli goods xianyu price --stock-goods-id <id> --shop-id <id> --price <新价格> --json
137
+
138
+ # 同时修改运费
139
+ r2-cli goods xianyu price --id <goodsListingId> --price <新价格> --transport-fee <运费> --json
140
+ ```
141
+
142
+ ### 友好输出指引
143
+
144
+ 改价响应 `{ "success": true, "data": "修改成功" }`。Agent 提取展示:
145
+ ```
146
+ 改价成功!
147
+ - 商品:[goodsName]
148
+ - 原价:¥[原价] → ¥[新价格]
78
149
  ```
79
150
 
80
151
  ## 修改商品信息(edit)
81
152
 
82
153
  修改已上架商品的标题、描述、品牌、类目、图片、属性等。
83
154
 
84
- > **注意**:`goods edit` 不支持修改价格。改价需单独使用 `r2-cli goods price --id <id> --price <amount>`。
155
+ > **注意**:`goods xianyu edit` 不支持修改价格。改价需单独使用 `r2-cli goods xianyu price --id <id> --price <amount>`。
85
156
 
86
- ### 定位商品(二选一)
157
+ ### 定位商品(三选一)
87
158
 
88
159
  | 方式 | 参数 | 推荐度 |
89
160
  |------|------|--------|
90
161
  | 上架记录 ID | `--id <goodsListingId>` | 推荐,从 listing 的 id 字段取 |
91
162
  | 库存商品 + 店铺 | `--stock-goods-id <id> --account <shopId>` | 备选,挂售商品 stockGoodsId 可能为 0 |
163
+ | 商家编码 | `--outer-id <outItemNo>` | 通过商家编码匹配商品 |
92
164
 
93
165
  ### Agent 注意事项
94
166
 
167
+ - **提交前提醒用户**:可同时修改运费(`--transport-fee`,默认 0 包邮)和验货宝(`--yhb`)
95
168
  - **`--image-ids` 保持字符串**:图片 ID 是 19 位数字,`Number()` 会精度丢失
96
169
  - **`--item-attrs` 传 JSON 字符串**:必须是 `JSON.stringify()` 后的结果,不能直接传对象
97
170
  - **即使不改类目也要传 `--category-id` 和 `--channel-cat-id`**:后端必填,缺少会报 `getCategoryId() is null`
@@ -101,7 +174,7 @@ r2-cli goods price --stock-goods-id <id> --shop-id <id> --price <新价格> --js
101
174
 
102
175
  | 参数 | 说明 |
103
176
  |------|------|
104
- | `--id <id>` 或 `--stock-goods-id + --account` | 定位商品(二选一) |
177
+ | `--id <id>` 或 `--stock-goods-id + --account` 或 `--outer-id` | 定位商品(三选一) |
105
178
  | `--category-id <id>` | 大分类 ID(**后端必填**,即使不改类目也要传当前值) |
106
179
  | `--channel-cat-id <id>` | 小分类 ID(**后端必填**,即使不改类目也要传当前值) |
107
180
 
@@ -120,33 +193,12 @@ r2-cli goods price --stock-goods-id <id> --shop-id <id> --price <新价格> --js
120
193
  | `--goods-no <no>` | 货号 |
121
194
  | `--original-price <n>` | 原价(元) |
122
195
  | `--size <size>` | 尺码 |
196
+ | `--yhb` | 是否开启验货宝 |
197
+ | `--transport-fee <amount>` | 运费(元,默认 0 = 包邮) |
123
198
 
124
- ### 带图片修改的全自动流程
125
-
126
- 用户提供了图片文件时,**Agent 自动完成所有步骤,用户只需确认**:
127
-
128
- 1. **展示列表**:`r2-cli goods listing --json` → 展示给用户选择要修改的商品(获取 stockGoodsId、shopId)
129
- 2. **上传图片**:`r2-cli goods hang-up upload-images --shop-id <shopId> --files <paths> --json`
130
- 3. **AI 读图识别**:Agent 用 Read 工具查看图片,识别品牌/类目/成色/描述/材质等
131
- 4. **自动匹配类目**:`r2-cli goods hang-up categories --json` → 根据识别结果匹配 catId + channelCatId(如"运动夹克" → 男士服装>夹克)
132
- 5. **自动查询属性**:`r2-cli goods hang-up props --channel-cat-id <id> --json` → 根据识别结果自动匹配:
133
- - 成色(全新/99新/95新等) → 查找对应 valueId
134
- - 尺码(XL/L/M 等) → 查找对应 valueId
135
- - 适用季节 → 查找对应 valueId
136
- - 其他属性 → 根据识别结果匹配
137
- 6. **自动搜索品牌**:`r2-cli goods hang-up brands --channel-cat-id <> --prop-id <> --key <品牌名> --json` → 获取品牌 valueId
138
- 7. **汇总确认**:展示「当前值 vs 变更值」对比表,用户确认
139
- 8. **提交修改**:
199
+ ### 带图片修改
140
200
 
141
- ```bash
142
- r2-cli goods edit \
143
- --id <goodsListingId> \
144
- --category-id <catId> --channel-cat-id <channelCatId> \
145
- --image-ids "id1,id2,id3" \
146
- --item-attrs '[{...品牌...},{...成色...},{...尺码...},{...季节...}]' \
147
- --brand-name "Louis Vuitton/路易威登" \
148
- --json
149
- ```
201
+ 用户提供了图片文件时,参见场景指南:[../scenes/r2-scene-edit-with-images.md](../scenes/r2-scene-edit-with-images.md)
150
202
 
151
203
  ### 只改文字字段(无图片)
152
204
 
@@ -154,14 +206,31 @@ r2-cli goods edit \
154
206
 
155
207
  ```bash
156
208
  # 改标题
157
- r2-cli goods edit --id 5 \
209
+ r2-cli goods xianyu edit --id 5 \
158
210
  --category-id 50106003 --channel-cat-id "f4718bbb04d7ed1facde29f76907b07f" \
159
211
  --title "新标题" --json
160
212
 
161
213
  # 改品牌+描述
162
- r2-cli goods edit --id 5 \
214
+ r2-cli goods xianyu edit --id 5 \
163
215
  --category-id 50106003 --channel-cat-id "f4718bbb04d7ed1facde29f76907b07f" \
164
216
  --brand-name "Nike" --desc "全新描述" --json
165
217
  ```
166
218
 
167
219
  > **注意**:改品牌时建议同时传 `--item-attrs`(含所有属性,品牌项用最新 valueId),因为只传 `--brand-name` 可能不会更新属性列表中的品牌值。
220
+
221
+ ### 友好输出指引
222
+
223
+ edit 响应 `{ "success": true, "data": "修改成功" }`。Agent 提取展示修改摘要:
224
+ ```
225
+ 修改成功!
226
+ 商品:[goodsName]
227
+ ┌──────────┬──────────────────┐
228
+ │ 修改项 │ 新值 │
229
+ ├──────────┼──────────────────┤
230
+ │ 标题 │ [新标题] │
231
+ │ 品牌 │ [新品牌] │
232
+ │ 描述 │ [新描述摘要] │
233
+ └──────────┴──────────────────┘
234
+ ```
235
+
236
+ > 只展示**实际修改的字段**,未修改的字段不展示。`--item-attrs` 中如有多个属性修改,只列属性名+新值。
@@ -18,6 +18,14 @@ r2-cli goods shops --json
18
18
 
19
19
  > `--json` 输出会自动过滤敏感字段(`accessToken`、`refreshExpireIn`),Agent 可直接展示。
20
20
 
21
+ **Agent 展示格式**:
22
+ ```
23
+ 店铺列表:
24
+ 1. [shopName]([platform])— shopId: [shopId]
25
+ 2. [shopName]([platform])— shopId: [shopId]
26
+ 请选择店铺(输入编号):
27
+ ```
28
+
21
29
  ## 仓库(stocks)
22
30
 
23
31
  ```bash
@@ -26,6 +34,14 @@ r2-cli goods stocks --json
26
34
 
27
35
  返回字段:`stockId`(仓库 ID)、`stockName`(仓库名称)
28
36
 
37
+ **Agent 展示格式**:
38
+ ```
39
+ 仓库列表:
40
+ 1. [stockName](stockId: [stockId])
41
+ 2. [stockName](stockId: [stockId])
42
+ 请选择仓库(输入编号):
43
+ ```
44
+
29
45
  ## 选品商品(list)
30
46
 
31
47
  ```bash
@@ -50,16 +66,31 @@ r2-cli goods list --stock-id <stockId> --page 2 --size 50 --json
50
66
  | `salePrice` | 建议售价 |
51
67
  | `cate1Name` / `cate2Name` / `cate3Name` | 分类 |
52
68
 
69
+ **Agent 展示格式**:
70
+ ```
71
+ 选品商品列表:
72
+ 1. [goodsName] | [brand] | [size] | ¥[salePrice] | [cate3Name](stockGoodsId: [id])
73
+ 2. [goodsName] | [brand] | [size] | ¥[salePrice] | [cate3Name](stockGoodsId: [id])
74
+ 请选择商品(输入编号):
75
+ ```
76
+
53
77
  ## 上架列表(listing)
54
78
 
55
79
  ```bash
56
- r2-cli goods listing --json
57
- r2-cli goods listing --status up --json # 只看已上架
58
- r2-cli goods listing --status sold --json # 只看已售出
59
- r2-cli goods listing --shop-id <id> --json # 按店铺过滤
60
- r2-cli goods listing --stock-goods-id <id> --json # 按商品过滤
61
- r2-cli goods listing --id <id> --json # 精确查询
62
- r2-cli goods listing --page 2 --size 50 --json # 翻页
80
+ r2-cli goods xianyu listing --json
81
+ r2-cli goods xianyu listing --status up --json # 只看已上架
82
+ r2-cli goods xianyu listing --status sold --json # 只看已售出
83
+ r2-cli goods xianyu listing --shop-id <id> --json # 按店铺过滤
84
+ r2-cli goods xianyu listing --stock-goods-id <id> --json # 按商品过滤
85
+ r2-cli goods xianyu listing --id <id> --json # 精确查询
86
+ r2-cli goods xianyu listing --page 2 --size 50 --json # 翻页
63
87
  ```
64
88
 
65
- 过滤参数:`--id`、`--stock-goods-id`、`--shop-id`、`--stock-id`、`--status`(init/up/down/fail/sold)、`--platform`、`--page`(默认 1)、`--size`(默认 20,最大 50)
89
+ 过滤参数:`--id`、`--stock-goods-id`、`--shop-id`、`--stock-id`、`--status`(init/up/down/fail/sold)、`--page`(默认 1)、`--size`(默认 20,最大 50)
90
+
91
+ **Agent 展示格式**:
92
+ ```
93
+ 上架商品列表:
94
+ 1. [goodsName] | [brandName] | ¥[price] | [status] | id: [id]
95
+ 2. [goodsName] | [brandName] | ¥[price] | [status] | id: [id]
96
+ ```
@@ -0,0 +1,79 @@
1
+ # 批量操作场景指南
2
+
3
+ ## 适用场景
4
+
5
+ - 将同一商品上架到多个店铺
6
+ - 查询全部上架商品
7
+ - 批量下架/改价
8
+
9
+ ## 分页策略
10
+
11
+ ```bash
12
+ # 获取全部上架商品(分页遍历)
13
+ r2-cli goods xianyu listing --page 1 --size 50 --json
14
+ r2-cli goods xianyu listing --page 2 --size 50 --json
15
+ ```
16
+
17
+ - 建议使用 `--size 50`(最大值),减少请求次数
18
+ - 用 `--status` 过滤特定状态的商品(up/down/sold)
19
+ - 用 `--shop-id` 限定店铺范围
20
+
21
+ ## 跨店铺操作
22
+
23
+ ```bash
24
+ # 查看所有店铺
25
+ r2-cli goods shops --json
26
+
27
+ # 切换到另一个店铺的库存
28
+ r2-cli goods list --stock-id <stockId> --json
29
+
30
+ # 上架到不同店铺
31
+ r2-cli goods xianyu up --stock-goods-id <id> --shop-id <shopA> --price <n> --json
32
+ r2-cli goods xianyu up --stock-goods-id <id> --shop-id <shopB> --price <n> --json
33
+ ```
34
+
35
+ ## 注意事项
36
+
37
+ - 每个操作独立执行,一个失败不影响其他
38
+ - 批量提交时间隔至少 1 秒
39
+ - Token 过期时停止工作流,重新登录后从断点继续
40
+ - **上架/改价前提醒用户**:运费默认包邮(`--transport-fee` 默认 0),如需收运费请提供金额;可选开启验货宝(`--yhb`)
41
+
42
+ ## 汇总展示格式
43
+
44
+ 操作完成后,按以下格式展示结果:
45
+
46
+ ```
47
+ 批量上架完成!
48
+ ✅ 成功:N 个商品
49
+ - [商品名] → ¥[价格] → [店铺名]
50
+ - [商品名] → ¥[价格] → [店铺名]
51
+ ❌ 失败:N 个商品
52
+ - [商品名] → 错误:[错误信息]
53
+ - [商品名] → 错误:[错误信息]
54
+ ```
55
+
56
+ ## 友好输出指引
57
+
58
+ 每个批量操作命令的 JSON 响应结构不同,Agent 统一按以下方式处理:
59
+
60
+ **批量上架**:每个 `goods xianyu up --json` 返回 `{ success, data: { listing: { id, goodsName, price, shopName, status } } }`。逐个提取,累积汇总。
61
+
62
+ **批量下架**:每个 `goods xianyu down --json` 返回 `{ success, data: "下架成功" }`。Agent 从流程参数中提取商品信息展示:
63
+ ```
64
+ [1/2] Nike 运动鞋 → ✅ 已下架
65
+ [2/2] Adidas T恤 → ✅ 已下架
66
+ ```
67
+
68
+ **批量改价**:每个 `goods xianyu price --json` 返回 `{ success, data: "修改成功" }`。从流程参数中提取信息展示:
69
+ ```
70
+ [1/3] Nike 运动鞋 → ¥299 → ¥249 ✅
71
+ [2/3] Adidas T恤 → ¥199 → ¥149 ✅
72
+ ```
73
+
74
+ > 即使某个操作失败(`success: false`),也不影响其他商品继续执行。每完成一个商品就反馈进度,全部完成后展示汇总。
75
+
76
+ ## 参考
77
+
78
+ - [../SKILL.md](../SKILL.md) — 商品管理概览
79
+ - [../references/r2-goods-query.md](../references/r2-goods-query.md) — 查询命令
@@ -0,0 +1,51 @@
1
+ # 带图片修改商品信息
2
+
3
+ 用户提供了图片文件时,**Agent 自动完成所有步骤,用户只需确认**。
4
+
5
+ ## 全自动流程
6
+
7
+ 1. **展示列表**:`r2-cli goods xianyu listing --json` → 展示给用户选择要修改的商品
8
+ 2. **上传图片**:`r2-cli goods xianyu hang-up upload-images --shop-id <shopId> --files <paths> --json`
9
+ 3. **AI 读图识别**:Agent 用 Read 工具查看图片,识别品牌/类目/成色/描述/材质等
10
+ 4. **自动匹配类目**:`r2-cli goods xianyu hang-up categories --json` → 根据识别结果匹配 catId + channelCatId
11
+ 5. **自动查询属性**:`r2-cli goods xianyu hang-up props --channel-cat-id <id> --json` → 根据识别结果匹配成色/尺码/季节等
12
+ 6. **自动搜索品牌**:`r2-cli goods xianyu hang-up brands --channel-cat-id <> --prop-id <> --key <品牌名> --json`
13
+ 7. **汇总确认**:展示「当前值 vs 变更值」对比表,让用户确认
14
+
15
+ ```
16
+ ┌──────────┬──────────────────┬──────────────────┐
17
+ │ 字段 │ 当前值 │ 变更值 │
18
+ ├──────────┼──────────────────┼──────────────────┤
19
+ │ 标题 │ Nike 运动鞋 白 42 │ Nike 运动鞋 黑 42 │
20
+ │ 图片 │ img1.jpg │ img1.jpg,img2.jpg │
21
+ │ 成色 │ 95新 │ 全新 │
22
+ │ 运费 │ 包邮 │ 包邮(可修改) │
23
+ │ 验货宝 │ 未开启 │ 未开启(可开启) │
24
+ │ 价格 │ ¥299(不改价) │ — │
25
+ └──────────┴──────────────────┴──────────────────┘
26
+ ```
27
+
28
+ > 运费默认包邮(`--transport-fee` 默认 0),验货宝默认关闭(`--yhb`)。确认时提醒用户可修改。
29
+ 8. **提交**:
30
+
31
+ ```bash
32
+ r2-cli goods xianyu edit \
33
+ --id <goodsListingId> \
34
+ --category-id <catId> --channel-cat-id <channelCatId> \
35
+ --image-ids "id1,id2,id3" \
36
+ --item-attrs '[{...品牌...},{...成色...},{...尺码...},{...季节...}]' \
37
+ --brand-name "品牌名" \
38
+ --json
39
+ ```
40
+
41
+ ## 约束
42
+
43
+ - `--category-id` 和 `--channel-cat-id` 后端必填,即使不改类目也要传当前值
44
+ - `--item-attrs` 必须包含 props 中所有属性,不只是修改的那一个
45
+ - `--image-ids` 保持字符串,不要转数字
46
+ - `--item-attrs` 传 JSON 字符串(`JSON.stringify()` 后)
47
+
48
+ ## 参考
49
+
50
+ - [../references/r2-goods-listing.md](../references/r2-goods-listing.md) — edit 命令参数
51
+ - [../references/r2-goods-hangup.md](../references/r2-goods-hangup.md) — 图片上传和属性查询
@@ -0,0 +1,32 @@
1
+ # 服装/鞋包挂售场景指南
2
+
3
+ ## 季节推断
4
+
5
+ | 商品类型 | 适用季节 |
6
+ |----------|----------|
7
+ | 夹克、风衣、卫衣、针织衫 | 春秋季 |
8
+ | 羽绒服、棉衣、毛呢大衣 | 秋冬季 |
9
+ | T恤、短裤、背心、凉鞋 | 夏季 |
10
+ | 基础款衬衫、休闲裤 | 四季 |
11
+
12
+ ## 图片识别字段
13
+
14
+ | 字段 | 可识别性 | 说明 |
15
+ |------|---------|------|
16
+ | 品牌 | ✅ | 从 Logo/标签读取,调 brands 搜索确认 |
17
+ | 款式 | ✅ | 从整体外观判断 |
18
+ | 成色 | ✅ | 根据磨损/污渍/起球程度判断 |
19
+ | 尺码 | ⚠️ | 从标签/吊牌/水洗标读取 |
20
+ | 货号 | ⚠️ | 从标签/吊牌读取 |
21
+ | 颜色/材质 | ⚠️ | 能识别则识别,否则汇总时问 |
22
+
23
+ ## 品牌搜索建议
24
+
25
+ - 奢侈品(LV、Gucci、Chanel 等):搜完整英文名
26
+ - 运动品牌(Nike、Adidas 等):搜英文名,小写即可
27
+ - 国内品牌:搜中文名
28
+
29
+ ## 参考
30
+
31
+ - [../SKILL.md](../SKILL.md) — 挂售流程
32
+ - [../references/r2-goods-hangup.md](../references/r2-goods-hangup.md) — 挂售参数详解
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: r2-shared
3
- version: 1.1.0
3
+ version: 1.2.0
4
4
  description: "R2-CLI 共享基础技能。安装、版本检查、统一错误格式、命令概览。r2-auth 和 r2-goods 的前置依赖。触发词:r2-cli、安装、install、错误格式。"
5
5
  metadata:
6
6
  requires:
@@ -15,7 +15,7 @@ metadata:
15
15
  action: "已更名为 r2-shared,请删除旧 skill:rm -rf ~/.agents/skills/r2-cli"
16
16
  ---
17
17
 
18
- # R2-Shared (v1.1)
18
+ # R2-Shared (v1.2)
19
19
 
20
20
  > **Tip**: 始终使用 `--json` 获取结构化输出。所有 `--json` 命令统一错误格式 `{ success: false, error: "..." [, status: number] }`,检查 `success` 判断成败。`status` 字段在 HTTP 错误(ApiError)和参数校验失败(400)时包含。
21
21
  > **Tip**: Agent 获取数据后展示给用户选择,不要让用户自己提供 ID。
@@ -30,10 +30,42 @@ metadata:
30
30
  - 如果 `r2-cli` 命令不可用,提示用户先安装:`npm install -g @round2ai/r2-cli@latest`
31
31
  - **不要在命令末尾加 `&`**:如果用 Bash 工具的 `run_in_background: true`,不要额外加 `&`,否则 shell 立即返回导致输出丢失
32
32
 
33
+ **命令路径(重要)**:
34
+ - Agent **必须使用新路径**:`goods xianyu up/down/price/edit/listing/hang-up` 和 `goods taobao ...`
35
+ - 旧路径(`goods up`、`goods down` 等)仍可执行但已标记 `[已废弃]`,Agent 不要使用旧路径
36
+ - 跨平台命令(`goods shops`、`goods stocks`、`goods list`)保持不变,无平台前缀
37
+
33
38
  **版本检查**:
34
39
  - 首次使用时,Agent 应运行 `r2-cli --version` 检查当前版本
35
40
  - 最低要求版本:`1.0.12`,低于此版本提示用户更新:`npm install -g @round2ai/r2-cli@latest`
36
41
 
42
+ **更新通知(`_notice.update`)**:
43
+ `_notice.update` 会出现在所有 `--json` 命令的输出中(包含成功和失败输出),格式如下:
44
+
45
+ ```json
46
+ {
47
+ "success": true,
48
+ "data": { ... },
49
+ "_notice": {
50
+ "update": {
51
+ "message": "Update available: 1.0.15 → 1.0.16",
52
+ "command": "npm update -g @round2ai/r2-cli && npx skills add Round2AI/r2-cli --all -y"
53
+ }
54
+ }
55
+ }
56
+ ```
57
+
58
+ **当你在输出中看到 `_notice.update` 时,完成用户当前请求后,主动提议帮用户更新**:
59
+
60
+ 1. 告知用户当前版本和最新版本号
61
+ 2. 提议执行更新(CLI 和 Skills 需要同时更新):
62
+ ```bash
63
+ npm update -g @round2ai/r2-cli && npx skills add Round2AI/r2-cli --all -y
64
+ ```
65
+ 3. 更新完成后提醒用户:**退出并重新打开 AI Agent** 以加载最新 Skills
66
+
67
+ **规则**:不要静默忽略更新提示。即使当前任务与更新无关,也应在完成用户请求后补充告知。
68
+
37
69
  **旧 Skill 清理**:
38
70
  - 如果发现 `~/.agents/skills/r2-cli/`(已废弃的旧名称),提示用户删除:`rm -rf ~/.agents/skills/r2-cli`
39
71
  - 当前正确的 skill 名称:`r2-shared`、`r2-auth`、`r2-goods`
@@ -51,32 +83,13 @@ npm install -g @round2ai/r2-cli@latest
51
83
  - 先登录:`r2-cli auth login`(支持第二回合 APP / 微信 / 支付宝扫码)
52
84
  - 检查状态:`r2-cli auth status`
53
85
 
54
- ## 认证命令(详见 r2-auth skill)
86
+ ## 认证命令
55
87
 
56
- | 命令 | 说明 |
57
- |------|------|
58
- | `r2-cli auth login --json` | 扫码登录(Agent 推荐,一步完成) |
59
- | `r2-cli auth xianyu --json` | 闲鱼店铺授权(Agent 推荐,一步完成) |
60
- | `r2-cli auth status` | 查看登录状态 |
61
- | `r2-cli auth logout` | 退出登录 |
62
-
63
- ## 商品管理命令(详见 r2-goods skill)
64
-
65
- | 分类 | 命令 | 说明 |
66
- |------|------|------|
67
- | 查询 | `r2-cli goods shops [--json]` | 查看已授权店铺 |
68
- | | `r2-cli goods stocks [--json]` | 查看仓库 |
69
- | | `r2-cli goods list [--stock-id <id>] [--json]` | 查看选品商品 |
70
- | | `r2-cli goods listing [--status <up/down/sold>] [--json]` | 查询上架列表 |
71
- | 上架 | `r2-cli goods up --stock-goods-id <> --shop-id <> --price <> --json` | 普通上架(选品商品) |
72
- | | `r2-cli goods down --id <id> [--json]` | 下架商品 |
73
- | | `r2-cli goods price --id <id> --price <amount> [--json]` | 修改价格 |
74
- | 修改 | `r2-cli goods edit --id <> --category-id <> --channel-cat-id <> ... --json` | 修改商品信息(定位推荐 `--id`) |
75
- | 挂售 | `r2-cli goods hang-up categories [--json]` | 获取闲鱼类目 |
76
- | | `r2-cli goods hang-up props --channel-cat-id <id> [--json]` | 获取属性列表 |
77
- | | `r2-cli goods hang-up brands --channel-cat-id <> --prop-id <> --key <> [--json]` | 品牌搜索 |
78
- | | `r2-cli goods hang-up upload-images --shop-id <> --files <> --json` | 上传图片 |
79
- | | `r2-cli goods hang-up submit --shop-id <> --title <> ... --json` | 提交挂售上架 |
88
+ 认证登录和闲鱼店铺授权的完整流程与参数详见 **r2-auth** skill。
89
+
90
+ ## 商品管理命令
91
+
92
+ 商品上架、下架、改价、修改、挂售以及查询的完整流程与参数详见 **r2-goods** skill。
80
93
 
81
94
  ## 其他命令
82
95
 
@@ -85,15 +98,51 @@ npm install -g @round2ai/r2-cli@latest
85
98
  | `r2-cli update` | 一键更新 CLI 和技能 |
86
99
  | `r2-cli uninstall` | 卸载并清除配置 |
87
100
 
88
- ## Agent 上架路由(概要)
101
+ ## 上架路由
102
+
103
+ 详见 **r2-goods** skill 的「上架路由决策」章节。
104
+
105
+ ## Network & Retry
106
+
107
+ Agent 处理命令失败时的策略:
108
+
109
+ - **网络错误**(`TypeError`、`fetch failed`):最多自动重试 2 次,间隔 3 秒。连续失败则提示用户检查网络
110
+ - **超时错误**(`timeout`):重试 1 次。仍超时则建议检查网络或 SERVER_BASEURL 配置
111
+ - **认证错误**(`请先运行 r2-cli auth login 登录`、`401`):**不重试**,直接引导用户重新登录(见下方 Token Expiry Recovery)
112
+ - **轮询超时**(`轮询超时`):说明提交已接受但结果未回,建议稍后用 `goods xianyu listing` 查看
113
+
114
+ ## Token Expiry Recovery
115
+
116
+ 当命令返回认证错误时:
117
+
118
+ 1. **立即停止当前工作流**,不要继续执行其他命令
119
+ 2. 告知用户 Token 已过期,引导重新登录:`r2-cli auth login --json`
120
+ 3. 重新登录成功后,**从上次成功的步骤继续**(不要从头开始)
121
+
122
+ ## 友好输出原则
123
+
124
+ Agent 执行 `--json` 命令后,**不要直接把原始 JSON 丢给用户**。应从 JSON 中提取关键字段,整理为易读格式:
125
+
126
+ ```
127
+ ❌ 错误:直接把 JSON 丢给用户
128
+ { "success": true, "data": [{ "shopId": "10086", "shopName": "xxx", "platform": "xianyu" }] }
129
+
130
+ ✅ 正确:提取关键字段,整理展示
131
+ 店铺列表:
132
+ 1. xxx(xianyu)— shopId: 10086
133
+ ```
134
+
135
+ 具体规则:
136
+ - **查询结果**:用编号列表展示(参见各 reference 的"Agent 展示格式"模板),末尾提示用户选择
137
+ - **操作结果**:提取关键字段(listing ID、价格、状态等),一行一个字段简洁展示
138
+ - **错误信息**:直接展示 `error` 字段内容,不展示整个 JSON 结构
139
+ - **确认提示**:展示商品关键信息(名称/价格/店铺)后,引导用户输入 yes/no
140
+
141
+ 始终遵守:**Agent 看 JSON,用户看友好文本。**
89
142
 
90
- 用户说"上架"时需要选择正确的方式:
91
- - **用户明确指定方式或提供了图片** → 直接走对应流程
92
- - **未指定方式** → **必须询问用户**:"选品上架还是挂售上架?"
93
- - 选品上架 → `goods up`(店铺 → 仓库 → 选品商品 → 提交价格)
94
- - 挂售上架 → `goods hang-up`(上传图片 → AI 读图识别 → 类目/属性 → 提交)
143
+ ## 分页建议
95
144
 
96
- > 详细决策规则和完整操作流程见 **r2-goods** skill。
145
+ 查询类命令(`goods list`、`goods xianyu listing`、`goods taobao listing`)建议使用 `--page 1 --size 50`。如果响应包含分页信息,继续翻页直到数据取完。在查询前提醒用户可以通过 `--status` 或 `--stock-id` 缩小范围提高效率。
97
146
 
98
147
  ## 统一错误格式
99
148
 
@@ -115,4 +164,4 @@ API 错误和参数校验失败时额外包含 `status` 字段:
115
164
  |----------|------|----------|
116
165
  | `请先运行 r2-cli auth login 登录` | 未登录或 Token 过期 | 执行 `r2-cli auth login --json` |
117
166
  | `二维码已过期` / `授权链接已过期` | 扫码超时(5 分钟) | 重新执行命令 |
118
- | `轮询超时` | 上架结果查询超时 | 稍后用 `r2-cli goods listing` 查看 |
167
+ | `轮询超时` | 上架结果查询超时 | 稍后用 `r2-cli goods xianyu listing` 查看 |
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "ownerId": "round2ai",
3
- "slug": "r2-cli",
4
- "version": "0.1.0"
3
+ "slug": "r2-shared",
4
+ "version": "1.2.0"
5
5
  }