The darwin-parity job failed intermittently on the SIGINT test with the operation buffer holding only the echoed command line, never RAW_READY. The harness sets idleSilenceMs to 250, so when a cold python3 start stays silent past that bound the send settles as inferred_idle; PtySendOperation.append then drops all later output, and the marker reaches only the scrollback. Give the harness per-test idleSilenceMs/timeoutMs overrides and let this scenario raise both above interpreter startup latency, so the readiness marker lands inside the send it belongs to. waitForOutput's own deadline and the test timeout grow to match the new bounds. The product timings are unchanged; the pty Agent Note records why a test that waits on an operation must outlast the child's startup.
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) |
Local node-pty backend, readiness detection, bounded terminal state, sandboxing, and process-session supervision |
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.