@puyinkai/xiaobao-cli 0.2.1 → 0.3.0

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/README.md CHANGED
@@ -55,6 +55,7 @@ xiaobao-cli audio list --from "2026-05-01 00:00:00" --to "2026-05-02 00:00:00" -
55
55
  | `kb docs [--title]` | 新增 · 知识库文档列表 |
56
56
  | `kb doc <doc-id>` | 新增 · 知识库文档详情 |
57
57
  | `kb doc-content <doc-id> [--offset] [--limit]` | 新增 · 知识库文档正文分页 |
58
+ | `quantum <metric> [--view] [--visit-type] …` | 新增 · 量子看板 / KPI 统计(20 指标) |
58
59
  | `api <METHOD> <path>` | `xiaobao_api` |
59
60
 
60
61
  ## 通用 flags
@@ -82,9 +83,10 @@ xiaobao-cli audio list --from "2026-05-01 00:00:00" --to "2026-05-02 00:00:00" -
82
83
  ## skill 配套
83
84
 
84
85
  `skills/` 目录下的 SKILL.md 跟 cli 同包发布,跟 openclaw-xiaobao 那边镜像,
85
- 只是调用从 plugin tool invoke 改为 shell out `xiaobao-cli ...`。本次新增
86
- `wangxiaobao-visit-summary-query`(来访接待总结)与 `wangxiaobao-knowledge-base`(知识库)
87
- 两个 skill;`wangxiaobao-quick-qa` 的问数底层由 fast-responder 切换为 sql-agent。
86
+ 只是调用从 plugin tool invoke 改为 shell out `xiaobao-cli ...`。近期新增
87
+ `wangxiaobao-visit-summary-query`(来访接待总结)、`wangxiaobao-knowledge-base`(知识库)
88
+ `wangxiaobao-quantum-stats`(量子看板 / KPI 统计,含 `references/quantum-metrics.md`);
89
+ `wangxiaobao-quick-qa` 的问数底层由 fast-responder 切换为 sql-agent。
88
90
 
89
91
  ## License
90
92
 
package/dist/cli.mjs CHANGED
@@ -8,8 +8,8 @@ import { defineCommand, runMain } from "citty";
8
8
  * xiaobao-cli entrypoint.
9
9
  *
10
10
  * Capabilities mapped from the openclaw-xiaobao plugin to CLI subcommands,
11
- * plus visit-summary and knowledge-base queries — all proxied through
12
- * ai-open → wang-ai-mcp. See README for the full command map.
11
+ * plus visit-summary, knowledge-base and quantum KPI stats — all proxied
12
+ * through ai-open → wang-ai-mcp. See README for the full command map.
13
13
  */
14
14
  const pkgPath = join(dirname(fileURLToPath(import.meta.url)), "..", "package.json");
15
15
  runMain(defineCommand({
@@ -24,11 +24,12 @@ runMain(defineCommand({
24
24
  consultant: () => import("./consultant-DvH6ezCT.mjs").then((m) => m.default),
25
25
  audio: () => import("./audio-DhEiStuy.mjs").then((m) => m.default),
26
26
  customer: () => import("./customer-BtAtJyM8.mjs").then((m) => m.default),
27
- visit: () => import("./visit-LX3B_OgE.mjs").then((m) => m.default),
27
+ visit: () => import("./visit-vRqOvBv5.mjs").then((m) => m.default),
28
28
  focus: () => import("./focus-BmLvFWII.mjs").then((m) => m.default),
29
- resistance: () => import("./resistance-BxOZNWbb.mjs").then((m) => m.default),
29
+ resistance: () => import("./resistance-B0gVs7-5.mjs").then((m) => m.default),
30
30
  qa: () => import("./qa-C2TSTS-m.mjs").then((m) => m.default),
31
31
  kb: () => import("./kb-B9IY8-fu.mjs").then((m) => m.default),
32
+ quantum: () => import("./quantum-4m2WGRWI.mjs").then((m) => m.default),
32
33
  api: () => import("./api-DtFEKH3I.mjs").then((m) => m.default)
33
34
  }
34
35
  }));
@@ -0,0 +1,183 @@
1
+ import { a as resolveConfig } from "./device-flow-D6JVcEap.mjs";
2
+ import { t as xbApiFetch } from "./api-client-CDNjkArS.mjs";
3
+ import { n as requireActiveProject } from "./project-store-CKVJa54T.mjs";
4
+ import { t as tenantProjectHeaders } from "./headers-DSnR4sjk.mjs";
5
+ import { n as writeResult, t as writeError } from "./format-CvKe7-yU.mjs";
6
+ import { r as toLocalDateTime, t as csvToArray } from "./util-CaPQBlNa.mjs";
7
+ import { defineCommand } from "citty";
8
+ //#region src/commands/quantum.ts
9
+ /**
10
+ * `xiaobao-cli quantum <metric>` — 旺小宝量子看板 / 预聚合 KPI 统计.
11
+ *
12
+ * 一个通用命令覆盖全部量子指标(visit / visit-ongoing / visit-realtime / follow /
13
+ * job-performance / work-quality / visit-timer / usage-data / resistance-point /
14
+ * speech-sale / demand-data / hot-words / risk / special-visit / month-report /
15
+ * deal / intent / pin-talk / demand-card / rhetoric)。它们共用同一套入参,靠
16
+ * `--view` / `--mode` 区分子视图。调 POST /ai-open/quantum/<metric>。
17
+ *
18
+ * 各指标支持哪些 view / 需要哪些参数,见 wangxiaobao-quantum-stats skill。
19
+ */
20
+ const num = (v) => v != null ? Number(v) : void 0;
21
+ const numList = (v) => csvToArray(v)?.map(Number);
22
+ var quantum_default = defineCommand({
23
+ meta: {
24
+ name: "quantum",
25
+ description: "量子看板 / KPI 统计(metric 见 quantum-stats skill;--view/--mode 区分子视图)"
26
+ },
27
+ args: {
28
+ metric: {
29
+ type: "positional",
30
+ required: true,
31
+ description: "指标端点:visit / deal / intent / pin-talk / demand-card / visit-timer 等"
32
+ },
33
+ view: {
34
+ type: "string",
35
+ description: "视图:summary|rank|team|time|user|... 随 metric 而定"
36
+ },
37
+ mode: {
38
+ type: "string",
39
+ description: "模式:page|count(visit-ongoing)、query|find(month-report)"
40
+ },
41
+ role: {
42
+ type: "string",
43
+ description: "角色:consultant|manager(usage-data)"
44
+ },
45
+ agg: {
46
+ type: "string",
47
+ description: "接访时长 metric:total|avg(visit-timer)"
48
+ },
49
+ from: {
50
+ type: "string",
51
+ description: "开始时间(默认当天 00:00:00)"
52
+ },
53
+ to: {
54
+ type: "string",
55
+ description: "结束时间(默认次日 00:00:00)"
56
+ },
57
+ "date-type": {
58
+ type: "string",
59
+ description: "day|week|month|year|total"
60
+ },
61
+ page: { type: "string" },
62
+ size: { type: "string" },
63
+ offset: { type: "string" },
64
+ "team-id": {
65
+ type: "string",
66
+ description: "团队 ID(team 视图下钻)"
67
+ },
68
+ "time-type": { type: "string" },
69
+ "visit-type": {
70
+ type: "string",
71
+ description: "first|second|third_more|special|all"
72
+ },
73
+ "deal-status": {
74
+ type: "string",
75
+ description: "CSV: 成交状态列表(deal)"
76
+ },
77
+ "model-id": {
78
+ type: "string",
79
+ description: "销讲/挖需模型 ID(pin-talk/demand-card)"
80
+ },
81
+ "dimension-id": {
82
+ type: "string",
83
+ description: "维度 ID(view=dimension|speech 下钻)"
84
+ },
85
+ "speech-id": {
86
+ type: "string",
87
+ description: "话术 ID(view=speech)"
88
+ },
89
+ config: {
90
+ type: "string",
91
+ description: "卡片 config JSON(一般不传)"
92
+ },
93
+ "stat-dimension": {
94
+ type: "string",
95
+ description: "visit_times|customer_num、follow_times|customer_num"
96
+ },
97
+ "intent-dimension": {
98
+ type: "string",
99
+ description: "review|ai(intent)"
100
+ },
101
+ "risk-dimension": {
102
+ type: "string",
103
+ description: "all|effective|review|invalid(risk)"
104
+ },
105
+ "intent-level": {
106
+ type: "string",
107
+ description: "A|B|C|D|E(intent view=user|period)"
108
+ },
109
+ direction: {
110
+ type: "string",
111
+ description: "left|right(intent view=period 翻页)"
112
+ },
113
+ "interval-start": {
114
+ type: "string",
115
+ description: "接访时长分桶起点分钟(visit-timer view=team|date 必填)"
116
+ },
117
+ "interval-end": {
118
+ type: "string",
119
+ description: "接访时长分桶终点分钟(visit-timer view=team|date 必填)"
120
+ },
121
+ "usage-data-type": {
122
+ type: "string",
123
+ description: "usage-data rank 指标"
124
+ },
125
+ "user-ids": {
126
+ type: "string",
127
+ description: "CSV: 显式 userIds 数据范围"
128
+ },
129
+ "api-base": { type: "string" },
130
+ "auth-base": { type: "string" },
131
+ format: {
132
+ type: "string",
133
+ default: "toon"
134
+ }
135
+ },
136
+ async run({ args }) {
137
+ try {
138
+ const config = resolveConfig({
139
+ apiBase: args["api-base"],
140
+ authBase: args["auth-base"]
141
+ });
142
+ const active = await requireActiveProject();
143
+ const metric = String(args.metric);
144
+ writeResult(await xbApiFetch(config, "POST", `/ai-open/quantum/${encodeURIComponent(metric)}`, {
145
+ headers: tenantProjectHeaders(active),
146
+ body: {
147
+ view: args.view,
148
+ mode: args.mode,
149
+ role: args.role,
150
+ metric: args.agg,
151
+ startTime: toLocalDateTime(args.from),
152
+ endTime: toLocalDateTime(args.to),
153
+ dateType: args["date-type"],
154
+ page: num(args.page),
155
+ size: num(args.size),
156
+ offset: num(args.offset),
157
+ teamId: num(args["team-id"]),
158
+ timeType: args["time-type"],
159
+ visitType: args["visit-type"],
160
+ dealStatus: numList(args["deal-status"]),
161
+ modelId: num(args["model-id"]),
162
+ dimensionId: num(args["dimension-id"]),
163
+ speechId: num(args["speech-id"]),
164
+ config: args.config,
165
+ statDimension: args["stat-dimension"],
166
+ intentDimension: args["intent-dimension"],
167
+ riskDimension: args["risk-dimension"],
168
+ intentLevel: args["intent-level"],
169
+ direction: args.direction,
170
+ intervalStart: num(args["interval-start"]),
171
+ intervalEnd: num(args["interval-end"]),
172
+ usageDataType: args["usage-data-type"],
173
+ userIds: numList(args["user-ids"])
174
+ }
175
+ }), args.format);
176
+ } catch (err) {
177
+ writeError(err, args.format);
178
+ process.exit(1);
179
+ }
180
+ }
181
+ });
182
+ //#endregion
183
+ export { quantum_default as default };
@@ -5,7 +5,7 @@ var resistance_default = defineCommand({
5
5
  name: "resistance",
6
6
  description: "客户抗性点标签分页查询"
7
7
  },
8
- subCommands: { list: () => import("./list-DmBz_8dR.mjs").then((m) => m.default) }
8
+ subCommands: { list: () => import("./list-D94oyNpR.mjs").then((m) => m.default) }
9
9
  });
10
10
  //#endregion
11
11
  export { resistance_default as default };
@@ -6,8 +6,8 @@ var visit_default = defineCommand({
6
6
  description: "客户来访分页查询 / 来访接待总结"
7
7
  },
8
8
  subCommands: {
9
- list: () => import("./list-DbReQZE2.mjs").then((m) => m.default),
10
- summary: () => import("./summary-CAm-WDNF.mjs").then((m) => m.default)
9
+ list: () => import("./list-D2qM7Ghn.mjs").then((m) => m.default),
10
+ summary: () => import("./summary-CcLTV5wr.mjs").then((m) => m.default)
11
11
  }
12
12
  });
13
13
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@puyinkai/xiaobao-cli",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "旺小宝 CLI — host-agnostic 业务数据 / 问数 / 来访总结 / 知识库 能力 (openclaw-xiaobao plugin 的 CLI 等价物)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: wangxiaobao-quantum-stats
3
+ version: 0.1.0
4
+ description: "旺小宝量子看板 / 预聚合 KPI 统计:来访/跟进/成交/意向/工作表现/接访时长/使用数据/抗性点/话术卖点/挖需/销售热词/风控/特殊来访/月报/销讲执行率/挖需执行率/说辞 等 20 类指标,按 项目/团队/顾问/时间 多视图下钻。只读、无副作用。高频命令: xiaobao-cli quantum <metric> [--view <v>] [--from <d>] [--to <d>] [--team-id <id>] [--visit-type first|second|third_more|special]。何时用:用户问 今天/本周来访多少组、来访排名、各团队来访/成交/意向对比、销冠成交、意向A级分布、录音覆盖率/盘客率、平均接待时长、销讲执行率、挖需率、风控触发次数、销售热词、月报 等 看板/KPI/排名/占比/团队对比 类问题。注:指标多、每个支持的 view 不同,跑前先读 references/quantum-metrics.md;跨指标坑:特殊到访组数用 `quantum visit --visit-type special`(不是 special-visit)、团队均值 MUST `--view team` 禁手算。要问一句话开放式业务问题走 wangxiaobao-quick-qa。"
5
+ metadata:
6
+ requires:
7
+ bins: ["xiaobao-cli"]
8
+ cliHelp: "xiaobao-cli quantum --help"
9
+ ---
10
+
11
+ # 旺小宝量子统计(量子看板 / 预聚合 KPI)
12
+
13
+ > **CRITICAL** —— 跑命令前 MUST 先用 Read tool 读取 [`../wangxiaobao-shared/SKILL.md`](../wangxiaobao-shared/SKILL.md)(安装 / 登录 / 选项目 / 错误码 / 输出协议)。
14
+ > **强烈建议** 再读 [`references/quantum-metrics.md`](references/quantum-metrics.md) —— 20 个指标各支持哪些 view/mode、需要哪些参数都在那里;跑前对照选对 `metric + view`,避免选错卡片或漏必填参数。
15
+
16
+ `xiaobao-cli quantum <metric> [--view ...]` 一个命令覆盖全部量子指标(对应 H5 量子看板各卡片)。它们**共用一套入参**,靠 `--view` / `--mode` 区分子视图。
17
+
18
+ ## 执行前必读
19
+ - 有效 token + **激活项目**(见 shared;缺失返回 `NO_ACTIVE_PROJECT`)
20
+ - **数据权限**:不传 `--user-ids` 时后端按当前用户的 管理者/个人 范围自动解析
21
+ - **时间**默认当天 `00:00:00 ~ 次日 00:00:00`;跨天/周/月用 `--from/--to` + `--date-type`
22
+ - 只读、**不要**写文件
23
+
24
+ ## 快速索引:用户意图 → metric + view
25
+ | 用户问法 | 命令 |
26
+ | --- | --- |
27
+ | 今天/本周来访多少组、来访趋势 | `quantum visit`(`--view summary` / `time`) |
28
+ | 来访排名 / 各顾问来访 | `quantum visit --view rank`(或 `team`) |
29
+ | 首访/复访/三访+/特殊到访 组数 | `quantum visit --visit-type first\|second\|third_more\|special` |
30
+ | 各团队 来访/成交/意向 对比 | `quantum <visit\|deal\|intent> --view team` |
31
+ | 成交统计 / 销冠 | `quantum deal`(`--view status/user/team/period`) |
32
+ | 意向级别分布 / A 级客户 | `quantum intent --view level`(或 `user` + `--intent-level A`) |
33
+ | 录音覆盖率 / 盘客率 | `quantum job-performance`(`--view audio_rate/panke_rate/team`) |
34
+ | 平均接待时长 / 服务分 | `quantum work-quality --view team`(团队均值禁手算) |
35
+ | 接访时长分桶下钻 | `quantum visit-timer`(team/date 须 `--interval-start/--interval-end`) |
36
+ | 销讲执行率 | `quantum pin-talk`(`--view summary/team/user/...`) |
37
+ | 挖需执行率 / 团队最高挖需率 | `quantum demand-card`(团队最高用 `--view team`) |
38
+ | 风控触发 | `quantum risk`(`--risk-dimension all/effective`) |
39
+ | 销售热词 | `quantum hot-words` |
40
+ | 月报 | `quantum month-report --mode query` |
41
+
42
+ (完整 20 指标 + 各 view/参数见 [`references/quantum-metrics.md`](references/quantum-metrics.md))
43
+
44
+ ## 核心约束(跨指标坑,务必遵守)
45
+ 1. **特殊到访组数/排名** 用 `quantum visit --visit-type special`,**不是** `quantum special-visit`(后者是「有效/无效标签卡」,语义不同)。
46
+ 2. **团队均值类**(某团队平均接待时长 / 服务分 / 挖需率 / 成交率…)**MUST 用 `--view team`**,禁止取 `user` 视图自己手算平均。
47
+ 3. **团队最高挖需率** → `quantum demand-card --view team`。
48
+ 4. **首访/复访/三访+** → `--visit-type first|second|third_more`(不传 ≠ 已选某 Tab,可能混合或未过滤)。
49
+ 5. **客户数维度** → `--stat-dimension customer_num`(来访默认 `visit_times`、跟进默认 `follow_times`;别一看到「客户数」就误用)。
50
+ 6. **意向复核后数据** → `--intent-dimension review`(默认 `ai`)。
51
+ 7. **visit-timer 的 team/date 下钻** → 必填 `--interval-start/--interval-end`(分桶:0/30/60/120 → 30/60/120/1000 分钟)。
52
+
53
+ ## 响应
54
+ 统一 `Result<Object>`,`data` 结构**随 metric/view 变化**(列表 / 嵌套 / 汇总都可能)。CLI 再包一层 → 读 `resp.data.data`。**按实际返回展示,不要假设固定结构、不要硬解析**。默认 `--format toon` 省 token;要严格 JSON 加 `--format json`。
55
+
56
+ ## 使用场景示例
57
+ ```bash
58
+ # 今天各顾问来访排名(首访)
59
+ xiaobao-cli quantum visit --view rank --visit-type first
60
+ # 各团队成交对比
61
+ xiaobao-cli quantum deal --view team
62
+ # 意向 A 级客户按顾问
63
+ xiaobao-cli quantum intent --view user --intent-level A --intent-dimension review
64
+ # 本周录音覆盖率(各团队)
65
+ xiaobao-cli quantum job-performance --view team --from "2026-06-09 00:00:00" --to "2026-06-16 00:00:00" --date-type week
66
+ # 接访时长 30~60 分钟档 各团队
67
+ xiaobao-cli quantum visit-timer --view team --interval-start 30 --interval-end 60
68
+ ```
69
+
70
+ ## 常见错误与排查
71
+ - **`NO_ACTIVE_PROJECT`** → 跑 `wangxiaobao-switch-project`
72
+ - **401 / token 过期** → `auth login --no-wait --force` 重登
73
+ - **400 / 缺参数**(如 visit-timer team 缺 interval、intent team 缺 intent-level)→ 对照 references 补齐必填
74
+ - **未知 metric(404)** → 端点名拼错,照 references 的 metric 列表
75
+ - **空数据** → 时间窗内无数据,或当前账号无该范围权限(不是 bug)
76
+ - **该用开放式问数** → 一句话业务问题(「客户主要疑虑是啥」)走 `wangxiaobao-quick-qa`,量子是结构化看板 KPI
@@ -0,0 +1,43 @@
1
+ # 量子统计指标清单(quantum-metrics)
2
+
3
+ `xiaobao-cli quantum <metric> [flags]` → `POST /ai-open/quantum/<metric>`。20 个 metric **共用同一套入参**,靠 `--view` / `--mode` 区分子视图,统一返回 `Result<Object>`(结构随 metric/view 变)。默认时间 = 当天。
4
+
5
+ ## 共享参数
6
+ - `--from` / `--to`:`yyyy-MM-dd HH:mm:ss`,默认当天 `00:00:00 ~ 次日`
7
+ - `--date-type`:`day|week|month|year|total`(默认 day)
8
+ - `--user-ids`:CSV 显式数据范围;不传按 管理者/个人 自动解析
9
+ - `--team-id`:团队 ID(部分 metric 的 scope)
10
+ - `--page` / `--size`:分页(默认 1 / 20)
11
+ - `--visit-type`:`first|second|third_more|special|all`(来访维度 Tab)
12
+
13
+ ## 20 个指标
14
+ | metric | 说明 | view / mode | 关键参数 |
15
+ | --- | --- | --- | --- |
16
+ | `visit` | 来访统计 | view: `summary`(默认)`\|rank\|team\|time` | `--stat-dimension visit_times`(默认)`\|customer_num`;`--visit-type first\|second\|third_more\|special` |
17
+ | `visit-ongoing` | 接待中接访 | mode: `page`(默认)`\|count` | — |
18
+ | `visit-realtime` | 实时看板 | view: `trend`(默认)`\|resistance\|resistance_list\|deal` | — |
19
+ | `follow` | 跟进统计 | view: `summary\|rank\|team\|time` | `--stat-dimension follow_times`(默认)`\|customer_num`;`--visit-type` 同 visit |
20
+ | `job-performance` | 工作表现(录音/盘客率) | view: `summary\|panke_rate\|audio_rate\|rank\|user\|team\|time` | `team`=各团队录音/盘客率 |
21
+ | `work-quality` | 工作质量(接待时长/服务分) | view: `summary\|user\|team\|date` | 团队均值 **MUST** `view=team`(禁 user 手算) |
22
+ | `visit-timer` | 接访时长 | view: `summary\|team\|user\|date` | `--agg total`(默认)`\|avg`;`team/date` 须 `--interval-start/--interval-end`(分桶 0/30/60/120 → 30/60/120/1000);`summary`=全项目 4 分桶;`user`=逐顾问平均分钟 |
23
+ | `usage-data` | 使用数据 | view: `summary\|rank\|time\|team` | `--role consultant`(默认)`\|manager`(仅影响 summary 展示);`--usage-data-type daily_time_avg\|review_audio\|learning_times\|customer_comment\|share_audio\|audio_comment`(rank 指标) |
24
+ | `resistance-point` | 抗性点 | view: `distribution`(默认)`\|detail_texts\|detail_total` | — |
25
+ | `speech-sale` | 话术卖点 | view: `summary\|user` | — |
26
+ | `demand-data` | 挖需统计(DataStat) | view: `summary\|user` | — |
27
+ | `hot-words` | 销售热词 | view: `summary\|user\|dimensions` | — |
28
+ | `risk` | 风控 | view: `summary`(风控点列表)`\|user\|total`(触发总次数) | `--risk-dimension all`(默认)`\|effective\|review\|invalid`(仅有效= effective) |
29
+ | `special-visit` | 特殊来访标签卡(有效/无效 visitLabel 分布) | view: `summary\|user` | ⚠️ H5「特殊到访组数/排名」**不用这个**,用 `visit --visit-type special` |
30
+ | `month-report` | 月报 | mode: `query`(默认)`\|find` | — |
31
+ | `deal` | 成交统计 | view: `status`(默认)`\|team\|user\|period` | `team`=各团队 count/total/rate;`--deal-status` 默认 `1,2,3` |
32
+ | `intent` | 意向统计 | view: `level`(默认,全项目级别分布)`\|team\|user\|period` | `team/user/period` 须 `--intent-level A\|B\|C\|D\|E`;`--intent-dimension review\|ai`(默认 ai);`--direction left\|right`(period 翻页) |
33
+ | `pin-talk` | 销讲执行率 | view: `summary\|visit_status\|team\|user\|dimension\|speech\|models` | `--visit-type first\|second\|third_more`;`--model-id/--dimension-id/--speech-id` 下钻 |
34
+ | `demand-card` | 挖需执行率卡片 | view: `summary\|visit_status\|team\|user\|dimension\|speech` | `--visit-type first\|second\|third_more\|all`;团队最高挖需率用 `--view team` |
35
+ | `rhetoric` | 说辞统计 | 无 view(默认汇总) | — |
36
+
37
+ ## 跨指标坑(重复强调)
38
+ - 特殊到访组数/排名 → `visit --visit-type special`,不是 `special-visit`。
39
+ - 团队均值/占比(接待时长、服务分、挖需率、成交率、意向占比)→ 对应 metric 的 `--view team`,别手算。
40
+ - 团队最高挖需率 → `demand-card --view team`。
41
+ - 首访/复访/三访+ → `--visit-type first|second|third_more`。
42
+ - 「客户数」口径 → `--stat-dimension customer_num`(默认是 visit_times / follow_times)。
43
+ - 意向复核后 → `--intent-dimension review`(默认 ai)。
@@ -156,7 +156,7 @@ openclaw 的副本(保留 plugin session 完整性)。`auth logout` 例外
156
156
  ## 数据权限隔离
157
157
 
158
158
  `audio list` / `customer list` / `visit list` / `visit summary` / `focus list` /
159
- `resistance list` / `consultant list` / `qa` 所有业务命令的后端都按**当前登录用户的授权范围**过滤数据:
159
+ `resistance list` / `consultant list` / `qa` / `quantum` 所有业务命令的后端都按**当前登录用户的授权范围**过滤数据:
160
160
 
161
161
  - 普通顾问:只看自己名下
162
162
  - 团队长:看本团队
File without changes
File without changes