Bundle
@mattismegevand/dsh-terminal
A responsive, tabbed Ghostty terminal for the DeepSeek Harness Web UI
- Source
- mattismegevand
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 14 days ago
Readme
# dsh-terminal
English | [中文](README.zh.md)
> A VS Code-style terminal panel for DeepSeek Harness Web. It renders with [ghostty-web](https://github.com/coder/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`](https://github.com/mattismegevand/dsh-dock).
[](LICENSE)
[](https://github.com/topics/dsh-plugin)

## 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`](https://github.com/mattismegevand/dsh-dock), the [`dsh`](https://www.npmjs.com/package/@deepseek-ai/dsh) CLI (Node.js 22.19+ or 24), and pnpm 10+.
### From npm
```sh
dsh plugin --profile web add @mattismegevand/dsh-terminal
```
### From GitHub
```sh
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
```sh
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
```yaml
- 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](https://github.com/mattismegevand/dsh-dock) — the docking system that hosts this panel.
- [dsh-open](https://github.com/mattismegevand/dsh-open) — Codex-style workspace Open menu in the session header.
- [dsh-git](https://github.com/mattismegevand/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
Install
dsh plugin --profile web add github:mattismegevand/dsh-terminal
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install mattismegevand-dsh-terminal from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.