ocra

插件

用插件为 ocra 扩展代码托管平台、运行时、审查员、规则、工具和事件监听。

ocra 里的一切都是插件:本地 Git 和 GitHub 适配器、OpenCode 运行时、correctness、security、performance、docs 和 agents-md 五个审查员,以及会话记录,都是内置插件。你写的插件使用的是同一套接口。

编写插件

插件是一个模块,以 default(或 plugin)导出一个对象:

// tools/ocra-team-rules.mjs
export default {
  name: "team-rules",
  configure(ctx) {
    ctx.registerRules([
      {
        path: "services/**",
        rule: `Owned by ${ctx.settings.team}: check idempotency keys on every write.`,
      },
    ]);
  },
};

在 .ocra/config.json 里注册:

{
  "plugins": ["./tools/ocra-team-rules.mjs"],
  "pluginSettings": { "team-rules": { "team": "payments" } }
}

插件从仓库自己的依赖(按包名)或文件路径加载,路径相对仓库根目录解析(也可以指向仓库之外:配置由你自己信任)。插件会执行代码,所以只在本地审查时从仓库自己的配置加载;审查 PR 时或使用 --no-repo-config 时都不会加载。

生命周期

阶段执行方式失败时
bootstrap(ctx)所有插件并发执行只打印警告,审查继续
configure(ctx)按加载顺序执行审查停止,并指出是哪个插件
postConfigure(ctx)所有注册完成后并发执行审查停止

bootstrap 适合做失败了也无妨的事,比如拉取远程设置。

插件可以注册什么

方法提供的能力
registerVcs(name, factory)代码托管平台适配器
registerRuntime(name, factory)agent 运行时
registerReviewer(definition)有自己提示词和模型层级的审查员
registerRules(rules)按路径生效的审查规则
registerTool(tool)审查员可以调用的工具,输入用 Zod schema 定义
onEvent(listener)审查过程中每个事件的监听器(遥测、通知)。监听器抛出异常时会被停用,并给出一次警告,审查继续进行

运行时工厂会收到模型链、环境变量、声明的供应商,配置了的话还有 sampling(temperature、seed);运行时用自己的 sampling 属性说明它实际发送什么,并在 notApplied 里列出没法传下去的设置。没有这个属性的运行时会被报告为一项都没应用。任务的 spec 带有它的审查员要求的推理强度 effort;补全请求带有 agent(计划调用对应的审查员,或 verifier、judge、helper)和 effort;没有配置推理强度时两者都不存在。会发送推理强度的运行时实现 appliedTo(agent),返回这个 agent 的每次调用是否都发送了它,以及 notApplied:这些调用没有发送的采样设置。没有实现它的运行时会被报告为不发送推理强度,运行会给出一次警告。

每个插件只能拿到自己的设置(ctx.settings),并由可选的 settingsSchema 校验。同一个名字重复注册、使用保留的工具名,或在 configure 阶段之后再注册,都会报错并指出是哪个插件。

安全

插件会执行代码,只从你信任的仓库加载插件;审查别人的分支时,请使用 ocra review --no-repo-config,它会忽略仓库的配置和插件。在 CI 中,配置应当从受保护的 base 分支读取,绝不能从被审查的 PR 里读取。

在 GitHub 上编辑

本页目录