PeerEndpoint 本机会话通信
让 Node 程序参与跨会话发现、回执和 controller 授权。
This page has not been translated into English yet. The original Chinese version is shown below.
@qwen-code/sdk/peer 让普通 Node 程序作为 external peer 加入同用户、同机器的 Qwen Code 会话。它不需要先启动 daemon,也不代替 daemon 的 REST 会话客户端。
注册和发送
import { PeerEndpoint } from '@qwen-code/sdk/peer';
const endpoint = await PeerEndpoint.start({
name: 'build-watcher',
onMessage: (message) => console.log(message.content),
});
try {
const [session] = await endpoint.list();
if (session) {
const sent = await endpoint.send({
to: session.address,
content: 'The build has finished.',
});
if (sent.kind === 'sent') {
const receipt = await endpoint.awaitReceipt(sent.msgId, { final: true });
console.log(receipt?.status);
}
}
} finally {
await endpoint.close();
}示例挑选列表首项只为展示 API;实际应用应由用户或明确配置选择目标,避免把消息发给不相关会话。sent 不等于执行完成,delivered 回执也只表示入队。
可发现范围
对方需开启 agents.crossSessionMessaging,且不在 bare/safe mode。关闭消息的会话不出现在 endpoint.list(),也不能通过它自己的 list_agents/send_message 发现 peer;qwen sessions ps 仍可列出外部程序记录。
当前仅支持 UNIX domain socket,不支持 Windows。进程退出前,包括应用自己的 signal handler,应调用 close()。直接终止未清理的记录会等待后续 Qwen 会话检查失效后清扫。
controller 令牌
普通外部程序应省略 fromMode,让接收用户审核;fromMode 自报值没有身份认证保证。若用户明确授予持续控制权,可由用户创建令牌:
qwen sessions controllers add --label build-watcher将令牌交给 PeerEndpoint.start 的 controllerToken,并且仅在需要表达该授权的 send 中指定 controller: true。接收方显式 crossSessionInbound 的 hold/refuse 仍优先,不会因 controller 强制放行。
同一用户程序可写注册记录,因此 controller 发送会向名称实际解析到的进程提交 token;应谨慎选择目标,不把熟悉的 name/kind 当认证证明。另一个 peer endpoint 只接纳自己的 inbox token,收到 controller-token 连接会丢弃。
自己的 inbox 没有 Qwen 审核层
提供 onMessage 时,endpoint 接收后直接回答 delivered 并调用 handler,没有 Qwen 会话的速率限制、hold 或相同正文窗口;仅记住最近 200 条已答复消息。没有 onMessage 则回答 refused。
需要限流、业务授权、排队或副作用保护的应用必须自行实现,不能把注册成功视为自带这些保护。底层记录、消息帧和回执状态详见跨会话协议。