cbs-4px-merchant-cli 0.0.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.
Files changed (76) hide show
  1. package/README.4px.md +90 -0
  2. package/README.cainiao.md +90 -0
  3. package/README.md +90 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +247 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/auth.d.ts +3 -0
  8. package/dist/commands/auth.js +39 -0
  9. package/dist/commands/auth.js.map +1 -0
  10. package/dist/commands/claim.d.ts +10 -0
  11. package/dist/commands/claim.js +69 -0
  12. package/dist/commands/claim.js.map +1 -0
  13. package/dist/commands/config.d.ts +3 -0
  14. package/dist/commands/config.js +129 -0
  15. package/dist/commands/config.js.map +1 -0
  16. package/dist/commands/error-handler.d.ts +5 -0
  17. package/dist/commands/error-handler.js +57 -0
  18. package/dist/commands/error-handler.js.map +1 -0
  19. package/dist/commands/label.d.ts +2 -0
  20. package/dist/commands/label.js +54 -0
  21. package/dist/commands/label.js.map +1 -0
  22. package/dist/commands/order.d.ts +2 -0
  23. package/dist/commands/order.js +91 -0
  24. package/dist/commands/order.js.map +1 -0
  25. package/dist/commands/product.d.ts +10 -0
  26. package/dist/commands/product.js +74 -0
  27. package/dist/commands/product.js.map +1 -0
  28. package/dist/commands/track.d.ts +2 -0
  29. package/dist/commands/track.js +54 -0
  30. package/dist/commands/track.js.map +1 -0
  31. package/dist/commands/update.d.ts +27 -0
  32. package/dist/commands/update.js +304 -0
  33. package/dist/commands/update.js.map +1 -0
  34. package/dist/errors.d.ts +31 -0
  35. package/dist/errors.js +58 -0
  36. package/dist/errors.js.map +1 -0
  37. package/dist/generated/site.d.ts +7 -0
  38. package/dist/generated/site.js +9 -0
  39. package/dist/generated/site.js.map +1 -0
  40. package/dist/index.d.ts +2 -0
  41. package/dist/index.js +5 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/services/api-client.d.ts +20 -0
  44. package/dist/services/api-client.js +141 -0
  45. package/dist/services/api-client.js.map +1 -0
  46. package/dist/services/config-manager.d.ts +10 -0
  47. package/dist/services/config-manager.js +49 -0
  48. package/dist/services/config-manager.js.map +1 -0
  49. package/dist/services/install-detector.d.ts +17 -0
  50. package/dist/services/install-detector.js +54 -0
  51. package/dist/services/install-detector.js.map +1 -0
  52. package/dist/services/update-checker.d.ts +56 -0
  53. package/dist/services/update-checker.js +242 -0
  54. package/dist/services/update-checker.js.map +1 -0
  55. package/dist/types/index.d.ts +153 -0
  56. package/dist/types/index.js +3 -0
  57. package/dist/types/index.js.map +1 -0
  58. package/dist/utils/logger.d.ts +15 -0
  59. package/dist/utils/logger.js +47 -0
  60. package/dist/utils/logger.js.map +1 -0
  61. package/dist/utils/output.d.ts +13 -0
  62. package/dist/utils/output.js +19 -0
  63. package/dist/utils/output.js.map +1 -0
  64. package/package.json +54 -0
  65. package/scripts/postinstall.js +184 -0
  66. package/site-meta.json +9 -0
  67. package/skill/SKILL.md +167 -0
  68. package/skill/reference/auth.md +62 -0
  69. package/skill/reference/claim.md +66 -0
  70. package/skill/reference/config.md +71 -0
  71. package/skill/reference/index.md +51 -0
  72. package/skill/reference/label.md +51 -0
  73. package/skill/reference/order.md +68 -0
  74. package/skill/reference/product.md +70 -0
  75. package/skill/reference/track.md +57 -0
  76. package/skill/reference/update.md +102 -0
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Unified output formatting.
3
+ *
4
+ * TTY → default "text" (human-readable, chalk-colored)
5
+ * Pipe → default "json" (machine-parsable)
6
+ *
7
+ * IMPORTANT: printJson writes to stdout — the ONLY function allowed to do so.
8
+ * All other output (progress, warnings, errors) must go to stderr via logger.
9
+ */
10
+ export type OutputFormat = 'text' | 'json';
11
+ export declare function detectOutputFormat(flagValue?: string): OutputFormat;
12
+ /** Write JSON data to stdout. Never use console.log directly for data output. */
13
+ export declare function printJson(data: unknown): void;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Unified output formatting.
3
+ *
4
+ * TTY → default "text" (human-readable, chalk-colored)
5
+ * Pipe → default "json" (machine-parsable)
6
+ *
7
+ * IMPORTANT: printJson writes to stdout — the ONLY function allowed to do so.
8
+ * All other output (progress, warnings, errors) must go to stderr via logger.
9
+ */
10
+ export function detectOutputFormat(flagValue) {
11
+ if (flagValue === 'json' || flagValue === 'text')
12
+ return flagValue;
13
+ return process.stdout.isTTY ? 'text' : 'json';
14
+ }
15
+ /** Write JSON data to stdout. Never use console.log directly for data output. */
16
+ export function printJson(data) {
17
+ process.stdout.write(JSON.stringify(data, null, 2) + '\n');
18
+ }
19
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,UAAU,kBAAkB,CAAC,SAAkB;IACnD,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACnE,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7D,CAAC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "cbs-4px-merchant-cli",
3
+ "version": "0.0.1",
4
+ "description": "Cbs merchant CLI tool",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "bin": {
8
+ "fmc": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "skill/SKILL.md",
13
+ "skill/reference",
14
+ "site-meta.json",
15
+ "scripts/postinstall.js"
16
+ ],
17
+ "scripts": {
18
+ "build": "node scripts/build.js",
19
+ "tsc": "tsc",
20
+ "dev": "tsx src/index.ts",
21
+ "typecheck": "tsc --noEmit",
22
+ "build:4px:test": "SITE=4px ENV=test npm run build",
23
+ "build:4px:pre": "SITE=4px ENV=pre npm run build",
24
+ "build:cainiao:test": "SITE=cainiao ENV=test npm run build",
25
+ "build:cainiao:pre": "SITE=cainiao ENV=pre npm run build",
26
+ "dev:4px:test": "SITE=4px ENV=test npm run build && node scripts/postinstall.js",
27
+ "dev:4px:pre": "SITE=4px ENV=pre npm run build && node scripts/postinstall.js",
28
+ "dev:cainiao:test": "SITE=cainiao ENV=test npm run build && node scripts/postinstall.js",
29
+ "dev:cainiao:pre": "SITE=cainiao ENV=pre npm run build && node scripts/postinstall.js",
30
+ "release": "npm run build && node scripts/publish.js",
31
+ "release:4px": "SITE=4px ENV=prod npm run release",
32
+ "release:cainiao": "SITE=cainiao ENV=prod npm run release",
33
+ "prepublishOnly": "node scripts/guard-publish.js",
34
+ "postinstall": "node scripts/postinstall.js"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public",
38
+ "registry": "https://registry.npmjs.org"
39
+ },
40
+ "dependencies": {
41
+ "axios": "^1.7.0",
42
+ "chalk": "^5.3.0",
43
+ "commander": "^12.0.0",
44
+ "ora": "^9.4.0"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^20.0.0",
48
+ "tsx": "^4.0.0",
49
+ "typescript": "^5.4.0"
50
+ },
51
+ "engines": {
52
+ "node": ">=18.0.0"
53
+ }
54
+ }
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Postinstall script: automatically install SKILL.md to all detected AI coding tools.
5
+ *
6
+ * For each tool whose root dir exists, writes SKILL.md + reference/ to
7
+ * <root>/skills/cbs-merchant-cli/.
8
+ *
9
+ * Inspired by bailian-cli's postinstall approach.
10
+ */
11
+
12
+ import {
13
+ existsSync,
14
+ mkdirSync,
15
+ copyFileSync,
16
+ cpSync,
17
+ openSync,
18
+ writeSync,
19
+ writeFileSync,
20
+ closeSync,
21
+ readFileSync,
22
+ } from 'fs';
23
+ import { join, dirname } from 'path';
24
+ import { homedir } from 'os';
25
+ import { fileURLToPath } from 'url';
26
+ import { execSync } from 'child_process';
27
+
28
+ const __dirname = dirname(fileURLToPath(import.meta.url));
29
+ const skillSource = join(__dirname, '..', 'skill', 'SKILL.md');
30
+ const referenceDirSource = join(__dirname, '..', 'skill', 'reference');
31
+
32
+ if (!existsSync(skillSource)) {
33
+ process.exit(0);
34
+ }
35
+
36
+ // ── Site metadata (generated at build time by scripts/build.js) ──
37
+ // Falls back to safe defaults so a source checkout without a build still runs.
38
+ const siteMeta = (() => {
39
+ const defaults = {
40
+ siteId: '4px',
41
+ env: 'prod',
42
+ baseUrl: 'https://b.4px.com',
43
+ akUrl: 'https://b.4px.com/site/ak-manage',
44
+ packageName: 'cbs-merchant-cli',
45
+ binName: 'mc',
46
+ };
47
+ try {
48
+ const metaPath = join(__dirname, '..', 'site-meta.json');
49
+ const parsed = JSON.parse(readFileSync(metaPath, 'utf-8'));
50
+ return { ...defaults, ...parsed };
51
+ } catch {
52
+ return defaults;
53
+ }
54
+ })();
55
+
56
+ // Skill install dir name derived from package name (e.g. cbs-4px-merchant-cli).
57
+ const skillDirName = siteMeta.packageName.replace(/^@[^/]+\//, '');
58
+
59
+ // Site-specific CLI command name (e.g. fmc / cmc); falls back to mc.
60
+ const bin = siteMeta.binName || 'mc';
61
+
62
+ const home = homedir();
63
+
64
+ const targets = [
65
+ { root: join(home, '.qoder'), label: 'Qoder' },
66
+ { root: join(home, '.claude'), label: 'Claude Code' },
67
+ { root: join(home, '.cline'), label: 'Cline' },
68
+ { root: join(home, '.qwen'), label: 'QwenCode' },
69
+ { root: join(home, '.cursor'), label: 'Cursor' },
70
+ { root: join(home, '.qoderwork'), label: 'QoderWork' },
71
+ { root: join(home, '.codex'), label: 'Codex' },
72
+ { root: join(home, '.kilo'), label: 'Kilo Code' },
73
+ { root: join(home, '.openclaw'), label: 'OpenCLaw' },
74
+ { root: join(home, '.config', 'opencode'), label: 'OpenCode' },
75
+ ];
76
+
77
+ const available = targets.filter(({ root }) => existsSync(root));
78
+
79
+ if (available.length === 0) {
80
+ process.exit(0);
81
+ }
82
+
83
+ // Write to /dev/tty to bypass npm output suppression
84
+ let ttyFd;
85
+ try {
86
+ ttyFd = openSync('/dev/tty', 'w');
87
+ } catch {
88
+ ttyFd = null;
89
+ }
90
+
91
+ function ttyPrint(msg) {
92
+ if (ttyFd != null) {
93
+ writeSync(ttyFd, msg + '\n');
94
+ } else {
95
+ // Fallback for environments without /dev/tty (e.g. Claude Code, CI agents)
96
+ console.log(msg);
97
+ }
98
+ }
99
+
100
+ ttyPrint(
101
+ `\n🚀 Installing BPortal Merchant CLI skill to ${available.length} AI coding tool(s):`,
102
+ );
103
+
104
+ for (const { root, label } of available) {
105
+ try {
106
+ const targetDir = join(root, 'skills', skillDirName);
107
+ mkdirSync(targetDir, { recursive: true });
108
+ copyFileSync(skillSource, join(targetDir, 'SKILL.md'));
109
+ if (existsSync(referenceDirSource)) {
110
+ cpSync(referenceDirSource, join(targetDir, 'reference'), {
111
+ recursive: true,
112
+ });
113
+ }
114
+ // Write version marker for drift detection at CLI runtime
115
+ const pkgJsonPath = join(__dirname, '..', 'package.json');
116
+ let skillVersion = 'unknown';
117
+ try {
118
+ const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
119
+ if (typeof pkg.version === 'string') skillVersion = pkg.version;
120
+ } catch { /* fallback to unknown */ }
121
+ writeFileSync(join(targetDir, '.skill-version'), skillVersion);
122
+ ttyPrint(` ✓ ${label} (v${skillVersion})`);
123
+ } catch {
124
+ // Silent fail — don't block npm install
125
+ }
126
+ }
127
+
128
+ // ── API Key detection ──
129
+ const configPath = join(home, '.bportal', 'config.json');
130
+ let hasApiKey = false;
131
+
132
+ if (process.env.BPORTAL_API_KEY) {
133
+ hasApiKey = true;
134
+ }
135
+ if (!hasApiKey && existsSync(configPath)) {
136
+ try {
137
+ const cfg = JSON.parse(readFileSync(configPath, 'utf-8'));
138
+ if (typeof cfg.apiKey === 'string' && cfg.apiKey.length > 0) hasApiKey = true;
139
+ } catch {
140
+ /* ignore */
141
+ }
142
+ }
143
+
144
+ if (hasApiKey) {
145
+ ttyPrint('');
146
+ ttyPrint('🎯 Try these commands:');
147
+ ttyPrint('');
148
+ ttyPrint(` ${bin} track get <orderNo> 查询物流轨迹`);
149
+ ttyPrint(` ${bin} label get <orderNo> 获取面单 PDF`);
150
+ ttyPrint(` ${bin} order get <orderNo> 查看订单详情`);
151
+ ttyPrint(` ${bin} order get <orderNo> --output json`);
152
+ ttyPrint('');
153
+ } else {
154
+ ttyPrint('');
155
+ ttyPrint('💡 Set up your API Key to get started:');
156
+ ttyPrint('');
157
+ ttyPrint(' 1️⃣ Get an API Key:');
158
+ ttyPrint(` ${siteMeta.akUrl}`);
159
+ ttyPrint('');
160
+ ttyPrint(' 2️⃣ Sign in:');
161
+ ttyPrint(` ${bin} auth login --api-key SK_xxxxx`);
162
+ ttyPrint('');
163
+ ttyPrint(' 3️⃣ Then try:');
164
+ ttyPrint(` ${bin} track get <orderNo>`);
165
+ ttyPrint(` ${bin} order get <orderNo>`);
166
+ ttyPrint('');
167
+ }
168
+
169
+ // ── PATH check ──
170
+ try {
171
+ execSync(`which ${bin}`, { stdio: 'ignore' });
172
+ } catch {
173
+ ttyPrint(`⚠️ Command "${bin}" not found in PATH.`);
174
+ ttyPrint(' Your npm global bin directory may not be on PATH.');
175
+ ttyPrint(' Run `npm config get prefix` and add its `bin/` to your PATH,');
176
+ ttyPrint(' or reinstall with:');
177
+ ttyPrint('');
178
+ ttyPrint(` npm install -g ${siteMeta.packageName}`);
179
+ ttyPrint('');
180
+ }
181
+
182
+ if (ttyFd != null) {
183
+ closeSync(ttyFd);
184
+ }
package/site-meta.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "siteId": "4px",
3
+ "env": "prod",
4
+ "baseUrl": "https://b.4px.com",
5
+ "akUrl": "https://b.4px.com/site/ak-manage",
6
+ "packageName": "cbs-4px-merchant-cli",
7
+ "binName": "fmc",
8
+ "registry": "https://registry.npmjs.org"
9
+ }
package/skill/SKILL.md ADDED
@@ -0,0 +1,167 @@
1
+ ---
2
+ name: cbs-4px-merchant-cli
3
+ description: >-
4
+ BPortal Merchant CLI (`fmc`) — 跨境物流商家命令行工具。
5
+ 支持物流轨迹查询、面单打印、订单详情查询、产品推荐、理赔查询。
6
+ 当用户需要查询物流信息、获取面单、查看订单详情、获取产品推荐报价、查询理赔状态时,使用 `fmc` 命令。
7
+ 完整命令参考: `reference/index.md` + `reference/<group>.md`。
8
+ ---
9
+
10
+ # BPortal Merchant CLI (`fmc`)
11
+
12
+ > 跨境物流商家命令行工具,提供物流轨迹查询、面单打印、订单详情、产品推荐、理赔查询等功能。
13
+
14
+ ## 严格禁止 (NEVER DO)
15
+
16
+ - 不要编造单号、API Key 等标识符,必须从用户输入或命令返回中获取
17
+ - 不要猜测参数值,不确定时先查阅对应 reference 文件或执行 `fmc <command> --help`
18
+ - 参数名不确定时禁止编造 flag,必须先确认
19
+
20
+ ## 核心流程(每次请求必须执行)
21
+
22
+ 1. **意图识别**:将用户请求匹配到下方「意图判断决策树」
23
+ 2. **前置加载**:匹配到命令后,MUST 先 Read 对应的 `reference/<module>.md` 获取详细参数(见下方「前置条件」)
24
+ 3. **认证检查**:需要 API Key 的命令,先确认已配置;未配置时引导用户执行 `fmc auth login`
25
+ 4. **执行命令**:按 reference 中的参数格式和示例执行
26
+ 5. **错误处理**:失败时加 `--verbose` 重试一次;仍失败则报告完整错误信息
27
+
28
+ ## 前置条件 — 执行操作前必读
29
+
30
+ **CRITICAL — 执行对应操作前,MUST 先用 Read 工具读取以下 reference 文件:**
31
+
32
+ | 操作场景 | 必读文件 | 原因 |
33
+ |---------|---------|------|
34
+ | 查询物流轨迹 | [`reference/track.md`](reference/track.md) | 确认参数格式 |
35
+ | 获取面单 | [`reference/label.md`](reference/label.md) | 确认参数格式 |
36
+ | 查看订单详情 | [`reference/order.md`](reference/order.md) | 确认参数和输出字段 |
37
+ | 产品推荐 | [`reference/product.md`](reference/product.md) | 参数多(国家/重量/电池/邮编等),必须确认 |
38
+ | 理赔查询 | [`reference/claim.md`](reference/claim.md) | 参数多(单号/时间/状态/分页),必须确认 |
39
+ | 认证相关 / 首次使用 | [`reference/auth.md`](reference/auth.md) | 了解认证方式和 API Key 获取地址 |
40
+ | 配置管理 | [`reference/config.md`](reference/config.md) | 了解可配置项 |
41
+ | 升级 CLI / skill | [`reference/update.md`](reference/update.md) | 了解升级流程和选项 |
42
+
43
+ **未读对应 reference 就执行命令可能导致参数错误或遗漏关键选项。**
44
+
45
+ ---
46
+
47
+ ## 命令总览
48
+
49
+ | 模块 | 用途 | 参考文件 |
50
+ |------|------|----------|
51
+ | `auth` | 认证管理:配置 API Key、查看认证状态 | [`reference/auth.md`](reference/auth.md) |
52
+ | `config` | 配置管理:查看/设置配置项、导出 tool schema | [`reference/config.md`](reference/config.md) |
53
+ | `track` | 物流轨迹:按单号查询物流全程轨迹 | [`reference/track.md`](reference/track.md) |
54
+ | `label` | 面单打印:获取面单 PDF 链接 | [`reference/label.md`](reference/label.md) |
55
+ | `order` | 订单详情:查看收件人、费用、状态等完整信息 | [`reference/order.md`](reference/order.md) |
56
+ | `product` | 产品推荐:根据目的地/重量等条件获取推荐物流产品及报价 | [`reference/product.md`](reference/product.md) |
57
+ | `claim` | 理赔查询:按单号/时间/状态查询理赔列表 | [`reference/claim.md`](reference/claim.md) |
58
+ | `update` | 升级:检查并升级 CLI 及 skill 到最新版本 | [`reference/update.md`](reference/update.md) |
59
+
60
+ 运行 `fmc <command> --help` 查看命令帮助。
61
+
62
+ ---
63
+
64
+ ## 意图判断决策树
65
+
66
+ 用户提到"包裹到哪了/物流状态/轨迹/在途" → `fmc track get`
67
+ 用户提到"面单/运单/打印/标签/label" → `fmc label get`
68
+ 用户提到"订单详情/收件人/费用明细/订单信息" → `fmc order get`
69
+ 用户提到"推荐产品/选什么物流/报价/寄到XX国" → `fmc product recommend`
70
+ 用户提到"理赔/索赔/赔偿/丢件赔付" → `fmc claim list`
71
+ 用户提到"登录/配置key/认证" → `fmc auth login`
72
+ 用户提到"升级/更新/新版本" → `fmc update`
73
+
74
+ ### 消歧规则
75
+
76
+ | 易混淆场景 | 正确路由 | 不要用 | 理由 |
77
+ |-----------|---------|--------|------|
78
+ | "查一下这个单号" | `track get`(默认) | — | 无额外上下文时默认查轨迹;若用户要费用/收件人则走 `order get` |
79
+ | "这个包裹的详情" | `order get` | `track get` | "详情"含收件人/费用等结构化信息 |
80
+ | "我的包裹丢了" | `claim list` | `track get` | 用户意图是理赔而非查轨迹 |
81
+ | "寄快递/发货选什么" | `product recommend` | — | 发货前选品,需要国家参数 |
82
+ | "运费多少" | `product recommend` | `order get` | 发货前询价用 product;已发货查费用用 order |
83
+
84
+ ---
85
+
86
+ ## Authentication
87
+
88
+ ```bash
89
+ # 配置 API Key(持久化到 ~/.bportal/config.json)
90
+ fmc auth login --api-key SK_xxxxx
91
+
92
+ # 或通过环境变量
93
+ export BPORTAL_API_KEY=SK_xxxxx
94
+ ```
95
+
96
+ 获取 API Key: https://b.4px.com/site/ak-manage
97
+
98
+ ---
99
+
100
+ ## Global flags
101
+
102
+ 所有命令都支持以下全局选项:
103
+
104
+ | Flag | Description |
105
+ | --- | --- |
106
+ | `--output <format>` | 输出格式: text(默认 TTY)/ json(默认管道) |
107
+ | `--verbose` | 打印请求详情(URL、Headers、状态码) |
108
+ | `--dry-run` | 仅打印请求信息,不实际发送 |
109
+ | `--help` | 查看帮助 |
110
+ | `--version` | 打印版本号 |
111
+
112
+ ---
113
+
114
+ ## Quick examples
115
+
116
+ ```bash
117
+ # 查询物流轨迹
118
+ fmc track get FPX12345678
119
+
120
+ # 获取面单 PDF 链接
121
+ fmc label get FPX12345678
122
+
123
+ # 查看订单详情
124
+ fmc order get FPX12345678
125
+
126
+ # 获取推荐产品(寄美国)
127
+ fmc product recommend --country US
128
+
129
+ # 查询理赔列表(按单号)
130
+ fmc claim list --biz-no FPX12345678
131
+
132
+ # JSON 格式输出
133
+ fmc track get FPX12345678 --output json
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Configuration
139
+
140
+ - **配置文件**: `~/.bportal/config.json`
141
+ - **环境变量**: `BPORTAL_API_KEY`, `BPORTAL_BASE_URL`
142
+
143
+ ```bash
144
+ fmc config list
145
+ fmc config set baseUrl https://b.4px.com
146
+ ```
147
+
148
+ ---
149
+
150
+ ## 错误处理
151
+
152
+ 1. 命令失败 → 加 `--verbose` 重试一次查看详细错误
153
+ 2. 认证失败 → 引导用户执行 `fmc auth login --api-key <key>`
154
+ 3. 参数错误 → 读取对应 reference 文件确认正确参数格式
155
+ 4. 仍然失败 → 停止并报告完整错误信息,禁止反复重试
156
+
157
+ ## 详细参考(按需读取)
158
+
159
+ - [`reference/index.md`](reference/index.md) — 命令完整索引、全局选项
160
+ - [`reference/auth.md`](reference/auth.md) — 认证管理详细参数
161
+ - [`reference/config.md`](reference/config.md) — 配置管理详细参数
162
+ - [`reference/track.md`](reference/track.md) — 物流轨迹查询详细参数
163
+ - [`reference/label.md`](reference/label.md) — 面单打印详细参数
164
+ - [`reference/order.md`](reference/order.md) — 订单详情详细参数
165
+ - [`reference/product.md`](reference/product.md) — 产品推荐详细参数
166
+ - [`reference/claim.md`](reference/claim.md) — 理赔查询详细参数
167
+ - [`reference/update.md`](reference/update.md) — CLI / skill 升级详细参数
@@ -0,0 +1,62 @@
1
+ # `fmc auth` commands
2
+
3
+ ## Commands in this group
4
+
5
+ | Command | Description |
6
+ | --- | --- |
7
+ | `fmc auth login` | 配置 API Key |
8
+ | `fmc auth status` | 查看当前认证状态 |
9
+
10
+ ## Command details
11
+
12
+ ### `fmc auth login`
13
+
14
+ | Field | Value |
15
+ | --- | --- |
16
+ | **Name** | `auth login` |
17
+ | **Description** | 配置 API Key,持久化到 ~/.bportal/config.json |
18
+ | **Usage** | `fmc auth login --api-key <key>` |
19
+
20
+ #### Options
21
+
22
+ | Flag | Type | Required | Description |
23
+ | --- | --- | --- | --- |
24
+ | `--api-key <key>` | string | yes | API Key(格式:SK_xxx) |
25
+
26
+ 获取 API Key: https://b.4px.com/site/ak-manage
27
+
28
+ #### Examples
29
+
30
+ ```bash
31
+ fmc auth login --api-key SK_xxxxx
32
+ ```
33
+
34
+ ### `fmc auth status`
35
+
36
+ | Field | Value |
37
+ | --- | --- |
38
+ | **Name** | `auth status` |
39
+ | **Description** | 查看当前认证状态(Key 来源、Base URL) |
40
+ | **Usage** | `fmc auth status` |
41
+
42
+ 支持全局选项: `--output`
43
+
44
+ #### Examples
45
+
46
+ ```bash
47
+ fmc auth status
48
+ ```
49
+
50
+ ```bash
51
+ fmc auth status --output json
52
+ ```
53
+
54
+ #### Output (text mode)
55
+
56
+ ```
57
+ Authentication Status:
58
+ Status: ✔ 已认证
59
+ Source: ~/.bportal/config.json
60
+ Key: SK_1***3456
61
+ Base URL: https://b.4px.com
62
+ ```
@@ -0,0 +1,66 @@
1
+ # `fmc claim` command
2
+
3
+ ## Command details
4
+
5
+ ### `fmc claim list`
6
+
7
+ | Field | Value |
8
+ | --- | --- |
9
+ | **Name** | `claim list` |
10
+ | **Description** | 查询理赔列表 |
11
+ | **Usage** | `fmc claim list [flags]` |
12
+
13
+ 需要 API Key 认证。`--biz-no` 与时间范围至少传一项。
14
+
15
+ #### Options
16
+
17
+ | Flag | Type | Required | Description |
18
+ | --- | --- | --- | --- |
19
+ | `--biz-no <nos>` | string | no | 业务单号,多个用英文逗号分隔 |
20
+ | `--start-time <time>` | string | no | 起始创建时间,格式 yyyy-MM-dd HH:mm:ss |
21
+ | `--end-time <time>` | string | no | 结束创建时间,格式 yyyy-MM-dd HH:mm:ss |
22
+ | `--status <code>` | string | no | 理赔状态:0 全部、1 待处理、2 受理中、3 已解决、4 已退回 |
23
+ | `--page <num>` | number | no | 页码,默认 1 |
24
+ | `--size <num>` | number | no | 每页数量,默认 10,最大 100 |
25
+
26
+ 支持全局选项: `--output`, `--verbose`, `--dry-run`
27
+
28
+ #### Examples
29
+
30
+ ```bash
31
+ fmc claim list --biz-no FPX12345678
32
+ ```
33
+
34
+ ```bash
35
+ fmc claim list --start-time "2024-01-01 00:00:00" --end-time "2024-12-31 23:59:59"
36
+ ```
37
+
38
+ ```bash
39
+ fmc claim list --status 1 --page 1 --size 20
40
+ ```
41
+
42
+ ```bash
43
+ fmc claim list --biz-no FPX111,FPX222 --output json
44
+ ```
45
+
46
+ #### Output (text mode)
47
+
48
+ ```
49
+ 理赔列表
50
+ ──────────────────────────────────────────────────
51
+ 页码 1/1 共 2 条
52
+
53
+ CLM20240115001 受理中
54
+ 业务单号 FPX12345678
55
+ 索赔原因 包裹丢失
56
+ 货值赔偿 150.00 USD
57
+ 最新反馈 正在核实物流信息
58
+ 创建时间 2024-01-15 10:30:00
59
+
60
+ CLM20240110002 已解决
61
+ 业务单号 FPX87654321
62
+ 索赔原因 包裹破损
63
+ 货值赔偿 50.00 USD
64
+ 服务赔偿 20.00 USD
65
+ 创建时间 2024-01-10 08:00:00
66
+ ```
@@ -0,0 +1,71 @@
1
+ # `fmc config` commands
2
+
3
+ ## Commands in this group
4
+
5
+ | Command | Description |
6
+ | --- | --- |
7
+ | `fmc config set` | 设置配置项 |
8
+ | `fmc config list` | 查看当前配置 |
9
+ | `fmc config export-schema` | 导出命令的 JSON tool schema(供 AI Agent 使用) |
10
+
11
+ ## Command details
12
+
13
+ ### `fmc config set`
14
+
15
+ | Field | Value |
16
+ | --- | --- |
17
+ | **Name** | `config set` |
18
+ | **Description** | 设置配置项 |
19
+ | **Usage** | `fmc config set <key> <value>` |
20
+
21
+ #### Options
22
+
23
+ | Flag | Type | Required | Description |
24
+ | --- | --- | --- | --- |
25
+ | `<key>` | string | yes | 配置项名称(可选: baseUrl, apiKey) |
26
+ | `<value>` | string | yes | 配置项值 |
27
+
28
+ #### Examples
29
+
30
+ ```bash
31
+ fmc config set baseUrl https://b.4px.com
32
+ fmc config set apiKey SK_xxxxx
33
+ ```
34
+
35
+ ### `fmc config list`
36
+
37
+ | Field | Value |
38
+ | --- | --- |
39
+ | **Name** | `config list` |
40
+ | **Description** | 查看当前配置 |
41
+ | **Usage** | `fmc config list` |
42
+
43
+ #### Examples
44
+
45
+ ```bash
46
+ fmc config list
47
+ ```
48
+
49
+ ### `fmc config export-schema`
50
+
51
+ | Field | Value |
52
+ | --- | --- |
53
+ | **Name** | `config export-schema` |
54
+ | **Description** | 导出所有(或指定)CLI 命令的 JSON tool schema,兼容 OpenAI / Anthropic 格式 |
55
+ | **Usage** | `fmc config export-schema [--command "<name>"]` |
56
+
57
+ #### Options
58
+
59
+ | Flag | Type | Required | Description |
60
+ | --- | --- | --- | --- |
61
+ | `--command <name>` | string | no | 仅导出指定命令的 schema(如 "track") |
62
+
63
+ #### Examples
64
+
65
+ ```bash
66
+ fmc config export-schema
67
+ ```
68
+
69
+ ```bash
70
+ fmc config export-schema --command "track"
71
+ ```