| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #!/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('');
|