$ show shekohex/opencode-pty
This repository is an OpenCode plugin that provides interactive pseudo-terminal (PTY) management for AI coding agents. It allows agents to spawn, write to, read from, and kill multiple background terminal sessions, enabling long-running processes like dev servers, watch modes, and interactive programs. The plugin exposes five tools (pty_spawn, pty_write, pty_read, pty_list, pty_kill) and two slash commands for opening a web UI. The architecture is modular: a core PTYManager orchestrates session lifecycle, output buffering (via a RingBuffer), and exit notifications, while adapters decouple the plugin from OpenCode V1 and V2 APIs. A Bun-based web server serves a React frontend with real-time WebSocket streaming and a REST API for session management. The codebase demonstrates strong TypeScript patterns, clean abstractions, and comprehensive testing (unit, integration, and Playwright E2E).
The LLM identified 5 files worth highlighting for reuse:
A self-contained RingBuffer implementation that stores output as a single string with configurable max size. Provides append, read (with offset/limit), search (regex), clear, and length/byteLength properties. Efficiently truncates from the front when exceeding max size. Could be extracted and reused in any project needing a line-based rolling buffer with regex search capabilities.
Implements glob-like pattern matching with '*' and '?' wildcards, plus structured matching for command+args sequences. The `allStructured` function matches a command head and its argument tail against a set of patterns, returning the last matching value. Self-contained and could be reused for any permission system, routing, or configuration matching.
A type-safe HTTP client built on top of structured route definitions. Uses TypeScript conditional types and template literal types to infer path parameters and allowed methods from route objects. Provides `apiFetch` and `apiFetchJson` functions, plus a factory `createApiClient` that returns a fully typed client with methods for sessions, health, etc. Demonstrates advanced TypeScript patterns and could be extracted as a reusable pattern for any project with structured routes.
Defines all API routes as a structured constant object with paths and methods. Used by both server and client for type-safe route handling. Self-contained and could be reused as a pattern for defining routes in any web application.
Contains the `buildExitNotification` pure function that formats a `<pty_exited>` notification string from a PTY session and exit code. Handles truncation, timeout context, and exit code guidance. Also includes the `NotificationManager` class that sends notifications via OpenCode's SDK. The pure function is self-contained and could be reused in any system needing formatted process exit notifications.