Repository navigation
Releases: protoLabsAI/terminal-plugin
Release list
v0.9.2
Security
- The operator token is no longer sent down fleet-proxied sockets when the single-use WS ticket fails to mint, preventing hub credentials from leaking to remote members.
- Ticket mint failures now trigger retries with backoff, ensuring authentication proceeds only via the secure ticket mechanism when behind a proxy.
v0.9.1
Terminal Tab Behavior
- New tabs are named by their starting directory immediately, eliminating the "Terminal N" flash before the shell sets its title.
- The connected frame now carries the shell's live current working directory, so reattached tabs display the shell's actual location rather than its original start point.
- Split panes inherit the title of their source pane, and last-seen titles persist per session ID to ensure they display instantly after a reload.
v0.9.0
v0.9.0 introduces split panes and direct terminal tooling for the agent, alongside fixes for layout stability and locale handling.
Split Panes
- Any tab can be split side by side (
⌘D/Ctrl+Shift+E) or stacked (⌘⇧D/Ctrl+Shift+O), with unlimited nesting. - Inactive panes dim, and you can move focus between them using
⌘]/⌘[(or⌘⌥arrows). ⌘Wcloses the active pane (falling back to closing the tab if it’s the last pane), while the tab “×” button closes all panes within that tab.- New panes start in the live
cwdof the source pane, and layouts persist across reloads so every pane reattaches to its shell. - Tabs display a pane-count badge and follow the active pane’s title.
Agent Terminal Tools
- The agent can now list, read, run commands, and open tabs directly via new
terminal_list,terminal_read,terminal_run, andterminal_opentools. - These tools are gated by the new
agent_accesssetting, which acceptsrun,read, oroff(defaultrun). terminal_runexecutes commands visibly in a dedicated "Agent" tab, refuses to run if a full-screen program holds the foreground, and never switches the operator’s view.- Tabs opened by the agent adopt into the view via bus events or the gated
GET /api/plugins/terminal/sessionslist if events are missed.
Layout & Stability
- Renaming a tab no longer causes layout jitter or scrollbar flickering, as tabs now have a fixed height and explicit overflow handling.
- The active tab automatically scrolls back into view when its title changes, preventing it from being pushed off the strip.
- Reattached panes only nudge their size via
SIGWINCHwhen a full-screen program is active, preventing stray prompt reprints on plain prompts.
Terminal Experience
- The console now supports standard shortcuts:
⌘C/⌘V/⌘Afor clipboard,⌘Ffor find,⌘Kfor clear, and⌘1–9for tab switching. - A right-click context menu is available for copy, paste, find, and tab management actions.
- Login shells are enabled by default (
argv0 "-zsh"), ensuring~/.zprofileruns andPATHmatches your usual terminal environment. - A UTF-8 locale is now set automatically if the server lacks one, preventing non-UTF-8
LC_ALL/LC_CTYPEfrom shadowing the locale fill. - Flow control stops reading the PTY when a viewer is more than 64 frames behind, improving performance for slow connections.
- WebGL rendering is enabled with a canvas fallback, and all 16 ANSI colors are derived from theme tokens with a minimum 3:1 contrast ratio.
- The minimum required
protoagentversion is 0.148.0.
v0.5.2
Shell Initialization
- New shells now start in the user's home directory (
~or%USERPROFILE%) instead of the server's current working directory, preventing accidental navigation to sensitive system paths like/dev. - If a configured
cwdpoints to a missing directory, the shell falls back to the home directory and displays a one-line notice in the connected frame, replacing the previous silentchdirfailure. - Configured
cwdvalues now correctly expand~and environment variables before resolving the path.
v0.5.1
Persistent Sessions
- Shells now outlive the WebSocket connection; switching views, reloading, or network drops detach the socket while the session persists in a bounded replay buffer.
- Detached sessions are reaped after the configured
keep_alive_minutes(read live at disconnect, so settings changes apply to open tabs immediately). - A second viewer can take over an existing session, and
min_protoagent_versionbumps to 0.82.0 to support background mounting.
Terminal Reliability
- Closing a shell no longer signals the server's own process group; the server verifies the child leads its own process group before sending
killpg, otherwise targeting only the child. - Shell termination sends
SIGHUPinstead ofSIGKILLto allow interactive shells to exit cleanly, and the master tty is drained during shutdown to prevent hangs on macOS. - Multi-byte UTF-8 characters split across reads no longer render as replacement glyphs due to incremental decoding.
Configuration & Authentication
- Font size and scrollback settings are now read live from the configuration registry on every view load, replacing hardcoded values.
- New configuration keys
keep_alive_minutes,max_sessions, and asettingsblock for terminal-specific parameters are now available. - The WebSocket credential moved out of the URL into the socket's first frame, so it never lands in access logs or history.
- The terminal now works on fleet members reached through the hub (it said "unauthorized"): each connect first mints a single-use, ~30s ticket from the bearer-gated
POST /api/plugins/terminal/ticket— the hub authenticates that request and forwards it with the member's fleet token — and presents it in the first frame. - Direct connections can still authenticate with the operator token in the first frame.
v0.4.1 — flush block glyphs
Block/box art (e.g. the Claude Code splash run inside the terminal) now renders flush, no seams: the canvas renderer + customGlyphs draws those glyphs as exact cell-filling shapes (the default DOM renderer drew them from the font). Install: --ref v0.4.1
v0.4.0 — multi-session tabs
Run several terminals in one view: a tab bar (+ add · × close · double-click rename · click to switch). Each tab owns its own xterm + WebSocket → its own PTY shell. The protoAgent theme applies across all tabs + re-themes live. Install: --ref v0.4.0.
v0.3.0 — experimental Windows (pywinpty)
Adds an experimental Windows backend (WinPtySession via pywinpty) behind open_session(); Linux/macOS keep the stdlib PTY. Untested in CI — a Windows user should validate. pip install pywinpty on Windows (it's in requires_pip). Install: --ref v0.3.0.
v0.2.0 — vendored xterm (offline)
xterm.js + addons + css are now vendored and served locally by the plugin (/plugins/terminal/static/…) — no CDN, works airgapped/offline. capabilities.network is now []. Install: python -m server plugin install https://github.com/protoLabsAI/terminal-plugin --ref v0.2.0
v0.1.1 — enabled by default, no restart
- Enabled by default (
enabled: true). Safe because the WebSocket is operator-bearer-gated and protoAgent only binds a non-loopback interface when a token is set, so an un-gated shell is always loopback-local. Opt out withplugins.disabled: [terminal]. - No restart needed — enabling a plugin hot-mounts its router (#822) and the rail picks up the view from runtime-status (#853). Install via the console Plugins panel (or
reload_plugins/Sync for a CLI install); the old "enable; then restart" guidance was stale. - De-flaked CI — the WS round-trip test had an unbounded receive loop (it hung one run); now bounded by
pytest-timeout+ a CI job timeout, and the round-trip drives/bin/catdeterministically (real shell behaviour stays covered by the PTY tests).
Install: python -m server plugin install https://github.com/protoLabsAI/terminal-plugin --ref v0.1.1