@optima-chat/optima-agent 0.8.38 → 0.8.39

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.
@@ -145,7 +145,8 @@
145
145
  "Bash(aws ecs:*)",
146
146
  "Bash(aws ecr:*)",
147
147
  "Bash(gh search:*)",
148
- "Bash(npx tsc:*)"
148
+ "Bash(npx tsc:*)",
149
+ "Bash(find /Users/verypro/optima-agent -path */node_modules -prune -o -type f \\\\\\(-name *comfy* -o -name *gen* \\\\\\) -print)"
149
150
  ],
150
151
  "deny": [],
151
152
  "ask": []
@@ -151,6 +151,30 @@ logistics address validate --address '<JSON Address>'
151
151
 
152
152
  所有命令支持 `--pretty` 参数输出人类可读格式。
153
153
 
154
+ ### JD 走货限制知识
155
+
156
+ **货物类型限制**(不同专线支持不同 cargo type):
157
+ - 普货线:仅接 general
158
+ - 带电线:接 battery + general
159
+ - 服装线:接 clothing + general
160
+ - 化妆品线:接 cosmetic
161
+ - 系统会自动根据产品 cargo_type 过滤不可用专线
162
+
163
+ **品牌限制**:部分国际品牌在 JD 禁运列表中,系统自动检查
164
+
165
+ **PGA 管控**:部分商品(食品、药品等)受 PGA 管控,系统做关键词初筛
166
+
167
+ **偏远邮编**:US 部分邮编为偏远无服务区域,JD 不提供服务
168
+
169
+ ### AI 发货决策树
170
+
171
+ ```
172
+ 卖家说"发货" → 查 getRates
173
+ ├── 有可用方案 → AskUserQuestion 展示方案让卖家选择
174
+ ├── JD 无方案但有 EasyShip → 告知原因,建议使用其他物流或手动发货
175
+ └── 全部无方案 → 告知原因 + 建议手动发货
176
+ ```
177
+
154
178
  ## 不确定用什么命令?
155
179
 
156
180
  运行 `logistics --help` 查看所有子命令。
@@ -45,10 +45,28 @@ description: Order fulfillment and shipping management. Process orders, ship pac
45
45
 
46
46
  | shipping_mode_used | 含义 | 发货方式 |
47
47
  |--------------------|------|----------|
48
- | `easyship` | 买家选择了动态运费快递 | 可选自动发货 手动发货 |
49
- | `fixed` | 买家使用固定运费 | 只能手动发货 |
50
- | `free` | 全球免运费 | 只能手动发货 |
51
- | 空/null | 历史订单 | 只能手动发货 |
48
+ | `easyship` | 买家选择了动态运费快递(DYNAMIC) | 自动发货 / 指定方案 / 手动 |
49
+ | `fixed` | 买家使用固定运费 | 指定方案 / 手动 |
50
+ | `free` | 全球免运费 | 指定方案 / 手动 |
51
+ | 空/null | 历史订单 | 指定方案 / 手动 |
52
+
53
+ #### 发货流程
54
+
55
+ 卖家说"发货" → 查订单 → AskUserQuestion "如何发货?"
56
+
57
+ **DYNAMIC 订单**(买家已选物流方案,有 selected_courier_id):
58
+ - 选项 1: 使用买家选择的物流方案 → `commerce order ship --id <order-id> --auto`
59
+ - 选项 2: 使用其他系统物流方案 → 先 `logistics rates query` 查报价 → AskUserQuestion 展示方案 → 卖家选 → `commerce order ship --id <order-id> --rate-id <selected-rate-id>`
60
+ - 选项 3: 自己处理 → 卖家提供 tracking number → `commerce order ship --id <order-id> --tracking <number> [--carrier <name>]`
61
+
62
+ **FREE/FIXED 订单**(无 selected_courier_id):
63
+ - 选项 1: 使用系统物流 → 先 `logistics rates query` 查报价 → AskUserQuestion 展示方案 → 卖家选 → `commerce order ship --id <order-id> --rate-id <selected-rate-id>`
64
+ - 选项 2: 自己处理 → 卖家提供 tracking number → `commerce order ship --id <order-id> --tracking <number> [--carrier <name>]`
65
+
66
+ 三种 CLI 路径:
67
+ - `--auto`:仅 DYNAMIC 默认方案(使用买家 checkout 时选的 courier)
68
+ - `--rate-id <id>`:任意模式,卖家/AI 指定方案
69
+ - `--tracking <number>`:手动发货
52
70
 
53
71
  #### 发货决策规则(必须严格遵守)
54
72
 
@@ -60,30 +78,35 @@ description: Order fulfillment and shipping management. Process orders, ship pac
60
78
 
61
79
  **步骤3**:根据字段值决定下一步操作:
62
80
 
63
- - **如果 `shipping_mode_used = "easyship"`**:
81
+ - **如果 `shipping_mode_used = "easyship"`(DYNAMIC 订单)**:
64
82
  1. **必须**使用 AskUserQuestion 工具询问用户
65
- 2. 提供两个选项让用户选择
83
+ 2. 提供三个选项:使用买家方案(--auto)、选择其他方案(--rate-id)、手动发货(--tracking)
66
84
  3. **禁止**直接询问运单号
67
85
  4. 等待用户选择后再执行对应命令
68
86
 
69
87
  - **如果 `shipping_mode_used = "fixed"` 或 `"free"` 或字段为空**:
70
- 1. 询问用户提供运单号。快递公司名称为**可选**,如果用户未提供,后端会根据运单号自动检测
71
- 2. 用户提供运单号后即可执行发货命令,无需等待用户补充 carrier
72
- 3. **即使用户提供了快递公司名称,发货时也统一不传 carrier**,让后端根据运单号自动检测并存储准确的快递公司名称(人类可读,如 "SF Express"、"UPS")。发货成功后对比响应中的 carrier 与用户所说的:
88
+ 1. **必须**使用 AskUserQuestion 工具询问用户
89
+ 2. 提供两个选项:使用系统物流(--rate-id)、手动发货(--tracking)
90
+ 3. 如果用户选择系统物流,先 `logistics rates query` 查报价,再用 AskUserQuestion 展示可用方案
91
+ 4. 如果用户选择手动发货:询问运单号,快递公司名称为**可选**
92
+ 5. **即使用户提供了快递公司名称,发货时也统一不传 carrier**,让后端根据运单号自动检测并存储准确的快递公司名称(人类可读,如 "SF Express"、"UPS")。发货成功后对比响应中的 carrier 与用户所说的:
73
93
  - 一致 → 正常告知
74
94
  - 不一致 → 告知用户:"您提供的是 XX,系统根据运单号识别为 YY,已按识别结果记录。如有误请告知。"
75
95
 
76
- #### Easyship 自动发货
96
+ #### 系统物流发货
77
97
 
78
- **适用场景**:`shipping_mode_used = "easyship"` 且用户选择使用 Easyship
98
+ **适用场景**:任意 shipping_mode_used,用户选择使用系统物流
79
99
 
80
100
  **命令**:
81
101
  ```bash
82
- # 使用买家选择的快递(推荐)
102
+ # DYNAMIC 订单 — 使用买家选择的快递(推荐)
83
103
  commerce order ship --id <order-id> --auto
84
104
 
85
- # 或指定其他 Easyship 支持的快递
105
+ # DYNAMIC 订单 — 指定其他快递
86
106
  commerce order ship --id <order-id> --auto --courier-id <courier-id>
107
+
108
+ # 任意模式 — 使用指定的物流方案(先查 logistics rates query)
109
+ commerce order ship --id <order-id> --rate-id <rate-id>
87
110
  ```
88
111
 
89
112
  **返回结果包含**:
@@ -95,7 +118,7 @@ commerce order ship --id <order-id> --auto --courier-id <courier-id>
95
118
 
96
119
  **运单标签处理(重要)**:
97
120
 
98
- 运单标签是用户必须打印并贴在包裹上的快递单。Easyship 生成标签需要几秒到几分钟。
121
+ 运单标签是用户必须打印并贴在包裹上的快递单。物流服务生成标签需要几秒到几分钟。
99
122
 
100
123
  **发货后根据 label_state 处理**:
101
124
 
@@ -103,11 +126,11 @@ commerce order ship --id <order-id> --auto --courier-id <courier-id>
103
126
  |-------------|------|----------|
104
127
  | `generated` / `printed` | 标签已生成 | 提供 `label_url` 让用户下载打印 |
105
128
  | `pending` / `generating` | 标签生成中 | 告知用户「标签正在生成,稍后可以让我帮你查询」 |
106
- | `failed` / `technical_failed` | 生成失败 | 告知用户需要检查 EasyShip 后台或重新发货 |
129
+ | `failed` / `technical_failed` | 生成失败 | 告知用户需要检查物流服务后台或重新发货 |
107
130
 
108
131
  **查询标签状态**:
109
132
 
110
- 如果发货时 label_state 为 pending/generating,稍后使用 `order refresh-label` 从 Easyship 同步最新状态:
133
+ 如果发货时 label_state 为 pending/generating,稍后使用 `order refresh-label` 同步最新状态:
111
134
  ```bash
112
135
  commerce order refresh-label --id <order-id>
113
136
  ```
@@ -166,64 +189,68 @@ commerce order mark-delivered --id <order-id>
166
189
 
167
190
  #### 发货场景示例对话
168
191
 
169
- **场景1:Easyship 订单**
192
+ **场景1:DYNAMIC 订单(买家已选物流方案)**
170
193
  ```
171
194
  用户:订单 order_abc 发货
172
195
 
173
196
  助手:[执行 Bash: commerce order get --id order_abc]
174
- [发现 shipping_mode_used = "easyship"]
197
+ [发现 shipping_mode_used = "easyship",有 selected_courier_id]
175
198
  [使用 AskUserQuestion 工具]
176
199
 
177
200
  AskUserQuestion:
178
- question: "该订单使用 Easyship 运费模式,请选择发货方式"
201
+ question: "该订单买家已选择物流方案,请选择发货方式"
179
202
  options:
180
- - label: "Easyship 自动发货(推荐)"
181
- description: "自动生成运单号和标签,使用买家选择的快递"
203
+ - label: "使用买家选择的物流方案(推荐)"
204
+ description: "自动生成运单号和标签,使用买家 checkout 时选的快递"
205
+ - label: "选择其他系统物流方案"
206
+ description: "查询可用物流方案,选择后创建运单"
182
207
  - label: "手动填写运单号"
183
- description: "使用其他快递公司,需要提供运单号"
208
+ description: "自己处理物流,需要提供运单号"
184
209
 
185
- 用户:[选择 Easyship 自动发货]
210
+ 用户:[选择使用买家方案]
186
211
 
187
212
  助手:[执行 Bash: commerce order ship --id order_abc --auto]
188
213
  [检查返回结果中的 label_state]
189
-
190
- [情况A:label_state = "generated",有 label_url]
191
- 发货成功!运单号 ES123456789,快递公司 FedEx。
192
- 运单标签已生成,请下载打印后贴在包裹上:https://...
193
- 物流信息同步中,稍后可以让我帮你查询物流状态。
194
-
195
- [情况B:label_state = "pending" 或 "generating"]
196
214
  发货成功!运单号 ES123456789,快递公司 FedEx。
197
- 运单标签正在生成中,稍后可以让我帮你查询标签和物流状态。
198
-
199
- 用户:标签好了吗
200
-
201
- 助手:[执行 Bash: commerce order refresh-label --id order_abc]
202
- [检查返回结果中的 label_state 和 label_url]
203
-
204
- [情况A:label_state = "generated",有 label_url]
205
215
  运单标签已生成,请下载打印后贴在包裹上:https://...
206
-
207
- [情况B:label_state 仍为 "pending" 或 "generating"]
208
- 运单标签仍在生成中,请稍后再试。
209
216
  ```
210
217
 
211
- **场景2:固定运费/免运费订单(手动发货)**
218
+ **场景2:FREE/FIXED 订单(使用系统物流)**
212
219
  ```
213
220
  用户:订单 order_xyz 发货
214
221
 
215
222
  助手:[执行 Bash: commerce order get --id order_xyz]
216
- [发现 shipping_mode_used = "fixed" 或 "free"]
217
- 请提供运单号(快递公司可选,系统会自动识别)。
223
+ [发现 shipping_mode_used = "fixed",无 selected_courier_id]
224
+ [使用 AskUserQuestion 工具]
218
225
 
219
- 用户:单号 SF123456
226
+ AskUserQuestion:
227
+ question: "该订单使用固定运费模式,请选择发货方式"
228
+ options:
229
+ - label: "使用系统物流"
230
+ description: "查询可用物流方案,选择后自动创建运单和标签"
231
+ - label: "手动填写运单号"
232
+ description: "自己处理物流,需要提供运单号"
220
233
 
221
- 助手:[执行 Bash: commerce order ship --id order_xyz --tracking SF123456]
222
- 发货成功!运单号 SF123456,快递公司顺丰速运(自动识别)。
223
- 随时可以让我帮你查询物流状态。
234
+ 用户:[选择系统物流]
235
+
236
+ 助手:[执行 Bash: logistics rates query --origin '...' --destination '...' --items '...']
237
+ [查到 3 个可用方案]
238
+ [使用 AskUserQuestion 展示方案]
239
+
240
+ AskUserQuestion:
241
+ question: "以下是可用的物流方案,请选择"
242
+ options:
243
+ - label: "Standard Shipping (7-15 days) - ¥72.00 CNY"
244
+ - label: "Economy Shipping (15-25 days) - ¥45.00 CNY"
245
+ - label: "Express Shipping (3-7 days) - ¥128.00 CNY"
246
+
247
+ 用户:[选择 Standard Shipping]
248
+
249
+ 助手:[执行 Bash: commerce order ship --id order_xyz --rate-id rate_abc123]
250
+ 发货成功!运单号 JD123456789。
224
251
  ```
225
252
 
226
- **场景3:用户直接提供运单号发货**
253
+ **场景3:手动发货(用户直接提供运单号)**
227
254
  ```
228
255
  用户:订单 order_abc 发货,单号 YT9876543210
229
256
 
@@ -365,16 +392,14 @@ commerce order list --status paid --limit 50
365
392
  # 步骤1:先获取订单信息,检查 shipping_mode_used
366
393
  commerce order get --id order_123
367
394
 
368
- # 步骤2a:如果 shipping_mode_used = "easyship",询问用户选择后
369
- # 用户选择 Easyship 自动发货
395
+ # DYNAMIC 订单 使用买家选择的方案
370
396
  commerce order ship --id order_123 --auto
371
397
 
372
- # 步骤2b:如果用户选择手动发货,或 shipping_mode_used = "fixed"/"free"
373
- # 只需提供运单号,carrier 可选
374
- commerce order ship --id order_123 --tracking DHL123456
398
+ # 任意模式 指定物流方案(先查 logistics rates query 获取 rate-id)
399
+ commerce order ship --id order_123 --rate-id rate_abc123
375
400
 
376
- # 或同时指定 carrier
377
- commerce order ship --id order_123 --tracking DHL123456 --carrier DHL
401
+ # 手动发货 — 只需提供运单号,carrier 可选
402
+ commerce order ship --id order_123 --tracking DHL123456
378
403
  ```
379
404
 
380
405
  ### 取消订单
@@ -335,6 +335,19 @@ commerce product add-images --id prod_123 --media-id media_red,media_blue
335
335
  commerce product get --id prod_123
336
336
  ```
337
337
 
338
+ ### 物流属性引导(物理产品)
339
+
340
+ 创建 `requires_shipping: true` 的物理产品时:
341
+
342
+ 1. **重量**:引导卖家填写准确重量(影响所有物流报价准确性)
343
+ 2. **cargo_type**:根据产品标题/描述自动推断(默认 general),向卖家确认
344
+ - 推断方式:"根据产品信息,我推断这是普通商品,对吗?"(不要直接问"含电池吗?")
345
+ - 可选值:general(普货)、battery(带电)、liquid(液体)、cosmetic(化妆品)、clothing(服装)、powder(粉末)、wood(木制品)
346
+ - 这是通用物流属性,不需要提及任何具体物流商
347
+ 3. **brand**:引导填写品牌(可选,用于物流限制检查)
348
+ 4. 用户可跳过,但告知"会影响物流方案选择和报价准确性"
349
+ 5. 数字产品跳过整个物流属性流程
350
+
338
351
  ## 重要提示
339
352
 
340
353
  - **国际化策略** - 平台默认语言是英文(en-US)。当用户同时提供中英文内容时,用英文创建商品,中文通过 `i18n` skill 添加翻译。当用户要求"国际化"时,确保英文在主表,其他语言通过 i18n 添加。详见 i18n skill。
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/system-prompt.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,IAAI,MAAM,CAkKxC"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/system-prompt.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,IAAI,MAAM,CA6KxC"}
@@ -74,6 +74,17 @@ export function getSystemPrompt() {
74
74
  4. 3 次均失败后,告知用户:"认证已过期,请刷新页面后重试",**停止重试**
75
75
  - 不要尝试通过 login/logout 修复认证问题
76
76
 
77
+ ## 额度不足处理
78
+
79
+ 当工具返回 \`INSUFFICIENT_CREDITS\` 错误时:
80
+ - 告知用户当前积分不足,无法完成本次操作
81
+ - 引导用户查看用量明细:[查看用量明细](action://usage)
82
+ - 告知用户可以**购买积分**或**升级计划**来获取更多额度
83
+ - **不要重试**,等用户充值后再操作
84
+
85
+ **回复示例**:
86
+ - "积分不足,无法生成图片。您可以 [查看用量明细](action://usage) 了解当前额度,通过购买积分或升级计划来继续使用。"
87
+
77
88
  ## 链接处理规则
78
89
 
79
90
  当用户发送电商平台链接时,**不要用 WebFetch 访问**(会被反爬拦截),先用 Skill 工具加载对应技能,再按技能中的 URL 解析规则执行命令:
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,OAAO;;;;;;;;;aASI,OAAO,IAAI,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2I9B,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,OAAO;;;;;;;;;aASI,OAAO,IAAI,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsJ9B,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/optima-agent",
3
- "version": "0.8.38",
3
+ "version": "0.8.39",
4
4
  "description": "基于 Claude Agent SDK 的电商运营 AI 助手",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",