Skip to content
FunCoding

Search

Search docs, Skills and MCP

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。

需要限流、业务授权、排队或副作用保护的应用必须自行实现,不能把注册成功视为自带这些保护。底层记录、消息帧和回执状态详见跨会话协议。