Skip to content

Releases: protoLabsAI/terminal-plugin

v0.9.2

Choose a tag to compare

@mabry1985 mabry1985 released this 27 Sep 00:27
38b66eb

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

Choose a tag to compare

@mabry1985 mabry1985 released this 26 Sep 06:47
f3c3843

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

Choose a tag to compare

@mabry1985 mabry1985 released this 26 Sep 02:33
eb78a55

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).
  • ⌘W closes 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 cwd of 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, and terminal_open tools.
  • These tools are gated by the new agent_access setting, which accepts run, read, or off (default run).
  • terminal_run executes 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/sessions list 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 SIGWINCH when a full-screen program is active, preventing stray prompt reprints on plain prompts.

Terminal Experience

  • The console now supports standard shortcuts: ⌘C/⌘V/⌘A for clipboard, ⌘F for find, ⌘K for clear, and ⌘1–9 for 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 ~/.zprofile runs and PATH matches your usual terminal environment.
  • A UTF-8 locale is now set automatically if the server lacks one, preventing non-UTF-8 LC_ALL/LC_CTYPE from 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 protoagent version is 0.148.0.

v0.5.2

Choose a tag to compare

@mabry1985 mabry1985 released this 25 Sep 23:53
9595164

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 cwd points 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 silent chdir failure.
  • Configured cwd values now correctly expand ~ and environment variables before resolving the path.

v0.5.1

Choose a tag to compare

@mabry1985 mabry1985 released this 25 Sep 23:24
fb5dd97

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_version bumps 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 SIGHUP instead of SIGKILL to 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 a settings block 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

Choose a tag to compare

@mabry1985 mabry1985 released this 13 Jun 18:59
501ef84

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

Choose a tag to compare

@mabry1985 mabry1985 released this 13 Jun 18:46
046aef1

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)

Choose a tag to compare

@mabry1985 mabry1985 released this 13 Jun 18:42
342b9ee

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)

Choose a tag to compare

@mabry1985 mabry1985 released this 13 Jun 18:37
ab9ca24

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

Choose a tag to compare

@mabry1985 mabry1985 released this 13 Jun 18:29
9ab8c39
  • 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 with plugins.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/cat deterministically (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