siluzan-tso-cli 1.1.40-beta.1 → 1.1.40-beta.3
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 +94 -5
- package/dist/skill/SKILL.md +2 -2
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/analytics/website-diagnosis-guide.md +2 -0
- package/dist/skill/references/core/intent-routing.md +10 -7
- package/dist/skill/references/core/playbooks.md +2 -1
- package/dist/skill/references/operations/forewarning.md +2 -0
- package/dist/skill/scripts/install.ps1 +1 -1
- package/dist/skill/scripts/install.sh +1 -1
- package/eval/cases/ir-p8-meets-google-ads-requirements-with-url.scenario.json +39 -0
- 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.40-beta.
|
|
54
|
+
> **注意**:当前为测试版(1.1.40-beta.3),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-tso-cli`。
|
|
55
55
|
|
|
56
56
|
| 助手 | 建议 `--ai` |
|
|
57
57
|
| ----------------------- | ------------------------------------ |
|
package/dist/index.js
CHANGED
|
@@ -2249,6 +2249,60 @@ function buildSiluzanAuthHeaders(config) {
|
|
|
2249
2249
|
const auth = resolveRequestAuth(config);
|
|
2250
2250
|
return auth.apiKey ? { "x-api-key": auth.apiKey } : { Authorization: `Bearer ${auth.authToken}` };
|
|
2251
2251
|
}
|
|
2252
|
+
function configureSiluzanClientIdentity(opts) {
|
|
2253
|
+
_clientProduct = opts.client;
|
|
2254
|
+
_resolveVersion = opts.resolveVersion;
|
|
2255
|
+
}
|
|
2256
|
+
function getSiluzanClientProduct() {
|
|
2257
|
+
return _clientProduct;
|
|
2258
|
+
}
|
|
2259
|
+
function runtimeOverrideFromEnv() {
|
|
2260
|
+
const raw = process.env.SILUZAN_CLIENT_RUNTIME?.trim().toLowerCase();
|
|
2261
|
+
if (raw === "siluzan_agent" || raw === "agent" || raw === "cli") return raw;
|
|
2262
|
+
return void 0;
|
|
2263
|
+
}
|
|
2264
|
+
function envTruthy(name2) {
|
|
2265
|
+
const v = process.env[name2]?.trim().toLowerCase();
|
|
2266
|
+
return v !== void 0 && v !== "" && v !== "0" && v !== "false" && v !== "no" && v !== "off";
|
|
2267
|
+
}
|
|
2268
|
+
function looksLikeThirdPartyAgentEnv() {
|
|
2269
|
+
if (envTruthy("IS_AGENT_ENV") || envTruthy("AI_AGENT")) return true;
|
|
2270
|
+
if (envTruthy("CURSOR_AGENT")) return true;
|
|
2271
|
+
if (process.env.CURSOR_EXTENSION_HOST_ROLE?.trim() === "agent-exec") return true;
|
|
2272
|
+
if (envTruthy("CLAUDECODE") || envTruthy("CLAUDE_CODE")) return true;
|
|
2273
|
+
if (envTruthy("CODEX_SANDBOX") || envTruthy("CODEX_CI") || envTruthy("CODEX_THREAD_ID")) {
|
|
2274
|
+
return true;
|
|
2275
|
+
}
|
|
2276
|
+
if (envTruthy("GEMINI_CLI") || envTruthy("ANTIGRAVITY_AGENT") || envTruthy("AUGMENT_AGENT")) {
|
|
2277
|
+
return true;
|
|
2278
|
+
}
|
|
2279
|
+
if (envTruthy("CLINE_ACTIVE") || envTruthy("GOOSE_TERMINAL") || envTruthy("OPENCLAW")) {
|
|
2280
|
+
return true;
|
|
2281
|
+
}
|
|
2282
|
+
if (envTruthy("COPILOT_ALLOW_ALL") || envTruthy("COPILOT_MODEL")) return true;
|
|
2283
|
+
return false;
|
|
2284
|
+
}
|
|
2285
|
+
function resolveSiluzanClientRuntime() {
|
|
2286
|
+
if (isSiluzanAgentEnv()) return "siluzan_agent";
|
|
2287
|
+
const override = runtimeOverrideFromEnv();
|
|
2288
|
+
if (override) return override;
|
|
2289
|
+
if (looksLikeThirdPartyAgentEnv()) return "agent";
|
|
2290
|
+
return "cli";
|
|
2291
|
+
}
|
|
2292
|
+
function getSiluzanSkillVersion() {
|
|
2293
|
+
return (_resolveVersion?.() ?? "0.0.0").trim() || "0.0.0";
|
|
2294
|
+
}
|
|
2295
|
+
function buildSiluzanClientIdentityHeaders() {
|
|
2296
|
+
const client = getSiluzanClientProduct();
|
|
2297
|
+
const runtime = resolveSiluzanClientRuntime();
|
|
2298
|
+
const version = getSiluzanSkillVersion();
|
|
2299
|
+
return {
|
|
2300
|
+
"X-Siluzan-Client": client,
|
|
2301
|
+
"X-Siluzan-Runtime": runtime,
|
|
2302
|
+
"X-Siluzan-Skill-Version": version,
|
|
2303
|
+
"User-Agent": `${client}/${version}`
|
|
2304
|
+
};
|
|
2305
|
+
}
|
|
2252
2306
|
function isPerfEnabled() {
|
|
2253
2307
|
const v = process.env.SILUZAN_HTTP_PERF;
|
|
2254
2308
|
return v === "1" || v === "true";
|
|
@@ -2270,12 +2324,16 @@ function rawRequest(url, options) {
|
|
|
2270
2324
|
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
2271
2325
|
const maxBytes = options.maxResponseBytes ?? MAX_RESPONSE_BYTES;
|
|
2272
2326
|
const isHttps = parsed.protocol === "https:";
|
|
2327
|
+
const headers = {
|
|
2328
|
+
...buildSiluzanClientIdentityHeaders(),
|
|
2329
|
+
...options.headers
|
|
2330
|
+
};
|
|
2273
2331
|
const reqOpts = {
|
|
2274
2332
|
hostname: parsed.hostname,
|
|
2275
2333
|
port: parsed.port || (isHttps ? 443 : 80),
|
|
2276
2334
|
path: parsed.pathname + parsed.search,
|
|
2277
2335
|
method,
|
|
2278
|
-
headers
|
|
2336
|
+
headers,
|
|
2279
2337
|
timeout: timeoutMs || void 0,
|
|
2280
2338
|
agent: isHttps ? httpsAgent : httpAgent
|
|
2281
2339
|
};
|
|
@@ -2332,10 +2390,10 @@ function rawRequest(url, options) {
|
|
|
2332
2390
|
data += chunk;
|
|
2333
2391
|
});
|
|
2334
2392
|
stream.on("end", () => {
|
|
2335
|
-
const
|
|
2393
|
+
const headers2 = {};
|
|
2336
2394
|
for (const [key, val] of Object.entries(res.headers)) {
|
|
2337
2395
|
if (val !== void 0) {
|
|
2338
|
-
|
|
2396
|
+
headers2[key.toLowerCase()] = Array.isArray(val) ? val[0] : val;
|
|
2339
2397
|
}
|
|
2340
2398
|
}
|
|
2341
2399
|
const status = res.statusCode ?? 0;
|
|
@@ -2349,7 +2407,7 @@ function rawRequest(url, options) {
|
|
|
2349
2407
|
ok: status >= 200 && status < 300
|
|
2350
2408
|
});
|
|
2351
2409
|
}
|
|
2352
|
-
resolve52({ status, text: data, headers });
|
|
2410
|
+
resolve52({ status, text: data, headers: headers2 });
|
|
2353
2411
|
});
|
|
2354
2412
|
});
|
|
2355
2413
|
req.on("timeout", () => {
|
|
@@ -3815,7 +3873,7 @@ async function issueApiKeyWithPhoneCode(opts) {
|
|
|
3815
3873
|
});
|
|
3816
3874
|
return apiKey;
|
|
3817
3875
|
}
|
|
3818
|
-
var import_semver, SILUZAN_DIR, CONFIG_FILE, inProcessLockChain, ALLOWED_HOSTNAME_SUFFIXES, EXACT_ID_FIELD_NAMES, DEFAULT_TIMEOUT_MS, MAX_RESPONSE_BYTES, httpsAgent, httpAgent, PERF_PREFIX, DEFAULT_DETAIL_MAX, VERBOSE_DETAIL_MAX, ASCII_TABLE_CHARS, CLI_SNAPSHOT_MANIFEST_FILE, SCHEMA_VERSION, FALLBACK_FIELD_GUIDE_REFS, _cliPackage, _resolveCliVersion, _fieldGuideRefs, OUTLINE_AGENT_HINT, TS_LIKE_ARRAY_SAMPLE_MAX, MAX_INVOCATION_CHARS, currentInvocation, MAX_COMMIT_CHARS, WRITE_AUDIT_AGENT_AUTO_COMMIT, cliCommitOverride, WRITE_AUDIT_SCHEMA_VERSION, MUTATING, BEIJING_TZ, AUDIT_LOG_FILENAME_RE, DEFAULT_MAX_FILE_MB, MIN_SEGMENT_BYTES, MAX_SEGMENT_BYTES, DEFAULT_RETENTION_DAYS, MIN_RETENTION_DAYS, MAX_RETENTION_DAYS, PRUNE_THROTTLE_MS, lastPruneAtMs, MAX_BODY_CHARS, MAX_ERROR_CHARS, DEFAULT_FIND_AUDIT_MAX_DAYS, MAX_SNAPSHOT_FILE_BYTES, API_KEY_SERVICE_VALUES;
|
|
3876
|
+
var import_semver, SILUZAN_DIR, CONFIG_FILE, inProcessLockChain, ALLOWED_HOSTNAME_SUFFIXES, EXACT_ID_FIELD_NAMES, _clientProduct, _resolveVersion, DEFAULT_TIMEOUT_MS, MAX_RESPONSE_BYTES, httpsAgent, httpAgent, PERF_PREFIX, DEFAULT_DETAIL_MAX, VERBOSE_DETAIL_MAX, ASCII_TABLE_CHARS, CLI_SNAPSHOT_MANIFEST_FILE, SCHEMA_VERSION, FALLBACK_FIELD_GUIDE_REFS, _cliPackage, _resolveCliVersion, _fieldGuideRefs, OUTLINE_AGENT_HINT, TS_LIKE_ARRAY_SAMPLE_MAX, MAX_INVOCATION_CHARS, currentInvocation, MAX_COMMIT_CHARS, WRITE_AUDIT_AGENT_AUTO_COMMIT, cliCommitOverride, WRITE_AUDIT_SCHEMA_VERSION, MUTATING, BEIJING_TZ, AUDIT_LOG_FILENAME_RE, DEFAULT_MAX_FILE_MB, MIN_SEGMENT_BYTES, MAX_SEGMENT_BYTES, DEFAULT_RETENTION_DAYS, MIN_RETENTION_DAYS, MAX_RETENTION_DAYS, PRUNE_THROTTLE_MS, lastPruneAtMs, MAX_BODY_CHARS, MAX_ERROR_CHARS, DEFAULT_FIND_AUDIT_MAX_DAYS, MAX_SNAPSHOT_FILE_BYTES, API_KEY_SERVICE_VALUES;
|
|
3819
3877
|
var init_dist = __esm({
|
|
3820
3878
|
"../common/dist/index.js"() {
|
|
3821
3879
|
"use strict";
|
|
@@ -3861,6 +3919,7 @@ var init_dist = __esm({
|
|
|
3861
3919
|
"lastChangedBy",
|
|
3862
3920
|
"userId"
|
|
3863
3921
|
]);
|
|
3922
|
+
_clientProduct = "siluzan-cli";
|
|
3864
3923
|
DEFAULT_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
3865
3924
|
MAX_RESPONSE_BYTES = 50 * 1024 * 1024;
|
|
3866
3925
|
httpsAgent = new https.Agent({
|
|
@@ -110463,13 +110522,31 @@ function register18(program2) {
|
|
|
110463
110522
|
}
|
|
110464
110523
|
|
|
110465
110524
|
// src/commands/forewarning/_shared.ts
|
|
110525
|
+
init_dist();
|
|
110466
110526
|
var VALID_MEDIA_TYPES7 = ["Google", "TikTok"];
|
|
110527
|
+
function skipForewarningInAgentEnv(commandLabel = "siluzan-tso forewarning") {
|
|
110528
|
+
if (!isSiluzanAgentEnv()) return false;
|
|
110529
|
+
console.log(
|
|
110530
|
+
`
|
|
110531
|
+
\u2139\uFE0F \u68C0\u6D4B\u5230 Siluzan Agent \u73AF\u5883\uFF08IS_SILUZAN_AGENT_ENV=true\uFF09\u3002
|
|
110532
|
+
\`${commandLabel}\` \u5728 Agent \u6C99\u7BB1\u4E2D\u4E0D\u53EF\u7528\uFF0C\u5DF2\u8DF3\u8FC7\uFF08\u4E0D\u6267\u884C\u4EFB\u4F55\u64CD\u4F5C\uFF09\u3002
|
|
110533
|
+
|
|
110534
|
+
\u8BF7\u6539\u4E3A\uFF1A\u521B\u5EFA\u81EA\u52A8\u5316\u4EFB\u52A1\uFF0C\u5728\u4EFB\u52A1\u4E2D\u8C03\u7528 siluzan-tso \u672C Skill
|
|
110535
|
+
\uFF08\u62C9\u6570 / guard / \u5199\u547D\u4EE4\u7B49\uFF09\u5B8C\u6210\u7528\u6237\u7684\u9884\u8B66\u4E0E\u5DE1\u68C0\u9700\u6C42\u3002
|
|
110536
|
+
|
|
110537
|
+
\u5FC5\u8BFB\uFF1Areferences/operations/hosted-automation-user-catalog.md
|
|
110538
|
+
\uFF08\u9884\u7B97\u7194\u65AD / \u5F02\u5E38\u76D1\u63A7 / \u81EA\u52A8\u4F18\u5316\uFF1B\u8868\u5185\u6BCF\u884C\u53EA Read \u4E00\u4E2A SOP\uFF09
|
|
110539
|
+
`
|
|
110540
|
+
);
|
|
110541
|
+
return true;
|
|
110542
|
+
}
|
|
110467
110543
|
|
|
110468
110544
|
// src/commands/forewarning/list.ts
|
|
110469
110545
|
init_auth();
|
|
110470
110546
|
init_cli_json_snapshot();
|
|
110471
110547
|
init_cli_table();
|
|
110472
110548
|
async function runForewarningList(opts) {
|
|
110549
|
+
if (skipForewarningInAgentEnv("siluzan-tso forewarning list")) return;
|
|
110473
110550
|
if (!VALID_MEDIA_TYPES7.includes(opts.media)) {
|
|
110474
110551
|
console.error(
|
|
110475
110552
|
`
|
|
@@ -110552,6 +110629,7 @@ init_auth();
|
|
|
110552
110629
|
init_cli_json_snapshot();
|
|
110553
110630
|
init_cli_table();
|
|
110554
110631
|
async function runForewarningRecords(opts) {
|
|
110632
|
+
if (skipForewarningInAgentEnv("siluzan-tso forewarning records")) return;
|
|
110555
110633
|
if (!VALID_MEDIA_TYPES7.includes(opts.media)) {
|
|
110556
110634
|
console.error(`
|
|
110557
110635
|
\u274C \u4E0D\u652F\u6301\u7684\u5A92\u4F53\u7C7B\u578B\uFF1A${opts.media}
|
|
@@ -110627,6 +110705,7 @@ async function runForewarningRecords(opts) {
|
|
|
110627
110705
|
// src/commands/forewarning/actions.ts
|
|
110628
110706
|
init_auth();
|
|
110629
110707
|
async function runForewarningStart(opts) {
|
|
110708
|
+
if (skipForewarningInAgentEnv("siluzan-tso forewarning start")) return;
|
|
110630
110709
|
const config = loadConfig(opts.token);
|
|
110631
110710
|
const url = `${config.apiBaseUrl}/command/smart-strategy/settings/${opts.media}/${opts.id}/start`;
|
|
110632
110711
|
try {
|
|
@@ -110640,6 +110719,7 @@ async function runForewarningStart(opts) {
|
|
|
110640
110719
|
console.log("\n\u2705 \u9884\u8B66\u89C4\u5219\u5DF2\u542F\u52A8\n");
|
|
110641
110720
|
}
|
|
110642
110721
|
async function runForewarningStop(opts) {
|
|
110722
|
+
if (skipForewarningInAgentEnv("siluzan-tso forewarning stop")) return;
|
|
110643
110723
|
const config = loadConfig(opts.token);
|
|
110644
110724
|
const url = `${config.apiBaseUrl}/command/smart-strategy/settings/${opts.media}/${opts.id}/stop`;
|
|
110645
110725
|
try {
|
|
@@ -110653,6 +110733,7 @@ async function runForewarningStop(opts) {
|
|
|
110653
110733
|
console.log("\n\u2705 \u9884\u8B66\u89C4\u5219\u5DF2\u505C\u6B62\n");
|
|
110654
110734
|
}
|
|
110655
110735
|
async function runForewarningDelete(opts) {
|
|
110736
|
+
if (skipForewarningInAgentEnv("siluzan-tso forewarning delete")) return;
|
|
110656
110737
|
const config = loadConfig(opts.token);
|
|
110657
110738
|
const url = `${config.apiBaseUrl}/command/smart-strategy/settings/${opts.media}/${opts.id}`;
|
|
110658
110739
|
try {
|
|
@@ -110666,6 +110747,7 @@ async function runForewarningDelete(opts) {
|
|
|
110666
110747
|
console.log("\n\u2705 \u9884\u8B66\u89C4\u5219\u5DF2\u5220\u9664\n");
|
|
110667
110748
|
}
|
|
110668
110749
|
async function runForewarningGet(opts) {
|
|
110750
|
+
if (skipForewarningInAgentEnv("siluzan-tso forewarning get")) return;
|
|
110669
110751
|
const config = loadConfig(opts.token);
|
|
110670
110752
|
const url = `${config.apiBaseUrl}/query/smart-strategy/settings/${opts.media}/${opts.id}`;
|
|
110671
110753
|
let data;
|
|
@@ -110689,6 +110771,7 @@ import QRCode from "qrcode";
|
|
|
110689
110771
|
import open2 from "open";
|
|
110690
110772
|
init_cli_table();
|
|
110691
110773
|
async function runForewarningNotifyAccounts(opts) {
|
|
110774
|
+
if (skipForewarningInAgentEnv("siluzan-tso forewarning notify-accounts")) return;
|
|
110692
110775
|
const config = loadConfig(opts.token);
|
|
110693
110776
|
const listUrl = `${config.apiBaseUrl}/query/notice-account/getAccount`;
|
|
110694
110777
|
let accounts;
|
|
@@ -110809,6 +110892,11 @@ function buildRuleBody(opts) {
|
|
|
110809
110892
|
};
|
|
110810
110893
|
}
|
|
110811
110894
|
async function runForewarningCreate(opts) {
|
|
110895
|
+
if (skipForewarningInAgentEnv(
|
|
110896
|
+
opts.id ? "siluzan-tso forewarning update" : "siluzan-tso forewarning create"
|
|
110897
|
+
)) {
|
|
110898
|
+
return;
|
|
110899
|
+
}
|
|
110812
110900
|
if (!VALID_MEDIA_TYPES7.includes(opts.media)) {
|
|
110813
110901
|
console.error(
|
|
110814
110902
|
`
|
|
@@ -133086,6 +133174,7 @@ configureCliJsonSnapshot({
|
|
|
133086
133174
|
"references/accounts/accounts-permissions.md"
|
|
133087
133175
|
]
|
|
133088
133176
|
});
|
|
133177
|
+
configureSiluzanClientIdentity({ client: "tso-cli", resolveVersion: getVersion });
|
|
133089
133178
|
var program = new Command5();
|
|
133090
133179
|
program.name("siluzan-tso").description(
|
|
133091
133180
|
"Siluzan \u5E7F\u544A\u8D26\u6237\u7BA1\u7406\uFF1A\u8D26\u6237\u67E5\u8BE2\u3001\u4F59\u989D\u3001\u6295\u653E\u6570\u636E\u3001\u5F00\u6237\u7533\u8BF7\uFF08Google/TikTok/Yandex/Bing/Kwai\uFF09\u3001\n\u8D26\u53F7\u5206\u4EAB/\u89E3\u7ED1\u3001\u4F18\u5316\u62A5\u544A\u3001Google \u8D26\u6237\u5206\u6790\u7F51\u5173\uFF08google-analysis\uFF09\u3001Google \u5E7F\u544A\u8BCA\u65AD\u62A5\u544A\uFF08google-ads-diagnosis render\uFF09\u3001\u7F51\u7AD9\u8BCA\u65AD\uFF08website-diagnosis\uFF09\u3001\u6218\u7565\u5E02\u573A\u5206\u6790\uFF08market-analysis\uFF0CAgent \u751F\u6210\u62A5\u544A\uFF09\u3001\u5145\u503C\u8F6C\u8D26\u3001\u5F00\u7968\u3001\u667A\u80FD\u9884\u8B66\u3001Google \u5E7F\u544A\u7BA1\u7406\uFF08\u542B\u5F02\u6B65\u6279\u91CF\uFF09\u3002"
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: siluzan-tso
|
|
3
|
-
description: 丝路赞 TSO 广告平台(Google/Bing/Yandex/TikTok/Kwai/MetaAd),凡涉及丝路赞/TSO、投广告、出价预算、广告账户管理,或需要做行业分析/市场分析/行业分析报告(含「写一份 XX 行业报告」「电商/制造/医疗等行业报告」「市场调查/战略市场/KA 市场报告」「竞品/GTM/市场格局/行业趋势」等,无论是否提及丝路赞/广告/客户)须加载本 skill
|
|
3
|
+
description: 丝路赞 TSO 广告平台(Google/Bing/Yandex/TikTok/Kwai/MetaAd),凡涉及丝路赞/TSO、投广告、出价预算、广告账户管理,或需要做行业分析/市场分析/行业分析报告(含「写一份 XX 行业报告」「电商/制造/医疗等行业报告」「市场调查/战略市场/KA 市场报告」「竞品/GTM/市场格局/行业趋势」等,无论是否提及丝路赞/广告/客户)须加载本 skill。【§零·最高优先】网址/域名/官网+诊断/检测/监测/评估/体检/报告/符合投放要求/能不能投(含「网络诊断」混说)→P8 website-diagnosis collect(禁纯WebFetch/肉眼看页),禁止P9/P1/W3、禁止A/B/C/D追问;细则见 intent-routing.md §零。【§零·B·次高优先】未命中§零时,行业/市场分析报告类话术→必走P9 market-analysis collect+render出HTML,禁止纯WebSearch/WebFetch在对话里写Markdown/HTML当终稿、禁止改走P8/P1/P4/W5/google-analysis;细则见 references/core/intent-routing.md §零·B。【§零·C·关键词规划】Google Ads/谷歌广告拓词、关键词规划/推荐、Keyword Planner、长尾关键词、月搜索量/搜索量、竞争度、核心词/种子词扩词(含「阅读网址/文章/页面后针对核心词出带搜索量词表」,无论是否提及丝路赞/TSO/账户)→必走W5 keyword -k … --google-only --json-out,禁止WebSearch/WebFetch编造搜索量当终稿;细则见 references/core/intent-routing.md §零·C。【报告/诊断消歧】其余报告类话术禁止默认某一CLI——行业/市场/战略/行业分析报告→P9 market-analysis(必走collect+render,禁止纯WebSearch代替);Google账户ID+健康诊断→P1 google-ads-diagnosis;账户ID+周期/月度→P4;Meta/TikTok/Bing周期→P4/P4-FB;多账户对比→P3/P5;OKKI周报→P6;Google询盘→P7;官网+明确要搜索广告方案/campaign JSON→W3;仅要词表+搜索量/竞争度→W5;平台优化报告列表/推送→W7;对象仍不清→Read intent-routing.md。【账户】列表/余额/消耗/激活账单(W1)、多账户余额预警 balance-scan(P2)、多户消耗汇总 accounts-digest(P3)、六大媒体开户与进度(W2)、分享/解绑/MCC/BC/BM/权限(W9)。【投放】Google搜索系列方案与 campaign-validate/create(W3)、系列/组/广告/关键词 CRUD/拒审、PMax 创建与素材、AI智投草稿 batch(W4)、拓词 keyword -k(W5)、AI广告优化 optimize(W6)、优化合规 SOP。【财务】充值/钱包、转账记录、发票/开票/抬头(W8);写操作审计与 restore。【运营】智能预警 forewarning 创建/启停/记录(W10)、TikTok/Meta 线索 clue(W11)、日周巡检(W12)、宿主编排/投放自控/异常监控(hosted-automation)。【其他】RAG 知识库检索、Meta/Facebook 周期与诊断 HTML、Google/Meta 周期 Excel、多账户 google-analysis-batch。
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: 需要 Node.js 18+、已安装 siluzan-tso-cli,通过 send-login-code + login 或 config set 完成鉴权
|
|
6
6
|
metadata:
|
|
@@ -90,7 +90,7 @@ siluzan-tso -h
|
|
|
90
90
|
| 多账户 × 多维度批处理 | **P5** | `references/analytics/google-analysis-batch.md` + `references/analytics/account-analytics.md` |
|
|
91
91
|
| OKKI 周报 | **P6** | `report-templates/okki-weekly-google-client.md` |
|
|
92
92
|
| Google 询盘分析(**须 CRM 询盘资料**;口语零询盘/CPA → **P3**) | **P7** | `report-templates/google-inquiry-analysis.md` + `references/analytics/geo-continents.json` |
|
|
93
|
-
| 网址/域名/官网 +
|
|
93
|
+
| 网址/域名/官网 + 诊断·检测·监测·报告 / **是否符合广告投放要求** / 能不能投 | **P8** | `references/core/intent-routing.md` §零 + `references/analytics/website-diagnosis-guide.md` + `assets/website-diagnosis-rules.md`(**必** `website-diagnosis collect`;**≠ P9 ≠ W3**;禁纯 WebFetch) |
|
|
94
94
|
| 市场/行业分析报告 / 战略市场 / KA 市场报告 | **P9** | `references/analytics/market-analysis-guide.md` + `assets/market-analysis-rules.md`(须 collect+render;**≠ P8**) |
|
|
95
95
|
| TSO 平台优化报告:列表/生成/推送 | W7 | `references/analytics/reporting.md` |
|
|
96
96
|
| RAG 知识库检索 | W5 | `references/analytics/rag.md` |
|
package/dist/skill/_meta.json
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
> **CLI 负责拉数**;**6 模块 × 29 子项评分**由 Agent 按规则 + 采集数据生成 JSON。
|
|
5
5
|
> **最终交付**:与线上一致,为**一份可浏览器打开、含 ECharts 图表的单文件 HTML 报告**(雷达图、模块得分条形图、Lighthouse 对比图等)。**用户未指定格式时默认交付 HTML**;Skill/CLI **Agent 只写诊断 JSON,HTML 一律由 `website-diagnosis render` 生成**(禁止 Agent 手写 HTML,禁止仅 Markdown/JSON 充当终稿)。
|
|
6
6
|
|
|
7
|
+
> **硬约束(100% CLI)**:凡 P8(含「诊断网站 / 是否符合广告投放要求 / 能不能投」+ URL),**必须**执行 `siluzan-tso website-diagnosis collect`(及后续 prepare/render)。**禁止**仅用 WebFetch / 浏览器打开官网 / 通用搜索写「是否符合 Google 广告」结论当交付。
|
|
8
|
+
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
## CLI 命令
|
|
@@ -39,13 +39,15 @@
|
|
|
39
39
|
| 报告向 | **报告**、**分析报告**、**诊断报告**、**检测报告**、**监测报告**、**评估报告**、**质量报告** |
|
|
40
40
|
| 网站/网络混用 | **网站诊断**、**网络诊断**、**网站检测**、**网络检测**、**网站监测**、**网络监测**、**网站分析**、**网络分析**、**网站体检**、**网络体检**、**网站评分**、**网络质量** |
|
|
41
41
|
| 落地页 | **落地页诊断**、**落地页检测**、**落地页报告**、**页面质量**、**页面检测** |
|
|
42
|
-
| 投放前 |
|
|
42
|
+
| 投放前 | **能不能投**、**适不适合投广告**、**符合广告投放要求**、**是否符合投放要求**、**符不符合 Google 广告**、**适不适合投 Google 广告**、**网站好不好**、**官网行不行**、Lighthouse、PageSpeed、**速度检测**(**且带网址**) |
|
|
43
43
|
|
|
44
|
-
### 0.3 命中后的 Agent
|
|
44
|
+
### 0.3 命中后的 Agent 行为(强制,100% 走 CLI)
|
|
45
45
|
|
|
46
46
|
1. **直接定工作流 P8** → Read `playbooks.md` P8 + `website-diagnosis-guide.md`。
|
|
47
|
-
2.
|
|
48
|
-
3.
|
|
47
|
+
2. **必走 CLI 闭环**:`siluzan-tso website-diagnosis collect --url <url> --json-out ./snap-web --include-html` → `prepare` → 按 rules 补全 `diagnosis.json` → `website-diagnosis render` 出 HTML。
|
|
48
|
+
3. **有 URL 就开工**:缺 URL 才问一句「请发完整网址」;**禁止**因用户说「网络」而非「网站」改走 P9 或账户诊断。
|
|
49
|
+
4. **提到「Google 广告」仍是 P8**:只要诉求是「能不能投 / 是否符合投放要求 / 适不适合投」而**没有**「生成搜索广告方案 / 关键词表 / campaign JSON」,**禁止**改走 W3,也**禁止**用 WebFetch/WebSearch 肉眼看官网写结论代替 CLI。
|
|
50
|
+
5. **唯一例外(仍不是 P8)**:用户**同时**明确要求 **生成 Google 搜索广告 / 关键词表 / 投放方案 / 广告文案**(W3 强意图)→ 走 **W3**,见 §四。
|
|
49
51
|
|
|
50
52
|
### 0.4 示例(全部 → P8,不再消歧)
|
|
51
53
|
|
|
@@ -56,6 +58,7 @@
|
|
|
56
58
|
| 「这个**官网**做个**检测**」 | **P8**(先追问 URL 若未给出完整链接) |
|
|
57
59
|
| 「**域名** xxx.cn **监测报告**」 | **P8** |
|
|
58
60
|
| 「**落地页** **分析一下**能不能投」 | **P8** |
|
|
61
|
+
| 「请诊断网站 **https://www.siluzan.com** 是否符合 **Google 广告投放要求**」 | **P8**(必 `website-diagnosis`;≠ W3) |
|
|
59
62
|
|
|
60
63
|
---
|
|
61
64
|
|
|
@@ -233,8 +236,8 @@
|
|
|
233
236
|
|
|
234
237
|
| 用户侧重点 | 正确工作流 | 典型错误 |
|
|
235
238
|
| ------------------------------------------------------------------ | --------------- | ------------------------------------- |
|
|
236
|
-
| **有网址** + 诊断/检测/监测/报告(含说「**网络**」) | **P8(§零)** | 误走 P9「行业/网络分析」、P1
|
|
237
|
-
| 「这个**网站**好不好 /
|
|
239
|
+
| **有网址** + 诊断/检测/监测/报告(含说「**网络**」) | **P8(§零)** | 误走 P9「行业/网络分析」、P1 账户诊断;或纯 WebFetch 不跑 CLI |
|
|
240
|
+
| 「这个**网站**好不好 / 能不能投 / **是否符合投放要求**」(无广告方案诉求) | **P8** | 误走 W3(因带「Google 广告」);或 WebFetch 当终稿 |
|
|
238
241
|
| 「**电商/制造**行业怎么样 / 市场格局」(**无 URL**) | **P9** | 误走 P8 |
|
|
239
242
|
| 「根据**官网**做 **Google 搜索广告** / 关键词表」 | **W3**(可无账户先出方案) | 误走 P8;或卡在要账户才出方案 |
|
|
240
243
|
| 「读**网址/文章** + **核心词** + 要 **月搜索量/竞争度** 长尾词表」 | **W5(§零·C)** | 纯 WebSearch 编数;误走 P8/P9/W3 |
|
|
@@ -255,7 +258,7 @@
|
|
|
255
258
|
|
|
256
259
|
| 用户话术(含子串即可) | 工作流 | 备注 |
|
|
257
260
|
| ----------------------------------------------------------------------------------------------------------------- | --------------- | ---------------------------------------------- |
|
|
258
|
-
| **网址 / URL / 域名 / 官网 / 落地页** + **诊断 / 检测 / 监测 / 评估 / 体检 /
|
|
261
|
+
| **网址 / URL / 域名 / 官网 / 落地页** + **诊断 / 检测 / 监测 / 评估 / 体检 / 报告 / 符合投放要求 / 能不能投**(含「网络诊断」「网络检测」) | **P8** | 与 **§零** 同义;**优先 §零**;必 `website-diagnosis` CLI |
|
|
259
262
|
| `OKKI 周报` / `okki 周报` / `使用 okki 周报模板` | **P6** | **不按 P4 默认 8 维** |
|
|
260
263
|
| `Google 账户询盘分析` / `分析 … Google 账号的询盘效果`(**且有询盘附件/字段表**) | **P7** | 严格 3 个月窗口;无 CRM → 改 **§零·D / P3** |
|
|
261
264
|
| `转化成本监控` / `CPA 监控` / `谷歌ADS转化成本` / `低余额账户转化成本` | **P3(§零·D)** | `accounts-digest`;可加 `--max-cpa` |
|
|
@@ -156,7 +156,8 @@
|
|
|
156
156
|
|
|
157
157
|
## P8 · 网站诊断
|
|
158
158
|
|
|
159
|
-
- **触发**:对某 URL
|
|
159
|
+
- **触发**:对某 URL 做网站/落地页诊断、投放前网站评分;话术含「网站诊断/检测/监测/质量**报告**」「落地页报告」「官网体检」「**是否符合(Google)广告投放要求**」「**能不能投 / 适不适合投广告**」(**非** Google 账户诊断、**非** 行业报告、**非** 生成搜索广告方案)。同义词见 `intent-routing.md` §零 / §二 P8。
|
|
160
|
+
- **典型误路由**:用户说「诊断网站 https://… 是否符合 Google 广告投放要求」→ **仍是 P8**;须 `website-diagnosis collect --url …`,**禁止**因带「Google 广告」改走 W3,**禁止**只用 WebFetch/浏览器肉眼看页写结论。
|
|
160
161
|
- **必读**:`references/analytics/website-diagnosis-guide.md` + `assets/website-diagnosis-rules.md` + `report-templates/website-diagnosis-report.md`。
|
|
161
162
|
- **默认产物**:**HTML**(`website-diagnosis render`);**禁止**仅 Markdown 摘要或纯 JSON 充当终稿。
|
|
162
163
|
- **步骤**:
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
智能预警允许设置监控规则,当广告账户的消耗、余额、CTR 等指标满足指定条件时,自动通过**微信公众号**发送通知。
|
|
8
8
|
这是siluzan 提供的全链路服务,除非用户提到需要使用这个否则默认不推荐使用这个智能预警
|
|
9
9
|
|
|
10
|
+
> **Siluzan Agent(`IS_SILUZAN_AGENT_ENV=true`)**:全部 `forewarning` 子命令**不执行**(不打 API)。请改为**创建自动化任务**,在任务中调用 siluzan-tso 本 Skill(拉数 / `guard` / 写命令等)完成预警与巡检。必读 `references/operations/hosted-automation-user-catalog.md`。
|
|
11
|
+
|
|
10
12
|
---
|
|
11
13
|
|
|
12
14
|
## 通知机制
|
|
@@ -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.40-beta.
|
|
12
|
+
$PKG_VERSION = '1.1.40-beta.3'
|
|
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.40-beta.
|
|
12
|
+
readonly PKG_VERSION="1.1.40-beta.3"
|
|
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"
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "ir-p8-meets-google-ads-requirements-with-url",
|
|
3
|
+
"description": "是否符合 Google 广告投放要求 + URL — 须 P8 website-diagnosis,禁止 W3/WebFetch 当终稿",
|
|
4
|
+
"turns": [
|
|
5
|
+
"请诊断网站 https://www.siluzan.com 是否符合 Google 广告投放要求"
|
|
6
|
+
],
|
|
7
|
+
"judgeExpectation": "路径:「诊断网站 / 是否符合 Google 广告投放要求」+ URL → 必须 P8;须执行 `website-diagnosis collect --url` 且带 --json-out。\n禁止:因带「Google 广告」改走 W3 campaign-validate/create;禁止只用 WebFetch/浏览器看页写结论代替 CLI。\n输出:说明 collect → prepare → render HTML。",
|
|
8
|
+
"skillMapping": "references/core/intent-routing.md · §零 · P8",
|
|
9
|
+
"judgeReferencePaths": [
|
|
10
|
+
"references/core/intent-routing.md",
|
|
11
|
+
"references/core/playbooks.md",
|
|
12
|
+
"analytics/website-diagnosis-guide.md"
|
|
13
|
+
],
|
|
14
|
+
"commandMustInclude": [
|
|
15
|
+
[
|
|
16
|
+
"website-diagnosis"
|
|
17
|
+
],
|
|
18
|
+
[
|
|
19
|
+
"collect"
|
|
20
|
+
],
|
|
21
|
+
[
|
|
22
|
+
"--url"
|
|
23
|
+
],
|
|
24
|
+
[
|
|
25
|
+
"--json-out"
|
|
26
|
+
]
|
|
27
|
+
],
|
|
28
|
+
"commandMustNotInclude": [
|
|
29
|
+
[
|
|
30
|
+
"campaign-validate"
|
|
31
|
+
],
|
|
32
|
+
[
|
|
33
|
+
"campaign-create"
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
"market-analysis"
|
|
37
|
+
]
|
|
38
|
+
]
|
|
39
|
+
}
|