siluzan-cso-cli 1.1.10 → 1.1.11-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 +2 -1
- package/dist/index.js +5 -5
- package/dist/skill/SKILL.md +4 -4
- package/dist/skill/_meta.json +2 -2
- package/dist/skill/references/publish.md +1 -1
- package/dist/skill/references/setup.md +4 -4
- package/dist/skill/references/web-pages.md +20 -20
- package/dist/skill/scripts/install.ps1 +66 -121
- package/dist/skill/scripts/install.sh +79 -139
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
在**用户的目标项目根目录**执行(根据用户使用的助手选择 `--ai`):
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
npm install -g siluzan-cso-cli
|
|
45
|
+
npm install -g siluzan-cso-cli@beta
|
|
46
46
|
siluzan-cso init --ai cursor # 写入 Cursor(默认)
|
|
47
47
|
siluzan-cso init --ai cursor,claude # 同时写入多个平台
|
|
48
48
|
siluzan-cso init --ai all # 写入所有支持的平台
|
|
@@ -50,6 +50,7 @@ siluzan-cso init -d /path/to/skills # 写入自定义目录
|
|
|
50
50
|
siluzan-cso init --force # 强制覆盖已存在文件
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
+
> **注意**:当前为测试版(1.1.11-beta.3),供内部测试使用。正式发布后安装命令将改为 `npm install -g siluzan-cso-cli`。
|
|
53
54
|
|
|
54
55
|
| 助手 | 建议 `--ai` |
|
|
55
56
|
|------|-------------|
|
package/dist/index.js
CHANGED
|
@@ -1939,11 +1939,11 @@ var require_semver2 = __commonJS({
|
|
|
1939
1939
|
import { Command, Option } from "commander";
|
|
1940
1940
|
|
|
1941
1941
|
// src/config/defaults.ts
|
|
1942
|
-
var BUILD_ENV = "
|
|
1943
|
-
var DEFAULT_API_BASE = "https://api.siluzan.com";
|
|
1944
|
-
var DEFAULT_CSO_BASE = "https://cso.siluzan.com";
|
|
1945
|
-
var DEFAULT_WEB_BASE = "https://www.siluzan.com";
|
|
1946
|
-
var DEFAULT_AGENT_BASE = "https://agent.mysiluzan.com";
|
|
1942
|
+
var BUILD_ENV = "test";
|
|
1943
|
+
var DEFAULT_API_BASE = "https://api-ci.siluzan.com";
|
|
1944
|
+
var DEFAULT_CSO_BASE = "https://cso-ci.siluzan.com";
|
|
1945
|
+
var DEFAULT_WEB_BASE = "https://www-ci.siluzan.com";
|
|
1946
|
+
var DEFAULT_AGENT_BASE = "https://agent-ci.mysiluzan.com";
|
|
1947
1947
|
|
|
1948
1948
|
// src/commands/init.ts
|
|
1949
1949
|
import * as fs2 from "fs/promises";
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -11,12 +11,12 @@ compatibility: Requires siluzan-cso-cli installed and authenticated via `siluzan
|
|
|
11
11
|
|
|
12
12
|
## 一键安装
|
|
13
13
|
|
|
14
|
-
如果 CLI
|
|
14
|
+
如果 CLI 尚未安装,直接帮用户执行对应平台的安装脚本:
|
|
15
15
|
|
|
16
|
-
- **macOS / Linux / WSL
|
|
16
|
+
- **macOS / Linux / WSL:** `bash scripts/install.sh`
|
|
17
17
|
- **Windows PowerShell:** `powershell -ExecutionPolicy Bypass -File scripts/install.ps1`
|
|
18
18
|
|
|
19
|
-
脚本会自动完成 Node.js 检测/安装、CLI
|
|
19
|
+
脚本会自动完成 Node.js 检测/安装、CLI 安装、Skill 全局注册,并引导用户配置 API Key。无需选择,本脚本专为 siluzan-cso-cli 定制。
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -155,6 +155,6 @@ account-group ──需要 mediaCustomerId──► list-accounts
|
|
|
155
155
|
|
|
156
156
|
> 无对应 CLI 命令的模块,或需要引导用户在网页端查看数据时,查阅 `references/web-pages.md` 获取完整页面清单与链接。
|
|
157
157
|
|
|
158
|
-
URL 格式:`https://www.siluzan.com/v3/foreign_trade/cso/{页面}`
|
|
158
|
+
URL 格式:`https://www-ci.siluzan.com/v3/foreign_trade/cso/{页面}`
|
|
159
159
|
|
|
160
160
|
常用页面:`task`(任务管理)· `postVideo`(发布页)· `ManageAccounts`(账号管理)· `planning`(AI 内容规划)· `table`(绩效报表)· `Workdata`(作品数据)
|
package/dist/skill/_meta.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"slug": "siluzan-cso",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"publishedAt":
|
|
3
|
+
"version": "1.1.11-beta.3",
|
|
4
|
+
"publishedAt": 1776309770549,
|
|
5
5
|
"homepage": "https://www.siluzan.com",
|
|
6
6
|
"source": "https://dev.azure.com/jack4it/Sammamish/_git/siluzan-skill",
|
|
7
7
|
"requiredBinaries": [
|
|
@@ -199,7 +199,7 @@ siluzan-cso publish -c publish-config.json
|
|
|
199
199
|
|
|
200
200
|
> 查询发布状态、处理失败项 → 参见 `references/task.md`
|
|
201
201
|
|
|
202
|
-
前往 CSO 任务管理页面查看进度:`https://www.siluzan.com/v3/foreign_trade/cso/task`
|
|
202
|
+
前往 CSO 任务管理页面查看进度:`https://www-ci.siluzan.com/v3/foreign_trade/cso/task`
|
|
203
203
|
|
|
204
204
|
---
|
|
205
205
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## 安装 CLI
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
npm install -g siluzan-cso-cli
|
|
6
|
+
npm install -g siluzan-cso-cli@beta
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
环境要求:Node.js 18+
|
|
@@ -44,7 +44,7 @@ siluzan-cso config set --token <Token> # 备用:设置 JWT Token
|
|
|
44
44
|
|
|
45
45
|
> **⚠️ 不要使用 `config set --token <token>` 的方式。** 该方式会将 Token 明文写入 shell history(`~/.bash_history`、`~/.zsh_history`、PowerShell 历史),存在凭证泄露风险。推荐使用 `siluzan-cso login` 交互式输入。
|
|
46
46
|
|
|
47
|
-
API Key 获取入口:`https://cso.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
|
|
47
|
+
API Key 获取入口:`https://cso-ci.siluzan.com/v3/foreign_trade/settings/apiKeyManagement`
|
|
48
48
|
|
|
49
49
|
### 通过环境变量传入凭据(CI/CD 推荐)
|
|
50
50
|
|
|
@@ -79,8 +79,8 @@ siluzan-cso config show
|
|
|
79
79
|
输出示例:
|
|
80
80
|
```
|
|
81
81
|
构建环境 : production
|
|
82
|
-
apiBaseUrl : https://api.siluzan.com
|
|
83
|
-
csoBaseUrl : https://cso.siluzan.com
|
|
82
|
+
apiBaseUrl : https://api-ci.siluzan.com
|
|
83
|
+
csoBaseUrl : https://cso-ci.siluzan.com
|
|
84
84
|
apiKey : abcd****1234
|
|
85
85
|
```
|
|
86
86
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# web-pages — CSO 后台页面速查
|
|
2
2
|
|
|
3
3
|
> 当需要引导用户前往网页端查看数据或执行操作时,使用本文件中的页面链接。
|
|
4
|
-
> URL 格式:`https://www.siluzan.com/v3/foreign_trade/cso/{页面路径}`
|
|
4
|
+
> URL 格式:`https://www-ci.siluzan.com/v3/foreign_trade/cso/{页面路径}`
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
|
|
12
12
|
| 页面 | 完整链接 | 功能说明 |
|
|
13
13
|
|------|----------|----------|
|
|
14
|
-
| 账号管理 | `https://www.siluzan.com/v3/foreign_trade/cso/ManageAccounts` | 绑定/授权/查看媒体账号列表、账号状态、Token 到期时间 |
|
|
15
|
-
| 账号分组 | `https://www.siluzan.com/v3/foreign_trade/cso/AccountGroup` | 新建分组、管理分组内账号 |
|
|
16
|
-
| 重点账号 | `https://www.siluzan.com/v3/foreign_trade/cso/KeyAccounts` | 配置重点关注账号、数据备份 |
|
|
14
|
+
| 账号管理 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/ManageAccounts` | 绑定/授权/查看媒体账号列表、账号状态、Token 到期时间 |
|
|
15
|
+
| 账号分组 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/AccountGroup` | 新建分组、管理分组内账号 |
|
|
16
|
+
| 重点账号 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/KeyAccounts` | 配置重点关注账号、数据备份 |
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
---
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
|
|
23
23
|
| 页面 | 完整链接 | 功能说明 |
|
|
24
24
|
|------|----------|----------|
|
|
25
|
-
| 发布作品 | `https://www.siluzan.com/v3/foreign_trade/cso/postVideo?contentType=1` | 矩阵发布视频、图文、草稿管理、话题组 contentType=1 是视频,contentType=2是图文 |
|
|
25
|
+
| 发布作品 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/postVideo?contentType=1` | 矩阵发布视频、图文、草稿管理、话题组 contentType=1 是视频,contentType=2是图文 |
|
|
26
26
|
|
|
27
|
-
| 发布日历 | `https://www.siluzan.com/v3/foreign_trade/cso/publishCalendar` | 日历视图规划发布任务、创建/编辑发布任务 |
|
|
28
|
-
| 营销日历 | `https://www.siluzan.com/v3/foreign_trade/cso/marketingCalendar` | 营销节点日历、跳转创建发布任务 |
|
|
27
|
+
| 发布日历 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/publishCalendar` | 日历视图规划发布任务、创建/编辑发布任务 |
|
|
28
|
+
| 营销日历 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/marketingCalendar` | 营销节点日历、跳转创建发布任务 |
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
|
|
34
34
|
| 页面 | 完整链接 | 功能说明 |
|
|
35
35
|
|------|----------|----------|
|
|
36
|
-
| 任务列表 | `https://www.siluzan.com/v3/foreign_trade/cso/task` | 发布任务列表、状态筛选、任务详情抽屉 |
|
|
37
|
-
| 视频管理 | `https://www.siluzan.com/v3/foreign_trade/cso/VideoMgr` | 已发布视频/图文列表、删除、重发、评论查看 |
|
|
38
|
-
| 视频搬家 | `https://www.siluzan.com/v3/foreign_trade/cso/relocation` | 将视频搬运到其他平台 |
|
|
39
|
-
| 搬家记录 | `https://www.siluzan.com/v3/foreign_trade/cso/MovingRecord` | 搬家任务列表与执行状态 |
|
|
36
|
+
| 任务列表 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/task` | 发布任务列表、状态筛选、任务详情抽屉 |
|
|
37
|
+
| 视频管理 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/VideoMgr` | 已发布视频/图文列表、删除、重发、评论查看 |
|
|
38
|
+
| 视频搬家 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/relocation` | 将视频搬运到其他平台 |
|
|
39
|
+
| 搬家记录 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/MovingRecord` | 搬家任务列表与执行状态 |
|
|
40
40
|
|
|
41
41
|
---
|
|
42
42
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
| 页面 | 完整链接 | 功能说明 |
|
|
46
46
|
|------|----------|----------|
|
|
47
|
-
| 私信管理 | `https://www.siluzan.com/v3/foreign_trade/cso/letter` | 按渠道/时间查看与处理私信(多平台 Tab) |
|
|
48
|
-
| 评论管理 | `https://www.siluzan.com/v3/foreign_trade/cso/comment` | 收到的评论列表、回复、账号组筛选 |
|
|
49
|
-
| 智能互动 | `https://www.siluzan.com/v3/foreign_trade/cso/interaction` | 私信欢迎语、自动回复规则配置 |
|
|
47
|
+
| 私信管理 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/letter` | 按渠道/时间查看与处理私信(多平台 Tab) |
|
|
48
|
+
| 评论管理 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/comment` | 收到的评论列表、回复、账号组筛选 |
|
|
49
|
+
| 智能互动 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/interaction` | 私信欢迎语、自动回复规则配置 |
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
@@ -54,9 +54,9 @@
|
|
|
54
54
|
|
|
55
55
|
| 页面 | 完整链接 | 功能说明 |
|
|
56
56
|
|------|----------|----------|
|
|
57
|
-
| 作品数据 | `https://www.siluzan.com/v3/foreign_trade/cso/Workdata` | 作品维度统计、图表、明细(对应 CLI `report fetch`) |
|
|
58
|
-
| 账户数据 | `https://www.siluzan.com/v3/foreign_trade/cso/accountdata` | 账户维度汇总数据、趋势图表 |
|
|
59
|
-
| 绩效报表 | `https://www.siluzan.com/v3/foreign_trade/cso/table` | 多维度绩效报表、PDF 导出(对应 CLI `report fetch/records/download`) |
|
|
57
|
+
| 作品数据 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/Workdata` | 作品维度统计、图表、明细(对应 CLI `report fetch`) |
|
|
58
|
+
| 账户数据 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/accountdata` | 账户维度汇总数据、趋势图表 |
|
|
59
|
+
| 绩效报表 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/table` | 多维度绩效报表、PDF 导出(对应 CLI `report fetch/records/download`) |
|
|
60
60
|
|
|
61
61
|
---
|
|
62
62
|
|
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
|
|
65
65
|
| 页面 | 完整链接 | 功能说明 |
|
|
66
66
|
|------|----------|----------|
|
|
67
|
-
| 内容规划 | `https://www.siluzan.com/v3/foreign_trade/cso/planning` | AI 内容规划列表、生成规划、企业维度筛选(对应 CLI `planning`) |
|
|
68
|
-
| 营销首页 | `https://www.siluzan.com/v3/foreign_trade/cso/ContentHome` | 工作台总览:账号数、视频数、最新评论与视频 |
|
|
67
|
+
| 内容规划 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/planning` | AI 内容规划列表、生成规划、企业维度筛选(对应 CLI `planning`) |
|
|
68
|
+
| 营销首页 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/ContentHome` | 工作台总览:账号数、视频数、最新评论与视频 |
|
|
69
69
|
|
|
70
|
-
| 话题组 | `https://www.siluzan.com/v3/foreign_trade/cso/TopicGroup` | 话题组维护、话题内容管理 |
|
|
70
|
+
| 话题组 | `https://www-ci.siluzan.com/v3/foreign_trade/cso/TopicGroup` | 话题组维护、话题内容管理 |
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
---
|
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
#Requires -Version 5.1
|
|
2
2
|
# =============================================================================
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# 使用方式:irm https://skill.siluzan.com/install.ps1 | iex
|
|
3
|
+
# siluzan-cso-cli - One-click install script (PowerShell)
|
|
4
|
+
# Supported: Windows 10/11 (PowerShell 5.1+ or PowerShell 7+)
|
|
6
5
|
# =============================================================================
|
|
7
6
|
|
|
8
7
|
$ErrorActionPreference = 'Stop'
|
|
9
|
-
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
10
8
|
|
|
11
|
-
#
|
|
9
|
+
# -- Package info (injected at build time) ------------------------------------
|
|
10
|
+
$PKG_NAME = 'siluzan-cso-cli'
|
|
11
|
+
$CLI_BIN = 'siluzan-cso'
|
|
12
|
+
$SKILL_LABEL = 'Siluzan CSO'
|
|
13
|
+
$INSTALL_CMD = 'npm install -g siluzan-cso-cli@beta'
|
|
14
|
+
$PERMISSION_HINT = 'Assets + CSO (Content Publishing)'
|
|
15
|
+
$WEB_BASE = 'https://www-ci.siluzan.com'
|
|
16
|
+
$API_KEY_URL = "$WEB_BASE/v3/foreign_trade/settings/apiKeyManagement"
|
|
17
|
+
|
|
18
|
+
# -- Constants ----------------------------------------------------------------
|
|
12
19
|
$NODE_MAJOR_MIN = 18
|
|
13
|
-
$WEB_BASE = 'https://www.siluzan.com'
|
|
14
|
-
$API_KEY_URL = "$WEB_BASE/v3/foreign_trade/settings/apiKeyManagement"
|
|
15
20
|
$NPM_MIRROR = 'https://registry.npmmirror.com'
|
|
16
21
|
|
|
17
|
-
#
|
|
22
|
+
# -- Helpers ------------------------------------------------------------------
|
|
18
23
|
function Write-Info { param([string]$Msg) Write-Host "[OK] $Msg" -ForegroundColor Green }
|
|
19
24
|
function Write-Warn { param([string]$Msg) Write-Host "[!] $Msg" -ForegroundColor Yellow }
|
|
20
25
|
function Write-Err { param([string]$Msg) Write-Host "[X] $Msg" -ForegroundColor Red }
|
|
@@ -32,7 +37,7 @@ function Refresh-Path {
|
|
|
32
37
|
$env:Path = "$machinePath;$userPath"
|
|
33
38
|
}
|
|
34
39
|
|
|
35
|
-
#
|
|
40
|
+
# -- Node.js ------------------------------------------------------------------
|
|
36
41
|
function Test-NodeVersion {
|
|
37
42
|
try {
|
|
38
43
|
$nodeCmd = Get-Command node -ErrorAction SilentlyContinue
|
|
@@ -49,15 +54,13 @@ function Get-NodeVersionString {
|
|
|
49
54
|
try { return (node -v) } catch { return 'N/A' }
|
|
50
55
|
}
|
|
51
56
|
|
|
52
|
-
# ── Node.js 安装 ─────────────────────────────────────────────────────────────
|
|
53
57
|
function Install-NodeJS {
|
|
54
58
|
$hasWinget = $null -ne (Get-Command winget -ErrorAction SilentlyContinue)
|
|
55
|
-
|
|
56
59
|
if ($hasWinget) {
|
|
57
|
-
Write-Info
|
|
60
|
+
Write-Info 'Installing Node.js LTS via winget...'
|
|
58
61
|
winget install -e --id OpenJS.NodeJS.LTS --silent --accept-package-agreements --accept-source-agreements
|
|
59
62
|
if ($LASTEXITCODE -ne 0) {
|
|
60
|
-
Write-Warn
|
|
63
|
+
Write-Warn 'winget returned non-zero, trying fallback...'
|
|
61
64
|
Install-NodeFallback
|
|
62
65
|
return
|
|
63
66
|
}
|
|
@@ -65,13 +68,10 @@ function Install-NodeJS {
|
|
|
65
68
|
Install-NodeFallback
|
|
66
69
|
return
|
|
67
70
|
}
|
|
68
|
-
|
|
69
71
|
Refresh-Path
|
|
70
|
-
|
|
71
72
|
if (-not (Test-NodeVersion)) {
|
|
72
|
-
Write-Warn
|
|
73
|
-
$
|
|
74
|
-
$nodePath = "$progFiles\nodejs"
|
|
73
|
+
Write-Warn 'Node.js not found after PATH refresh, locating install dir...'
|
|
74
|
+
$nodePath = "$env:ProgramFiles\nodejs"
|
|
75
75
|
if (Test-Path "$nodePath\node.exe") {
|
|
76
76
|
$env:Path = "$nodePath;$env:Path"
|
|
77
77
|
}
|
|
@@ -79,42 +79,41 @@ function Install-NodeJS {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
function Install-NodeFallback {
|
|
82
|
-
Write-Err
|
|
82
|
+
Write-Err 'Cannot auto-install Node.js'
|
|
83
83
|
Write-Host ''
|
|
84
|
-
Write-Host
|
|
84
|
+
Write-Host ' Please install Node.js manually:' -ForegroundColor Cyan
|
|
85
85
|
Write-Host ' https://nodejs.org/en/download/'
|
|
86
86
|
Write-Host ''
|
|
87
|
-
Write-Host
|
|
88
|
-
throw
|
|
87
|
+
Write-Host ' After installation, reopen PowerShell and run this script again.'
|
|
88
|
+
throw 'Node.js is required'
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
#
|
|
91
|
+
# -- Main ---------------------------------------------------------------------
|
|
92
92
|
function Main {
|
|
93
93
|
Write-Host ''
|
|
94
94
|
Write-Host '+---------------------------------------------+' -ForegroundColor White
|
|
95
|
-
Write-Host
|
|
95
|
+
Write-Host "| $SKILL_LABEL -- Install |" -ForegroundColor White
|
|
96
96
|
Write-Host '+---------------------------------------------+' -ForegroundColor White
|
|
97
97
|
Write-Host ''
|
|
98
98
|
|
|
99
|
-
#
|
|
100
|
-
Write-Step
|
|
99
|
+
# Step 1: Environment check
|
|
100
|
+
Write-Step 'Step 1/4: Environment check'
|
|
101
101
|
|
|
102
102
|
if (Test-NodeVersion) {
|
|
103
|
-
Write-Info "Node.js $(Get-NodeVersionString)
|
|
103
|
+
Write-Info "Node.js $(Get-NodeVersionString) found"
|
|
104
104
|
} else {
|
|
105
105
|
$nodeCmd = Get-Command node -ErrorAction SilentlyContinue
|
|
106
106
|
if ($nodeCmd) {
|
|
107
|
-
Write-Warn "Node.js $(Get-NodeVersionString)
|
|
107
|
+
Write-Warn "Node.js $(Get-NodeVersionString) is too old (need >= $NODE_MAJOR_MIN), upgrading..."
|
|
108
108
|
} else {
|
|
109
|
-
Write-Warn
|
|
109
|
+
Write-Warn 'Node.js not found, installing...'
|
|
110
110
|
}
|
|
111
111
|
Install-NodeJS
|
|
112
|
-
|
|
113
112
|
if (-not (Test-NodeVersion)) {
|
|
114
|
-
Write-Err
|
|
113
|
+
Write-Err 'Node.js installation failed. Please install manually: https://nodejs.org/'
|
|
115
114
|
return
|
|
116
115
|
}
|
|
117
|
-
Write-Info "Node.js $(Get-NodeVersionString)
|
|
116
|
+
Write-Info "Node.js $(Get-NodeVersionString) installed"
|
|
118
117
|
}
|
|
119
118
|
|
|
120
119
|
$npmCmd = Get-Command npm -ErrorAction SilentlyContinue
|
|
@@ -123,131 +122,77 @@ function Main {
|
|
|
123
122
|
$npmCmd = Get-Command npm -ErrorAction SilentlyContinue
|
|
124
123
|
}
|
|
125
124
|
if (-not $npmCmd) {
|
|
126
|
-
Write-Err
|
|
125
|
+
Write-Err 'npm not found (Node.js installation may be incomplete)'
|
|
127
126
|
return
|
|
128
127
|
}
|
|
129
|
-
Write-Info
|
|
128
|
+
Write-Info 'npm ready'
|
|
130
129
|
|
|
131
|
-
# 切换 npm 源到国内镜像(加速下载)
|
|
132
130
|
$currentRegistry = ''
|
|
133
131
|
try { $currentRegistry = (npm config get registry 2>$null).Trim() } catch {}
|
|
134
132
|
if ($currentRegistry -ne $NPM_MIRROR -and $currentRegistry -ne "$NPM_MIRROR/") {
|
|
135
|
-
Write-Info
|
|
133
|
+
Write-Info 'Switching npm registry to China mirror for faster downloads...'
|
|
136
134
|
npm config set registry $NPM_MIRROR
|
|
137
|
-
Write-Info "npm registry
|
|
135
|
+
Write-Info "npm registry set to $NPM_MIRROR"
|
|
138
136
|
} else {
|
|
139
|
-
Write-Info
|
|
137
|
+
Write-Info 'npm registry already set to China mirror'
|
|
140
138
|
}
|
|
141
139
|
|
|
142
|
-
#
|
|
143
|
-
Write-Step "
|
|
144
|
-
Write-Host " 1) CSO — 内容发布(视频/图文 → 抖音/视频号/YouTube/TikTok 等)"
|
|
145
|
-
Write-Host " 2) TSO — 广告管理(查账户/余额/消耗/充值/开户/MCC 等)"
|
|
146
|
-
Write-Host " 3) 两者都安装"
|
|
147
|
-
Write-Host ''
|
|
148
|
-
$skillChoice = Read-Input " 请选择 [1/2/3,默认 3]: "
|
|
149
|
-
if ([string]::IsNullOrWhiteSpace($skillChoice)) { $skillChoice = '3' }
|
|
150
|
-
|
|
151
|
-
$installCso = $false
|
|
152
|
-
$installTso = $false
|
|
153
|
-
switch ($skillChoice) {
|
|
154
|
-
'1' { $installCso = $true }
|
|
155
|
-
'2' { $installTso = $true }
|
|
156
|
-
default { $installCso = $true; $installTso = $true }
|
|
157
|
-
}
|
|
140
|
+
# Step 2: Install CLI
|
|
141
|
+
Write-Step "Step 2/4: Install $PKG_NAME"
|
|
158
142
|
|
|
159
|
-
|
|
160
|
-
|
|
143
|
+
Write-Info "Running: $INSTALL_CMD"
|
|
144
|
+
Invoke-Expression $INSTALL_CMD
|
|
145
|
+
if ($LASTEXITCODE -ne 0) { Write-Err "$INSTALL_CMD failed"; return }
|
|
146
|
+
Write-Info "$PKG_NAME installed"
|
|
161
147
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
npm install -g siluzan-cso-cli
|
|
165
|
-
if ($LASTEXITCODE -ne 0) { Write-Err "安装 siluzan-cso-cli 失败"; return }
|
|
166
|
-
Write-Info "注册 CSO Skill 到所有平台全局目录..."
|
|
167
|
-
siluzan-cso init --global --force
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if ($installTso) {
|
|
171
|
-
Write-Info "安装 siluzan-tso-cli..."
|
|
172
|
-
npm install -g siluzan-tso-cli
|
|
173
|
-
if ($LASTEXITCODE -ne 0) { Write-Err "安装 siluzan-tso-cli 失败"; return }
|
|
174
|
-
Write-Info "注册 TSO Skill 到所有平台全局目录..."
|
|
175
|
-
siluzan-tso init --global --force
|
|
176
|
-
}
|
|
148
|
+
Write-Info 'Registering Skill to all AI platform global directories...'
|
|
149
|
+
Invoke-Expression "$CLI_BIN init --global --force"
|
|
177
150
|
|
|
178
|
-
#
|
|
179
|
-
Write-Step
|
|
151
|
+
# Step 3: Configure API Key
|
|
152
|
+
Write-Step 'Step 3/4: Configure API Key'
|
|
180
153
|
Write-Host ''
|
|
181
|
-
Write-Host
|
|
182
|
-
Write-Host
|
|
183
|
-
Write-Host "
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
Write-Host " ③ 勾选权限:素材、CSO(素材中心服务)和 TSO(广告投放服务)"
|
|
187
|
-
} elseif ($installCso) {
|
|
188
|
-
Write-Host " ③ 勾选权限:素材、CSO(素材中心服务)"
|
|
189
|
-
} else {
|
|
190
|
-
Write-Host " ③ 勾选权限:素材、TSO(广告投放服务)"
|
|
191
|
-
}
|
|
192
|
-
Write-Host " ④ 复制生成的 API Key"
|
|
154
|
+
Write-Host ' Opening the API Key management page. In your browser:'
|
|
155
|
+
Write-Host ' 1. Sign up / Log in to your Siluzan account'
|
|
156
|
+
Write-Host " 2. Click 'Create API Key'"
|
|
157
|
+
Write-Host " 3. Select permissions: $PERMISSION_HINT"
|
|
158
|
+
Write-Host ' 4. Copy the generated API Key'
|
|
193
159
|
Write-Host ''
|
|
194
160
|
|
|
195
161
|
try {
|
|
196
162
|
Start-Process $API_KEY_URL
|
|
197
|
-
Write-Info
|
|
163
|
+
Write-Info 'API Key management page opened in browser'
|
|
198
164
|
} catch {
|
|
199
|
-
Write-Warn
|
|
165
|
+
Write-Warn 'Could not open browser automatically. Please visit:'
|
|
200
166
|
Write-Host " $API_KEY_URL" -ForegroundColor Cyan
|
|
201
167
|
}
|
|
202
168
|
|
|
203
169
|
Write-Host ''
|
|
204
|
-
$apiKey = Read-Input
|
|
170
|
+
$apiKey = Read-Input ' Paste API Key (press Enter to skip): '
|
|
205
171
|
|
|
206
172
|
if (-not [string]::IsNullOrWhiteSpace($apiKey)) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
if ($installTso) {
|
|
211
|
-
siluzan-tso login --api-key $apiKey
|
|
212
|
-
}
|
|
213
|
-
Write-Info "API Key 已保存到 ~/.siluzan/config.json"
|
|
173
|
+
Invoke-Expression "$CLI_BIN login --api-key $apiKey"
|
|
174
|
+
Write-Info 'API Key saved to ~/.siluzan/config.json'
|
|
214
175
|
} else {
|
|
215
176
|
Write-Host ''
|
|
216
|
-
Write-Warn
|
|
217
|
-
Write-Host "
|
|
218
|
-
Write-Host
|
|
177
|
+
Write-Warn 'API Key configuration skipped. You can set it later:'
|
|
178
|
+
Write-Host " Option 1: $CLI_BIN login --api-key YOUR_API_KEY"
|
|
179
|
+
Write-Host ' Option 2: $env:SILUZAN_API_KEY = ''YOUR_API_KEY'''
|
|
219
180
|
}
|
|
220
181
|
|
|
221
|
-
#
|
|
222
|
-
Write-Step
|
|
182
|
+
# Step 4: Done
|
|
183
|
+
Write-Step 'Step 4/4: Complete'
|
|
223
184
|
Write-Host ''
|
|
224
|
-
Write-Host "
|
|
185
|
+
Write-Host " $SKILL_LABEL installed successfully!" -ForegroundColor Green
|
|
225
186
|
Write-Host ''
|
|
226
|
-
Write-Host
|
|
187
|
+
Write-Host ' Skill registered to these global directories (all AI assistants):'
|
|
227
188
|
Write-Host ' ~/.cursor/skills/ ~/.claude/skills/ ~/.agents/skills/' -ForegroundColor DarkGray
|
|
228
189
|
Write-Host ' ~/.gemini/skills/ ~/.codex/skills/ ~/.kilo/skills/' -ForegroundColor DarkGray
|
|
229
190
|
Write-Host ' ~/.codeium/windsurf/skills/ ~/.config/opencode/skills/' -ForegroundColor DarkGray
|
|
230
191
|
Write-Host ' ~/.openclaw/skills/ ~/.workbuddy/skills/' -ForegroundColor DarkGray
|
|
231
192
|
Write-Host ''
|
|
232
|
-
Write-Host "
|
|
233
|
-
if ($installCso) {
|
|
234
|
-
Write-Host " siluzan-cso list-accounts # 查看媒体账号"
|
|
235
|
-
Write-Host " siluzan-cso publish --help # 发布内容"
|
|
236
|
-
}
|
|
237
|
-
if ($installTso) {
|
|
238
|
-
Write-Host " siluzan-tso list-accounts # 查看广告账户"
|
|
239
|
-
Write-Host " siluzan-tso balance --help # 查询余额"
|
|
240
|
-
}
|
|
241
|
-
Write-Host ''
|
|
242
|
-
Write-Host " 更新 CLI 与 Skill 文件:"
|
|
243
|
-
if ($installCso) {
|
|
244
|
-
Write-Host " siluzan-cso update"
|
|
245
|
-
}
|
|
246
|
-
if ($installTso) {
|
|
247
|
-
Write-Host " siluzan-tso update"
|
|
248
|
-
}
|
|
193
|
+
Write-Host " Update CLI & Skill files: $CLI_BIN update"
|
|
249
194
|
Write-Host ''
|
|
250
|
-
Write-Info "
|
|
195
|
+
Write-Info "Need help? Visit $WEB_BASE"
|
|
251
196
|
Write-Host ''
|
|
252
197
|
}
|
|
253
198
|
|
|
@@ -1,40 +1,33 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# =============================================================================
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# 使用方式:bash <(curl -fsSL https://skill.siluzan.com/install.sh)
|
|
3
|
+
# siluzan-cso-cli - One-click install script
|
|
4
|
+
# Supported: macOS, Linux, Windows (WSL)
|
|
6
5
|
# =============================================================================
|
|
7
6
|
|
|
8
7
|
set -euo pipefail
|
|
9
8
|
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
# -- Package info (injected at build time) ------------------------------------
|
|
10
|
+
readonly PKG_NAME="siluzan-cso-cli"
|
|
11
|
+
readonly CLI_BIN="siluzan-cso"
|
|
12
|
+
readonly SKILL_LABEL="Siluzan CSO"
|
|
13
|
+
readonly INSTALL_CMD="npm install -g siluzan-cso-cli@beta"
|
|
14
|
+
readonly PERMISSION_HINT="Assets + CSO (Content Publishing)"
|
|
15
|
+
readonly WEB_BASE="https://www-ci.siluzan.com"
|
|
16
|
+
readonly API_KEY_URL="${WEB_BASE}/v3/foreign_trade/settings/apiKeyManagement"
|
|
18
17
|
|
|
18
|
+
# -- Constants ----------------------------------------------------------------
|
|
19
19
|
readonly NODE_MAJOR_MIN=18
|
|
20
|
-
readonly WEB_BASE="https://www.siluzan.com"
|
|
21
|
-
readonly API_KEY_URL="${WEB_BASE}/v3/foreign_trade/settings/apiKeyManagement"
|
|
22
20
|
readonly NPM_MIRROR="https://registry.npmmirror.com"
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
warn() { printf "${YELLOW}[!]${NC} %s\n" "$1"; }
|
|
27
|
-
error() { printf "${RED}[✗]${NC} %s\n" "$1" >&2; }
|
|
28
|
-
step() { printf "\n${BOLD}── 步骤 %s ──${NC}\n" "$1"; }
|
|
22
|
+
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
|
|
23
|
+
CYAN='\033[0;36m'; BOLD='\033[1m'; DIM='\033[2m'; NC='\033[0m'
|
|
29
24
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
echo "$val"
|
|
35
|
-
}
|
|
25
|
+
info() { printf "${GREEN}[OK]${NC} %s\n" "$1"; }
|
|
26
|
+
warn() { printf "${YELLOW}[!]${NC} %s\n" "$1"; }
|
|
27
|
+
error() { printf "${RED}[X]${NC} %s\n" "$1" >&2; }
|
|
28
|
+
step() { printf "\n${BOLD}-- %s --${NC}\n" "$1"; }
|
|
36
29
|
|
|
37
|
-
#
|
|
30
|
+
# -- Detect OS ----------------------------------------------------------------
|
|
38
31
|
detect_os() {
|
|
39
32
|
local uname_out
|
|
40
33
|
uname_out=$(uname -s 2>/dev/null || echo "Unknown")
|
|
@@ -46,10 +39,9 @@ detect_os() {
|
|
|
46
39
|
esac
|
|
47
40
|
}
|
|
48
41
|
|
|
49
|
-
#
|
|
42
|
+
# -- Open URL in browser ------------------------------------------------------
|
|
50
43
|
open_url() {
|
|
51
|
-
local url="$1"
|
|
52
|
-
local os_type
|
|
44
|
+
local url="$1" os_type
|
|
53
45
|
os_type=$(detect_os)
|
|
54
46
|
case "$os_type" in
|
|
55
47
|
macos) open "$url" 2>/dev/null && return 0 ;;
|
|
@@ -59,94 +51,85 @@ open_url() {
|
|
|
59
51
|
return 1
|
|
60
52
|
}
|
|
61
53
|
|
|
62
|
-
#
|
|
54
|
+
# -- Node.js ------------------------------------------------------------------
|
|
63
55
|
node_version_ok() {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
local version major
|
|
68
|
-
version=$(node -v | tr -d 'v')
|
|
69
|
-
major=$(echo "$version" | cut -d. -f1)
|
|
56
|
+
command -v node >/dev/null 2>&1 || return 1
|
|
57
|
+
local major
|
|
58
|
+
major=$(node -v | tr -d 'v' | cut -d. -f1)
|
|
70
59
|
[ "$major" -ge "$NODE_MAJOR_MIN" ]
|
|
71
60
|
}
|
|
72
61
|
|
|
73
62
|
install_node() {
|
|
74
63
|
local os_type
|
|
75
64
|
os_type=$(detect_os)
|
|
76
|
-
|
|
77
65
|
case "$os_type" in
|
|
78
66
|
macos)
|
|
79
67
|
if command -v brew >/dev/null 2>&1; then
|
|
80
|
-
info "
|
|
68
|
+
info "Installing Node.js LTS via Homebrew..."
|
|
81
69
|
brew install node@22
|
|
82
70
|
brew link --overwrite node@22 2>/dev/null || true
|
|
83
71
|
else
|
|
84
|
-
info "
|
|
72
|
+
info "Installing Node.js LTS via install-node.vercel.app..."
|
|
85
73
|
curl -fsSL https://install-node.vercel.app/lts | bash -s -- --yes
|
|
86
74
|
fi
|
|
87
75
|
;;
|
|
88
76
|
linux)
|
|
89
77
|
if command -v apt-get >/dev/null 2>&1; then
|
|
90
|
-
info "
|
|
78
|
+
info "Installing Node.js 22.x via NodeSource (apt)..."
|
|
91
79
|
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
|
|
92
80
|
sudo apt-get install -y nodejs
|
|
93
81
|
elif command -v yum >/dev/null 2>&1; then
|
|
94
|
-
info "
|
|
82
|
+
info "Installing Node.js 22.x via NodeSource (yum)..."
|
|
95
83
|
curl -fsSL https://rpm.nodesource.com/setup_22.x | sudo -E bash -
|
|
96
84
|
sudo yum install -y nodejs
|
|
97
85
|
else
|
|
98
|
-
info "
|
|
86
|
+
info "Installing Node.js LTS via install-node.vercel.app..."
|
|
99
87
|
curl -fsSL https://install-node.vercel.app/lts | bash -s -- --yes
|
|
100
88
|
fi
|
|
101
89
|
;;
|
|
102
90
|
gitbash)
|
|
103
|
-
error "Git Bash
|
|
104
|
-
echo ""
|
|
105
|
-
echo " 请使用以下方式之一安装:"
|
|
106
|
-
echo " 1. 在 PowerShell 中运行:irm https://skill.siluzan.com/install.ps1 | iex"
|
|
107
|
-
echo " 2. 手动下载安装:https://nodejs.org/en/download/"
|
|
108
|
-
echo ""
|
|
91
|
+
error "Cannot auto-install Node.js in Git Bash. Please use the PowerShell script or install manually."
|
|
92
|
+
echo " https://nodejs.org/en/download/"
|
|
109
93
|
exit 1
|
|
110
94
|
;;
|
|
111
95
|
*)
|
|
112
|
-
error "
|
|
96
|
+
error "Unsupported OS. Please install Node.js >= ${NODE_MAJOR_MIN} manually:"
|
|
113
97
|
echo " https://nodejs.org/en/download/"
|
|
114
98
|
exit 1
|
|
115
99
|
;;
|
|
116
100
|
esac
|
|
117
101
|
|
|
118
|
-
# 刷新 PATH(某些安装方式需要)
|
|
119
102
|
export PATH="$HOME/.local/bin:$HOME/.nodejs/bin:/usr/local/bin:$PATH"
|
|
120
103
|
hash -r 2>/dev/null || true
|
|
121
104
|
|
|
122
105
|
if ! node_version_ok; then
|
|
123
|
-
error "Node.js
|
|
106
|
+
error "Node.js installation failed. Please install manually:"
|
|
124
107
|
echo " https://nodejs.org/en/download/"
|
|
125
108
|
exit 1
|
|
126
109
|
fi
|
|
127
110
|
}
|
|
128
111
|
|
|
129
|
-
#
|
|
112
|
+
# -- Main ---------------------------------------------------------------------
|
|
130
113
|
main() {
|
|
131
114
|
echo ""
|
|
132
|
-
echo -e "${BOLD}
|
|
133
|
-
echo -e "${BOLD}
|
|
134
|
-
echo -e "${BOLD}
|
|
115
|
+
echo -e "${BOLD}+---------------------------------------------+${NC}"
|
|
116
|
+
echo -e "${BOLD}| ${SKILL_LABEL} -- Install |${NC}"
|
|
117
|
+
echo -e "${BOLD}+---------------------------------------------+${NC}"
|
|
135
118
|
echo ""
|
|
136
119
|
|
|
137
|
-
#
|
|
138
|
-
step "1/
|
|
120
|
+
# Step 1: Environment check
|
|
121
|
+
step "Step 1/4: Environment check"
|
|
139
122
|
|
|
140
123
|
if node_version_ok; then
|
|
141
|
-
info "Node.js $(node -v)
|
|
124
|
+
info "Node.js $(node -v) found"
|
|
142
125
|
else
|
|
143
126
|
if command -v node >/dev/null 2>&1; then
|
|
144
|
-
warn "Node.js $(node -v)
|
|
127
|
+
warn "Node.js $(node -v) is too old (need >= ${NODE_MAJOR_MIN}), upgrading..."
|
|
145
128
|
else
|
|
146
|
-
warn "
|
|
129
|
+
warn "Node.js not found, installing..."
|
|
147
130
|
fi
|
|
148
131
|
install_node
|
|
149
|
-
info "Node.js $(node -v)
|
|
132
|
+
info "Node.js $(node -v) installed"
|
|
150
133
|
fi
|
|
151
134
|
|
|
152
135
|
if command -v pnpm >/dev/null 2>&1; then
|
|
@@ -154,120 +137,77 @@ main() {
|
|
|
154
137
|
elif command -v npm >/dev/null 2>&1; then
|
|
155
138
|
PKG_MANAGER="npm"
|
|
156
139
|
else
|
|
157
|
-
error "npm
|
|
140
|
+
error "npm not found (Node.js installation may be incomplete)"
|
|
158
141
|
exit 1
|
|
159
142
|
fi
|
|
160
|
-
info "$PKG_MANAGER
|
|
143
|
+
info "$PKG_MANAGER ready"
|
|
161
144
|
|
|
162
|
-
# 切换 npm 源到国内镜像(加速下载)
|
|
163
145
|
local current_registry
|
|
164
146
|
current_registry=$(npm config get registry 2>/dev/null || echo "")
|
|
165
147
|
if [ "$current_registry" != "$NPM_MIRROR" ] && [ "$current_registry" != "${NPM_MIRROR}/" ]; then
|
|
166
|
-
info "
|
|
148
|
+
info "Switching npm registry to China mirror for faster downloads..."
|
|
167
149
|
npm config set registry "$NPM_MIRROR"
|
|
168
|
-
info "npm registry
|
|
150
|
+
info "npm registry set to $NPM_MIRROR"
|
|
169
151
|
else
|
|
170
|
-
info "npm registry
|
|
152
|
+
info "npm registry already set to China mirror"
|
|
171
153
|
fi
|
|
172
154
|
|
|
173
|
-
#
|
|
174
|
-
step "2/
|
|
175
|
-
echo " 1) CSO — 内容发布(视频/图文 → 抖音/视频号/YouTube/TikTok 等)"
|
|
176
|
-
echo " 2) TSO — 广告管理(查账户/余额/消耗/充值/开户/MCC 等)"
|
|
177
|
-
echo " 3) 两者都安装"
|
|
178
|
-
echo ""
|
|
179
|
-
local skill_choice
|
|
180
|
-
skill_choice=$(read_input " 请选择 [1/2/3,默认 3]: ")
|
|
181
|
-
: "${skill_choice:=3}"
|
|
182
|
-
|
|
183
|
-
local install_cso=0 install_tso=0
|
|
184
|
-
case "$skill_choice" in
|
|
185
|
-
1) install_cso=1 ;;
|
|
186
|
-
2) install_tso=1 ;;
|
|
187
|
-
*) install_cso=1; install_tso=1 ;;
|
|
188
|
-
esac
|
|
155
|
+
# Step 2: Install CLI
|
|
156
|
+
step "Step 2/4: Install ${PKG_NAME}"
|
|
189
157
|
|
|
190
|
-
|
|
191
|
-
|
|
158
|
+
info "Running: ${INSTALL_CMD}"
|
|
159
|
+
$PKG_MANAGER install -g ${PKG_NAME}$(echo "${INSTALL_CMD}" | grep -o '@[^ ]*' || true)
|
|
160
|
+
info "${PKG_NAME} installed"
|
|
192
161
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
$PKG_MANAGER install -g siluzan-cso-cli
|
|
196
|
-
info "注册 CSO Skill 到所有平台全局目录..."
|
|
197
|
-
siluzan-cso init --global --force
|
|
198
|
-
fi
|
|
162
|
+
info "Registering Skill to all AI platform global directories..."
|
|
163
|
+
${CLI_BIN} init --global --force
|
|
199
164
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
$PKG_MANAGER install -g siluzan-tso-cli
|
|
203
|
-
info "注册 TSO Skill 到所有平台全局目录..."
|
|
204
|
-
siluzan-tso init --global --force
|
|
205
|
-
fi
|
|
206
|
-
|
|
207
|
-
# ── 步骤 4:打开浏览器并引导创建 API Key ──
|
|
208
|
-
step "4/5:配置 API Key"
|
|
165
|
+
# Step 3: Configure API Key
|
|
166
|
+
step "Step 3/4: Configure API Key"
|
|
209
167
|
echo ""
|
|
210
|
-
echo "
|
|
211
|
-
echo "
|
|
212
|
-
echo "
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
elif [ "$install_cso" -eq 1 ]; then
|
|
216
|
-
echo " ③ 勾选权限:素材、CSO(素材中心服务)"
|
|
217
|
-
else
|
|
218
|
-
echo " ③ 勾选权限:素材、TSO(广告投放服务)"
|
|
219
|
-
fi
|
|
220
|
-
echo " ④ 复制生成的 API Key"
|
|
168
|
+
echo " Opening the API Key management page. In your browser:"
|
|
169
|
+
echo " 1. Sign up / Log in to your Siluzan account"
|
|
170
|
+
echo " 2. Click 'Create API Key'"
|
|
171
|
+
echo " 3. Select permissions: ${PERMISSION_HINT}"
|
|
172
|
+
echo " 4. Copy the generated API Key"
|
|
221
173
|
echo ""
|
|
222
174
|
|
|
223
175
|
if ! open_url "$API_KEY_URL"; then
|
|
224
|
-
warn "
|
|
176
|
+
warn "Could not open browser automatically. Please visit:"
|
|
225
177
|
echo -e " ${CYAN}${API_KEY_URL}${NC}"
|
|
226
178
|
else
|
|
227
|
-
info "
|
|
179
|
+
info "API Key management page opened in browser"
|
|
228
180
|
fi
|
|
229
181
|
|
|
230
182
|
echo ""
|
|
231
|
-
|
|
232
|
-
api_key
|
|
183
|
+
printf " Paste API Key (press Enter to skip): "
|
|
184
|
+
local api_key=""
|
|
185
|
+
read -r api_key < /dev/tty 2>/dev/null || read -r api_key
|
|
233
186
|
|
|
234
187
|
if [ -n "$api_key" ]; then
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
fi
|
|
238
|
-
if [ "$install_tso" -eq 1 ]; then
|
|
239
|
-
siluzan-tso login --api-key "$api_key"
|
|
240
|
-
fi
|
|
241
|
-
info "API Key 已保存到 ~/.siluzan/config.json"
|
|
188
|
+
${CLI_BIN} login --api-key "$api_key"
|
|
189
|
+
info "API Key saved to ~/.siluzan/config.json"
|
|
242
190
|
else
|
|
243
191
|
echo ""
|
|
244
|
-
warn "
|
|
245
|
-
echo "
|
|
246
|
-
echo "
|
|
192
|
+
warn "API Key configuration skipped. You can set it later:"
|
|
193
|
+
echo " Option 1: ${CLI_BIN} login --api-key YOUR_API_KEY"
|
|
194
|
+
echo " Option 2: export SILUZAN_API_KEY=YOUR_API_KEY"
|
|
247
195
|
fi
|
|
248
196
|
|
|
249
|
-
#
|
|
250
|
-
step "
|
|
197
|
+
# Step 4: Done
|
|
198
|
+
step "Step 4/4: Complete"
|
|
251
199
|
echo ""
|
|
252
|
-
echo -e " ${GREEN}
|
|
200
|
+
echo -e " ${GREEN}${SKILL_LABEL} installed successfully!${NC}"
|
|
253
201
|
echo ""
|
|
254
|
-
echo "
|
|
202
|
+
echo " Skill registered to these global directories (all AI assistants):"
|
|
255
203
|
echo -e " ${DIM}~/.cursor/skills/ ~/.claude/skills/ ~/.agents/skills/"
|
|
256
204
|
echo -e " ~/.gemini/skills/ ~/.codex/skills/ ~/.kilo/skills/"
|
|
257
|
-
echo -e " ~/.windsurf/skills/
|
|
205
|
+
echo -e " ~/.codeium/windsurf/skills/ ~/.config/opencode/skills/"
|
|
258
206
|
echo -e " ~/.openclaw/skills/ ~/.workbuddy/skills/${NC}"
|
|
259
207
|
echo ""
|
|
260
|
-
echo "
|
|
261
|
-
[ "$install_cso" -eq 1 ] && echo " siluzan-cso list-accounts # 查看媒体账号"
|
|
262
|
-
[ "$install_cso" -eq 1 ] && echo " siluzan-cso publish --help # 发布内容"
|
|
263
|
-
[ "$install_tso" -eq 1 ] && echo " siluzan-tso list-accounts # 查看广告账户"
|
|
264
|
-
[ "$install_tso" -eq 1 ] && echo " siluzan-tso balance --help # 查询余额"
|
|
265
|
-
echo ""
|
|
266
|
-
echo " 更新 CLI 与 Skill 文件:"
|
|
267
|
-
[ "$install_cso" -eq 1 ] && echo " siluzan-cso update"
|
|
268
|
-
[ "$install_tso" -eq 1 ] && echo " siluzan-tso update"
|
|
208
|
+
echo " Update CLI & Skill files: ${CLI_BIN} update"
|
|
269
209
|
echo ""
|
|
270
|
-
info "
|
|
210
|
+
info "Need help? Visit ${WEB_BASE}"
|
|
271
211
|
echo ""
|
|
272
212
|
}
|
|
273
213
|
|
package/package.json
CHANGED