@ai-matrx/desktop-protocol
Matrx 2(桌面应用)和一切驱动器之间的一份电线合同 - 那个 电话控制台、网络应用程序、扩展和服务器。 一个 Zod 源; 一个生成的 JSON Schema 和CI保持字节相同的平面双胞胎(SPEC P11:合同生成,从未写入) (两次).
pnpm add @ai-matrx/desktop-protocol
| 条目 | 这是什么 |
|---|---|
@ai-matrx/desktop-protocol | 信封和每个 cap.op, (中文(简体) ), OPS 编号 : EVENTS 登记册, ErrorCode关闭密码, DesktopProtocolError。每个计划名称也是其推断类型. |
@ai-matrx/desktop-protocol/frame | 16字节二进制框架编码器. Zod-free(接力工人的热路). |
@ai-matrx/desktop-protocol/client | createDesktopClient ——重新连接客户端与打字请求,信用加码流,透明终端重接,心跳和中继重接. |
@ai-matrx/desktop-protocol/react | DesktopClientProvider, (中文(简体) ), useDesktopConnection, (中文(简体) ), useDesktopRequest, (中文(简体) ), useDesktopEvent, (中文(简体) ), useDesktopWake。 。 。 . |
客户端
import { createDesktopClient } from "@ai-matrx/desktop-protocol/client";
const client = createDesktopClient({
url: `wss://relay.matrxserver.com/v1/devices/${deviceId}/connect`,
// Re-read on every reconnect; tokens ride the subprotocol, never the URL.
protocols: async () => ["matrx.v1", `bearer.${await getAccessToken()}`],
getToken: getAccessToken, // answers relay.auth_expiring without dropping the socket
clientType: "web",
clientVersion: "1.0.0",
});
const listing = await client.request("fs.list", { path: "/Users/me" }); // typed by op name
const term = client.stream("exec.pty.start", { cols: 80, rows: 24 }, {
onData: (bytes) => new Promise((done) => xterm.write(bytes, done)), // credit follows consumption
onSnapshot: (bytes) => {
xterm.reset();
xterm.write(bytes);
},
});
term.write("ls\n");
- 后压 : 流的入计量只有在
onData返回(或承诺) ),所以慢接手机从不会使中继器或Mac缓冲器不受约束. - 重排 : 资源流(地表和表)在空出套接字后存活。 在重新连接时
客户端发送
session.attach与since_seq=最后一帧您onData消耗; 核心 重放空白或发送gap+ 屏幕快照。 一样DesktopStream继续工作. - 错误 为:
DesktopProtocolError与code, (中文(简体) ),retryable财务报告和审定财务报表data.reason- 分支在 那些,从来没有在消息。 丢弃的套接字拒绝无用的工作DEVICE_OFFLINE(可重审). - 终端关闭 (单位:千美元)
4010已撤销,4003禁止进入,4004没有找到,4009替换,4426升级)永远结束客户端;其他一切与共享重新连接@ai-matrx/data/realtime后置(稳定重置 + 抖动)——包括1006(中继部署投放) 每个套接字没有近相框)和1012(接力"设备重接":你好和 与新的核心会议相对应. - 回来:
client.wake()(或bindDesktopWake(client)编号 :useDesktopWake(),这叫它 打开visibilitychange, (中文(简体) ),pageshow, (中文(简体) ),online财务报告和审定财务报表focus在重新连接时立即拨号 探测一个开口的套接字,如果4 s 以内无任何答案,则用接线重排. - 重新装入重排 : 保留
stream.resourceId财务报告和审定财务报表stream.lastSeq(例如在 URL 中); 重新装入后client.stream("session.attach", { resource_id, since_seq })重放空隙, 然后表现 和原始的溪流完全一样, 包括幸存下来的后遗症. - 背景问题( 变形消息、 序列间隙、 心跳死亡、 重接提醒) 前往
onDiagnostic——默认高声(console.warn) (中文(简体) ).
当地记录
import { createDesktopTranscriber } from "@ai-matrx/desktop-protocol/client";
const transcriber = createDesktopTranscriber(client, { model: "base", onProgress: (p) => show(p) });
const { text, segments } = await transcriber.transcribe(recordingBlob); // on the person's computer
// Or as a voice input's transport: new BrowserAudioKernel({ transport: transcriber })
反应
<DesktopClientProvider client={client}>
<Files />
</DesktopClientProvider>
function Files() {
const { status } = useDesktopConnection();
const { data, error, loading, refetch } = useDesktopRequest("fs.list", { path: "/Users/me" });
useDesktopEvent("fs.changed", () => void refetch());
}
Python (英语)
from aidream._generated.desktop_protocol import OPS, FsListParams, validate_wire
params = validate_wire(FsListParams, raw_json) # same verdict as zod, always
validate_wire 是一个 Python 切入点: 严格( 否) "2" —— 2) 和 JavaScript- 忠实
(单位:千美元)2.0 是整数 2. OPS 将每个操作都映射到它的参数/结果模型、种类和错误.
Python 服务( 磁盘- 桌面)
桌面监督的 Python 服务从安装的软件包中生成他们的模型 同一发电机,所以核心和服务 永远不会漂移:
python3 node_modules/@ai-matrx/desktop-protocol/scripts/gen_pydantic.py \
--schema node_modules/@ai-matrx/desktop-protocol/generated/desktop-protocol.schema.json --out <module>.py
模块携带 SERVICES,输入处理器 Protocol 每项服务MlServiceHandlers和
CONTRACT_SHA256,它必须等于核心的import { CONTRACT_SHA256 }在服务你好.
修改协议
编辑 src/schema/*.ts,则 pnpm generate 并输入所有三个文件。 规则
pnpm lint 由 generate: z.strictObject 仅;无 .refine编号 :.transform编号 :z.coerce编号 :
.meta; 永远不能同时可选和无效; 一个新的命名计划进入 NAMED_SCHEMAS; 添加一个
对等大小写为 corpus/parity-corpus.json 对于任何新的电线形状.
MIT AI 矩阵引擎