Skip to content
dsh.fish
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: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![DeepSeek Harness](https://img.shields.io/badge/DeepSeek%20Harness-Plugin-4C9AFF.svg)](https://github.com/deepseek-ai/deepseek-harness)
[![version](https://img.shields.io/badge/version-v1.0.5-success.svg)](https://github.com/zhangdong456/dsh-prompt-presets/releases)
[![topic: dsh-plugin](https://img.shields.io/badge/topic-dsh--plugin-7B68EE.svg)](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

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source