Interface Protocol

August 3, 2026 · View on GitHub

更新日期:2026-08-03

Interface Protocol — NDJSON over stdio

概述

xlings interface 子命令提供面向程序的 NDJSON(换行分隔 JSON)协议,通过 stdin/stdout 与外部工具通信。适用于 AI Agent、CI 流水线、IDE 插件等需要结构化交互的场景。

协议版本: 1.0(由 kProtocolVersion 常量定义)。

协议基础

  • 每行一个完整 JSON 对象,以 \n 结尾。
  • stdout 方向:xlings -> 客户端(事件流)。
  • stdin 方向:客户端 -> xlings(控制请求)。
  • 所有输出在写入后立即 flush,保证实时性。
  • 空闲超过 5 秒时自动发送 heartbeat 事件。

版本握手

客户端可通过 --version 标志查询协议版本:

xlings interface --version

返回:

{"protocol_version":"1.0"}

能力发现

xlings interface --list

返回所有已注册 capability 的名称、描述及 JSON Schema。

事件类型

xlings 通过 stdout 输出以下事件:

kind字段说明
progressphase, percent, message任务进度通知
loglevel(debug/info/warn/error), message日志消息
datadataKind, payload结构化数据(payload 为解析后的 JSON 或原始字符串)
promptid, question, options, defaultValue需要用户/客户端应答的交互提示
errorcode, message, recoverable, hint?错误事件
heartbeatts空闲心跳(ISO 8601 时间戳)
resultexitCode, data?终结事件,标志调用结束

事件示例

{"kind":"progress","phase":"download","percent":42,"message":"fetching gcc@16.1.0"}
{"kind":"log","level":"info","message":"resolving dependencies..."}
{"kind":"data","dataKind":"pkg-meta","payload":{"name":"gcc","version":"16.1.0"}}
{"kind":"prompt","id":"confirm-1","question":"overwrite existing?","options":["yes","no"],"defaultValue":"no"}
{"kind":"error","code":"NotFound","message":"unknown capability: foo","recoverable":false,"hint":"run `xlings interface --list`"}
{"kind":"heartbeat","ts":"2026-05-17T08:30:00Z"}
{"kind":"result","exitCode":0,"data":{"installed":true}}

请求格式(stdin)

客户端通过 stdin 发送 JSON 行来控制执行流程:

action附加字段说明
cancel取消当前执行
pause暂停执行
resume恢复执行
prompt-replyid, value回复 prompt 事件

示例:

{"action":"cancel"}
{"action":"prompt-reply","id":"confirm-1","value":"yes"}

无法识别的 action 会产生一条 warn 级别的 log 事件。

会话生命周期

sequenceDiagram
    participant C as Client
    participant X as xlings interface

    C->>X: 启动进程: xlings interface install_packages --args '{"targets":["gcc"]}'
    X->>C: {"kind":"progress","phase":"resolve",...}
    X->>C: {"kind":"log","level":"info",...}
    X->>C: {"kind":"prompt","id":"confirm-1",...}
    C->>X: {"action":"prompt-reply","id":"confirm-1","value":"yes"}
    X->>C: {"kind":"progress","phase":"download",...}
    Note over X,C: 空闲 >5s 时发送 heartbeat
    X->>C: {"kind":"heartbeat","ts":"..."}
    X->>C: {"kind":"result","exitCode":0,"data":{...}}
    Note over X: 进程退出

调用方式

# 执行某个 capability,传递 JSON 参数
xlings interface install_packages --args '{"targets":["gcc@16.1.0"],"yes":true}'

# 从文件读取参数(适用于 Windows 命令行引号问题)
xlings interface install_packages --args-file /tmp/args.json

使用场景

  • AI Agent 集成:Agent 解析 NDJSON 事件流实时获取安装/构建状态,通过 stdin 自动应答 prompt。
  • CI 自动化:在无 TTY 环境中以结构化方式获取执行结果和错误码。
  • IDE 插件:编辑器后台调用 xlings interface,将 progress 事件映射为进度条 UI。

设计决策:为何选择 NDJSON over stdio

对比维度NDJSON/stdioHTTP/WebSocket
启动开销零(直接管道)需要监听端口、握手
跨平台stdin/stdout 各平台一致端口分配、防火墙差异
安全性继承父进程权限,无网络暴露需认证机制
调试体验`jq` 直接可读
并发模型单进程单会话,简洁可靠需连接管理

stdio 管道是 CLI 工具与外部程序交互的最自然边界——无需额外依赖,天然支持流式输出,且与 Unix 哲学一致。