Files
LangBot/docs/agent-runner-pluginization/RUNTIME_CONTROL_PLANE_V2.md
2026-05-29 22:41:10 +08:00

8.9 KiB
Raw Permalink Blame History

Agent Runtime Control Plane V2

本文档记录后续 Agent Platform / runtime 管控面的设计方向。它是当前讨论中的 v2 文档,但这里的 v2 指 Host capability layer / runtime control plane不是 AgentRunner Protocol v2,也不属于当前 AgentRunner Protocol v1 插件化主线的交付范围。

1. 结论

当前主线应继续收口 AgentRunner v1

message/event -> binding -> runner.run(ctx) -> result stream

Runtime Control Plane v2 在 Host 侧新增 runtime control plane

event -> task -> runtime selection -> daemon claim -> execute -> progress/audit/result

在 Runtime Control Plane v2 之上,可以构建独立的 agent 管控面插件。插件负责 UI、策略和编排体验runtime、task、heartbeat、audit 的事实源必须属于 LangBot Host而不是插件私有 storage。

2. 不影响 v1 主线

v2 不应改变 AgentRunner v1 的基本契约:

  • 现有 local-agent、Dify、n8n、Coze 等 runner 仍可按 v1 直接执行。
  • 当前 Claude Code / Codex MVP runner 可以继续作为本机 subprocess 开发路径。
  • Host v1 已有的 event-first context、resource authorization、history / event / artifact / state / storage pull APIs 继续保留。
  • Pipeline 仍只是当前入口 adapter不参与 v2 runtime 管控面的设计中心。

v2 只是在 Host 上新增一层可选能力。需要管控面的 runner 或管理插件可以声明使用它;不需要的 runner 不受影响。

3. 当前 Host 能力与缺口

当前 Host 已经具备 v2 的基础设施底座:

  • AgentEventEnvelope / AgentBinding
  • run-scoped resource authorization
  • EventLog / Transcript / ArtifactStore / PersistentStateStore
  • History / Event / Artifact / State / Storage pull APIs
  • AgentRunner result stream 和受控错误回流
  • binding config 与 host-owned state

这些能力足够支持一次 runner.run(ctx) 内的安全执行,但不足以承担完整 runtime 管控面。

v2 还需要 Host 新增:

  • runtime registryruntime id、所属 workspace、所在机器、provider 能力、状态。
  • capability discoveryclaude / codex / 其它 CLI 是否存在、版本、登录状态、执行隔离能力。
  • heartbeat / livenessruntime 在线、忙闲、最后心跳、可用 slot。
  • task queueenqueue、claim、start、progress、complete、fail、cancel。
  • workspace mappingLangBot workspace / project 如何映射到 runtime 上的真实目录、仓库或挂载。
  • secret / env projection按授权向 runtime 投影 token、代理、MCP 配置、技能和环境变量。
  • runtime auditstdout、stderr、事件流、产物、失败原因、执行耗时、使用量。
  • control API / UI选择 runtime、测试 runtime、查看状态、下线、取消任务、重试任务。

4. 角色边界

4.1 LangBot Host

Host 是事实源和控制面内核:

  • 保存 runtime / task / heartbeat / audit 状态。
  • 做权限校验、资源裁剪、workspace 绑定和审计。
  • 决定任务是否可被某 runtime claim。
  • 将执行结果统一回写到 event / transcript / artifact / state。

Host 不应内置具体 agent CLI 的复杂业务逻辑,也不应把某个官方 runner 的特殊行为提升为通用协议。

4.2 Agent 管控面插件

管理插件是 v2 control plane 的产品化管理层:

  • 展示 runtime、agent、task、进度、失败、审计。
  • 提供策略配置,例如默认 runtime、provider 偏好、并发限制、重试策略。
  • 触发 runtime 测试、任务取消、任务重试、手动分配。

管理插件不应把 runtime/task 的事实源放进自己的 plugin storage。它应该调用 Host v2 API。

4.3 Runtime daemon / worker

Runtime daemon 负责真实执行:

  • 在所在机器上检测 CLI 和版本。
  • 管理工作目录、仓库、挂载、临时文件和进程。
  • 从 Host claim 任务,执行后上报 progress / complete / fail。
  • 将 stdout / stderr / artifacts / session id 回流 Host。

Claude Code、Codex、OpenCode、Gemini CLI 等 provider 适配逻辑应主要落在 daemon / worker 或 provider adapter 中。

5. 部署形态

5.1 uv / local embedded

用户用 uv 或源码直接启动 LangBot 时LangBot 进程所在机器就是 runtime host。

这种模式下可以直接检测用户主机上的 claudecodex 等 CLI也可以直接 subprocess 执行。它适合个人开发和本地 smoke但不应作为团队级管控面的唯一形态。

5.2 Docker embedded

用户用 Docker 启动 LangBot 时runtime host 是容器,不是宿主机。

因此:

  • 只能检测容器内的 claudecodex
  • 只能使用容器内的 HOME、PATH、凭据和挂载目录。
  • 如果镜像未安装 CLI或未挂载认证文件 / workspaceCLI runner 会不可用。

Docker embedded 可以作为高级部署选项,但需要用户显式安装 CLI、挂载工作区和凭据。Host 不应假设 Docker 容器能自动访问宿主机 CLI。

5.3 Sidecar daemon

推荐的 v2 形态是 sidecar daemon

LangBot Host (Docker or server)
  <-> Runtime daemon on user host / worker host
        -> claude / codex / other CLI

这种模式下LangBot 可以跑在 Docker 内runtime daemon 跑在宿主机或独立 worker 机器上。daemon 负责检测本机 CLI、持有本机凭据和工作区访问能力。

5.4 Remote runtime

团队场景可以使用远端 runtime

  • 开发机、构建机、云主机或专用 worker。
  • 多个 workspace 可绑定不同 runtime。
  • Host 只通过 registry / task queue / heartbeat / audit 进行管理。

5.5 API-only agent

Dify、n8n、Coze、DashScope 等 API 型 runner 不依赖本地 CLI。它们可以继续按 v1 直接执行,也可以在未来按需要接入 v2 task/audit。

6. 与 Claude Code / Codex MVP runner 的关系

当前 Claude Code / Codex runner 是 v1 runner

runner.run(ctx) -> subprocess("claude" / "codex")

它们适合验证 Host context 投影、state resume、result stream 和基础 CLI 调用,但有明确限制:

  • 命令只在 LangBot runtime host 上执行。
  • Docker 环境只能看到容器内 CLI。
  • 没有 runtime registry、heartbeat、task queue、cancel、workspace lifecycle。
  • 不提供发布级执行隔离、secret projection、团队级 audit。

v2 不需要删除这些 runner。它们可以继续作为 dev / MVP 路径存在。未来若接入管控面,可以增加 runtime-managed 执行模式:

runner binding -> Host task -> runtime daemon -> provider CLI -> Host result

7. 最小 v2 API 草案

以下仅记录能力边界,不代表最终 API 命名。

Runtime

  • runtime.register
  • runtime.heartbeat
  • runtime.list
  • runtime.get
  • runtime.disable
  • runtime.capabilities.report
  • runtime.capabilities.probe

Task

  • task.enqueue
  • task.claim
  • task.start
  • task.progress
  • task.complete
  • task.fail
  • task.cancel
  • task.retry

Workspace

  • runtime.workspace.bind
  • runtime.workspace.unbind
  • runtime.workspace.resolve

Audit / artifacts

  • task.log.append
  • task.artifact.create
  • task.events.page

这些 API 应由 Host 提供,并受 workspace、runtime、binding、actor 和 plugin identity 约束。

8. 管控面插件可以构建的能力

基于 v2 Host 能力,可以实现一个类似 Multica 的 agent 管控面插件:

  • runtime 列表、在线状态、CLI 能力、版本、认证状态。
  • agent profile 与 runtime/provider 绑定。
  • 任务看板、任务详情、进度流、失败原因、重试和取消。
  • workspace 到 runtime 目录 / 仓库的映射管理。
  • provider capability 测试,例如 Claude Code / Codex 是否可执行。
  • 审计视图输入、输出、工具、artifact、stdout/stderr、session id。
  • 策略配置:并发、队列、默认 runtime、fallback runtime、权限模式。

该插件应该是 Host v2 的消费者,而不是 Host v2 的替代品。

9. 设计原则

  • v1 先稳定v2 可选叠加。
  • Host 保存事实源,插件提供管理体验。
  • Runtime daemon 执行具体 CLI 和本机资源访问。
  • Docker 不假设拥有宿主机 CLI需要 sidecar 或显式挂载。
  • Pipeline 不进入 v2 控制面中心。
  • 直接 subprocess runner 可保留,但只作为 local/dev/MVP 路径。
  • 发布级能力必须经过 Host 权限、审计和资源边界。

10. 待定问题

  • runtime daemon 与 Host 的认证模型workspace token、device token、还是 scoped PAT。
  • task 与 AgentRunner binding 的映射关系:由 binding 直接 enqueue还是由独立 task policy 决定。
  • runtime capability schema 的稳定字段provider、version、login status、execution isolation、workspace access、slot。
  • secret projection 的边界Host 存储、用户本机存储、或外部 secret manager。
  • Docker compose 是否提供官方 sidecar daemon 示例。
  • v2 UI 是核心前端的一部分,还是完全由管理插件提供。