Bundle
dsh-memory-panel
Long-term memory for DeepSeek Harness: memory_save/recall/list/delete/clear tools plus a bilingual sidebar panel visualizing what the agent remembers about you
- Source
- x2it
- stars
- 2 stars
- License
- MIT
- Updated
- Updated 10 hours ago
Readme
# dsh-memory-panel
Long-term memory for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (`dsh`): durable, cross-session memory tools plus a sidebar panel that shows what the agent remembers about you.
[English](README.md) | [中文](README.zh.md)
## What it does
- **`memory_save`** — store a memory (creates or updates by key)
- **`memory_recall`** — search memories by keyword or category
- **`memory_list`** — list all memories, optionally filtered by category
- **`memory_delete`** — delete one memory by its exact key
- **`memory_clear`** — delete ALL memories (requires `confirm: true`)
- **Sidebar memory panel** — a "Memory" button in the web sidebar opens a panel visualizing the memory store (bilingual, follows the UI language)
Memories live in `~/.dsh/memory.json` — plain JSON on your machine, nothing leaves it.
## Features
- **Atomic writes**: write-to-temp + rename, readers never see a torn file
- **Write serialization**: concurrent `memory_save` calls queue instead of clobbering each other
- **Corruption recovery**: a broken `memory.json` is backed up to `memory.json.corrupt-<ts>` before continuing fresh — no silent data loss
- **Growth control**: content capped at 4000 chars, store capped at 500 entries (oldest evicted), recall results capped at 30
- **Optional filter**: `memory_list` works with or without `category_filter`
- **Delete & clear**: `memory_delete` removes one memory; `memory_clear` empties the whole store after an explicit `confirm: true`
- **Bilingual UI**: the panel follows the UI language (zh / en) via the dsh locale service
- **Tunnel-aware UI**: the panel warns when accessed through a tunnel where the browser-trust fence blocks `/api/*`
## Install
```sh
# web profile (interactive GUI)
dsh plugin --profile web add dsh-memory-panel
# headless profile (one-shot runs) — same bundle, separate install
dsh plugin --profile headless add dsh-memory-panel
```
Install from GitHub directly (no npm needed):
```sh
dsh plugin --profile web add github:x2it/dsh-memory-panel
```
Restart `dsh web` after installing, then open the sidebar "记忆" button.
## Verify
```sh
dsh --profile web --dump-config | grep memory-panel
```
The agent should now list `memory_save` / `memory_recall` / `memory_list` among its tools.
## How it works
```
agent tools (memory_save/recall/list)
│ ctx.tools.register
▼
host plugin (lib/index.js)
│ GET /api/memory (ctx.webServer)
▼
client panel (lib/client.js, sidebar.footer.action slot)
```
One plugin row (`memory-panel`) carries both halves: the host loader imports `main`, the web client loads `./client`.
## Development
```sh
npm install
npm run typecheck # tsc --noEmit
npm run build # esbuild → lib/index.js + lib/client.js
npm pack # tarball
```
Install the local tarball to test before publishing:
```sh
npm pack
dsh plugin --profile web add ./dsh-memory-panel-0.1.0.tgz
```
## Layout
```
src/index.ts # host half: memory tools + /api/memory endpoint
src/client/index.tsx # client half: sidebar memory panel
lib/ # built artifacts (generated by build.mjs)
cordis.patch.yml # bundle patch (dsh.bundle.patch)
```
## Security
The `/api/memory` endpoint has no authentication — bind dsh web to localhost or a trusted network. The plugin stores memory content in plaintext at `~/.dsh/memory.json`; do not save secrets you would not write to a local file.
## License
MIT
Install
dsh plugin --profile web add github:x2it/dsh-memory-panel
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-memory-panel from the hub
- 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.