RTK 如何压缩 GitLab CLI(glab)的 MR 列表、CI trace 与 Release 输出? 📅 发布时间:2026/9/12 16:29:40 👁 浏览次数: RTK 如何压缩 GitLab CLIglab的 MR 列表、CI trace 与 Release 输出【免费下载链接】rtkCLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies项目地址: https://gitcode.com/GitHub_Trending/rtk4/rtk在 GitLab 项目里用glab查看 MR、拉取 CI job 日志、浏览 Release 时原始输出往往携带大量 LLM 用不到的内容完整 JSON 字段、runner 启动/checkout/上传 artifact 的样板行、SOURCES 归档下载链接等。RTK 的rtk glab子命令把这些输出过滤成紧凑文本后再交给终端或 AI 代理。前提是本机已安装 RTK安装方式见 INSTALL.md和glab并完成 GitLab 登录配置rtk glab本身不做登录或认证所有参数原样传给glab。哪些子命令被压缩哪些直接透传rtk glab的入口定义在 src/main.rsGlab变体压缩逻辑在 src/cmds/git/glab_cmd.rs。按 src/cmds/git/README.md 与源码行为分两类走压缩路径本文主角rtk glab mr list/mr view/issue list/ci list/ci status/ci trace/release list/release view直接透传、不压缩命令里显式带了-F/--output/--jsonhas_output_flag()检测到后原样透传避免重复注入 JSON 参数mr view/issue view带--web或--comments交互式查看场景压缩反而碍事glab api文档明确说明这是显式/高级命令转换成紧凑 schema 会丢掉所有值因此透传并记 0% 节省glab ci view交互式 TUI必须继承 stdio透传运行mr/issue/release下未被单独实现的子命令如mr create走独立处理器其余未识别的也透传。跨仓库查询时用-Rowner/repo或-ggroupRTK 在 clap 层声明这两个参数并追加到 glab 参数尾部保证子命令分发不被破坏例如rtk glab -R acme/toolkit mr list。压缩 MR 列表rtk glab mr listrtk glab mr listRTK 实际执行glab mr list -F json拿到 JSON 数组后每条 MR 只渲染 4 个字段状态图标、!iid、标题截断到 60 字符、作者 username。状态与 glab 的小写枚举一一对应opened→[open]、merged→[merged]、closed→[closed]。列表最多输出 20 行常量CAP_LIST见 src/core/truncate.rs超出部分折叠为一行… N more空结果输出No Merge Requests。以下输出基于仓库测试 fixture tests/fixtures/glab_mr_list_raw.json 中的 10 条 MR按源码渲染规则推导属示例结果实际值以你的项目为准Merge Requests [open] !314 feat(glab): add GitLab CLI (glab) command support (alice_dev) [merged] !310 fix(git): handle merge commits in compact diff (dave_fix) [open] !305 feat(aws): add AWS CLI module with token-optimized output (frank_contrib) [merged] !302 chore(master): release 0.24.0 (release-bot) [merged] !298 docs: update README with Python and Go command examples (ivan_docs) [closed] !295 refactor: extract parser module from runner.rs (karl_refactor) [merged] !290 feat(tee): save raw output on failure for LLM re-read (lisa_feat) [merged] !285 ci: add ARM64 Linux build to release workflow (nancy_ci) [open] !280 fix(vitest): handle watch mode output gracefully (peter_bugfix) [merged] !275 feat(discover): add rtk discover command for missed savings analysis (quinn_dev)对比同一 fixture 的原始 JSON每条记录带web_url、created_at/updated_at、labels、assignees、reviewers、含 HTML 注释和徽章链接的description、head_pipeline等完整字段压缩后全部丢弃。JSON 解析失败时glab 对空结果有时会返回纯文本回退为原始 stdout 输出不会报错。剥离 CI trace 样板rtk glab ci tracertk glab ci traceglab ci trace不支持-F json所以 RTK 走纯文本过滤filter_ci_trace按 src/cmds/git/README.md 分三步ANSI 转义剥离 → GitLab section 标记section_start/end:时间戳:名称[0K过滤 → runner/git/artifact 样板行删除。被删除的行包括runner 样板Running with gitlab-runner ...、on ... system ID: ...、Using Docker executor、Using Shell、Running on ...、Preparing ...、Getting source from ...、Resolving secrets、Cleaning up、Uploading/Downloading artifacts、Runtime platformgit 样板Fetching changes with git ...、Initialized empty Git ...、Created fresh repository.、Checking out ...、Skipping Git submodules ...。保留的内容是真正的构建与测试结果。以仓库 fixture tests/fixtures/glab_ci_trace_raw.txt一段含 npm 构建和 vitest 失败的 trace为例过滤后示例结果为$ npm ci added 847 packages in 12s $ npm run build acme-toolkit3.2.1 build tsc vite build vite v5.2.0 building for production... ✓ 142 modules transformed. ⚠ Some chunks are larger than 500 kB after minification. dist/index.html 0.45 kB │ gzip: 0.29 kB dist/assets/main-a1b2c3.js 156.78 kB │ gzip: 48.23 kB dist/assets/style-d4e5f6.css 12.34 kB │ gzip: 3.45 kB ✓ built in 4.56s $ npm test acme-toolkit3.2.1 test vitest run ✓ src/utils.test.ts (3 tests) 45ms ✓ src/api.test.ts (7 tests) 123ms ✗ src/auth.test.ts (2 tests) 67ms FAIL src/auth.test.ts validateToken should reject expired tokens AssertionError: expected true to be false at src/auth.test.ts:42:18 Test Files 1 failed | 2 passed | 3 total Tests 1 failed | 11 passed | 12 total Duration 0.89s ERROR: Job failed: exit code 1原文件共 54 行其中约一半是prepare_executor、get_sources、download/upload_artifacts、cleanup_file_variables等 section 样板过滤后FAIL、AssertionError和结尾的ERROR: Job failed完整保留——排查失败时最需要的就是这几行。压缩 Release 输出rtk glab release list / viewrtk glab release list rtk glab release viewrelease list解析 glab 的制表符表格Name\tTag\tCreated跳过Showing N releases...前导行重排为Releases头部 每行一条记录名称与 tag 相同时只打印一次不同时以[tag]括注最多输出 20 条。基于 fixture tests/fixtures/glab_release_list_raw.txt 的示例结果Releases v3.2.1 (about 2 days ago) v3.2.0 (about 1 week ago) v3.1.0 (about 3 weeks ago) v3.0.0 (about 1 month ago) ...注意一个版本边界该解析器面向传统 tab 分隔格式。若你使用的 glab 1.82 输出格式不匹配文档中说明 1.82 起格式有变化format_release_list返回空RTK 回退打印原始输出而不是报错。release view保留发布说明正文删除SOURCES段落及其后的归档下载 URL.zip/.tar.gz/.tar.bz2/.tar链接纯图片行...和 glab 渲染的Image: name → url行HTML 注释!-- ... --与整行的水平分割线连续空行折叠为一个空行。以 fixture tests/fixtures/glab_release_view_raw.txt 为例SOURCES下 4 条 archive 链接和!-- internal tracking: PROJ-123 --被删掉而## Whats Changed列表、alice_dev bob_dev贡献者和结尾的 View this release on GitLab at ... 链接保留。如何验证压缩效果RTK 仓库在 src/cmds/git/glab_cmd.rs 的单元测试里用 fixture 数据断言了压缩下限可当作核对基准按空白分词计数仅对 fixture 样本成立不是对你所有数据的承诺子命令测试断言mr listtoken 节省 ≥ 60%ci tracetoken 节省 ≥ 30%节省主要来自样板剥离构建输出本身保留release list/release viewtoken 节省 ≥ 20%原文本已较紧凑节省主要来自前导行/SOURCES实操验证方法在同一项目分别运行裸glab mr list -F json与rtk glab mr list比较两段输出的 token 量级rtk glab mr list出现Merge Requests头、状态标签[open]/[merged]/[closed]即说明走了压缩路径而非透传。ci trace的输出中若还能看到Running with gitlab-runner、Checking out这类行说明过滤未按预期生效例如走了透传分支。已知边界与回退行为ci status依赖英文关键词glab 不提供-F jsonRTK 按passed/success/failed/running/pending/canceled等英文关键词解析在非英文 locale 下识别不到任何关键词时原样返回 raw 输出单测test_format_ci_status_non_english_fallback用一段法语输出验证了此回退。release list的 1.82 格式回退解析不出制表符表格时打印原始输出。JSON 回退mr list等 JSON 处理器在 glab 返回非 JSON如空结果纯文本时直接回退 raw stdout。显式格式参数即透传只要命令里出现-F/--output/--jsonRTK 不做任何过滤mr view的--web/--comments同理。字段缺失不 panicglab 返回的嵌套字段为 null 时如缺作者、缺 pipeline渲染为???占位符。实现细节可继续对照 src/cmds/git/README.md 中 glab 与 gh 的 JSON schema 对照表!42记法、author.username、web_url、description、merge_status、head_pipeline.status、labels 为字符串数组等这些差异是 MR 列表渲染字段的选择依据。【免费下载链接】rtkCLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies项目地址: https://gitcode.com/GitHub_Trending/rtk4/rtk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考