Skip to content
dsh-market Browse plugins GitHub 中文

Xiaofei-fei/dsh-prompt-history

Bash-like prompt history and terminal-style right-click paste for the DSH web composer: Up/Down arrows recall previously submitted messages and right-click pastes the clipboard directly, sourced from the session's own message log (zero config, zero extra storage).

Stars ★ 0 Category UI Enhancements Listed 2026-08-20 npm dsh-prompt-history

Install

Inside DeepSeek Harness, with dsh-market

dsh plugin --profile web add dshmarket

Or from the command line

dsh plugin --profile web add dsh-prompt-history

Installing runs third-party code with your own permissions — it can read your files, use your credentials and reach the network. Review the source first, and pin a commit (github:owner/repo#sha) when you can.

README

Bash-like prompt history and right-click paste for the DSH web composer: Up / Down arrows recall previously submitted messages; right-click pastes the clipboard directly (terminal-style, like Linux).

Install

dsh plugin --profile web add dsh-prompt-history

Then refresh the page.

Usage

  • Up: recall the previous submitted prompt (newest first), replacing the current draft; keep pressing Up to walk further back.
  • Down: walk forward; at the bottom edge, restore the line you were typing before browsing began (readline pending-line behavior).
  • Edit exits browsing: editing the draft while browsing drops back to the live line.
  • Right-click pastes directly: a right-click on the composer textarea pastes the clipboard — no context menu, like a Linux terminal. Paste runs the same pipeline as Ctrl+V (images and reference chips behave identically), with a navigator.clipboard fallback when the execCommand path is blocked.
  • Does not interfere: while the / or @ suggestion menu is open, arrow keys stay with menu navigation; IME composition, Shift+Up selection, Ctrl+Up word-jumps and other modifier chords are never intercepted; busy/removed sessions keep the browser's native right-click behavior.

Features

  • History comes from the session's own message log: reads the conversation snapshot's user nodes (user / steering) and appends as they land — strictly consistent with the transcript, persisted with the session, survives page reloads, and needs no configuration or extra storage.
  • Consecutive duplicates collapse; browse state resets on session switch.
  • No UI, no settings; the client bundle is ~7 KB and depends only on the official @deepseek-ai/* peer packages.

Known limitations

  • On a session switch, only the currently loaded event window's messages are recallable (everything submitted while the page is open is included); there is no host-side history fetch.
  • Plain text only: image-only or chip-bearing messages are not recalled; recalled drafts are plain text.

Development

pnpm install
pnpm run typecheck   # tsc --noEmit
pnpm run build       # tsc (lib/types) + tsdown (lib/index.js / lib/invariant.js / lib/client.js)

The browser half (src/client/) registers into the conversation.input.right slot; the build emits the DSH __ModuleLoader__ closure format with react as the only external (everything else comes from the browser module table).

How it works

The plugin is an invisible composer slot entry that mounts a capture-phase keydown listener on the document. It takes over Up/Down only when the target is the composer textarea, no modifiers are held, no IME composition is active, no suggestion menu is open, and the session is not busy — then writes the recalled text through inputActions.setDraft. The history list is fed from the snapshot's user/steering nodes (deduped by seq); the browse position (index plus the pending line to restore) lives in component refs.

License

MIT

Content from the project README on GitHub ↗