Skip to content
dsh.fish
Bundle

dsh-auto-chat-titles

Semantic, configurable chat titles for DeepSeek Harness with model selection and one-click regeneration

Source
leonardoxr
stars
2 stars
License
MIT
Updated
Updated 10 days ago

Readme

# dsh-auto-chat-titles

English | [简体中文](README.zh.md)

Semantic, configurable chat titles for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness).

The plugin keeps DSH's durable session-title service and replaces only its built-in provider policy. It adds:

- semantic LLM titles instead of relying on the first-words fallback;
- a dedicated title-model selector in **Settings → Plugins**;
- **Regenerate title** in the conversation header;
- regeneration from recent human-message context;
- live title length, context, byte, token, and timeout settings;
- the existing DSH cancellation, normalization, persistence, provenance, pinning, and projection behavior.

## Requirements

- DeepSeek Harness 0.1.1-rc.2 or newer compatible 0.1.x prerelease
- Node.js 22+
- Web profile with the standard session-title, settings, commands, and client runtime bundles

## Install

Directly from GitHub:

```sh
dsh plugin --profile web add github:leonardoxr/dsh-auto-chat-titles
```

From a checkout while developing:

```sh
npm install
npm run check
dsh plugin --profile web add "C:/absolute/path/to/dsh-auto-chat-titles"
```

Host output is hot-reloaded via the active watcher. Browser client changes require rebuilding the client artifacts and refreshing the existing DSH Web page.

## How it composes

The bundled `cordis.patch.yml` disables only the base `session-title-llm` row and inserts this plugin. It intentionally leaves the core `session-title` service enabled. DSH supports one asynchronous title provider at a time, so enabling both provider rows is an error.

Automatic generation uses the first eligible human message. Clicking **Regenerate title** calls the same durable service explicitly and uses up to the configured number of recent human messages. Manual rename continues to pin the title; explicit regeneration deliberately unpins and replaces it.

## Settings

Open **Settings → Plugins → Automatic chat titles**.

- **Title model** — inherit the exact conversation route or choose any model advertised by the host catalog.
- **Title length** — target words for non-CJK languages.
- **Regeneration context** — number of recent human messages included in manual regeneration.
- **Advanced generation limits** — CJK length, framed input bytes, output tokens, and timeout.

The settings are stored in `$DSH_HOME/settings.yaml` under `auto-chat-titles` when the standard file settings provider is mounted.

## Commands

The UI action invokes `/regenerate-title`. It can also be entered directly in the composer. The button confirms command admission; the conversation activity reports the eventual generation result. Command lifecycle events remain in the session audit log, and the generated title is persisted as DSH's standard `session/title` event.

## Development

```sh
npm install
npm run typecheck
npm test
npm run build
node scripts/preflight.mjs
npm pack --dry-run
```

The host half compiles to `lib/`. The browser half compiles to the DSH lazy-CJS module in `client/client.js`.

## License

MIT

Install

dsh plugin --profile web add github:leonardoxr/dsh-auto-chat-titles

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source