@ agent-relay/ fleet (英语)
舰队节点SDK代表中继特工 定义 a 节点 ——一个命名为主机,发布打字广告
能力 (动作和产物)和反应 通过 触发 那么... 说吧..
给它服务 agent-relay fleet CLI(英语:CLI).
使用 @agent-relay/fleet 当您想要曝光本地能力时( 运行一个命令, 生成一个
hand, 答复请求)到接力工作空间作为长生节点. 使用 @agent-relay/sdk
用于纯代理信件和 @agent-relay/harness-driver 启动和监督本地
直接控制进程.
完整文档 : extrelay.com/docs (英语)。 。 。 .
安装
npm install @agent-relay/fleet zod
快开始
import { defineNode, action, spawn, onMessage } from '@agent-relay/fleet';
import { z } from 'zod';
export default defineNode({
name: 'builder',
capabilities: {
'run:test': action({ input: z.object({ suite: z.string() }) }, async ({ input }) => {
// ...run the suite...
return { ok: true, suite: input.suite };
}),
'spawn:claude': spawn({ harness: 'claude' }),
},
triggers: [
// When a message matching the pattern lands in #deploys, invoke run:test.
onMessage({ channel: '#deploys', match: /[Ss]hip/ }, 'run:test'),
],
});
交给CLI:
agent-relay node up --config ./builder.node.ts
# or drop the file at the project root as agent-relay.ts and run `agent-relay node up` (auto-discovered)
agent-relay fleet nodes # list registered nodes
agent-relay fleet status # show node + capability health
仓库放置
一个节点可以宣布它可以用一个 owner/repo 密钥映射 :
export default defineNode({
name: 'builder',
repoPaths: {
'AgentWorkforce/factory': '/srv/repos/factory',
'AgentWorkforce/relay': '/srv/repos/relay',
},
capabilities: {/* … */},
});
每个值必须是该节点上的绝对路径. 登记来源于
安置安全 AgentWorkforce/factory 财务报告和审定财务报表 AgentWorkforce/relay 键; 键
绝对值从不发送到中继广播、在名册中曝光或登录.
在方案方面担任节点
@agent-relay/fleet 也传送节点运行时间, 这样您就可以在其中启动一个节点
没有 CLI 的进程 :
import { defineNode, serveNode, startServeNode } from '@agent-relay/fleet';
const definition = defineNode({
name: 'builder',
capabilities: {/* … */},
});
const connection = { url: 'http://127.0.0.1:8787' }; // broker HTTP API base URL (apiKey optional)
// startServeNode returns a RunningNode { stop(), done } for supervised use…
const running = startServeNode({ definition, connection });
// …await running.done to block until the node stops, or call running.stop().
await running.stop();
// serveNode runs the node to completion (resolves when it stops / aborts).
await serveNode({ definition, connection });
特工人员
服务 spawn(...) 处理者要求核实准备状态,并在完成后完成
委托经纪人报告一名随时待命的工人。 发射失败向呼叫者传播.
引擎必须支持节点所属的产卵援引状态
限为130秒。 如果确认被中断,则核对所报告的
重试前引用孩子, 因为经纪人可能仍在完成设置 .
在发布/更新机队软件包之前释放兼容引擎
服务。 仅供遗留的安置操作员使用,操作员可以明确
设定 spawn(harness, { verifyReady: false }) 或者说 ctx.spawnAgent({ agent, verifyReady: false })。 。 。 .
这样会跳过投票准备和返回 { placement, ready: false, readiness: 'unverified' }· ;
它不能用作确认的启动或授权订阅创建。 已验证
准备状态仍然是默认的,必须保留给订阅者.
内置 spawn:<harness> 能力发射原始的带子。 一个
Agent Workforce persona) 也带有其常备指示,已安装的技能,
MCP服务器、机床、模型和机床设置,必须加以解决
准备作为目标节点上的单位.
使用 defineWorkforcePersonaSpawnNode 从 @agentworkforce/local-surface 改为
广告 spawn:persona 能力:
import { serveNode } from '@agent-relay/fleet';
import { defineWorkforcePersonaSpawnNode } from '@agentworkforce/local-surface';
const definition = defineWorkforcePersonaSpawnNode({
nodeName: 'workforce-personas',
cwd: process.cwd(),
});
await serveNode({ definition, connection });
呼叫者可以通过 persona (id或JSON路径)代替 cli 页:1
代理中继 spawn MCP工具. 人产卵由SDK支撑并报告为
只有在节点登记和拉带准备握手后才能成功.
日志
节点运行时间发布结构化事件——每个节点注册的能力和每个节点运行时间
击出动作(引出/完成/失败,持续时间)——通过
logger 注射药 形状匹配 @agent-relay/utils' createLogger,以及
每个事件都有结构化 extra 袋( 装入{ capability, action, invocationId, ms, … })所以文件和JSON汇可以在字段上按键:
import { createLogger } from '@agent-relay/utils';
await serveNode({ definition, connection, logger: createLogger('fleet') });
通过CLI, agent-relay node up 显示此代码 :
agent-relay node up --config ./builder.node.ts --log-file ./node.log
agent-relay node up --config ./builder.node.ts --log-level debug # include per-capability lines
agent-relay node up --config ./builder.node.ts --log-json # one JSON object per line
能力登记记录 debug; 行动引用于 info; 失败
warn没有 logger 节点是沉默的——通过 logger (或老年人) log编号 :warn
调用)以接收事件. CLI线a warn- 只在没有时沉入 --log-* 旗帜是
给,所以 agent-relay node up 保持安静,除了警告,直到你选择加入.
概念
- 节点 ——在工作空间注册的有名主机.
defineNode验证清单 在前面返回 aFleetNodeDefinition。 。 。 . - 能力 ——按名键进行打字操作. 以
action(...)(处理者) 带有可选 Zod 输入方案)或spawn(...)(一种发射绳索的能力). - 触发 ——一条规则,对频道消息援引能力. 创建一个
与
onMessage({ channel?, match?, mention? }, actionName)。 。 。 .
触发和 match
match 接受字符串( substring/ 准确匹配) 或 a RegExp模式序列化为
中继和匹配的经纪人侧.
尚未支持 Regex 旗帜 .
defineNode拒绝 触发器match是一个 标记RegExp(例如:./ship/i, (中文(简体) ),/ship/m而不是默默地降下国旗——a 默不作声地剥去旗帜会改变匹配的语义而不发出警告. 直到旗帜支持 土地,编码为字符类的不敏感案例:onMessage({ match: /[Ss]hip/ }, 'run:test'); // ✅ case-insensitive via character class onMessage({ match: /ship/i }, 'run:test'); // ❌ throws at defineNode validation
许可证
阿帕奇 - 2.0