Back to home

mattismegevand

dsh-terminal

A responsive, tabbed Ghostty terminal for the DeepSeek Harness Web UI

Stars
0
Language
TypeScript
Created
Aug 16, 2026
Updated
Aug 16, 2026

Introduction

dsh-terminal

English | 中文

A VS Code-style terminal panel for DeepSeek Harness Web. It renders with ghostty-web, serves Ghostty's versioned WASM as an immutable asset, and connects to a local PTY through node-pty. Placement and resizing come from dsh-dock.

MIT License dsh-plugin

terminal panel docked at the bottom of a Harness session

What it does

  • Multiple terminals per Harness session with a responsive tab tray.
  • Left, right, bottom, and floating placement through dsh-dock.
  • Live detachment and rejoining of terminal panes without restarting PTYs.
  • Resize propagation, truecolor, Unicode, selection, paste, scrollback, and full-screen programs.
  • Live light/dark palette synchronization with the active Harness theme.
  • Shell titles that follow the workspace, foreground process, and app-provided terminal title.
  • PTYs remain alive when a panel hides or moves, and stop when their tab, plugin, browser page, or Harness process closes.
  • Optional confinement by the session's current Harness sandbox policy.
  • Same-origin WebSocket fencing, bounded input, per-session caps, scrubbed environments, and output backpressure.

Install

Requires dsh-dock, the dsh CLI (Node.js 22.19+ or 24), and pnpm 10+.

From npm

dsh plugin --profile web add @mattismegevand/dsh-terminal

From GitHub

dsh plugin --profile web add github:mattismegevand/dsh-terminal

Git installs fetch sources, so pnpm runs the package's prepare build on first add. pnpm ≥10 refuses that until you allow it: copy the exact package key pnpm printed into the profile's pnpm-workspace.yaml allowBuilds entry, then re-run the same add.

Develop locally

git clone https://github.com/mattismegevand/dsh-terminal.git
cd dsh-terminal
corepack pnpm install
corepack pnpm check:all
dsh plugin --profile web add .

node-pty is native. If pnpm adds an allowBuilds.node-pty placeholder to the Web profile workspace, set it to true and rerun the same plugin-add command.

Usage

Open a session and select Terminal. Use + or `Ctrl+Shift+`` for another shell. Drag a tray row to detach it; docking terminal panes on the same edge rejoins their live terminals. The panel × hides a pane, while the tray trash action ends its shell.

Configuration

- id: terminal
  name: '@mattismegevand/dsh-terminal'
  config:
    shellPath: /bin/zsh
    shellArgs: ['-l']
    maxTerminalsPerSession: 12
    maxCols: 400
    maxRows: 200
    disposeGraceMs: 2000
    respectSandbox: false
    outputHighWaterBytes: 2097152
    outputLowWaterBytes: 524288
    processTitlePollMs: 500
    initialCols: 100
    initialRows: 30
    fontSize: 13
    scrollback: 10000

With respectSandbox: true, the terminal uses the session's sandbox mode. In workspace-write, shells may warn that they cannot update history or other files outside the workspace; that is expected.

Related plugins

  • dsh-dock — the docking system that hosts this panel.
  • dsh-open — Codex-style workspace Open menu in the session header.
  • dsh-git — session-scoped working-tree Review panel.

Model experience

Human-operated terminal UI

What the model sees

Nothing. Terminal input and output travel between the human-operated browser terminal and its PTY; the plugin registers no model prompt, tool, or conversation message.

Token effect

Zero tokens are added to model requests or responses. Terminal output is not copied into model context.

KV Cache effect

None. PTY activity does not alter the main model request prefix.

Known limitations

  • The terminal is local-host only. Remote providers require a resize-capable Harness PTY contract.
  • PTYs intentionally do not survive a browser refresh, plugin reload, Harness shutdown, or explicit tab close.
  • respectSandbox follows the current local sandbox provider; changing mode requires closing active terminals first.
  • The Ghostty WASM asset path is versioned with the pinned ghostty-web dependency and must change when that asset is upgraded.

License

MIT