Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Aliyun Codeup

v1.0.0

阿里云云效 Codeup 代码仓库管理 - 查询项目、分支、提交记录等

0· 98·1 current·1 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for alexmayanjun-collab/aliyun-codeup.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Aliyun Codeup" (alexmayanjun-collab/aliyun-codeup) from ClawHub.
Skill page: https://clawhub.ai/alexmayanjun-collab/aliyun-codeup
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install aliyun-codeup

ClawHub CLI

Package manager switcher

npx clawhub@latest install aliyun-codeup
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
技能的名称、描述、SKILL.md 和 codeup_cli.py 都聚焦于通过个人访问令牌查询阿里云 Codeup 项目、分支和提交记录,功能与目的相符. 然而 registry 元数据宣称“Required env vars: none / Primary credential: none”,但实际运行指令和代码均依赖 YUNXIAO_PERSONAL_TOKEN,这是不一致且值得注意的元数据遗漏。
Instruction Scope
SKILL.md 指示使用环境变量 token 并给出两种可行方法(临时 git clone 或 API 调用)。运行说明、示例命令和 codeup_cli.py 的行为都局限于访问 codeup.aliyun.com / 本地临时克隆并清理,未要求读取系统上其他敏感路径或将数据发送到非预期第三方。
Install Mechanism
没有安装脚本或外部下载;代码作为文本随技能提供(codeup_cli.py),没有在安装阶段写入或拉取远程二进制,因此安装机制风险低。
!
Credentials
技能运行需要 YUNXIAO_PERSONAL_TOKEN(用于 OAuth2 URL 或 HTTP Private-Token 头),这是与功能直接相关的最小权限。但注册表元数据未声明该环境变量为必需(元数据显示“无”),导致权限/凭据需求未被透明化。另有一项实现细节风险:示例和 codeup_cli.py 建议将 token 放入 HTTPS URL(https://oauth2:token@...),这在某些系统上可能导致凭据暴露(shell 历史、进程列表、.git/config 中的 remote URL)。
Persistence & Privilege
技能没有请求常驻(always)权限,也不会修改其他技能或系统范围配置。它在运行时创建临时目录并在完成后删除,未要求长期系统权限或自动启用行为。
What to consider before installing
要点汇总和建议: - 证书声明不一致:技能确实需要 YUNXIAO_PERSONAL_TOKEN 来访问 Codeup,但技能的 registry 元数据并未列出它。安装前确认技能来源(维护者信息)或联系维护者修正元数据。 - 凭据暴露风险:示例和脚本使用形式 https://oauth2:{$TOKEN}@codeup.aliyun.com/...,在某些系统上该 URL 可出现在进程列表、shell 历史或被写入 .git/config(尽管脚本使用临时目录并会删除,但暴露窗口仍然存在)。建议改用: - Git 凭据助手(git credential helper)或使用 git 的授权代理,而不是将 token 放在 URL 中;或 - 使用 API (Private-Token 头) 并通过 stdin/环境变量传递,而不是在命令行参数中显式包含令牌。 - 最小权限:确保为令牌只授予必要的最小范围(SKILL.md 建议的 read_api 和 read_repository 是合理的)。如果不愿意提供仓库读取权限,请不要安装或使用该技能。 - 审核与测试:在受控环境(例如隔离的临时帐户或沙箱)中先行测试,观察是否有意外的网络请求或日志记录将令牌写出。检查你本地/远程系统(如 CI/CD、shell 历史)中是否可能保存了带 token 的 URL。 - 透明性改进请求:建议技能作者在 registry 元数据中明确列出 YUNXIAO_PERSONAL_TOKEN 作为必需 env var,并在 README/SKILL.md 中注明对 token 的处理方式以减少暴露面。 总体上,代码本身看起来在功能上与描述一致且没有明显的隐蔽后门,但由于元数据不透明与示例中存在的凭据暴露模式,建议在信任并投入真实凭据前小心评估和调整使用方式。

Like a lobster shell, security has layers — review code before you run it.

latestvk9702r8vva5yxhdbdd58saxmks83hvhz
98downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

阿里云云效 Codeup 技能

通过个人访问令牌访问阿里云云效 Codeup 代码仓库。

🔑 配置要求

1. 环境变量

~/.zshrc 或 Gateway 环境变量中配置:

export YUNXIAO_PERSONAL_TOKEN="pt-xxx"  # 云效个人访问令牌

2. 令牌获取

  1. 访问 https://codeup.aliyun.com/
  2. 右上角头像 → 个人设置 → 个人访问令牌
  3. 创建令牌,勾选权限:
    • read_api - 读取代码库
    • read_repository - 读取仓库

🛠️ 功能

查询项目分支

输入: 项目 URL 或路径 输出: 分支列表、统计信息

示例:

查看云效项目 https://codeup.aliyun.com/flashexpress/ard/be/tools/data-admin-api 的分支

查询项目信息

输入: 项目 URL 输出: 项目名称、描述、成员数、最近活动

查询提交记录

输入: 项目 URL + 分支名 输出: 最近提交记录、提交者、时间

分析分支活跃度

输入: 项目 URL 输出: 各分支最后提交时间、活跃度排名

📋 使用方式

方式 1:Git Clone(推荐)

# 临时克隆查询
git clone --quiet "https://oauth2:$YUNXIAO_PERSONAL_TOKEN@codeup.aliyun.com/<path>.git"
cd <repo> && git branch -a
cd /tmp && rm -rf <repo>

优点:

  • ✅ 稳定可靠
  • ✅ 支持所有 Git 操作
  • ✅ 无需处理 API 分页

缺点:

  • ⚠️ 需要临时克隆(小项目很快)

方式 2:HTTP API

# 查询分支
curl -s "https://codeup.aliyun.com/api/v3/projects/<id>/repository/branches" \
  -H "Private-Token: $YUNXIAO_PERSONAL_TOKEN"

# 查询项目
curl -s "https://codeup.aliyun.com/api/v3/projects?search=<name>" \
  -H "Private-Token: $YUNXIAO_PERSONAL_TOKEN"

优点:

  • ✅ 快速(无需克隆)
  • ✅ 节省带宽

缺点:

  • ⚠️ API 地址可能变化
  • ⚠️ 需要处理认证重定向

🔧 核心脚本

codeup_cli.py

#!/usr/bin/env python3
"""
阿里云云效 Codeup CLI 工具
"""

import subprocess
import sys
import os
import tempfile
import shutil
from urllib.parse import urlparse

def get_token():
    """从环境变量获取令牌"""
    token = os.getenv('YUNXIAO_PERSONAL_TOKEN')
    if not token:
        print("❌ 错误:未配置 YUNXIAO_PERSONAL_TOKEN 环境变量")
        sys.exit(1)
    return token

def parse_project_url(url):
    """解析项目 URL"""
    parsed = urlparse(url)
    path = parsed.path.strip('/')
    # 移除末尾的 /branches, /commits 等
    if '/' in path:
        parts = path.split('/')
        if parts[-1] in ['branches', 'commits', 'tree', 'blob']:
            path = '/'.join(parts[:-1])
    return path

def clone_and_query(url):
    """临时克隆并查询分支"""
    token = get_token()
    project_path = parse_project_url(url)
    
    # 创建临时目录
    tmp_dir = tempfile.mkdtemp(prefix='codeup_')
    repo_name = project_path.split('/')[-1]
    repo_path = os.path.join(tmp_dir, repo_name)
    
    try:
        # 克隆仓库
        git_url = f"https://oauth2:{token}@codeup.aliyun.com/{project_path}.git"
        subprocess.run(
            ['git', 'clone', '--quiet', '--depth=1', git_url, repo_path],
            check=True,
            capture_output=True
        )
        
        # 查询分支
        result = subprocess.run(
            ['git', 'branch', '-a'],
            cwd=repo_path,
            capture_output=True,
            text=True,
            check=True
        )
        
        # 解析分支列表
        branches = []
        for line in result.stdout.strip().split('\n'):
            if line.strip() and 'HEAD' not in line:
                branch = line.replace('*', '').replace('remotes/origin/', '').strip()
                if branch:
                    branches.append(branch)
        
        return {
            'success': True,
            'project': repo_name,
            'branches': sorted(branches),
            'total': len(branches)
        }
        
    except subprocess.CalledProcessError as e:
        return {
            'success': False,
            'error': f'Git 操作失败:{e.stderr.decode() if e.stderr else str(e)}'
        }
    finally:
        # 清理临时目录
        if os.path.exists(tmp_dir):
            shutil.rmtree(tmp_dir, ignore_errors=True)

def main():
    if len(sys.argv) < 2:
        print("用法:codeup_cli.py <项目 URL>")
        print("示例:codeup_cli.py https://codeup.aliyun.com/flashexpress/ard/be/tools/data-admin-api")
        sys.exit(1)
    
    url = sys.argv[1]
    result = clone_and_query(url)
    
    if result['success']:
        print(f"✅ 项目:{result['project']}")
        print(f"📊 分支总数:{result['total']}")
        print("\n分支列表:")
        for branch in result['branches']:
            print(f"  - {branch}")
    else:
        print(f"❌ 错误:{result['error']}")
        sys.exit(1)

if __name__ == '__main__':
    main()

📖 使用示例

示例 1:查询分支

用户: 查看云效项目 https://codeup.aliyun.com/flashexpress/ard/be/tools/data-admin-api 的分支

执行:

cd /tmp && rm -rf data-admin-api
git clone --quiet "https://oauth2:$YUNXIAO_PERSONAL_TOKEN@codeup.aliyun.com/flashexpress/ard/be/tools/data-admin-api.git"
cd data-admin-api && git branch -a | grep -v HEAD | sed 's/remotes\/origin\///' | sort
cd /tmp && rm -rf data-admin-api

输出:

📊 项目:data-admin-api
📊 分支总数:62

主分支:
  - master

功能分支 (45):
  - feature/common.20251211
  - feature/common.20251105
  - feature/20250730.geminifile
  ...

热修复分支 (15):
  - hotfix/myj.250723
  - hotfix/myj.batch
  ...

示例 2:分析分支活跃度

用户: 分析这个项目哪些分支最近有更新

执行:

cd /tmp/data-admin-api
git branch -a --sort=-committerdate | head -20

输出:

📈 最近活跃的分支(按最后提交时间):

1. master - 2 小时前
2. feature/common.20251211 - 1 天前
3. hotfix/myj.250723 - 3 天前
...

⚠️ 注意事项

安全

  • ✅ 令牌存储在环境变量,不写入代码
  • ✅ 临时克隆后自动清理
  • ❌ 不要将令牌写入文档或日志

性能

  • 小项目(<100MB):克隆约 5-10 秒
  • 中项目(100-500MB):克隆约 10-30 秒
  • 大项目(>500MB):建议使用 API 或浅克隆(--depth=1)

权限

令牌需要以下权限:

  • read_api - 读取项目信息
  • read_repository - 克隆仓库

🔗 相关资源


版本: 1.0.0
创建时间: 2026-03-06
维护者: 汉克 (Hank)

Comments

Loading comments...