Skip to content
dsh-market Browse plugins GitHub 中文

sunshaobei/dsh-input-history

Standalone arrow-key input history for the DSH web composer: ↑/↓ recalls sent prompts from one global ring shared across all sessions and workspaces, persisted to localStorage with an overridable cap.

Stars ★ 0 Category UI Enhancements Listed 2026-08-18 npm dsh-input-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-input-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

Input history switcher for the DeepSeek Harness (DSH) composer.

Every submitted prompt — text plus attachment bytes — persists locally (localStorage metadata + IndexedDB blobs, newest first, capped at 50 entries; the oldest is dropped together with its blobs). With an empty composer, ↑ recalls the previous entry and continues to older ones, ↓ goes back; going past the newest clears the composer and ends the cycle. Any real edit ends the switching session, and a non-empty user-authored draft is never overwritten by accident.

Restore fidelity

Restored entries go through the product's own draft pipeline (conversation.createDrafts + the session input shell's setDraft/addAttachments actions), so:

  • images come back as real thumbnails (fresh object-URL previews),
  • files restart the background upload like a hand-picked attachment,
  • @references in the text are preserved verbatim.

Entries whose blobs are gone restore text-only.

Install

dsh plugin --profile web add dsh-input-history
# restart dsh web / the desktop app (bundle layer applies at boot)

How it works

  • Capture — wraps ConversationController.prototype.sendSession (the single funnel for composer submissions) and snapshots the ordered draft attachments (live File objects) before the original send consumes them. Capture is async and failure-swallowing: storage problems never break sending.
  • Storage — metadata in localStorage["dsh-input-history:entries:v1"], bytes in IndexedDB dsh-input-history/blobs (key <entryId>:<index>).
  • Active session — tracked via a conversation.composer.dock slot whose inject(sessionId) runs for the mounted composer, falling back to the most recently updated session.

Configuration

None. Zero npm dependencies.

License

MIT

Content from the project README on GitHub ↗

Comments

Comments live in GitHub Discussions. Sign in with GitHub to post or react.