Jihulab Code Query Skill
通过 GitLab API V4 查询 jihulab.com 上的项目代码和变更记录,并支持通过 PAT 认证拉取代码。
前置条件
- Python 3.8+ 已安装
requests库已安装(pip install requests)- 已配置个人访问令牌
工具位置
<skill-dir>/jihulab.py
配置管理
设置访问令牌
当用户说"设置 jihulab token/令牌"时,使用共享凭证管理(推荐):
python -m scripts.credentials setup gitlaber
# 或仍可用旧子命令(已转发到共享凭证库)
python <skill-dir>/jihulab.py token set <glpat-xxx>
凭证统一存储在 ~/.claude/credentials.env,字段名 JH_TOKEN。
管理环境-分支映射
当用户说"配置环境 xxx 用分支 yyy"时:
python <skill-dir>/jihulab.py env set <env-name> <branch>
python <skill-dir>/jihulab.py env list
python <skill-dir>/jihulab.py env remove <env-name>
常用配置示例:
env set prod master— prod 环境对应 master 分支env set staging develop— staging 环境对应 develop 分支
查看文件代码
当用户说"查看/显示 xxx 项目的 yyy 文件"时:
python <skill-dir>/jihulab.py file <group/project> <file-path> [--branch <name>] [--start N] [--end N]
参数说明:
group/project— 项目路径,如my-team/my-projectfile-path— 仓库内文件路径,如src/main.py--branch— 分支名或环境名。如果是环境名(如 prod),自动映射到对应分支。不指定则使用项目默认分支--start / --end— 行号范围(1-based),可选
示例:
- "查看 prod 环境的 my-team/api 的 src/app.py" →
python <skill-dir>/jihulab.py file my-team/api src/app.py --branch prod - "看 src/app.py 第 20-50 行" → 追加
--start 20 --end 50 - "看 feature-login 分支的 config.yaml" →
--branch feature-login
查看变更记录
当用户说"查看/显示 xxx 项目的提交记录/变更记录/commit"时:
python <skill-dir>/jihulab.py commits <group/project> [--path <file>] [--branch <name>] [--since YYYY-MM-DD] [--until YYYY-MM-DD] [--limit N]
参数说明:
--path— 按文件路径筛选--branch— 分支名或环境名--since / --until— 日期范围--limit— 返回条数(默认 20)
示例:
- "看下 my-team/api 最近 10 条提交" →
python <skill-dir>/jihulab.py commits my-team/api --limit 10 - "查看 prod 环境的 src/main.py 变更" →
python <skill-dir>/jihulab.py commits my-team/api --path src/main.py --branch prod
拉取代码(fetch / pull)
当用户说"拉取/更新/同步 projects/xxx 的代码"时,使用 PAT 认证方式 fetch/pull:
# 拉取并合并(fetch + merge)
python <skill-dir>/jihulab.py pull <local-dir> [--branch <name>]
# 仅拉取不合并
python <skill-dir>/jihulab.py fetch <local-dir> [--branch <name>]
参数说明:
local-dir— 本地项目路径(如projects/aix-py),支持相对/绝对路径--branch— 可选,分支名或环境名,默认当前分支
工作原理:
- 自动从
<local-dir>/.git/config读取 remote origin 的 SSH URL - 将 SSH URL 转为 HTTPS+PAT URL(
https://oauth2:<PAT>@jihulab.com/...) - 执行
git fetch <https-url> <branch> pull命令会额外执行git merge FETCH_HEAD并显示更新摘要
示例:
- "拉取 aix-py 最新代码" →
python <skill-dir>/jihulab.py pull projects/aix-py - "更新 aix-py 的 master 分支" →
python <skill-dir>/jihulab.py pull projects/aix-py --branch master - "仅 fetch aix-py 不合并" →
python <skill-dir>/jihulab.py fetch projects/aix-py - "拉取 prod 环境代码" →
python <skill-dir>/jihulab.py pull projects/aix-py --branch prod
注意:projects/ 目录下的直接 git fetch/pull 会被 hook 拦截,必须通过此 skill 操作。
分支解析规则
--branch 参数按以下优先级解析:
- 用户明确指定分支名 → 先检查是否匹配环境名,是则映射,否则直接使用
- 用户提到环境名(如 prod/staging)→ 查
env-config.json映射到分支 - 未指定 → 不传 ref 参数,API 返回默认分支内容
常用项目速查
| 项目 | ID | 路径 |
|---|---|---|
| ai-dispatcher | 233017 | maycur/maycur-llm/ai-dispatcher |
| aix-py | 281452 | maycur/maycur-llm/aix-py |
| maycur-ai-audit | 338301 | maycur/maycur-llm/maycur-ai-audit |
| dify | 227411 | maycur/maycur-llm/dify |
| dify-dsl-backup | 275434 | maycur/maycur-llm/dify-dsl-backup |
| ai-audit-server | 326189 | maycur/maycur-llm/ai-audit-server |
代码搜索技巧
当 file 命令无法定位目标文件时,可通过 GitLab API 搜索:
搜索项目
TOKEN=$(python -c "import json; print(json.load(open('<skill-dir>/config.json'))['token'])")
curl -s --header "PRIVATE-TOKEN: $TOKEN" \
"https://jihulab.com/api/v4/projects?search=PROJECT_NAME&per_page=10" \
| python -c "import sys,json; [print(f'{p[\"id\"]:6d} {p[\"path_with_namespace\"]}') for p in json.load(sys.stdin)]"
搜索代码(Blob Search)
curl -s --header "PRIVATE-TOKEN: $TOKEN" \
"https://jihulab.com/api/v4/projects/PROJECT_ID/search?scope=blobs&search=KEYWORD&per_page=20" \
| python -c "import sys,json; [print(f'{b[\"filepath\"]}:{b[\"startline\"]}') for b in json.load(sys.stdin)]"
注意事项
- Blob search 可能返回空结果(权限/索引原因),此时改用浏览目录 + 查看文件方式
- 递归目录列表
recursive=true默认per_page=20,大项目需增加per_page或分页 - CLI 不支持
search子命令,搜索需直接调 API
注意事项
- 所有命令在项目根目录下执行
- 首次使用前必须先配置令牌:
python -m scripts.credentials setup gitlaber(或python <skill-dir>/jihulab.py token set <your-token>) - 如果返回 404 错误,提示用户检查项目路径格式(
group/project)和文件路径 - 如果返回 401 错误,提示用户令牌可能已过期,需要重新设置
- 先确认目标项目:排查问题时先确定代码在哪个项目,避免在错误仓库搜索(如审核代码在 aix-py 不在 ai-dispatcher)