DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
T

dsh-terminal-keybar-dock

Terminal Keybar Dock

仅限移动端:将手机软键盘缺少的按键(Escape、Tab、Enter、Ctrl-C、箭头键,以及会重写下一个输入字符的锁定式 Ctrl 和 Shift 修饰键)以实心栏的形式停靠在当前终端底部,覆盖在已打开的键盘上方。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:gitMFQ/dsh-terminal-keybar-dock#bf6add88d40f0f32275831b70df37d1ff8b86b90
README兼容性版本

兼容性与来源证明

Terminal Keybar Dock 以 dsh-terminal-keybar-dock 发布,当前版本为 1.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/26

版本

1.1.0stable
2026/10/26
1.0.0stable
2026/10/26

相关插件

正在加载相关插件…

最新版
1.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/26
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Experimental Inspector@deepseek-ai/dsh-experimental-inspector用于 Host 调试和 Client Runtime 检查的实验性跨 realm CDP hub

README

dsh-terminal-keybar-dock

A DeepSeek Harness (DSH) Client plugin: the mobile twin of dsh-terminal-keybar, without the floating look.

A phone's soft keyboard has no Escape, Tab, Ctrl, Shift or arrow keys, and the DSH terminal has no on-screen replacement. The upstream plugin floats a translucent column of those keys beside the terminal; this variant docks them instead:

  • a solid horizontal bar along the bottom edge of the active terminal — on a phone the right Sidebar presents the terminal fullscreen below 768px, so the screen bottom is the terminal bottom;
  • the terminal gives the bar its band: the body box holding the terminal reserves a bottom padding of the bar's height (plus the keyboard inset while the keyboard is open), so the terminal re-fits above the bar and its last row — the prompt and the cursor — stays visible instead of being covered;
  • rides the soft keyboard: while the keyboard is open the bar sits directly on top of it, tracking its height, so the keys you need are always between the terminal output and the keyboard;
  • Ctrl / Shift modifiers: the two keys at the head of the row are sticky and apply to the next bar key or the next character typed on the soft keyboard, so Ctrl+C / Ctrl+D / Ctrl+R — the reason a terminal has Ctrl — become reachable;
  • mobile only, and only while the terminal is on screen: it appears on touch devices with a viewport narrower than 768px while the right Sidebar's active tab is a terminal and that terminal's body is actually visible. On tablets and landscape phones (side-by-side layout) it stays off, and collapsing the panel takes the bar with it.

Keys: Ctrl · Shift · Esc · Tab · ↵ · ^C · ↑ · ↓ · ← · →

Modifier keys (Ctrl / Shift)

The Ctrl and Shift keys are sticky, one-shot modifiers: tap one and it lights up, tap it again to cancel, and the two compose (Ctrl+Shift). An armed modifier applies to the next key — a bar key or one character typed on the soft keyboard — and then clears itself.

  • Against the bar: Shift+Tab sends ESC [ Z (back-tab), and Ctrl / Shift + an arrow sends the standard xterm modifier sequence (ESC [ 1 ; 5 A for Ctrl+↑, 1;2 for Shift, 1;6 for both), so Ctrl+←/→ moves by word in readline and vim. Ctrl+Esc, Ctrl+↵ and Ctrl+^C send the same bytes as the unmodified keys — terminals draw no further distinction.
  • Against the soft keyboard: while a modifier is armed, the next typed character is intercepted from the terminal's hidden textarea as a cancelable beforeinput, the insertion is cancelled, and the rewritten byte goes through the same terminal service. Ctrl+A…Z become the C0 control bytes (Ctrl+C interrupt, Ctrl+D EOF, Ctrl+Z suspend, Ctrl+R reverse search, Ctrl+L clear, Ctrl+W kill word); Ctrl+[ \ ] ^ _, space and ? map to their ASCII control codes; Shift uppercases ASCII letters. Input that is not one keystroke — an IME composition, a paste — is left alone and the modifiers stay armed.
  • Tapping anywhere outside the bar, switching tabs or the bar disappearing clears the armed state, so a modifier tapped by accident cannot rewrite a later keystroke.

Shift only changes the case of ASCII letters; digits and symbols keep whatever the soft keyboard's own Shift produced (layouts differ, and the plugin does not guess). Ctrl sends a character with no control meaning exactly as typed.

How the keyboard inset works

iOS Safari and modern Android Chrome keep the layout viewport intact and shrink window.visualViewport instead, so a plain position: fixed; bottom: 0 bar would sit behind the keyboard. The bar reads the keyboard inset as innerHeight − visualViewport.offsetTop − visualViewport.height and sets its own bottom to max(inset, env(safe-area-inset-bottom)) — on the keyboard while it is open, above the home indicator while it is closed. The reserved band the terminal gives up is the same expression plus the bar's height, so the terminal's bottom edge always meets the bar's top edge. Browsers that resize the layout viewport instead (older Android, Firefox) report no inset and need none: their bottom: 0 is already above the keyboard.

Presses use pointerdown with preventDefault, so the terminal's textarea keeps focus and the soft keyboard stays open. Bytes go through the public Client terminal service of the active tab (webTerminals.view(...).write(...)); no terminal code is copied.

Install

Install as a local bundle from this directory (DeepSeek Harness, Plugins → Install, or the plugin_manager tool with install_bundle). Then disable the upstream dsh-terminal-keybar so the floating column does not appear beside the docked bar. Reload the page after installation.

Notes

  • Derived from dsh-terminal-keybar (MIT); the write path, seat registration and diagnosis badge are inherited from it, while the sticky Ctrl/Shift modifiers and typed-character interception are new here. See MAINTENANCE.md for every upstream API this plugin touches — including the tab-body markers the visibility gate and the reserved band are built on, and the hidden textarea the modifiers intercept.
  • The keyboard-inset path follows the standard visualViewport formula, which desktop browsers cannot fully exercise (no soft keyboard); the closed-keyboard docked layout, the reserved band and key delivery are verifiable in a narrow touch-emulated viewport, the open-keyboard ride-up needs a real phone. The modifier interception listens for beforeinput, which a touch-emulated page can dispatch; the real soft-keyboard timing still deserves a pass on a phone.