diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 4b341016..8919cbc9 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -4,7 +4,7 @@ import Unocss from 'unocss/vite' import { markdownConfig } from './config/markdown' import { dirname, resolve } from 'node:path' import { fileURLToPath } from 'node:url' -import { mkdirSync, readFileSync, writeFileSync } from 'node:fs' +import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs' import { execSync } from 'node:child_process' import { localesConfig } from './config/locales' import { withMermaid } from 'vitepress-plugin-mermaid' @@ -83,11 +83,43 @@ export default defineConfig( }, buildEnd(siteConfig) { - const skillsDir = resolve(__dirname, '../../skills') const outSkillDir = resolve(siteConfig.outDir, 'skill') mkdirSync(outSkillDir, { recursive: true }) - execSync(`zip -r "${outSkillDir}/longbridge.zip" longbridge`, { cwd: skillsDir }) - console.log('✓ skill/longbridge.zip generated') + + // Clone longbridge/skills@main and pack zips. + // Fail the build if the clone or `skills/` directory is missing. + const tmpDir = resolve(__dirname, '../../.tmp-longbridge-skills') + rmSync(tmpDir, { recursive: true, force: true }) + try { + execSync( + `git clone --depth 1 --branch main https://github.com/longbridge/skills.git "${tmpDir}"`, + { stdio: 'inherit' } + ) + } catch (err) { + throw new Error( + `Failed to clone longbridge/skills@main: ${(err as Error).message}` + ) + } + const skillsSrcDir = resolve(tmpDir, 'skills') + if (!existsSync(skillsSrcDir)) { + throw new Error( + `longbridge/skills@main is missing the "skills/" directory; cannot build skill zips` + ) + } + + // Pack all skills into longbridge-all.zip + execSync(`zip -r "${outSkillDir}/longbridge-all.zip" .`, { cwd: skillsSrcDir }) + console.log('✓ skill/longbridge-all.zip generated from longbridge/skills@main') + + // Pack each skill subdirectory into its own zip + for (const name of readdirSync(skillsSrcDir)) { + if (statSync(resolve(skillsSrcDir, name)).isDirectory()) { + execSync(`zip -r "${outSkillDir}/${name}.zip" "${name}"`, { cwd: skillsSrcDir }) + console.log(`✓ skill/${name}.zip generated`) + } + } + + rmSync(tmpDir, { recursive: true, force: true }) // Region URL rewriting for static assets if (regionCfg?.siteHostname && regionCfg.siteHostname !== 'https://open.longbridge.com') { diff --git a/docs/.vitepress/theme/components/Skill.vue b/docs/.vitepress/theme/components/Skill.vue index ceabf2e8..ae7c8772 100644 --- a/docs/.vitepress/theme/components/Skill.vue +++ b/docs/.vitepress/theme/components/Skill.vue @@ -2571,7 +2571,7 @@ const currentMessages = computed(() => { {{ t.recommended.value }}
{{ t.manualInstallHint.value }}
- + {{ t.downloadZip.value }}diff --git a/docs/en/skill/install/index.md b/docs/en/skill/install/index.md index cd296ba4..48668001 100644 --- a/docs/en/skill/install/index.md +++ b/docs/en/skill/install/index.md @@ -33,13 +33,13 @@ bunx skills add longbridge/developers -g -y **Or download the ZIP and install manually:** -Download [longbridge.zip](https://open.longbridge.com/skill/longbridge.zip) and unzip it, then place the files in your AI tool's Skill directory (Claude Code: `.claude/skills/`, Cursor: paste into the Rules editor, other tools: see the README). +Download [longbridge-all.zip](https://open.longbridge.com/skill/longbridge-all.zip) and unzip it, then place the files in your AI tool's Skill directory (Claude Code: `.claude/skills/`, Cursor: paste into the Rules editor, other tools: see the README). **OpenClaw** — send this message in chat and it handles everything automatically: ``` Install the Longbridge Developers Skill from this zip file: -https://open.longbridge.com/skill/longbridge.zip +https://open.longbridge.com/skill/longbridge-all.zip ``` --- diff --git a/docs/zh-CN/skill/install/index.md b/docs/zh-CN/skill/install/index.md index 96b1b154..1d4a36ff 100644 --- a/docs/zh-CN/skill/install/index.md +++ b/docs/zh-CN/skill/install/index.md @@ -33,13 +33,13 @@ bunx skills add longbridge/developers -g -y **或下载 ZIP 手动安装:** -下载 [longbridge.zip](https://open.longbridge.com/skill/longbridge.zip) 并解压,将文件放入你的 AI 工具指定的 Skill 目录(Claude Code 放 `.claude/skills/`,Cursor 粘贴到 Rules 编辑框,其他工具参考 README)。 +下载 [longbridge-all.zip](https://open.longbridge.com/skill/longbridge-all.zip) 并解压,将文件放入你的 AI 工具指定的 Skill 目录(Claude Code 放 `.claude/skills/`,Cursor 粘贴到 Rules 编辑框,其他工具参考 README)。 **OpenClaw** 直接在对话中发送以下消息,自动完成安装: ``` 从以下 zip 文件安装 Longbridge Developers Skill: -https://open.longbridge.com/skill/longbridge.zip +https://open.longbridge.com/skill/longbridge-all.zip ``` --- diff --git a/docs/zh-HK/skill/install/index.md b/docs/zh-HK/skill/install/index.md index 1c86e11d..8a6f7556 100644 --- a/docs/zh-HK/skill/install/index.md +++ b/docs/zh-HK/skill/install/index.md @@ -33,13 +33,13 @@ bunx skills add longbridge/developers -g -y **或下載 ZIP 手動安裝:** -下載 [longbridge.zip](https://open.longbridge.com/skill/longbridge.zip) 並解壓,將文件放入你的 AI 工具指定的 Skill 目錄(Claude Code 放 `.claude/skills/`,Cursor 貼到 Rules 編輯框,其他工具參考 README)。 +下載 [longbridge-all.zip](https://open.longbridge.com/skill/longbridge-all.zip) 並解壓,將文件放入你的 AI 工具指定的 Skill 目錄(Claude Code 放 `.claude/skills/`,Cursor 貼到 Rules 編輯框,其他工具參考 README)。 **OpenClaw** 直接在對話中發送以下訊息,自動完成安裝: ``` 從以下 zip 文件安裝 Longbridge Developers Skill: -https://open.longbridge.com/skill/longbridge.zip +https://open.longbridge.com/skill/longbridge-all.zip ``` ---