-
Notifications
You must be signed in to change notification settings - Fork 1
Description
当前项目依旧处在无机密隔离,服务端单个脚本,负责全部的上下文、task构建和触发鉴权,GitHub Actions几乎仅负责跑Claude Code,另外,GitHub Actions会在每次运行Claude Code前创建issue当日志
我现在的目的:
对llm访问gh做完整的限制,从允许的写操作、允许的只读操作频率等,对llm的一切gh活动进行追溯:issue、comment、review、pr,对comment、pr等进行次数限制
另外,构建完整的上下文,格式markdown,包含触发处issue/pr上下文+pr关联issue上下文+llm自己账户对应fork仓库上下文+对应上游仓库上下文(等)
还包括llm陷入循环的识别,通过实时监听Claude Code输出实现(今天就因为陷入循环,编辑了我的review几十次)
对日志issue进行完整升级,触发时issue包含task和context,触发后comment对llm的issue、comment、pr、review的引用,comment完整的Claude Code会话记录,若出错(Claude Code报错或检测到循环),comment错误信息并给issue添加bug标记,若安全完成workflow,关闭issue为已完成(对了,这个issue有workflow标签,这是已经实现的机制,便于过滤日志issue)
完整的调用流程:
服务器:监听通知(@中可带上权限配置,如agent后续仅可对当前issue写comment,仅可对特定仓库写等等,下文均为默认限制)
推算触发节点(@智能体的那条消息)
触发者鉴权
获取完整上下文
分片传workflow
workflow:拿到完整数据
筛选
创建issue
创建用户:与机密隔离
配置Claude Code(新用户)
运行Claude Code
另一个进程:运行mcp(此进程可直接在runner用户跑,实际上是一个py脚本管理两个进程)
mcp监听Claude Code的gh调用
若两次写comment、pr、issue调用完全一致:拒绝
创建comment:同一issue、pr限制两次
创建issue:限制数量(默认同仓库1
创建pr:同仓库1次
gh api:使用专用的全站只读token并限制请求频率
禁止修改他人消息
默认禁止删库、非同会话评论不可删
llm发送的消息添加标记:
-
指向对应日志issue的链接
-
输入@WhiteElephantIsNotARobot go away以将WhiteElephantIsNotARobot从此仓库(若你是此仓库协作者)以及您的全部仓库屏蔽,并关闭WhiteElephantIsNotARobot创建的Pull Request、删除WhiteElephantIsNotARobot创建的comment
屏蔽消息同样由服务器匹配,识别触发者权限
屏蔽的仓库,agent的写操作在mcp侧被拒绝
屏蔽后,删除对应仓库的fork(这会关闭开放pr),删除对应仓库下issue/pr的comment(review不可删,故禁止llm发布review)
对了,discussion我一直没提,因为discussion较为复杂,最多接收discussion中的触发并获取上下文,agent是否允许写discussion待定
agent工作完成后,当前逻辑是发送两次消息,让Claude Code确认是否在GitHub留下回复、代码是否推送,现在可以直接根据mcp调用判断是否留下评论(或创建issue、pr等),若无,发送消息要求创建
接下来发送消息让agent确认更改是否推送,pr是否存在
最后,在issue留下指向agent创建的所有消息、issue、pr的链接供追溯
在issue留下Claude Code的会话记录(根据Claude Code输出的jsonl事件流进行markdown格式化解析)
若中途无报错,关闭issue