跳转到主要内容
Outposts 的完整参考文档:工作器 CLI、fleet API、devin-remote 二进制程序分发,以及适用于自定义编排器的 spawn 约定。

身份验证

工作器和编排器通过属于某个服务用户的 v3 API 令牌 进行身份验证。分配给该服务用户的角色决定了该令牌拥有的 Outposts 作用域: Outposts 以你的账户为作用域,并在该账户下的所有组织之间共享。

CLI

devin worker start

轮询 outpost 的队列,认领会话,下载正确的 devin-remote 二进制程序,并处理这些会话。请在包含该会话已检出代码仓库的目录中运行此命令。
工作器环境还可以包含 DEVIN_CHROME_PATH,用于为会话指定 Chrome/Chromium 二进制程序,以启用浏览器功能。

devin worker outpost create

创建一个 outpost——即由你的基础架构提供支持的命名会话队列。需要 orchestrator 作用域。
输出新 outpost 的 ID (outpost_env-...)。你也可以在 Web 应用的 设置 → 环境 → Outposts 中创建 outpost。

devin worker outpost delete

删除一个 outpost。需要 orchestrator 作用域。

Fleet API

所有端点都位于 https://api.devin.ai/opbeta/outposts/ 下,并使用 Bearer 令牌进行认证:
资源采用 Kubernetes 风格的 metadata / spec / status 结构,队列则遵循 Kubernetes 的“先列出再监听”语义,并保证至少一次投递。

对象

队列条目 (devins)

每个排队中的会话都对应一个队列条目: spec.network_policy 会说明会话的网络访问是否受限 (enabled) ,以及允许访问的目标 (allow) :主机名 glob 模式 ({"hostname": ...}) 、IPv4 地址/CIDR ({"ipv4": ...}) 或 IPv6 地址/CIDR ({"ipv6": ...}) 。

Outpost

列出排队会话

示例响应:
分页和投递语义:
  • has_next_pagetrue 时,将每个响应中的 cursor 传入下一次请求。
  • 投递采用至少一次语义:处于页面边界的会话可能会同时出现在前后两个页面中,因此应按 metadata.session_id 对条目执行 upsert,而不要将每一项都视为新项 (claim CAS 会让重复项不会造成影响) 。
  • has_next_page 变为 false 时,将返回的游标保存为监听的起始位置。

监听变更

以流方式传输 Server-Sent Events。会话的队列条目发生变化时会触发 MODIFIED 事件 (新排队的会话也会以 MODIFIED 事件形式到达) ;当该条目被移除时会触发 DELETED 事件。每个 SSE 的 data 字段都包含:
监听语义:
  • 处理完每个事件后,保存其顶层 cursor;重新连接时使用上次保存的游标,以回放断开期间发生的变更。
  • 事件交付至少一次——因此需要容忍重复事件。
  • 流最多持续五分钟;应采用可重连的监听循环。
  • watch=true 时,phaseacceptor_id 过滤器会被忽略;请根据每个事件 object 中的字段过滤收到的事件。
  • 省略游标会从头开始,因此常规对账应采用“先列出再监听”的方式。

获取队列条目

返回某个会话对应的队列条目。

认领会话

以原子方式为给定的工作器身份认领该会话。如果它已被另一个工作器抢先认领,该请求会返回 409。认领成功后的响应会包含 status.connect_tokenstatus.gateway_url —— 也就是 devin-remote 建立连接所需的凭据 (请参阅 spawn 约定) 。 认领表示工作器承诺会在服务器分配的认领截止时间 (status.claim_deadline) 内就绪;过期的认领会自动返回队列。

解除认领

释放工作器的认领,使会话立即返回队列 (例如,在预配失败时) 。

Outposts

创建请求体:
创建、GET 和删除需要 orchestrator 作用域;每个 outpost 响应都会返回实时的 status.queue_depthstatus.active_claims

远程二进制程序分发

devin worker start 命令会自动下载正确的 devin-remote 二进制程序。不使用 Devin CLI 的自定义编排器可直接从以下地址下载:
确认最新版本:
下载并验证:
可用平台: 如果该 session 的队列条目包含 spec.remote_binary_sha,请使用该 SHA,而不要使用 latest——这会将该 session 固定到经过测试的特定版本。

Spawn 约定

如果你的编排器不是使用 devin worker start,而是自行启动 devin-remote,请按如下方式启动它:
使用以下环境变量: 为远程端提供一个干净的环境,其中只包含上述变量以及基础系统变量 (PATHHOMEUSERLOGNAMETMPDIRLANGTZ,以及——用于 Linux/X11 上桌面流的屏幕捕获——DISPLAYWAYLAND_DISPLAYXAUTHORITY) 。不要将任何 Agent 不应看到的信息泄露到远程端:这些信息会被 Agent 的 shell 继承。 额外的生命周期要求:
  • 工作目录:从包含该会话代码仓库的目录启动远程端 (与 devin worker start 的规则相同) 。
  • 会话结束:当会话结束 (进入休眠或终止) 时,Devin 会通知远程端,远程端随后会自行以退出状态码 0 退出。将正常退出来视为会话结束:确认队列条目的 status.session_statussuspendedterminated (状态更新可能会比退出晚几秒,因此请重读几次) ,然后释放认领。作为回退方案,也要在远程端运行期间轮询 status.session_status,并在其变为 terminated 时自行终止进程 (或者当队列条目消失时终止) 。