@puyinkai/xiaobao-cli 0.5.0 → 0.6.1
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/{admin-BOL_otwc.mjs → admin-CpPlecd5.mjs} +2 -2
- package/dist/analyze-DsiZ9O18.mjs +72 -0
- package/dist/{api-client-D3sCv6L3.mjs → api-client-JrgUZpe8.mjs} +19 -1
- package/dist/{api-BaX_r5S5.mjs → api-nDku2tzx.mjs} +1 -1
- package/dist/{audio-DzcmDYVu.mjs → audio-D-XxOe-n.mjs} +3 -2
- package/dist/{auth-DvvYyJBK.mjs → auth-sQwZSTNA.mjs} +4 -4
- package/dist/beautx-CK9SR4Tg.mjs +16 -0
- package/dist/cli.mjs +20 -13
- package/dist/config-WGgTcEU1.mjs +11 -0
- package/dist/{consultant-Ccnjnhzz.mjs → consultant-aWz8jHvH.mjs} +1 -1
- package/dist/{customer-D_LctjqX.mjs → customer-B410Tvlz.mjs} +1 -1
- package/dist/date-BcQMKhIT.mjs +21 -0
- package/dist/deal-analysis-C3yn-bFg.mjs +10 -0
- package/dist/diff-8I1_L-nU.mjs +21 -0
- package/dist/{doc-CC08fj8m.mjs → doc-CrY6qNkG.mjs} +1 -1
- package/dist/{doc-content-DktnDECM.mjs → doc-content-YKxaMDEp.mjs} +1 -1
- package/dist/{docs-DtQy3Zoc.mjs → docs-BpowF7jz.mjs} +1 -1
- package/dist/fields-iyCGxxkh.mjs +54 -0
- package/dist/{focus-BPPyRCBb.mjs → focus-DFxVA1UZ.mjs} +1 -1
- package/dist/follow-BLq9XK6s.mjs +14 -0
- package/dist/get-Cvl1PgHr.mjs +66 -0
- package/dist/{kb-DpBUFdFV.mjs → kb-B1sxz-PW.mjs} +4 -4
- package/dist/last-7-days-VKMMIzDz.mjs +5 -0
- package/dist/list-B8QkIq76.mjs +76 -0
- package/dist/{list-Ca5Fvq_e.mjs → list-BZVeH1P0.mjs} +2 -2
- package/dist/{list-DPyzRkq4.mjs → list-Bu9oehY8.mjs} +1 -1
- package/dist/{list-DciEIXpx.mjs → list-BvZ0SnDf.mjs} +2 -2
- package/dist/{list-xbJZbyGQ.mjs → list-C3bNdA1t.mjs} +2 -2
- package/dist/{list-CTSX1XuK.mjs → list-CjLiGMIC.mjs} +2 -2
- package/dist/{list-D_8QLOZ1.mjs → list-CtICqXPF.mjs} +2 -2
- package/dist/list-D3P2E5vT.mjs +43 -0
- package/dist/{list-Ikc5mo6a.mjs → list-DqLKhW5s.mjs} +1 -1
- package/dist/now-Ce3ViNOw.mjs +9 -0
- package/dist/plan-DC7ZFHWK.mjs +10 -0
- package/dist/portrait-D6oQPQfC.mjs +14 -0
- package/dist/portrait-tags-DGjYKGDf.mjs +10 -0
- package/dist/{project-CYA9qd8k.mjs → project-UkyNWPm6.mjs} +3 -3
- package/dist/{qa-CDYWW-19.mjs → qa-Dm1X6IoO.mjs} +1 -1
- package/dist/{quantum-Dyhp2Clf.mjs → quantum-DIuY6j7I.mjs} +3 -3
- package/dist/range-CSJiXTp3.mjs +18 -0
- package/dist/{resistance-BhlYgeUx.mjs → resistance-B-v-lfkT.mjs} +1 -1
- package/dist/{sales-report-BIfyfucO.mjs → sales-report-Daps9Vr5.mjs} +1 -1
- package/dist/{search-ChFFOKV4.mjs → search-VsAp96Co.mjs} +2 -2
- package/dist/shared-BEkL4JRB.mjs +11 -0
- package/dist/shared-CYALikq5.mjs +277 -0
- package/dist/shared-DtIllnrz.mjs +92 -0
- package/dist/subtract-B4XTXD_X.mjs +21 -0
- package/dist/{summary-C3poiB2C.mjs → summary-CF2uhuE3.mjs} +2 -2
- package/dist/summary-CgBgJOw2.mjs +65 -0
- package/dist/{text-K7uP8bat.mjs → text-8R0TuzgK.mjs} +1 -1
- 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/{token-usage-y46b3_7C.mjs → token-usage-BvWb3N3J.mjs} +1 -1
- package/dist/tomorrow-BgSEBV69.mjs +9 -0
- package/dist/{visit-qf8Lwf_s.mjs → visit-4xsa_DFD.mjs} +2 -2
- package/dist/visit-evaluate-BvmghATK.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/{login-COK74GKN.mjs → login-Bp2W2Hnj.mjs} +0 -0
- /package/dist/{logout-BQnDwD5-.mjs → logout-BnoEQxKZ.mjs} +0 -0
- /package/dist/{status-DR0tFzju.mjs → status-CrpCtf5U.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 };
|
|
@@ -6,8 +6,8 @@ var admin_default = defineCommand({
|
|
|
6
6
|
description: "super-admin 经营报表:公司经营数据(出库/回款)/ LLM token 用量(独立白名单)"
|
|
7
7
|
},
|
|
8
8
|
subCommands: {
|
|
9
|
-
"sales-report": () => import("./sales-report-
|
|
10
|
-
"token-usage": () => import("./token-usage-
|
|
9
|
+
"sales-report": () => import("./sales-report-Daps9Vr5.mjs").then((m) => m.default),
|
|
10
|
+
"token-usage": () => import("./token-usage-BvWb3N3J.mjs").then((m) => m.default)
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
13
|
//#endregion
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-JrgUZpe8.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 };
|
|
@@ -30,6 +30,24 @@ function buildUrl(apiBase, path, query) {
|
|
|
30
30
|
if (query) for (const [k, v] of Object.entries(query)) url.searchParams.set(k, v);
|
|
31
31
|
return url.toString();
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* fetch with retry on transient network errors (undici "TypeError: fetch
|
|
35
|
+
* failed" — connection reset / unreachable). HTTP error responses and
|
|
36
|
+
* timeouts are NOT retried; backoff 200ms → 400ms → 800ms, max 3 retries.
|
|
37
|
+
*/
|
|
38
|
+
async function fetchWithRetry(url, init) {
|
|
39
|
+
let lastErr;
|
|
40
|
+
for (let attempt = 0; attempt <= 3; attempt++) {
|
|
41
|
+
if (attempt > 0) await new Promise((r) => setTimeout(r, 200 * 2 ** (attempt - 1)));
|
|
42
|
+
try {
|
|
43
|
+
return await fetch(url, init);
|
|
44
|
+
} catch (err) {
|
|
45
|
+
lastErr = err;
|
|
46
|
+
if (!(err instanceof TypeError)) throw err;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw lastErr;
|
|
50
|
+
}
|
|
33
51
|
async function doFetch(url, method, token, opts) {
|
|
34
52
|
const headers = {
|
|
35
53
|
Accept: "application/json",
|
|
@@ -42,7 +60,7 @@ async function doFetch(url, method, token, opts) {
|
|
|
42
60
|
body = JSON.stringify(opts.body);
|
|
43
61
|
if (!headers["Content-Type"]) headers["Content-Type"] = "application/json";
|
|
44
62
|
}
|
|
45
|
-
const resp = await
|
|
63
|
+
const resp = await fetchWithRetry(url, {
|
|
46
64
|
method,
|
|
47
65
|
headers,
|
|
48
66
|
body,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
-
import { t as xbApiFetch } from "./api-client-
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-JrgUZpe8.mjs";
|
|
3
3
|
import { t as loadActiveProject } 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,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-CjLiGMIC.mjs").then((m) => m.default),
|
|
10
|
+
text: () => import("./text-8R0TuzgK.mjs").then((m) => m.default),
|
|
11
|
+
analyze: () => import("./analyze-DsiZ9O18.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-DC7ZFHWK.mjs").then((m) => m.default),
|
|
10
|
+
"deal-analysis": () => import("./deal-analysis-C3yn-bFg.mjs").then((m) => m.default),
|
|
11
|
+
"portrait-tags": () => import("./portrait-tags-DGjYKGDf.mjs").then((m) => m.default),
|
|
12
|
+
"visit-evaluate": () => import("./visit-evaluate-BvmghATK.mjs").then((m) => m.default)
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
//#endregion
|
|
16
|
+
export { beautx_default as default };
|
package/dist/cli.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { setDefaultResultOrder } from "node:dns";
|
|
2
3
|
import { readFileSync } from "node:fs";
|
|
3
4
|
import { dirname, join } from "node:path";
|
|
4
5
|
import { fileURLToPath } from "node:url";
|
|
@@ -11,6 +12,7 @@ import { defineCommand, runMain } from "citty";
|
|
|
11
12
|
* plus visit-summary, knowledge-base and quantum KPI stats — all proxied
|
|
12
13
|
* through ai-open → wang-ai-mcp. See README for the full command map.
|
|
13
14
|
*/
|
|
15
|
+
setDefaultResultOrder("ipv4first");
|
|
14
16
|
const pkgPath = join(dirname(fileURLToPath(import.meta.url)), "..", "package.json");
|
|
15
17
|
runMain(defineCommand({
|
|
16
18
|
meta: {
|
|
@@ -19,19 +21,24 @@ runMain(defineCommand({
|
|
|
19
21
|
description: "旺小宝 CLI — host-agnostic 业务数据 / 问数 / 来访总结 / 知识库 能力 (openclaw-xiaobao plugin 的 CLI 等价物)"
|
|
20
22
|
},
|
|
21
23
|
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-
|
|
33
|
-
|
|
34
|
-
|
|
24
|
+
auth: () => import("./auth-sQwZSTNA.mjs").then((m) => m.default),
|
|
25
|
+
project: () => import("./project-UkyNWPm6.mjs").then((m) => m.default),
|
|
26
|
+
consultant: () => import("./consultant-aWz8jHvH.mjs").then((m) => m.default),
|
|
27
|
+
audio: () => import("./audio-D-XxOe-n.mjs").then((m) => m.default),
|
|
28
|
+
customer: () => import("./customer-B410Tvlz.mjs").then((m) => m.default),
|
|
29
|
+
visit: () => import("./visit-4xsa_DFD.mjs").then((m) => m.default),
|
|
30
|
+
focus: () => import("./focus-DFxVA1UZ.mjs").then((m) => m.default),
|
|
31
|
+
resistance: () => import("./resistance-B-v-lfkT.mjs").then((m) => m.default),
|
|
32
|
+
qa: () => import("./qa-Dm1X6IoO.mjs").then((m) => m.default),
|
|
33
|
+
kb: () => import("./kb-B1sxz-PW.mjs").then((m) => m.default),
|
|
34
|
+
quantum: () => import("./quantum-DIuY6j7I.mjs").then((m) => m.default),
|
|
35
|
+
follow: () => import("./follow-BLq9XK6s.mjs").then((m) => m.default),
|
|
36
|
+
portrait: () => import("./portrait-D6oQPQfC.mjs").then((m) => m.default),
|
|
37
|
+
config: () => import("./config-WGgTcEU1.mjs").then((m) => m.default),
|
|
38
|
+
beautx: () => import("./beautx-CK9SR4Tg.mjs").then((m) => m.default),
|
|
39
|
+
date: () => import("./date-BcQMKhIT.mjs").then((m) => m.default),
|
|
40
|
+
admin: () => import("./admin-CpPlecd5.mjs").then((m) => m.default),
|
|
41
|
+
api: () => import("./api-nDku2tzx.mjs").then((m) => m.default)
|
|
35
42
|
}
|
|
36
43
|
}));
|
|
37
44
|
//#endregion
|
|
@@ -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-iyCGxxkh.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-DqLKhW5s.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-C3bNdA1t.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-DtIllnrz.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 };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
-
import { t as xbApiFetch } from "./api-client-
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-JrgUZpe8.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";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
-
import { t as xbApiFetch } from "./api-client-
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-JrgUZpe8.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";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
-
import { t as xbApiFetch } from "./api-client-
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-JrgUZpe8.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";
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-JrgUZpe8.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-CtICqXPF.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-B8QkIq76.mjs").then((m) => m.default),
|
|
10
|
+
summary: () => import("./summary-CgBgJOw2.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-JrgUZpe8.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-VsAp96Co.mjs").then((m) => m.default),
|
|
10
|
+
docs: () => import("./docs-BpowF7jz.mjs").then((m) => m.default),
|
|
11
|
+
doc: () => import("./doc-CrY6qNkG.mjs").then((m) => m.default),
|
|
12
|
+
"doc-content": () => import("./doc-content-YKxaMDEp.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 };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-JrgUZpe8.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 };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
-
import { t as xbApiFetch } from "./api-client-
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-JrgUZpe8.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
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as resolveConfig } from "./device-flow-j10PFOQL.mjs";
|
|
2
|
-
import { t as xbApiFetch } from "./api-client-
|
|
2
|
+
import { t as xbApiFetch } from "./api-client-JrgUZpe8.mjs";
|
|
3
3
|
import { n as writeResult, t as writeError } from "./format-DfVypHID.mjs";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
//#region src/commands/project/list.ts
|