Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

SOP Fan-In: Git

Git forge 事件可以触发 SOP 运行。当某个事件类型在频道的事件表中路由到 sop 时,Git 频道会将规范化后的 forge 事件提升为一个 SOP 事件(主题是 git.<alias>:<event_type>,结构化 JSON 负载包含 repo/issue/PR 字段),并将其分发给引擎。只有 mention gate 会对路由到 sop 的生命周期事件放宽:路由到 triage SOP 的 pull_request.opened,无论作者是否提及了应用都会触发。author checks 仍然适用于 每次投递,无论是 SOP 还是对话式:来自应用自身账号或其他 bot 的事件都会被丢弃(除非设置了 listen_to_bots),并且会在 actor 的登录名上强制执行 peer-group allowlist。换句话说,sop 路由会绕过 mention_only,但不会绕过自我/bot 过滤或 author allowlist。

传输端(provider、forge auth、polling、repository scoping、event routes)在 Git channel 上配置。本页介绍触发器。哪些事件类型会到达 SOP ingress 由 channel 的按事件 events 路由表决定。

触发器

配置的通道上的入站消息或 forge/platform 事件(telegram、discord、slack、Git 等)。实时:当启用该通道的 SOP dispatch 时,由通道协调器投递。Git forge 生产者会设置形如 <channel>.<alias>:<event_type> 的事件主题,并将 event_type 放入载荷中,因此编写的 condition 可以按类型过滤 forge 事件,而无需第二种触发器形状。

字段类型默认含义
alias字符串?null可选的已配置实例别名;未设置时匹配每个实例。
channel*字符串ChannelKind 用 snake_case 命名的通道类型值。
condition字符串?null针对消息负载求值的可选表达式。

加载并验证 SOP:

定义

按照 Syntax 中所述编写 SOP,并使用 channel 触发器。上面的触发器字段是受支持的键;该页面会逐一讲解整个文件。

验证

zeroclaw sop validate

检查

zeroclaw sop list
zeroclaw sop show <name>

匹配

channel 触发器会匹配 channel(频道类型,即 git)以及可选的 alias(已配置的实例,例如 default);触发器自身没有 topic 字段。哪些事件类型能够到达 SOP 入口,完全由频道按事件配置的 events 路由表决定,因此触发器选择来源,而路由表选择事件。日志中看到的 git.<alias>:<event_type> 字符串是由频道生成的事件主题;若要将触发器限制为单个事件类型,可使用 condition 通过类似 $.event_type == "pull_request.opened" 的条件测试载荷。事件的结构化 JSON 载荷会被转发到 SOP 事件中,并可供可选的触发器 condition 使用;步骤上下文接收的是经过限制、清理和成帧处理的形式。类似 $.repo == "octo/repo" 的 JSON 路径 condition 可将 SOP 限定为单个仓库。已知事件类型包括 issue_comment.createdissues.openedpull_request.openedpull_request.closedpull_request.mergedpull_request_review_comment.createdworkflow_run.completedworkflow_run.failedrelease.published

启动它

将事件类型路由到通道上的某个 SOP(一个包含 sop = "<name>"events 条目),加载一个其 channel 触发器指定该通道的 SOP(channel = "git",可选的 alias),然后触发代码托管平台事件:创建 issue/PR 或发表评论、发布版本,或让工作流运行完成。通道会规范化事件、对有效负载进行安全筛查,并将事件分发给每个已加载的 SOP,前提是其 channel 触发器匹配且其 condition(如果有)成立。路由事件类型还会使通道订阅相应的代码托管平台端点,因此只会轮询已路由的事件类型。

如果没有任何内容启动,请确认事件类型已路由到 sop(而不是保留为会话默认值)、SOP 的 channel 触发器名称为 channel = "git"(以及正确的 alias),并且 condition 针对有效负载的判断成立。请参阅扇入概述故障排除表

批准并观察

命中检查点的运行会暂停为 WaitingApproval。可使用 CLI(zeroclaw sop listzeroclaw sop approve)或通过 gateway API 审批端点(GET /admin/sop/pendingPOST /admin/sop/approvePOST /admin/sop/deny)清除或查看它们。

另见