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的方法除了openSessioncloseSessionlistSessionsattachdetachrespondUirespondClientTool,其余都是 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,或连接断开时还没收到结果。