@puyinkai/xiaobao-cli 0.1.0 → 0.1.8

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.
Files changed (44) hide show
  1. package/dist/{api-Ccj5dLMo.mjs → api-CX99_4K7.mjs} +22 -5
  2. package/dist/{api-client-DwySN6x-.mjs → api-client-zDBFgk0y.mjs} +5 -3
  3. package/dist/{audio-VmDQMq59.mjs → audio-ShfvRomP.mjs} +2 -2
  4. package/dist/{auth-ChHvqjCS.mjs → auth-DpK81Vp5.mjs} +3 -3
  5. package/dist/cli.mjs +15 -11
  6. package/dist/{consultant-ABFTL_jx.mjs → consultant-CS9B42d3.mjs} +1 -1
  7. package/dist/current-CfDExInT.mjs +33 -0
  8. package/dist/{customer-DtSnQqy_.mjs → customer-B1cxRbJ9.mjs} +1 -1
  9. package/dist/{focus-BDYuP2vZ.mjs → focus-DfNPPhm5.mjs} +1 -1
  10. package/dist/{format-BZvv8lYc.mjs → format-yjmxrbNm.mjs} +15 -7
  11. package/dist/{list-Bkyi95YO.mjs → list-CD08BRLk.mjs} +6 -6
  12. package/dist/{list-CzB9_Jho.mjs → list-CKlx8YuL.mjs} +6 -6
  13. package/dist/{list-DW6KAAaC.mjs → list-CnlFIFiY.mjs} +6 -6
  14. package/dist/{list-iwd9cH1I.mjs → list-Cu6WzPpA.mjs} +5 -5
  15. package/dist/{list-CVKSGNu4.mjs → list-D56gEqiB.mjs} +6 -6
  16. package/dist/{list--o5Q_PI8.mjs → list-DCcCS6LM.mjs} +6 -6
  17. package/dist/{list-CGACp0y-.mjs → list-DI1OD95x.mjs} +3 -3
  18. package/dist/login-CUUcjWPd.mjs +156 -0
  19. package/dist/{logout-BJm9pjje.mjs → logout-DP7REhCd.mjs} +10 -7
  20. package/dist/{project-Ba05YzJ5.mjs → project-BuQQewOs.mjs} +3 -2
  21. package/dist/{project-store-Bz5kf-EI.mjs → project-store-CKVJa54T.mjs} +4 -3
  22. package/dist/{qa-D-B9FV9W.mjs → qa-CKsKiQIm.mjs} +5 -5
  23. package/dist/{resistance-Cf7zsdB3.mjs → resistance-DsE-Ha6Y.mjs} +1 -1
  24. package/dist/{text-BLH4R3xv.mjs → text-C3jhdPoe.mjs} +5 -5
  25. package/dist/{token-store-CHZ_rJQk.mjs → token-store-CXizLE2_.mjs} +46 -6
  26. package/dist/{use-DV9Ii3Tn.mjs → use-BZES4FZC.mjs} +2 -2
  27. package/dist/{visit-Ct3Vea8I.mjs → visit-CX0Mc1n6.mjs} +1 -1
  28. package/dist/{whoami-DwTHvI4B.mjs → whoami-CZVez-rm.mjs} +2 -2
  29. package/package.json +2 -2
  30. package/skills/wangxiaobao-audio-query/SKILL.md +51 -106
  31. package/skills/wangxiaobao-audio-wiki/SKILL.md +31 -77
  32. package/skills/wangxiaobao-audio-wiki/references/audio-wiki-schema.md +386 -0
  33. package/skills/wangxiaobao-audio-wiki/references/llm-wiki-ingest.md +450 -0
  34. package/skills/wangxiaobao-customer-focus-query/SKILL.md +37 -87
  35. package/skills/wangxiaobao-customer-query/SKILL.md +41 -90
  36. package/skills/wangxiaobao-customer-resistance-query/SKILL.md +32 -86
  37. package/skills/wangxiaobao-quick-qa/SKILL.md +41 -92
  38. package/skills/wangxiaobao-shared/SKILL.md +194 -0
  39. package/skills/wangxiaobao-switch-project/SKILL.md +51 -77
  40. package/skills/wangxiaobao-visit-query/SKILL.md +41 -88
  41. package/dist/login-BwkrByMm.mjs +0 -91
  42. package/dist/{device-flow-BgsZipYA.mjs → device-flow-D6JVcEap.mjs} +1 -1
  43. /package/dist/{headers-D79npewp.mjs → headers-DSnR4sjk.mjs} +0 -0
  44. /package/dist/{util-DgwkUfV9.mjs → util-CaPQBlNa.mjs} +0 -0
@@ -1,86 +1,43 @@
1
1
  ---
2
2
  name: wangxiaobao-customer-query
3
- description: |
4
- 旺小宝客户分页查询 skill:按 **置业顾问 / 客户姓名 / 手机号 / 画像关键词 /
5
- 最后来访时间** 维度分页查当前激活项目里的客户列表。**只读、不写文件、无副作用**。
6
- 对应 `xiaobao_list_customers` tool。排序固定 last_visit_time DESC。
7
-
8
- **当以下情况时使用此 Skill**:
9
- (1) 用户问"客户列表"、"我的客户"、"高意向客户"、"近期来访客户"
10
- (2) 用户问"张三名下的客户"、"陈平这周新增了哪些客户"——先调
11
- `xiaobao_list_consultants` 反查顾问 user-id,再调本 skill 带 userId 过滤
12
- (3) 用户按客户画像找——"高意向客户"、"价格敏感客户"、"看四房的客户",用
13
- `portrait` 关键词
14
- (4) 用户问"姓张的客户"、"手机号 138 的客户"——客户姓名 / 手机号 LIKE 模糊
15
- (5) 用户问"5 月份来过的客户"、"上周访客"——`fromDate` / `toDate` 时间窗
16
- (6) 任何"看客户名单 / 客户画像"的开放式查询,**不写文件 / 不出报告**
17
-
18
- **不要用本 skill 的场景**:
19
- - 用户要的是来访 / 接待记录("今天来了几组")→ 走 `wangxiaobao-visit-query`
20
- - 用户问录音元数据 / 文本 → 走 `wangxiaobao-audio-query`
21
- - 用户要"出报告 / 落 wiki" → 本期不支持
3
+ version: 0.1.0
4
+ description: "旺小宝客户画像分页查询:按 置业顾问 / 客户姓名 / 手机号 / 画像关键词(dynamic_tags JSON LIKE) / 最后来访时间窗 维度过滤,排序固定 last_visit_time DESC。只读、不写文件、无副作用。高频命令: xiaobao-cli customer list [--user-id <id>] [--user-name <n>] [--customer-name <n>] [--customer-phone <p>] [--portrait <kw>] [--from <date>] [--to <date>] [--page N] [--size N]。何时用:用户问客户列表/我的客户/高意向客户/近期来访客户/某顾问名下的客户/某顾问这周新增哪些客户/姓张的客户/手机号 138 的客户/5 月份来过的客户;按画像找如高意向/价格敏感/看四房用 --portrait。注:顾问名→user-id 先用 xiaobao-cli consultant list 反查;要来访记录走 visit-query;要录音元数据走 audio-query。"
5
+ metadata:
6
+ requires:
7
+ bins: ["xiaobao-cli"]
8
+ cliHelp: "xiaobao-cli customer --help"
22
9
  ---
23
10
 
24
- > **Host-agnostic CLI skill** — 本 skill 假设 `xiaobao-cli` 已装到 PATH
25
- > (`npm i -g @puyinkai/xiaobao-cli` 或 `npx -y @puyinkai/xiaobao-cli`)。
26
- > Agent 通过 shell 工具(Bash / Run / Shell)执行命令、读 **stdout JSON** 消费;
27
- > stderr 是进度/错误提示。退出码 0 = 成功,非 0 = 业务/网络错(错误对象同时打到 stdout 可解析)。
28
- >
29
- > CLI 14 个子命令跟 openclaw-xiaobao plugin 14 个 tool **1:1 等价**,返回 JSON
30
- > 结构完全一致(`{status, ok, data: {...}}`)。skill 里看到的 `resp.data.data.xxx`
31
- > 取数路径直接对 stdout JSON 用 `jq` / `JSON.parse` 即可。
32
- >
33
- > **plugin tool → CLI 命令翻译表(数组参数走逗号分隔)**:
34
- >
35
- > | plugin tool | CLI 命令 |
36
- > | --- | --- |
37
- > | `xiaobao_authorize { force? }` | `xiaobao-cli auth login [--force]` |
38
- > | `xiaobao_whoami` | `xiaobao-cli auth whoami` |
39
- > | `xiaobao_logout` | `xiaobao-cli auth logout` |
40
- > | `xiaobao_list_projects { keyword? }` | `xiaobao-cli project list [--keyword <kw>]` |
41
- > | `xiaobao_switch_project { tenantId, tenantName, projectId, projectName }` | `xiaobao-cli project use --tenant-id ... --tenant-name ... --project-id ... --project-name ...` |
42
- > | `xiaobao_list_consultants` | `xiaobao-cli consultant list` |
43
- > | `xiaobao_list_audio { fromDate, toDate, userId?, userIdList?, page, size }` | `xiaobao-cli audio list --from "..." --to "..." [--user-id ...] [--user-id-list a,b,c] [--page N] [--size N]` |
44
- > | `xiaobao_get_audio_text { audioId }` | `xiaobao-cli audio text <audioId>` |
45
- > | `xiaobao_list_customers { ... }` | `xiaobao-cli customer list [--user-id] [--user-name] [--customer-name] [--customer-phone] [--portrait] [--from] [--to] [--page] [--size]` |
46
- > | `xiaobao_list_visits { ... }` | `xiaobao-cli visit list [--customer-id] [--customer-name] [--from] [--to] [--page] [--size]` |
47
- > | `xiaobao_list_customer_focus { visitIds, customerIds, audioIds, category, classification, fromDate, toDate, ... }` | `xiaobao-cli focus list [--visit-ids a,b] [--customer-ids a,b] [--audio-ids a,b] [--category ...] [--classification ...] [--from ...] [--to ...]` |
48
- > | `xiaobao_list_customer_resistance { ... }` | `xiaobao-cli resistance list [同 focus]` |
49
- > | `xiaobao_quick_qa { prompt, threadId? }` | `xiaobao-cli qa "<prompt>" [--thread-id ...]` |
50
- > | `xiaobao_api { method, path, query, body, headers }` | `xiaobao-cli api <METHOD> <PATH> [--query k=v] [--body '<json>'] [--headers k=v]` |
51
- >
52
- > 用 `--format toon` 切到 TOON(uniform 数组省 30-50% token,LLM 上下文优化);
53
- > 用 `--format json`(默认)保持 JSON。state 路径:`~/.xiaobao/`(fallback 读 `~/.openclaw/state/wangxiaobao/`)。
54
-
55
-
56
11
  # 旺小宝客户分页查询
57
12
 
58
- `xiaobao_list_customers` tool 查当前激活项目的客户画像列表。
13
+ > **CRITICAL** —— 跑命令前 MUST 先用 Read tool 读取 [`../wangxiaobao-shared/SKILL.md`](../wangxiaobao-shared/SKILL.md)(一份共享文档讲清安装 / 登录 / 选项目 / 错误码 / 输出协议等所有 xiaobao-cli 命令通用的前置约定)。
14
+
15
+ 跑 `xiaobao-cli customer list` 查当前激活项目的客户画像列表。
59
16
  零副作用,鼓励放心调用。
60
17
 
61
18
  ## 执行前必读
62
19
 
63
- - 必须有有效 token:先调 `xiaobao_whoami`;未登录就 `xiaobao_authorize`
64
- - **必须有激活项目**:tool 内部自动读,如果返回 `NO_ACTIVE_PROJECT` 就跑
20
+ - 必须有有效 token:先调 `xiaobao-cli auth whoami`;未登录就 `xiaobao-cli auth login`
21
+ - **必须有激活项目**:命令内部自动读,如果返回 `NO_ACTIVE_PROJECT` 就跑
65
22
  `wangxiaobao-switch-project` skill
66
23
  - **数据权限隔离**:后端按"当前用户授权可见的顾问范围"过滤(普通顾问看自己 /
67
24
  团队长看团队 / 项目管理员看全项目)。当前用户无权访问的顾问名下客户**看不到**——
68
25
  这不是 bug
69
- - LocalDateTime 格式:`yyyy-MM-dd HH:mm:ss`(空格分隔),plugin 自动转 ISO
26
+ - LocalDateTime 格式:`yyyy-MM-dd HH:mm:ss`(空格分隔),CLI 自动转 ISO
70
27
  - **不要**写文件、出报告
71
28
 
72
29
  ---
73
30
 
74
31
  ## 快速索引:意图 → 工具
75
32
 
76
- | 用户意图 | plugin tool | 关键参数 |
33
+ | 用户意图 | 命令 | 关键参数 |
77
34
  | ------------------------------ | -------------------------- | ---------------------------------- |
78
- | 列全部客户(最近来访的在前) | `xiaobao_list_customers` | `page` / `size` |
79
- | 看某顾问名下客户 | `xiaobao_list_consultants` → `xiaobao_list_customers` | `userId: <反查的 id>` |
80
- | 按客户画像找 | `xiaobao_list_customers` | `portrait: "高意向"` 等 |
81
- | 按客户姓名 / 手机号模糊 | `xiaobao_list_customers` | `customerName` / `customerPhone` |
82
- | 按最后来访时间筛 | `xiaobao_list_customers` | `fromDate` / `toDate` |
83
- | 估算总数 | `xiaobao_list_customers` | `page: 1, size: 1`,只读 `total` |
35
+ | 列全部客户(最近来访的在前) | `xiaobao-cli customer list` | `--page` / `--size` |
36
+ | 看某顾问名下客户 | `xiaobao-cli consultant list` → `xiaobao-cli customer list` | `--user-id <反查的 id>` |
37
+ | 按客户画像找 | `xiaobao-cli customer list` | `--portrait 高意向` 等 |
38
+ | 按客户姓名 / 手机号模糊 | `xiaobao-cli customer list` | `--customer-name` / `--customer-phone` |
39
+ | 按最后来访时间筛 | `xiaobao-cli customer list` | `--from` / `--to` |
40
+ | 估算总数 | `xiaobao-cli customer list` | `--page 1 --size 1`,只读 `total` |
84
41
 
85
42
  ---
86
43
 
@@ -91,9 +48,9 @@ description: |
91
48
  用户说"张三的客户"——**不要**直接传 `userName: "张三"`(虽然支持但是 LIKE 模糊)。
92
49
  正确做法:
93
50
 
94
- 1. 调 `xiaobao_list_consultants` 拿当前授权范围内的顾问列表
95
- 2. 找 `userName === "张三"` 的 `userId`
96
- 3. 调 `xiaobao_list_customers { userId: <张三的 userId> }` 精确过滤
51
+ 1. 调 `xiaobao-cli consultant list` 拿当前授权范围内的顾问列表
52
+ 2. 找 `userName === "张三"` 的 `--user-id`
53
+ 3. 调 `xiaobao-cli customer list { userId: <张三的 userId> }` 精确过滤
97
54
 
98
55
  如果 list-consultants 里**找不到张三**——说明当前用户没权限看张三名下数据,
99
56
  告诉用户"当前账号无权访问销售『张三』",不要再硬试。
@@ -102,8 +59,8 @@ description: |
102
59
 
103
60
  后端在 `dynamic_tags` JSON 文本上 `LIKE '%xxx%'`。所以:
104
61
 
105
- - `portrait: "高意向"` 命中 `{"高意向客户":"高意向客户"}` / `{"AI意向判定":"高意向"}` 等
106
- - `portrait: "价格"` 命中 `{"抗性点":"价格"}` 等
62
+ - `--portrait 高意向` 命中 `{"高意向客户":"高意向客户"}` / `{"AI意向判定":"高意向"}` 等
63
+ - `--portrait 价格` 命中 `{"抗性点":"价格"}` 等
107
64
  - 不要传完整 JSON / key=value 形式(不支持,反而匹不到)
108
65
 
109
66
  ### 3. 时间窗:用户没明确说就推断
@@ -120,11 +77,11 @@ description: |
120
77
 
121
78
  ### 4. 分页:page 从 **1** 开始
122
79
 
123
- PageParam 默认 `page: 1, size: 10`。传 `page: 0` 报错。`size` 上限 500。
80
+ PageParam 默认 `--page 1 --size 10`。传 `page: 0` 报错。`--size` 上限 500。
124
81
 
125
82
  ### 5. 响应外层
126
83
 
127
- `xiaobao_list_customers` 返回:
84
+ `xiaobao-cli customer list` 返回:
128
85
 
129
86
  ```jsonc
130
87
  {
@@ -150,7 +107,7 @@ PageParam 默认 `page: 1, size: 10`。传 `page: 0` 报错。`size` 上限 500
150
107
  }
151
108
  ```
152
109
 
153
- plugin tool 又外包一层 `{ status, ok, data }` —— 取数据用 `resp.data.data.content`。
110
+ CLI 又包一层 `{ status, ok, data }` —— 取数据用 `resp.data.data.content`。
154
111
 
155
112
  ---
156
113
 
@@ -158,8 +115,8 @@ plugin tool 又外包一层 `{ status, ok, data }` —— 取数据用 `resp.dat
158
115
 
159
116
  ### 场景 1:列我能看到的高意向客户
160
117
 
161
- ```jsonc
162
- { "portrait": "高意向", "page": 1, "size": 20 }
118
+ ```bash
119
+ xiaobao-cli customer list --portrait 高意向 --page 1 --size 20
163
120
  ```
164
121
 
165
122
  渲染:
@@ -173,31 +130,25 @@ plugin tool 又外包一层 `{ status, ok, data }` —— 取数据用 `resp.dat
173
130
 
174
131
  ### 场景 2:陈平名下的客户
175
132
 
176
- ```jsonc
177
- // step 1
178
- // xiaobao_list_consultants
179
- {}
180
-
181
- // step 2 ——找到陈平的 userId = 270078836362715136
182
- // step 3
183
- // xiaobao_list_customers
184
- { "userId": 270078836362715136, "page": 1, "size": 20 }
133
+ ```bash
134
+ # step 1: 反查陈平的 user-id
135
+ xiaobao-cli consultant list
136
+
137
+ # step 2: 假设找到陈平的 userId = 270078836362715136
138
+ # step 3: --user-id 过滤
139
+ xiaobao-cli customer list --user-id 270078836362715136 --page 1 --size 20
185
140
  ```
186
141
 
187
142
  ### 场景 3:5 月来访的客户里抗性是价格的
188
143
 
189
- ```jsonc
190
- {
191
- "portrait": "价格",
192
- "fromDate": "2026-05-01 00:00:00",
193
- "toDate": "2026-06-01 00:00:00"
194
- }
144
+ ```bash
145
+ xiaobao-cli customer list --portrait 价格 --from "2026-05-01 00:00:00" --to "2026-06-01 00:00:00"
195
146
  ```
196
147
 
197
148
  ### 场景 4:估算总数
198
149
 
199
- ```jsonc
200
- { "page": 1, "size": 1 }
150
+ ```bash
151
+ xiaobao-cli customer list --page 1 --size 1
201
152
  ```
202
153
 
203
154
  回复:「当前授权范围下共 1247 位客户」。
@@ -207,7 +158,7 @@ plugin tool 又外包一层 `{ status, ok, data }` —— 取数据用 `resp.dat
207
158
  ## 常见错误与排查
208
159
 
209
160
  - **`error: 'NO_ACTIVE_PROJECT'`** — 跑 `wangxiaobao-switch-project` skill
210
- - **401 / token 过期** — 调 `xiaobao_authorize { force: true }` 重登
161
+ - **401 / token 过期** — 调 `xiaobao-cli auth login --force` 重登
211
162
  - **`total: 0`** — 时间窗口 / 过滤条件没匹配到,**或**当前用户授权范围为空
212
163
  (新人顾问刚入职 / 团队成员被移走等)
213
164
  - **顾问名找不到** — 不在当前用户授权可见范围内;不要硬调 list_customers 试
@@ -1,89 +1,43 @@
1
1
  ---
2
2
  name: wangxiaobao-customer-resistance-query
3
- description: |
4
- 旺小宝**客户抗性点**分页查询 skill:按 visit/customer/audio ID 列表、一级/二级
5
- 分类模糊、来访时间窗组合查 AI 在客户对话里抽出的「抗性点」标签
6
- (客户疑虑 / 反对 / 不满:价格高 / 户型差 / 地段差 / 装修不满 等)。
7
- **只读、不写文件、无副作用**。对应 `xiaobao_list_customer_resistance` tool。
8
- 排序固定 visit_time DESC。每条 tag 含 customer / userInfo / audio +
9
- value_str(详细说明) + text_fragment(录音原文片段)。
10
-
11
- **当以下情况时使用此 Skill**:
12
- (1) 用户问"客户抗性点"、"客户疑虑"、"客户反对"、"客户嫌"、"客户担心"、"不满意"
13
- (2) 用户问某客户的抗性 —— 先调 `xiaobao_list_customers` 反查 customerId,
14
- 再调本 skill 带 customerIds 精确过滤
15
- (3) 用户问某次到访 / 某条录音里的抗性 —— 带 visitIds / audioIds
16
- (4) 用户按分类找 —— 价格抗性 / 户型抗性 / 地段抗性 等 → category 模糊
17
- (5) 用户按二级分类找 —— "价格因素" / "位置因素" → classification 模糊
18
- (6) 用户给时间窗 —— "5 月份的抗性" / "本周抗性" → fromDate / toDate
19
- (7) 想看 **TOP 抗性原因** / 销售应该重点准备哪些应对话术
20
-
21
- **不要用本 skill 的场景**:
22
- - 用户问的是**关注点 / 兴趣点 / 客户偏好** → 走 `wangxiaobao-customer-focus-query`
23
- - 用户要的是客户**画像** / 标签 → 走 `wangxiaobao-customer-query`
24
- - 用户问"完整录音文本" → 走 `wangxiaobao-audio-query` + `xiaobao_get_audio_text`
3
+ version: 0.1.0
4
+ description: "旺小宝客户抗性点(resistance)分页查询 —— AI 在客户对话里抽出的客户疑虑 / 反对 / 不满标签(价格高 / 户型差 / 地段差 / 装修不满 等)。schema 与 focus 镜像,仅底层 MV 表不同。按 visit/customer/audio ID 列表 + 一级/二级分类模糊 + 来访时间窗组合过滤,排序固定 visit_time DESC。每条 tag 带 customer + userInfo + audio + value_str + text_fragment。只读、不写文件。高频命令: xiaobao-cli resistance list [--visit-ids a,b] [--customer-ids a,b] [--audio-ids a,b] [--category <kw>] [--classification <kw>] [--from <date>] [--to <date>] [--page N] [--size N]。何时用:用户问客户抗性/客户疑虑/客户反对/客户嫌/客户担心/不满意/价格抗性/户型抗性/地段抗性/TOP 抗性原因/销售应对话术;用户想看销售应该重点准备哪些应对话术。注:客户名→wang_id 先用 xiaobao-cli customer list 反查;问关注/兴趣/偏好走 focus-query;问完整录音文本走 audio-query。"
5
+ metadata:
6
+ requires:
7
+ bins: ["xiaobao-cli"]
8
+ cliHelp: "xiaobao-cli resistance --help"
25
9
  ---
26
10
 
27
- > **Host-agnostic CLI skill** — 本 skill 假设 `xiaobao-cli` 已装到 PATH
28
- > (`npm i -g @puyinkai/xiaobao-cli` 或 `npx -y @puyinkai/xiaobao-cli`)。
29
- > Agent 通过 shell 工具(Bash / Run / Shell)执行命令、读 **stdout JSON** 消费;
30
- > stderr 是进度/错误提示。退出码 0 = 成功,非 0 = 业务/网络错(错误对象同时打到 stdout 可解析)。
31
- >
32
- > CLI 14 个子命令跟 openclaw-xiaobao plugin 14 个 tool **1:1 等价**,返回 JSON
33
- > 结构完全一致(`{status, ok, data: {...}}`)。skill 里看到的 `resp.data.data.xxx`
34
- > 取数路径直接对 stdout JSON 用 `jq` / `JSON.parse` 即可。
35
- >
36
- > **plugin tool → CLI 命令翻译表(数组参数走逗号分隔)**:
37
- >
38
- > | plugin tool | CLI 命令 |
39
- > | --- | --- |
40
- > | `xiaobao_authorize { force? }` | `xiaobao-cli auth login [--force]` |
41
- > | `xiaobao_whoami` | `xiaobao-cli auth whoami` |
42
- > | `xiaobao_logout` | `xiaobao-cli auth logout` |
43
- > | `xiaobao_list_projects { keyword? }` | `xiaobao-cli project list [--keyword <kw>]` |
44
- > | `xiaobao_switch_project { tenantId, tenantName, projectId, projectName }` | `xiaobao-cli project use --tenant-id ... --tenant-name ... --project-id ... --project-name ...` |
45
- > | `xiaobao_list_consultants` | `xiaobao-cli consultant list` |
46
- > | `xiaobao_list_audio { fromDate, toDate, userId?, userIdList?, page, size }` | `xiaobao-cli audio list --from "..." --to "..." [--user-id ...] [--user-id-list a,b,c] [--page N] [--size N]` |
47
- > | `xiaobao_get_audio_text { audioId }` | `xiaobao-cli audio text <audioId>` |
48
- > | `xiaobao_list_customers { ... }` | `xiaobao-cli customer list [--user-id] [--user-name] [--customer-name] [--customer-phone] [--portrait] [--from] [--to] [--page] [--size]` |
49
- > | `xiaobao_list_visits { ... }` | `xiaobao-cli visit list [--customer-id] [--customer-name] [--from] [--to] [--page] [--size]` |
50
- > | `xiaobao_list_customer_focus { visitIds, customerIds, audioIds, category, classification, fromDate, toDate, ... }` | `xiaobao-cli focus list [--visit-ids a,b] [--customer-ids a,b] [--audio-ids a,b] [--category ...] [--classification ...] [--from ...] [--to ...]` |
51
- > | `xiaobao_list_customer_resistance { ... }` | `xiaobao-cli resistance list [同 focus]` |
52
- > | `xiaobao_quick_qa { prompt, threadId? }` | `xiaobao-cli qa "<prompt>" [--thread-id ...]` |
53
- > | `xiaobao_api { method, path, query, body, headers }` | `xiaobao-cli api <METHOD> <PATH> [--query k=v] [--body '<json>'] [--headers k=v]` |
54
- >
55
- > 用 `--format toon` 切到 TOON(uniform 数组省 30-50% token,LLM 上下文优化);
56
- > 用 `--format json`(默认)保持 JSON。state 路径:`~/.xiaobao/`(fallback 读 `~/.openclaw/state/wangxiaobao/`)。
57
-
58
-
59
11
  # 旺小宝客户抗性点查询
60
12
 
61
- `xiaobao_list_customer_resistance` tool AI 抽出的客户抗性点标签。
13
+ > **CRITICAL** —— 跑命令前 MUST 先用 Read tool 读取 [`../wangxiaobao-shared/SKILL.md`](../wangxiaobao-shared/SKILL.md)(一份共享文档讲清安装 / 登录 / 选项目 / 错误码 / 输出协议等所有 xiaobao-cli 命令通用的前置约定)。
14
+
15
+ 跑 `xiaobao-cli resistance list` 查 AI 抽出的客户抗性点标签。
62
16
  跟关注点 skill 镜像,差别就是底层走 `mv_open_customer_resistance` 表 ——
63
17
  **抗性 = 客户疑虑 / 反对 / 不满**(关注 = 客户主动表达的关心)。
64
18
 
65
19
  ## 执行前必读
66
20
 
67
- - 必须有有效 token:先调 `xiaobao_whoami`;未登录就 `xiaobao_authorize`
68
- - **必须有激活项目**:tool 内部自动读,缺失返回 `NO_ACTIVE_PROJECT`
21
+ - 必须有有效 token:先调 `xiaobao-cli auth whoami`;未登录就 `xiaobao-cli auth login`
22
+ - **必须有激活项目**:命令内部自动读,缺失返回 `NO_ACTIVE_PROJECT`
69
23
  - **数据权限隔离**:按当前用户授权可见顾问范围过滤(普通顾问看自己 /
70
24
  团队长看团队 / 项目管理员看全项目)
71
- - LocalDateTime 格式:`yyyy-MM-dd HH:mm:ss`(空格分隔),plugin 自动转
25
+ - LocalDateTime 格式:`yyyy-MM-dd HH:mm:ss`(空格分隔),CLI 自动转
72
26
  - **不要**写文件、出报告
73
27
 
74
28
  ---
75
29
 
76
30
  ## 快速索引:意图 → 工具
77
31
 
78
- | 用户意图 | plugin tool | 关键参数 |
32
+ | 用户意图 | 命令 | 关键参数 |
79
33
  | ------------------------------------ | -------------------------------------- | ---------------------------------- |
80
- | 列时段内全部抗性点 | `xiaobao_list_customer_resistance` | `fromDate` / `toDate` |
81
- | 看某客户的抗性 | `xiaobao_list_customers` → `xiaobao_list_customer_resistance` | `customerIds: [<wang_id>]` |
82
- | 看某次到访的抗性 | `xiaobao_list_customer_resistance` | `visitIds: [<visit_id>]` |
83
- | 看某条录音的抗性 | `xiaobao_list_customer_resistance` | `audioIds: [<audio_id>]` |
84
- | 按分类找(一级) | `xiaobao_list_customer_resistance` | `category: "价格"` 等 |
85
- | 按分类找(二级) | `xiaobao_list_customer_resistance` | `classification: "价格因素"` |
86
- | 估算总数 | `xiaobao_list_customer_resistance` | `page: 1, size: 1`,只读 `total` |
34
+ | 列时段内全部抗性点 | `xiaobao-cli resistance list` | `--from` / `--to` |
35
+ | 看某客户的抗性 | `xiaobao-cli customer list` → `xiaobao-cli resistance list` | `--customer-ids <wang_id>` |
36
+ | 看某次到访的抗性 | `xiaobao-cli resistance list` | `--visit-ids <visit_id>` |
37
+ | 看某条录音的抗性 | `xiaobao-cli resistance list` | `--audio-ids <audio_id>` |
38
+ | 按分类找(一级) | `xiaobao-cli resistance list` | `--category 价格` 等 |
39
+ | 按分类找(二级) | `xiaobao-cli resistance list` | `--classification 价格因素` |
40
+ | 估算总数 | `xiaobao-cli resistance list` | `--page 1 --size 1`,只读 `total` |
87
41
 
88
42
  ---
89
43
 
@@ -91,8 +45,8 @@ description: |
91
45
 
92
46
  ### 1. 客户名 → wang_id 反查
93
47
 
94
- 用户说"屈哥的抗性"——先调 `xiaobao_list_customers { customerName: "屈哥" }` 拿到
95
- `customerId`,再传 `customerIds` 数组。
48
+ 用户说"屈哥的抗性"——先调 `xiaobao-cli customer list { customerName: "屈哥" }` 拿到
49
+ `--customer-id`,再传 `--customer-ids` 数组。
96
50
 
97
51
  ### 2. 分类模糊:一级 + 二级二选一或同时用
98
52
 
@@ -153,7 +107,7 @@ classification 二级常见值:户型因素 / 价格因素 / 环境因素 / ..
153
107
  ### 6. TOP 抗性原因聚合
154
108
 
155
109
  用户问"我们项目客户最大的抗性是什么"——拉一页 `size: 100`,agent 后处理按
156
- `category` 聚合输出:"5 月共 89 条抗性:价格因素 42 条(47%)/ 户型因素 23 条 /
110
+ `--category` 聚合输出:"5 月共 89 条抗性:价格因素 42 条(47%)/ 户型因素 23 条 /
157
111
  环境因素 12 条 / ..."。
158
112
 
159
113
  ---
@@ -162,20 +116,16 @@ classification 二级常见值:户型因素 / 价格因素 / 环境因素 / ..
162
116
 
163
117
  ### 场景 1:本月客户最主要的抗性
164
118
 
165
- ```jsonc
166
- {
167
- "fromDate": "2026-05-01 00:00:00",
168
- "toDate": "2026-06-01 00:00:00",
169
- "page": 1, "size": 100
170
- }
119
+ ```bash
120
+ xiaobao-cli resistance list --from "2026-05-01 00:00:00" --to "2026-06-01 00:00:00" --page 1 --size 100
171
121
  ```
172
122
 
173
123
  按 category 聚合 → "本月 89 条抗性中价格类占 47%,户型 26%,..."。
174
124
 
175
125
  ### 场景 2:价格抗性的具体说法
176
126
 
177
- ```jsonc
178
- { "category": "价格", "page": 1, "size": 20 }
127
+ ```bash
128
+ xiaobao-cli resistance list --category 价格 --page 1 --size 20
179
129
  ```
180
130
 
181
131
  列出 20 条价格抗性原文,让 LLM 帮销售总结"客户主要嫌车位价高、楼层差价大、
@@ -183,18 +133,14 @@ classification 二级常见值:户型因素 / 价格因素 / 环境因素 / ..
183
133
 
184
134
  ### 场景 3:屈哥这次到访都嫌什么
185
135
 
186
- ```jsonc
187
- { "visitIds": ["510395382098829312"], "page": 1, "size": 50 }
136
+ ```bash
137
+ xiaobao-cli resistance list --visit-ids 510395382098829312 --page 1 --size 50
188
138
  ```
189
139
 
190
140
  ### 场景 4:户型 + 时间窗组合
191
141
 
192
- ```jsonc
193
- {
194
- "category": "户型",
195
- "fromDate": "2026-05-01 00:00:00",
196
- "toDate": "2026-06-01 00:00:00"
197
- }
142
+ ```bash
143
+ xiaobao-cli resistance list --category 户型 --from "2026-05-01 00:00:00" --to "2026-06-01 00:00:00"
198
144
  ```
199
145
 
200
146
  回复:"5 月户型抗性 23 条,主要集中在'房间小'(11)/'朝向不好'(5)/'楼间距'(4)..."。
@@ -204,7 +150,7 @@ classification 二级常见值:户型因素 / 价格因素 / 环境因素 / ..
204
150
  ## 常见错误与排查
205
151
 
206
152
  - **`error: 'NO_ACTIVE_PROJECT'`** — 跑 `wangxiaobao-switch-project` skill
207
- - **401 / token 过期** — 调 `xiaobao_authorize { force: true }` 重登
153
+ - **401 / token 过期** — 调 `xiaobao-cli auth login --force` 重登
208
154
  - **`total: 0`** — 过滤条件没匹配 / 该时段没数据 / 当前用户授权范围内没匹配的接待顾问
209
155
  - **抗性点 vs 关注点**:跟 LLM 强调"抗性"是负面(疑虑/反对),"关注"是中性偏正
210
156
  (主动关心);用户说"嫌弃 / 担心 / 不满"走抗性,"在意 / 关心 / 偏好"走关注
@@ -1,71 +1,25 @@
1
1
  ---
2
2
  name: wangxiaobao-quick-qa
3
- description: |
4
- 旺小宝业务数据问数 skill:用自然语言询问当前项目的客户 / 来访 / 销售 /
5
- 录音 / 业务指标等数据,AI 直接基于旺小宝数据回答。**只读、不写文件、无副作用**——
6
- 对应 `xiaobao_quick_qa` tool。
7
-
8
- **当以下情况时使用此 Skill**:
9
- (1) 用户问客户相关数据 —— "今天来了几个客户"、"本周新增多少客户"、
10
- "意向客户都有谁"、"老客户回访情况"
11
- (2) 用户问来访数据 —— "今天到访多少组"、"上周末来访高峰是几点"、
12
- "首访 / 复访比例"
13
- (3) 用户问挖需 / 转化指标 —— "挖需率多少"、"成交转化率"、"意向客户占比"、
14
- "客户分级分布"
15
- (4) 用户问销售 / 销冠数据 —— "本月销冠是谁"、"张三这周成交几单"、
16
- "销售排行榜"、"业绩 TOP3"
17
- (5) 用户问录音 / 通话 / 接待数据 —— "录音覆盖率多少"、"哪些销售有几条录音"、
18
- "本周通话时长 TOP5"、"未跟进客户有多少"
19
- (6) 任何"问一句旺小宝数据"的开放式问题
20
-
21
- **不要用本 skill 的场景**:
22
- - 用户要的是录音元数据列表(如"列今天所有录音的 audioId") →
23
- 用 `wangxiaobao-audio-query` skill,更快更精确
24
- - 用户要批量同步录音文本到 wiki → 用 `wangxiaobao-audio-wiki` skill
3
+ version: 0.1.0
4
+ description: "旺小宝业务数据问数(自然语言):用一句话问当前激活项目的客户 / 来访 / 挖需率 / 销冠 / 录音覆盖率 / 业务指标等开放式问题,AI 直接基于旺小宝数据回答。只读、无副作用、超时 30 分钟。多轮追问通过 --thread-id 续接。高频命令: xiaobao-cli qa '<prompt>' [--thread-id <id>]。何时用:用户问今天来了几个客户/本周新增多少客户/意向客户都有谁/老客户回访/今天到访多少组/首访 vs 复访比/挖需率/成交转化率/客户分级分布/本月销冠是谁/张三这周成交几单/销售排行榜/业绩 TOP3/录音覆盖率/哪些销售有几条录音/本周通话时长 TOP5/未跟进客户有多少;任何问一句旺小宝业务数据的开放式问题。注:要列录音元数据走 audio-query 更快;批量同步录音文本到 wiki 走 audio-wiki。"
5
+ metadata:
6
+ requires:
7
+ bins: ["xiaobao-cli"]
8
+ cliHelp: "xiaobao-cli qa --help"
25
9
  ---
26
10
 
27
- > **Host-agnostic CLI skill** — 本 skill 假设 `xiaobao-cli` 已装到 PATH
28
- > (`npm i -g @puyinkai/xiaobao-cli` 或 `npx -y @puyinkai/xiaobao-cli`)。
29
- > Agent 通过 shell 工具(Bash / Run / Shell)执行命令、读 **stdout JSON** 消费;
30
- > stderr 是进度/错误提示。退出码 0 = 成功,非 0 = 业务/网络错(错误对象同时打到 stdout 可解析)。
31
- >
32
- > CLI 14 个子命令跟 openclaw-xiaobao plugin 14 个 tool **1:1 等价**,返回 JSON
33
- > 结构完全一致(`{status, ok, data: {...}}`)。skill 里看到的 `resp.data.data.xxx`
34
- > 取数路径直接对 stdout JSON 用 `jq` / `JSON.parse` 即可。
35
- >
36
- > **plugin tool → CLI 命令翻译表(数组参数走逗号分隔)**:
37
- >
38
- > | plugin tool | CLI 命令 |
39
- > | --- | --- |
40
- > | `xiaobao_authorize { force? }` | `xiaobao-cli auth login [--force]` |
41
- > | `xiaobao_whoami` | `xiaobao-cli auth whoami` |
42
- > | `xiaobao_logout` | `xiaobao-cli auth logout` |
43
- > | `xiaobao_list_projects { keyword? }` | `xiaobao-cli project list [--keyword <kw>]` |
44
- > | `xiaobao_switch_project { tenantId, tenantName, projectId, projectName }` | `xiaobao-cli project use --tenant-id ... --tenant-name ... --project-id ... --project-name ...` |
45
- > | `xiaobao_list_consultants` | `xiaobao-cli consultant list` |
46
- > | `xiaobao_list_audio { fromDate, toDate, userId?, userIdList?, page, size }` | `xiaobao-cli audio list --from "..." --to "..." [--user-id ...] [--user-id-list a,b,c] [--page N] [--size N]` |
47
- > | `xiaobao_get_audio_text { audioId }` | `xiaobao-cli audio text <audioId>` |
48
- > | `xiaobao_list_customers { ... }` | `xiaobao-cli customer list [--user-id] [--user-name] [--customer-name] [--customer-phone] [--portrait] [--from] [--to] [--page] [--size]` |
49
- > | `xiaobao_list_visits { ... }` | `xiaobao-cli visit list [--customer-id] [--customer-name] [--from] [--to] [--page] [--size]` |
50
- > | `xiaobao_list_customer_focus { visitIds, customerIds, audioIds, category, classification, fromDate, toDate, ... }` | `xiaobao-cli focus list [--visit-ids a,b] [--customer-ids a,b] [--audio-ids a,b] [--category ...] [--classification ...] [--from ...] [--to ...]` |
51
- > | `xiaobao_list_customer_resistance { ... }` | `xiaobao-cli resistance list [同 focus]` |
52
- > | `xiaobao_quick_qa { prompt, threadId? }` | `xiaobao-cli qa "<prompt>" [--thread-id ...]` |
53
- > | `xiaobao_api { method, path, query, body, headers }` | `xiaobao-cli api <METHOD> <PATH> [--query k=v] [--body '<json>'] [--headers k=v]` |
54
- >
55
- > 用 `--format toon` 切到 TOON(uniform 数组省 30-50% token,LLM 上下文优化);
56
- > 用 `--format json`(默认)保持 JSON。state 路径:`~/.xiaobao/`(fallback 读 `~/.openclaw/state/wangxiaobao/`)。
57
-
58
-
59
11
  # 旺小宝问数
60
12
 
61
- `xiaobao_quick_qa` tool 用自然语言问当前激活项目的业务数据。
13
+ > **CRITICAL** —— 跑命令前 MUST 先用 Read tool 读取 [`../wangxiaobao-shared/SKILL.md`](../wangxiaobao-shared/SKILL.md)(一份共享文档讲清安装 / 登录 / 选项目 / 错误码 / 输出协议等所有 xiaobao-cli 命令通用的前置约定)。
14
+
15
+ 跑 `xiaobao-cli qa` 用自然语言问当前激活项目的业务数据。
62
16
  零副作用,不写文件、不动 wiki,所以用错也没成本,鼓励放心调用。
63
17
 
64
18
  ## 执行前必读
65
19
 
66
- - 必须有有效 token:先调 `xiaobao_whoami`;未登录 / 过期就调 `xiaobao_authorize`
67
- - **必须有激活项目**:tool 内部自动从激活项目状态读 tenant/project,
68
- 调用方**不要传** tenant/project 参数。如果 tool 返回
20
+ - 必须有有效 token:先调 `xiaobao-cli auth whoami`;未登录 / 过期就调 `xiaobao-cli auth login`
21
+ - **必须有激活项目**:命令内部自动从激活项目状态读 tenant/project,
22
+ 调用方**不要传** tenant/project 参数。如果 命令 返回
69
23
  `error: 'NO_ACTIVE_PROJECT'`,让用户跑 `wangxiaobao-switch-project` skill
70
24
  后再重试
71
25
  - **绝不要**写文件。即使用户随口说"顺便存一下"也要拦——告诉用户"出长报告
@@ -75,11 +29,11 @@ description: |
75
29
 
76
30
  ## 快速索引:意图 → 工具
77
31
 
78
- | 用户意图 | plugin tool | 关键参数 |
32
+ | 用户意图 | 命令 | 关键参数 |
79
33
  | ---------------------------------- | ------------------ | ------------------------------------- |
80
- | 单轮问数 | `xiaobao_quick_qa` | `prompt` |
81
- | 接着上一轮继续追问 | `xiaobao_quick_qa` | `prompt + threadId` |
82
- | 给问题加上下文(如客户 ID 列表) | `xiaobao_quick_qa` | `prompt + context: {...}` |
34
+ | 单轮问数 | `xiaobao-cli qa` | `prompt` |
35
+ | 接着上一轮继续追问 | `xiaobao-cli qa` | `prompt + threadId` |
36
+ | 给问题加上下文(如客户 ID 列表) | `xiaobao-cli qa` | `prompt + context: {...}` |
83
37
 
84
38
  ---
85
39
 
@@ -87,7 +41,7 @@ description: |
87
41
 
88
42
  ### 1. 用业务语言问,不要追问 ID
89
43
 
90
- 用户问"张三本周成交几单"——直接把 prompt 原样传给 tool,**不要**先去查
44
+ 用户问"张三本周成交几单"——直接把 prompt 原样传给 命令,**不要**先去查
91
45
  张三的 user-id 再拼参数。后端 AI 知道"张三"在当前项目里就是谁。
92
46
 
93
47
  如果用户问的是开放性问题("客户主要疑虑是啥"),更不要画蛇添足拼任何
@@ -95,15 +49,15 @@ ID / 时间窗口——AI 会自己定义合理范围。
95
49
 
96
50
  ### 2. 多轮:threadId 由 agent 自己接续
97
51
 
98
- 第一轮**不传** `threadId`,走单轮模式。响应里有 `resp.data.data.thread_id`,
99
- **记在 agent 当前对话上下文里**,后续追问把它原样传回 `threadId` 入参。
52
+ 第一轮**不传** `--thread-id`,走单轮模式。响应里有 `resp.data.data.thread_id`,
53
+ **记在 agent 当前对话上下文里**,后续追问把它原样传回 `--thread-id` 入参。
100
54
  **不要**把 thread_id 写到任何文件 / .env / 状态——它只是会话短期记忆。
101
55
 
102
56
  跨 session(用户关了 chat)就**不再延续**,新 session 重新发起新一轮即可。
103
57
 
104
58
  ### 3. 响应只取 answer 给用户
105
59
 
106
- `xiaobao_quick_qa` 返回结构:
60
+ `xiaobao-cli qa` 返回结构:
107
61
 
108
62
  ```jsonc
109
63
  {
@@ -118,7 +72,7 @@ ID / 时间窗口——AI 会自己定义合理范围。
118
72
  }
119
73
  ```
120
74
 
121
- plugin tool 又把上面塞进 `{ status, ok, data }` 外包:拿最终文本写
75
+ CLI 又把上面塞进 `{ status, ok, data }` 外包:拿最终文本写
122
76
  `resp.data.data.answer`,渲染给用户**只展示 answer**。
123
77
 
124
78
  如果要支持后续追问,结尾加一句"💡 想接着问可以告诉我,会沿用本次对话上下文"
@@ -127,7 +81,7 @@ plugin tool 又把上面塞进 `{ status, ok, data }` 外包:拿最终文本
127
81
  ### 4. 不要拉太多上下文进 context
128
82
 
129
83
  `context` 字段可以塞额外背景,但**控制在 < 4KB**。需要塞大块录音 / 客户
130
- 档案的需求暂时没有 plugin 侧支持——用户可以分多轮 prompt 喂,每轮塞一段。
84
+ 档案的需求暂时没有 CLI 侧支持——用户可以分多轮 prompt 喂,每轮塞一段。
131
85
 
132
86
  ### 5. 不要替代 audio-query 做"列录音元数据"
133
87
 
@@ -141,9 +95,8 @@ plugin tool 又把上面塞进 `{ status, ok, data }` 外包:拿最终文本
141
95
 
142
96
  ### 场景 1:问客户来访
143
97
 
144
- ```jsonc
145
- // xiaobao_quick_qa
146
- { "prompt": "今天到访了多少组客户,里面有几组是首访?" }
98
+ ```bash
99
+ xiaobao-cli qa "今天到访了多少组客户,里面有几组是首访?"
147
100
  ```
148
101
 
149
102
  渲染:
@@ -158,8 +111,8 @@ plugin tool 又把上面塞进 `{ status, ok, data }` 外包:拿最终文本
158
111
 
159
112
  ### 场景 2:问销冠
160
113
 
161
- ```jsonc
162
- { "prompt": "本月销冠是谁,业绩多少?" }
114
+ ```bash
115
+ xiaobao-cli qa "本月销冠是谁,业绩多少?"
163
116
  ```
164
117
 
165
118
  渲染:
@@ -172,8 +125,8 @@ plugin tool 又把上面塞进 `{ status, ok, data }` 外包:拿最终文本
172
125
 
173
126
  ### 场景 3:问录音覆盖率
174
127
 
175
- ```jsonc
176
- { "prompt": "本周录音覆盖率怎么样?哪些销售覆盖低?" }
128
+ ```bash
129
+ xiaobao-cli qa "本周录音覆盖率怎么样?哪些销售覆盖低?"
177
130
  ```
178
131
 
179
132
  渲染:
@@ -191,25 +144,21 @@ plugin tool 又把上面塞进 `{ status, ok, data }` 外包:拿最终文本
191
144
  用户:"那张三跟客户讲到学区时通常怎么应对?"
192
145
  (接着上一轮 ——agent 自己存了 threadId)
193
146
 
194
- ```jsonc
195
- {
196
- "prompt": "那张三跟客户讲到学区时通常怎么应对?",
197
- "threadId": "<上一轮 resp.data.data.thread_id>"
198
- }
147
+ ```bash
148
+ xiaobao-cli qa "那张三跟客户讲到学区时通常怎么应对?" --thread-id "<上一轮 resp.data.data.thread_id>"
199
149
  ```
200
150
 
201
- ### 场景 5:带额外 context
151
+ ### 场景 5:带额外 context(v0.1.x 暂不支持)
202
152
 
203
- ```jsonc
204
- {
205
- "prompt": "评估一下这个客户的成交概率",
206
- "context": {
207
- "customer_id": 12345,
208
- "recent_audio_ids": [9001, 9023, 9045]
209
- }
210
- }
153
+ CLI 当前只暴露 `--thread-id`,不支持 `--context` JSON 入参。要给 AI 喂上下文,
154
+ **把上下文直接写进 prompt** 即可:
155
+
156
+ ```bash
157
+ xiaobao-cli qa "评估一下客户 12345 的成交概率,相关录音 audioId: 9001, 9023, 9045"
211
158
  ```
212
159
 
160
+ 后端 AI 会从 prompt 文本里识别 customer_id / audio 引用。
161
+
213
162
  ---
214
163
 
215
164
  ## 典型问数关键词参考
@@ -229,10 +178,10 @@ plugin tool 又把上面塞进 `{ status, ok, data }` 外包:拿最终文本
229
178
 
230
179
  - **`error: 'NO_ACTIVE_PROJECT'`** — 还没设过激活项目 → 跑
231
180
  `wangxiaobao-switch-project` skill 后重试
232
- - **401 / token 过期** — 调 `xiaobao_authorize { force: true }` 重登,重试一次
233
- - **响应耗时 > 30 分钟** — 后端慢到打满 plugin timeout → 告诉用户"上游慢,稍后重试"
181
+ - **401 / token 过期** — 调 `xiaobao-cli auth login --force` 重登,重试一次
182
+ - **响应耗时 > 30 分钟** — 后端慢到打满 CLI timeout → 告诉用户"上游慢,稍后重试"
234
183
  - **answer 为空** — 上游这一轮没产出最终文本 → 让用户换个 prompt 重试
235
- - **用户想"批量出报告"** — 拦住:本期 plugin 没有报告生成 skill,
184
+ - **用户想"批量出报告"** — 拦住:本期 CLI 没有报告生成 skill,
236
185
  解释"出长报告的功能在做异步化改造,下期发布"
237
186
  - **用户问"列录音元数据 / audioId 是多少"** — 切到
238
187
  `wangxiaobao-audio-query` skill,那个走元数据 API 更精确