Skip to content

[Feature]: Build lbctl as an independent Go control plane for LangBot #2495

Description

@RockChinQ

设计

新建独立仓库 langbot-app/lbctl,使用 Go 实现,命令名为 lbctl,以自包含二进制分发。独立于 LangBot Core,不并入现有 Python langbot CLI,也不改变 lbp 的插件开发职责。

第一期范围

第一期只做远程 Workspace 内的实体管理:面向用户、脚本和 Coding Agent,通过 HTTP API 和现有 Workspace API Key,操作已运行的 LangBot 工作区中的 Bot、Pipeline、Provider、Model、知识库、MCP Server、Skill、Plugin 等实体。

  • 包含连接配置、身份与权限查询、实体查询与配置操作,以及 Agent 友好的结构化接口。
  • 不负责创建、部署或管理实例,也不负责创建、删除工作区或管理 Cloud 订阅。
  • 不做本地自部署实例管理,不提供 LangBot 安装、启动、停止、重启、升级、卸载、宿主机日志或部署诊断命令,不要求 Docker / Compose。
  • 本地自托管实例生命周期放在第二期,不纳入第一期实现或验收,计划见文末。
  • 不内置浏览器或网页流程编排;第三方平台操作由 Agent 使用现有浏览器工具完成,不作为第一期交付前置条件。

连接与资源管理

Context 只保存 API 连接配置,用于选择要操作的实例与 Workspace,不代表受 lbctl 托管的部署。

lbctl context add production --endpoint https://bot.example.com --api-key-stdin
lbctl context list
lbctl context use production
lbctl context remove production

lbctl whoami                  # 当前 API 目标、Workspace 与权限
lbctl capabilities            # 目标实例支持的 API 能力
lbctl version                 # lbctl 版本

资源命令直接使用 lbctl <资源> <动作>,不增加 remotemanage 等中间层:

lbctl bot list
lbctl bot get <id>
lbctl bot create --file bot.yaml
lbctl bot update <id> --file bot.yaml
lbctl bot delete <id> --yes

lbctl pipeline list
lbctl pipeline get <id>
lbctl pipeline apply --file pipeline.yaml

lbctl provider list
lbctl model list
lbctl knowledge-base list
lbctl mcp-server list
lbctl skill list
lbctl plugin list

lbctl api get /api/v1/system/info
lbctl api post /api/v1/pipelines --file pipeline.json
  • 实体操作仅通过当前 context 的 HTTP API 执行,作用域限定为 API Key 对应的远程 Workspace,不操作宿主机或部署环境。
  • 复杂请求统一支持 --file <JSON/YAML 文件>--file - 从 stdin 读取。
  • api 用于尚未封装的接口,只接受当前 endpoint 下的相对路径。
  • Core 提供带 API Key 鉴权的身份查询接口,供 whoami 返回 Key 对应的 Workspace 和权限,不使用公开系统信息推断身份。

Agent 与认证约定

  • 提供可直接使用的 --help、机器可读命令 schema 和 --output json
  • 非交互执行不得等待输入;破坏性操作要求显式 --yes,支持超时,适用的写操作提供 --dry-run
  • stdout 输出结果,stderr 输出诊断;错误码和退出码保持稳定,写操作后回读验证。
  • 复用 Workspace API Key 的权限范围、过期、吊销与 Workspace 隔离语义,不新增认证体系,不允许通过请求参数切换 Key 所属 Workspace。
  • API Key、Bot Token 等通过 stdin 或受限文件传入,不放入命令行参数,不出现在普通输出、日志或错误中。

分发与配套

  • 通过 GitHub Releases 发布各平台二进制与校验信息,官网提供一键安装器;安装器仅安装 lbctl,不自动部署或启动 LangBot。
  • CLI 二进制面向 Linux、macOS、Windows,各平台均以远程 Workspace 实体管理为第一期支持范围,发布前完成对应平台验证。
  • Core 与 lbctl 独立版本、独立发布,通过 OpenAPI、capabilities 和兼容性测试保持一致。
  • lbctl 仓库维护 CLI 安装、远程 Workspace 实体管理和 Agent 操作 Skills;官网/Wiki 提供安装与使用入口,避免重复维护命令参数表。
  • 在两仓库的 AGENTS.md 和开发文档中写清同步要求:API、认证或资源模型变化时,一并评估 OpenAPI、MCP、lbctl、Skills、文档与兼容测试。

第一期验收

  • 能安装并运行 lbctl,配置和切换远程 API context;无需安装 LangBot Core 或 Docker,不改变任何本地部署。
  • 能使用 Workspace API Key 连接真实实例,完成身份查询和常用资源的读取、配置与回读验证;越权及跨 Workspace 操作被拒绝。
  • Agent 能仅通过非交互命令与 JSON 输出,完成真实远程 Workspace 中实体的查询、创建、更新、删除与结果验证,凭据不泄漏。
  • 发布物、安装器、配套 Skills 和文档可用,Core 与 CLI 的兼容性测试通过。

第二期计划:本地自托管实例管理

在第一期远程 Workspace 实体管理之外,增加运行 lbctl 的本机上自托管 LangBot 的生命周期管理。在服务器上执行时,“本地”就是该服务器;不通过 API、SSH 或远程 Docker 管理其他主机,也不管理 Cloud 实例生命周期。

先支持本机 Docker Compose 部署,采用顶层命令,不增加 instance 层级:

lbctl install                 # 安装本地 LangBot
lbctl start                   # 启动
lbctl stop                    # 停止
lbctl restart                 # 重启
lbctl status                  # 查看本地运行状态
lbctl logs                    # 查看本地实例日志
lbctl doctor                  # 检查部署与依赖
lbctl upgrade                 # 升级本地 LangBot,而非 lbctl 自身
lbctl uninstall               # 卸载本地部署
  • 默认操作本地默认部署,必要时用 --dir <部署目录> 指定;切换 API context 不改变生命周期命令的本地目标。
  • 安装前检查 Docker / Compose 依赖;停止、升级和卸载默认保留持久化数据,删除数据必须单独明确确认。
  • 优先验证 Linux amd64/arm64 + Docker Compose,其他平台生命周期支持以实际验证为准;同步补充本地部署管理 Skills 和文档。
  • 第二期验收:真实本地部署完成安装、启停、状态查询、日志、诊断、升级和卸载;验证数据保留、升级后的健康状态,以及远程 context 不影响本地操作目标。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions