Skill: glittering/xhs-skill-pusher (version 1.0.0)

--- name: xhs-skill-pusher description: 小红书内容发布技能 - 规范化cookie管理 + xhs-kit自动化发布 metadata: {"openclaw":{"emoji":"🚀","stage":"production"}} --- # xhs-skill-pusher 基于xhs-kit的小红书内容发布技能，提供**规范化cookie管理**和**自动化发布流程**。 ## 🎯 核心特性 ### ✅ 规范化Cookie管理 - **集中存储**: 所有cookie保存在 `xhs_cookies/` 目录 - **规范命名**: `账号标识_描述_日期.json` 格式 - **自动转换**: 支持原始cookie字符串和JSON格式自动转换 - **状态管理**: `active.json` 软链接指向当前激活cookie ### ✅ 自动化发布流程 - **完整验证**: 状态检查 → debug验证 → 实际发布 - **错误处理**: 清晰的错误提示和恢复建议 - **多账号支持**: 一键切换不同账号 - **定时发布**: 支持定时发布功能 ### ✅ 简单易用 - **无环境变量**: 完全基于文件路径，避免环境变量混乱 - **统一接口**: 一个 `--cookie` 参数解决所有问题 - **透明操作**: 基于实际文件，没有隐藏映射 ## 📦 安装 ### 1. 安装技能 ```bash clawhub install xhs-skill-pusher cd skills/xhs-skill-pusher npm install ``` ### 2. 安装Python依赖 ```bash # 创建虚拟环境 python3 -m venv xhs-env source xhs-env/bin/activate # 安装xhs-kit pip install xhs-kit # 安装Playwright浏览器 playwright install chromium # 安装其他依赖 pip install pillow requests markdown pyyaml ``` ### 3. 初始化Cookie目录 ```bash mkdir -p xhs_cookies/archive ``` ## 🚀 快速开始 ### 1. 保存新Cookie ```bash # 获取cookie字符串后，规范化保存 ./xhs_save_cookie.sh --name new_main --cookie "a1=xxx;webId=yyy;..." --set-active ``` ### 2. 查看所有Cookie ```bash ./xhs_final.sh --list-cookies ``` ### 3. 发布内容 ```bash ./xhs_final.sh --cookie xhs_cookies/active.json --title "标题" --content "内容" --image 图片.jpg ``` ## 📁 项目结构 ``` xhs-skill-pusher/ ├── SKILL.md # 本文档 ├── package.json # Node.js依赖 ├── bin/ │ └── xhs-pusher.mjs # CLI工具 ├── scripts/ # 发布脚本 │ ├── xhs_save_cookie.sh # 保存cookie脚本 │ ├── xhs_final.sh # 主发布脚本 │ ├── xhs_manage.sh # cookie管理脚本 │ └── xhs_simple.sh # 简单发布脚本 ├── xhs_cookies/ # Cookie目录（自动创建） │ ├── active.json # 当前激活cookie（软链接） │ ├── new_main_20260314.json # 示例cookie文件 │ └── archive/ # 归档目录 └── docs/ # 文档 ├── XHS_FINAL_SOLUTION.md # 完整解决方案 └── QUICK_START.md # 快速开始指南 ``` ## 🔧 脚本说明 ### 核心脚本 #### 1. `xhs_save_cookie.sh` - 保存Cookie ```bash # 保存并设置为激活 ./scripts/xhs_save_cookie.sh --name new_main --cookie "a1=xxx;..." --set-active # 从文件保存 ./scripts/xhs_save_cookie.sh --name old_backup --file raw_cookie.txt ``` #### 2. `xhs_final.sh` - 主发布脚本 ```bash # 基本发布 ./scripts/xhs_final.sh --cookie xhs_cookies/active.json --title "..." --image ... # 查看cookie列表 ./scripts/xhs_final.sh --list-cookies # 检查状态 ./scripts/xhs_final.sh --cookie xhs_cookies/active.json --check-status ``` #### 3. `xhs_manage.sh` - Cookie管理 ```bash # 查看所有cookie ./scripts/xhs_manage.sh list # 查看cookie信息 ./scripts/xhs_manage.sh info new_main_20260314 # 切换到指定cookie ./scripts/xhs_manage.sh use new_main # 查看状态 ./scripts/xhs_manage.sh status # 清理过期cookie ./scripts/xhs_manage.sh clean --keep-days 7 ``` ### Node.js CLI工具 #### `xhs-pusher` - 统一CLI接口 ```bash # 查看帮助 node ./bin/xhs-pusher.mjs --help # 管理cookie node ./bin/xhs-pusher.mjs cookie list node ./bin/xhs-pusher.mjs cookie save --name test --cookie "a1=xxx;..." # 发布内容 node ./bin/xhs-pusher.mjs publish --title "..." --content "..." --image ... ``` ## 📋 Cookie命名规范 ### 格式 ``` 账号标识_描述_日期.json ``` ### 字段说明 - **账号标识**: `new`(新账号), `old`(旧账号), `test`(测试), `backup`(备份) - **描述**: `main`(主账号), `backup`(备份), `temp`(临时) - **日期**: `20260314`(年月日), `today`(今天), `yesterday`(昨天) ### 示例 ``` new_main_20260314.json # 新主账号，2026-03-14获取 old_backup_today.json # 旧备份账号，今天获取 test_temp.json # 测试临时账号 ``` ## 🎯 工作流程 ### 获取新Cookie后 ```bash # 1. 规范化保存 ./scripts/xhs_save_cookie.sh --name new_main --cookie "a1=xxx;webId=yyy;..." --set-active # 2. 自动成为激活cookie，可以直接使用 ./scripts/xhs_final.sh --cookie xhs_cookies/active.json --title "测试" --image test.jpg ``` ### 日常发布 ```bash # 使用当前激活cookie发布 ./scripts/xhs_final.sh \ --cookie xhs_cookies/active.json \ --title "每日更新" \ --content "今日内容..." \ --image daily_photo.jpg \ --tag 日常 \ --tag 分享 ``` ### 多账号管理 ```bash # 1. 查看可用cookie ./scripts/xhs_final.sh --list-cookies # 2. 切换到指定cookie ./scripts/xhs_manage.sh use old_backup # 3. 使用切换后的cookie发布 ./scripts/xhs_final.sh --cookie xhs_cookies/active.json --title "..." --image ... ``` ## 🔧 高级功能 ### 定时发布 ```bash ./scripts/xhs_final.sh \ --cookie xhs_cookies/active.json \ --title "定时发布" \ --content "内容" \ --image photo.jpg \ --schedule "2026-03-14T14:00:00+08:00" ``` ### 显示浏览器窗口 ```bash ./scripts/xhs_final.sh \ --cookie xhs_cookies/active.json \ --title "测试" \ --content "内容" \ --image photo.jpg \ --show-browser ``` ### 仅验证不发布 ```bash ./scripts/xhs_final.sh \ --cookie xhs_cookies/active.json \ --title "测试" \ --content "内容" \ --image photo.jpg \ --debug-only ``` ## 🛠️ 维护命令 ### 初始化 ```bash # 创建cookie目录结构 mkdir -p xhs_cookies/archive ``` ### 导入现有Cookie ```bash # 导入工作空间的cookie文件 cp /path/to/cookies.json xhs_cookies/new_main_$(date +%Y%m%d).json # 设置为激活 ln -sf new_main_$(date +%Y%m%d).json xhs_cookies/active.json ``` ### 备份和恢复 ```bash # 备份所有cookie tar -czf xhs_cookies_backup_$(date +%Y%m%d).tar.gz xhs_cookies/ # 恢复备份 tar -xzf xhs_cookies_backup_20260314.tar.gz ``` ## ⚠️ 注意事项 1. **定期检查**: cookie会过期，建议每周检查状态 2. **重要备份**: 重要cookie定期备份到安全位置 3. **命名规范**: 遵循命名规范，便于管理 4. **权限安全**: cookie包含敏感信息，注意文件权限 5. **图片要求**: 建议使用1242x1660像素的图片 ## 🔍 故障排除 ### 常见问题 1. **Cookie过期** ```bash # 重新获取cookie并保存 ./scripts/xhs_save_cookie.sh --name new_main --cookie "新cookie字符串" --set-active ``` 2. **图片不存在** ```bash # 检查图片路径 file image.jpg ls -lh image.jpg ``` 3. **发布失败** ```bash # 先debug验证 ./scripts/xhs_final.sh --cookie xhs_cookies/active.json --title "测试" --image ... --debug-only # 检查登录状态 ./scripts/xhs_final.sh --cookie xhs_cookies/active.json --check-status ``` ### 错误代码 - `ERR_COOKIE_NOT_FOUND`: Cookie文件不存在 - `ERR_LOGIN_FAILED`: 登录状态异常 - `ERR_DEBUG_VALIDATION`: debug验证失败 - `ERR_PUBLISH_FAILED`: 发布失败 ## 📞 支持 ### 快速参考 ```bash # 查看帮助 ./scripts/xhs_final.sh --help # 检查所有cookie ./scripts/xhs_final.sh --list-cookies # 测试cookie有效性 ./scripts/xhs_final.sh --cookie xhs_cookies/active.json --check-status # 测试发布流程 ./scripts/xhs_final.sh --cookie xhs_cookies/active.json --title "测试" --content "测试" --image test.jpg --debug-only ``` ### 更新日志 - **v1.0.0**: 初始版本，规范化cookie管理 + xhs-kit自动化发布 - **功能**: 直接指定cookie、自动格式转换、多账号管理、完整发布流程 ## 🎉 总结 **xhs-skill-pusher** 提供了完整的小红书内容发布解决方案： 1. ✅ **规范化Cookie管理** - 集中存储，规范命名 2. ✅ **自动化发布流程** - 完整验证，错误处理 3. ✅ **简单易用** - 无环境变量，统一接口 4. ✅ **多账号支持** - 一键切换，透明管理 **开始发布吧！** 🚀

path: PUSH_GUIDE.md
content: # 🚀 推送到GitHub指南

## 📋 项目信息

### 基本信息
- **仓库名称**: `xhs-skill-pusher`
- **描述**: 小红书内容发布技能 - 规范化cookie管理 + xhs-kit自动化发布
- **版本**: v1.0.0
- **许可证**: MIT

### 核心特性
1. ✅ **规范化Cookie管理** - 集中存储，规范命名
2. ✅ **自动化发布流程** - 完整验证，错误处理
3. ✅ **简单易用** - 无环境变量，统一接口
4. ✅ **多账号支持** - 一键切换，透明管理

## 📁 项目结构

```
xhs-skill-pusher/
├── bin/xhs-pusher.mjs         # Node.js CLI工具
├── scripts/                   # 发布脚本
├── docs/                      # 完整文档
├── package.json              # Node.js依赖
├── SKILL.md                  # OpenClaw技能文档
└── README.md                 # 项目README
```

## 🛠️ 推送步骤

### 步骤1: 创建GitHub仓库
1. 访问: https://github.com/new
2. 填写信息:
   - **Repository name**: `xhs-skill-pusher`
   - **Description**: `小红书内容发布技能 - 规范化cookie管理 + xhs-kit自动化发布`
   - **Public** (公开) 或 **Private** (私有)
   - 不要初始化README、.gitignore或license

### 步骤2: 设置远程仓库
```bash
cd ~/.openclaw/workspace/xhs-skill-pusher

# 添加远程仓库（替换 YOUR_USERNAME）
git remote add origin https://github.com/YOUR_USERNAME/xhs-skill-pusher.git

# 或使用SSH
git remote add origin [REDACTED_SECRET]:YOUR_USERNAME/xhs-skill-pusher.git
```

### 步骤3: 推送到GitHub
```bash
# 推送代码
git push -u origin main

# 或使用推送脚本
./push_to_github.sh
```

### 步骤4: 验证推送
1. 访问: `https://github.com/YOUR_USERNAME/xhs-skill-pusher`
2. 确认所有文件已上传
3. 检查README.md显示正常

## 📦 发布准备

### 1. 更新版本号
如果需要发布新版本，更新:
- `package.json` 中的 `version` 字段
- `SKILL.md` 中的版本信息
- `README.md` 中的版本说明

### 2. 创建发布标签
```bash
# 创建标签
git tag -a v1.0.0 -m "xhs-skill-pusher v1.0.0: 规范化cookie管理 + xhs-kit自动化发布"

# 推送标签
git push origin v1.0.0
```

### 3. 创建GitHub Release
1. 访问仓库的 **Releases** 页面
2. 点击 **Draft a new release**
3. 选择标签 `v1.0.0`
4. 标题: `xhs-skill-pusher v1.0.0`
5. 描述: 复制 `CHANGELOG.md` 内容（如有）
6. 发布!

## 🔧 后续维护

### 更新代码
```bash
# 拉取最新代码
git pull origin main

# 提交更改
git add .
git commit -m "feat: 描述更改内容"

# 推送更改
git push origin main
```

### 处理合并冲突
```bash
# 拉取并合并
git pull --rebase origin main

# 解决冲突后
git add .
git rebase --continue
git push origin main
```

### 分支管理
```bash
# 创建功能分支
git checkout -b feature/new-feature

# 开发完成后
git add .
git commit -m "feat: 新功能"
git push origin feature/new-feature

# 创建Pull Request
```

## 📄 文档说明

### 主要文档
1. **README.md** - 项目概览和快速开始
2. **SKILL.md** - OpenClaw技能详细文档
3. **docs/QUICK_START.md** - 快速开始指南
4. **docs/XHS_FINAL_SOLUTION.md** - 完整解决方案

### 用户指南
- **安装**: 依赖安装和环境配置
- **使用**: 基本命令和示例
- **管理**: Cookie管理和多账号切换
- **故障排除**: 常见问题和解决方案

## 🎯 项目亮点

### 技术亮点
1. **无环境变量设计** - 完全基于文件路径，避免配置混乱
2. **自动化格式转换** - 支持原始cookie字符串自动转换
3. **完整错误处理** - 清晰的错误提示和恢复建议
4. **多账号透明管理** - 基于文件系统的账号切换

### 用户体验
1. **简单命令** - `--list-cookies`查看，`--cookie`使用
2. **完整验证** - 状态检查 → debug验证 → 实际发布
3. **详细日志** - 彩色输出，步骤清晰
4. **灵活配置** - 支持定时发布、多图片、多标签

## 🤝 贡献指南

### 报告问题
1. 使用GitHub Issues报告bug
2. 提供复现步骤和环境信息
3. 附上相关日志和截图

### 提交代码
1. Fork仓库
2. 创建功能分支
3. 编写测试
4. 提交Pull Request

### 代码规范
- 使用一致的代码风格
- 添加必要的注释
- 更新相关文档
- 确保向后兼容

## 📞 支持

### 文档资源
- 项目文档: `docs/` 目录
- 在线文档: GitHub Pages（可选）
- 示例代码: `examples/` 目录（可选添加）

### 社区支持
- GitHub Issues: 问题反馈
- GitHub Discussions: 讨论交流
- Pull Requests: 代码贡献

---

**项目已准备就绪，可以推送到GitHub！** 🚀

path: README.md
content: # xhs-skill-pusher 🚀

小红书内容发布技能 - 规范化cookie管理 + xhs-kit自动化发布

## 🎯 特性

### ✅ 规范化Cookie管理
- **集中存储**: 所有cookie保存在 `xhs_cookies/` 目录
- **规范命名**: `账号标识_描述_日期.json` 格式
- **自动转换**: 支持原始cookie字符串和JSON格式自动转换
- **状态管理**: `active.json` 软链接指向当前激活cookie

### ✅ 自动化发布流程
- **完整验证**: 状态检查 → debug验证 → 实际发布
- **错误处理**: 清晰的错误提示和恢复建议
- **多账号支持**: 一键切换不同账号
- **定时发布**: 支持定时发布功能

### ✅ 简单易用
- **无环境变量**: 完全基于文件路径，避免环境变量混乱
- **统一接口**: 一个 `--cookie` 参数解决所有问题
- **透明操作**: 基于实际文件，没有隐藏映射

## 🚀 快速开始

### 安装
```bash
# 克隆项目
git clone https://github.com/beizhi-tech/xhs-skill-pusher.git
cd xhs-skill-pusher

# 安装Node.js依赖
npm install

# 安装Python依赖
python3 -m venv xhs-env
source xhs-env/bin/activate
pip install xhs-kit
playwright install chromium
```

### 基本使用
```bash
# 1. 保存新cookie
./scripts/xhs_save_cookie.sh --name new_main --cookie "a1=xxx;webId=yyy;..." --set-active

# 2. 查看所有cookie
./scripts/xhs_final.sh --list-cookies

# 3. 发布内容
./scripts/xhs_final.sh --cookie xhs_cookies/active.json --title "标题" --content "内容" --image 图片.jpg
```

### Node.js CLI
```bash
# 查看帮助
node ./bin/xhs-pusher.mjs --help

# 管理cookie
node ./bin/xhs-pusher.mjs cookie list
node ./bin/xhs-pusher.mjs cookie save --name test --cookie "a1=xxx;..."

# 发布内容
node ./bin/xhs-pusher.mjs publish post --title "..." --content "..." --image ...
```

## 📁 项目结构

```
xhs-skill-pusher/
├── bin/
│   └── xhs-pusher.mjs         # Node.js CLI工具
├── scripts/                   # 发布脚本
│   ├── xhs_save_cookie.sh     # 保存cookie脚本
│   ├── xhs_final.sh           # 主发布脚本
│   ├── xhs_manage.sh          # cookie管理脚本
│   └── xhs_simple.sh          # 简单发布脚本
├── xhs_cookies/               # Cookie目录（自动创建）
│   ├── active.json           # 当前激活cookie（软链接）
│   └── archive/              # 归档目录
├── docs/                      # 文档
│   ├── XHS_FINAL_SOLUTION.md  # 完整解决方案
│   └── QUICK_START.md         # 快速开始指南
├── package.json              # Node.js依赖
└── SKILL.md                  # OpenClaw技能文档
```

## 🔧 核心脚本

### 1. `xhs_save_cookie.sh` - 保存Cookie
规范化保存cookie，支持自动格式转换。

### 2. `xhs_final.sh` - 主发布脚本
完整的发布流程：状态检查 → debug验证 → 实际发布。

### 3. `xhs_manage.sh` - Cookie管理
管理cookie文件：列表、信息、切换、清理。

### 4. `xhs-pusher.mjs` - Node.js CLI
统一CLI接口，提供更好的用户体验。

## 📋 Cookie命名规范

### 格式
```
账号标识_描述_日期.json
```

### 示例
- `new_main_20260314.json` - 新主账号，2026-03-14获取
- `old_backup_today.json` - 旧备份账号，今天获取
- `test_temp.json` - 测试临时账号

## 🎯 工作流程

### 获取新Cookie
```bash
./scripts/xhs_save_cookie.sh --name new_main --cookie "a1=xxx;webId=yyy;..." --set-active
```

### 日常发布
```bash
./scripts/xhs_final.sh \
  --cookie xhs_cookies/active.json \
  --title "每日更新" \
  --content "今日内容..." \
  --image daily_photo.jpg \
  --tag 日常 \
  --tag 分享
```

### 多账号管理
```bash
# 切换到旧账号
./scripts/xhs_manage.sh use old_backup

# 使用切换后的账号发布
./scripts/xhs_final.sh --cookie xhs_cookies/active.json --title "..." --image ...
```

## 🔍 故障排除

### 常见问题
1. **Cookie过期** - 重新获取并保存
2. **图片不存在** - 检查图片路径和权限
3. **发布失败** - 先debug验证，检查登录状态

### 错误代码
- `ERR_COOKIE_NOT_FOUND` - Cookie文件不存在
- `ERR_LOGIN_FAILED` - 登录状态异常
- `ERR_DEBUG_VALIDATION` - debug验证失败
- `ERR_PUBLISH_FAILED` - 发布失败

## 📄 许可证

MIT License

## 🤝 贡献

欢迎提交Issue和Pull Request！

## 📞 支持

- 文档: [docs/](docs/)
- Issue: [GitHub Issues](https://github.com/beizhi-tech/xhs-skill-pusher/issues)

---

**开始发布小红书内容吧！** 🚀

path: bin/xhs-pusher.mjs
content: #!/usr/bin/env node
/**
 * xhs-pusher CLI工具
 * 小红书内容发布统一接口
 */

import { program } from 'commander';
import chalk from 'chalk';
import fs from 'fs-extra';
import path from 'path';
import { fileURLToPath } from 'url';
import { execSync } from 'child_process';

const __dirname = path.dirname(fileURLToPath(import.meta.url));
const PROJECT_ROOT = path.join(__dirname, '..');

// 颜色定义
const colors = {
  info: chalk.blue,
  success: chalk.green,
  warning: chalk.yellow,
  error: chalk.red,
  bold: chalk.bold
};

// 日志函数
const log = {
  info: (msg) => console.log(colors.info('[INFO]'), msg),
  success: (msg) => console.log(colors.success('✅'), msg),
  warning: (msg) => console.log(colors.warning('⚠️'), msg),
  error: (msg) => console.log(colors.error('❌'), msg),
  bold: (msg) => console.log(colors.bold(msg))
};

// 显示横幅
function showBanner() {
  console.log('');
  colors.bold('🚀 xhs-pusher - 小红书内容发布工具');
  console.log('规范化cookie管理 + xhs-kit自动化发布');
  console.log('');
}

// 检查依赖
function checkDependencies() {
  try {
    // 检查xhs-kit
    execSync('which xhs-kit', { stdio: 'ignore' });
    return true;
  } catch (error) {
    log.error('xhs-kit未安装');
    log.info('请安装: pip install xhs-kit');
    return false;
  }
}

// Cookie管理命令
function setupCookieCommands() {
  const cookie = program.command('cookie')
    .description('Cookie管理命令');

  // 列出所有cookie
  cookie.command('list')
    .description('列出所有cookie文件')
    .action(() => {
      showBanner();
      log.info('列出所有cookie文件...');
      
      const cookieDir = path.join(PROJECT_ROOT, 'xhs_cookies');
      if (!fs.existsSync(cookieDir)) {
        log.warning('Cookie目录不存在');
        log.info('使用命令初始化: mkdir -p xhs_cookies/archive');
        return;
      }

      try {
        execSync(`cd "${PROJECT_ROOT}" && ./scripts/xhs_final.sh --list-cookies`, {
          stdio: 'inherit'
        });
      } catch (error) {
        log.error('执行失败');
      }
    });

  // 保存cookie
  cookie.command('save')
    .description('保存新cookie')
    .requiredOption('--name <name>', 'cookie名称（如：new_main）')
    .requiredOption('--cookie <cookie>', 'cookie字符串')
    .option('--desc <description>', '描述信息')
    .option('--set-active', '设置为当前激活cookie')
    .action((options) => {
      showBanner();
      
      const args = [
        './scripts/xhs_save_cookie.sh',
        '--name', options.name,
        '--cookie', `"${options.cookie}"`
      ];

      if (options.desc) {
        args.push('--desc', options.desc);
      }

      if (options.setActive) {
        args.push('--set-active');
      }

      try {
        execSync(`cd "${PROJECT_ROOT}" && ${args.join(' ')}`, {
          stdio: 'inherit'
        });
      } catch (error) {
        log.error('保存失败');
      }
    });

  // 查看cookie信息
  cookie.command('info <name>')
    .description('查看cookie详细信息')
    .action((name) => {
      showBanner();
      
      try {
        execSync(`cd "${PROJECT_ROOT}" && ./scripts/xhs_manage.sh info "${name}"`, {
          stdio: 'inherit'
        });
      } catch (error) {
        log.error('查看失败');
      }
    });

  // 使用指定cookie
  cookie.command('use <name>')
    .description('使用指定cookie（设置为active）')
    .action((name) => {
      showBanner();
      
      try {
        execSync(`cd "${PROJECT_ROOT}" && ./scripts/xhs_manage.sh use "${name}"`, {
          stdio: 'inherit'
        });
      } catch (error) {
        log.error('切换失败');
      }
    });

  // 检查状态
  cookie.command('status')
    .description('查看当前状态')
    .action(() => {
      showBanner();
      
      try {
        execSync(`cd "${PROJECT_ROOT}" && ./scripts/xhs_manage.sh status`, {
          stdio: 'inherit'
        });
      } catch (error) {
        log.error('检查失败');
      }
    });
}

// 发布命令
function setupPublishCommands() {
  const publish = program.command('publish')
    .description('发布内容命令');

  // 基本发布
  publish.command('post')
    .description('发布小红书内容')
    .requiredOption('--title <title>', '笔记标题')
    .requiredOption('--content <content>', '笔记内容')
    .requiredOption('--image <image...>', '图片路径（可多个）')
    .option('--tag <tag...>', '标签（可多个）')
    .option('--schedule <time>', '定时发布时间')
    .option('--show-browser', '显示浏览器窗口')
    .option('--debug-only', '仅验证，不实际发布')
    .option('--cookie <cookie>', 'cookie文件路径（默认：xhs_cookies/active.json）')
    .action((options) => {
      showBanner();
      
      if (!checkDependencies()) {
        return;
      }

      const cookieFile = options.cookie || 'xhs_cookies/active.json';
      const args = [
        './scripts/xhs_final.sh',
        '--cookie', cookieFile,
        '--title', `"${options.title}"`,
        '--content', `"${options.content}"`
      ];

      // 添加图片
      if (Array.isArray(options.image)) {
        options.image.forEach(image => {
          args.push('--image', image);
        });
      } else {
        args.push('--image', options.image);
      }

      // 添加标签
      if (options.tag) {
        if (Array.isArray(options.tag)) {
          options.tag.forEach(tag => {
            args.push('--tag', tag);
          });
        } else {
          args.push('--tag', options.tag);
        }
      }

      // 添加其他选项
      if (options.schedule) {
        args.push('--schedule', options.schedule);
      }

      if (options.showBrowser) {
        args.push('--show-browser');
      }

      if (options.debugOnly) {
        args.push('--debug-only');
      }

      try {
        execSync(`cd "${PROJECT_ROOT}" && ${args.join(' ')}`, {
          stdio: 'inherit'
        });
      } catch (error) {
        log.error('发布失败');
      }
    });

  // 检查发布状态
  publish.command('status')
    .description('检查发布状态')
    .option('--cookie <cookie>', 'cookie文件路径')
    .action((options) => {
      showBanner();
      
      const cookieFile = options.cookie || 'xhs_cookies/active.json';
      
      try {
        execSync(`cd "${PROJECT_ROOT}" && ./scripts/xhs_final.sh --cookie "${cookieFile}" --check-status`, {
          stdio: 'inherit'
        });
      } catch (error) {
        log.error('检查失败');
      }
    });
}

// 初始化命令
function setupInitCommands() {
  program.command('init')
    .description('初始化项目')
    .action(() => {
      showBanner();
      
      log.info('初始化xhs-skill-pusher项目...');
      
      // 创建目录结构
      const dirs = [
        'xhs_cookies',
        'xhs_cookies/archive',
        'scripts',
        'docs',
        'logs'
      ];

      dirs.forEach(dir => {
        const dirPath = path.join(PROJECT_ROOT, dir);
        if (!fs.existsSync(dirPath)) {
          fs.ensureDirSync(dirPath);
          log.success(`创建目录: ${dir}`);
        }
      });

      // 复制脚本文件
      const scripts = [
        'xhs_save_cookie.sh',
        'xhs_final.sh',
        'xhs_manage.sh',
        'xhs_simple.sh'
      ];

      // 检查脚本是否存在，如果不存在则创建示例
      scripts.forEach(script => {
        const scriptPath = path.join(PROJECT_ROOT, 'scripts', script);
        if (!fs.existsSync(scriptPath)) {
          // 创建简单的示例脚本
          const content = `#!/bin/bash
# ${script} - 请从工作空间复制实际脚本
echo "请从工作空间复制实际的 ${script} 脚本到此处"
echo "实际脚本位置: ~/.openclaw/workspace/${script}"
exit 1
`;
          fs.writeFileSync(scriptPath, content, { mode: 0o755 });
          log.warning(`创建示例脚本: scripts/${script}`);
          log.info(`请复制实际脚本: cp ~/.openclaw/workspace/${script} scripts/`);
        }
      });

      // 创建文档
      const docs = [
        ['XHS_FINAL_SOLUTION.md', '# 完整解决方案文档\n\n请从工作空间复制实际文档。'],
        ['QUICK_START.md', '# 快速开始指南\n\n请从工作空间复制实际文档。']
      ];

      docs.forEach(([filename, content]) => {
        const docPath = path.join(PROJECT_ROOT, 'docs', filename);
        if (!fs.existsSync(docPath)) {
          fs.writeFileSync(docPath, content);
          log.warning(`创建示例文档: docs/${filename}`);
        }
      });

      log.success('初始化完成！');
      console.log('');
      log.bold('下一步:');
      log.info('1. 复制脚本文件: cp ~/.openclaw/workspace/xhs_*.sh scripts/');
      log.info('2. 安装Python依赖: pip install xhs-kit');
      log.info('3. 保存第一个cookie: node ./bin/xhs-pusher.mjs cookie save --name test --cookie "..."');
      console.log('');
    });
}

// 主函数
async function main() {
  program
    .name('xhs-pusher')
    .description('小红书内容发布工具 - 规范化cookie管理 + xhs-kit自动化发布')
    .version('1.0.0');

  // 设置命令
  setupCookieCommands();
  setupPublishCommands();
  setupInitCommands();

  // 显示帮助信息
  program.on('--help', () => {
    console.log('');
    log.bold('示例:');
    console.log('  $ xhs-pusher cookie list                    # 列出所有cookie');
    console.log('  $ xhs-pusher cookie save --name new_main \\');
    console.log('      --cookie "a1=xxx;webId=yyy"             # 保存新cookie');
    console.log('  $ xhs-pusher publish post \\');
    console.log('      --title "标题" --content "内容" \\');
    console.log('      --image photo.jpg                       # 发布内容');
    console.log('  $ xhs-pusher init                          # 初始化项目');
    console.log('');
    log.bold('文档:');
    console.log('  完整文档: docs/XHS_FINAL_SOLUTION.md');
    console.log('  快速开始: docs/QUICK_START.md');
    console.log('');
  });

  // 解析参数
  program.parse(process.argv);

  // 如果没有参数，显示帮助
  if (process.argv.length <= 2) {
    showBanner();
    program.help();
  }
}

// 运行主函数
main().catch(error => {
  log.error(`程序错误: ${error.message}`);
  process.exit(1);
});

path: package.json
content: {
  "name": "xhs-skill-pusher",
  "version": "1.0.0",
  "description": "小红书内容发布技能 - 规范化cookie管理 + xhs-kit自动化发布",
  "private": true,
  "type": "module",
  "bin": {
    "xhs-pusher": "./bin/xhs-pusher.mjs"
  },
  "engines": {
    "node": ">=18"
  },
  "dependencies": {
    "commander": "^11.1.0",
    "chalk": "^5.3.0",
    "inquirer": "^9.2.12",
    "ora": "^7.0.1",
    "fs-extra": "^11.2.0"
  },
  "scripts": {
    "start": "node ./bin/xhs-pusher.mjs",
    "test": "echo \"运行测试: node ./bin/xhs-pusher.mjs --help\""
  },
  "keywords": [
    "xiaohongshu",
    "xhs",
    "cookie-manager",
    "automation",
    "openclaw",
    "skill"
  ],
  "author": "北智科技",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/beizhi-tech/xhs-skill-pusher.git"
  }
}

path: push_to_github.sh
content: #!/bin/bash
# 推送到GitHub的脚本

set -e

REPO_NAME="xhs-skill-pusher"
REPO_DESC="小红书内容发布技能 - 规范化cookie管理 + xhs-kit自动化发布"
USERNAME="beizhi-tech"  # 替换为实际的GitHub用户名

echo "🚀 准备推送到GitHub..."

# 检查是否已设置远程仓库
if git remote | grep -q origin; then
    echo "✅ 远程仓库已设置"
else
    echo "❌ 未设置远程仓库"
    echo "请先创建GitHub仓库:"
    echo "1. 访问: https://github.com/new"
    echo "2. 仓库名称: $REPO_NAME"
    echo "3. 描述: $REPO_DESC"
    echo "4. 选择公开或私有"
    echo ""
    echo "创建后运行:"
    echo "  git remote add origin https://github.com/$USERNAME/$REPO_NAME.git"
    echo "  git push -u origin main"
    exit 1
fi

# 推送到GitHub
echo "推送代码到GitHub..."
git push -u origin main

if [ $? -eq 0 ]; then
    echo ""
    echo "🎉 推送成功！"
    echo ""
    echo "📦 项目信息:"
    echo "  名称: $REPO_NAME"
    echo "  描述: $REPO_DESC"
    echo "  版本: v1.0.0"
    echo ""
    echo "🚀 快速开始:"
    echo "  git clone https://github.com/$USERNAME/$REPO_NAME.git"
    echo "  cd $REPO_NAME"
    echo "  npm install"
    echo "  详细指南: docs/QUICK_START.md"
else
    echo "❌ 推送失败"
    echo "请检查:"
    echo "1. GitHub仓库是否存在"
    echo "2. 是否有推送权限"
    echo "3. 网络连接是否正常"
fi

path: scripts/xhs_final.sh
content: #!/bin/bash
# xhs-kit最终发布脚本 - 统一设计，简单易用
# 核心设计：只使用文件路径，不使用账号名映射

set -e

cd "$(dirname "$0")"

# 激活虚拟环境
if [[ -f "xhs-env/bin/activate" ]]; then
    source xhs-env/bin/activate
    echo "✅ 虚拟环境已激活"
else
    echo "❌ 虚拟环境不存在：xhs-env"
    echo "请先创建：python3 -m venv xhs-env && source xhs-env/bin/activate && pip install xhs-kit"
    exit 1
fi

# 执行简单脚本
exec ./xhs_simple.sh "$@"

Security scan verdicts — ClawScan: suspicious | static analysis: suspicious | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)