Bundle
@wellorbetter/dsh-input-history
Arrow-key input history for the DeepSeek Harness Web GUI: press Up/Down in the chat composer to recall previously sent messages, with a floating history dropdown.
- Source
- wellorbetter
- stars
- 1 stars
- License
- MIT
- Updated
- Updated yesterday
Readme
<h1 align="center">Input History</h1>
<p align="center">
<a href="README.md">English</a> | <a href="README.zh.md">中文</a>
</p>
<p align="center">
<a href="https://github.com/wellorbetter/dsh-input-history/blob/main/LICENSE"><img alt="License MIT" src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square"></a>
<a href="https://github.com/deepseek-ai/deepseek-harness"><img alt="For DeepSeek Harness" src="https://img.shields.io/badge/For-DeepSeek%20Harness-8257D0.svg?style=flat-square"></a>
<a href="https://github.com/topics/dsh-plugin"><img alt="dsh-plugin" src="https://img.shields.io/badge/topic-dsh--plugin-0969da.svg?style=flat-square"></a>
</p>
<p align="center">
<strong>Arrow-key input history for the DeepSeek Harness Web GUI.</strong><br>
<em>Press <kbd>↑</kbd> / <kbd>↓</kbd> in the chat composer to walk back and forth through what you already sent — with a floating history dropdown.</em>
</p>
<p align="center">
<img src="docs/screenshot.png" alt="Input history panel" width="520">
</p>
<p align="center"><em>Demo screenshot with sample data — message content is blurred.</em></p>
## What this plugin provides
Installing this bundle adds one **client (browser) plugin** to every session of the target dsh profile. It registers a floating history dropdown above the composer (`conversation.input.overlay`) and a clock **history button** in the composer's tool row (`conversation.input.right`):
- **↑ recalls the previous message** when the caret is at the very start of the input (an empty input qualifies); **↓ steps forward**, and past the newest entry restores the draft you were typing.
- **Enter accepts**, **Esc / click-outside cancels** (restores the pre-recall draft), and **clicking a row** jumps straight to that message.
- **Date grouping** (today / yesterday / earlier) plus **per-row timestamps** keep long histories scannable.
- **Long messages** render as a 3-line clamped preview with the full text on hover (`title`), and recall puts the complete multi-line text back into the composer.
- Consecutive duplicate messages are collapsed, and the list is capped at the latest 500 entries.
The plugin is pure client UI — no host-side behavior, no persistence, no network. The history is read live from the session's conversation snapshot, so it is always scoped to the session you are looking at.
## How it behaves
```text
composer caret ──↑ at start ──▶ open history (most recent)
▲ │
│ ├── ↑ older
│ ├── ↓ newer ── past newest ──▶ restore saved draft, close
│ ├── Enter accept (keep draft)
│ ├── Esc cancel (restore saved draft)
│ └── click jump to that message
└── ↓ at end ──────────▶ open history (oldest), then ↓ steps newer
```
Recall never fights the slash (`/`) or mention (`@`) menus: when the trigger menu is open, its own up/down arbitration owns the arrows. Modified chords (Ctrl/Cmd/Alt) and IME composition pass through untouched, and multi-line editing is unaffected until the caret reaches a boundary.
## Install
Requires the `dsh` CLI ([install DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)).
```sh
# from GitHub (recommended)
dsh plugin --profile web add github:wellorbetter/dsh-input-history
# or from a local checkout
dsh plugin --profile web add ./dsh-input-history
```
Restart the profile (`dsh web` / `dsh --profile <name>`) after installing. The plugin is a [bundle](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/publish.md): it declares `dsh.bundle.patch`, so `dsh plugin` reconciles it into the profile's `dsh.profile.bundles` layer list automatically, and `dsh.client` so the web shell loads its browser half. It ships plain JavaScript (`lib/index.js` + `lib/client.js`), so a GitHub install needs no build step or `allowBuilds` permission.
## Use
Focus the chat composer in any session and press <kbd>↑</kbd> at the start of the input (or <kbd>↓</kbd> at the end) to open the history dropdown, then navigate with the arrows and press <kbd>Enter</kbd> to accept, or click a row to jump to it. You can also click the clock button in the composer's tool row to open the same panel.
## Development
```sh
pnpm install
pnpm verify # asserts the host half, the client bundle, and the patch manifest
```
## License
MIT
Install
dsh plugin --profile web add github:wellorbetter/dsh-input-history
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install wellorbetter-dsh-input-history from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.