#!/usr/bin/env node /** * Workshop 安装脚本 * 将 workshop.zip 解压后的文件复制到 ~/.openclaw/workspace/ * * 用法: * node install-workshop.js # 安装 * node install-workshop.js --dry-run # 预览模式 */ const fs = require('fs'); const os = require('os'); const path = require('path'); const args = process.argv.slice(2); const DRY_RUN = args.includes('--dry-run'); const SRC_DIR = __dirname; const WORKSPACE_DIR = path.join(os.homedir(), '.openclaw', 'workspace'); const MEMORY_DIR = path.join(WORKSPACE_DIR, 'memory'); console.log(''); console.log('🦐 VOC虾工作坊 安装脚本'); console.log('=================================================='); if (DRY_RUN) console.log(' 📌 预览模式(不会实际复制)'); console.log(''); // 确保目标目录存在 if (!DRY_RUN) { fs.mkdirSync(WORKSPACE_DIR, { recursive: true }); fs.mkdirSync(MEMORY_DIR, { recursive: true }); } let copied = 0; let skipped = 0; // 复制 .md 文件到 workspace const mdFiles = fs.readdirSync(SRC_DIR).filter(f => f.endsWith('.md') && fs.statSync(path.join(SRC_DIR, f)).isFile() ); console.log('── Playbooks + Supporting Docs ──'); for (const f of mdFiles) { const src = path.join(SRC_DIR, f); const dest = path.join(WORKSPACE_DIR, f); const size = fs.statSync(src).size; const sizeKB = (size / 1024).toFixed(1); if (DRY_RUN) { console.log(` 📄 ${f} (${sizeKB} KB) → ${dest}`); } else { fs.copyFileSync(src, dest); console.log(` ✅ ${f} (${sizeKB} KB)`); } copied++; } console.log(''); // 复制 memory-templates const memSrcDir = path.join(SRC_DIR, 'memory-templates'); if (fs.existsSync(memSrcDir)) { const jsonFiles = fs.readdirSync(memSrcDir).filter(f => f.endsWith('.json') && fs.statSync(path.join(memSrcDir, f)).isFile() ); console.log('── Memory Templates ──'); for (const f of jsonFiles) { const src = path.join(memSrcDir, f); const dest = path.join(MEMORY_DIR, f); const size = fs.statSync(src).size; const sizeKB = (size / 1024).toFixed(1); if (DRY_RUN) { console.log(` 📄 ${f} (${sizeKB} KB) → ${dest}`); } else { fs.copyFileSync(src, dest); console.log(` ✅ ${f} (${sizeKB} KB)`); } copied++; } console.log(''); } else { console.log(' ⚠️ memory-templates/ 目录不存在,跳过'); console.log(''); } console.log('=================================================='); if (DRY_RUN) { console.log(` 📌 预览完成:${copied} 个文件待安装`); console.log(' 去掉 --dry-run 执行实际安装'); } else { console.log(` ✅ 安装完成!共 ${copied} 个文件`); console.log(` 📂 ${WORKSPACE_DIR}`); console.log(' 🔄 请重启 OpenClaw gateway 加载新文件'); } console.log('');