DeepSeek Harness Plugin

flyhigao/dsh-sticky-notes

Stars ★ 0 Category UI Enhancements Added 2026-08-18

Workspace sticky notes for DSH, saved as multiple Markdown files under the current workspace.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:flyhigao/dsh-sticky-notes

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).

README

中文

Workspace sticky notes for DSH (DeepSeek Harness). It adds a compact note entry to the current conversation header, letting you create, edit, and delete multiple notes for the current workspace.

Notes are stored as Markdown files in the dsh-notes/ directory of the current workspace. No hidden database, no extra index — just plain Markdown files.

Features

  • Quick entry in the current conversation header, no sidebar clutter.
  • Multiple notes per workspace: list, preview, edit, create, save, and delete.
  • A workspace selector in the dialog, defaulting to the current conversation workspace and allowing other registered local workspaces.
  • The note UI follows DSH's active language setting, with Chinese and English copy.
  • Unsaved edits are automatically saved before switching notes, changing workspaces, or closing the dialog.
  • Data is stored in the current workspace: <workspace>/dsh-notes/*.md.
  • One Markdown file per note, easy to inspect and manage with any editor or Git.
  • The server resolves workspace paths through workspaceRegistry; it does not trust arbitrary paths from the browser.
  • Mutating endpoints only accept same-origin POST requests.

Compatibility

This plugin uses DSH's additive conversation.session.header.actions slot. It does not replace the whole conversation header or own the position exclusively.

  • Uses a unique ID sticky-notes to avoid conflicts with other plugins.
  • Uses order: 30 so it coexists with other header actions in a predictable order.
  • HTTP API is namespaced under /dsh-sticky-notes/*.
  • Dialog styles are scoped with the dsh-sticky-notes-modal class and do not pollute global styles.
  • Registers through ctx.slots.inject(...), so it does not depend on plugin load order.

Why multiple notes?

A workspace accumulates many kinds of loose thoughts: todos, ideas, meeting notes, and temporary code snippets. A single note would quickly become a dumping ground.

Multiple notes are closer to the sticky-note metaphor:

  • Each note has its own topic.
  • The list shows the title, preview, and last updated time at a glance.
  • Each note is an independent file, easy to track with Git.

Install

From GitHub

dsh plugin --profile web add github:flyhigao/dsh-sticky-notes

Restart dsh web, open any conversation, and you will see the note icon on the right side of the conversation header.

Local development install

  1. Clone the repository:

    git clone git@github.com:flyhigao/dsh-sticky-notes.git
    
  2. Add it to the web profile package.json:

    {
      "dependencies": {
        "dsh-sticky-notes": "file:/path/to/dsh-sticky-notes"
      },
      "dsh": {
        "profile": {
          "bundles": [
            "@deepseek-ai/dsh-base",
            "@deepseek-ai/dsh-web-app",
            "dsh-sticky-notes"
          ]
        }
      }
    }
    
  3. Install and restart:

    cd ~/.dsh/profiles/web
    pnpm install
    # restart dsh web
    

Usage

  1. Open a conversation.
  2. Click the note icon in the conversation header.
  3. Select a workspace at the top of the dialog. The current conversation workspace is selected by default, and other registered local workspaces are available.
  4. In the dialog:
    • Left side: notes from the selected workspace.
    • Right side: title input and content editor.
    • Bottom: new, delete, and save actions.
  5. Unsaved edits are automatically saved before switching notes, changing workspaces, or closing the dialog.
  6. The note is written immediately to dsh-notes/ in the selected workspace.

Data format

Each note is a Markdown file:

<working-directory>/dsh-notes/<note-id>.md

File content:

# Note title

Note body…
  • note-id is generated by the plugin, for example note-msw19zz2-7gbiyg.
  • Deleting a note deletes the corresponding .md file. There is no extra index.
  • You can manually edit or add .md files; reopen the note panel to see the changes.

HTTP API

The plugin provides a small HTTP API for the browser half:

Method Path Description
GET /dsh-sticky-notes/list?workspaceId=<id> List all notes in a workspace
POST /dsh-sticky-notes/save Create or update a note
POST /dsh-sticky-notes/delete Delete a note

Save body

{
  "workspaceId": "workspace-id",
  "note": {
    "id": "optional-note-id",
    "title": "Note title",
    "content": "Note body"
  }
}

Delete body

{
  "workspaceId": "workspace-id",
  "id": "note-id"
}

Development

  • Server entry: lib/index.js
  • Browser entry: client/client.js
  • Plugin manifest: cordis.patch.yml

This is a lightweight hand-maintained implementation and does not require a build step. client/client.js is a CJS bundle that DSH's client module loader can load directly.

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →