Skill: yoo-unison/browser-toggle (version 1.0.1)

# OpenClaw Browser Toggle Skill > 一键启用/禁用 OpenClaw 内置浏览器，无需手动修改配置文件 **Name:** browser-toggle **Version:** 1.0.0 **Author:** AI Assistant **License:** MIT **Description:** 一键启用/禁用 OpenClaw 内置浏览器 --- ## Installation ```bash bash setup.sh ``` ## Usage ```bash openclaw-browser --enable openclaw-browser --disable openclaw-browser --status ``` ## Features - ✅ 一键启用/禁用内置浏览器 - ✅ 自动备份配置文件 - ✅ 失败自动恢复 - ✅ 支持可视化/无头模式 - ✅ 跨平台支持 ## Requirements - Python 3.8+ - OpenClaw 2026.2.26+ - Chrome/Chromium ## Links - GitHub: https://github.com/yoo-unison/browser-toggle - Release: https://github.com/yoo-unison/browser-toggle/releases/tag/v1.0.0

path: INSTALL.md
content: # 📦 OpenClaw Browser Toggle Skill - 安装指南

> 一键启用/禁用 OpenClaw 内置浏览器

---

## 🚀 快速安装

### 方法 1：从压缩包安装（推荐）

```bash
# 1. 下载 Skill 包
# 假设文件名为：browser-toggle-v1.0.0.tar.gz

# 2. 解压
tar -xzf browser-toggle-v1.0.0.tar.gz
cd browser-toggle

# 3. 运行安装脚本
bash setup.sh

# 完成！
```

### 方法 2：从 Git 仓库安装

```bash
# 1. 克隆仓库
git clone https://github.com/your-username/browser-toggle-skill.git
cd browser-toggle-skill

# 2. 运行安装脚本
bash setup.sh
```

### 方法 3：手动安装

```bash
# 1. 创建 Skill 目录
mkdir -p ~/.openclaw/workspace/skills/browser-toggle

# 2. 复制文件
cp browser_toggle.py ~/.openclaw/workspace/skills/browser-toggle/
cp README.md ~/.openclaw/workspace/skills/browser-toggle/
cp SKILL.md ~/.openclaw/workspace/skills/browser-toggle/

# 3. 设置权限
chmod +x ~/.openclaw/workspace/skills/browser-toggle/browser_toggle.py
```

---

## 📋 安装后验证

```bash
# 查看状态
~/.openclaw/workspace/skills/browser-toggle/browser_toggle.py --status

# 或（如果创建了全局命令）
openclaw-browser --status
```

**预期输出：**
```
==================================================
OpenClaw 浏览器配置状态
==================================================
模式：Chrome 扩展
已启用：False
Profile: chrome
无头模式：True
==================================================
```

---

## 🎯 快速开始

### 启用内置浏览器

```bash
# 方法 1：使用全局命令
openclaw-browser --enable

# 方法 2：使用完整路径
~/.openclaw/workspace/skills/browser-toggle/browser_toggle.py --enable

# 重启 OpenClaw
openclaw gateway restart
```

### 禁用内置浏览器

```bash
openclaw-browser --disable
openclaw gateway restart
```

---

## 📁 文件结构

```
browser-toggle/
├── setup.sh              # 安装脚本
├── browser_toggle.py     # 主程序
├── README.md             # 项目说明
├── SKILL.md              # Skill 描述
├── 使用指南.md           # 详细使用文档
└── skill.conf            # 配置文件
```

---

## 🔧 系统要求

| 要求 | 说明 |
|------|------|
| OpenClaw | v2026.2.26+ |
| Python | 3.8+ |
| Chrome/Chromium | 已安装 |
| 操作系统 | Linux / macOS / Windows |

---

## ⚠️ 注意事项

1. **启用后需要重启 OpenClaw**
   ```bash
   openclaw gateway restart
   ```

2. **首次使用需要手动登录**
   - 让 AI 打开网站（如百度网盘）
   - 在 AI 打开的浏览器窗口中手动登录
   - 登录状态会保存

3. **切换模式需要重新登录**
   - 从 `chrome` 切换到 `openclaw` 需要重新登录网站

---

## 🐛 故障排除

### 问题 1：命令未找到

**解决：**
```bash
# 使用完整路径
~/.openclaw/workspace/skills/browser-toggle/browser_toggle.py --enable
```

### 问题 2：Chrome 未找到

**解决：**
```bash
# 安装 Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt-get install -f -y
```

### 问题 3：配置失败

**解决：**
```bash
# 从备份恢复
~/.openclaw/workspace/skills/browser-toggle/browser_toggle.py --restore ~/.openclaw/workspace/backups/xxx.json
```

---

## 📞 获取帮助

```bash
# 查看帮助
openclaw-browser --help

# 查看状态
openclaw-browser --status

# 查看文档
cat ~/.openclaw/workspace/skills/browser-toggle/README.md
cat ~/.openclaw/workspace/skills/browser-toggle/使用指南.md
```

---

## 📦 卸载

```bash
# 1. 禁用内置浏览器
openclaw-browser --disable
openclaw gateway restart

# 2. 删除 Skill
rm -rf ~/.openclaw/workspace/skills/browser-toggle

# 3. 删除全局命令（如果存在）
sudo rm -f /usr/local/bin/openclaw-browser
```

---

## 📚 相关资源

- [OpenClaw 文档](https://docs.openclaw.ai)
- [OpenClaw GitHub](https://github.com/openclaw/openclaw)
- [Skill 仓库](https://clawhub.com)

---

*版本：v1.0.0*  
*最后更新：2026-02-28*


path: README.md
content: # 🔧 OpenClaw 内置浏览器切换工具

> 一键启用/禁用内置浏览器，无需手动修改配置文件

---

## 🚀 快速开始

### 1. 安装

```bash
cd /home/ereala/.openclaw/workspace/skills/browser-toggle
chmod +x browser_toggle.py
```

### 2. 使用

**启用内置浏览器：**
```bash
python3 browser_toggle.py --enable
```

**禁用（恢复默认）：**
```bash
python3 browser_toggle.py --disable
```

**查看状态：**
```bash
python3 browser_toggle.py --status
```

---

## 📋 完整命令

| 命令 | 说明 |
|------|------|
| `--enable` | 启用内置浏览器 |
| `--disable` | 禁用内置浏览器 |
| `--status` | 查看当前状态 |
| `--headless` | 切换到无头模式 |
| `--visible` | 切换到可视化模式 |
| `--restore <文件>` | 从备份恢复 |

---

## 💡 使用场景

### 场景 1：访问需要登录的网站

```bash
# 1. 启用内置浏览器（可视化模式）
python3 browser_toggle.py --enable

# 2. 重启 OpenClaw
openclaw gateway restart

# 3. 让 AI 打开网站，手动登录
# 例如：打开百度网盘，手动登录

# 4. 后续可以切换到无头模式
python3 browser_toggle.py --visible
openclaw gateway restart
```

### 场景 2：日常自动化（无头模式）

```bash
# 启用无头模式（后台运行，不显示浏览器）
python3 browser_toggle.py --enable --headless
openclaw gateway restart
```

### 场景 3：恢复默认

```bash
# 禁用内置浏览器，使用 Chrome 扩展
python3 browser_toggle.py --disable
openclaw gateway restart
```

---

## 🔧 配置说明

### 内置浏览器模式
- **Profile:** `openclaw`
- **数据位置:** `~/.openclaw/browser/`
- **特点:** 独立空间，不访问个人浏览器数据

### Chrome 扩展模式（默认）
- **Profile:** `chrome`
- **需要:** Chrome 扩展
- **特点:** 使用个人 Chrome 浏览器

---

## 📁 备份管理

**自动备份位置：**
```
~/.openclaw/workspace/backups/
```

**备份文件名：**
```
openclaw-YYYYMMDD-HHMMSS-before-browser-toggle.json
```

**手动恢复：**
```bash
python3 browser_toggle.py --restore ~/.openclaw/workspace/backups/openclaw-20260228-220000-before-browser-toggle.json
```

---

## ⚠️ 注意事项

1. **修改配置后需要重启 OpenClaw**
   ```bash
   openclaw gateway restart
   ```

2. **首次使用需要手动登录**
   - 启用内置浏览器后，用 AI 打开网站
   - 手动输入账号密码登录
   - 登录状态会保存

3. **切换模式需要重新登录**
   - 从 `chrome` 切换到 `openclaw` 需要重新登录网站
   - 因为是两个独立的浏览器空间

4. **无头模式 vs 可视化**
   - **无头模式 (`headless: true`)**: 后台运行，不显示浏览器窗口
   - **可视化 (`headless: false`)**: 显示浏览器窗口，可以看到操作过程

---

## 🐛 故障排除

### 问题 1：Chrome 路径不正确

**错误：** `Chrome executable not found`

**解决：**
```bash
# 找到 Chrome 路径
which google-chrome
# 或
which chromium

# 编辑 openclaw.json，修改 executablePath
nano ~/.openclaw/openclaw.json
```

### 问题 2：配置失败

**解决：**
```bash
# 从备份恢复
python3 browser_toggle.py --restore <备份文件>

# 或手动恢复
cp ~/.openclaw/workspace/backups/openclaw-*.json ~/.openclaw/openclaw.json
```

### 问题 3：浏览器无法启动

**解决：**
```bash
# 检查 Chrome 是否安装
google-chrome --version

# 如未安装
sudo apt-get install google-chrome-stable
```

---

## 📖 更多文档

- [SKILL.md](SKILL.md) - Skill 说明
- [browser_toggle.py](browser_toggle.py) - 源代码

---

## 🎯 最佳实践

### 推荐配置

**日常使用（无头模式）：**
```json
{
  "browser": {
    "enabled": true,
    "defaultProfile": "openclaw",
    "headless": true
  }
}
```

**需要登录时（可视化）：**
```json
{
  "browser": {
    "enabled": true,
    "defaultProfile": "openclaw",
    "headless": false
  }
}
```

**恢复默认：**
```json
// 删除 browser 配置即可
```

---

## 🆘 获取帮助

```bash
python3 browser_toggle.py --help
```

---

*版本：v1.0*  
*最后更新：2026-02-28*


path: SHARE.md
content: # 🎁 OpenClaw Browser Toggle Skill - 分享包

> 一键启用/禁用 OpenClaw 内置浏览器，无需手动修改配置文件

---

## 📦 发布信息

- **Skill 名称：** browser-toggle
- **版本：** v1.0.0
- **发布日期：** 2026-02-28
- **作者：** AI Assistant
- **大小：** 8.1 KB
- **SHA256：** `52e6793d41094b6495ce5a9ae165b9fa03947989d739290399a352e76d8b52c7`

---

## 🚀 快速安装

### 1. 下载 Skill 包

```bash
# 从 GitHub Releases 下载
wget https://github.com/your-username/browser-toggle/releases/download/v1.0.0/browser-toggle-v1.0.0.tar.gz

# 验证文件完整性
sha256sum browser-toggle-v1.0.0.tar.gz
# 应该输出：52e6793d41094b6495ce5a9ae165b9fa03947989d739290399a352e76d8b52c7
```

### 2. 解压并安装

```bash
# 解压
tar -xzf browser-toggle-v1.0.0.tar.gz
cd browser-toggle-v1.0.0

# 运行安装脚本
bash setup.sh
```

### 3. 验证安装

```bash
# 查看状态
openclaw-browser --status

# 或
~/.openclaw/workspace/skills/browser-toggle/browser_toggle.py --status
```

---

## 💡 使用示例

### 启用内置浏览器

```bash
# 启用（可视化模式）
openclaw-browser --enable
openclaw gateway restart

# 启用（无头模式）
openclaw-browser --enable --headless
openclaw gateway restart
```

### 禁用内置浏览器

```bash
openclaw-browser --disable
openclaw gateway restart
```

### 查看状态

```bash
openclaw-browser --status
```

---

## 📋 功能特性

- ✅ **一键切换** - 无需手动编辑配置文件
- ✅ **自动备份** - 修改前自动备份配置
- ✅ **失败恢复** - 配置失败可快速恢复
- ✅ **跨平台** - 支持 Linux/macOS/Windows
- ✅ **无头模式** - 支持后台运行
- ✅ **独立空间** - 不访问个人浏览器数据

---

## 🎯 使用场景

### 场景 1：访问需要登录的网站

```bash
# 1. 启用内置浏览器
openclaw-browser --enable
openclaw gateway restart

# 2. 让 AI 打开网站（如百度网盘）
# 3. 手动登录（在 AI 打开的浏览器窗口中）
# 4. 后续可以直接使用
```

### 场景 2：日常自动化

```bash
# 启用无头模式（后台运行）
openclaw-browser --enable --headless
openclaw gateway restart
```

### 场景 3：恢复默认

```bash
# 禁用内置浏览器
openclaw-browser --disable
openclaw gateway restart
```

---

## 📚 文档

| 文档 | 说明 |
|------|------|
| [README.md](README.md) | 项目说明 |
| [INSTALL.md](INSTALL.md) | 安装指南 |
| [使用指南.md](使用指南.md) | 详细使用文档 |
| [SKILL.md](SKILL.md) | Skill 描述 |
| [RELEASE.md](RELEASE.md) | 发布说明 |

---

## 🔧 系统要求

| 要求 | 说明 |
|------|------|
| OpenClaw | v2026.2.26+ |
| Python | 3.8+ |
| Chrome/Chromium | 已安装 |
| 操作系统 | Linux / macOS / Windows |

---

## 🐛 故障排除

### 问题 1：命令未找到

```bash
# 使用完整路径
~/.openclaw/workspace/skills/browser-toggle/browser_toggle.py --enable
```

### 问题 2：Chrome 未找到

```bash
# 安装 Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt-get install -f -y
```

### 问题 3：配置失败

```bash
# 从备份恢复
~/.openclaw/workspace/skills/browser-toggle/browser_toggle.py --restore ~/.openclaw/workspace/backups/xxx.json
```

---

## 📞 获取帮助

```bash
# 查看帮助
openclaw-browser --help

# 查看状态
openclaw-browser --status

# 查看日志
tail -f /tmp/openclaw/openclaw-*.log
```

---

## 📦 卸载

```bash
# 1. 禁用内置浏览器
openclaw-browser --disable
openclaw gateway restart

# 2. 删除 Skill
rm -rf ~/.openclaw/workspace/skills/browser-toggle

# 3. 删除全局命令（如果存在）
sudo rm -f /usr/local/bin/openclaw-browser
```

---

## 📄 许可证

MIT License

---

## 🔗 相关链接

- [OpenClaw 官方文档](https://docs.openclaw.ai)
- [OpenClaw GitHub](https://github.com/openclaw/openclaw)
- [Skill Hub](https://clawhub.com)

---

## 📧 反馈与支持

- **问题反馈：** https://github.com/your-username/browser-toggle/issues
- **讨论区：** https://github.com/openclaw/openclaw/discussions

---

*版本：v1.0.0*  
*发布日期：2026-02-28*  
*维护者：AI Assistant*


path: _meta.json
content: ownerId: kn7e0r45nvzpc1wtgv0xcy1gvn820xq4
slug: browser-toggle
version: 1.0.0
publishedAt: 1772295982511

path: browser_toggle.py
content: #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
OpenClaw 内置浏览器切换工具
===========================

一键启用/禁用 OpenClaw 内置浏览器

用法：
    python browser_toggle.py --enable    # 启用内置浏览器
    python browser_toggle.py --disable   # 禁用（恢复默认）
    python browser_toggle.py --status    # 查看状态
    python browser_toggle.py --headless  # 切换到无头模式

作者：AI Assistant
日期：2026-02-28
"""

import json
import sys
import shutil
from pathlib import Path
from datetime import datetime
from typing import Dict, Optional
import logging

# 设置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)


class BrowserToggle:
    """浏览器配置切换器"""
    
    def __init__(self):
        # 配置文件路径
        self.config_file = Path.home() / ".openclaw" / "openclaw.json"
        self.backup_dir = Path.home() / ".openclaw" / "workspace" / "backups"
        
        # 确保备份目录存在
        self.backup_dir.mkdir(parents=True, exist_ok=True)
        
        # 内置浏览器配置
        self.browser_config = {
            "browser": {
                "enabled": True,
                "defaultProfile": "openclaw",
                "headless": False,
                "noSandbox": False,
                "attachOnly": False,
                "executablePath": self._get_chrome_path()
            }
        }
    
    def _get_chrome_path(self) -> str:
        """获取 Chrome 安装路径"""
        import platform
        system = platform.system()
        
        if system == "Windows":
            return r"C:\Program Files\Google\Chrome\Application\chrome.exe"
        elif system == "Darwin":  # macOS
            return "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
        else:  # Linux
            # 尝试多个可能的路径
            paths = [
                "/usr/bin/google-chrome",
                "/usr/bin/google-chrome-stable",
                "/usr/bin/chromium-browser",
                "/usr/bin/chromium"
            ]
            for path in paths:
                if Path(path).exists():
                    return path
            return "/usr/bin/google-chrome"  # 默认
    
    def load_config(self) -> Optional[Dict]:
        """加载配置文件"""
        if not self.config_file.exists():
            logger.error(f"配置文件不存在：{self.config_file}")
            return None
        
        try:
            with open(self.config_file, 'r', encoding='utf-8') as f:
                config = json.load(f)
            return config
        except Exception as e:
            logger.error(f"加载配置失败：{e}")
            return None
    
    def save_config(self, config: Dict) -> bool:
        """保存配置文件"""
        try:
            # 先备份
            self._backup_config()
            
            # 写入配置
            with open(self.config_file, 'w', encoding='utf-8') as f:
                json.dump(config, f, indent=2, ensure_ascii=False)
            
            logger.info(f"配置已保存：{self.config_file}")
            return True
        except Exception as e:
            logger.error(f"保存配置失败：{e}")
            return False
    
    def _backup_config(self) -> Optional[str]:
        """备份配置文件"""
        if not self.config_file.exists():
            return None
        
        try:
            timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
            backup_file = self.backup_dir / f"openclaw-{timestamp}-before-browser-toggle.json"
            shutil.copy2(self.config_file, backup_file)
            logger.info(f"配置已备份：{backup_file}")
            return str(backup_file)
        except Exception as e:
            logger.warning(f"备份失败：{e}")
            return None
    
    def restore_from_backup(self, backup_file: str) -> bool:
        """从备份恢复"""
        try:
            backup_path = Path(backup_file)
            if not backup_path.exists():
                logger.error(f"备份文件不存在：{backup_file}")
                return False
            
            shutil.copy2(backup_path, self.config_file)
            logger.info(f"配置已恢复：{backup_file}")
            return True
        except Exception as e:
            logger.error(f"恢复失败：{e}")
            return False
    
    def get_status(self) -> Dict:
        """获取当前状态"""
        config = self.load_config()
        if not config:
            return {"error": "无法加载配置"}
        
        browser_config = config.get("browser", {})
        is_enabled = browser_config.get("enabled", False)
        profile = browser_config.get("defaultProfile", "chrome")
        headless = browser_config.get("headless", True)
        
        return {
            "enabled": is_enabled,
            "profile": profile,
            "headless": headless,
            "mode": "内置浏览器" if is_enabled and profile == "openclaw" else "Chrome 扩展"
        }
    
    def enable_browser(self, headless: bool = False) -> bool:
        """启用内置浏览器"""
        logger.info("启用内置浏览器...")
        
        config = self.load_config()
        if not config:
            return False
        
        # 更新配置
        config["browser"] = {
            "enabled": True,
            "defaultProfile": "openclaw",
            "headless": headless,
            "noSandbox": False,
            "attachOnly": False,
            "executablePath": self.browser_config["browser"]["executablePath"]
        }
        
        # 保存配置
        if self.save_config(config):
            logger.info("✅ 内置浏览器已启用")
            logger.info(f"   Profile: openclaw")
            logger.info(f"   无头模式：{'是' if headless else '否'}")
            logger.info(f"   Chrome 路径：{self.browser_config['browser']['executablePath']}")
            logger.info("\n⚠️ 需要重启 OpenClaw 才能生效")
            logger.info("   运行：openclaw gateway restart")
            return True
        
        return False
    
    def disable_browser(self) -> bool:
        """禁用内置浏览器（恢复默认）"""
        logger.info("禁用内置浏览器，恢复默认配置...")
        
        config = self.load_config()
        if not config:
            return False
        
        # 移除 browser 配置
        if "browser" in config:
            del config["browser"]
        
        # 保存配置
        if self.save_config(config):
            logger.info("✅ 已恢复默认配置")
            logger.info("   使用 Chrome 扩展模式")
            logger.info("\n⚠️ 需要重启 OpenClaw 才能生效")
            logger.info("   运行：openclaw gateway restart")
            return True
        
        return False
    
    def set_headless(self, headless: bool) -> bool:
        """切换无头模式"""
        logger.info(f"切换无头模式：{'开启' if headless else '关闭'}")
        
        config = self.load_config()
        if not config:
            return False
        
        if "browser" not in config:
            logger.error("内置浏览器未启用，请先运行 --enable")
            return False
        
        config["browser"]["headless"] = headless
        
        if self.save_config(config):
            logger.info(f"✅ 无头模式已{'开启' if headless else '关闭'}")
            logger.info("\n⚠️ 需要重启 OpenClaw 才能生效")
            return True
        
        return False


def main():
    import argparse
    
    parser = argparse.ArgumentParser(description="OpenClaw 内置浏览器切换工具")
    parser.add_argument("--enable", action="store_true", help="启用内置浏览器")
    parser.add_argument("--disable", action="store_true", help="禁用内置浏览器")
    parser.add_argument("--status", action="store_true", help="查看当前状态")
    parser.add_argument("--headless", action="store_true", help="切换到无头模式")
    parser.add_argument("--visible", action="store_true", help="切换到可视化模式")
    parser.add_argument("--restore", type=str, help="从备份文件恢复")
    
    args = parser.parse_args()
    
    toggle = BrowserToggle()
    
    if args.status:
        status = toggle.get_status()
        print("\n" + "=" * 50)
        print("OpenClaw 浏览器配置状态")
        print("=" * 50)
        print(f"模式：{status.get('mode', '未知')}")
        print(f"已启用：{status.get('enabled', False)}")
        print(f"Profile: {status.get('profile', '未知')}")
        print(f"无头模式：{status.get('headless', False)}")
        print("=" * 50)
    
    elif args.enable:
        headless = args.headless  # 如果同时指定 --headless
        if toggle.enable_browser(headless=headless):
            print("\n✅ 启用成功！")
            sys.exit(0)
        else:
            print("\n❌ 启用失败！")
            sys.exit(1)
    
    elif args.disable:
        if toggle.disable_browser():
            print("\n✅ 禁用成功！")
            sys.exit(0)
        else:
            print("\n❌ 禁用失败！")
            sys.exit(1)
    
    elif args.headless:
        if toggle.set_headless(True):
            print("\n✅ 已切换到无头模式")
            sys.exit(0)
        else:
            print("\n❌ 切换失败！")
            sys.exit(1)
    
    elif args.visible:
        if toggle.set_headless(False):
            print("\n✅ 已切换到可视化模式")
            sys.exit(0)
        else:
            print("\n❌ 切换失败！")
            sys.exit(1)
    
    elif args.restore:
        if toggle.restore_from_backup(args.restore):
            print("\n✅ 恢复成功！")
            sys.exit(0)
        else:
            print("\n❌ 恢复失败！")
            sys.exit(1)
    
    else:
        parser.print_help()
        print("\n" + "=" * 50)
        print("示例：")
        print("  启用内置浏览器：python browser_toggle.py --enable")
        print("  启用（无头模式）：python browser_toggle.py --enable --headless")
        print("  禁用内置浏览器：python browser_toggle.py --disable")
        print("  查看状态：python browser_toggle.py --status")
        print("  切换到无头：python browser_toggle.py --headless")
        print("  切换到可视：python browser_toggle.py --visible")
        print("=" * 50)


if __name__ == "__main__":
    main()


path: build.sh
content: #!/bin/bash
# 发布脚本 - 创建 Skill 安装包

set -e

SKILL_NAME="browser-toggle"
SKILL_VERSION="1.0.0"
PACKAGE_NAME="${SKILL_NAME}-v${SKILL_VERSION}"
BUILD_DIR="/tmp/skill-build/$PACKAGE_NAME"
OUTPUT_DIR="$(pwd)/dist"

echo "========================================"
echo "构建 $SKILL_NAME v$SKILL_VERSION"
echo "========================================"
echo ""

# 清理旧构建
echo "🧹 清理旧构建..."
rm -rf "$BUILD_DIR" "$OUTPUT_DIR"
mkdir -p "$BUILD_DIR" "$OUTPUT_DIR"

# 复制文件
echo "📦 复制文件..."
cp -r ./* "$BUILD_DIR/"

# 删除不必要的文件
echo "🗑️ 删除不必要的文件..."
rm -f "$BUILD_DIR"/*.pyc
rm -rf "$BUILD_DIR"/__pycache__
rm -f "$BUILD_DIR"/dist/*.tar.gz 2>/dev/null || true

# 创建 README
echo "📝 创建发布说明..."
cat > "$BUILD_DIR/RELEASE.md" << EOF
# $SKILL_NAME v$SKILL_VERSION 发布说明

## 📦 安装

\`\`\`bash
# 解压
tar -xzf $PACKAGE_NAME.tar.gz
cd $PACKAGE_NAME

# 安装
bash setup.sh
\`\`\`

## 🚀 快速开始

\`\`\`bash
# 启用内置浏览器
openclaw-browser --enable
openclaw gateway restart

# 查看状态
openclaw-browser --status
\`\`\`

## 📚 文档

- README.md - 项目说明
- INSTALL.md - 安装指南
- 使用指南.md - 详细使用文档

## 📞 支持

- GitHub: https://github.com/openclaw/openclaw
- 文档：https://docs.openclaw.ai

## 📋 变更日志

### v1.0.0 (2026-02-28)
- ✅ 首次发布
- ✅ 一键启用/禁用内置浏览器
- ✅ 自动备份配置
- ✅ 失败自动恢复
- ✅ 支持 Linux/macOS/Windows
EOF

# 创建压缩包
echo "📦 创建压缩包..."
cd /tmp/skill-build
tar -czf "$OUTPUT_DIR/$PACKAGE_NAME.tar.gz" "$PACKAGE_NAME"

# 创建校验和
echo "🔐 创建校验和..."
cd "$OUTPUT_DIR"
sha256sum "$PACKAGE_NAME.tar.gz" > "$PACKAGE_NAME.tar.gz.sha256"

# 显示结果
echo ""
echo "========================================"
echo "✅ 构建完成！"
echo "========================================"
echo ""
echo "📦 发布包：$OUTPUT_DIR/$PACKAGE_NAME.tar.gz"
echo "🔐 校验和：$OUTPUT_DIR/$PACKAGE_NAME.tar.gz.sha256"
echo ""
echo "📊 文件大小："
ls -lh "$OUTPUT_DIR/$PACKAGE_NAME.tar.gz"
echo ""
echo "🔐 SHA256："
cat "$OUTPUT_DIR/$PACKAGE_NAME.tar.gz.sha256"
echo ""
echo "========================================"


path: install.sh
content: #!/bin/bash
# OpenClaw 内置浏览器 Skill - 快速安装脚本

echo "========================================"
echo "OpenClaw 内置浏览器 Skill - 安装"
echo "========================================"
echo ""

# 检查是否在正确的目录
if [ ! -f "browser_toggle.py" ]; then
    echo "❌ 请在 Skill 目录下运行此脚本"
    echo "   cd /home/ereala/.openclaw/workspace/skills/browser-toggle"
    exit 1
fi

# 设置执行权限
echo "📋 设置执行权限..."
chmod +x browser_toggle.py
chmod +x install.sh

# 创建符号链接（可选）
echo ""
echo "📁 创建全局命令..."
if [ -w "/usr/local/bin" ]; then
    ln -sf "$(pwd)/browser_toggle.py" /usr/local/bin/openclaw-browser
    echo "✅ 已创建全局命令：openclaw-browser"
else
    echo "⚠️ 无法创建全局命令（需要 sudo）"
    echo "   可以使用完整路径运行："
    echo "   $(pwd)/browser_toggle.py --enable"
fi

# 测试
echo ""
echo "🧪 测试安装..."
python3 browser_toggle.py --status

echo ""
echo "========================================"
echo "✅ 安装完成！"
echo "========================================"
echo ""
echo "使用方法："
echo "  启用内置浏览器：python3 browser_toggle.py --enable"
echo "  禁用内置浏览器：python3 browser_toggle.py --disable"
echo "  查看状态：python3 browser_toggle.py --status"
echo ""
echo "或（如果创建了全局命令）："
echo "  openclaw-browser --enable"
echo "  openclaw-browser --disable"
echo "  openclaw-browser --status"
echo ""
echo "========================================"


path: package.json
content: {
  "name": "browser-toggle",
  "version": "1.0.0",
  "description": "一键启用/禁用 OpenClaw 内置浏览器，无需手动修改配置文件",
  "author": "AI Assistant",
  "license": "MIT",
  "homepage": "https://github.com/your-username/browser-toggle",
  "repository": {
    "type": "git",
    "url": "https://github.com/your-username/browser-toggle.git"
  },
  "keywords": [
    "openclaw",
    "skill",
    "browser",
    "automation",
    "toggle"
  ],
  "main": "browser_toggle.py",
  "bin": {
    "openclaw-browser": "./browser_toggle.py"
  },
  "scripts": {
    "install": "bash setup.sh",
    "enable": "python3 browser_toggle.py --enable",
    "disable": "python3 browser_toggle.py --disable",
    "status": "python3 browser_toggle.py --status"
  },
  "engines": {
    "python": ">=3.8",
    "openclaw": ">=2026.2.26"
  },
  "os": [
    "linux",
    "darwin",
    "win32"
  ],
  "files": [
    "browser_toggle.py",
    "setup.sh",
    "README.md",
    "INSTALL.md",
    "使用指南.md",
    "SKILL.md",
    "skill.conf"
  ],
  "clawhub": {
    "category": "tools",
    "tags": ["browser", "automation", "utility"],
    "featured": false,
    "screenshots": [],
    "changelog": {
      "1.0.0": {
        "date": "2026-02-28",
        "changes": [
          "首次发布",
          "一键启用/禁用内置浏览器",
          "自动备份配置",
          "失败自动恢复",
          "支持可视化/无头模式"
        ]
      }
    }
  }
}


path: setup.sh
content: #!/bin/bash
# OpenClaw Browser Toggle Skill - 标准安装脚本
# 用法：bash setup.sh [安装目录]

set -e

SKILL_NAME="browser-toggle"
SKILL_VERSION="1.0.0"
INSTALL_DIR="${1:-$HOME/.openclaw/workspace/skills/$SKILL_NAME}"

echo "========================================"
echo "OpenClaw Browser Toggle Skill v$SKILL_VERSION"
echo "========================================"
echo ""
echo "📁 安装目录：$INSTALL_DIR"
echo ""

# 检查 OpenClaw 是否安装
if [ ! -d "$HOME/.openclaw" ]; then
    echo "❌ 未检测到 OpenClaw 安装"
    echo "   请先安装 OpenClaw: https://github.com/openclaw/openclaw"
    exit 1
fi

# 创建安装目录
echo "📋 创建安装目录..."
mkdir -p "$INSTALL_DIR"

# 复制文件
echo "📦 复制文件..."
cp -r "$(dirname "$0")"/* "$INSTALL_DIR/"

# 设置执行权限
echo "🔧 设置执行权限..."
chmod +x "$INSTALL_DIR/browser_toggle.py"
chmod +x "$INSTALL_DIR/install.sh"
chmod +x "$INSTALL_DIR/setup.sh" 2>/dev/null || true

# 创建符号链接（可选）
echo ""
echo "🔗 创建全局命令..."
if [ -w "/usr/local/bin" ]; then
    ln -sf "$INSTALL_DIR/browser_toggle.py" /usr/local/bin/openclaw-browser
    echo "✅ 已创建全局命令：openclaw-browser"
else
    echo "⚠️  无法创建全局命令（需要 sudo）"
    echo "   可以使用完整路径运行："
    echo "   $INSTALL_DIR/browser_toggle.py --enable"
fi

# 测试安装
echo ""
echo "🧪 测试安装..."
python3 "$INSTALL_DIR/browser_toggle.py" --status

# 显示使用说明
echo ""
echo "========================================"
echo "✅ 安装完成！"
echo "========================================"
echo ""
echo "使用方法："
echo "  启用内置浏览器：$INSTALL_DIR/browser_toggle.py --enable"
echo "  禁用内置浏览器：$INSTALL_DIR/browser_toggle.py --disable"
echo "  查看状态：$INSTALL_DIR/browser_toggle.py --status"
echo ""
echo "启用后需要重启 OpenClaw："
echo "  openclaw gateway restart"
echo ""
echo "详细文档：$INSTALL_DIR/README.md"
echo "使用指南：$INSTALL_DIR/使用指南.md"
echo ""
echo "========================================"


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