Skip to content

Cell - Ta Protocol ​

ta serve 与客户端之间的协议:只有类型和常量,不加载 pi 和 Node.js 模块,浏览器可用。

  • 传输:一条 WebSocket(TA_WEBSOCKET_PATH)上的 JSON-RPC 2.0,方法名是 <服务>/<方法>,服务端推送 TaClient/onEvents 等。不提供 HTTP 形式的调用;只有工作区文件的字节走 HTTP(TA_FILES_PATH,供页面里的图片、iframe 用相对地址加载)。
  • 服务:TaServer(会话,即 pi 的 RPC 命令)、TaWorkspaceServer(目录里的文件与命令)、TaTerminalServer(终端)、TaSettingsServer(pi 的 settings.json)、TaPackageServer(包、Web 扩展与包的数据)、TaAuthServer(登录模型服务,同 pi 的 /login /logout)、TaRelayServer(经 Relay 配对设备,同 ta pair)、TaRemoteServer(ssh:// 目录的主机、ssh 的提问、端口转发)。会话之外的能力按职责各成一个服务,不往 TaServer 里加。
  • TaServer 的方法除了 openSession closeSession listSessions attach detach respondUi respondClientTool,其余都是 pi RPC 模式的同名命令(snake_case 改 camelCase,见 PiCommandMethod),第一个参数是 sessionId,返回值与 pi 相同;pi 新增 RPC 命令而 TaServer 没有对应方法时,本包的测试编译不过。setWorkingDirectory 设置 ta serve 的工作目录(TaServerInfo.cwd,客户端没指定目录时在这里开对话,跨重启保留)。pi RPC 没有的会话操作:forkToFile(把 fork 出的对话另存成会话文件,当前会话不动,再用 openSession 打开),navigateTree(同 pi 的 /tree,返回 editorText),fork 多一个可选的 position(at 保留所选条目,同 pi 的 /clone 但可选任意条目)。
  • 事件:TaEventEnvelope { sessionId, seq, event },event 是 pi JSON/RPC 模式的事件或 extension_ui_request;Ta 只多了 ui_request_resolved、extension_error、session_replaced、session_closed、client_tool_request(预留)。
  • prompt / steer / followUp 带客户端生成的 clientMessageId:重发同一个 id 返回 duplicate,不会再执行;回执只表示已受理,回合结束以 agent_settled 事件为准。
  • 目录(cwd)是位置:本机路径,或另一台机器的 ssh://<host>/<绝对路径>(TaLocation 解析、上下级、名字)。
  • 失败时 JSON-RPC 错误码为 TA_RPC_ERROR_CODE,data 里有稳定的 code(TaErrorCode,如 CELL_TA_SESSION_LOCKED)和一句处理建议 hint。没有可用的模型或模型服务没登录时是 CELL_TA_NOT_SIGNED_IN,客户端据此打开登录页。CELL_TA_CONNECTION_LOST 由客户端产生:调用没能送到 ta serve,或连接断开时还没收到结果。