@puyinkai/xiaobao-cli 0.5.0 → 0.6.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 +6 -0
- package/dist/add-CCuWFy1O.mjs +21 -0
- package/dist/analyze-mjHjOnz1.mjs +72 -0
- package/dist/{audio-DzcmDYVu.mjs → audio-CDt1rpEL.mjs} +3 -2
- package/dist/{auth-DvvYyJBK.mjs → auth-sQwZSTNA.mjs} +4 -4
- package/dist/beautx-DytYVFvT.mjs +16 -0
- package/dist/cli.mjs +16 -11
- package/dist/config-GuXMTecJ.mjs +11 -0
- package/dist/{consultant-Ccnjnhzz.mjs → consultant-elv5arLG.mjs} +1 -1
- package/dist/{customer-D_LctjqX.mjs → customer-CZ-nG9ku.mjs} +1 -1
- package/dist/date-BcQMKhIT.mjs +21 -0
- package/dist/deal-analysis-Dqz34gLw.mjs +10 -0
- package/dist/diff-8I1_L-nU.mjs +21 -0
- package/dist/fields-BRE3oWMD.mjs +54 -0
- package/dist/{focus-BPPyRCBb.mjs → focus-C4egr05X.mjs} +1 -1
- package/dist/follow-LwYQd9Bv.mjs +14 -0
- package/dist/get-CbovJWSq.mjs +66 -0
- package/dist/{kb-DpBUFdFV.mjs → kb-CyPqbezN.mjs} +4 -4
- package/dist/last-7-days-VKMMIzDz.mjs +5 -0
- package/dist/{list-CTSX1XuK.mjs → list-CT4t_FJs.mjs} +1 -1
- package/dist/{list-DciEIXpx.mjs → list-CiNgcIXS.mjs} +1 -1
- package/dist/{list-Ca5Fvq_e.mjs → list-DWv6toPT.mjs} +1 -1
- package/dist/list-DXOlqJog.mjs +76 -0
- package/dist/{list-xbJZbyGQ.mjs → list-FQpZk3vH.mjs} +1 -1
- package/dist/{list-D_8QLOZ1.mjs → list-OYeOGI0g.mjs} +1 -1
- package/dist/list-XIIj_ryX.mjs +43 -0
- package/dist/now-Ce3ViNOw.mjs +9 -0
- package/dist/plan-C35h8U-w.mjs +10 -0
- package/dist/portrait-BEDGkOx1.mjs +14 -0
- package/dist/portrait-tags-B9hPFDIF.mjs +10 -0
- package/dist/{project-CYA9qd8k.mjs → project-urShHaAN.mjs} +3 -3
- package/dist/{quantum-Dyhp2Clf.mjs → quantum-Ds7rlag3.mjs} +2 -2
- package/dist/range-CSJiXTp3.mjs +18 -0
- package/dist/{resistance-BhlYgeUx.mjs → resistance-DMesV4lG.mjs} +1 -1
- package/dist/{search-ChFFOKV4.mjs → search-B0wA0YCI.mjs} +1 -1
- package/dist/shared-BEkL4JRB.mjs +11 -0
- package/dist/shared-Bbxvn4ZI.mjs +92 -0
- package/dist/shared-CYALikq5.mjs +277 -0
- package/dist/subtract-B4XTXD_X.mjs +21 -0
- package/dist/{summary-C3poiB2C.mjs → summary-BIx7F4AE.mjs} +1 -1
- package/dist/summary-BkxVcv8a.mjs +65 -0
- package/dist/this-month-BRdfmc1s.mjs +5 -0
- package/dist/this-week-2GoqEaXU.mjs +5 -0
- package/dist/today-BhQnSMJH.mjs +5 -0
- package/dist/today-CdlU96lq.mjs +9 -0
- package/dist/today-so-far-D2g98rKv.mjs +5 -0
- package/dist/tomorrow-BgSEBV69.mjs +9 -0
- package/dist/{visit-qf8Lwf_s.mjs → visit-CmEtfs7n.mjs} +2 -2
- package/dist/visit-evaluate-LdAg9iP5.mjs +9 -0
- package/dist/weekday-CgEg7n7U.mjs +14 -0
- package/dist/yesterday-CHAh1DlJ.mjs +5 -0
- package/dist/yesterday-DW-YiRTt.mjs +9 -0
- package/package.json +1 -1
- package/skills/wangxiaobao-audio-analyze/SKILL.md +42 -0
- package/skills/wangxiaobao-beautx/SKILL.md +42 -0
- package/skills/wangxiaobao-customer-portrait/SKILL.md +45 -0
- package/skills/wangxiaobao-customer-query/SKILL.md +1 -1
- package/skills/wangxiaobao-follow-query/SKILL.md +45 -0
- package/skills/wangxiaobao-quantum-stats/SKILL.md +3 -1
- package/skills/wangxiaobao-quantum-stats/references/quantum-metrics.md +3 -2
- package/skills/wangxiaobao-shared/SKILL.md +5 -1
- /package/dist/{current-CaUOiS5G.mjs → current-ABh6R3vp.mjs} +0 -0
- /package/dist/{doc-CC08fj8m.mjs → doc-CJT7BuhU.mjs} +0 -0
- /package/dist/{doc-content-DktnDECM.mjs → doc-content-_SCykNvs.mjs} +0 -0
- /package/dist/{docs-DtQy3Zoc.mjs → docs-BHtwTAJ4.mjs} +0 -0
- /package/dist/{list-Ikc5mo6a.mjs → list-2qqSxkDM.mjs} +0 -0
- /package/dist/{list-DPyzRkq4.mjs → list-Ca5uJXDH.mjs} +0 -0
- /package/dist/{login-COK74GKN.mjs → login-Bp2W2Hnj.mjs} +0 -0
- /package/dist/{logout-BQnDwD5-.mjs → logout-BnoEQxKZ.mjs} +0 -0
- /package/dist/{qa-CDYWW-19.mjs → qa-CaV_tDBc.mjs} +0 -0
- /package/dist/{status-DR0tFzju.mjs → status-CrpCtf5U.mjs} +0 -0
- /package/dist/{text-K7uP8bat.mjs → text-CqmsXzad.mjs} +0 -0
- /package/dist/{use-DwoZynR9.mjs → use-rAR4OVC7.mjs} +0 -0
- /package/dist/{util-pyTg7qwY.mjs → util-BuoFIeLS.mjs} +0 -0
- /package/dist/{whoami-CtuWBu20.mjs → whoami-oRc8gILN.mjs} +0 -0
package/README.md
CHANGED
|
@@ -56,6 +56,12 @@ xiaobao-cli audio list --from "2026-05-01 00:00:00" --to "2026-05-02 00:00:00" -
|
|
|
56
56
|
| `kb doc <doc-id>` | 新增 · 知识库文档详情 |
|
|
57
57
|
| `kb doc-content <doc-id> [--offset] [--limit]` | 新增 · 知识库文档正文分页 |
|
|
58
58
|
| `quantum <metric> [--view] [--visit-type] …` | 新增 · 量子看板 / KPI 统计(20 指标) |
|
|
59
|
+
| `follow list` / `follow summary` | 新增 · 旺跟进明细分页 / 电话微信指标汇总 |
|
|
60
|
+
| `portrait list` / `portrait get <字段>` | 新增 · 画像字段清单 / 单字段饼图分布 |
|
|
61
|
+
| `config fields` | 新增 · 客户字段配置字典(解读 dynamic_tags) |
|
|
62
|
+
| `audio analyze <query> [--customer-id]` | 新增 · 录音批量分析(LLM) |
|
|
63
|
+
| `beautx plan\|deal-analysis\|portrait-tags\|visit-evaluate` | 新增 · 医美四查询 |
|
|
64
|
+
| `date now\|today\|range this-week …` | 新增 · 本地日期工具(不走网络) |
|
|
59
65
|
| `admin sales-report --from --to [--by project\|zone]` | 新增 · 公司经营数据 出库/回款(super-admin,独立白名单) |
|
|
60
66
|
| `admin token-usage --from --to [--model] …` | 新增 · LLM token 用量(super-admin,独立白名单) |
|
|
61
67
|
| `api <METHOD> <path>` | `xiaobao_api` |
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { n as parsePositiveDays, r as addDays, t as defineDateCommand } from "./shared-CYALikq5.mjs";
|
|
2
|
+
//#region src/commands/date/add.ts
|
|
3
|
+
var add_default = defineDateCommand({
|
|
4
|
+
name: "add",
|
|
5
|
+
description: "日期往后推 N 天",
|
|
6
|
+
args: {
|
|
7
|
+
date: {
|
|
8
|
+
type: "positional",
|
|
9
|
+
required: true,
|
|
10
|
+
description: "基准日期 YYYY-MM-DD"
|
|
11
|
+
},
|
|
12
|
+
days: {
|
|
13
|
+
type: "positional",
|
|
14
|
+
required: true,
|
|
15
|
+
description: "往后推的天数(非负整数)"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
run: ({ args }) => addDays(args.date, parsePositiveDays(args.days, "days"), args.timezone)
|
|
19
|
+
});
|
|
20
|
+
//#endregion
|
|
21
|
+
export { add_default as default };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
3
|
+
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
|
+
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
|
+
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
+
import { t as csvToArray } from "./util-BuoFIeLS.mjs";
|
|
7
|
+
import { defineCommand } from "citty";
|
|
8
|
+
//#region src/commands/audio/analyze.ts
|
|
9
|
+
/**
|
|
10
|
+
* `xiaobao-cli audio analyze` — 录音批量分析(LLM)。
|
|
11
|
+
*
|
|
12
|
+
* 对指定客户/顾问范围的录音做 LLM 分析(共性抗性、话术问题等开放问题)。
|
|
13
|
+
* 与 `audio list/text`(元数据/逐字稿查询)不同,这是耗时的生成式分析。
|
|
14
|
+
* 调 POST /ai-open/audio/analyze。
|
|
15
|
+
*/
|
|
16
|
+
var analyze_default = defineCommand({
|
|
17
|
+
meta: {
|
|
18
|
+
name: "analyze",
|
|
19
|
+
description: "录音批量分析(LLM,耗时较长;元数据查询用 audio list)"
|
|
20
|
+
},
|
|
21
|
+
args: {
|
|
22
|
+
query: {
|
|
23
|
+
type: "positional",
|
|
24
|
+
required: true,
|
|
25
|
+
description: "分析问题/指令"
|
|
26
|
+
},
|
|
27
|
+
type: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "分析类型:general_analysis(默认)| timeline_analysis"
|
|
30
|
+
},
|
|
31
|
+
"customer-id": {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "单个客户 wang_id"
|
|
34
|
+
},
|
|
35
|
+
"customer-ids": {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "CSV: 客户 wang_id 列表"
|
|
38
|
+
},
|
|
39
|
+
"advisor-ids": {
|
|
40
|
+
type: "string",
|
|
41
|
+
description: "CSV: 顾问 userId 列表"
|
|
42
|
+
},
|
|
43
|
+
"api-base": { type: "string" },
|
|
44
|
+
"auth-base": { type: "string" },
|
|
45
|
+
format: {
|
|
46
|
+
type: "string",
|
|
47
|
+
default: "toon"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
async run({ args }) {
|
|
51
|
+
try {
|
|
52
|
+
writeResult(await xbApiFetch(resolveConfig({
|
|
53
|
+
apiBase: args["api-base"],
|
|
54
|
+
authBase: args["auth-base"]
|
|
55
|
+
}), "POST", "/ai-open/audio/analyze", {
|
|
56
|
+
headers: tenantProjectHeaders(await requireActiveProject()),
|
|
57
|
+
body: {
|
|
58
|
+
query: String(args.query),
|
|
59
|
+
analysisType: args.type,
|
|
60
|
+
customerId: args["customer-id"],
|
|
61
|
+
customerIds: csvToArray(args["customer-ids"]),
|
|
62
|
+
advisorIds: csvToArray(args["advisor-ids"])
|
|
63
|
+
}
|
|
64
|
+
}), args.format);
|
|
65
|
+
} catch (err) {
|
|
66
|
+
writeError(err, args.format);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
//#endregion
|
|
72
|
+
export { analyze_default as default };
|
|
@@ -6,8 +6,9 @@ var audio_default = defineCommand({
|
|
|
6
6
|
description: "录音元数据分页 / 单条文本查询"
|
|
7
7
|
},
|
|
8
8
|
subCommands: {
|
|
9
|
-
list: () => import("./list-
|
|
10
|
-
text: () => import("./text-
|
|
9
|
+
list: () => import("./list-CT4t_FJs.mjs").then((m) => m.default),
|
|
10
|
+
text: () => import("./text-CqmsXzad.mjs").then((m) => m.default),
|
|
11
|
+
analyze: () => import("./analyze-mjHjOnz1.mjs").then((m) => m.default)
|
|
11
12
|
}
|
|
12
13
|
});
|
|
13
14
|
//#endregion
|
|
@@ -6,10 +6,10 @@ var auth_default = defineCommand({
|
|
|
6
6
|
description: "OAuth 登录 / 身份查询 / 登出(device flow)"
|
|
7
7
|
},
|
|
8
8
|
subCommands: {
|
|
9
|
-
login: () => import("./login-
|
|
10
|
-
whoami: () => import("./whoami-
|
|
11
|
-
status: () => import("./status-
|
|
12
|
-
logout: () => import("./logout-
|
|
9
|
+
login: () => import("./login-Bp2W2Hnj.mjs").then((m) => m.default),
|
|
10
|
+
whoami: () => import("./whoami-oRc8gILN.mjs").then((m) => m.default),
|
|
11
|
+
status: () => import("./status-CrpCtf5U.mjs").then((m) => m.default),
|
|
12
|
+
logout: () => import("./logout-BnoEQxKZ.mjs").then((m) => m.default)
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
15
|
//#endregion
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
//#region src/commands/beautx/index.ts
|
|
3
|
+
var beautx_default = defineCommand({
|
|
4
|
+
meta: {
|
|
5
|
+
name: "beautx",
|
|
6
|
+
description: "医美:变美计划(plan) / 成交分析(deal-analysis) / 画像标签(portrait-tags) / 接诊评价(visit-evaluate)"
|
|
7
|
+
},
|
|
8
|
+
subCommands: {
|
|
9
|
+
plan: () => import("./plan-C35h8U-w.mjs").then((m) => m.default),
|
|
10
|
+
"deal-analysis": () => import("./deal-analysis-Dqz34gLw.mjs").then((m) => m.default),
|
|
11
|
+
"portrait-tags": () => import("./portrait-tags-B9hPFDIF.mjs").then((m) => m.default),
|
|
12
|
+
"visit-evaluate": () => import("./visit-evaluate-LdAg9iP5.mjs").then((m) => m.default)
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
//#endregion
|
|
16
|
+
export { beautx_default as default };
|
package/dist/cli.mjs
CHANGED
|
@@ -19,17 +19,22 @@ runMain(defineCommand({
|
|
|
19
19
|
description: "旺小宝 CLI — host-agnostic 业务数据 / 问数 / 来访总结 / 知识库 能力 (openclaw-xiaobao plugin 的 CLI 等价物)"
|
|
20
20
|
},
|
|
21
21
|
subCommands: {
|
|
22
|
-
auth: () => import("./auth-
|
|
23
|
-
project: () => import("./project-
|
|
24
|
-
consultant: () => import("./consultant-
|
|
25
|
-
audio: () => import("./audio-
|
|
26
|
-
customer: () => import("./customer-
|
|
27
|
-
visit: () => import("./visit-
|
|
28
|
-
focus: () => import("./focus-
|
|
29
|
-
resistance: () => import("./resistance-
|
|
30
|
-
qa: () => import("./qa-
|
|
31
|
-
kb: () => import("./kb-
|
|
32
|
-
quantum: () => import("./quantum-
|
|
22
|
+
auth: () => import("./auth-sQwZSTNA.mjs").then((m) => m.default),
|
|
23
|
+
project: () => import("./project-urShHaAN.mjs").then((m) => m.default),
|
|
24
|
+
consultant: () => import("./consultant-elv5arLG.mjs").then((m) => m.default),
|
|
25
|
+
audio: () => import("./audio-CDt1rpEL.mjs").then((m) => m.default),
|
|
26
|
+
customer: () => import("./customer-CZ-nG9ku.mjs").then((m) => m.default),
|
|
27
|
+
visit: () => import("./visit-CmEtfs7n.mjs").then((m) => m.default),
|
|
28
|
+
focus: () => import("./focus-C4egr05X.mjs").then((m) => m.default),
|
|
29
|
+
resistance: () => import("./resistance-DMesV4lG.mjs").then((m) => m.default),
|
|
30
|
+
qa: () => import("./qa-CaV_tDBc.mjs").then((m) => m.default),
|
|
31
|
+
kb: () => import("./kb-CyPqbezN.mjs").then((m) => m.default),
|
|
32
|
+
quantum: () => import("./quantum-Ds7rlag3.mjs").then((m) => m.default),
|
|
33
|
+
follow: () => import("./follow-LwYQd9Bv.mjs").then((m) => m.default),
|
|
34
|
+
portrait: () => import("./portrait-BEDGkOx1.mjs").then((m) => m.default),
|
|
35
|
+
config: () => import("./config-GuXMTecJ.mjs").then((m) => m.default),
|
|
36
|
+
beautx: () => import("./beautx-DytYVFvT.mjs").then((m) => m.default),
|
|
37
|
+
date: () => import("./date-BcQMKhIT.mjs").then((m) => m.default),
|
|
33
38
|
admin: () => import("./admin-BOL_otwc.mjs").then((m) => m.default),
|
|
34
39
|
api: () => import("./api-BaX_r5S5.mjs").then((m) => m.default)
|
|
35
40
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
//#region src/commands/config/index.ts
|
|
3
|
+
var config_default = defineCommand({
|
|
4
|
+
meta: {
|
|
5
|
+
name: "config",
|
|
6
|
+
description: "项目配置:客户字段配置(fields,解读 dynamic_tags 标签含义)"
|
|
7
|
+
},
|
|
8
|
+
subCommands: { fields: () => import("./fields-BRE3oWMD.mjs").then((m) => m.default) }
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
export { config_default as default };
|
|
@@ -5,7 +5,7 @@ var consultant_default = defineCommand({
|
|
|
5
5
|
name: "consultant",
|
|
6
6
|
description: "查询有权限的置业顾问列表"
|
|
7
7
|
},
|
|
8
|
-
subCommands: { list: () => import("./list-
|
|
8
|
+
subCommands: { list: () => import("./list-2qqSxkDM.mjs").then((m) => m.default) }
|
|
9
9
|
});
|
|
10
10
|
//#endregion
|
|
11
11
|
export { consultant_default as default };
|
|
@@ -5,7 +5,7 @@ var customer_default = defineCommand({
|
|
|
5
5
|
name: "customer",
|
|
6
6
|
description: "客户画像分页查询"
|
|
7
7
|
},
|
|
8
|
-
subCommands: { list: () => import("./list-
|
|
8
|
+
subCommands: { list: () => import("./list-FQpZk3vH.mjs").then((m) => m.default) }
|
|
9
9
|
});
|
|
10
10
|
//#endregion
|
|
11
11
|
export { customer_default as default };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
//#region src/commands/date/index.ts
|
|
3
|
+
var date_default = defineCommand({
|
|
4
|
+
meta: {
|
|
5
|
+
name: "date",
|
|
6
|
+
description: "本地日期/时间(不走 MCP):now、today、weekday、range 等"
|
|
7
|
+
},
|
|
8
|
+
subCommands: {
|
|
9
|
+
now: () => import("./now-Ce3ViNOw.mjs").then((m) => m.default),
|
|
10
|
+
today: () => import("./today-CdlU96lq.mjs").then((m) => m.default),
|
|
11
|
+
yesterday: () => import("./yesterday-DW-YiRTt.mjs").then((m) => m.default),
|
|
12
|
+
tomorrow: () => import("./tomorrow-BgSEBV69.mjs").then((m) => m.default),
|
|
13
|
+
weekday: () => import("./weekday-CgEg7n7U.mjs").then((m) => m.default),
|
|
14
|
+
add: () => import("./add-CCuWFy1O.mjs").then((m) => m.default),
|
|
15
|
+
subtract: () => import("./subtract-B4XTXD_X.mjs").then((m) => m.default),
|
|
16
|
+
diff: () => import("./diff-8I1_L-nU.mjs").then((m) => m.default),
|
|
17
|
+
range: () => import("./range-CSJiXTp3.mjs").then((m) => m.default)
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
//#endregion
|
|
21
|
+
export { date_default as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { t as defineBeautxCommand } from "./shared-Bbxvn4ZI.mjs";
|
|
2
|
+
//#region src/commands/beautx/deal-analysis.ts
|
|
3
|
+
var deal_analysis_default = defineBeautxCommand({
|
|
4
|
+
name: "deal-analysis",
|
|
5
|
+
description: "医美成交分析分页(成交状态/未成交点/分析原因与结果)",
|
|
6
|
+
path: "/ai-open/beautx/deal-analyses",
|
|
7
|
+
supportsLatestOnly: true
|
|
8
|
+
});
|
|
9
|
+
//#endregion
|
|
10
|
+
export { deal_analysis_default as default };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { i as dateDiff, t as defineDateCommand } from "./shared-CYALikq5.mjs";
|
|
2
|
+
//#region src/commands/date/diff.ts
|
|
3
|
+
var diff_default = defineDateCommand({
|
|
4
|
+
name: "diff",
|
|
5
|
+
description: "计算两日期相差天数(end - start)",
|
|
6
|
+
args: {
|
|
7
|
+
start: {
|
|
8
|
+
type: "string",
|
|
9
|
+
description: "开始日期 YYYY-MM-DD",
|
|
10
|
+
required: true
|
|
11
|
+
},
|
|
12
|
+
end: {
|
|
13
|
+
type: "string",
|
|
14
|
+
description: "结束日期 YYYY-MM-DD",
|
|
15
|
+
required: true
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
run: ({ args }) => dateDiff(args.start, args.end)
|
|
19
|
+
});
|
|
20
|
+
//#endregion
|
|
21
|
+
export { diff_default as default };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
3
|
+
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
|
+
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
|
+
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
+
import { defineCommand } from "citty";
|
|
7
|
+
//#region src/commands/config/fields.ts
|
|
8
|
+
/**
|
|
9
|
+
* `xiaobao-cli config fields` — 客户字段配置分页。
|
|
10
|
+
*
|
|
11
|
+
* 返回本项目客户字段(名称/格式/说明/分类/AI 映射名),供解读
|
|
12
|
+
* customer list 里 dynamic_tags 各标签的含义。调 POST /ai-open/customers/fields。
|
|
13
|
+
*/
|
|
14
|
+
var fields_default = defineCommand({
|
|
15
|
+
meta: {
|
|
16
|
+
name: "fields",
|
|
17
|
+
description: "客户字段配置分页(解读 dynamic_tags 标签含义)"
|
|
18
|
+
},
|
|
19
|
+
args: {
|
|
20
|
+
page: {
|
|
21
|
+
type: "string",
|
|
22
|
+
default: "1"
|
|
23
|
+
},
|
|
24
|
+
size: {
|
|
25
|
+
type: "string",
|
|
26
|
+
default: "50"
|
|
27
|
+
},
|
|
28
|
+
"api-base": { type: "string" },
|
|
29
|
+
"auth-base": { type: "string" },
|
|
30
|
+
format: {
|
|
31
|
+
type: "string",
|
|
32
|
+
default: "toon"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
async run({ args }) {
|
|
36
|
+
try {
|
|
37
|
+
writeResult(await xbApiFetch(resolveConfig({
|
|
38
|
+
apiBase: args["api-base"],
|
|
39
|
+
authBase: args["auth-base"]
|
|
40
|
+
}), "POST", "/ai-open/customers/fields", {
|
|
41
|
+
headers: tenantProjectHeaders(await requireActiveProject()),
|
|
42
|
+
body: {
|
|
43
|
+
page: Number(args.page),
|
|
44
|
+
size: Number(args.size)
|
|
45
|
+
}
|
|
46
|
+
}), args.format);
|
|
47
|
+
} catch (err) {
|
|
48
|
+
writeError(err, args.format);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
//#endregion
|
|
54
|
+
export { fields_default as default };
|
|
@@ -5,7 +5,7 @@ var focus_default = defineCommand({
|
|
|
5
5
|
name: "focus",
|
|
6
6
|
description: "客户关注点标签分页查询"
|
|
7
7
|
},
|
|
8
|
-
subCommands: { list: () => import("./list-
|
|
8
|
+
subCommands: { list: () => import("./list-OYeOGI0g.mjs").then((m) => m.default) }
|
|
9
9
|
});
|
|
10
10
|
//#endregion
|
|
11
11
|
export { focus_default as default };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
//#region src/commands/follow/index.ts
|
|
3
|
+
var follow_default = defineCommand({
|
|
4
|
+
meta: {
|
|
5
|
+
name: "follow",
|
|
6
|
+
description: "旺跟进:明细分页(list) / 电话微信指标汇总(summary)(聚合统计卡片用 quantum follow)"
|
|
7
|
+
},
|
|
8
|
+
subCommands: {
|
|
9
|
+
list: () => import("./list-DXOlqJog.mjs").then((m) => m.default),
|
|
10
|
+
summary: () => import("./summary-BkxVcv8a.mjs").then((m) => m.default)
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
//#endregion
|
|
14
|
+
export { follow_default as default };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
3
|
+
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
|
+
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
|
+
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
+
import { r as toLocalDateTime, t as csvToArray } from "./util-BuoFIeLS.mjs";
|
|
7
|
+
import { defineCommand } from "citty";
|
|
8
|
+
//#region src/commands/portrait/get.ts
|
|
9
|
+
/**
|
|
10
|
+
* `xiaobao-cli portrait get <field>` — 单个画像字段的饼图分布。
|
|
11
|
+
*
|
|
12
|
+
* 回答"全项目客户的<意向级别/预算/…>分布比例"类问题(count + items[].name/count/rate)。
|
|
13
|
+
* field 用 `portrait list` 返回的中文字段名。调 POST /ai-open/portraits/get。
|
|
14
|
+
*/
|
|
15
|
+
var get_default = defineCommand({
|
|
16
|
+
meta: {
|
|
17
|
+
name: "get",
|
|
18
|
+
description: "画像饼图数据(按单个字段中文名查询分布)"
|
|
19
|
+
},
|
|
20
|
+
args: {
|
|
21
|
+
field: {
|
|
22
|
+
type: "positional",
|
|
23
|
+
required: true,
|
|
24
|
+
description: "画像字段中文名(portrait list 的 fieldName)"
|
|
25
|
+
},
|
|
26
|
+
from: {
|
|
27
|
+
type: "string",
|
|
28
|
+
description: "开始时间(含)"
|
|
29
|
+
},
|
|
30
|
+
to: {
|
|
31
|
+
type: "string",
|
|
32
|
+
description: "结束时间(不含)"
|
|
33
|
+
},
|
|
34
|
+
"user-ids": {
|
|
35
|
+
type: "string",
|
|
36
|
+
description: "CSV: 数据范围 userIds;不传按当前授权范围"
|
|
37
|
+
},
|
|
38
|
+
"api-base": { type: "string" },
|
|
39
|
+
"auth-base": { type: "string" },
|
|
40
|
+
format: {
|
|
41
|
+
type: "string",
|
|
42
|
+
default: "toon"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async run({ args }) {
|
|
46
|
+
try {
|
|
47
|
+
writeResult(await xbApiFetch(resolveConfig({
|
|
48
|
+
apiBase: args["api-base"],
|
|
49
|
+
authBase: args["auth-base"]
|
|
50
|
+
}), "POST", "/ai-open/portraits/get", {
|
|
51
|
+
headers: tenantProjectHeaders(await requireActiveProject()),
|
|
52
|
+
body: {
|
|
53
|
+
field: String(args.field),
|
|
54
|
+
fromDate: toLocalDateTime(args.from),
|
|
55
|
+
toDate: toLocalDateTime(args.to),
|
|
56
|
+
userIds: csvToArray(args["user-ids"])?.map(Number)
|
|
57
|
+
}
|
|
58
|
+
}), args.format);
|
|
59
|
+
} catch (err) {
|
|
60
|
+
writeError(err, args.format);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
//#endregion
|
|
66
|
+
export { get_default as default };
|
|
@@ -6,10 +6,10 @@ var kb_default = defineCommand({
|
|
|
6
6
|
description: "项目知识库:语义检索 / 文档列表 / 文档详情 / 文档正文分页"
|
|
7
7
|
},
|
|
8
8
|
subCommands: {
|
|
9
|
-
search: () => import("./search-
|
|
10
|
-
docs: () => import("./docs-
|
|
11
|
-
doc: () => import("./doc-
|
|
12
|
-
"doc-content": () => import("./doc-content-
|
|
9
|
+
search: () => import("./search-B0wA0YCI.mjs").then((m) => m.default),
|
|
10
|
+
docs: () => import("./docs-BHtwTAJ4.mjs").then((m) => m.default),
|
|
11
|
+
doc: () => import("./doc-CJT7BuhU.mjs").then((m) => m.default),
|
|
12
|
+
"doc-content": () => import("./doc-content-_SCykNvs.mjs").then((m) => m.default)
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
15
|
//#endregion
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { t as defineRangePresetCommand } from "./shared-BEkL4JRB.mjs";
|
|
2
|
+
//#region src/commands/date/range/last-7-days.ts
|
|
3
|
+
var last_7_days_default = defineRangePresetCommand("last-7-days", "最近 7 天(含今天):from=6 天前 00:00,to=明天 00:00");
|
|
4
|
+
//#endregion
|
|
5
|
+
export { last_7_days_default as default };
|
|
@@ -3,7 +3,7 @@ import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
|
3
3
|
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
4
|
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
5
|
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
-
import { n as mergeUserIds, r as toLocalDateTime, t as csvToArray } from "./util-
|
|
6
|
+
import { n as mergeUserIds, r as toLocalDateTime, t as csvToArray } from "./util-BuoFIeLS.mjs";
|
|
7
7
|
import { defineCommand } from "citty";
|
|
8
8
|
//#region src/commands/audio/list.ts
|
|
9
9
|
/**
|
|
@@ -3,7 +3,7 @@ import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
|
3
3
|
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
4
|
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
5
|
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
-
import { r as toLocalDateTime, t as csvToArray } from "./util-
|
|
6
|
+
import { r as toLocalDateTime, t as csvToArray } from "./util-BuoFIeLS.mjs";
|
|
7
7
|
import { defineCommand } from "citty";
|
|
8
8
|
//#region src/commands/resistance/list.ts
|
|
9
9
|
/**
|
|
@@ -3,7 +3,7 @@ import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
|
3
3
|
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
4
|
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
5
|
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
-
import { r as toLocalDateTime } from "./util-
|
|
6
|
+
import { r as toLocalDateTime } from "./util-BuoFIeLS.mjs";
|
|
7
7
|
import { defineCommand } from "citty";
|
|
8
8
|
//#region src/commands/visit/list.ts
|
|
9
9
|
/**
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
3
|
+
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
|
+
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
|
+
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
+
import { r as toLocalDateTime, t as csvToArray } from "./util-BuoFIeLS.mjs";
|
|
7
|
+
import { defineCommand } from "citty";
|
|
8
|
+
//#region src/commands/follow/list.ts
|
|
9
|
+
/**
|
|
10
|
+
* `xiaobao-cli follow list` — 旺跟进明细分页。
|
|
11
|
+
*
|
|
12
|
+
* 每条 = 一次跟进动作(电话/短信/微信/企微…,含通话时长、消息条数)。
|
|
13
|
+
* 聚合统计卡片(summary/rank/team/time)走 `quantum follow`;
|
|
14
|
+
* 电话/微信指标汇总走 `follow summary`。调 POST /ai-open/follows/page。
|
|
15
|
+
*/
|
|
16
|
+
var list_default = defineCommand({
|
|
17
|
+
meta: {
|
|
18
|
+
name: "list",
|
|
19
|
+
description: "旺跟进明细分页(谁/何时/以什么方式跟进了哪个客户)"
|
|
20
|
+
},
|
|
21
|
+
args: {
|
|
22
|
+
"user-ids": {
|
|
23
|
+
type: "string",
|
|
24
|
+
description: "CSV: 跟进人 userId 过滤;不传按当前授权范围"
|
|
25
|
+
},
|
|
26
|
+
"customer-ids": {
|
|
27
|
+
type: "string",
|
|
28
|
+
description: "CSV: 客户 wang_id 过滤"
|
|
29
|
+
},
|
|
30
|
+
from: {
|
|
31
|
+
type: "string",
|
|
32
|
+
description: "开始时间(含)"
|
|
33
|
+
},
|
|
34
|
+
to: {
|
|
35
|
+
type: "string",
|
|
36
|
+
description: "结束时间(不含)"
|
|
37
|
+
},
|
|
38
|
+
page: {
|
|
39
|
+
type: "string",
|
|
40
|
+
default: "1"
|
|
41
|
+
},
|
|
42
|
+
size: {
|
|
43
|
+
type: "string",
|
|
44
|
+
default: "10"
|
|
45
|
+
},
|
|
46
|
+
"api-base": { type: "string" },
|
|
47
|
+
"auth-base": { type: "string" },
|
|
48
|
+
format: {
|
|
49
|
+
type: "string",
|
|
50
|
+
default: "toon"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
async run({ args }) {
|
|
54
|
+
try {
|
|
55
|
+
writeResult(await xbApiFetch(resolveConfig({
|
|
56
|
+
apiBase: args["api-base"],
|
|
57
|
+
authBase: args["auth-base"]
|
|
58
|
+
}), "POST", "/ai-open/follows/page", {
|
|
59
|
+
headers: tenantProjectHeaders(await requireActiveProject()),
|
|
60
|
+
body: {
|
|
61
|
+
userIds: csvToArray(args["user-ids"])?.map(Number),
|
|
62
|
+
customerIds: csvToArray(args["customer-ids"])?.map(Number),
|
|
63
|
+
fromDate: toLocalDateTime(args.from),
|
|
64
|
+
toDate: toLocalDateTime(args.to),
|
|
65
|
+
page: Number(args.page),
|
|
66
|
+
size: Number(args.size)
|
|
67
|
+
}
|
|
68
|
+
}), args.format);
|
|
69
|
+
} catch (err) {
|
|
70
|
+
writeError(err, args.format);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
//#endregion
|
|
76
|
+
export { list_default as default };
|
|
@@ -3,7 +3,7 @@ import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
|
3
3
|
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
4
|
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
5
|
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
-
import { r as toLocalDateTime } from "./util-
|
|
6
|
+
import { r as toLocalDateTime } from "./util-BuoFIeLS.mjs";
|
|
7
7
|
import { defineCommand } from "citty";
|
|
8
8
|
//#region src/commands/customer/list.ts
|
|
9
9
|
/**
|
|
@@ -3,7 +3,7 @@ import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
|
3
3
|
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
4
|
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
5
|
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
-
import { r as toLocalDateTime, t as csvToArray } from "./util-
|
|
6
|
+
import { r as toLocalDateTime, t as csvToArray } from "./util-BuoFIeLS.mjs";
|
|
7
7
|
import { defineCommand } from "citty";
|
|
8
8
|
//#region src/commands/focus/list.ts
|
|
9
9
|
/**
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-D3sCv6L3.mjs";
|
|
3
|
+
import { n as requireActiveProject } from "./project-store-CudTRvbA.mjs";
|
|
4
|
+
import { t as tenantProjectHeaders } from "./headers-Dy5gROBB.mjs";
|
|
5
|
+
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
6
|
+
import { defineCommand } from "citty";
|
|
7
|
+
//#region src/commands/portrait/list.ts
|
|
8
|
+
/**
|
|
9
|
+
* `xiaobao-cli portrait list` — 画像字段清单(中文名 + 分档枚举)。
|
|
10
|
+
*
|
|
11
|
+
* 返回本项目可用的画像字段(fieldNames + fields[].values 分档),
|
|
12
|
+
* 供 `portrait get <field>` 使用。调 POST /ai-open/portraits/fields。
|
|
13
|
+
*/
|
|
14
|
+
var list_default = defineCommand({
|
|
15
|
+
meta: {
|
|
16
|
+
name: "list",
|
|
17
|
+
description: "画像字段清单(中文名,供 portrait get 使用)"
|
|
18
|
+
},
|
|
19
|
+
args: {
|
|
20
|
+
"api-base": { type: "string" },
|
|
21
|
+
"auth-base": { type: "string" },
|
|
22
|
+
format: {
|
|
23
|
+
type: "string",
|
|
24
|
+
default: "toon"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
async run({ args }) {
|
|
28
|
+
try {
|
|
29
|
+
writeResult(await xbApiFetch(resolveConfig({
|
|
30
|
+
apiBase: args["api-base"],
|
|
31
|
+
authBase: args["auth-base"]
|
|
32
|
+
}), "POST", "/ai-open/portraits/fields", {
|
|
33
|
+
headers: tenantProjectHeaders(await requireActiveProject()),
|
|
34
|
+
body: {}
|
|
35
|
+
}), args.format);
|
|
36
|
+
} catch (err) {
|
|
37
|
+
writeError(err, args.format);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
//#endregion
|
|
43
|
+
export { list_default as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { o as getNow, t as defineDateCommand } from "./shared-CYALikq5.mjs";
|
|
2
|
+
//#region src/commands/date/now.ts
|
|
3
|
+
var now_default = defineDateCommand({
|
|
4
|
+
name: "now",
|
|
5
|
+
description: "当前日期时间(含星期)",
|
|
6
|
+
run: ({ args }) => getNow(args.timezone)
|
|
7
|
+
});
|
|
8
|
+
//#endregion
|
|
9
|
+
export { now_default as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { t as defineBeautxCommand } from "./shared-Bbxvn4ZI.mjs";
|
|
2
|
+
//#region src/commands/beautx/plan.ts
|
|
3
|
+
var plan_default = defineBeautxCommand({
|
|
4
|
+
name: "plan",
|
|
5
|
+
description: "医美变美计划分页(报告分组 sections + 面诊医生/复诊时间等)",
|
|
6
|
+
path: "/ai-open/beautx/plans",
|
|
7
|
+
supportsLatestOnly: true
|
|
8
|
+
});
|
|
9
|
+
//#endregion
|
|
10
|
+
export { plan_default as default };
|