Bundle
dsh-prompt-presets
Reusable prompt presets for DeepSeek Harness: manage a preset library in Settings and inject any preset at the start of the composer draft with one click. / DeepSeek Harness 提示词预设库:设置页管理、对话框一键注入。
- Source
- zhangdong456
- stars
- 2 stars
- License
- MIT
- Updated
- Updated 10 hours ago
Readme
<div align="center">
# dsh-prompt-presets
> **Reusable prompt presets for DeepSeek Harness** — build your own prompt library in Settings, then inject any preset at the start of the composer draft with one click from the chat input bar.
[](LICENSE)
[](https://github.com/deepseek-ai/deepseek-harness)
[](https://github.com/zhangdong456/dsh-prompt-presets/releases)
[](https://github.com/topics/dsh-plugin)
<br>
[**中文**](README.zh-CN.md)
</div>
Open **Settings → Prompt Presets** to manage your library (create / edit / delete with confirmation / reorder), then click the **Prompts** button next to the model selector in the composer to pick a preset and insert it at the start of your draft — no auto-send, you stay in control.
[Features](#features) · [Screenshots](#screenshots) · [Compatibility](#compatibility) · [Install / Uninstall](#install--uninstall) · [How It Works](#how-it-works) · [Data & Privacy](#data--privacy) · [Development](#development)
## Screenshots
| Settings page | Composer menu |
| --- | --- |
| <img src="assets/screenshots/settings.png" alt="Prompt Presets settings page" width="420"> | <img src="assets/screenshots/composer.png" alt="Composer preset menu" width="420"> |
## Features
| Feature | Description |
| --- | --- |
| 📚 Preset library | Title (≤ 50 chars) + content (≤ 10 000 chars) per preset; list shows title plus a first-line preview |
| ✏️ Full CRUD | Create, edit, delete (with inline confirmation), and reorder (↑/↓) — all changes persist immediately |
| 💬 One-click inject | The **Prompts** button in the composer opens a bottom-anchored menu; select a preset, click **Insert into composer** |
| ✍️ Draft-friendly | Injection prepends `preset + blank line + existing draft`; an empty draft receives just the preset. Nothing is ever sent automatically |
| 💾 Durable storage | Lives in the official settings document (`$DSH_HOME/settings.yaml`, namespace `prompt-presets`) via the standard settings service — survives restarts, editable by hand |
| 🌗 Theme & i18n | Built entirely on official theme tokens; ships Chinese and English dictionaries that follow the UI language |
| 🔌 Zero custom RPC | The browser half reads/writes through the shared `settings.describe` / `settings.replace` wire face; the host half only registers the validating schema |
## Compatibility
| Item | Value |
| --- | --- |
| DSH version | Official installer, web profile (verified on Windows) |
| Install mechanism | `dsh plugin --profile web add` (bundle patch + dual half) |
| Depends on | `settings` service (host), `slots` / `locale` / `remote`/`remote.settings` services (client) |
## Install / Uninstall
```sh
# From GitHub (recommended)
dsh plugin --profile web add github:zhangdong456/dsh-prompt-presets#main
# From npm
dsh plugin --profile web add dsh-prompt-presets
# From a local checkout
dsh plugin --profile web add file:./dsh-prompt-presets
```
> After installing, **restart DeepSeek Harness** and press **Ctrl+F5** once in the web page.
> `lib/` artifacts are committed, so GitHub installs need no local build.
| Action | Command |
| --- | --- |
| Upgrade | `dsh plugin --profile web update dsh-prompt-presets` (or re-run `add`), then restart DSH |
| Uninstall | `dsh plugin --profile web remove dsh-prompt-presets` |
Your presets live in `$DSH_HOME/settings.yaml` under the `prompt-presets:` key and survive install, upgrade, and uninstall.
## Quick Start
1. Install the plugin, restart DSH, press `Ctrl+F5`.
2. Open **Settings → Prompt Presets** → **New Preset** → fill in a title and the prompt content → **Save**.
3. In any conversation, click **Prompts** above the composer → pick a preset → **Insert into composer**.
4. Edit the injected text freely, then send as usual.
## How It Works
```
lib/index.js host half (ESM) registers the `prompt-presets` settings namespace:
schema validates/coerces every write (id, title ≤ 50,
content ≤ 10 000, timestamps) and normalizes `order`
(dedupe + append missing ids); registration is a fiber
effect, so uninstalling cleans up after itself
lib/client.js browser half classic script registering a factory with
window.__ModuleLoader__; React resolves against the
shell's shared module table. Registers two slot rows:
settings.section → management page
conversation.input.right → Prompts trigger + menu
Data flows through remote.settings.describe /
.replace with optimistic-revision writes — no custom RPC
cordis.patch.yml bundle patch inserting the prompt-presets row
```
Injection semantics: `draft === '' ? preset.content : preset.content + '\n\n' + draft`.
## Data & Privacy
- Presets are stored locally in `$DSH_HOME/settings.yaml`. Nothing leaves your machine; the plugin makes no network requests of its own.
- The namespace is plain YAML — you can back it up, sync it, or edit it by hand:
```yaml
prompt-presets:
presets:
- id: p-example
title: Code review assistant
content: You are a senior code reviewer…
createdAt: 1787322246076
updatedAt: 1787322246076
order:
- p-example
```
- If the settings service is unavailable or the document is read-only, the UI disables editing and says so instead of failing silently.
## Development
```
dsh-prompt-presets/
├── package.json dsh.bundle manifest + client-half declaration
├── cordis.patch.yml bundle patch (inserts the prompt-presets row)
├── lib/
│ ├── index.js host half (ESM, no dependencies)
│ └── client.js browser half (module-loader factory, plain JS)
└── assets/screenshots/ README images
```
No build step: both halves are hand-written plain JavaScript committed directly. Fork → edit → `dsh plugin --profile web add file:./dsh-prompt-presets` → restart DSH.
**Contributing.** Issues and PRs welcome — please include your DSH version and the exact error text.
## License
MIT — see [LICENSE](LICENSE).
Install
dsh plugin --profile web add github:zhangdong456/dsh-prompt-presets
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 dsh-prompt-presets from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.