文档

API 与事件

AgentHub 的公开契约分为 REST API、WebSocket event、Runtime adapter event 和 IM integration event。本页描述稳定方向与边界;具体 OpenAPI 规范、事件 schema 和 SDK 包仍在开发中。

开发状态

本页不是完整 API 参考。Hub / Edge API 和事件 schema 正在随实现迭代,公开调用前请以对应仓库中的 OpenAPI、事件文档和版本说明为准。

契约分层

层级面向对象说明状态
Hub APIWeb、Desktop、IM Gateway会话、项目、设备、任务、权限、审计开发中
Edge APIDesktop、Hub、运维工具workspace、run lifecycle、runtime adapter、artifact、diff、preview开发中
WebSocket EventsWeb、Desktop、Hubrun 进度、消息增量、diff、approval、状态变化开发中
Runtime Adapter EventsEdge 内部Claude Code、Codex、OpenCode 等 runtime 的结构化事件契约已定
IM Integration EventsFeishu/Lark Gateway消息事件、卡片动作、绑定状态开发中

协议细节的拥有方是 AgentHub 仓库 api/ 目录。本公开文档保留读者视角:每一层做什么、谁负责、哪些东西不能越界。

稳定性矩阵

区域当前稳定性可以依赖什么不应依赖什么
Public site health/stats已上线入口,字段以实现为准公开页面、公开发现文件、低风险 health/status 语义私有运维字段、admin route、未授权 audit
Hub client API开发中TokenDance ID -> Hub session -> product authorization 的边界未发布 OpenAPI 之外的路径或字段
Edge loopback API开发中,本地预览可用health、run、event、workspace allowlist、runtime profile 语义固定端口、固定 token 传递方式、未声明字段
WebSocket events开发中event envelope、run lifecycle、错误码方向未版本化 payload 内部字段
Runtime adapter contract契约已定message/tool/diff/artifact/approval/failure 的归一化语义稳定 import path、第三方 SDK 发布流程
Feishu/Lark events开发中im.message.receive_v1card.action.trigger、3 秒确认、异步队列把飞书 OAuth 当产品登录、在 card payload 放完整上下文

最后公开校验日期:2026-06-09。如果 AgentHub 仓库的 OpenAPI 或 event schema 与本页冲突,以 owning repository 的 schema 为准,并在同一轮更新本页。

Hub API

Hub API 负责协作和权限层。典型资源包括:

  • sessions:用户会话、Hub session、低风险个性化状态。
  • projects:团队项目、workspace 关联、可见性和成员关系。
  • devices:Desktop / Edge 设备注册、在线状态和路由目标。
  • tasks:来自 Web、Desktop 或 IM 的工作请求。
  • runs:Agent 执行实例和运行状态。
  • audit:重要操作、审批、失败和权限判断。

Hub API 不应直接暴露模型 API key,Web 客户端也不应绕过 Hub 直接操作本地 workspace。

预期 Hub API 分组:

分组典型路径说明
Authentication/client/auth/*TokenDance ID relying-party 流程和 Hub 本地 session 签发
Sessions/client/sessions, /client/sessions/{id}Web/Desktop 协作状态
Messages/client/sessions/{id}/messages用户和 Agent 对话记录
Agent tasks/web/agent-tasksWeb 和协作入口发起的 Hub-owned 任务
Agent profiles/client/agents, /client/sessions/{id}/agentsruntime/profile inventory 和 session 内 Agent 实例
Devices and targetsdevice registration、target routing endpointsHub 选择哪个 Edge 可以接收任务
Audit and statuspublic stats、health、audit/event endpointspublic stats 可公开,敏感审计必须授权

公开示例只使用占位 host 和 token。不要把生产 admin key、JWT 或私有 callback payload 复制进文档。

最小请求形状如下。路径和字段在公开 OpenAPI 稳定前仍处于 preview 状态:

http
GET /client/sessions HTTP/1.1
Host: hub.example.invalid
Authorization: Bearer <agenthub_session_token>
Accept: application/json
JSON
{
  "items": [
    {
      "id": "session_123",
      "projectId": "project_123",
      "title": "Local review",
      "state": "active",
      "updatedAt": "2026-06-09T00:00:00Z"
    }
  ],
  "nextCursor": null
}

Edge API

Edge API 负责本地执行边界。典型能力包括:

  • 列出和选择 workspace。
  • 启动、取消和查询 run。
  • 读取运行事件、artifact、diff 和 preview。
  • 管理 runtime adapter preset。
  • 执行本地健康检查。

Edge 是靠近文件系统和进程的边界,默认应更保守:最小权限、workspace allowlist、明确审批和可审计事件。

预期 Local Edge 分组:

分组典型路径说明
Health/health, /v1/health确认进程、runtime 和本地准备状态
Runtime inventory/v1/agents, /v1/runners列出真实 runtime adapter 和兼容 runner preset
Runs/v1/runs, /v1/runs/{id}启动和查询本地执行
Events/v1/eventsrun event 和 replay 的 WebSocket stream
Permissions/v1/permissions/decideruntime action 的本地审批桥
Artifacts and previewsrun artifact、diff、file、preview endpointslocal-only、workspace-scoped 数据

浏览器 WebSocket 客户端通常无法可靠设置自定义 header,因此本地 Edge token 可能通过 query parameter 参与 WebSocket upgrade。这个机制只保护 loopback Edge 进程边界;Hub/Remote/Cloud 路由仍需要 Hub-issued session、target authorization 和 audit。

Local Edge 创建 run 的 preview 示例:

http
POST /v1/runs HTTP/1.1
Host: 127.0.0.1:3210
Content-Type: application/json
Authorization: Bearer <local_edge_token>
JSON
{
  "workspace": "workspace_123",
  "agentId": "codex-local",
  "input": {
    "text": "Review README and suggest one documentation improvement."
  },
  "mode": "read_only"
}

WebSocket 事件流示例:

Text
ws://127.0.0.1:3210/v1/events?runId=run_123&token=<local_edge_token>

WebSocket Event

WebSocket event 用于把执行过程流式推送到 Desktop/Web:

Event说明
run.startedRun 已创建并开始执行
run.message.deltaAgent 消息增量
run.tool.callAgent 发起工具调用
run.tool.result工具调用结果
run.diff.ready可审查 diff 已生成
run.artifact.ready文件、报告或预览产物可用
run.approval.requested需要用户确认
run.completedRun 完成
run.failedRun 失败

字段命名应保持可版本化,客户端不应依赖未声明的内部字段。

Event 词汇表

API 文档、runtime adapter、Desktop/Web 渲染、搜索词和 release note 都使用这套词汇。不要混用 message.delta 这类裸名称和 run-scoped 名称。

分组标准名称说明
Lifecyclerun.createdrun.startedrun.completedrun.failedrun.cancelled驱动 timeline 和终态
Messagerun.message.deltarun.message.completed流式输出用户可见 transcript
Toolrun.tool.callrun.tool.result描述归一化 runtime tool activity
File and diffrun.file.readrun.file.changedrun.diff.readyrun.patch.proposedpath 必须是 allowlisted workspace 的相对路径
Artifact and previewrun.artifact.readyrun.preview.ready链接报告、截图、preview 或文档
Approvalrun.approval.requestedrun.approval.resolved暂停高风险 write、shell、network、publish 或 deploy 动作
Runtime failureruntime.unavailableruntime.timeoutschema.validation_failed用于排障和 UI 恢复的稳定 failure code
Integrationintegration.message.receivedintegration.card.actionidentity.binding.requiredGateway 到 Hub 的归一化事件;飞书/Lark 原始名称留在 gateway log

Event Envelope

每个 event 都应该方便 Desktop/Web 渲染,也方便审计代码存储。保持稳定 envelope,payload 另行版本化:

字段说明
id稳定 event id 或基于 sequence 的 id
seq同一 stream 内可用的单调序号
typeevent 类型,例如 run.tool.call
runId产生 event 的 run
sessionId可选的 Hub session 或本地 thread
agentId可选的 runtime adapter 或 Hub agent instance
createdAt由拥有该 event 的服务生成的时间
payload可版本化的事件正文

推荐客户端行为:

  • 忽略未知 event type,但保留在日志中。
  • idseq 去重。
  • 把 partial event 渲染为进展状态,而不是最终事实。
  • 当 event 内含路径、prompt 或不宜公开的模型输出时,不要把原始细节放进公开截图。

示例 event:

JSON
{
  "id": "evt_001",
  "seq": 1,
  "type": "run.tool.call",
  "runId": "run_123",
  "sessionId": "session_123",
  "agentId": "codex-local",
  "createdAt": "2026-06-09T00:00:00Z",
  "payload": {
    "tool": "read_file",
    "label": "Read README",
    "status": "started"
  }
}

Runtime Adapter Event

Runtime adapter 把各 CLI/runtime 的输出归一化。例如 Claude Code 的 NDJSON、Codex 的 JSONL/event stream、OpenCode 的 JSON event 都应转换为 AgentHub 事件。

Adapter 至少需要表达:

  • 运行开始、结束和失败。
  • 模型消息和增量。
  • 工具调用和工具结果。
  • 文件修改、diff、artifact。
  • 需要用户审批或额外输入的状态。

描述 runtime 输出时,Runtime adapter event 应优先使用上面的 run-scoped 词汇,例如 text delta、tool call、tool result、file change、permission request、session init 和 final result。只有在不暴露 secret 的情况下,才把 adapter 原始消息作为调试信息附带。

IM Integration Event

Feishu/Lark 集成事件由 Integration Gateway 处理,再转成 Hub 可理解的 task 或 action。当前重点是:

  • im.message.receive_v1:单聊或群聊 @ 机器人消息。
  • card.action.trigger:交互卡片按钮回调。
  • TokenDance ID 绑定状态更新。

这些事件必须快速确认、异步处理耗时任务,并避免把 secret 或完整 workspace 上下文放进卡片 payload。

错误格式

REST API 应返回稳定错误格式,让 Web/Desktop 能展示可恢复失败,而不是解析日志:

字段说明
code稳定的机器可读错误码
message简短的用户可读信息
requestId用于日志和支持排查的关联 id
details可选的结构化详情,只放调用方可见内容

预期状态要使用具体错误码:invalid agent id、unauthorized target、workspace outside allowlist、permission denied、runtime unavailable、timeout、cancellation 和 schema validation failure。

建议错误码:

CodeHTTP场景
invalid_agent_id400请求的 agent/profile 不存在
unauthorized_target403Hub 不允许该 session 路由到目标 Edge
workspace_outside_allowlist403workspace 不在 Edge allowlist 内
permission_denied403用户拒绝或策略拒绝写入、shell、网络等动作
runtime_unavailable503runtime CLI 未安装、未登录或 adapter 不可用
run_timeout504run 超过配置的时间限制
run_cancelled409run 已由用户或系统取消
schema_validation_failed422请求或 event payload 不符合 schema

授权矩阵

契约应在 handler 开始工作前明确授权边界。

动作所需权威拒绝时应呈现
读取公开 docs/status公开站点静态 404 或公开安全错误
打开 Hub Web sessionTokenDance ID subject + Hub 产品 sessionunauthorized 或登录跳转边界
读取 project/session/taskHub project membership带 request id 的 permission_denied
把 task 路由到 EdgeHub target authorization + Edge presenceunauthorized_targettarget_offline
读取 workspace file previewEdge workspace allowlist,远程时还需要产品授权workspace_outside_allowlist
启动 runtime runEdge policy + runtime profile availabilityruntime_unavailablepermission_denied
应用文件写入或 shell 命令明确用户审批或策略授权approval_rejectedpermission_denied
创建飞书/Lark task已校验 Integration Gateway event + TokenDance ID bindingbinding_requiredpermission_denied

不要复用 TokenDance API key 做这些产品动作。TokenDance API key 用于通过 TokenDance Gateway 调模型 API;AgentHub 产品动作需要 TokenDance ID 以及 Hub/Edge 授权。

分页和幂等

Hub API 在列出 session、project、task、run、audit event 或 message 时,应支持 cursor pagination。除非 owning OpenAPI 已经确认,否则公开 docs 不承诺 offset pagination。

推荐列表形状:

JSON
{
  "items": [],
  "nextCursor": null,
  "requestId": "req_123"
}

Web、Desktop、Hub 或 Integration Gateway 可能重试的写接口,应接受 idempotency key,或从 upstream event id 派生幂等键。最重要的场景包括 IM card action、task creation、run creation、approval action 和 artifact publication。

兼容性检查

把某组 API 或 event 写成稳定前,先确认:

  1. 英文和中文 docs 描述相同状态和边界。
  2. owning AgentHub 仓库里已经存在 OpenAPI 或 event schema。
  3. Desktop/Web 能安全渲染未知字段。
  4. 错误码覆盖 unauthorized target、workspace allowlist、runtime unavailable、timeout、cancellation 和 schema validation。
  5. 请求和 event 示例使用占位 host、占位 token 和脱敏路径。
  6. 搜索索引、侧栏 TOC、llms.txt、sitemap、FAQ 和 changelog 在相关处同步提到该契约。

安全边界

  • TokenDance ID 认证用户;Hub 签发并校验 AgentHub 产品 session。
  • TokenDance API key 用于模型 API 调用,不是 AgentHub 浏览器登录凭据。
  • Web 是 Hub-only,不能直接调用 Local Edge。
  • Desktop 可以在 loopback 上调用 Local Edge 做本地执行。
  • Edge 只能在 allowlisted workspace 内访问本地文件。
  • 飞书/Lark 事件必须通过 TokenDance ID 完成账号绑定后才能成为 Hub task。

版本和兼容性

  • REST API 应以 OpenAPI 为准。
  • WebSocket event 应有可版本化 schema。
  • Runtime adapter contract 变更需要同步 Desktop/Web 渲染和审计逻辑。
  • 公开 SDK 发布前,文档示例只作为架构说明,不承诺稳定 import path。

Schema 来源

本页是公开阅读指南。实现工作请以 AgentHub 仓库中的这些文件为准:

来源用途公开链接
api/openapi.yamlREST resource 和 schema contractGitHub
api/events.mdWebSocket 与 runtime event 词表GitHub
api/conventions.md命名、分页、错误和兼容约定GitHub
edge-server/README.mdLocal Edge runtime 和 loopback API 边界GitHub
app/desktop/README.mdDesktop-to-Edge 预期GitHub
app/web/README.mdWeb-to-Hub 预期GitHub