AI Pulse
📡 X 信号

humanlayer开源开源软件工厂构建模块

humanlayer开源开源软件工厂构建模块

刚刚通过一个无服务器后台代理从一个GitHub issue创建了一个PR,并且整个项目都是开源的。

在humanlayer,我们一直在思考什么才是优秀的开源软件工厂构建块。为了推进这件事,我做了一个我长久以来一直想做的东西:一个脱离常规方案的实现,它在带有虚拟文件系统的运行时中运行轻量级代理,只在必要时才使用容器——更快、更便宜等等。

结合GitHub、slack和linear的优质webhook/事件绑定,我们构建了两个组件:

1. 适用于slack/linear/github的effect原生webhook订阅;类似@vercel聊天SDK,但基于effect,并且对软件工厂有更多明确设计;处理线程化和去抖动事件分发之类的功能。

2. 提及和其他事件会启动我们的Fold框架(可以理解成effect中的@pidotdev;完全同构,随处可运行)。

基础设施构建在@cloudflare workers和durable objects之上,通过@alchemy_run——每个线程/渠道/issue/PR都有自己的邮箱,遵循投递策略(队列、去抖动、批量)。

邮箱消息会唤醒运行在Durable object中的Fold代理会话,一开始不使用沙箱。它使用cloudflare计算机为每个issue/PR的git分支提供一个基于DO的虚拟文件系统。

代理可以在DO的虚拟文件系统上运行大多数它想要的命令,只有当它需要运行重型命令时,才会通过FUSE启动一个挂载了该文件系统的容器。

工具都是从webhook事件生成的,所以代理能拿到范围明确的工具,例如从当前issue创建PR,或者只列出绑定的PR上失败的检查;另外它很容易插入确定性代码。

它支持实时进度更新,可以对其线程中的issue做出反应,等等。(linear和slack模块支持它们各自的流式代理活动和代理计划API;对于github,我们通过实时编辑issue做了一点灵活处理)

它甚至还提供了一个API,因此代理工作可以交给另一个系统处理(例如,如果你需要比cloudflare标准尺寸4更大的容器,可以使用拥有超强沙箱的k8s集群),然后那个系统可以发回流式更新并修改代理运行的状态,所以耦合度非常低。

它被设定为可以自动调查CI失败和其他一些很棒的功能。

该项目已开源,这里有一个很好的实际示例:

本文由 AI 翻译自英文原帖,技术名词保留英文。

查看 X 原帖

订阅 AI Pulse

每天 08:00 · 12:30 · 18:30 · 23:50 更新