DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
M

dsh-memory-index

Memory Index

DeepSeek Harness 的全文记忆索引:使用 SQLite FTS5 搜索现有的 Markdown 记忆树,无需迁移文件或运行嵌入服务。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:yinguobing/dsh-memory-index#5f6932b8826bf413a9b837ca302b938805efa38e
README兼容性版本

兼容性与来源证明

Memory Index 以 dsh-memory-index 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/10/26

版本

0.1.0stable
2026/10/26

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/26
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 memory-context 分类下经过校验的插件。

Experimental Session Search@deepseek-ai/dsh-experimental-session-search为 Agents 提供搜索和读取当前工作区早期会话的工具。Hindsight Coding Agents@vectorize-io/hindsight-coding-agents面向编程代理的仅反思式 Hindsight 长期记忆(可插拔支持多种运行框架:opencode、……),自动在后台导入(无需设置 CLI)。Contextdsh-context用于上下文洞察和管理的 DeepSeek Harness 插件,提供上下文仪表板和上下文命令,帮助了解上下文的构成及其演变过程。Memory Plugin@openviking/dsh-memory-plugin适用于 DeepSeek Harness 的 OpenViking 记忆与上下文套件

README

dsh-memory-index

Full-text memory index for DeepSeek Harness.

It indexes the Markdown memory tree you already have — a core MEMORY.md, daily notes, a wiki, and archived sessions — into one local SQLite FTS5 database. It adds memory_search, memory_read, and memory_write, plus optional startup recall. No embeddings, no API key, no sidecar process, and no file migration.

This is the lexical-first release. Semantic retrieval is planned as an additional layer, not a replacement for the file tree.

Why this one

Most memory plugins ask you to adopt their storage format. This one assumes your memory is already a set of Markdown files and makes that tree searchable:

  • Existing files stay authoritative. MEMORY.md, memory/YYYY-MM-DD.md, wiki/, and archive/sessions/ remain ordinary files you can read, edit, git diff, or delete.
  • Chinese-friendly retrieval. FTS5 trigram when the SQLite build supports it, with a unicode61 fallback and CJK 3-gram expansion.
  • History is searchable. Archived session Markdown can be indexed next to daily notes and long-term memory.
  • Safe defaults. Read-only, no startup recall, no startup indexing until you ask for it.
  • Local only. One SQLite file; no network calls and no telemetry.

It is not a replacement for an atomic-fact store, a vector memory service, or an approval-gated AGENTS.md editor. It solves a narrower problem: make the memory tree I already write to searchable from DSH.

Install

This package is not published to npm yet. Install it from a local checkout or a packed tarball.

From the local checkout:

dsh plugin --profile web add "link:/absolute/path/to/dsh-memory-index"
dsh --profile web

From the packed tarball:

dsh plugin --profile web add /absolute/path/to/dsh-memory-index-0.1.0.tgz
dsh --profile web

When it is published later, the command becomes:

dsh plugin --profile web add dsh-memory-index

Then set workspace in the profile's cordis.patch.yml to the directory that contains your memory tree. The bundle's default uses the Harness process directory so installation never guesses a personal path; override it:

- id: memory-index
  config:
    workspace: /home/you/notes
    writeMode: readonly
    autoRecall: off
    buildOnStart: false

Run /memory-rebuild once in a new session, then /memory-status.

Tools

ToolPurpose
memory_searchSearch the configured roots; returns path:line and a snippet. Optional scope limits to one source.
memory_readRead a file inside a configured memory root.
memory_writeAppend to today's note, append to the core file, or create/replace a file under a write root.

Commands: /memory-status, /memory-rebuild (add fts to rebuild the full-text table from scratch).

Configuration

- id: memory-index
  name: dsh-memory-index
  config:
    workspace: /home/you/notes
    indexDb: .memory/index.sqlite
    roots:
      - { path: MEMORY.md, source: core }
      - { path: memory, source: daily }
      - { path: wiki, source: wiki }
      - { path: archive/sessions, source: session }
    writeRoots:
      - MEMORY.md
      - memory
    digest:
      - { path: MEMORY.md, maxChars: 3500 }
      - { path: 'memory/{today}.md', maxChars: 1500 }
      - { path: 'memory/{yesterday}.md', maxChars: 1000 }
    timeZone: Asia/Shanghai
    sourcePriority:
      core: 0
      daily: 1
      wiki: 2
      session: 3
    writeMode: readonly       # readonly | readwrite
    autoRecall: off           # off | startup
    buildOnStart: false
    maxResults: 8
    maxFileBytes: 20971520
    maxWriteBytes: 204800
    maxDigestChars: 8000
FieldDefaultMeaning
workspacerequiredDirectory containing the memory tree. Resolved once and used as the boundary for all reads/writes.
indexDb.memory/index.sqliteSQLite file, relative to workspace, or :memory:.
rootsMEMORY.md, memory/, wiki/, archive/sessions/Files or directories to index. A file root is indexed directly; a directory root is walked recursively. source labels the results.
writeRootsMEMORY.md, memory/Paths the agent may write. Entries ending in .md are files; others are directories.
digestMEMORY.md, today, yesterdayOptional startup excerpt. {today} and {yesterday} use timeZone.
timeZonesystem zoneUsed for daily-note filenames and digest placeholders.
sourcePrioritycore, daily, wiki, sessionLower ranks first in ties. Unknown sources sort last.
writeModereadonlySet readwrite to enable memory_write.
autoRecalloffSet startup to add the digest as prompt context for workspace agents.
buildOnStartfalseBuild the index in the background after plugin load.
maxResults8Default and cap for memory_search (1–20).
maxFileBytes20 MiBFiles larger than this are skipped.
maxWriteBytes200 KiBMaximum content accepted by one .

roots and writeRoots are independent on purpose: you can index wiki/ and archive/sessions/ while allowing writes only to memory/.

Security model

  • Every path is resolved inside workspace; .. and absolute escapes are rejected.
  • Existing symlink components are rejected for reads and writes, so a link inside memory/ cannot redirect a read or a write outside the workspace.
  • Reads use O_NOFOLLOW; writes create a temporary file with mode 0600, fsync, and rename.
  • The core file (MEMORY.md by default) is append-only.
  • .env* files and paths containing credentials are excluded from indexing.
  • The plugin makes no network requests.

Search behavior

  • With a SQLite build that supports tokenize='trigram', FTS5 handles substring matching; otherwise the table falls back to unicode61.
  • Queries are segmented with Intl.Segmenter when available, then widened with CJK 3-grams if the first pass is too narrow.
  • Results are ranked by FTS5 bm25, then source priority; a lexical LIKE fallback covers short terms and tokenizer gaps.
  • Line numbers are chunk start lines, so they are approximate for long chunks.

Limitations

  • Lexical, not semantic. It finds words, not meanings. Embedding-based retrieval is planned as an optional layer.
  • No file watcher. External edits are picked up on the next /memory-rebuild or process start with buildOnStart. memory_write indexes its own write immediately.
  • Single writer. One process is assumed; SQLite uses a busy timeout, but concurrent writers from multiple processes are not coordinated beyond that.
  • No cross-profile sharing by default. The database lives under workspace/.memory/; choose a shared indexDb only if you understand the locking model.
  • node:sqlite may print an ExperimentalWarning on Node 22/24. The package targets ^22.19.0 || >=24.0.0.
  • Linux is tested. Windows and macOS paths are implemented but not yet in CI.
  • Approximate citations. A chunk's line is its heading/start line; use memory_read when exact context matters.

Roadmap

  • Semantic layer, optional. Add embeddings and hybrid ranking behind the same memory_search tool; lexical FTS5 remains the offline fallback.
  • Incremental watching. Replace rebuild-on-demand with a debounced watcher while keeping the manual rebuild command.
  • CI for Windows and macOS. The path and symlink checks are written cross-platform; Linux is the tested target today.

Design lineage

The memory model — a core MEMORY.md, daily notes, a dream journal, a wiki, and an archived session tree — comes from OpenClaw, which is MIT-licensed. This package is an independent DSH implementation of that model; it shares no code with OpenClaw. The goal is to preserve the useful shape of an existing memory tree, not to emulate OpenClaw's runtime.

Development

npm install --ignore-scripts
npm test
npm run pack:check

Tests use node:test against temporary workspaces and cover Chinese/English search, scopes, write modes, path traversal, symlink escapes, digest rendering, and FTS rebuilds.

License

MIT. See LICENSE.

memory_write
maxDigestChars8000Character budget for the startup digest.