e2m2e.api.sidecar#
GUI sidecar stdio 协议(ADR 0035;#607 增补任务取消与真实进度)。
tod 的 Tauri 壳以常驻子进程驱动 e2m2e:请求/响应/进度是 JSON 文本行,
复用 MCP 方向的统一信封({status, data, error, meta},单一来源在
e2m2e/api/mcp/envelope.py);响应含大数组且请求声明 binary_dtype
时,JSON 行带 "binary_frames": N,换行符后紧跟 N 个二进制帧,帧后恢复
JSON 行流(帧格式见 frames.py)。工具面 = Facade 上 mcp_exposed
的方法(纯派生,ADR 0014),不新增业务逻辑。
并发模型(#607):短任务进程内同步执行;长任务(执行核心
LONG_RUNNING_TOOLS)在 worker 子进程 + 后台线程执行,读环持续消费
stdin——取消消息({"cancel": "<job_id>"} 行)中途可达,kill 子进程
即取消,回 status="cancelled" 行;被取消的原请求不回结果行(对齐
MCP 语义)。单 job 的输出字节(响应行 + 帧)在锁内原子写出。
本模块是薄适配器(#601):工具面、校验规则、画布帧抽取的单一来源在执行
核心 e2m2e/api/execution.py,这里只做协议形状转换——JSON 行切分、
job_id 进度行、binary_frames 计数与帧字节排序、取消与生命周期。
Functions#
|
处理一个已解析的请求(内联执行),返回待写出的字节块。 |
|
stdio 主循环:逐行读请求 JSON,写出进度/响应行与二进制帧。 |
Package Contents#
- e2m2e.api.sidecar.handle_request(facade: e2m2e.api.facade.Facade, request: Any) list[bytes]#
处理一个已解析的请求(内联执行),返回待写出的字节块。
字节块是零个或多个 JSON 行(含换行符)加原始帧字节;调用方顺序写出 即得到协议流。校验与执行委托执行核心。注意:长任务的内联执行不可 取消——并发读环(
run_loop())会把长任务路由到 worker 子进程, 本函数是单请求缝(测试与无取消消费方用)。
- e2m2e.api.sidecar.run_loop(facade: e2m2e.api.facade.Facade, stdin: BinaryIO, stdout: BinaryIO) None#
stdio 主循环:逐行读请求 JSON,写出进度/响应行与二进制帧。
坏 JSON 行返回错误信封并继续,不中断循环。请求处理的任何未预期 异常(含响应信封化失败)同样兑成 INTERNAL_ERROR 信封。长任务在 worker 子进程 + 后台线程执行(读环持续可读取消行);单 job 的输出 字节在锁内原子写出,帧永不交叉。