@av-pi-studio/protocol
共享有线计,二进制帧编解码器,以及皮-斯图迪奥的能力旗. 这个包是 所有穿越 WebSocket 的真相单一来源 在守护进程和任意之间 客户端(CLI,网络,移动,桌面).
这是一个 零运行时间工作空间依赖性 库——唯一的外部依赖是 zod —— 说
因此它可以被浏览器和React Industrial客户端像Node.js守护进程一样自由导入.
安装
npm install @av-pi-studio/protocol
这里面是什么
- JSON 电线计划 (单位:千美元)
messages.ts)——可以出现在WebSocket上的每一个消息类型, 作为 佐德语Name 方案及其推断类型:hello编号 :status握手、RPC请求/答复、广播agent_update, (中文(简体) ),agent_stream页:1 顶级信封联盟,可以包到底. - 二进制框架编码器 (单位:千美元)
binary-frames/) ——两条二元线的编码/解码功能 格式:终端 I/O([opcode][slot][payload])和块文件传输。 双用Uint8Array永远Buffer在浏览器中运行. - 客户能力标记 (单位:千美元)
client-capabilities.ts(b) ——CLIENT_CAPS(一个客户可以 在广告中hello.capabilities和SERVER_FEATURES(守护进程广告内容)server_info.features页:1supports()帮手. - 端点解析 (单位:千美元)
endpoint.ts)——转动守护进程目标字符串(host:port, (中文(简体) ),ws://…, (中文(简体) ),relay://…)成为结构化的EndpointDescriptor。 。 。 . - 提供者清单类型 (单位:千美元)
provider-manifest.ts)——UI-faceing脚手架来描述 提供者/模型(标签、颜色等级、能力旗帜).
使用量
import {
helloSchema,
agentStreamEventSchema,
encodeTerminalFrame,
decodeTerminalFrame,
parseEndpoint,
rpcName,
} from "@av-pi-studio/protocol";
// Validate + parse an inbound message
const hello = helloSchema.parse(rawJson);
// Build a canonical dotted RPC name
const name = rpcName("agent", "permission", "respond", "request");
// → "agent.permission.respond.request"
// Parse a daemon connection target
const endpoint = parseEndpoint("workstation.local:6767");
// → { kind: "direct", host: "workstation.local", port: 6767, ssl: false, raw: "…" }
每个导出的计划都有一对类型Script(XSchema 编号 : X),用 z.infer<> —— 说
导入任意一个选项.
设计规则
这些是通过公约和包件本身的测试,而不是通过工具执行的:
- 仅附录. 球场只被添加过,并且只是作为可选的. 没有任何东西被移除, 缩小或赋予新的歧视性价值。 这就是让一个更老的守护进程加载数据的原因 由较新者(反之亦然)所写,没有迁移步骤.
- 司马传通. 大多数计划都使用Zod的
.passthrough(),所以未知的字段从更新 协议版本通过更古老的解码器在往返中存活下来,而不是被剥去或 拒绝. - 零工作空间进口. 此软件包从不从另一软件包导入
@av-pi-studio/*软件包 - 未来任何客户都要保持独立 包括其他客户 取决于其余的单体. - 跨平台二进制解码器. 二进制框架编码/解码函数只使用
Uint8Array——不只节点 API ——所以它们在节点,浏览器,和React中工作相同 原产地. - 点出RPC名字. 新的RPC通过
rpcName(domain, sub, op, dir)→"domain.provider.operation.direction"(例如:.agent.permission.respond.request) (中文(简体) ). 遗产平地 名称仍然通过别名在线上被接受,但从未由新代码生成.
添加新电线消息类型
- 定义 Zod 计划(及其推断类型)
messages.ts或一个新的兄弟文件. - 把它加进
sessionMessageSchema歧视工会. - 导出它从
index.ts。 。 。 . - 添加回程测试( E)
messages.envelopes.test.ts或一个新的*.test.ts) (中文(简体) ). - 在守护进程中注册相应的处理器
HandlerRegistry(单位:千美元)@av-pi-studio/server) (中文(简体) ).
发展
npm run build # tsc -b
npx vitest run packages/protocol
测试为 Vitest , 并与其源文件共存 *.test.ts。 。 。 .