siluzan-cso-cli 1.1.9-beta.2 → 1.1.9-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 +110 -70
- package/dist/skill/SKILL.md +10 -37
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/setup.md +20 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -50,7 +50,7 @@ siluzan-cso init -d /path/to/skills # 写入自定义目录
|
|
|
50
50
|
siluzan-cso init --force # 强制覆盖已存在文件
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
> **注意**:当前为测试版(1.1.9-beta.
|
|
53
|
+
> **注意**:当前为测试版(1.1.9-beta.3),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-cso-cli`。
|
|
54
54
|
|
|
55
55
|
| 助手 | 建议 `--ai` |
|
|
56
56
|
|------|-------------|
|
package/dist/index.js
CHANGED
|
@@ -1977,54 +1977,76 @@ async function getSkillFiles(skillDir, apiBaseUrl) {
|
|
|
1977
1977
|
|
|
1978
1978
|
// src/commands/init.ts
|
|
1979
1979
|
var __dirname = path2.dirname(fileURLToPath(import.meta.url));
|
|
1980
|
-
var
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1980
|
+
var SKILL_DIR_NAME = "siluzan-platform";
|
|
1981
|
+
var PROJECT_DIRS = {
|
|
1982
|
+
agents: (cwd) => path2.join(cwd, ".agents", "skills", SKILL_DIR_NAME),
|
|
1983
|
+
cursor: (cwd) => path2.join(cwd, ".cursor", "skills", SKILL_DIR_NAME),
|
|
1984
|
+
claude: (cwd) => path2.join(cwd, ".claude", "skills", SKILL_DIR_NAME),
|
|
1985
|
+
windsurf: (cwd) => path2.join(cwd, ".windsurf", "skills", SKILL_DIR_NAME),
|
|
1986
|
+
gemini: (cwd) => path2.join(cwd, ".gemini", "skills", SKILL_DIR_NAME),
|
|
1987
|
+
codex: (cwd) => path2.join(cwd, ".codex", "skills", SKILL_DIR_NAME),
|
|
1988
|
+
opencode: (cwd) => path2.join(cwd, ".opencode", "skills", SKILL_DIR_NAME),
|
|
1989
|
+
kilo: (cwd) => path2.join(cwd, ".kilo", "skills", SKILL_DIR_NAME),
|
|
1990
|
+
openclaw: (cwd) => path2.join(cwd, "skills", SKILL_DIR_NAME),
|
|
1991
|
+
workbuddy: (cwd) => path2.join(cwd, ".workbuddy", "skills", SKILL_DIR_NAME)
|
|
1990
1992
|
};
|
|
1993
|
+
var GLOBAL_DIRS = {
|
|
1994
|
+
agents: (home) => path2.join(home, ".agents", "skills", SKILL_DIR_NAME),
|
|
1995
|
+
cursor: (home) => path2.join(home, ".cursor", "skills", SKILL_DIR_NAME),
|
|
1996
|
+
claude: (home) => path2.join(home, ".claude", "skills", SKILL_DIR_NAME),
|
|
1997
|
+
windsurf: (home) => path2.join(home, ".codeium", "windsurf", "skills", SKILL_DIR_NAME),
|
|
1998
|
+
gemini: (home) => path2.join(home, ".gemini", "skills", SKILL_DIR_NAME),
|
|
1999
|
+
codex: (home) => path2.join(home, ".codex", "skills", SKILL_DIR_NAME),
|
|
2000
|
+
opencode: (home) => path2.join(home, ".config", "opencode", "skills", SKILL_DIR_NAME),
|
|
2001
|
+
kilo: (home) => path2.join(home, ".kilo", "skills", SKILL_DIR_NAME),
|
|
2002
|
+
openclaw: (home) => path2.join(home, ".openclaw", "skills", SKILL_DIR_NAME),
|
|
2003
|
+
workbuddy: (home) => path2.join(home, ".workbuddy", "skills", SKILL_DIR_NAME)
|
|
2004
|
+
};
|
|
2005
|
+
var ALL_PLATFORM_KEYS = Object.keys(PROJECT_DIRS);
|
|
1991
2006
|
function parseTargets(raw) {
|
|
1992
2007
|
const normalized = raw.trim().toLowerCase();
|
|
1993
2008
|
if (normalized === "all") {
|
|
1994
|
-
return [
|
|
1995
|
-
"cursor",
|
|
1996
|
-
"claude",
|
|
1997
|
-
"openclaw-workspace",
|
|
1998
|
-
"openclaw-global",
|
|
1999
|
-
"workbuddy-workspace",
|
|
2000
|
-
"workbuddy-global"
|
|
2001
|
-
];
|
|
2009
|
+
return ALL_PLATFORM_KEYS.map((k) => ({ keys: [k], isGlobal: false }));
|
|
2002
2010
|
}
|
|
2003
|
-
const parts = normalized.split(",").map((s) => s.trim())
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
return p;
|
|
2007
|
-
});
|
|
2008
|
-
const allowed = [
|
|
2009
|
-
"cursor",
|
|
2010
|
-
"claude",
|
|
2011
|
-
"openclaw-workspace",
|
|
2012
|
-
"openclaw-global",
|
|
2013
|
-
"workbuddy-workspace",
|
|
2014
|
-
"workbuddy-global"
|
|
2015
|
-
];
|
|
2016
|
-
const result = [];
|
|
2011
|
+
const parts = normalized.split(",").map((s) => s.trim());
|
|
2012
|
+
const results = [];
|
|
2013
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2017
2014
|
for (const p of parts) {
|
|
2018
|
-
|
|
2015
|
+
let key = p;
|
|
2016
|
+
let isGlobal = false;
|
|
2017
|
+
if (p === "openclaw-workspace") {
|
|
2018
|
+
key = "openclaw";
|
|
2019
|
+
isGlobal = false;
|
|
2020
|
+
} else if (p === "openclaw-global") {
|
|
2021
|
+
key = "openclaw";
|
|
2022
|
+
isGlobal = true;
|
|
2023
|
+
} else if (p === "openclaw") {
|
|
2024
|
+
key = "openclaw";
|
|
2025
|
+
isGlobal = false;
|
|
2026
|
+
} else if (p === "workbuddy-workspace") {
|
|
2027
|
+
key = "workbuddy";
|
|
2028
|
+
isGlobal = false;
|
|
2029
|
+
} else if (p === "workbuddy-global") {
|
|
2030
|
+
key = "workbuddy";
|
|
2031
|
+
isGlobal = true;
|
|
2032
|
+
} else if (p === "workbuddy") {
|
|
2033
|
+
key = "workbuddy";
|
|
2034
|
+
isGlobal = false;
|
|
2035
|
+
}
|
|
2036
|
+
if (!ALL_PLATFORM_KEYS.includes(key)) {
|
|
2019
2037
|
console.error(
|
|
2020
|
-
`\u672A\u77E5\u5E73\u53F0: ${p}\u3002\u53EF\u9009:
|
|
2038
|
+
`\u672A\u77E5\u5E73\u53F0: ${p}\u3002\u53EF\u9009: ${ALL_PLATFORM_KEYS.join(", ")}, openclaw-workspace, openclaw-global, workbuddy-workspace, workbuddy-global, all`
|
|
2021
2039
|
);
|
|
2022
2040
|
process.exitCode = 1;
|
|
2023
2041
|
return [];
|
|
2024
2042
|
}
|
|
2025
|
-
|
|
2043
|
+
const uid = `${key}:${isGlobal}`;
|
|
2044
|
+
if (!seen.has(uid)) {
|
|
2045
|
+
seen.add(uid);
|
|
2046
|
+
results.push({ keys: [key], isGlobal });
|
|
2047
|
+
}
|
|
2026
2048
|
}
|
|
2027
|
-
return
|
|
2049
|
+
return results;
|
|
2028
2050
|
}
|
|
2029
2051
|
function skillRoot() {
|
|
2030
2052
|
return path2.join(__dirname, "skill");
|
|
@@ -2084,16 +2106,30 @@ async function runInit(options) {
|
|
|
2084
2106
|
if (anyWritten) {
|
|
2085
2107
|
installedEntries.push({ target: "custom", cwd: "", dir: destDir });
|
|
2086
2108
|
}
|
|
2109
|
+
} else if (options.global) {
|
|
2110
|
+
for (const key of ALL_PLATFORM_KEYS) {
|
|
2111
|
+
const destDir = GLOBAL_DIRS[key](home);
|
|
2112
|
+
console.log(`[${key} global] \u2192 ${destDir}`);
|
|
2113
|
+
const anyWritten = await writeSkillFilesToDir(destDir, skillFiles, options.force);
|
|
2114
|
+
if (anyWritten) {
|
|
2115
|
+
installedEntries.push({ target: `${key}-global`, cwd: "" });
|
|
2116
|
+
}
|
|
2117
|
+
}
|
|
2087
2118
|
} else {
|
|
2088
2119
|
const targets = parseTargets(options.aiTargets);
|
|
2089
2120
|
if (targets.length === 0) return;
|
|
2090
|
-
for (const
|
|
2091
|
-
const
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
const
|
|
2096
|
-
|
|
2121
|
+
for (const entry of targets) {
|
|
2122
|
+
for (const key of entry.keys) {
|
|
2123
|
+
const destDir = entry.isGlobal ? GLOBAL_DIRS[key](home) : PROJECT_DIRS[key](options.cwd);
|
|
2124
|
+
const label = entry.isGlobal ? `${key} global` : key;
|
|
2125
|
+
console.log(`[${label}] \u2192 ${destDir}`);
|
|
2126
|
+
const anyWritten = await writeSkillFilesToDir(destDir, skillFiles, options.force);
|
|
2127
|
+
if (anyWritten) {
|
|
2128
|
+
installedEntries.push({
|
|
2129
|
+
target: entry.isGlobal ? `${key}-global` : key,
|
|
2130
|
+
cwd: entry.isGlobal ? "" : options.cwd
|
|
2131
|
+
});
|
|
2132
|
+
}
|
|
2097
2133
|
}
|
|
2098
2134
|
}
|
|
2099
2135
|
}
|
|
@@ -2101,18 +2137,8 @@ async function runInit(options) {
|
|
|
2101
2137
|
saveInstalledTargets(installedEntries);
|
|
2102
2138
|
}
|
|
2103
2139
|
console.log("\n\u4E0B\u4E00\u6B65\uFF1A");
|
|
2104
|
-
console.log(
|
|
2105
|
-
|
|
2106
|
-
);
|
|
2107
|
-
console.log(
|
|
2108
|
-
"2. \u540E\u7EED\u5347\u7EA7\u8FD0\u884C\uFF1Asiluzan-cso update \uFF08\u81EA\u52A8\u66F4\u65B0 CLI \u4E0E skill \u6587\u4EF6\uFF09"
|
|
2109
|
-
);
|
|
2110
|
-
console.log(
|
|
2111
|
-
"3. OpenClaw \u5168\u5C40\u6280\u80FD\u82E5\u672A\u751F\u6548\uFF0C\u8BF7\u5728 ~/.openclaw/openclaw.json \u7684 skills.load.extraDirs \u4E2D\u52A0\u5165\u6280\u80FD\u7236\u76EE\u5F55\u3002"
|
|
2112
|
-
);
|
|
2113
|
-
console.log(
|
|
2114
|
-
"4. WorkBuddy \u6280\u80FD\u5B89\u88C5\u540E\u91CD\u542F WorkBuddy \u5373\u53EF\u751F\u6548\uFF08~/.workbuddy/skills/ \u6216\u9879\u76EE .workbuddy/skills/\uFF09\u3002"
|
|
2115
|
-
);
|
|
2140
|
+
console.log("1. \u9996\u6B21\u4F7F\u7528\u8BF7\u8FD0\u884C\uFF1Asiluzan-cso login \uFF08\u5F15\u5BFC\u6CE8\u518C/\u767B\u5F55\u5E76\u4FDD\u5B58 Token\uFF09");
|
|
2141
|
+
console.log("2. \u540E\u7EED\u5347\u7EA7\u8FD0\u884C\uFF1Asiluzan-cso update \uFF08\u81EA\u52A8\u66F4\u65B0 CLI \u4E0E skill \u6587\u4EF6\uFF09");
|
|
2116
2142
|
}
|
|
2117
2143
|
|
|
2118
2144
|
// src/commands/login.ts
|
|
@@ -2712,7 +2738,7 @@ function loadConfig(tokenArg) {
|
|
|
2712
2738
|
const authToken = tokenArg ?? process.env.SILUZAN_AUTH_TOKEN ?? shared.authToken ?? "";
|
|
2713
2739
|
if (!apiKey && !authToken) {
|
|
2714
2740
|
console.error(
|
|
2715
|
-
"\n\u274C \u672A\u627E\u5230\u8BA4\u8BC1\u51ED\u636E\u3002\n\n \u65B9\u5F0F\u4E00\uFF08\u63A8\u8350\uFF09\uFF1AAPI Key\n \u5728\u4E1D\u8DEF\u8D5E\u300C\u8BBE\u7F6E \u2192 API Key \u7BA1\u7406\u300D\u521B\u5EFA API Key\uFF0C\u7136\u540E\u8FD0\u884C\uFF1A\n siluzan-cso login --api-key <YOUR_API_KEY>\n\n \u65B9\u5F0F\u4E8C\uFF1AJWT Token\n siluzan-cso login\n"
|
|
2741
|
+
"\n\u274C \u672A\u627E\u5230\u8BA4\u8BC1\u51ED\u636E\u3002\n\n \u65B9\u5F0F\u4E00\uFF08\u63A8\u8350\uFF09\uFF1AAPI Key\n \u5728\u4E1D\u8DEF\u8D5E\u300C\u8BBE\u7F6E \u2192 API Key \u7BA1\u7406\u300D\u521B\u5EFA API Key\uFF0C\u7136\u540E\u8FD0\u884C\uFF1A\n siluzan-cso login --api-key <YOUR_API_KEY>\n\n \u65B9\u5F0F\u4E8C\uFF1A\u73AF\u5883\u53D8\u91CF\uFF08CI/CD \u63A8\u8350\uFF09\n export SILUZAN_API_KEY=<YOUR_API_KEY>\n # \u6216 export SILUZAN_AUTH_TOKEN=<YOUR_TOKEN>\n\n \u65B9\u5F0F\u4E09\uFF1AJWT Token\n siluzan-cso login\n"
|
|
2716
2742
|
);
|
|
2717
2743
|
process.exit(1);
|
|
2718
2744
|
}
|
|
@@ -2737,7 +2763,7 @@ function loadConfig(tokenArg) {
|
|
|
2737
2763
|
\u274C agentBaseUrl \u4E0D\u5408\u6CD5\uFF1A${agentErr}`);
|
|
2738
2764
|
process.exit(1);
|
|
2739
2765
|
}
|
|
2740
|
-
return { apiBaseUrl, csoBaseUrl, agentBaseUrl, authToken, apiKey, dataPermission: shared.dataPermission };
|
|
2766
|
+
return { apiBaseUrl, csoBaseUrl, agentBaseUrl, authToken, apiKey, dataPermission: process.env.SILUZAN_DATA_PERMISSION ?? shared.dataPermission };
|
|
2741
2767
|
}
|
|
2742
2768
|
function apiFetch2(url, config, options = {}, verbose = false) {
|
|
2743
2769
|
return apiFetch(url, config, options, verbose);
|
|
@@ -6216,7 +6242,11 @@ ${header}${body}`);
|
|
|
6216
6242
|
import * as fs10 from "fs";
|
|
6217
6243
|
function cmdConfigShow() {
|
|
6218
6244
|
const shared = readSharedConfig();
|
|
6219
|
-
|
|
6245
|
+
const envApiKey = process.env.SILUZAN_API_KEY;
|
|
6246
|
+
const envAuthToken = process.env.SILUZAN_AUTH_TOKEN;
|
|
6247
|
+
const effectiveApiKey = envApiKey ?? shared.apiKey ?? "";
|
|
6248
|
+
const effectiveAuthToken = envAuthToken ?? shared.authToken ?? "";
|
|
6249
|
+
if (!effectiveApiKey && !effectiveAuthToken) {
|
|
6220
6250
|
console.log(
|
|
6221
6251
|
`
|
|
6222
6252
|
\u5C1A\u672A\u914D\u7F6E\u51ED\u636E\u3002
|
|
@@ -6226,25 +6256,34 @@ function cmdConfigShow() {
|
|
|
6226
6256
|
|
|
6227
6257
|
\u6CE8\u518C\u767B\u5F55\u540E\u8FD0\u884C\u4EE5\u4E0B\u4EFB\u4E00\u547D\u4EE4\u5B8C\u6210\u914D\u7F6E\uFF1A
|
|
6228
6258
|
siluzan-cso login \uFF08\u4F7F\u7528 API Key \u6216 Token \u767B\u5F55\uFF09
|
|
6259
|
+
|
|
6260
|
+
\u4E5F\u53EF\u901A\u8FC7\u73AF\u5883\u53D8\u91CF\u4F20\u5165\uFF08CI/CD \u63A8\u8350\uFF09\uFF1A
|
|
6261
|
+
export SILUZAN_API_KEY=<YOUR_API_KEY>
|
|
6262
|
+
export SILUZAN_AUTH_TOKEN=<YOUR_TOKEN>
|
|
6229
6263
|
`
|
|
6230
6264
|
);
|
|
6231
6265
|
return;
|
|
6232
6266
|
}
|
|
6233
6267
|
const apiBaseUrl = process.env.SILUZAN_CSO_API_BASE ?? DEFAULT_API_BASE;
|
|
6234
6268
|
const csoBaseUrl = DEFAULT_CSO_BASE;
|
|
6235
|
-
|
|
6236
|
-
console.log("\n\u5F53\u524D\u914D\u7F6E\uFF08~/.siluzan/config.json\uFF09\uFF1A");
|
|
6269
|
+
console.log("\n\u5F53\u524D\u914D\u7F6E\uFF1A");
|
|
6237
6270
|
console.log(` apiBaseUrl : ${apiBaseUrl}`);
|
|
6238
6271
|
console.log(` csoBaseUrl : ${csoBaseUrl}`);
|
|
6239
|
-
if (
|
|
6240
|
-
|
|
6272
|
+
if (effectiveApiKey) {
|
|
6273
|
+
const src = envApiKey ? "env:SILUZAN_API_KEY" : "config.json";
|
|
6274
|
+
const active = " \u2190 \u5F53\u524D\u751F\u6548\uFF08X-Api-Key \u9274\u6743\uFF09";
|
|
6275
|
+
console.log(` apiKey : ${maskSecret(effectiveApiKey)} [${src}]${active}`);
|
|
6241
6276
|
}
|
|
6242
|
-
if (
|
|
6243
|
-
const
|
|
6244
|
-
|
|
6277
|
+
if (effectiveAuthToken) {
|
|
6278
|
+
const src = envAuthToken ? "env:SILUZAN_AUTH_TOKEN" : "config.json";
|
|
6279
|
+
const note = effectiveApiKey ? " \uFF08\u5DF2\u88AB apiKey \u8986\u76D6\uFF09" : " \u2190 \u5F53\u524D\u751F\u6548\uFF08Bearer \u9274\u6743\uFF09";
|
|
6280
|
+
console.log(` authToken : ${maskSecret(effectiveAuthToken)} [${src}]${note}`);
|
|
6245
6281
|
}
|
|
6246
6282
|
console.log(`
|
|
6247
6283
|
\u914D\u7F6E\u6587\u4EF6\u4F4D\u7F6E\uFF1A${CONFIG_FILE}`);
|
|
6284
|
+
if (envApiKey || envAuthToken) {
|
|
6285
|
+
console.log(" \u2139\uFE0F \u90E8\u5206\u51ED\u636E\u6765\u81EA\u73AF\u5883\u53D8\u91CF\uFF0C\u4F18\u5148\u7EA7\u9AD8\u4E8E config.json\u3002");
|
|
6286
|
+
}
|
|
6248
6287
|
if (process.platform !== "win32") {
|
|
6249
6288
|
console.log(" \u26A0\uFE0F Token \u660E\u6587\u5B58\u50A8\uFF0C\u8BF7\u786E\u4FDD\u6587\u4EF6\u6743\u9650\u4E3A 600\uFF0C\u4E14\u4E0D\u8981\u63D0\u4EA4\u81F3\u4EE3\u7801\u4ED3\u5E93\u6216\u7F51\u76D8\u3002");
|
|
6250
6289
|
}
|
|
@@ -6298,18 +6337,19 @@ program.command("login").description("\u5F15\u5BFC\u5B8C\u6210 Siluzan \u8D26\u5
|
|
|
6298
6337
|
program.command("update").description("\u68C0\u67E5\u5E76\u66F4\u65B0 siluzan-cso-cli \u81F3\u6700\u65B0\u7248\u672C\uFF0C\u540C\u6B65\u5237\u65B0\u6240\u6709\u5DF2\u5B89\u88C5\u7684 skill \u6587\u4EF6").option("--force", "\u8DF3\u8FC7\u7248\u672C\u6BD4\u8F83\uFF0C\u5F3A\u5236\u91CD\u65B0\u5B89\u88C5\u5E76\u5237\u65B0 skill \u6587\u4EF6", false).option("--skip-init", "\u4EC5\u66F4\u65B0 CLI\uFF0C\u4E0D\u91CD\u65B0\u521D\u59CB\u5316 skill \u6587\u4EF6", false).action(async (opts) => {
|
|
6299
6338
|
await runUpdate({ force: opts.force, skipInit: opts.skipInit });
|
|
6300
6339
|
});
|
|
6301
|
-
program.command("init").description("\u5C06 Skill \u6587\u4EF6\u5199\u5165
|
|
6340
|
+
program.command("init").description("\u5C06 Skill \u6587\u4EF6\u5199\u5165 AI \u52A9\u624B\u76EE\u5F55\uFF08\u9ED8\u8BA4\u5199\u5165\u6240\u6709\u5E73\u53F0\u7684\u9879\u76EE\u7EA7\u76EE\u5F55\uFF0C--global \u5199\u5165\u5168\u5C40\u76EE\u5F55\uFF09").option(
|
|
6302
6341
|
"-a, --ai <targets>",
|
|
6303
|
-
"\u76EE\u6807\u5E73\u53F0\uFF0C\u9017\u53F7\u5206\u9694\uFF1Acursor,claude,
|
|
6304
|
-
"
|
|
6342
|
+
"\u76EE\u6807\u5E73\u53F0\uFF0C\u9017\u53F7\u5206\u9694\uFF1Acursor,claude,agents,windsurf,gemini,codex,opencode,kilo,openclaw,workbuddy,all",
|
|
6343
|
+
"all"
|
|
6305
6344
|
).option(
|
|
6306
6345
|
"-d, --dir <path>",
|
|
6307
|
-
"\u5C06 Skill \u6587\u4EF6\u76F4\u63A5\u5199\u5165\u6307\u5B9A\u76EE\u5F55\uFF08\u7EDD\u5BF9\u6216\u76F8\u5BF9\u8DEF\u5F84\uFF09\uFF0C\u4E0E --ai \u4E92\u65A5\uFF0C\u4F18\u5148\u7EA7\u66F4\u9AD8"
|
|
6308
|
-
).option("-f, --force", "\u8986\u76D6\u5DF2\u5B58\u5728\u7684 Skill \u6587\u4EF6", false).action(async (opts) => {
|
|
6346
|
+
"\u5C06 Skill \u6587\u4EF6\u76F4\u63A5\u5199\u5165\u6307\u5B9A\u76EE\u5F55\uFF08\u7EDD\u5BF9\u6216\u76F8\u5BF9\u8DEF\u5F84\uFF09\uFF0C\u4E0E --ai/--global \u4E92\u65A5\uFF0C\u4F18\u5148\u7EA7\u66F4\u9AD8"
|
|
6347
|
+
).option("-g, --global", "\u5199\u5165\u6240\u6709\u5E73\u53F0\u7684\u5168\u5C40 skill \u76EE\u5F55\uFF08~/.xxx/skills/\uFF09", false).option("-f, --force", "\u8986\u76D6\u5DF2\u5B58\u5728\u7684 Skill \u6587\u4EF6", false).action(async (opts) => {
|
|
6309
6348
|
await runInit({
|
|
6310
6349
|
cwd: process.cwd(),
|
|
6311
6350
|
aiTargets: opts.ai,
|
|
6312
6351
|
dir: opts.dir,
|
|
6352
|
+
global: Boolean(opts.global),
|
|
6313
6353
|
force: Boolean(opts.force),
|
|
6314
6354
|
apiBaseUrl: DEFAULT_API_BASE
|
|
6315
6355
|
});
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -9,43 +9,6 @@ compatibility: Requires siluzan-cso-cli installed and authenticated via `siluzan
|
|
|
9
9
|
|
|
10
10
|
# siluzan-cso
|
|
11
11
|
|
|
12
|
-
## 前置条件与运行时依赖
|
|
13
|
-
|
|
14
|
-
使用本 Skill 前,以下组件必须已安装并就绪:
|
|
15
|
-
|
|
16
|
-
### 必需二进制 / 运行时
|
|
17
|
-
| 依赖 | 最低版本 | 用途 |
|
|
18
|
-
|------|---------|------|
|
|
19
|
-
| **Node.js** | 18+ | CLI 执行运行时以及 `node -e` 数据过滤 |
|
|
20
|
-
| **npm** 或 **pnpm** | npm 8+ / pnpm 8+ | 安装 `siluzan-cso-cli` 全局包 |
|
|
21
|
-
| **siluzan-cso** CLI | 与 Skill 同版本 | 所有业务操作的执行入口(由 `npm install -g siluzan-cso-cli` 安装) |
|
|
22
|
-
|
|
23
|
-
### 可选二进制
|
|
24
|
-
| 依赖 | 用途 |
|
|
25
|
-
|------|------|
|
|
26
|
-
| **ffmpeg** | `extract-cover` 命令截取视频封面帧(未安装时该命令会报错提示) |
|
|
27
|
-
|
|
28
|
-
### 凭据与配置文件
|
|
29
|
-
| 项目 | 位置 | 说明 |
|
|
30
|
-
|------|------|------|
|
|
31
|
-
| API Key 或 Token | `~/.siluzan/config.json` 中的 `apiKey` 或 `authToken` 字段 | 用于所有 CSO API 调用的鉴权。API Key 在丝路赞控制台「个人设置 → API Key 管理」创建。**请勿将此文件提交到 Git。** |
|
|
32
|
-
| csoBaseUrl | `~/.siluzan/config.json` 中的 `apiBaseUrl` | CSO 后端 API 地址,默认值由 CLI 构建时写入 |
|
|
33
|
-
|
|
34
|
-
### 网络端点
|
|
35
|
-
本 Skill 通过 CLI 访问以下远程服务:
|
|
36
|
-
| 端点 | 用途 |
|
|
37
|
-
|------|------|
|
|
38
|
-
| `api.siluzan.com` / `api-ci.siluzan.com` | CSO 核心 API(账号管理、发布、素材、报表等) |
|
|
39
|
-
| `cso.siluzan.com` / `cso-ci.siluzan.com` | CSO 前端页面(授权回调等浏览器操作) |
|
|
40
|
-
| `www.siluzan.com` / `www-ci.siluzan.com` | 丝路赞主站(注册、API Key 管理) |
|
|
41
|
-
| `registry.npmjs.org` | 版本更新检查 |
|
|
42
|
-
|
|
43
|
-
### 可选环境变量
|
|
44
|
-
| 变量 | 说明 |
|
|
45
|
-
|------|------|
|
|
46
|
-
| `SILUZAN_AUTH_TOKEN` | 从环境变量读取 Token(优先级高于 config.json,CI/CD 推荐) |
|
|
47
|
-
|
|
48
|
-
如果上述依赖缺失,请先参照 `references/setup.md` 完成安装与配置。
|
|
49
12
|
|
|
50
13
|
---
|
|
51
14
|
|
|
@@ -57,6 +20,16 @@ compatibility: Requires siluzan-cso-cli installed and authenticated via `siluzan
|
|
|
57
20
|
|
|
58
21
|
---
|
|
59
22
|
|
|
23
|
+
## 可选环境变量
|
|
24
|
+
|
|
25
|
+
| 变量 | 说明 |
|
|
26
|
+
|------|------|
|
|
27
|
+
| `SILUZAN_API_KEY` | 从环境变量读取 API Key(优先级高于 config.json,CI/CD 推荐) |
|
|
28
|
+
| `SILUZAN_AUTH_TOKEN` | 从环境变量读取 JWT Token(优先级高于 config.json) |
|
|
29
|
+
| `SILUZAN_DATA_PERMISSION` | 从环境变量读取数据权限标识(优先级高于 config.json) |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
60
33
|
## 能力范围
|
|
61
34
|
|
|
62
35
|
| 业务流程 | 手段 | 说明 |
|
package/dist/skill/_meta.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"slug": "siluzan-cso",
|
|
3
|
-
"version": "1.1.9-beta.
|
|
4
|
-
"publishedAt":
|
|
3
|
+
"version": "1.1.9-beta.3",
|
|
4
|
+
"publishedAt": 1776246656610,
|
|
5
5
|
"homepage": "https://www.siluzan.com",
|
|
6
6
|
"source": "https://dev.azure.com/jack4it/Sammamish/_git/siluzan-skill",
|
|
7
7
|
"requiredBinaries": [
|
|
@@ -46,10 +46,26 @@ siluzan-cso config set --token <Token> # 备用:设置 JWT Token
|
|
|
46
46
|
|
|
47
47
|
API Key 获取入口:`https://cso-ci.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
### 通过环境变量传入凭据(CI/CD 推荐)
|
|
50
|
+
|
|
51
|
+
无需写入 config.json,直接通过环境变量传入:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
export SILUZAN_API_KEY=<YOUR_API_KEY> # API Key(推荐)
|
|
55
|
+
# 或
|
|
56
|
+
export SILUZAN_AUTH_TOKEN=<YOUR_TOKEN> # JWT Token
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
环境变量优先级高于 config.json,适合 CI/CD、Docker 容器、自动化脚本等场景。可通过 `siluzan-cso config show` 确认当前生效的凭据来源。
|
|
60
|
+
|
|
61
|
+
**凭据读取优先级(由高到低):**
|
|
62
|
+
|
|
63
|
+
| 凭据类型 | 优先级 |
|
|
64
|
+
|---------|--------|
|
|
65
|
+
| API Key | `SILUZAN_API_KEY` 环境变量 → `config.json` → `apiKey` |
|
|
66
|
+
| JWT Token | `--token` CLI 参数 → `SILUZAN_AUTH_TOKEN` 环境变量 → `config.json` → `authToken` |
|
|
67
|
+
|
|
68
|
+
> API Key 鉴权优先级高于 JWT Token,两者同时存在时使用 API Key。
|
|
53
69
|
|
|
54
70
|
> **若用户已配置过凭据,不要重复询问。** 先尝试直接运行命令;只有命令返回认证失败时,才引导用户重新执行 `siluzan-cso login`。
|
|
55
71
|
|
package/package.json
CHANGED