Bottom multi-tab terminal panel (node-pty + xterm.js) pinned to the viewport bottom, always below the input box.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-plugin-terminal
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:siberiah2o/dsh-plugin-terminal
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Bottom terminal panel for the DeepSeek Harness (DSH) Web GUI — an interactive multi-tab shell pinned to the bottom of the page (ConPTY on Windows, openpty on Linux/macOS).
中文 · MIT
Install
dsh plugin --profile web add dsh-plugin-terminal && dsh web
Note: this is a DSH (DeepSeek Harness) plugin — do not use plain
npm i dsh-plugin-terminal; it must be installed throughdsh pluginto activate.
Screenshots
| Collapsed | Expanded | Multi-tab |
|---|---|---|
![]() |
![]() |
![]() |
Features
- Bottom panel pinned to the viewport, aligned with the conversation column; the input box always stays above the terminal
- Configurable shortcut toggles (default
Ctrl+``, e.g.Ctrl+J`); drag the top grip to resize (120px–78% viewport, remembered) - Multi-tab:
+new, ✕ close, ⟳ restart; processes keep running on tab switch; live sessions restore after refresh or workspace switch - Every terminal remembers its working directory: new tabs start in the current DSH workspace; after a
dsh webrestart, ⟳ brings the process back in its original directory instead of the server launch directory - Terminals survive dsh web restarts: session metadata + scrollback are persisted live to
$DSH_HOME/plugin-data/terminal/; after a restart they come back as "exited" history tabs (full screen replay, one-click restart of the process); tabs you closed stay closed - xterm.js 6: colors, blinking cursor, alternate screen, Unicode v11 (CJK width tables), 10000-line scrollback
- WebSocket duplex channel to the PTY; dark terminal surface in both light and dark themes
- Copy/paste: select with the mouse and release to copy, right-click to paste;
Ctrl+Vpastes,Ctrl+Shift+C/Ctrl+Shift+Vcopy/paste when the clipboard API is available- ⚠️ When the GUI is opened over remote http (not https / not localhost) browsers disable
navigator.clipboard(insecure context) - the plugin falls back toexecCommandcopy and lets the browser's native context-menu Paste through, so both still work
- ⚠️ When the GUI is opened over remote http (not https / not localhost) browsers disable
Configuration
Plugin behavior lives in the DSH settings document ($DSH_HOME/settings.yaml, section terminal), editable from the GUI at Settings → Plugins. Changes apply to sessions created afterwards — no restart needed; tabs that already exist keep the command they started with.
| Field | Default | Meaning |
|---|---|---|
toggleShortcut |
`ctrl+`` | Keyboard shortcut toggling the bottom panel. Format: `[ctrl |
shellCommand |
(empty — auto-detect) | Command line used to start new terminal sessions. Empty means the platform default (pwsh/powershell/cmd on Windows, $SHELL on POSIX). |
Example — launch cmder on Windows and bind the panel to Ctrl+J:
terminal:
toggleShortcut: ctrl+j
shellCommand: cmd.exe /k "C:\cmder\vendor\init.bat"
Notes:
shellCommandis used verbatim (no flags are injected): the command line is split on spaces with double quotes honored, so quoted paths work.- If the shortcut is a key the terminal also consumes (Ctrl+J is the shell's line feed), a press while a terminal pane has focus goes to the shell instead of toggling the panel.
- Operator override: the environment variables
DSH_PLUGIN_TERMINAL_TOGGLE_SHORTCUTandDSH_PLUGIN_TERMINAL_SHELL_COMMANDtake precedence over the settings document (and are the only way to configure headless compositions without the settings service).
Running codex / claude code in the panel
These AI coding CLIs are full-screen TUIs (ANSI escapes + alternate screen + truecolor) and demand a lot from the terminal link. The plugin is tuned for them:
- Child env gets TERM=xterm-256color and COLORTERM=truecolor (when unset), plus LANG/LC_ALL=en_US.UTF-8 and PYTHONIOENCODING=utf-8 on non-Windows, preventing 256-color fallback and CJK mojibake
- xterm.js 6 answers OSC 10/11/12 queries out of the box (Codex theme detection via background-color query just works)
- unicodeVersion "11" keeps mixed CN/EN output aligned; drawBoldTextInBrightColors: false keeps true colors on bold text; CJK fallbacks in the font stack; 10000-line scrollback (500k-char server ring buffer)
If rendering still misbehaves:
- Claude Code: run /tui fullscreen in the session (or CLAUDE_CODE_NO_FLICKER=1 claude) to switch to the flicker-free fullscreen renderer; /tui default reverts
- Inside tmux: make sure TERM=tmux-256color and tmux >= 3.4, add
set -ga terminal-overrides ',xterm-256color:RGB'if needed - Windows mojibake: use Windows Terminal, chcp 65001, enable the "Beta: Use Unicode UTF-8" system option; fall back to WSL if it persists
- Update the CLI: most rendering bugs are regressions already fixed in newer versions
License
MIT
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8076
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 8076
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 3828
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 3661
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 3277
A fixed-corner whale widget for the DSH web GUI — balance, today's usage and per-turn cost with peak/off-peak pricing, editable balance-alert and daily-budget bubbles, a module-based custom bubble queue with A/B weighted choices and random lines or images, 30+ vendor templates (OpenAI, OpenRouter, Kimi, SiliconFlow, Ark, Zhipu, MiniMax and more) with per-model balance and subscription quota, plus task-end sound, imported audio, custom roles and a resource manager. Local-only, no telemetry.
Devin-AXIS/deepseek-design#deepseek-idesign★ 1628
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.



Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.