已关闭
feat(lark): 集成 lark-cli 支持飞书群消息与 issue/PR 通知 #493
aflyingto创建于 8月4日关闭于 8月4日
aflyingto
8月4日 评论:
8月4日 评论:
验证记录
- 当前验证版本/分支:origin/main(commit 无 lark/feishu 集成)+ 本地分支 feat/lark-integration
- 需求确认:用户已确认要在 gc 中适配 lark-cli,支持发送飞书群消息并在 issue/PR 创建时回推通知
- 复现/核查命令:
git grep -il "lark-cli\|feishu\|飞书" origin/main -- 'pkg/**' 'api/**'→ 空(无现存实现)lark-cli --version→lark-cli version 1.0.82(官方工具可用)lark-cli auth status→ user 身份 ready,token valid(OAuth 链路通)
- 结论:需求真实,无重复实现,设计方案(子进程委托 lark-cli + lazy 安装检测 + 默认群配置)可行。进入开发。


aflyingto
8月4日 评论:
8月4日 评论:
范围调整
经讨论,把「issue/pr create 挂载 --notify-lark 通知 hook」拆分到独立 Issue #494 跟踪,控制本期评审范围。
本期 #493 只交付独立的飞书发送与配套能力:
gc lark send(发送消息,支持 --text/--markdown/--file/--body-file,默认群路由)gc lark auth status(登录状态)gc lark install(lazy 安装)gc lark doctor(安装+登录检测)gc lark config get/set --default-chat(默认群管理)- 消息正文敏感信息扫描
pkg/larkcli子进程委托包 + 单元测试
验收标准中「issue create --notify-lark」「pr create --notify-lark」两项移至 #494。其余验收项保持不变。


aflyingto
8月4日 评论:
8月4日 评论:
PR 已提交
PR #428: https://gitcode.com/gitcode-cli/cli/merge_requests/428
分支: feat/lark-integration | Base: main | Closes #493
交付内容
pkg/larkcli/子进程委托包(detect/run/install/config)+ 单测pkg/cmd/lark/命令域:send(--chat-id/--user-id/--to-self互斥 + 默认群回退,--text/--markdown/--file/--body-file,secret 扫描,--dry-run/--json)、auth status、install、doctor、config set|get+ 单测pkg/config/SecureWriteFile导出复用docs/COMMANDS.mdlark 章节 + 环境变量- 真实命令验证:
gc lark send --to-self(bot→user P2P 自通知,text/markdown/json 全通)、群消息、auth status、doctor、config 均通过
通知 hook 拆分
issue/pr --notify-lark 挂载 hook 已拆到 #494 跟踪。
待办(合并前)
- 第一轮多角色评审(代码/安全/测试/文档)——需独立执行主体,非作者自检
- 远端 CI(GitCode 原生 Linux + GitHub 镜像跨平台)
risk/high改动需人工最终确认
工具问题(非本 PR 范围)
gc pr label 命令声称成功添加标签但 PR 实际标签未变,疑似 gc 自身 bug,另议。


aflyingto
8月4日 评论:
8月4日 评论:
最终状态(合并前门禁)
已完成
- ✅ 作者自检(结构化,见 PR body)
- ✅ 第一轮独立多角色评审:CHANGES-REQUESTED → 3 个 P1 + P2 全部修复(见 PR #428 评审修复评论)
- exit 4 映射实现、openId 防御性兼容、覆盖率 64.1%→78.6%/78.2%
- env 剥离 GC_TOKEN、stdin 不继承、复用 cmdutil、删死代码
- ✅ 真实命令验证:
gc lark send --to-self(exit 0)、成员权限错误→exit 4 - ✅ 远端 CI(GitCode 原生 Linux):run 50 head
a925660,Lint/Test/Build/Package 全 COMPLETED,无失败
剩余(合并前)
- ⏳
risk/high改动需人工最终确认(spec §5.8)—— 本改动为新增命令域+导出包装,未改写既有认证/配置路径,提请人工裁定是否可降为 risk/medium 后合并 - ⏳ 可选:评审者对修复的复核(P1 已修,按 spec P1 非阻塞,第二轮评审按需)
CI 证据
- GitCode Actions run 50:
81454db5055340febd85fe83e78052cb,head_shaa925660eb0caf671d91b7b0a352c38041f6a6b59 - GitHub 镜像跨平台 CI:本仓库 PR 未镜像到 GitHub,无跨平台 run(如需可补)


Background
GitCode CLI(
gc)目前只覆盖 GitCode 平台侧能力(issue/pr/release/actions 等),缺少向飞书群推送通知的渠道。团队已在本地验证官方lark-cli(larksuite/cli,MIT,Go 实现)可用并完成 OAuth 登录,覆盖 IM/日历/文档/多维表格等 18 个域、200+ 命令,自带 OS keychain 凭证管理与令牌刷新。希望让
gc与lark-cli协同:用户安装gc后即可低门槛向飞书群发送消息,并在提交 issue/PR/CI 时可选地把结果回推到指定飞书群,供 AI 代理与脚本统一消费。Proposal
采用子进程委托模型:
gc通过exec调用已安装的lark-cli,复用其 OAuth/keychain/令牌刷新,不在 Go 侧重写飞书 OpenAPI 与认证。lark-cli 缺失时采用首次运行 lazy 检测并提示安装,不绑定到 gc 的安装流程。新增
gc lark命令域:gc lark send --chat-id oc_xxx --text "..."--text/--markdown/--file/--body-file,委托lark-cli im +messages-sendgc lark auth statuslark-cli auth status --json)gc lark installnpx @larksuite/cli@latest installgc lark doctorgc lark config get/set --default-chat oc_xxx默认群路由:环境变量
GC_LARK_DEFAULT_CHAT_ID>~/.config/gc/lark.json的default_chat_id> 命令行--chat-id覆盖。凭证不入 gc 配置(由 lark-cli keychain 管理)。挂载通知 hook:在
gc issue create与gc pr create增加--notify-lark <chat-id>flag,创建成功后把 issue/PR 标题与链接回推到指定群(缺省时用默认群)。CI 类通知由通用gc lark send承载,不改动 actions 命令。安全:
gc lark send的消息正文在提交前经cmdutil.ScanContentForSecrets扫描,避免GC_TOKEN等被推入飞书;飞书令牌始终由 lark-cli 管理,gc不接触。Acceptance Criteria
Alternatives
gc feishu:最终选gc lark与官方lark-cli品牌一致。