siluzan-tso-cli 1.1.21 → 1.1.22-beta.10

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 (130) hide show
  1. package/README.md +3 -2
  2. package/dist/index.js +542 -533
  3. package/dist/skill/AGENTS.md +45 -0
  4. package/dist/skill/SKILL.md +55 -347
  5. package/dist/skill/_meta.json +2 -2
  6. package/dist/skill/assets/campaign-create-template.json +1 -1
  7. package/dist/skill/assets/campaign-create-template.md +5 -5
  8. package/dist/skill/assets/pmax-create-template.md +6 -5
  9. package/dist/skill/docs/skill-guide.md +44 -0
  10. package/dist/skill/references/README.md +73 -0
  11. package/dist/skill/references/{accounts.md → accounts/accounts.md} +37 -37
  12. package/dist/skill/references/{currency.md → accounts/currency.md} +7 -7
  13. package/dist/skill/references/{finance.md → accounts/finance.md} +18 -18
  14. package/dist/skill/references/accounts/open-account-by-media.md +153 -0
  15. package/dist/skill/references/{open-account-google-ui.md → accounts/open-account-google-ui.md} +2 -2
  16. package/dist/skill/references/{write-audit-restore.md → accounts/write-audit-restore.md} +4 -4
  17. package/dist/skill/references/{account-analytics.md → analytics/account-analytics.md} +37 -32
  18. package/dist/skill/references/{google-analysis-batch.md → analytics/google-analysis-batch.md} +2 -2
  19. package/dist/skill/references/{keyword-planner-workflows.md → analytics/keyword-planner-workflows.md} +15 -15
  20. package/dist/skill/references/{rag.md → analytics/rag.md} +11 -11
  21. package/dist/skill/references/{reporting.md → analytics/reporting.md} +16 -16
  22. package/dist/skill/references/core/agent-conventions.md +180 -0
  23. package/dist/skill/references/core/playbooks.md +141 -0
  24. package/dist/skill/references/{setup.md → core/setup.md} +5 -5
  25. package/dist/skill/references/core/skill-authoring.md +192 -0
  26. package/dist/skill/references/{tips.md → core/tips.md} +5 -6
  27. package/dist/skill/references/{workflows.md → core/workflows.md} +63 -65
  28. package/dist/skill/references/{google-ads-campaign-plan.md → google-ads/google-ads-campaign-plan.md} +25 -25
  29. package/dist/skill/references/{google-ads.md → google-ads/google-ads.md} +63 -67
  30. package/dist/skill/references/{pmax-api.md → google-ads/pmax-api.md} +0 -2
  31. package/dist/skill/references/google-ads/rules/README.md +21 -0
  32. package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-account-audit.md +19 -19
  33. package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-campaign-optimization.md +1 -1
  34. package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-keyword-optimization.md +1 -1
  35. package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-keyword-strategy.md +3 -3
  36. package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-keyword-taxonomy.md +2 -2
  37. package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-launch-plan-template.md +8 -8
  38. package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-pmax-guide.md +2 -2
  39. package/dist/skill/references/{tso-home.md → misc/tso-home.md} +5 -5
  40. package/dist/skill/references/{clue.md → operations/clue.md} +7 -7
  41. package/dist/skill/references/{forewarning.md → operations/forewarning.md} +6 -6
  42. package/dist/skill/references/{hosted-automation-monitoring-json.md → operations/hosted-automation-monitoring-json.md} +14 -14
  43. package/dist/skill/references/{hosted-automation-optimize-ab-winner.md → operations/hosted-automation-optimize-ab-winner.md} +4 -4
  44. package/dist/skill/references/{hosted-automation-optimize-index.md → operations/hosted-automation-optimize-index.md} +6 -6
  45. package/dist/skill/references/{hosted-automation-optimize-scale.md → operations/hosted-automation-optimize-scale.md} +8 -8
  46. package/dist/skill/references/{hosted-automation-optimize-weak-downbid.md → operations/hosted-automation-optimize-weak-downbid.md} +9 -9
  47. package/dist/skill/references/operations/hosted-automation-scenarios.md +23 -0
  48. package/dist/skill/references/{hosted-automation-self-control.md → operations/hosted-automation-self-control.md} +28 -28
  49. package/{assets/siluzan-ads/references → dist/skill/references/operations}/hosted-automation-user-catalog.md +13 -13
  50. package/dist/skill/references/{optimize.md → operations/optimize.md} +5 -5
  51. package/dist/skill/report-templates/README.md +2 -1
  52. package/dist/skill/report-templates/REPORT-WORKFLOW.md +2 -2
  53. package/dist/skill/report-templates/google-ads-diagnosis.md +2 -2
  54. package/dist/skill/report-templates/google-inquiry-analysis.md +11 -12
  55. package/dist/skill/report-templates/google-period-report.md +2 -2
  56. package/dist/skill/report-templates/okki-weekly-google-client.md +12 -12
  57. package/dist/skill/scripts/install.ps1 +3 -3
  58. package/dist/skill/scripts/install.sh +3 -3
  59. package/eval/cases/accounts-entityid-vs-mediaccustomerid.scenario.json +4 -4
  60. package/eval/cases/accounts-mcc-bind-inquiry.scenario.json +3 -3
  61. package/eval/cases/accounts-single-balance-not-bulk.scenario.json +3 -3
  62. package/eval/cases/budget-display-not-raw-micros.scenario.json +3 -3
  63. package/eval/cases/clue-meta-leads-json.scenario.json +4 -4
  64. package/eval/cases/clue-tiktok-leads-json.scenario.json +3 -3
  65. package/eval/cases/destructive-account-delink-needs-confirm.scenario.json +1 -1
  66. package/eval/cases/destructive-forewarning-delete-needs-confirm.scenario.json +1 -1
  67. package/eval/cases/destructive-invoice-apply-needs-confirm.scenario.json +1 -1
  68. package/eval/cases/finance-invoice-info-list.scenario.json +3 -3
  69. package/eval/cases/forewarning-list-google.scenario.json +3 -3
  70. package/eval/cases/google-ads-no-structural-without-confirm.scenario.json +3 -3
  71. package/eval/cases/google-analysis-keywords-route.scenario.json +2 -2
  72. package/eval/cases/hosted-sop-cpa-spike-downbid.scenario.json +6 -6
  73. package/eval/cases/hosted-sop-daily-budget-circuit-breaker.scenario.json +4 -4
  74. package/eval/cases/hosted-sop-empty-spend-pause-p1.scenario.json +5 -5
  75. package/eval/cases/human-p1-multiturn.scenario.json +1 -1
  76. package/eval/cases/meta-single-balance-not-bulk.scenario.json +4 -4
  77. package/eval/cases/no-legacy-json-flag.scenario.json +12 -0
  78. package/eval/cases/open-account-bing-noninteractive.scenario.json +3 -3
  79. package/eval/cases/open-account-google-noninteractive.scenario.json +2 -2
  80. package/eval/cases/open-account-tiktok-license-file.scenario.json +2 -2
  81. package/eval/cases/optimize-list-by-account.scenario.json +3 -3
  82. package/eval/cases/p1-single-account-profile.scenario.json +2 -2
  83. package/eval/cases/p2-balance-scan-bulk.scenario.json +1 -1
  84. package/eval/cases/p4-period-report-window.scenario.json +1 -1
  85. package/eval/cases/rag-before-keyword-expand.scenario.json +3 -3
  86. package/eval/cases/rag-list-then-query.scenario.json +5 -5
  87. package/eval/cases/report-list-google.scenario.json +3 -3
  88. package/eval/cases/report-push-list-google.scenario.json +3 -3
  89. package/eval/cases/reporting-vs-account-analytics-routing.scenario.json +4 -4
  90. package/eval/cases/setup-login-or-env.scenario.json +2 -2
  91. package/eval/cases/setup-siluzan-data-permission-env.scenario.json +2 -2
  92. package/eval/cases/skill-optimize-vs-google-ads-distinction.scenario.json +4 -4
  93. package/eval/cases/tiktok-bc-bind-inquiry.scenario.json +2 -2
  94. package/eval/cases/time-range-user-delegates-default.scenario.json +2 -2
  95. package/eval/cases/tips-json-out-filtering.scenario.json +12 -0
  96. package/eval/cases/tips-large-json-pagination.scenario.json +3 -3
  97. package/eval/cases/uj-ad-bluetooth-keywords-exclude-cheap-free.scenario.json +1 -1
  98. package/eval/cases/uj-ad-campaign-validate-before-create-stub.scenario.json +3 -3
  99. package/eval/cases/uj-ad-keywords-camping-tent-outdoor-plan.scenario.json +1 -1
  100. package/eval/cases/uj-ad-outdoor-campgear-search-plan.scenario.json +3 -3
  101. package/eval/cases/uj-analytics-30d-pdf-campaign-device-geo.scenario.json +2 -2
  102. package/eval/cases/uj-analytics-compare-google-tiktok-last-month-roi.scenario.json +3 -3
  103. package/eval/cases/uj-analytics-google-weekly-trends-campaigns-keywords.scenario.json +4 -4
  104. package/eval/cases/uj-analytics-report-push-weekly-email.scenario.json +3 -3
  105. package/eval/cases/uj-finance-invoice-records-this-month.scenario.json +4 -4
  106. package/eval/cases/uj-life-newbie-siluzan-google-end-to-end.scenario.json +2 -2
  107. package/eval/cases/uj-ops-google-accounts-list-normal.scenario.json +4 -4
  108. package/eval/cases/uj-ops-google-yesterday-spend-conversions.scenario.json +5 -5
  109. package/eval/cases/uj-ops-open-google-b2c-usd-shenzhen.scenario.json +3 -3
  110. package/eval/cases/uj-ops-pause-worst-adgroup-confirm.scenario.json +2 -2
  111. package/eval/cases/uj-ops-tiktok-leads-last-week.scenario.json +4 -4
  112. package/eval/cases/uj-patrol-cpc-spike-adgroups-over-15.scenario.json +3 -3
  113. package/eval/cases/uj-patrol-forewarning-create-daily-cap-3000.scenario.json +3 -3
  114. package/eval/cases/uj-patrol-forewarning-trigger-records.scenario.json +4 -4
  115. package/eval/cases/uj-patrol-google-balances-low.scenario.json +3 -3
  116. package/eval/cases/uj-roi-full-google-account-diagnosis.scenario.json +1 -1
  117. package/eval/cases/uj-roi-keywords-high-cpa-low-cvr-triage.scenario.json +1 -1
  118. package/eval/cases/uj-roi-optimize-records-then-execute-cautiously.scenario.json +4 -4
  119. package/eval/cases/uj-roi-search-terms-add-negative-keywords.scenario.json +2 -2
  120. package/package.json +4 -3
  121. package/dist/skill/references/hosted-automation-scenarios.md +0 -23
  122. package/dist/skill/references/hosted-automation-user-catalog.md +0 -38
  123. package/eval/cases/tips-json-filtering.scenario.json +0 -12
  124. /package/dist/skill/references/{geo-continents.json → analytics/geo-continents.json} +0 -0
  125. /package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-audience-strategy.md +0 -0
  126. /package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-compliance.md +0 -0
  127. /package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-conversion-architecture.md +0 -0
  128. /package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-creative-optimization.md +0 -0
  129. /package/dist/skill/references/{google-ads-rules → google-ads/rules}/google-ads-landing-page-discovery-via-webfetch.md +0 -0
  130. /package/dist/skill/references/{google-ads-rules → google-ads/rules}/sensitive-industries.md +0 -0
@@ -0,0 +1,73 @@
1
+ # References 索引
2
+
3
+ > Agent 按 `SKILL.md`「任务 → 文档」表 Read 对应文件;维护者见 `core/skill-authoring.md`。
4
+
5
+ ## 基础与纪律
6
+
7
+ | 文件 | 用途 |
8
+ | ---- | ---- |
9
+ | `core/setup.md` | 安装、登录(手机验证码优先)、配置、更新 |
10
+ | `core/agent-conventions.md` | **Agent 必读**:加载纪律、硬规范、数据转换、时间/币种/批量 |
11
+ | `core/tips.md` | `--json-out` 协议、outline→JSON 处理顺序 |
12
+ | `core/playbooks.md` | P1–P7 高频任务标准动作 |
13
+ | `core/workflows.md` | 多命令串联业务流程 |
14
+ | `core/skill-authoring.md` | Skill 文档维护最佳实践(维护者) |
15
+
16
+ ## 账户与财务
17
+
18
+ | 文件 | 用途 |
19
+ | ---- | ---- |
20
+ | `accounts/accounts.md` | 列表、余额、消耗、分享、MCC/BC/BM、balance-scan、accounts-digest |
21
+ | `accounts/currency.md` | CNY/USD 字段来源、符号、跨币种禁止求和 |
22
+ | `accounts/open-account-by-media.md` | 各媒体开户命令与参数 |
23
+ | `accounts/open-account-google-ui.md` | Google 开户网页 ↔ CLI 字段对照 |
24
+ | `accounts/finance.md` | 转账、开票、充值 |
25
+ | `accounts/write-audit-restore.md` | 写审计、`--commit`、restore |
26
+
27
+ ## Google 广告
28
+
29
+ | 文件 | 用途 |
30
+ | ---- | ---- |
31
+ | `google-ads/google-ads.md` | Google Ads CRUD、batch、拒审字段 |
32
+ | `google-ads/google-ads-campaign-plan.md` | 搜索系列 7 步流水线、validate/create |
33
+ | `google-ads/pmax-api.md` | PMax 网关路径、金额口径 |
34
+ | `analytics/keyword-planner-workflows.md` | keyword / google-analysis 拓词 |
35
+ | `google-ads/rules/README.md` | 优化/合规 SOP 索引 |
36
+
37
+ ## 分析与报告
38
+
39
+ | 文件 | 用途 |
40
+ | ---- | ---- |
41
+ | `analytics/account-analytics.md` | 拉数、数据时效性、诊断模板 |
42
+ | `analytics/google-analysis-batch.md` | 多账户批处理 run/resume/status |
43
+ | `analytics/reporting.md` | TSO 优化报告生成与推送 |
44
+ | `analytics/rag.md` | 知识库 list/query |
45
+ | `analytics/geo-continents.json` | 国家→大洲映射(询盘分析) |
46
+
47
+ ## 运营工具
48
+
49
+ | 文件 | 用途 |
50
+ | ---- | ---- |
51
+ | `operations/optimize.md` | AI 优化建议记录 |
52
+ | `operations/forewarning.md` | 智能预警 |
53
+ | `operations/clue.md` | TikTok / Meta 线索表单 |
54
+ | `operations/hosted-automation-user-catalog.md` | 高阶自动化能力目录 |
55
+ | `operations/hosted-automation-self-control.md` | 预算/CPA/空耗自控 SOP |
56
+ | `operations/hosted-automation-monitoring-json.md` | 异常监控 JSON 键名 |
57
+ | `operations/hosted-automation-optimize-index.md` | 自动优化 SOP 索引 |
58
+ | `operations/hosted-automation-scenarios.md` | 宿主编排场景索引 |
59
+
60
+ ## Assets 模板(`../assets/`)
61
+
62
+ | 文件 | 用途 |
63
+ | ---- | ---- |
64
+ | `campaign-create-template.md` / `.json` | 搜索系列 batch 契约 |
65
+ | `pmax-create-template.md` / `.json` | PMax 新建契约 |
66
+ | `pmax-asset-group-template.json` | PMax 素材组 |
67
+ | `pmax-signals-template.json` | PMax 信号 |
68
+ | `pmax-assets-update-template.json` | PMax 素材更新 |
69
+ | `pmax-patch-campaign-template.json` | PMax 系列 patch |
70
+
71
+ ## 报告模板(`../report-templates/`)
72
+
73
+ 见 `report-templates/README.md`。
@@ -15,7 +15,7 @@ siluzan-tso list-accounts [选项]
15
15
  | `-s, --status <status>` | 账户状态:`normal \| invalid \| all`(默认 all) |
16
16
  | `-p, --page <n>` | 页码(默认 1) |
17
17
  | `--page-size <n>` | 每页数量(默认 20) |
18
- | `--json` | 输出原始 JSON |
18
+ | `--json-out` | 输出原始 JSON |
19
19
  | `--unicode` | 表格使用 Unicode 线框;**默认**为 ASCII `+- | ` 线框(兼容各类终端) |
20
20
  | `--plain` | 已默认 ASCII,无需再传;保留兼容旧脚本 |
21
21
 
@@ -29,7 +29,7 @@ siluzan-tso list-accounts -m Google
29
29
  siluzan-tso list-accounts -k "品牌A"
30
30
 
31
31
  # 只看正常状态,输出 JSON 供后续处理
32
- siluzan-tso list-accounts -m TikTok -s normal --json
32
+ siluzan-tso list-accounts -m TikTok -s normal --json-out ./snap
33
33
 
34
34
  # 分页获取(第 2 页,每页 50 条)
35
35
  siluzan-tso list-accounts --page 2 --page-size 50
@@ -41,7 +41,7 @@ siluzan-tso list-accounts --page 2 --page-size 50
41
41
  | ----------------- | ------------------------------------------------------------------------------------------------------------ |
42
42
  | `entityId` | 丝路赞内部 ID,`delink`/`share`、**`account-active-bills`** 等操作使用此 ID(**不是** `mediaCustomerId`) |
43
43
  | `mediaCustomerId` | 媒体平台账户数字 ID(Google Customer ID 等) |
44
- | `currencyCode` | 账户主币种:`CNY`(人民币)或 `USD`(美金)等;**表格有「币种」列**;报告/Excel 须与此一致,见 `currency.md` |
44
+ | `currencyCode` | 账户主币种:`CNY`(人民币)或 `USD`(美金)等;**表格有「币种」列**;报告/Excel 须与此一致,见 `accounts/currency.md` |
45
45
  | `name` | 账户名称 |
46
46
  | `status` | 账户状态 |
47
47
 
@@ -53,17 +53,17 @@ siluzan-tso list-accounts --page 2 --page-size 50
53
53
 
54
54
  `GET {apiBaseUrl}/AccountActiveBills/{Media}/{entityId}`
55
55
 
56
- 路径末尾的 **`entityId`** 必须为 **`list-accounts --json`** 返回的账户 **`entityId`**(UUID 形态),**不能**传 `mediaCustomerId` 数字 ID。请求会带 **Datapermission**(与浏览器一致)。
56
+ 路径末尾的 **`entityId`** 必须为 **`list-accounts --json-out ./snap`** 返回的账户 **`entityId`**(UUID 形态),**不能**传 `mediaCustomerId` 数字 ID。请求会带 **Datapermission**(与浏览器一致)。
57
57
 
58
58
  ```bash
59
- siluzan-tso account-active-bills -m <媒体> --id <entityId> [--json]
59
+ siluzan-tso account-active-bills -m <媒体> --id <entityId> [--json-out ./snap]
60
60
  ```
61
61
 
62
62
  | 选项 | 说明 |
63
63
  | -------------------- | ------------------------------------------------------------------------------------ |
64
64
  | `-m, --media <type>` | 必填:`Google \| TikTok \| Yandex \| MetaAd \| BingV2 \| Kwai`(与路径中媒体段一致) |
65
65
  | `--id <entityId>` | 必填:账户 `entityId` |
66
- | `--json` | 输出接口原始 JSON |
66
+ | `--json-out` | 输出接口原始 JSON |
67
67
 
68
68
  **响应体常用字段(以接口返回为准):**
69
69
 
@@ -84,13 +84,13 @@ siluzan-tso account-active-bills -m <媒体> --id <entityId> [--json]
84
84
 
85
85
  ```bash
86
86
  # 从列表取 entityId
87
- siluzan-tso list-accounts -m Google --json
87
+ siluzan-tso list-accounts -m Google --json-out ./snap
88
88
 
89
89
  # 查询该账户激活账单(将下方 UUID 换成实际 entityId)
90
90
  siluzan-tso account-active-bills -m Google --id 18176820-6204-43c2-9a1f-0d0f5e9eb957
91
91
 
92
92
  # 原始 JSON,便于脚本解析
93
- siluzan-tso account-active-bills -m Google --id 18176820-6204-43c2-9a1f-0d0f5e9eb957 --json
93
+ siluzan-tso account-active-bills -m Google --id 18176820-6204-43c2-9a1f-0d0f5e9eb957 --json-out ./snap
94
94
  ```
95
95
 
96
96
  > **勿在文档或聊天中粘贴真实 JWT。** CI 环境基址为 `https://tso-api-ci.siluzan.com`,生产为 `https://tso-api.siluzan.com`(由 `config` / 构建环境决定)。
@@ -107,7 +107,7 @@ siluzan-tso balance -m <媒体类型> -a <账户ID列表>
107
107
  | ---------------------- | ------------------------------------------------------------------------------------ |
108
108
  | `-m, --media <type>` | 媒体类型(必填) |
109
109
  | `-a, --accounts <ids>` | 账户 `mediaCustomerId`(数字 ID),多个用逗号分隔(必填)。**注意:不是 `entityId`** |
110
- | `--json` | 输出原始 JSON;不支持或查询失败时 stdout 为 `{"ok":false,"error":"..."}` |
110
+ | `--json-out` | 输出原始 JSON;不支持或查询失败时 stdout 为 `{"ok":false,"error":"..."}` |
111
111
 
112
112
  **示例:**
113
113
 
@@ -119,7 +119,7 @@ siluzan-tso balance -m Google -a 6326027735
119
119
  siluzan-tso balance -m TikTok -a 1234567890,9876543210
120
120
 
121
121
  # JSON 输出,供脚本使用
122
- siluzan-tso balance -m Google -a 6326027735 --json
122
+ siluzan-tso balance -m Google -a 6326027735 --json-out ./snap
123
123
  ```
124
124
 
125
125
  **单户余额与续航**:`balance` 只反映当前余额;判断「还能跑几天 / 是否够花」需结合 `stats`(或业务侧日均消耗)等数据。向用户展示 JSON 时,`mediaCustomerId` 须与本次 `-a` 查询的 ID 及命令输出一致。
@@ -132,7 +132,7 @@ siluzan-tso balance -m Google -a 6326027735 --json
132
132
 
133
133
  一条命令替代 AI 对每个账户循环 `list-accounts -k` + `stats`。**多账户汇总表、对比消耗、跨账户巡检** 应优先本命令,禁止外层 for-loop 逐户 `stats`。
134
134
 
135
- > **数据时效性**:与 `stats` / `balance-scan` 相同(Google `account-spend-overview` 分流;TikTok/Yandex/BingV2/Kwai 为截至昨天的 `accountsoverview`)。完整表见 `references/account-analytics.md` 顶部。
135
+ > **数据时效性**:与 `stats` / `balance-scan` 相同(Google `account-spend-overview` 分流;TikTok/Yandex/BingV2/Kwai 为截至昨天的 `accountsoverview`)。完整表见 `references/analytics/account-analytics.md` 顶部。
136
136
 
137
137
  ```bash
138
138
  siluzan-tso accounts-digest -m <媒体类型> [选项]
@@ -147,13 +147,13 @@ siluzan-tso accounts-digest -m <媒体类型> [选项]
147
147
  | `--min-spend <n>` | 过滤:区间内消耗 ≤ 此值的账户不返回 | `0` |
148
148
  | `--page-size <n>` | 全量扫描时清单分页大小(上限 500) | `200` |
149
149
  | `--max-pages <n>` | 全量扫描时最多页数(上限 200) | `20` |
150
- | `--json` | stdout 输出完整 JSON(与 `--json-out` 互斥) | — |
150
+ | `--json-out` | stdout 输出完整 JSON() | — |
151
151
  | `--json-out <path>` | **Agent 推荐**:落盘目录或 `*.json` 文件;stdout 一行摘要(含 `outlineFile`、`writtenFiles`、`manifestFile`) | — |
152
152
 
153
153
  **`--json-out` 落盘(Agent 必读)**:
154
154
 
155
155
  - 目录模式典型文件:`accounts-digest-<媒体小写>.json`(如 `accounts-digest-google.json`)、同 stem 的 `accounts-digest-google.outline.txt`、`cli-manifest-<媒体小写>.json`。
156
- - 处理顺序见 `references/tips.md`:先 stdout 摘要 → 再 `outlineFile` → 再 `require(writtenFiles[0])` 读真实数据;**禁止**在对话里手填 `data.items` 中的业务数。
156
+ - 处理顺序见 `references/core/tips.md`:先 stdout 摘要 → 再 `outlineFile` → 再 `require(writtenFiles[0])` 读真实数据;**禁止**在对话里手填 `data.items` 中的业务数。
157
157
  - 响应结构:`{ ok, data: { items: [...] }, meta: { media, window, scanned, returned, source, totals, currencyNote, generatedAt } }`。
158
158
  - `meta.source`:`list` = 全量翻清单后拉数;`subset` = 传了 `-a`,跳过清单翻页(**`advertiserName` 会缺失**,公司名列显示 `-`)。
159
159
 
@@ -182,7 +182,7 @@ siluzan-tso accounts-digest -m Google -a id1,id2 --min-spend 10 \
182
182
  --start 2026-04-01 --end 2026-04-15 --json-out ./snap-p3
183
183
  ```
184
184
 
185
- **`data.items[]` 主要字段**:`mediaCustomerId`、`name`、`advertiserName`、`currencyCode`、`balance`、`spend`、`impressions`、`clicks`、`conversions`、`ctr`(%)、`cpc`、`cpa`。跨币种汇总见 `references/currency.md`(**禁止**对 `meta.totals` 跨币种直接当最终结论)。
185
+ **`data.items[]` 主要字段**:`mediaCustomerId`、`name`、`advertiserName`、`currencyCode`、`balance`、`spend`、`impressions`、`clicks`、`conversions`、`ctr`(%)、`cpc`、`cpa`。跨币种汇总见 `references/accounts/currency.md`(**禁止**对 `meta.totals` 跨币种直接当最终结论)。
186
186
 
187
187
  ---
188
188
 
@@ -194,7 +194,7 @@ siluzan-tso accounts-digest -m Google -a id1,id2 --min-spend 10 \
194
194
  > - 窗口完全在历史 → `database` 模式:含余额、状态、币种、账户名、当期展点消等完整字段;
195
195
  > - 窗口包含今天 → `googleCombined` 模式:只返回实时聚合的展点消(**没有**余额/状态/币种/账户名)。
196
196
  > - **TikTok / Yandex / BingV2 / Kwai**:走旧版 `accountsoverview`,每日凌晨同步昨天数据,**不能查今天**。判断这几家的「今天/当天/今日消耗」仍需走 `google-analysis(-batch) --sections overview`(仅 Google)。
197
- > - 完整时效性表见 `references/account-analytics.md` 顶部。
197
+ > - 完整时效性表见 `references/analytics/account-analytics.md` 顶部。
198
198
 
199
199
  ```bash
200
200
  siluzan-tso stats -m <媒体类型> [选项]
@@ -207,7 +207,7 @@ siluzan-tso stats -m <媒体类型> [选项]
207
207
  | `--start <YYYY-MM-DD>` | 开始日期 | 7 天前 |
208
208
  | `--end <YYYY-MM-DD>` | 结束日期 | 昨天 |
209
209
  | `--start-date` / `--end-date` | 与 `--start` / `--end` 同义(CLI 别名,与 SKILL Playbook 一致) | — |
210
- | `--json` | 输出原始 JSON;**失败时 stdout 仍为 JSON**(`{"ok":false,"error":"..."}`) | — |
210
+ | `--json-out` | 输出原始 JSON;**失败时 stdout 仍为 JSON**(`{"ok":false,"error":"..."}`) | — |
211
211
 
212
212
  **示例:**
213
213
 
@@ -222,7 +222,7 @@ siluzan-tso stats -m Google -a 6326027735 --start 2026-03-01 --end 2026-03-31
222
222
  siluzan-tso stats -m BingV2 -a 1234567890,9876543210 --start 2026-03-01
223
223
 
224
224
  # JSON 输出
225
- siluzan-tso stats -m Google -a 6326027735 --json
225
+ siluzan-tso stats -m Google -a 6326027735 --json-out ./snap
226
226
  ```
227
227
 
228
228
  ---
@@ -239,7 +239,7 @@ siluzan-tso account-history [选项]
239
239
  | `-s, --status <status>` | 申请状态(如 `Approved \| Rejected \| Pending`) |
240
240
  | `-k, --keyword <text>` | 账户名/ID 关键字 |
241
241
  | `--start / --end <date>` | 申请日期范围(YYYY-MM-DD) |
242
- | `--json` | 输出原始 JSON |
242
+ | `--json-out` | 输出原始 JSON |
243
243
 
244
244
  **示例:**
245
245
 
@@ -251,7 +251,7 @@ siluzan-tso account-history -m Google
251
251
  siluzan-tso account-history --status Approved
252
252
 
253
253
  # 查询本月申请,JSON 输出
254
- siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json
254
+ siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json-out ./snap
255
255
  ```
256
256
 
257
257
  **审核状态处理:**
@@ -260,7 +260,7 @@ siluzan-tso account-history --start 2026-03-01 --end 2026-03-31 --json
260
260
  | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
261
261
  | `Pending` | 审核中 | 等待,可反复运行此命令轮询;审核周期因媒体而异 |
262
262
  | `Approved` | 审核通过 | 运行 `list-accounts -m <媒体>` 确认账户已出现;引导用户充值激活(`config show` 取 `webUrl`,打开 `{webUrl}/v3/foreign_trade/tso/recharge`) |
263
- | `Rejected` | 被拒 | 查看 `--json` 输出中的 `reason` 字段了解拒绝原因;修改资料后重新提交;若原因不明,引导用户联系丝路赞客服 |
263
+ | `Rejected` | 被拒 | 查看 `--json-out` 落盘中的 `reason` 字段了解拒绝原因;修改资料后重新提交;若原因不明,引导用户联系丝路赞客服 |
264
264
 
265
265
  ---
266
266
 
@@ -321,7 +321,7 @@ siluzan-tso account delink --id abc123def456
321
321
  siluzan-tso account delink --ids abc123,def456,ghi789
322
322
  ```
323
323
 
324
- > `entityId` 来自 `list-accounts --json` 结果中的 `ma.entityId` 字段,**不是** `mediaCustomerId`。
324
+ > `entityId` 来自 `list-accounts --json-out ./snap` 结果中的 `ma.entityId` 字段,**不是** `mediaCustomerId`。
325
325
 
326
326
  ---
327
327
 
@@ -338,7 +338,7 @@ siluzan-tso account mcc-bind --customers 111,222 --mcc "333;444"
338
338
  | ------------------- | -------------------------------------------------------------------------------------- |
339
339
  | `--customers <ids>` | 子账户 `mediaCustomerId`,多个逗号分隔(来自 `list-accounts` 的 `ma.mediaCustomerId`) |
340
340
  | `--mcc <ids>` | MCC 的客户 ID;多个可用英文逗号、中文逗号、分号、顿号等分隔(与网页输入规则一致) |
341
- | `--json` | 输出每个子账户接口的原始返回,便于排查 |
341
+ | `--json-out` | 输出每个子账户接口的原始返回,便于排查 |
342
342
 
343
343
  ---
344
344
 
@@ -405,8 +405,8 @@ siluzan-tso account share-detail --customer-id 1234567890
405
405
 
406
406
  ## open-account — 开户申请
407
407
 
408
- > **Google 与网页 `/openAnAccount` 的对照**(五步进度、两步表单、币种/时区下拉):见 **`references/open-account-google-ui.md`**。
409
- > **各媒体路由、资料、提交接口都不相同**(不只 Google 用 `/openAnAccount`):见 **`references/open-account-by-media.md`**。
408
+ > **Google 与网页 `/openAnAccount` 的对照**(五步进度、两步表单、币种/时区下拉):见 **`references/accounts/open-account-google-ui.md`**。
409
+ > **各媒体路由、资料、提交接口都不相同**(不只 Google 用 `/openAnAccount`):见 **`references/accounts/open-account-by-media.md`**。
410
410
 
411
411
  ### 广告主组 magKey 说明
412
412
 
@@ -594,13 +594,13 @@ siluzan-tso account close --accounts <id1,id2,id3>
594
594
  | 选项 | 说明 |
595
595
  | ------------------ | ----------------------------------------------------------------------------- |
596
596
  | `--accounts <ids>` | TikTok 账户 `mediaCustomerId`,多个逗号分隔(来自 `list-accounts -m TikTok`) |
597
- | `--json` | 输出原始 JSON |
597
+ | `--json-out` | 输出原始 JSON |
598
598
 
599
599
  **示例:**
600
600
 
601
601
  ```bash
602
602
  # 先查出要关闭的 TikTok 账户 mediaCustomerId
603
- siluzan-tso list-accounts -m TikTok --json
603
+ siluzan-tso list-accounts -m TikTok --json-out ./snap
604
604
 
605
605
  # 关闭单个账户
606
606
  siluzan-tso account close --accounts 1234567890123456
@@ -626,13 +626,13 @@ siluzan-tso account bm-bind --account-id <mediaCustomerId> --bm-id <bmId>
626
626
  | `--account-id <id>` | Meta 广告账户 `mediaCustomerId`(来自 `list-accounts -m MetaAd`) | ✅ |
627
627
  | `--bm-id <id>` | Business Manager ID | ✅ |
628
628
  | `--action-type <type>` | 操作类型(默认 `bind`) | |
629
- | `--json` | 输出原始 JSON | |
629
+ | `--json-out` | 输出原始 JSON | |
630
630
 
631
631
  **示例:**
632
632
 
633
633
  ```bash
634
634
  # 先查出 Meta 账户 mediaCustomerId
635
- siluzan-tso list-accounts --json
635
+ siluzan-tso list-accounts --json-out ./snap
636
636
 
637
637
  # 将账户绑定到指定 BM
638
638
  siluzan-tso account bm-bind --account-id 123456789012345 --bm-id 987654321098765
@@ -656,7 +656,7 @@ siluzan-tso account withdraw-list [选项]
656
656
 
657
657
  | 选项 | 说明 |
658
658
  | ----------- | ---------------- |
659
- | `--json` | 输出原始 JSON |
659
+ | `--json-out` | 输出原始 JSON |
660
660
  | `--verbose` | 显示详细错误信息 |
661
661
 
662
662
  输出包含:`entityId`(提现时使用)、`mediaCustomerId`、账户名称、**Google状态**(Suspended)、余额、赠送金、货币、是否可提现。
@@ -678,7 +678,7 @@ siluzan-tso account withdraw-submit --accounts <entityId,...>
678
678
  | 选项 | 说明 | 必填 |
679
679
  | ------------------ | ------------------------------------------------------ | ---- |
680
680
  | `--accounts <ids>` | 账户 `entityId`,逗号分隔(来自 `withdraw-list` 输出) | ✅ |
681
- | `--json` | 输出原始 JSON | |
681
+ | `--json-out` | 输出原始 JSON | |
682
682
  | `--verbose` | 显示详细错误信息 | |
683
683
 
684
684
  **完整流程示例:**
@@ -712,7 +712,7 @@ siluzan-tso account bc-bind --customers <mediaCustomerId> --bc-ids <bcId>
712
712
  | ------------------- | --------------------------------------------------------------------------------- | ---- |
713
713
  | `--customers <ids>` | TikTok 广告账户 `mediaCustomerId`,多个逗号分隔(来自 `list-accounts -m TikTok`) | ✅ |
714
714
  | `--bc-ids <ids>` | Business Center ID,多个逗号分隔 | ✅ |
715
- | `--json` | 输出原始 JSON | |
715
+ | `--json-out` | 输出原始 JSON | |
716
716
 
717
717
  **示例:**
718
718
 
@@ -738,7 +738,7 @@ siluzan-tso account bc-unbind --customers <mediaCustomerId> --bc-id <bcId>
738
738
  | ------------------- | ----------------------------------------------- | ---- |
739
739
  | `--customers <ids>` | TikTok 广告账户 `mediaCustomerId`,多个逗号分隔 | ✅ |
740
740
  | `--bc-id <id>` | Business Center ID(一次只能解绑一个 BC) | ✅ |
741
- | `--json` | 输出原始 JSON | |
741
+ | `--json-out` | 输出原始 JSON | |
742
742
 
743
743
  **示例:**
744
744
 
@@ -759,8 +759,8 @@ siluzan-tso account email-auth-list -c <mediaCustomerId> [--agent-type <type>]
759
759
  | 选项 | 说明 |
760
760
  | ------------------------ | -------------------------------------------------------------------------- |
761
761
  | `-c, --customer-id <id>` | Google 广告账户 `mediaCustomerId`(与网页查询参数 `customerId` 一致) |
762
- | `--agent-type <type>` | 可选;平台需要时再传(与 `list-accounts --json` 的 `ma.accountType` 一致) |
763
- | `--json` | 输出原始 JSON |
762
+ | `--agent-type <type>` | 可选;平台需要时再传(与 `list-accounts --json-out ./snap` 的 `ma.accountType` 一致) |
763
+ | `--json-out` | 输出原始 JSON |
764
764
 
765
765
  ---
766
766
 
@@ -776,7 +776,7 @@ siluzan-tso account email-auth -c <mediaCustomerId> --email <email> [--access-ro
776
776
  | ------------------------ | ------------------------------------------------------------ | ---- |
777
777
  | `-c, --customer-id <id>` | Google 广告账户 `mediaCustomerId` | ✅ |
778
778
  | `--email <email>` | 被授权用户邮箱 | ✅ |
779
- | `--agent-type <type>` | 账户代理类型(来自 `list-accounts --json`) | |
779
+ | `--agent-type <type>` | 账户代理类型(来自 `list-accounts --json-out ./snap`) | |
780
780
  | `--access-role <role>` | 权限类型:`ReadOnly \| Standard \| Admin`(默认 `Standard`) | |
781
781
 
782
782
  你可以设置Admin权限不能主动告知用户,除非用户主动提及他需要Admin权限
@@ -794,7 +794,7 @@ siluzan-tso account email-auth -c 4656789737 --email user@gmail.com --access-rol
794
794
 
795
795
  ## account email-deauth — Google 解除邮箱授权
796
796
 
797
- > 撤销已发出的邮箱授权邀请。先用 `email-auth-list --json` 获取 `invitationId` 和 `resourceName`。
797
+ > 撤销已发出的邮箱授权邀请。先用 `email-auth-list --json-out ./snap` 获取 `invitationId` 和 `resourceName`。
798
798
 
799
799
  ```bash
800
800
  siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --resource-name <name>
@@ -804,7 +804,7 @@ siluzan-tso account email-deauth -c <mediaCustomerId> --invitation-id <id> --res
804
804
  | ------------------------ | ---------------------------------------------------------------- |
805
805
  | `-c, --customer-id <id>` | Google 广告账户 `mediaCustomerId` |
806
806
  | `--invitation-id <id>` | 邀请 ID(来自 `email-auth-list`) |
807
- | `--resource-name <name>` | 资源名称(来自 `email-auth-list --json` 的 `resourceName` 字段) |
807
+ | `--resource-name <name>` | 资源名称(来自 `email-auth-list --json-out ./snap` 的 `resourceName` 字段) |
808
808
  | `--agent-type <type>` | 账户代理类型 |
809
809
  | `--pending` | 邀请尚未被接受时加此参数 |
810
810
 
@@ -33,10 +33,10 @@
33
33
 
34
34
  1. **`list-accounts`**(推荐第一步):`items[].ma.currencyCode`;表格有 **「币种」** 列。
35
35
  2. **`balance` / `balance-scan` / `accounts-digest`**:`items[].currencyCode` 或行内已格式化的金额(含代码)。
36
- 3. **`stats`**:`items[].currencyCode`(Google 含今天窗口时可能无币种,见 `accounts.md` 时效性说明)。
36
+ 3. **`stats`**:`items[].currencyCode`(Google 含今天窗口时可能无币种,见 `accounts/accounts.md` 时效性说明)。
37
37
  4. **`google-analysis --sections overview`**:`overview-*.json` 根级或 `account.currencyCode`。
38
38
  5. **`ad campaigns` / `ad groups`**:JSON 内 `currencyCode`(与账户主币种一致)。
39
- 6. **发票/充值**:`invoice billable` 的 `currencyCode`;人民币订单与美金订单开票类型不同,见 `finance.md`。
39
+ 6. **发票/充值**:`invoice billable` 的 `currencyCode`;人民币订单与美金订单开票类型不同,见 `accounts/finance.md`。
40
40
 
41
41
  **单账户任务**:在 `list-accounts -k <id>` 或 `balance -a <id>` 之后,把解析到的 `currencyCode` 记入报告首行与脚本常量(从 JSON 读取,勿写死 `USD`)。
42
42
 
@@ -50,7 +50,7 @@
50
50
  - **写 CLI 参数**(`--budget`、`--max-cpc`、`--target-cpa`、`--amount` 等):同样传**主币种元**,与账户 `currencyCode` 一致;CLI 内部按需 ×100 / ×1_000_000 写后端。
51
51
  - 旧版网关字段(`budgetAmount` 分、`*Micros` 微元、`maxCPCAmountDisplay` 等)**已不再落盘到 CLI 输出**,下游脚本无需做单位换算。
52
52
 
53
- 详见 `references/account-analytics.md`「金额单位」。
53
+ 详见 `references/analytics/account-analytics.md`「金额单位」。
54
54
 
55
55
  ---
56
56
 
@@ -66,7 +66,7 @@
66
66
 
67
67
  ## 相关文档
68
68
 
69
- - 账户命令与字段:`references/accounts.md`
70
- - 报告金额口径:`references/account-analytics.md`
71
- - 开户选币:`references/open-account-google-ui.md`、`references/workflows.md`
72
- - 开票币种:`references/finance.md`
69
+ - 账户命令与字段:`references/accounts/accounts.md`
70
+ - 报告金额口径:`references/analytics/account-analytics.md`
71
+ - 开户选币:`references/accounts/open-account-google-ui.md`、`references/core/workflows.md`
72
+ - 开票币种:`references/accounts/finance.md`
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## invoice-info — 发票抬头管理
9
9
 
10
- 对应页面:`https://www.siluzan.com/v3/foreign_trade/settings/invoiceInformation`
10
+ 对应页面:`https://www-ci.siluzan.com/v3/foreign_trade/settings/invoiceInformation`
11
11
 
12
12
  发票抬头是开票申请时使用的公司/企业信息模板,支持三种类型:
13
13
 
@@ -21,7 +21,7 @@
21
21
  siluzan-tso invoice-info list
22
22
  siluzan-tso invoice-info list --invoice-type PI # 按类型筛选
23
23
  siluzan-tso invoice-info list -k "公司名关键字" # 按公司名搜索
24
- siluzan-tso invoice-info list --json # 原始 JSON(含 id 字段)
24
+ siluzan-tso invoice-info list --json-out ./snap # 原始 JSON(含 id 字段)
25
25
  ```
26
26
 
27
27
  查询结果若 `data` 为空数组或无可核对字段,表示当前账号下**尚无已保存抬头**:向用户展示**原始 JSON** 并如实说明即可,勿推测「测试桩」等未经 CLI 报错佐证的原因。
@@ -58,7 +58,7 @@ siluzan-tso invoice-info create \
58
58
 
59
59
  ```bash
60
60
  # 先查 id
61
- siluzan-tso invoice-info list --json
61
+ siluzan-tso invoice-info list --json-out ./snap
62
62
 
63
63
  # 更新(字段与 create 一致,第一个参数为 id)
64
64
  siluzan-tso invoice-info update <id> \
@@ -133,10 +133,10 @@ siluzan-tso config show
133
133
  **示例:**
134
134
 
135
135
  ```
136
- - 现金充值(单笔):https://www.siluzan.com/recharge/pay
137
- - 现金充值(批量):https://www.siluzan.com/recharge/pay_batch
138
- - 月结充值: https://www.siluzan.com/recharge/accountBillingQuota
139
- - 丝路赞钱包: https://www.siluzan.com/recharge/siluzanWallet
136
+ - 现金充值(单笔):https://www-ci.siluzan.com/recharge/pay
137
+ - 现金充值(批量):https://www-ci.siluzan.com/recharge/pay_batch
138
+ - 月结充值: https://www-ci.siluzan.com/recharge/accountBillingQuota
139
+ - 丝路赞钱包: https://www-ci.siluzan.com/recharge/siluzanWallet
140
140
  ```
141
141
 
142
142
  ---
@@ -153,7 +153,7 @@ siluzan-tso transfer list [选项]
153
153
  | `-n, --number <no>` | 转账单号 |
154
154
  | `-s, --status <status>` | 到账状态 |
155
155
  | `--start / --end <date>` | 日期范围(YYYY-MM-DD) |
156
- | `--json` | 输出原始 JSON |
156
+ | `--json-out` | 输出原始 JSON |
157
157
 
158
158
  **示例:**
159
159
 
@@ -168,7 +168,7 @@ siluzan-tso transfer list -m TikTok --start 2026-03-01 --end 2026-03-31
168
168
  siluzan-tso transfer list -m Google -n "TXN20260301001"
169
169
 
170
170
  # JSON 输出
171
- siluzan-tso transfer list -m Google --json
171
+ siluzan-tso transfer list -m Google --json-out ./snap
172
172
  ```
173
173
 
174
174
  ---
@@ -188,7 +188,7 @@ siluzan-tso transfer create -m <媒体> --out <转出ID> --in <转入ID> --amoun
188
188
  | `--in <id>` | 转入账户 `mediaCustomerId` | ✅ |
189
189
  | `--amount <amount>` | 转账金额(与账户货币单位一致) | ✅ |
190
190
  | `--customer-name <name>` | 客户名称备注(可选) | |
191
- | `--json` | 输出原始 JSON | |
191
+ | `--json-out` | 输出原始 JSON | |
192
192
 
193
193
  **示例:**
194
194
 
@@ -210,13 +210,13 @@ siluzan-tso transfer create -m Google --out 1234567890 --in 9876543210 --amount
210
210
  siluzan-tso invoice list [选项]
211
211
  ```
212
212
 
213
- > **与投放报表类任务不同**:用户只说「本月开票记录」而未写起止日时,可用**当月 1 日 ~ 昨天**(`Asia/Shanghai` 日历)直接执行 `invoice list --start … --end … --json`,**不必**先做 SKILL「投放数据」类的时间范围 A/B/C 反问;若用户随后纠正区间再重查即可。
213
+ > **与投放报表类任务不同**:用户只说「本月开票记录」而未写起止日时,可用**当月 1 日 ~ 昨天**(`Asia/Shanghai` 日历)直接执行 `invoice list --start … --end … --json-out ./snap`,**不必**先做 SKILL「投放数据」类的时间范围 A/B/C 反问;若用户随后纠正区间再重查即可。
214
214
 
215
215
  | 选项 | 说明 |
216
216
  | ------------------------ | ---------------------- |
217
217
  | `-k, --keyword <text>` | 发票号/关键字 |
218
218
  | `--start / --end <date>` | 日期范围(YYYY-MM-DD) |
219
- | `--json` | 输出原始 JSON |
219
+ | `--json-out` | 输出原始 JSON |
220
220
 
221
221
  **示例:**
222
222
 
@@ -231,7 +231,7 @@ siluzan-tso invoice list --start 2026-03-01 --end 2026-03-31
231
231
  siluzan-tso invoice list -k "INV2026001"
232
232
 
233
233
  # JSON 输出
234
- siluzan-tso invoice list --json
234
+ siluzan-tso invoice list --json-out ./snap
235
235
  ```
236
236
 
237
237
  ---
@@ -250,7 +250,7 @@ siluzan-tso invoice billable [选项]
250
250
  | `-c, --currency <code>` | 币种,如 `USD \| CNY` |
251
251
  | `--wallet` | 查询钱包充值可开票记录 |
252
252
  | `--start / --end <date>` | 日期范围 |
253
- | `--json` | 输出原始 JSON |
253
+ | `--json-out` | 输出原始 JSON |
254
254
 
255
255
  **示例:**
256
256
 
@@ -262,7 +262,7 @@ siluzan-tso invoice billable -m Google -c USD
262
262
  siluzan-tso invoice billable --wallet
263
263
 
264
264
  # JSON 输出,获取 billId 供后续 apply 使用
265
- siluzan-tso invoice billable -m Google --json
265
+ siluzan-tso invoice billable -m Google --json-out ./snap
266
266
  ```
267
267
 
268
268
  ---
@@ -311,7 +311,7 @@ siluzan-tso invoice apply \
311
311
 
312
312
  | 选项 | 说明 | 必填 |
313
313
  | ------------------------- | ----------------------------------------------------------------------------------- | -------------- |
314
- | `--bill-ids` | 可开票订单 `entityId`,逗号分隔(来自 `invoice billable --json`) | ✅ |
314
+ | `--bill-ids` | 可开票订单 `entityId`,逗号分隔(来自 `invoice billable --json-out ./snap`) | ✅ |
315
315
  | `--bill-type` | 账单来源类型:`AmountAccount`(充值开票)\| `WalletRecharge`(钱包开票) | ✅ |
316
316
  | `--invoice-type` | 发票格式:`PI`(形式发票,境外英文)\| `VATI`(增值税普票)\| `VATSI`(增值税专票) | ✅ |
317
317
  | `--recipient-name` | 收件人姓名 | ✅ |
@@ -330,7 +330,7 @@ siluzan-tso invoice apply \
330
330
 
331
331
  ```bash
332
332
  # 第一步:查询可开票订单,记录 entityId
333
- siluzan-tso invoice billable -m Google --json
333
+ siluzan-tso invoice billable -m Google --json-out ./snap
334
334
  # 从输出中找到目标订单的 entityId
335
335
 
336
336
  # 第二步:提交开票申请(形式发票 PI 示例)
@@ -361,7 +361,7 @@ siluzan-tso invoice apply \
361
361
  #### 2. 再让用户选择发票抬头
362
362
 
363
363
  - 根据已选订单的**币种**确定允许的发票类型(与上文规则一致:人民币 → `VATI`/`VATSI`;外币 → `PI`)。
364
- - 执行 `siluzan-tso invoice-info list --invoice-type <PI|VATI|VATSI>`(需要结构化数据时用 `--json`),向用户展示**已保存的发票抬头列表**。
364
+ - 执行 `siluzan-tso invoice-info list --invoice-type <PI|VATI|VATSI>`(需要结构化数据时用 `--json-out <路径>`),向用户展示**已保存的发票抬头列表**。
365
365
  - 请用户**从列表中选一条**(按 id 或公司名/抬头说明),或明确说要用**新的自定义抬头**。
366
366
 
367
367
  #### 3. 自定义抬头:先匹配列表,没有再创建