@deepseek-harness-tui/dsh-tui
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
Install
dsh plugin --profile web add @deepseek-harness-tui/dsh-tui
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✗ |
| 2 list | ✗ |
| 3 mount | — |
| 4 boot | — |
|| 0.1.5-rc.1 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5","@deepseek-ai/dsh-tool-ask-user":"^0.1.0-rc.6 || ^0.1.1-rc.1 || 0.1.2-alpha.3 || 0.1.2-alpha.4 || 0.1.2-alpha.5 |Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
<p align="center">
<img src="docs/assets/readme/logo-en.svg" alt="dsh-TUI animated whale logo" width="560">
</p>
<p align="center">
<strong>English</strong> | <a href="README_ZH.md">简体中文</a>
</p>
<p align="center">
<a href="https://www.npmjs.com/package/@deepseek-harness-tui/dsh-tui"><img alt="npm" src="https://img.shields.io/npm/v/@deepseek-harness-tui/dsh-tui?style=flat-square&color=4b6fff"></a>
<a href="https://github.com/ccch1mneyyy/dsh-TUI/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/ccch1mneyyy/dsh-TUI/actions/workflows/ci.yml/badge.svg"></a>
<a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-263146?style=flat-square"></a>
<img alt="Public beta" src="https://img.shields.io/badge/status-public%20beta-7da1de?style=flat-square">
<a href="https://github.com/ccch1mneyyy/dsh-TUI/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/ccch1mneyyy/dsh-TUI?style=flat-square&color=4b6fff"></a>
<a href="https://www.npmjs.com/package/@deepseek-harness-tui/dsh-tui"><img alt="npm downloads" src="https://img.shields.io/npm/dm/@deepseek-harness-tui/dsh-tui?style=flat-square&color=4b6fff"></a>
</p>
dsh-TUI
An interactive terminal UI for DeepSeek Harness. It ships a pixel-whale
header, live work status, streaming thinking, double-Esc time rewind, a
context progress bar, and a TPS gauge. Zero core changes: it consumes only
DSH's public exports, and is moving from a mounted plugin to an app with its
own entry and composition root, where DSH loads in process as the first-party
backend. Install to enable; uninstall leaves no patches behind.
The prompt footer hides completed goals once the turn is idle; the Todo side panel retains their history. Ctrl+Q folds todos while working and hides/restores the idle goal/todo footer. Clicking its todo header also hides it while idle. Hiding changes only this display: a new goal/todo snapshot or session reveals it again, and /goal clear does not clear todos.
Split diff cards give one-sided additions and deletions the full body width, without an empty opposite pane. Ordinary edits remain side by side, and mixed files choose their layout separately before folding or streaming reveal.
Compaction status stays on one line in narrow panes: phase and cancellation hints yield first, then the label is shortened; elapsed time is shown only as a complete field.
Image files referenced with @path use the same admission and resize/conversion policy as pasted images. Adjustment notices report the stored dimensions and format; required animation conversion is refused instead of dropping frames. Mention images and staged images still share count and stored-byte limits in source order.
Highlights
Panels without a verified Component identity are temporary: settings show their title and a distinct number for this run. Their toggles take effect immediately without being saved, and unrelated settings changes preserve that choice. Old actN:panel entries cannot be mapped safely: remove the placeholder and select the current panel again. Verified Components named actN keep their public runtime address; an explicit selection uses component:actN:panel in saved preferences to avoid claiming an old anonymous entry.
The default reasoning-effort setting offers the current backend/model’s declared tiers, including custom IDs. Saved values absent from that catalog stay visible and stored; while loading or unavailable, only Auto is selectable. On DSH, Auto follows the saved /effort choice, then the configured effort, then the model default. Claude/Codex retain backend preferences for Auto at startup and for resumed sessions; explicitly choosing Auto resets the model default. Explicit settings changes affect the next request; unsupported preferences fall back with a notice and are never forced onto a route.
Resuming a DSH session preserves its recorded reasoning effort (or its live selection when reattaching). The saved default seeds new sessions; explicit /effort and effort-default settings changes still apply to the current session’s next request.
- Pixel whale pet — three startup intros, click to wake; freezes after the first task.
- Launchpad and first-run guide — every ordinary launch lands on a landing page with a real input box (big text + whale + quick actions, dropping whole blocks on short/narrow terminals; whale-girl images use a compact native-canvas footprint instead of leaving a large gap before the title; on by default — /settings
launchpadoff boots straight into chat); command completion matches chat:Tabfills the input,Enterruns the command and clears it. The first run walks a four-step wizard (accounts & models / language+theme / model+workspace / shortcuts), re-runnable with/setup; its first step signs in to a subscription and catches the models it brings in (none → no question, one → that one, several → you choose), or adds an API key through the/providerwizard, which asks which of the enabled models to switch to or keeps the current one. - Terminal-native UI — streaming Markdown, tool cards,
/and@completion,#L12-14ranges, history search, zh/en UI. - Task completion notifications — DSH, Claude and Codex notify after successful live work settles, with no queued follow-up or active goal. The title is “dsh-TUI · Task complete”; the body shows the latest settled reply as a single-line plain-text preview (Markdown formatting removed, up to 200 characters). OSC 777/9 apply an additional 2048-byte sequence budget, including title and protocol bytes, preserving whole graphemes. No reply shows only the title; BEL only rings.
/settings→ Conversation:taskNotifications=unfocused(default),always, oroff;notificationMethod=auto(default),osc9,bel, orwindows. Auto uses separate title/body fields on Ghostty/WezTerm (OSC 777) and Kitty (OSC 99); iTerm2/Warp and explicitosc9use a
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::44,最后更新 2026-11-06