mirror of
https://github.com/anomalyco/opencode.git
synced 2026-11-09 22:25:02 +03:00
40 lines
1.3 KiB
Markdown
40 lines
1.3 KiB
Markdown
# opencode-pty
|
|
|
|
## Objective
|
|
|
|
Build a persistent Rust PTY service. The service owns multiple terminal child
|
|
processes, continuously drains output, parses it with libghostty-vt, retains a
|
|
bounded raw replay tail, and exposes thread-safe terminal operations.
|
|
|
|
## Current Scope
|
|
|
|
- Use portable-pty directly.
|
|
- Give each terminal blocking reader, actor/parser, writer, and child-wait
|
|
threads.
|
|
- Keep libghostty-vt on the actor thread that creates it.
|
|
- Bound raw output, input, and actor queues.
|
|
- Make libghostty authoritative for terminal-generated PTY responses.
|
|
- Provide an interactive local CLI for exercising multiple terminals.
|
|
- Do not add OpenCode IPC integration yet.
|
|
- Do not implement descriptor passing or live service replacement.
|
|
|
|
## Engineering Rules
|
|
|
|
- Never block the service control path on PTY I/O.
|
|
- Never perform a blocking write from a libghostty callback.
|
|
- Keep exactly one PTY reader and one PTY writer per terminal.
|
|
- Preserve child-exit and PTY-EOF as distinct lifecycle signals.
|
|
- Treat PID as metadata, never terminal identity.
|
|
- Bound by bytes, not only message count.
|
|
- Do not expose borrowed libghostty values outside the actor thread.
|
|
- Keep terminal shutdown idempotent and join all worker threads.
|
|
|
|
## Verification
|
|
|
|
```sh
|
|
cargo fmt --check
|
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
cargo test
|
|
cargo run -- play
|
|
```
|