API 与事件
AgentHub 的公开契约分为 REST API、WebSocket event、Runtime adapter event 和 IM integration event。本页描述稳定方向与边界;具体 OpenAPI 规范、事件 schema 和 SDK 包仍在开发中。
开发状态
本页不是完整 API 参考。Hub / Edge API 和事件 schema 正在随实现迭代,公开调用前请以对应仓库中的 OpenAPI、事件文档和版本说明为准。
契约分层
| 层级 | 面向对象 | 说明 | 状态 |
|---|---|---|---|
| Hub API | Web、Desktop、IM Gateway | 会话、项目、设备、任务、权限、审计 | 开发中 |
| Edge API | Desktop、Hub、运维工具 | workspace、run lifecycle、runtime adapter、artifact、diff、preview | 开发中 |
| WebSocket Events | Web、Desktop、Hub | run 进度、消息增量、diff、approval、状态变化 | 开发中 |
| Runtime Adapter Events | Edge 内部 | Claude Code、Codex、OpenCode 等 runtime 的结构化事件 | 契约已定 |
| IM Integration Events | Feishu/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_v1、card.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-tasks | Web 和协作入口发起的 Hub-owned 任务 |
| Agent profiles | /client/agents, /client/sessions/{id}/agents | runtime/profile inventory 和 session 内 Agent 实例 |
| Devices and targets | device registration、target routing endpoints | Hub 选择哪个 Edge 可以接收任务 |
| Audit and status | public stats、health、audit/event endpoints | public stats 可公开,敏感审计必须授权 |
公开示例只使用占位 host 和 token。不要把生产 admin key、JWT 或私有 callback payload 复制进文档。
最小请求形状如下。路径和字段在公开 OpenAPI 稳定前仍处于 preview 状态:
GET /client/sessions HTTP/1.1
Host: hub.example.invalid
Authorization: Bearer <agenthub_session_token>
Accept: application/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/events | run event 和 replay 的 WebSocket stream |
| Permissions | /v1/permissions/decide | runtime action 的本地审批桥 |
| Artifacts and previews | run artifact、diff、file、preview endpoints | local-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 示例:
POST /v1/runs HTTP/1.1
Host: 127.0.0.1:3210
Content-Type: application/json
Authorization: Bearer <local_edge_token>
{
"workspace": "workspace_123",
"agentId": "codex-local",
"input": {
"text": "Review README and suggest one documentation improvement."
},
"mode": "read_only"
}
WebSocket 事件流示例:
ws://127.0.0.1:3210/v1/events?runId=run_123&token=<local_edge_token>
WebSocket Event
WebSocket event 用于把执行过程流式推送到 Desktop/Web:
| Event | 说明 |
|---|---|
run.started | Run 已创建并开始执行 |
run.message.delta | Agent 消息增量 |
run.tool.call | Agent 发起工具调用 |
run.tool.result | 工具调用结果 |
run.diff.ready | 可审查 diff 已生成 |
run.artifact.ready | 文件、报告或预览产物可用 |
run.approval.requested | 需要用户确认 |
run.completed | Run 完成 |
run.failed | Run 失败 |
字段命名应保持可版本化,客户端不应依赖未声明的内部字段。
Event 词汇表
API 文档、runtime adapter、Desktop/Web 渲染、搜索词和 release note 都使用这套词汇。不要混用 message.delta 这类裸名称和 run-scoped 名称。
| 分组 | 标准名称 | 说明 |
|---|---|---|
| Lifecycle | run.created、run.started、run.completed、run.failed、run.cancelled | 驱动 timeline 和终态 |
| Message | run.message.delta、run.message.completed | 流式输出用户可见 transcript |
| Tool | run.tool.call、run.tool.result | 描述归一化 runtime tool activity |
| File and diff | run.file.read、run.file.changed、run.diff.ready、run.patch.proposed | path 必须是 allowlisted workspace 的相对路径 |
| Artifact and preview | run.artifact.ready、run.preview.ready | 链接报告、截图、preview 或文档 |
| Approval | run.approval.requested、run.approval.resolved | 暂停高风险 write、shell、network、publish 或 deploy 动作 |
| Runtime failure | runtime.unavailable、runtime.timeout、schema.validation_failed | 用于排障和 UI 恢复的稳定 failure code |
| Integration | integration.message.received、integration.card.action、identity.binding.required | Gateway 到 Hub 的归一化事件;飞书/Lark 原始名称留在 gateway log |
Event Envelope
每个 event 都应该方便 Desktop/Web 渲染,也方便审计代码存储。保持稳定 envelope,payload 另行版本化:
| 字段 | 说明 |
|---|---|
id | 稳定 event id 或基于 sequence 的 id |
seq | 同一 stream 内可用的单调序号 |
type | event 类型,例如 run.tool.call |
runId | 产生 event 的 run |
sessionId | 可选的 Hub session 或本地 thread |
agentId | 可选的 runtime adapter 或 Hub agent instance |
createdAt | 由拥有该 event 的服务生成的时间 |
payload | 可版本化的事件正文 |
推荐客户端行为:
- 忽略未知 event type,但保留在日志中。
- 按
id或seq去重。 - 把 partial event 渲染为进展状态,而不是最终事实。
- 当 event 内含路径、prompt 或不宜公开的模型输出时,不要把原始细节放进公开截图。
示例 event:
{
"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。
建议错误码:
| Code | HTTP | 场景 |
|---|---|---|
invalid_agent_id | 400 | 请求的 agent/profile 不存在 |
unauthorized_target | 403 | Hub 不允许该 session 路由到目标 Edge |
workspace_outside_allowlist | 403 | workspace 不在 Edge allowlist 内 |
permission_denied | 403 | 用户拒绝或策略拒绝写入、shell、网络等动作 |
runtime_unavailable | 503 | runtime CLI 未安装、未登录或 adapter 不可用 |
run_timeout | 504 | run 超过配置的时间限制 |
run_cancelled | 409 | run 已由用户或系统取消 |
schema_validation_failed | 422 | 请求或 event payload 不符合 schema |
授权矩阵
契约应在 handler 开始工作前明确授权边界。
| 动作 | 所需权威 | 拒绝时应呈现 |
|---|---|---|
| 读取公开 docs/status | 公开站点 | 静态 404 或公开安全错误 |
| 打开 Hub Web session | TokenDance ID subject + Hub 产品 session | unauthorized 或登录跳转边界 |
| 读取 project/session/task | Hub project membership | 带 request id 的 permission_denied |
| 把 task 路由到 Edge | Hub target authorization + Edge presence | unauthorized_target 或 target_offline |
| 读取 workspace file preview | Edge workspace allowlist,远程时还需要产品授权 | workspace_outside_allowlist |
| 启动 runtime run | Edge policy + runtime profile availability | runtime_unavailable 或 permission_denied |
| 应用文件写入或 shell 命令 | 明确用户审批或策略授权 | approval_rejected 或 permission_denied |
| 创建飞书/Lark task | 已校验 Integration Gateway event + TokenDance ID binding | binding_required 或 permission_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。
推荐列表形状:
{
"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 写成稳定前,先确认:
- 英文和中文 docs 描述相同状态和边界。
- owning AgentHub 仓库里已经存在 OpenAPI 或 event schema。
- Desktop/Web 能安全渲染未知字段。
- 错误码覆盖 unauthorized target、workspace allowlist、runtime unavailable、timeout、cancellation 和 schema validation。
- 请求和 event 示例使用占位 host、占位 token 和脱敏路径。
- 搜索索引、侧栏 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 仓库中的这些文件为准: