Skill: feixintianxia/zlmediakit (version 1.0.0)

--- name: "zlmediakit-analyzer" description: "定期拉取 ZLMediaKit 仓库，查看最新的 Issue、Pull Request，并提供源码深度分析功能。当用户要求查看 ZLMediaKit 动态、Issue、PR 或分析其源码时触发调用。" metadata: { "openclaw": { "requires": { "tools": ["git", "gh", "curl", "grep"] } } } --- # ZLMediaKit Analyzer 该 Skill 用于定期跟踪和分析开源流媒体框架 [ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit) 的最新动态，包括 Issue、Pull Request，并支持对其 C++11 源码进行深度分析。 ## 环境要求 - 已安装 `git` (用于克隆和拉取代码) - 已安装 GitHub CLI `gh` (用于获取 Issue 和 PR 列表) - 可选：配置 `GITHUB_TOKEN` 环境变量以避免 API 速率限制 ## Workflow 工作流 当用户触发此 Skill 时，Agent 应按照以下步骤执行： ### 1. 检查并拉取最新代码 (Sync Code) 检查本地是否存在 ZLMediaKit 代码库（默认路径：`D:\.openclaw\workspace\ZLMediaKit`）。 - **如果不存在**，使用 `RunCommand` 工具执行克隆： ```powershell git clone https://github.com/ZLMediaKit/ZLMediaKit.git D:\.openclaw\workspace\ZLMediaKit ``` - **如果已存在**，则进入目录并拉取最新代码： ```powershell cd D:\.openclaw\workspace\ZLMediaKit git pull origin master ``` ### 2. 获取最新动态 (Fetch Issues & PRs) 使用 `RunCommand` 工具调用 `gh` CLI 获取最新的 5 个 Issue 和 Pull Request： - **查看最近的 Issues**： ```powershell gh issue list -R ZLMediaKit/ZLMediaKit --limit 5 --state all ``` - **查看最近的 Pull Requests**： ```powershell gh pr list -R ZLMediaKit/ZLMediaKit --limit 5 --state all ``` *(注：如果没有 `gh` CLI，可以使用 `curl -s https://api.github.com/repos/ZLMediaKit/ZLMediaKit/issues?per_page=5` 替代)* ### 3. 源码深度分析 (Code Analysis) 当用户要求分析特定模块或源码（如 RTSP/RTMP、WebRTC、网络 IO 模型等）时： - 优先建议使用内置的 **search agent** (`default_api:search`) 或 **SearchCodebase** 工具，在 `D:\.openclaw\workspace\ZLMediaKit` 目录下搜索相关实现。 - 结合 ZLMediaKit 项目的特点进行解读： - 基于 **C++11** 开发，无裸指针，采用智能指针管理内存。 - 使用 **多路复用/多线程/异步网络 IO 模式**。 - 支持多种协议互转 (RTSP/RTMP/HLS/WebRTC 等)。 - 对关键的类（如 `TcpServer`, `EventPoller`, `Session` 等）或请求处理流程进行追踪，生成函数调用栈或架构解析。 ### 4. 生成报告 (Generate Report) 根据用户需求，综合社区动态（最新的 Issue/PR 讨论）与源码分析结果，输出结构化、排版清晰的 Markdown 报告。报告中应包含代码文件的具体路径（如 `src/Network/TcpServer.cpp`）及核心逻辑解释。 ## 计划任务 / 定期拉取说明 如需**定期**执行，可通过 OpenClaw 或系统级定时任务（如 Windows 任务计划程序、Cron）调用该 Skill 对应的执行脚本，自动触发 "拉取代码 -> 检查 PR -> 生成简报" 的工作流。

path: README.md
content: # ZLMediaKit Analyzer Skill

该 OpenClaw Skill 用于自动化跟踪开源流媒体项目 **ZLMediaKit** 的最新进展，并且帮助你进行源码分析。

## 核心功能

1. **自动拉取代码**：自动将 `https://github.com/ZLMediaKit/ZLMediaKit` 克隆或更新到本地工作区 (`D:\.openclaw\workspace\ZLMediaKit`)。
2. **抓取 Issue 和 PR**：调用 GitHub API 获取最近的讨论和更新，生成汇总报告。
3. **源码分析辅助**：准备好本地源码后，通过 OpenClaw 内置的 Search Agent 或 Grep 工具深度分析其 C++11 实现。

## 文件结构

- `SKILL.md`: OpenClaw 识别该 Skill 的元数据和工作流定义。
- `scripts/sync_and_analyze.py`: 一个 Python 辅助脚本，可直接运行来拉取代码并生成包含 Issue/PR 的报告 `zlmediakit_report.md`。
- `.trae/skills/zlmediakit-analyzer/SKILL.md`: 兼容 Trae IDE 格式的 Skill 描述文件。

## 如何使用

### 1. 手动运行脚本测试

如果想立即拉取代码并查看最新的 Issues/PRs，请在终端执行：
```powershell
python D:\.openclaw\workspace\skills\zlmediakit\scripts\sync_and_analyze.py
```
> **注意**：如果不配置 `GITHUB_TOKEN` 环境变量，可能会遇到 GitHub API 请求速率限制。
> 配置方法：
> ```powershell
> [System.Environment]::SetEnvironmentVariable("GITHUB_TOKEN", "your_personal_access_token", "User")
> ```

### 2. 通过对话触发 Skill

你可以在对话中直接告诉 OpenClaw：
- "调用 zlmediakit-analyzer 查看最新的 PR"
- "分析 ZLMediaKit 中 TcpServer 的实现源码"
- "帮我运行 ZLMediaKit 的分析脚本并总结报告"

OpenClaw 将根据 `SKILL.md` 中定义的工作流，自动克隆代码、读取报告并回答你的问题。

### 3. 定期运行 (Cron)

如果你希望每天定期拉取，可以使用 Windows 任务计划程序配置每天运行一次上述的 Python 脚本。


path: scripts/sync_and_analyze.py
content: import os
import subprocess
import urllib.request
import json
import datetime
import argparse

REPO_URL = "https://github.com/ZLMediaKit/ZLMediaKit.git"
API_BASE = "https://api.github.com/repos/ZLMediaKit/ZLMediaKit"
WORKSPACE_DIR = os.environ.get("WORKSPACE_DIR", r"D:\.openclaw\workspace")
TARGET_DIR = os.path.join(WORKSPACE_DIR, "ZLMediaKit")

def run_cmd(cmd, cwd=None):
    print(f"Running: {cmd}")
    result = subprocess.run(cmd, shell=True, cwd=cwd, capture_output=True, text=True)
    if result.returncode != 0:
        print(f"Error executing {cmd}:\n{result.stderr}")
    return result.stdout.strip()

def sync_code():
    if not os.path.exists(TARGET_DIR):
        print(f"Directory {TARGET_DIR} not found. Cloning repository...")
        run_cmd(f"git clone {REPO_URL} {TARGET_DIR}")
    else:
        print(f"Directory {TARGET_DIR} exists. Pulling latest code...")
        run_cmd("git pull origin master", cwd=TARGET_DIR)

def fetch_github_data(endpoint, limit=5):
    url = f"{API_BASE}/{endpoint}?per_page={limit}&state=all"
    req = urllib.request.Request(url)
    
    [REDACTED_SECRET]"GITHUB_TOKEN")
    if [REDACTED_SECRET]"Authorization", f"token {token}")
        
    try:
        with urllib.request.urlopen(req) as response:
            data = json.loads(response.read().decode())
            return data
    except Exception as e:
        print(f"Error fetching {endpoint}: {e}")
        return []

def generate_report():
    print("Fetching recent issues and PRs...")
    issues = fetch_github_data("issues", 10)
    
    if not issues:
        issues_error = True
    else:
        issues_error = False
        
    # GitHub API returns PRs as issues too, so we filter them out
    real_issues = [i for i in issues if "pull_request" not in i][:5] if not issues_error else []
    pull_requests = [i for i in issues if "pull_request" in i][:5] if not issues_error else []
    
    report_lines = [
        f"# ZLMediaKit Analyzer Report",
        f"*Generated on: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*",
        "",
        "## 📦 仓库状态",
        f"- **本地路径**: `{TARGET_DIR}`",
        f"- **最后提交**: ",
        run_cmd('git log -1 --format="%h - %s (%cr) <%an>"', cwd=TARGET_DIR) if os.path.exists(TARGET_DIR) else "N/A",
        "",
    ]
    
    if issues_error:
        report_lines.append("⚠️ **警告**: 获取 Issue 和 PR 失败，可能是因为触发了 GitHub API 速率限制。请配置 `GITHUB_TOKEN` 环境变量。")
    else:
        report_lines.append("## 🐛 最近 Issues")
        for i in real_issues:
            report_lines.append(f"- [#{i['number']}]({i['html_url']}) {i['title']} ({i['state']})")
            
        report_lines.extend(["", "## 🔄 最近 Pull Requests"])
        for pr in pull_requests:
            report_lines.append(f"- [#{pr['number']}]({pr['html_url']}) {pr['title']} ({pr['state']})")
        
    report_content = "\n".join(report_lines)
    
    report_path = os.path.join(WORKSPACE_DIR, "zlmediakit_report.md")
    with open(report_path, "w", encoding="utf-8") as f:
        f.write(report_content)
        
    print(f"\nReport generated at: {report_path}")
    return report_path

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="ZLMediaKit Analyzer Skill Script")
    parser.add_argument("--skip-sync", action="store_true", help="Skip git clone/pull")
    args = parser.parse_args()

    if not args.skip_sync:
        sync_code()
        
    generate_report()
    print("Done. To analyze source code, ask the OpenClaw agent to use search tools on the cloned directory.")


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