Skip to content

Latest commit

 

History

History
47 lines (29 loc) · 2.4 KB

File metadata and controls

47 lines (29 loc) · 2.4 KB

Succinix 传输协议说明

English

这是什么

这是浏览器控制层和 WebContainer 执行层之间的协议。正常接入请使用 @succinix/engine 的执行器和终端服务,不要手写这些文件;只有替换宿主或传输层时才需要本文。

有什么用

协议保证请求不会互相覆盖,并让命令、终端输入、输出和实例身份都落在同一个 WebContainer 执行世界中。浏览器不保存第二份 Shell、文件或编辑器状态。

怎么工作

批处理命令

浏览器写 /cmd.json
host 接收后写 /ack-<id>.json
host 执行后写 /result-<id>.json
浏览器读取并删除 ack 与 result

/cmd.json 是单槽投递口,一次只接收一条尚未确认的请求。结果文件按请求 id 独立命名,不能改回共享结果文件。

每个请求必须带 RPC 版本、请求 id、boot nonce、命令名和实例 id;客户端只接受这些身份字段全部匹配的确认与结果。公开命令包括执行、后台启动、进程列表、终止、前台中断、读取或设置工作目录、存活检查和退出握手。具体字段和类型以 src/engine/client.ts 与包导出类型为准。

命令路由

  • nodenpmnpx 使用真实 WebContainer Node 子进程。
  • pythonpython3pippip3 使用内置 Pyodide 运行时。
  • 其余命令交给同一实例的 Lifo 用户态。

它们共享文件和会话工作目录。通用 Node/Python 子进程交互 stdin 仍不支持,不要把 Lifo 交互终端宣传为通用 PTY。

交互终端

交互终端有独立的实例/会话邮箱,用来传递输入、输出、尺寸和生命周期帧。它连接 Lifo 的公开终端接口;浏览器只转发设备事件。第三方应通过 ctx.terminals 或宿主的终端服务创建会话,不应直接读写邮箱文件。

约束和边界

  • 结果、确认和终端帧都必须校验实例和 boot nonce,旧页面或旧 host 的消息不能结算新请求。
  • 进程和端口视图按实例组织,但不是权限系统。
  • 端口仅供浏览器预览;没有真实入站网络。
  • host 会清理超时未领取的结果文件;调用方仍必须设置自己的超时和重试策略。

协议或公开行为变更时,先更新 Cordis 契约 的外部示例,再运行 node scripts/cordis-app-e2e.mjs。日常接入看接入说明