文档

钩子机制

组织级别的自动化任务,可响应平台事件并执行您编写的指令。

钩子会对 Coroid 中发生的特定事件做出响应。您只需选定一个事件,用自然语言编写指令,事件触发时钩子便会自动运行。

在自动化功能下的工厂模块中即可找到它们。

在“新任务”中创建一个:选择“自动化”,然后点击“当某事件发生时”。“新任务”提供GitHub事件和Coroid的事件。详情请查看自动化。

可响应的事件

只有某个事件被触发时,钩子才会运行。大多数下述事件均由 Coroid 自身发送,少数则由您的系统生成。其余事件属于预留事件:编辑器不会列出它们,也无法为其创建新的钩子。若已为预留事件保存了钩子,编辑器和列表会将其标记为永远不会触发,但该钩子不会被删除。

Coroid 发送的事件

类别事件
任务已创建、状态变更、已完成、失败
智能体已开始、已完成、出错
代码仓库提交推送、分支创建、pull request 被打开/更新/合并、议题开启、提及 Coroid 的评论
迭代已创建、规划开始、已开始、任务添加、任务移除、评审开始、已完成、取消
计划阶段开始、已完成、失败
日程运行开始、运行完成、运行失败
报告已开始、已完成、失败
质量检查开始、通过或失败;自动未解决
推广已请求、已批准、已拒绝
发布已创建、候选版本变更、备注变更、备注已批准、范围变更、检查清单完成、关卡评估、关卡覆盖、已批准、已发布、已回滚
部署已排队、运行中、成功、失败、已取消、手动确认、手动确认回滚、健康检查通过、健康检查失败
同步外部数据源已更新
Slack 和 Telegram匹配自动化过滤规则的消息

您自己的系统触发的事件

类别事件
分析发现依赖项、发现安全问题、分析完成
外部部署已开始、已完成、失败

Coroid 不会发送这些事件。CI 流水线、扫描器或您的其他系统会通过其 ID 触发钩子:它会调用POST /api/v1/organizations/hooks/:id/dispatch并传入一个服务账号该账号具备hooks:dispatch相应的权限。钩子会针对其保存时所关联的事件运行。编辑器会在“由您自己的系统触发”栏目下列出这些事件。

预留事件

这些事件尚未被发送或触发,因此编辑器不会提供它们:

类别事件
任务阶段变更
智能体迭代、工具调用
计划已创建、阶段完成、最终评审开始、最终评审完成、计划执行前的 pull request
日程已创建、已激活、已暂停
迭代规划完成、任务完成、范围变更
发布已暂存、已验证
推广推广前的 pull request
质量检查不可用;修复开始或尝试中;重新验证开始;达成共识

工作的开始与结束

计划、日程、报告、质量检查、推广和发布在启动和结束时都会发送事件。钩子可据此响应工作的结束状态,您的系统也能借此衡量耗时长短。

工作开始结束
计划阶段开始:计划执行开始时发送首个此类事件。已完成、失败
日程运行开始运行完成、运行失败
报告已开始已完成、失败
质量检查检查开始通过、失败、自动未解决
推广已请求已批准、已拒绝
发布已创建已发布、已回滚

每个事件都会在其中记录发生时间occurredAt。反映工作结束情况的事件还会在其中记录工作开始时间startedAt,耗时则记录在durationMs。即startedAt这是occurredAt起始事件的内容,因此二者始终匹配。暂停期间耗费的时间会计入总时长。

每次变更保存时只会发送一次事件。撤销的变更不会发送任何事件,重试也不会重复发送两次事件。只有已启动的工作才会发送结束事件:计划的预演不会发送任何事件,启动前便取消的报告也不会发送事件。

除时间外,每个事件还包含以下内容:

事件发送时机字段
计划阶段已启动计划的执行开始(即首个阶段),后续每当另一个阶段的首个任务启动时也会发送该事件。planId、plan(id, title),phase(id, sequence, title),firstPhase、executionStartedAt
计划已完成或执行失败计划的执行结束。正在规划过程中便失败的计划不会发送该事件。planId、plan、status、executionStartedAt
计划运行已启动计划运行开始scheduleId、runId、schedule(id, name),run(触发原因, 父级运行记录)
计划运行已完成或执行失败运行结束相同的字段,status,以及tasksCreated或error
报告已启动报告开始生成。暂停与恢复操作会保持相同的起始时间。reportId、report(id, type, title)
报告已完成或执行失败报告保存完成,或执行失败、被取消。相同的字段,以及tokensUsed、costUsd和hasActionableFindings,或error
质量检查已启动质量检查开始qualityRunId、check(subject, trigger, policy version, commit)
质量检查通过或未通过检查得出最终结果。相同的字段,decision、redoCause、failedExpectationIds
质量检查自动未解决Coroid 停止修复检查发现的问题。qualityRunId、workItemType、workItemId、reason
升级请求已提交升级任务已创建promotionId、laneId、promotion(title, status, branches, pull request)
升级已获批升级任务合并:在Coroid中获批,强制合并,在提供商端合并,或发布到版本中。相同的字段,approval、approvedBy、forceReason
升级被驳回审核人员要求修改相同的字段,reason、requestedBy、comment
版本已发布版本首次生产环境部署成功。releaseId、version、commitSha
版本已回滚回滚操作会替换环境中的版本。releaseId、version、rolledBackToReleaseId

项目中工作的相关事件也包含projectId,因此仅限定于单个项目的钩子只会针对该项目触发。若钩子创建了相关工作,这些事件会计入该钩子的链式深度。

触发器与目标

每个自动化流程都有触发源(事件的来源)和目标(事件触发后的执行逻辑)。其中有两个目标会将事件转化为工作。

触发源事件
工作流事件Coroid 中的事件,如上表所示
GitHub拉取请求已打开、更新或合并;议题已打开;提及Coroid的评论
Slack符合自动化过滤规则的消息
Telegram符合自动化过滤规则的消息,例如以/coroid开头的消息
Jira新议题
目标执行操作
钩子按本页说明执行你的只读指令。
对工作进行资格审核将事件归档为请求。一旦资格审核通过,Coroid 便会创建工作。
Coroid Check已停用。每个pull request的Coroid 审核设置在Quality Control;现有自动化流程已暂停

GitHub 事件需要GitHub应用支持。仅当评论作者对代码库有写入权限时,提及Coroid的评论才会被计数。详见GitHub。

仅当事件作者可信时,“对工作进行资格审核”生成的任务才会自动启动:即拥有代码库写入权限的GitHub、pull request、议题或评论作者。Slack、Telegram和Jira的作者均不可信,因此他们的任务需由他人手动启动。详见工作启动时机。

新的Jira工单仅能通过Coroid的Jira Webhook接入。它仅接收由为Coroid设置的Webhook密钥签名的交付内容,且仅针对新工单,同时要求工单的Jira项目键与Coroid的项目匹配。由于coroid.ai上尚未配置Jira Webhook,因此Jira触发器不会接收到任何事件;此时可改用导入Jira工单的方式。在已配置Webhook的场景下,新工单会进入Jira触发器的自动化流程,例如Quality Control中的Jira请求源,它会根据您选定的类型和优先级创建 qualifying 工单。若触发器上没有配置自动化规则,新工单则不会被录入任何流程。来自Jira的工作不会自动启动。请参阅工单追踪工具。

默认只读

钩子会进行分析并生成报告。它们可以创建后续任务,但不会直接修改您的代码。

正是这一默认设置使其能够被安全采用。响应事件而编辑代码的自动化操作,往往发生在最缺乏监督的时刻。一个钩子开启一个任务会通过常规流程产生相同的结果——即规范、规划、验证、评审以及pull request。

  • 定时执行时间
  • 事件自动化某事件发生时

普通任务

规格说明、计划、构建、验证、评审。它会占用一个代理槽位;请为其设定较低的优先级。

P2P3

一份 pull request

它无法自行合并或提交到您的基础分支。

由您审批

自动化仅在于触发方式不同。它开启的仍是常规路径上的普通任务,因此会占用实际产能,最终生成您可审批的pull request。

编写优质的指令

钩子指令由模型处理,因此其表述方式类似于给同事的指令,而非代码。其质量标准与规范:说明要关注什么、什么才是重要的,以及该采取什么行动。

需明确说明“什么都不做”的情况。若缺少这一说明,钩子每次运行时都会生成一些输出内容,而总是有输出的钩子最终会被人们忽略。

防护机制

之所以设置三类防护机制,是因为事件驱动的自动化操作会以可预测的方式出现故障:

速率限制。每分钟、每小时及每天的限制均可针对每个钩子单独配置。若钩子关联高频事件,在合并操作繁忙时可能会触发数百次。

链式深度。钩子可触发事件,进而再触发其他钩子。通过设定最大链式深度可避免形成循环。

工具权限。钩子可访问的范围受到管控——只读权限、MCP调用及任务创建功能均被单独管理。

权限

仅有所有者和管理员才能创建、修改、测试或删除钩子;所有成员均可查看钩子及其执行历史。鉴于钩子是在组织层面运行的,这种权限差异是刻意设计的。

监控钩子运行情况

工厂中每个钩子的页面都会列出过去30天内的运行记录及执行结果:运行次数、失败情况及成本。每次自动化运行记录也会出现在“设置”→“活动”中,可通过“自动化”筛选查看。启用新钩子后请检查其运行状况——失败模式并非报错,而是钩子持续触发却未产生任何有效结果。

钩子与定时任务

运行机制触发来源
钩子平台事件
定时任务时间

二者均属于自动化操作,在工厂中一同列出。请参阅自动化操作。