Files
deepseek-harness/packages/e2b/pty-e2b/README.zh.md
T

3.5 KiB

@deepseek-ai/dsh-pty-e2b

English | 中文

用于 ctx.pty 的 E2B 字节 PTY 后端。它在共享的 ctx.e2b 沙箱内创建持久交互式 shell;PTY 注册表则在宿主侧维护会话身份、精确的 Agent 所有权和清理策略。

插件与配置

pty-e2b 插件注入 e2bpty,然后以 backendType 注册一个后端。

配置键 默认值 含义
backendType shell terminal_open 选择的注册表类型。
rows / cols 40 / 160 远程 PTY 的初始尺寸。
scrollbackLines 10000 保留的逻辑行数上限。
scrollbackMaxBytes 4194304 保留的 UTF-8 scrollback 字节数上限。
maxReadBytes 262144 单次读取或发送结算时返回的字节数上限。
pollIntervalMs 50 宿主就绪轮询间隔。
idleSilenceMs 3000 触发 inferred_idle 的输出静默时长。
timeoutMs 30000 启动与发送等待的绝对上限。
disposeGraceMs 3000 TERM 到 KILL 的清理宽限期。

数值必须是正的安全整数,backendType 必须非空,且 maxReadBytes 不得超过 scrollbackMaxBytes。相对的 spawn cwd 以 ctx.e2b.cwd 为基准解析;绝对远程路径保持不变。

运行时契约

该后端为 E2B 面向字节的 PTY 回调配备流式、遇到无效序列即失败的 UTF-8 解码器,随后使用 dsh-pty 提供的后端无关行清理器与有界缓冲区。它会安装受控的 Bash 提示符标记,并等待可打印的提示符文本;若该标记不可用,系统会在已经观察到输出且达到已配置的静默上限时得出 inferred_idle。零输出的启动过程会达到绝对超时并失败,不会发布空会话。

每次发送都会写入 UTF-8 字节,并可选写入回车提交序列。取消与显式信号会通过 ps 确定远程终端的前台进程组,再向该组发送信号;发送 SIGKILL 时拒绝以 shell 本身为目标。关闭操作向 PTY 进程组发送 SIGTERM,等待后通过 E2B 的 PTY kill 操作升级,并且直到 SDK 句柄报告退出才结算。如果启动失败,系统会关闭尚未发布的 PTY;若清理同时失败,PtyBackendCleanupError 会保留这项失败。

远程 PTY 进程及其子进程位于 E2B。提示符/就绪状态、scrollback、操作句柄、所有者权限和 SDK 事件交付仍保留在宿主内存中。

模型体验

间接消费方

模型看到的内容

没有直接可见内容。模型通过 @deepseek-ai/dsh-tool-pty 可能收到有界的 MOTD、发送增量、scrollback 页、就绪原因、信号结果和清理失败。

Token 影响

消费方返回有界的后端输出前没有影响。本包不会把宿主保留的 PTY scrollback 放入模型历史。

KV Cache 影响

不会直接失效;提示词、schema 和追加结果由消费方负责。

已知限制与暂缓工作

  • 面向行的终端模型:CSI/OSC 控制序列会被移除;备用屏幕与完整终端仿真仍不受支持。
  • 就绪判断基于标记或静默:E2B 会公开前台进程组,但不提供本地后端使用的 Linux syscall 检查,因此系统有意保留返回 inferred_idle 的可能性。
  • 仅支持 UTF-8:无效字节序列会使会话失败,而不是返回有损文本。
  • 没有可重连的终端句柄:保留 E2B 沙箱会保留远程文件,但不会保留宿主所有权、缓冲区、回调或实时 PTY 会话。