agents-relay

中文文档
2.0.202发布于 2026/11/03ES Module构建来源已验证

通过GitHub拉取请求协调的持久异步代理作业

中文使用文档
文档目录12 节
  1. V2架构
  2. 工作流图导航
  3. 结构化运行时可观察性
  4. 快速启动
  5. npm出版
  6. 选择加入临时聊天质量检查
  7. 代理工作者生命周期
  8. 自动任务故障排除
  9. 权威解锁和规划器历史记录
  10. 浏览器工作区产品边界
  11. 共享出版物报告
  12. 项目范围代理Markdown继承

代理继电器

Agents Relay是一个TypeScript运行时,用于由SQLite和规范工作流图驱动的持久异步代理作业。EventBus唤醒和解;EventBus消息或GitHub PR评论永远不是生命周期权威。作业、计划、任务、回顾、执行、租约和恢复状态在SQLite中守护进程重启后仍然有效。

V2使用只读的本地SQLite Job Registry进行发现。不可变的jobId即使在prNumber为0时也选择Job Store;生命周期转换是跨流程的原子性转换。GitHub是 audit-only它的PR/head/publish事件被持久化用于报告,而不会被用于启动、停止或完成本地工作流。本地Git交付及其确认的合并收据—而不是远程PR合并事实门图完成。作业创建和本地任务操作不需要GitHub身份验证或PR。

规范的V2体系结构契约是 DESIGN-PRINCIPLES.md. 下面的README部分描述了 运行时;他们没有替换合同。

有关权威性任务解除阻止、解决方案所有权、计划器拒绝反馈和故障恢复,请参见 解除阻塞和解决工作流程 以其 美人鱼图.

V2架构

“‘美人鱼 流程图LR Human[Human / orchestrator]—> CLI[CLI / Dashboard] 命令行—> Store[(SQLite / WAL . xml)
工作任务计划检讨真相)] Worker[Workers / adapter]——> Events[EventBus . net
Wake +观测] Events—> Coordinator[reconcilcoordinator] Store——>协调器 协调器—> Graphs[Canonical Mermaid Graph Engine] 图表—> Effects[无状态动作/效果] 效果——>存储 Store—> Views[Dashboard / Recovery] 效果—> Outbox[持久的外部动作发件箱] Outbox—> GH[GitHub提交/ PR /审查/合并API] GH—> Facts[已确认的外部事实] 事实——>商店 ' ' '

SQLite拥有唯一的生命周期权限;图形引擎选择每个转换。 GitHub操作由适配器显式请求和确认,从未使用过 发现或重建作业/任务状态。EventBus交付唤醒和解; 它不能代替持久的SQLite记录。

工作流图导航

区域规范的图
工作周期workflow/job-lifecycle.mmd
任务生命周期workflow/task-lifecycle.mmd
回顾生命周期workflow/review-lifecycle.mmd
规划师触发workflow/planner-trigger.mmd
计划编制workflow/planner-orchestration.mmd
拦截器分辨率workflow/blocker-resolution.mmd
权威的疏通workflow/authoritative-unblock.mmd
排忧解难workflow/troubleshooter.mmd
升级workflow/escalation.mmd
相关任务操作策略workflow/task-related-action.mmd

这些路径总是表示当前规范图。历史图形定义可以通过Git的历史记录、标记和提交获得,而不是通过并行的版本文件 workflow/. 看到 docs/workflow-engine.md 用于可执行概要文件和运行时边界。

结构化运行时可观察性

src/observability.ts 是记录生命周期或投影决策发生的原因的单一结构化日志/事件边界。一个相关的记录链(wake -> graph -> transition -> store commit -> projection outcome)允许操作符重构具有代表性的任务生命周期,而无需特别的标准错误解析。记录只是观察性的,从来没有第二个持久存储;它们通过存储库/PR/作业/任务/执行相互关联,将失败分类为确定性的 conflict vs transient 重试vs terminal,编辑秘密/提示,绑定大型有效负载,并将例程空闲/无操作周期保持在默认水平。看到 docs/structured-observability.md 对于唱片合同,字段,噪音政策和编校规则。

快速启动

对于新工作,通过代理中继创建本地Job。使用 job adopt 绑定没有GitHub访问的已知遗留PR号;外部GitHub投影在第一次有意义的代码提交后创建一个显示PR。任务是针对SQLite Job进行验证的,而不是针对GitHub标记。

cat > job.md <<'EOF'
# Goal

Standalone Job context. Put a Mermaid block first when a workflow/state/architecture diagram helps.
EOF

npx agents-relay job create --repo OWNER/REPO \
  --id job-1 --title "Objective" --objective-file job.md

# The orchestrator decides the initial batch separately
cat > task.md <<'EOF'
# Work

Implement this phase using the Job objective as context.
EOF
npx agents-relay task create --repo OWNER/REPO --id job-1 \
  --task-id initial --output task-pr --input-file task.md

npx agents-relay task create --repo OWNER/REPO --id job-1 \
  --task-id child --output task-pr \
  --input "Implement the described child task and publish a terminal event."

npx agents-relay reconcile --repo OWNER/REPO --pr 12 --id job-1
npx agents-relay job show --repo OWNER/REPO --pr 12 --id job-1

任务准备是明确的: DRAFT 表示持久任务存在,但还不能执行; QUEUED 表示Relay现在可以执行它; RUNNING 表示工作线程执行已经开始。开始使用依赖项创建任务 DRAFT 并成为 QUEUED 当这些依赖成功时。创建的无依赖项任务 --draft 一直坚持到 task update --queue. 任务运行后,外部等待表示为 BLOCKED,永远不会由返回 DRAFT.

可变的草稿/排队/可重试的任务字段可以在不替换持久任务标识的情况下进行更改。 task update 拒绝 RUNNING, SUCCEEDED, CANCELLED 不能重写活动执行和终端历史记录的任务。例如:

npx agents-relay task update --repo OWNER/REPO --pr 12 --id job-1 --task-id child \
  --adapter chatgpt --provider chatgpt --model gpt-5.6-sol --reasoning high \
  --capabilities model,chatgpt,browser-harness

# Explicitly release a held DRAFT task
npx agents-relay task update --repo OWNER/REPO --pr 12 --id job-1 --task-id child --queue

作业将持久生命周期与派生的运行时状态分开。持久生命周期是 DRAFT | ACTIVE | COMPLETED | CANCELLED:新创建的Job是DRAFT,创建可执行的工作或启动Planner会激活它。运行时状态(IDLE, WAITING, QUEUED, RUNNING, BLOCKED, FAILED, REVIEWING, MERGE_PENDING, MERGED,或者 CANCELLED)是从Tasks、Review和本地确认的合并事实中计算出来的,并且永远不会作为生命周期事实被持久化。

生命周期转换授权存在于链接的可直接呈现的规范流程图源中 工作流图导航. Git历史记录拥有先前的图形版本;工作树只包含当前的图集。

规范的Mermaid图引擎是权威的持久工作流决策路径。作业/任务生命周期转换以及Review、Planner、Blocker/Unblock和Troubleshooter编排分支由规范化工作流图定义,并通过共享图运行时执行。TypeScript提供事实和基本的动作/效果实现;它不能将这些工作流分支复制为第二个过程状态机。

工作目标和任务输入是Markdown。更喜欢 --objective-file / --input-file (使用 - 对于stdin),用于持久的长格式上下文;内联 --objective / --input 保留为短/简单文本,并且与文件变体互斥。当一个图表实质性地阐明了工作时,首先是美人鱼,然后是Markdown detail。新创建的Job必须捕获足够的上下文,以便独立于原始聊天完成。它的PR主体只包含一个隐藏的 agents-relay:job:v1 元数据标记,然后是目标Markdown;没有单独的求职评论重复求职目标。目标和工作元数据更新重写相同的PR主体。遗留的作业注释标记仍然可读,并在下一个作业保存时迁移到PR主体中。

每一份工作都是目标驱动的。 job create 只有持久的工作才会持久 创建可执行任务。调用者可以直接创建工作 task create 或显式地调用Planner plan. 直接 编排器创建的任务是直接持久化的,而不是包装在 综合计划。 agents-relay plan 立即着手零任务的草稿工作, 激活它,坚持真实 plan-N 计划轮询,并实现验证 next_tasks. 和解不会为未碰过的人发明第一轮 零任务DRAFT Job;一旦工作开始,以后每个Job都会自动创建 计划轮询,直到最新的计划满意为止。

手动规划语法:

npx agents-relay plan --repo OWNER/REPO --pr 12 --id job-1 --prompt "Plan the implementation from the durable objective"
npx agents-relay plan --repo OWNER/REPO --pr 12 --id job-1 --prompt-file guidance.md

可选提示符是额外的圆形引导;它不能取代持久的工作目标。新的规划回合使用 plan-N;历史 planner-N 记录保持可读。

持久状态JSON和仪表板显示计划来源。运行时使用捆绑的 skills/agents-relay/agents/planner.agent.md 默认情况下; --planner-command 是可选的覆盖 快照作为JSON在stdin上,必须返回 { "objective_status": "in_progress"|"satisfied", "assessment": "...", "next_tasks": [...] }. planner创建的任务使用稳定的id和现有的父/子任务树,因此 重试和重启守护进程不会创建重复的工作。 任务生成器必须遵循 skills/agents-relay/contracts/task-job-contract.md;共享的技能契约定义了故事大小、生命周期事件、评审和自动合并语义。

执行路由是代码驱动的:Relay根据权威的运行时/模型/资源事实构建完整的可执行worker+模型路由,将配置文件默认值与用户的显式合并 [choices],对它们进行重复数据删除,仅通过硬门删除不可能的路由,然后调用泛型类型 decide(request, contract) 边界只有一次,一个合并的选择列表和 [routing-instruction] 逐字转发文本。任务/资源/能力信号和路由指令是软决策事实;决策失败确定地退回到可用的Codex默认路由。看到 执行路由器和输入的决定. 所有任务生成器使用相同的故事大小契约: S≈5分钟, M≈15分钟 L≈45分钟不活动,与 M 作为默认值。 high 推理是不活动窗口的两倍。接受 task.started 和新 task.progress 当前执行的事件将重置它。ChatGPT浏览器Worker启动-ack超时派生为有效非活动超时的三分之一,限制在1到5分钟之间。组织者和策划者应该做出选择 storySize,而不是原始超时毫秒; --timeout 仅保留为显式兼容性/调试覆盖。

没有作业调度或cron支持。调和从持久状态恢复目标计划,包括在错过唤醒或重新启动之后。看到 objective-driven工作.

GitHub投影在有意义的源代码分支提交后创建或重用显示PR; job adopt 为现有遗留PR绑定保留。重新运行它是幂等的:它重用PR并只维护一个可信代理-relay:job:v1标记。作业创建总是只创建,并且总是启用自动合并; --no-auto-merge 不是。 job create 选择。现有作业仍然可以使用 job update. 任务执行选项属于 task create,编排器可以根据用户意图创建零个、一个或多个初始任务。

要在现有的非托管PR上创建Job,请使用显式的 job adopt 兼容性行动:

npx agents-relay job adopt --repo OWNER/REPO --pr 6 --id job-6 --title "Existing objective"

使用 job update 对于已运行正常的作业标记/绑定上的部分可变元数据更改:

npx agents-relay job update --repo OWNER/REPO --pr 6 --id job-6 --priority P0 --no-auto-merge

请求一个合格的新审查 npx agents-relay review request --repo OWNER/REPO --pr NUMBER --id JOB_ID. 通过可选的 --thread-id THREAD_ID 将查看器线程覆盖保存为后续的 检查路由。如果没有它,Relay使用存储的审阅者线程,然后是创建者线程, 或者当两者都不存在时的遗留审查路径。这个请求唤醒图所有的 检查编排;这不是送货收据。

审查目的地是持久的工作事实。 job create 和 job update 接受 --reviewer-thread-id 和 --creator-thread-id;审阅者ID优先 超过创建者/起源ID。本地运行时调用可以通过 --thread-id 作为一个明确的一次运行审查覆盖。当目的地存在时, final-review路由需要一个ChatGPT/webhelm worker并提交 审核请求作为一个验证 new-turn 到具有Job ID的现有线程, PR号,和不变的审核头SHA。失败依然如故 查看任务重试/恢复路径;传输故障永远不会被视为 审查交付。

job update 首先验证受信任的作业标记。丢失、畸形、重复、不匹配或冲突的绑定无法进行精确诊断,并且无法隐式修复。编排器根据Job契约显式地处理异常修复,然后重试更新。 job show 读一个Job和 job list 在存储库中列出被管理的任务。

管理GitHub任务创建/更新/显示/列表/重试/取消和调和/服务命令也需要一个持久的Job标记。编排器不需要原始的GitHub命令来进行正常的作业创建或元数据更新:代理中继在内部使用其经过身份验证的GitHub客户端。

为了向后兼容,仍然支持原始的init命令:

npx agents-relay init --repo OWNER/REPO --pr 1 --id job-1 --title "Objective"

npm出版

推到 main 运行 .github/workflows/publish.yml:安装,测试,选择下一个NPM版本,包检查,发布,并创建匹配 vX.Y.Z 标签。特性分支不编辑 package.json 版本。如果 agents-relay 还没有发布第一个版本是什么 1.0.0;以后的版本只增加NPM注册表中的补丁版本。存储库必须提供 NPM_TOKEN 行为保密,经许可公开发表 agents-relay 包中。

普通消费者应该使用 npx agents-relay ... (或 npx agents-relayd ...)。

成功发布后,工作流记录一个幂等函数 agents-relay:package-published:v1 使用本地合并作业元数据标记注释。它使用封闭显示PR时,否则可重复使用 [Agents Relay] Publication events 问题。GitHub的 issue_comment webhook将嵌入的作业ID解析回它的持久SQLite作业,并发出一个相关的 package.published events-总线事件,包含存储库、包、版本、注册表、提交SHA、PR号和webhook交付ID。它的源身份是GitHub交付(github/<repository>/delivery/<delivery-id>),而不是工作执行标识。

package.published 是一个发布事实,而不是一个服务管理命令。agent Relay不拉取包、重启PM2或决定哪个本地服务使用包。外部部署订阅者可以侦听此事件、验证确切的版本是否可提取、更新/重新启动受影响的服务、验证其运行版本和运行状况,并发布其自己的部署结果事件。 这将发布、部署和健康运行作为独立的事实,并消除了协调器线程同步等待npm准备就绪的需要。

对于显式本地演示/测试模式:

npm install
npm run build
node dist/cli.js init --file .agents-relay.json --title "Dogfood" --id demo
node dist/cli.js task create --file .agents-relay.json --task-id hello --output task-pr --input "Complete the described task"
node dist/cli.js reconcile --file .agents-relay.json
npx agents-relay serve --file .agents-relay.json

选择加入临时聊天质量检查

正常的 npm test 套件不打开浏览器或发送ChatGPT消息。 对于一次性临时聊天路径的显式实时检查,请使用 通过身份验证的浏览器会话并运行:

npm run test:chatgpt-temp-quality

这个小的实时套件包含两个临时聊天提交门:一个普通文本 提示和带有附件的提示。它不执行工人生命周期 事件、持久线程重用、恢复或重试行为。

在本地主机端口8787上打开仪表板。标记格式故意是公开的,并且对追加内容友好。守护进程/工作区操作使用 ProjectedDurableStore 通过SQLite RelayStore加上认证GitHub投影适配器;GitHubStore不是守护进程运行状态数据库。

确定性投影冲突是安全且可观察的。一个id相同/不同的定义 append_task/append_plan 是一次性分类成耐用的吗 conflict 状态,停止消耗重试预算,保留结构化分歧证据,并且永远不会自动覆盖。检查与 agents-relay projection conflicts --repo OWNER/REPO --pr NUMBER 并明确地修复 agents-relay projection resolve --repo OWNER/REPO --pr NUMBER --projection-id ID --action requeue|discard-local. 看到 文档/ architecture-v2.md.

外部产品反馈使用可重用 src/feedback.ts 合同。看到 文档/ feedback-intake.md 模式、附件限制、隐私规则、物化路径,以及以后的作业/任务/ pr的来源信封。

协调租约和启动就绪任务,而无需在运行时调度程序中等待;命令行只需要等待足够长的时间,以便其启动的工人能够持久保存结果。Agents-relayd(或等效的NPX agents-relay服务)是看门狗/仪表板模式。模型支持的工作者需要——事件属性;事件传输携带权威终端工作者事件以及唤醒/进程流量。看到 文档/ service.md. ——file PATH仅为显式本地演示/测试模式。

路由器规则存储在 ~/.agents-relay/execution-router-rules.md 默认和使用 [choices] 加上 [routing-instruction] 章节(参见Execution Router文档)。 agents-relayd --execution-router-rules PATH 为守护进程选择一个不同的文件;显式的CLI路径优先于 AGENTS_RELAY_EXECUTION_ROUTER_RULES,为了兼容性,仍然支持它。

agents-relayd 没有 --pr/--id 默认情况下在工作空间模式下运行:它发现嵌套的Git存储库 ~/Workspace,只保留GitHub origin 并将他们管理的PR工作聚合到一个仪表板和工作池中。通过 --workspace PATH 用另一个词根 --repo OWNER/REPO 保持单存储库池模式。

对于自动化,代理中继可以使用GitHub App安装认证通过 AGENTS_RELAY_GITHUB_APP_ID, AGENTS_RELAY_GITHUB_APP_INSTALLATION_ID, AGENTS_RELAY_GITHUB_APP_PRIVATE_KEY_FILE (或匹配CLI标志)。Webhook模式是本地优先的:目标Webhook协调是主要的,仪表板自动刷新读取从SQLite RelayStore状态恢复的一次性进程内视图,并且广泛的看门软件下降到30分钟的回退。不维护单独的持久化仪表板作业缓存。看到 文档/ github-app-rate-limit.md.

为每个作业运行一个逻辑调节权限。 ReconcileCoordinator 序列化进程中的工作;在多个独立的协调程序拥有相同的作业之前,使用分布式原子租约。不要在PR-body Job标记或PR-comment Task标记中放置秘密、凭据、私有提示或大型私有有效负载;只存储摘要和工件引用。

模型支持的任务在启动前由Relay路由。普通任务生成器会忽略适配器/提供者/模型;显式路由标志仍然是兼容性/调试约束。看到 文档/ architecture.md 和 技能/ agents-relay / SKILL.md.

XChat和其他编排器可以使用Relay的精确共享发现实现,而无需复制文件系统搜索逻辑:

npx agents-relay context resolve --project-path ~/Workspace/agents-relay --role orchestrator

该命令只解析当前执行的具体路径。使用 --skills / --agents 用于显式选择;没有解析过的绝对路径写入持久任务状态。

最小的代理网络表面是机器驱动的注册和发现。 agent-register 将代理身份、职责边界、声明的功能、端点/运行时、可用性和路由元数据保存在可信的PR标记中; agent-discover 应用硬过滤并返回有证据支持的候选人。适配器仍然是运行时,而不是代理标识。看到 文档/ architecture.md 用于受约束的未来远程提交契约。

代理工作者生命周期

托管任务是代理的描述性工作,而不是shell命令。使用 codex 或者 chatgpt 对于worker任务。诸如测试、构建工具、Markad Vision、ffmpeg和其他cli之类的命令由编排器或执行代理调用;它们不是工作者适配器。

每个模型支持的任务都声明一个持久输出 --output task-pr 或者 --output file --output-path PATH. agent Relay用托管的PR URL、持久的任务注释URL、作业/任务标识、项目、输出合同和强制的终端事件合同来引导worker;worker从GitHub中获取任务意图,而不是接收存储任务提示符的副本。

对于Codex和ChatGPT, 相关的工作者事件是权威的生命周期输入,而不是单独的耐用品店。事件发布使用规范的Neo events-bus 表面(events__publish 对于沙盒/托管worker,或 NEO_EVENTS_EMIT 本地直接工人);代理中继订阅,验证相关性,应用图形转换,在RelayStore中持久化结果,并将它们投射到GitHub。继电器发布 task.process.launched 只有在适配器成功启动后; task.started 职工所有,必须是一个新的、相关的开始承认。食典委发布 task.process.exited 当它的同步运行时退出时,而ChatGPT则发布 task.process.async_exited 在一次性提交后,运行时退出;两者都不能代替 task.completed, task.failed, task.blocked,或者 task.cancelled. 执行代理必须准确地发布一个相关的终端事件。Relay仅从该终端事件持久化匹配的持久状态。模型支持的任务需要事件总线,如果没有终端事件到达,则显式超时。

外部执行使用单个全局变量 webhelm 安装的可执行文件 WebHelm技能。在启动中继之前,请通过代理安装该技能 正常的技能机制,并按照自己的设置说明 SKILL.md. 技能可以存在于任何目录中;它的安装程序将 全球 webhelm 命令到技能启动器。继电器调用 webhelm platform profile chatgpt 在浏览器工作区初始化之前。 Relay不会发现Skill目录或调用单独的运行时。

ChatGPT适配器使用Relay的 agents/chatgpt-worker.agent.md 生命周期的合同。新员工使用 webhelm platform run chatgpt new-thread --session-id SESSION_ID --config <file> 在呼叫者拥有的会话中。这是一个常规的持久ChatGPT线程,它支持已验证帐户中连接的Neo MCP。Relay在提交后关闭会话,但ChatGPT线程保留在历史记录中。现有线程的审查和移交继续进行 new-turn. 文件路径包含在工作消息中供Neo MCP读取;它们不会作为浏览器附件上传。提交收据保留 status: submitted;事件总线拥有任务完成。

npx agents-relay task create --repo OWNER/REPO --pr 5 --id job-1 \
  --task-id research-ui --adapter chatgpt \
  --capabilities model,chatgpt,browser-harness \
  --provider openai --model MODEL \
  --output file --output-path runs/research-ui.md \
  --input "Research the dashboard UX and write the final report to the declared output file."

GitHub PR状态对于终端生命周期是权威的:合并的PR将其管理的工作调和为 COMPLETED;一个封闭的、未合并的PR对应于 CANCELLED 并且不能启动排队工作。仪表板显示 /api/jobs 并分别显示PR状态、持久作业生命周期和派生的运行时状态。合并的PR将生命周期调整为 COMPLETED;封闭的、未合并的PR将生命周期调和为 CANCELLED.

Relay没有用于新工作的协调器工作者适配器。编排器是创建/计划持久任务的外部客户端;执行路由器选择一个真实的工作路由(codex 或者 chatgpt). CLI和指示板并不只公开手动编排器 task start, task complete,或合成的 record 路径。

历史商店可能仍然包含 adapter: orchestrator. 协调只将该值视为遗留迁移证据:从未启动的排队工作可以适当地转换为正常的工人需求;具有未知结果的正在运行的工作被隔离为BLOCKED而不是重播;仅显式持久 externalCompletionVerified 证据可以在不执行的情况下完成遗留工作。新任务创建和任务更新拒绝该适配器。

对于托管作业,GitHub PR主体是规范的协作表面,而SQLite仍然是生命周期权威。

自动任务故障排除

当活动作业包含当前运行时 FAILED 任务时,协调可能会创建一个p优先级 troubleshooter 针对那个失败尝试的恢复任务。 BLOCKED 工作不是故障排除程序所拥有的:它一直处于阻止状态,直到权威解除阻止将其转换为 UNBLOCKED. 恢复任务被路由到具有存储库/工具访问权限的本地codex工作人员,并在捆绑的疑难解答代理合同下运行。故障排除程序的诊断是事件优先的:在对根本原因进行分类或重试之前,它必须检查失败任务的任务范围生命周期事件历史(包括排序、重复/缺失/延迟事件、源和阶段数据)。

疑难解答程序在重试之前进行诊断。任务本地或暂态执行原因被狭窄地修复;通过拥有的存储库的P0/自作业工作流修复共享的工作者/运行时/工具缺陷。可疑的人为/外部阻塞者进入规范 workflow/escalation.mmd 图通过 agents-relay escalation;疑难解答程序本身不决定升级结果分支。

flowchart LR
    Failed[Failed task] --> Troubleshooter
    Troubleshooter -->|technical| Repair[Repair / retry]
    Troubleshooter -->|suspected human blocker| Escalation[Escalation graph]
    Escalation --> Invoke[neo escalation]
    Invoke --> Codex[Escalation Agent + elevated Local Codex]
    Codex -->|resolved| Resume[Resume recovery]
    Codex -->|failed| Technical[Technical recovery evidence]
    Codex -->|needs_user| User[Notify user + task.blocked]
    User --> Unblock[Authoritative unblock]
    Unblock --> Repair

升级图是Neo返回后发生的事情的权威: resolved 选择恢复, failed 选择技术故障处理,且仅 needs_user 选择block for user操作。通知机制始终保持调用者描述 --on-needs-user;中继不绑定微信、Discord、iMessage或其他通道。只有在故障原因修复后,故障排除程序才会重试原始的FAILED任务并验证持久进度。历史已解决的失败不会产生重复的恢复工作,并且确定性协调不会为相同的失败尝试复制疑难解答任务。

权威解锁和规划器历史记录

依赖释放和运行时解除阻塞是两个不同的概念。依赖完成只是简单地释放DAG工作。运行时/外部阻塞仍然存在 BLOCKED 直到 task unblock, job unblock,或阻塞作业解决方案记录阻塞的基线/当前证据并发出 task.unblocked,将任务转换为 UNBLOCKED.

对于每个作业,解锁证据都成为持久的恢复上下文。Relay重新尝试相同的授权故障排除程序,而普通工作则在必要时使用planner拥有的恢复。每一轮规划师都是一流的 agents-relay:plan:v1 记录。它在生成任务之前被持久化,然后使用Planner评估和生成的任务id更新。遗留的工作 changeCycle 数据仅作为兼容性输入而不被当前模型写入。

浏览器工作区产品边界

代理中继拥有持久性 Relay 浏览器工作区作为产品基础结构。在守护进程启动时,它运行 webhelm status,动态导入返回的绝对值 admin_helper,和呼叫 ensureWorkspace("Relay", 6). 这个引导是最好的努力:浏览器工作区发现/帮助器失败被记录并跳过,因此它们不会阻止 agents-relayd 从开始;在浏览器工作区恢复之前,ChatGPT浏览器工作可能仍然不可用。新的ChatGPT工人使用relay拥有的浏览器会话,并在验证提交后关闭它。现有线程 new-turn 消息直接使用持久异步队列,而无需创建浏览器会话。Relay不通过CLI生命周期命令创建或删除工作区。

共享出版物报告

具有现有已验证发布/发布工作流的存储库可以将最终结果报告给代理中继,并在此存储库中使用可重用操作:

permissions:
  contents: read
  issues: write
  pull-requests: read

- name: Report verified publication
  uses: lalalic/agents-relay/.github/actions/report-publication@publication-v1
  with:
    token: ${{ github.token }}
    artifact: my-package-or-artifact
    version: ${{ steps.release.outputs.version }}
    channel: https://registry.npmjs.org

- name: Report release failure
  if: ${{ failure() }}
  continue-on-error: true
  uses: lalalic/agents-relay/.github/actions/report-publication-failure@publication-v1
  with:
    token: ${{ github.token }}
    stage: release workflow

调用者必须只报告它实际验证过的发布。对于本地优先的作业,操作从权威的本地合并提交消息中读取作业ID和可选的显示PR,并发布兼容的 agents-relay:package-published:v1 或发布失败标记到该显示PR或可重用发布问题。历史github合并的PR相关性仍然作为后备支持。标记和GitHub webhook仅用于传输/关联:代理中继解析原始作业并通过持久保存发布事实 RelayStore.recordPublication(...) 到权威的SQLite publication_delivery 和 publication_state 表。发布成功或失败不会改变已完成作业的生命周期状态。

artifact 可以识别npm/PyPI包,Chrome扩展,GitHub发布工件或自定义发布工件。 channel 标识注册中心/存储/发布通道,并显示为发布元数据。相同工件/版本的重复报告是幂等的。

项目范围代理Markdown继承

代理查找有两层:内置中继 skills/agents-relay/agents/ 和 <job-context-root>/agents/. job.projectPath 选择存储库中的上下文根(包括单线程内容项目);没有搜索工作空间/全局代理回退。项目代理前台可指定 extends: relay/planner, mode: extend, sections: { replace: [Heading/Subheading], extend: [Other Heading] } 使用标题路径,或 mode: replace 为了一个完整的行为替代。relay拥有的生命周期、Job/Task和事件契约是单独注入的,不能被项目代理所取代。未扩展本地代理是一个独立的定义。解析器发出一个确定性的SHA-256组合Markdown;缺失的节或不支持的父节失败,而不是静默地丢弃指令。

版本与发布记录

agents-relay 共发布 381 个版本,首次发布于 2026/09/20;过去 12 个月发布了 381 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.0.202latest2026/11/03今天
2.0.2012026/11/03今天
2.0.2002026/11/02今天
2.0.1992026/11/02今天
2.0.1982026/11/021 天前
2.0.1972026/11/021 天前

关于 agents-relay 的常见问题

agents-relay 是什么?

通过GitHub拉取请求协调的持久异步代理作业

如何安装 agents-relay?

在项目目录运行 npm install agents-relay,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 agents-relay、agents-relayd,可以用 npx agents-relay 直接运行。

agents-relay 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/agents-relay 是否存在。

agents-relay 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

agents-relay 可以商用吗?

agents-relay 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

agents-relay 还在维护吗?

最新版本 2.0.202 发布于 2026/11/03(今天);至今共发布 381 个版本,其中过去 12 个月发布了 381 个;首次发布于 2026/09/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。