siluzan-tso-cli 1.1.45-beta.1 → 1.1.45-beta.2
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 +1 -1
- package/dist/index.js +77 -48
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/accounts/accounts-balance-stats.md +3 -3
- package/dist/skill/references/core/playbooks.md +1 -1
- package/dist/skill/references/operations/hosted-automation-monitoring-json.md +1 -1
- package/dist/skill/scripts/install.ps1 +1 -1
- package/dist/skill/scripts/install.sh +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ siluzan-tso init -d /path/to/skills # 写入自定义目录
|
|
|
51
51
|
siluzan-tso init --force # 强制覆盖已存在文件
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
> **注意**:当前为测试版(1.1.45-beta.
|
|
54
|
+
> **注意**:当前为测试版(1.1.45-beta.2),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
55
55
|
|
|
56
56
|
| 助手 | 建议 `--ai` |
|
|
57
57
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -106988,6 +106988,63 @@ function assessBalanceScanDataHealth(input) {
|
|
|
106988
106988
|
return null;
|
|
106989
106989
|
}
|
|
106990
106990
|
|
|
106991
|
+
// src/commands/balance-scan/evaluate.ts
|
|
106992
|
+
function evaluateBalanceScanAccounts(params) {
|
|
106993
|
+
const {
|
|
106994
|
+
items: items2,
|
|
106995
|
+
balanceMap,
|
|
106996
|
+
overviewMap,
|
|
106997
|
+
spendDays,
|
|
106998
|
+
thresholdDays,
|
|
106999
|
+
minBalance,
|
|
107000
|
+
minDailySpend,
|
|
107001
|
+
targetDays,
|
|
107002
|
+
includeInvalidOAuth
|
|
107003
|
+
} = params;
|
|
107004
|
+
const evaluated = [];
|
|
107005
|
+
for (const item of items2) {
|
|
107006
|
+
const ma = item.ma;
|
|
107007
|
+
const id = ma?.mediaCustomerId ? String(ma.mediaCustomerId) : "";
|
|
107008
|
+
if (!id) continue;
|
|
107009
|
+
if (!includeInvalidOAuth && ma.invalidOAuthToken) continue;
|
|
107010
|
+
const bal = balanceMap.get(id);
|
|
107011
|
+
const ov = overviewMap.get(id);
|
|
107012
|
+
const balance = bal?.remainingAccountBudget ?? null;
|
|
107013
|
+
const windowSpend = Number(ov?.spend ?? 0);
|
|
107014
|
+
const dailySpend = windowSpend > 0 ? windowSpend / spendDays : 0;
|
|
107015
|
+
let remainingDays = null;
|
|
107016
|
+
let recommendedTopup = null;
|
|
107017
|
+
if (dailySpend >= minDailySpend && balance !== null) {
|
|
107018
|
+
remainingDays = +(balance / dailySpend).toFixed(1);
|
|
107019
|
+
const needed = dailySpend * targetDays - balance;
|
|
107020
|
+
recommendedTopup = needed > 0 ? +needed.toFixed(2) : 0;
|
|
107021
|
+
}
|
|
107022
|
+
const lowDays = remainingDays !== null && remainingDays <= thresholdDays;
|
|
107023
|
+
const lowBalance = minBalance !== null && balance !== null && balance <= minBalance;
|
|
107024
|
+
const hitReason = lowDays && lowBalance ? "both" : lowDays ? "low-days" : lowBalance ? "low-balance" : "none";
|
|
107025
|
+
evaluated.push({
|
|
107026
|
+
mediaCustomerId: id,
|
|
107027
|
+
name: ma.mediaCustomerName ?? bal?.name ?? ov?.mediaCustomerName ?? null,
|
|
107028
|
+
advertiserName: item.mag?.advertiserName ?? null,
|
|
107029
|
+
currencyCode: bal?.currencyCode ?? ma.currencyCode ?? ov?.currencyCode ?? null,
|
|
107030
|
+
balance,
|
|
107031
|
+
dailySpend: dailySpend > 0 ? +dailySpend.toFixed(2) : null,
|
|
107032
|
+
remainingDays,
|
|
107033
|
+
recommendedTopup,
|
|
107034
|
+
invalidOAuthToken: !!ma.invalidOAuthToken,
|
|
107035
|
+
status: bal?.status ?? bal?.accountStatus ?? ov?.status ?? null,
|
|
107036
|
+
hitReason
|
|
107037
|
+
});
|
|
107038
|
+
}
|
|
107039
|
+
evaluated.sort((a, b) => {
|
|
107040
|
+
const ad = a.remainingDays ?? Number.POSITIVE_INFINITY;
|
|
107041
|
+
const bd = b.remainingDays ?? Number.POSITIVE_INFINITY;
|
|
107042
|
+
return ad - bd;
|
|
107043
|
+
});
|
|
107044
|
+
const hitCount = evaluated.filter((x) => x.hitReason !== "none").length;
|
|
107045
|
+
return { items: evaluated, hitCount };
|
|
107046
|
+
}
|
|
107047
|
+
|
|
106991
107048
|
// src/commands/balance-scan/run.ts
|
|
106992
107049
|
async function runBalanceScan(opts) {
|
|
106993
107050
|
let config = loadConfig(opts.token);
|
|
@@ -107093,48 +107150,19 @@ async function runBalanceScan(opts) {
|
|
|
107093
107150
|
balanceMap = fetched.balanceMap;
|
|
107094
107151
|
overviewMap = fetched.overviewMap;
|
|
107095
107152
|
batchChunkSize = fetched.chunkSize;
|
|
107096
|
-
process.stderr.write(`\u23F3 [balance-scan] \u4F59\u989D\u4E0E\u6D88\u8017\u5DF2\u9F50\uFF0C\u6B63\u5728\
|
|
107153
|
+
process.stderr.write(`\u23F3 [balance-scan] \u4F59\u989D\u4E0E\u6D88\u8017\u5DF2\u9F50\uFF0C\u6B63\u5728\u6C47\u603B\u5168\u90E8\u5DF2\u68C0\u67E5\u8D26\u6237\u2026
|
|
107097
107154
|
`);
|
|
107098
107155
|
}
|
|
107099
|
-
const evaluated =
|
|
107100
|
-
|
|
107101
|
-
|
|
107102
|
-
|
|
107103
|
-
|
|
107104
|
-
|
|
107105
|
-
|
|
107106
|
-
|
|
107107
|
-
|
|
107108
|
-
|
|
107109
|
-
let remainingDays = null;
|
|
107110
|
-
let recommendedTopup = null;
|
|
107111
|
-
if (dailySpend >= minDailySpend && balance !== null) {
|
|
107112
|
-
remainingDays = +(balance / dailySpend).toFixed(1);
|
|
107113
|
-
const needed = dailySpend * targetDays - balance;
|
|
107114
|
-
recommendedTopup = needed > 0 ? +needed.toFixed(2) : 0;
|
|
107115
|
-
}
|
|
107116
|
-
const lowDays = remainingDays !== null && remainingDays <= thresholdDays;
|
|
107117
|
-
const lowBalance = minBalance !== null && balance !== null && balance <= minBalance;
|
|
107118
|
-
if (!lowDays && !lowBalance && !isSubset) continue;
|
|
107119
|
-
const hitReason = lowDays && lowBalance ? "both" : lowDays ? "low-days" : lowBalance ? "low-balance" : "none";
|
|
107120
|
-
evaluated.push({
|
|
107121
|
-
mediaCustomerId: id,
|
|
107122
|
-
name: ma.mediaCustomerName ?? bal?.name ?? ov?.mediaCustomerName ?? null,
|
|
107123
|
-
advertiserName: item.mag?.advertiserName ?? null,
|
|
107124
|
-
currencyCode: bal?.currencyCode ?? ma.currencyCode ?? ov?.currencyCode ?? null,
|
|
107125
|
-
balance,
|
|
107126
|
-
dailySpend: dailySpend > 0 ? +dailySpend.toFixed(2) : null,
|
|
107127
|
-
remainingDays,
|
|
107128
|
-
recommendedTopup,
|
|
107129
|
-
invalidOAuthToken: !!ma.invalidOAuthToken,
|
|
107130
|
-
status: bal?.status ?? bal?.accountStatus ?? ov?.status ?? null,
|
|
107131
|
-
hitReason
|
|
107132
|
-
});
|
|
107133
|
-
}
|
|
107134
|
-
evaluated.sort((a, b) => {
|
|
107135
|
-
const ad = a.remainingDays ?? Number.POSITIVE_INFINITY;
|
|
107136
|
-
const bd = b.remainingDays ?? Number.POSITIVE_INFINITY;
|
|
107137
|
-
return ad - bd;
|
|
107156
|
+
const { items: evaluated, hitCount } = evaluateBalanceScanAccounts({
|
|
107157
|
+
items: allItems,
|
|
107158
|
+
balanceMap,
|
|
107159
|
+
overviewMap,
|
|
107160
|
+
spendDays,
|
|
107161
|
+
thresholdDays,
|
|
107162
|
+
minBalance,
|
|
107163
|
+
minDailySpend,
|
|
107164
|
+
targetDays,
|
|
107165
|
+
includeInvalidOAuth: isSubset
|
|
107138
107166
|
});
|
|
107139
107167
|
const balancesForHealth = validIds.map((id) => balanceMap.get(id)?.remainingAccountBudget);
|
|
107140
107168
|
const dataIssue = assessBalanceScanDataHealth({
|
|
@@ -107148,7 +107176,7 @@ async function runBalanceScan(opts) {
|
|
|
107148
107176
|
scannedAccounts: allItems.length,
|
|
107149
107177
|
validAccounts: validIds.length,
|
|
107150
107178
|
skippedInvalidOAuth: allItems.length - validIds.length,
|
|
107151
|
-
hitCount
|
|
107179
|
+
hitCount,
|
|
107152
107180
|
nullBalanceCount: balancesForHealth.filter((b) => b == null).length,
|
|
107153
107181
|
dataIssue: dataIssue?.code ?? null,
|
|
107154
107182
|
dataIssueMessage: dataIssue?.message ?? null,
|
|
@@ -107188,22 +107216,23 @@ async function runBalanceScan(opts) {
|
|
|
107188
107216
|
if (wroteJson) {
|
|
107189
107217
|
return;
|
|
107190
107218
|
}
|
|
107219
|
+
const thresholdHint = `\u9608\u503C\uFF1A\u7EED\u822A \u2264 ${thresholdDays} \u5929` + (minBalance !== null ? ` \u6216 \u4F59\u989D \u2264 ${minBalance}` : "");
|
|
107191
107220
|
if (isSubset) {
|
|
107192
107221
|
console.log(
|
|
107193
107222
|
`
|
|
107194
107223
|
${media} \u8D26\u6237\u4F59\u989D\u753B\u50CF\uFF08\u5B50\u96C6\u6A21\u5F0F\uFF0C-a \u6307\u5B9A ${filterIds.length} \u4E2A\u8D26\u6237\uFF0C\u5168\u90E8\u5C55\u793A\uFF09
|
|
107195
|
-
\
|
|
107224
|
+
\u5DF2\u68C0\u67E5 ${evaluated.length} \u6237\uFF0C\u5176\u4E2D\u9884\u8B66\u547D\u4E2D ${hitCount} \u4E2A\uFF08${thresholdHint}\uFF09
|
|
107196
107225
|
`
|
|
107197
107226
|
);
|
|
107198
107227
|
} else {
|
|
107199
107228
|
console.log(
|
|
107200
107229
|
`
|
|
107201
|
-
${media} \u8D26\u6237\u4F59\u989D\u626B\u63CF\u5B8C\u6210\uFF1A\u5171\u626B\u63CF ${meta.scannedAccounts} \u4E2A\u8D26\u6237\uFF08\u6709\u6548 ${meta.validAccounts}\uFF09\uFF0C\
|
|
107230
|
+
${media} \u8D26\u6237\u4F59\u989D\u626B\u63CF\u5B8C\u6210\uFF1A\u5171\u626B\u63CF ${meta.scannedAccounts} \u4E2A\u8D26\u6237\uFF08\u6709\u6548 ${meta.validAccounts}\uFF09\uFF0C\u8FD4\u56DE\u5DF2\u68C0\u67E5 ${evaluated.length} \u6237\uFF0C\u5176\u4E2D\u9884\u8B66\u547D\u4E2D ${hitCount} \u4E2A\uFF08${thresholdHint}\uFF09
|
|
107202
107231
|
`
|
|
107203
107232
|
);
|
|
107204
107233
|
}
|
|
107205
107234
|
if (evaluated.length === 0) {
|
|
107206
|
-
console.log(" \u2705 \
|
|
107235
|
+
console.log(" \u2705 \u6CA1\u6709\u53EF\u5C55\u793A\u7684\u5DF2\u68C0\u67E5\u8D26\u6237\uFF08\u6570\u636E\u5DF2\u6B63\u5E38\u8FD4\u56DE\uFF09\u3002\n");
|
|
107207
107236
|
return;
|
|
107208
107237
|
}
|
|
107209
107238
|
const cols = [
|
|
@@ -107217,7 +107246,7 @@ ${media} \u8D26\u6237\u4F59\u989D\u626B\u63CF\u5B8C\u6210\uFF1A\u5171\u626B\u63C
|
|
|
107217
107246
|
{ key: "reason", header: "\u547D\u4E2D\u539F\u56E0" }
|
|
107218
107247
|
];
|
|
107219
107248
|
const reasonText = {
|
|
107220
|
-
none: "\u2014\uFF08\
|
|
107249
|
+
none: "\u2014\uFF08\u672A\u89E6\u9608\u503C\uFF09",
|
|
107221
107250
|
"low-days": `\u7EED\u822A \u2264 ${thresholdDays} \u5929`,
|
|
107222
107251
|
"low-balance": `\u4F59\u989D \u2264 ${minBalance ?? 0}`,
|
|
107223
107252
|
both: `\u7EED\u822A + \u4F59\u989D\u53CC\u4F4E`
|
|
@@ -107235,7 +107264,7 @@ ${media} \u8D26\u6237\u4F59\u989D\u626B\u63CF\u5B8C\u6210\uFF1A\u5171\u626B\u63C
|
|
|
107235
107264
|
printCliTable(rows, cols);
|
|
107236
107265
|
console.log(
|
|
107237
107266
|
`
|
|
107238
|
-
\u63D0\u793A\uFF1A\u4E0A\u8868\u5DF2\u6309\u5269\u4F59\u5929\u6570\u5347\u5E8F\
|
|
107267
|
+
\u63D0\u793A\uFF1A\u4E0A\u8868\u4E3A\u5168\u90E8\u5DF2\u68C0\u67E5\u8D26\u6237\uFF0C\u6309\u5269\u4F59\u5929\u6570\u5347\u5E8F\uFF1B\u9884\u8B66\u770B\u300C\u547D\u4E2D\u539F\u56E0\u300D\u5217\uFF08JSON \u7528 hitReason !== "none"\uFF09\u3002
|
|
107239
107268
|
- \u5982\u9700\u8C03\u6574\u9608\u503C\uFF1A--threshold-days 14 / --min-balance 500
|
|
107240
107269
|
- \u5982\u9700\u8C03\u6574\u65E5\u5747\u56DE\u770B\u5929\u6570\uFF1A--spend-days 3
|
|
107241
107270
|
- \u5982\u9700\u8C03\u6574\u5EFA\u8BAE\u5145\u503C\u76EE\u6807\u7EED\u822A\uFF1A--target-days 60
|
|
@@ -107247,13 +107276,13 @@ ${media} \u8D26\u6237\u4F59\u989D\u626B\u63CF\u5B8C\u6210\uFF1A\u5171\u626B\u63C
|
|
|
107247
107276
|
// src/commands/balance-scan/_register.ts
|
|
107248
107277
|
function register9(program2) {
|
|
107249
107278
|
program2.command("balance-scan").description(
|
|
107250
|
-
"\u4E00\u952E\u626B\u63CF\u67D0\u5A92\u4F53\u4E0B\
|
|
107279
|
+
"\u4E00\u952E\u626B\u63CF\u67D0\u5A92\u4F53\u4E0B\u6709\u6548\u8D26\u6237\u7684\u4F59\u989D\u4E0E\u65E5\u5747\u6D88\u8017\uFF0C\u8FD4\u56DE\u5168\u90E8\u5DF2\u68C0\u67E5\u8D26\u6237\uFF1B\u7528 hitReason \u6807\u8BB0\u7EED\u822A/\u4F59\u989D\u4E0D\u8DB3\u7684\u9884\u8B66\u884C\u3002\u66FF\u4EE3\u5FAA\u73AF\u8C03\u7528 balance \u7684\u4F20\u7EDF\u505A\u6CD5\u3002"
|
|
107251
107280
|
).requiredOption(
|
|
107252
107281
|
"-m, --media <type>",
|
|
107253
107282
|
"\u5A92\u4F53\u7C7B\u578B\uFF1AGoogle | TikTok | Yandex | MetaAd | BingV2 | Kwai"
|
|
107254
107283
|
).option(
|
|
107255
107284
|
"-a, --accounts <ids>",
|
|
107256
|
-
"\u6307\u5B9A mediaCustomerId\uFF08\u9017\u53F7\u5206\u9694\uFF09\uFF1B\u8DF3\u8FC7\u6E05\u5355\u7FFB\u9875\uFF0C\u62C9\
|
|
107285
|
+
"\u6307\u5B9A mediaCustomerId\uFF08\u9017\u53F7\u5206\u9694\uFF09\uFF1B\u8DF3\u8FC7\u6E05\u5355\u7FFB\u9875\uFF0C\u5BF9\u8FD9\u4E9B ID \u62C9\u4F59\u989D+\u6D88\u8017\u540E\u5168\u90E8\u8F93\u51FA"
|
|
107257
107286
|
).option("--threshold-days <n>", "\u5269\u4F59\u7EED\u822A\u5929\u6570\u9608\u503C\uFF08\u9ED8\u8BA4 7\uFF09", (v) => parseFloat(v)).option(
|
|
107258
107287
|
"--spend-days <n>",
|
|
107259
107288
|
"\u65E5\u5747\u6D88\u8017\u56DE\u770B\u81EA\u7136\u65E5\u6570\uFF08\u622A\u81F3\u6628\u5929\u4E0D\u542B\u4ECA\u5929\uFF1B\u9ED8\u8BA4 7\uFF1B\u65E5\u5747=\u7A97\u53E3\u5408\u8BA1/\u5929\u6570\uFF09",
|
package/dist/skill/_meta.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
## balance-scan — 多账户余额续航扫描
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
一键扫描某媒体下**全部有效账户**的余额与日均消耗。`data.items` 返回**所有已检查账户**(不只预警行);用 `hitReason` 标记续航/余额不足。**P2 必用**;**禁止**外层循环逐户 `balance`。
|
|
15
15
|
|
|
16
16
|
> **数据异常(exit 2)**:无账户 / 全部 OAuth 失效 / **余额全为 null** 时 CLI 退出码 **2**,`--json-out` 的 `ok=false` 且 `meta.dataIssue` 为 `no_accounts` | `all_oauth_invalid` | `all_balances_null`。须向用户说明原因,**禁止**当成「无预警命中」。可试 `--refresh-dp` / `login` / `--verbose`。
|
|
17
17
|
|
|
@@ -22,7 +22,7 @@ siluzan-tso balance-scan -m <媒体类型> [选项]
|
|
|
22
22
|
| 选项 | 说明 | 默认 |
|
|
23
23
|
| ------------------------------------- | ------------------------------------------------------------------------------------ | ------------ |
|
|
24
24
|
| `-m, --media <type>` | 必填:`Google \| TikTok \| Yandex \| MetaAd \| BingV2 \| Kwai` | — |
|
|
25
|
-
| `-a, --accounts <ids>` | 指定 `mediaCustomerId
|
|
25
|
+
| `-a, --accounts <ids>` | 指定 `mediaCustomerId`(逗号分隔);**跳过清单翻页**,对这些 ID 拉数后全部输出 | — |
|
|
26
26
|
| `--threshold-days <n>` | 剩余续航天数阈值 | `7` |
|
|
27
27
|
| `--spend-days <n>` | 日均消耗回看自然日数(截至昨天不含今天;日均 = 窗口合计 / N) | `7` |
|
|
28
28
|
| `--min-balance <n>` | 绝对余额阈值(与 threshold 取并集) | — |
|
|
@@ -47,7 +47,7 @@ siluzan-tso balance-scan -m BingV2 -a id1,id2,id3 --json-out ./snap-p2-subset
|
|
|
47
47
|
siluzan-tso balance-scan -m MetaAd --json-out ./snap-p2-meta
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
**读盘要点**:先看 `meta.dataIssue
|
|
50
|
+
**读盘要点**:先看 `meta.dataIssue`(非空则失败)。`data.items` = **全部已检查账户**(OAuth 失效户不在 items,见 `meta.skippedInvalidOAuth`);`meta.hitCount` = 触阈值条数。预警筛 `hitReason !== "none"`;`hitReason="none"` 表示已检查但未触阈值。按 `remainingDays` 升序交付。用 **`dailySpend`** 做日均(口径见 `meta.spendDays` / `meta.spendWindow`),勿把 `stats` 区间合计 `spend` 当「每天消耗」。与 `balance` / `accounts-digest` 分工见 `references/core/agent-conventions.md` §八。
|
|
51
51
|
|
|
52
52
|
---
|
|
53
53
|
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
- **步骤**:
|
|
44
44
|
1. 全量巡检:`balance-scan -m <媒体> --threshold-days 7 --json-out ./snap-p2`(可选 `--min-balance 100` / `--target-days 60`)。
|
|
45
45
|
2. 已知子集:`balance-scan -m <媒体> -a id1,id2,id3 --json-out ./snap-p2-subset`(跳过翻页)。
|
|
46
|
-
-
|
|
46
|
+
- **产物**:`data.items` 为全部已检查账户(按 `remainingDays` 升序);预警筛 `hitReason !== "none"`;`hitReason="none"` 表示未触阈值;消耗过低的僵尸账户 `remainingDays` 为 null、不纳入预警。**禁止**逐账户 `balance`。
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
@@ -25,7 +25,7 @@ siluzan-tso balance-scan -m Google [--threshold-days <n>] [--min-balance <n>] [-
|
|
|
25
25
|
| 近 7 日估算日均消耗 | **`data.items[].dailySpend`** = 近 7 日总消耗 / 7(窗口为 **[T-7, T-1]**,即截至昨天的 7 个自然日,**不含当天**,避免拉到当天未结算数据) |
|
|
26
26
|
| 按余额÷日均估算的续航天数 | **`data.items[].remainingDays`** = `balance / dailySpend`(消耗过低 < `minDailySpend` 时为 `null`) |
|
|
27
27
|
| 建议充值额(按 `meta.thresholds.targetDaysForTopup` 目标) | **`data.items[].recommendedTopup`** |
|
|
28
|
-
| 命中原因(阈值逻辑) | **`data.items[].hitReason`**:`low-days` \| `low-balance` \| `both`
|
|
28
|
+
| 命中原因(阈值逻辑) | **`data.items[].hitReason`**:`low-days` \| `low-balance` \| `both` \| `none`(已检查但未触阈值)。`data.items` 含全部已检查账户;预警筛 `hitReason !== "none"`。`meta.hitCount` 为触阈值条数 |
|
|
29
29
|
| 币种 / 状态 / OAuth | `data.items[].currencyCode`、`data.items[].status`、`data.items[].invalidOAuthToken` |
|
|
30
30
|
| 本轮扫描元数据 | **`meta`**:`scannedAccounts`、`validAccounts`、`hitCount`、`thresholds`(含 `days`、`minBalance`、`minDailySpend`、`targetDaysForTopup`)、`generatedAt` 等 |
|
|
31
31
|
|
|
@@ -9,7 +9,7 @@ $ErrorActionPreference = 'Stop'
|
|
|
9
9
|
# -- Package info (injected at build time) ------------------------------------
|
|
10
10
|
$PKG_NAME = 'siluzan-tso-cli'
|
|
11
11
|
# PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
|
|
12
|
-
$PKG_VERSION = '1.1.45-beta.
|
|
12
|
+
$PKG_VERSION = '1.1.45-beta.2'
|
|
13
13
|
$CLI_BIN = 'siluzan-tso'
|
|
14
14
|
$SKILL_LABEL = 'Siluzan TSO'
|
|
15
15
|
$INSTALL_CMD = 'npm install -g siluzan-tso-cli@beta'
|
|
@@ -9,7 +9,7 @@ set -euo pipefail
|
|
|
9
9
|
# -- Package info (injected at build time) ------------------------------------
|
|
10
10
|
readonly PKG_NAME="siluzan-tso-cli"
|
|
11
11
|
# PKG_VERSION 锁定到与本脚本同批构建产物一致的版本,避免与 dist/skill 错位
|
|
12
|
-
readonly PKG_VERSION="1.1.45-beta.
|
|
12
|
+
readonly PKG_VERSION="1.1.45-beta.2"
|
|
13
13
|
readonly CLI_BIN="siluzan-tso"
|
|
14
14
|
readonly SKILL_LABEL="Siluzan TSO"
|
|
15
15
|
readonly INSTALL_CMD="npm install -g siluzan-tso-cli@beta"
|