description: "Node host 与 CPython 子进程之间的 fd-3 协议格式(wire protocol),供用户与维护者构建或排查 Python 代码执行后端。"
English | 中文
dsh-code-runtime-python 持有 dsh-code-runtime seam 的 Node host 与 CPython 子进程之间的无版本协议格式(wire protocol):子进程 fd 3 上每行一个 JSON 对象,让 stdout/stderr 空出给程序自己的输出。本包提供 host 侧的帧编解码与敌意帧校验器(src/protocol.ts),以及同一套消息词汇的 Python 侧镜像(py/protocol.py),因此每个 wire 消费方都共享同一套词汇。它是 Python 后端的协议层——本包不含子进程执行路径,因此除跨语言镜像测试之外,没有任何地方会启动 python3。host 把每个入站帧都当作敌意输入,因为模型代码对 fd 3 有完全访问权、可通过它发送任意内容。
当你要构建或消费 CPython 代码运行时 wire 时选择本包:实现 Python 后端或驱动它的 host,或排查 Python 代码运行的帧。本包是为 CPython code-runtime 提供方准备的 wire 协议——这样的提供方会在全新的 python3 -I 子进程中运行每个模型程序——本包提供两侧共同使用的协议,因此其导出是 wire 的 TS 侧唯一真源。
本包从 src/index.ts 重新导出 host 侧的协议词汇:validateChildFrame(在 host 读取前重建每个入站帧)、无损 JSON 编解码与计量器(encodeJsonPlain、checkDoneValue、hasUnsafeIntegerToken、hasNonLosslessNumber),以及 logTruncationMarker(共享的截断标记文本)。Python 侧在 py/protocol.py 中把消息形状镜像为 TypedDict,并重新声明两侧都执行的两个表面——PROTOCOL_FD = 3 与标记文本。
帧在子进程 fd 3 上以 JSON-lines 传输——每行一个对象——因此 stdout/stderr 保持空闲,供程序自己的输出使用。子进程 → host:boot-ack、call、log、done。host → 子进程:boot(首帧,携带所有上限与命名空间声明)、run(在 boot-ack 之后,只携带程序主体),以及每个 call 一个 reply。伪造帧可以在 done 上同时携带 value 与 error,因此消费方必须先检查 error,在它存在时忽略 value。
host 侧校验会静默丢弃垃圾,因此格式错误或伪造的帧绝不会让宿主进程崩溃:validateChildFrame 对任何无法干净重建的内容返回 undefined,非数字的 call id 绝不会被回显进 reply,伪造的额外字段绝不随行。不是无损 JSON、或超出配置字节预算的完成值会被明确拒绝(non-lossless/over-budget),而不会被静默舍入或截断。
当协议约定不够用时阅读以下内容。它们从 seam 定义进入协议的设计记录与配套后端。
通过 dsh-tools 中的 PTC mode 间接提供;后者把程序的完成值或失败渲染进一个保留的 run_code 结果。
不会直接失效;由上述消费方负责请求前缀变更。
这些限制说明本包覆盖什么、不覆盖什么;它们是当前包约束,不是任务积压。
cpuSeconds 两侧是否都是 int;跨 TypeScript 与 Python 比较类型声明在此无机械等价物,因此类型级漂移由 review 加后端的真子进程套件捕获。src/index.ts 只导出协议词汇——本包不含子进程执行路径,也不含 Python 侧的 JSON codec,因此除镜像测试之外没有任何地方会启动 python3。