The linear replay resurrected the July spawn path: mode folded inline
and both confinement and the default cwd fenced to the deployment
workspaceRoot. Master (and the pre-rebase merge result) resolve the
policy once per spawn — resolve({ session }) — so session.header.cwd
is both the workspace-write boundary and the default shell cwd, as the
README already states. Restores the single resolve, threads the policy
through spawnArgv and the cwd fallback, re-expresses master's
session-root test on the terminal spec, and pins the recorded confine
policy in the explicit-cwd test.
Also from the same review round: the Python SDK exe build stages
pty.node from subprocess-local (node-pty's home since the relocation),
and fs-local's README counts the seam's eleven primitives.
pty/ — persistent PTY capability family
English | 中文
PTY stands for Pseudo-Terminal(伪终端). This capability provides persistent, owner-scoped terminal sessions for workflows that require state across tool calls or interactive stdin. PTY complements the one-shot bash and filesystem tools; it does not replace their stronger per-operation contracts.
| Package | Role | ctx key |
|---|---|---|
pty (@deepseek-ai/dsh-pty) |
Backend registry, branded ids, exact-Agent ownership, session operations, and awaited cleanup | ctx.pty |
pty-local (@deepseek-ai/dsh-pty-local) |
Shell backend over ctx.subprocess.spawnTerminal: readiness detection, bounded terminal state, sandbox policy, and session operations |
registers on ctx.pty |
tool-pty (@deepseek-ai/dsh-tool-pty) |
Six model-facing tools and generic task integration for background sends | registers on ctx.tools |
The design and deferred boundaries live in the persistent PTY Agent Note.