dshbase

插件目录 / Developer / dsh-knowledge-sync

dsh-knowledge-sync

已验证 · 实测可装 liugu2023

✓ 持续维护 基于 6 个官方 DSH 包

查看 GitHub ↗ ← 返回插件目录

0Stars
0Forks
0未关闭 issue
—语言
2026-08-19最近推送
跨平台平台

功能简介

Developer 类别的 DeepSeek Harness 插件。

✅
我们的评价
可用 — 实测通过,早期项目

Developer 类别的 DeepSeek Harness 插件。 实测能干净安装、正常启动。早期项目,但功能可用。

「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。

README

dsh-knowledge-sync

English | 中文

Freeze every round of a DeepSeek Harness conversation into a knowledge-base document, and let later conversations find it.

A round ends, and what was asked, what was concluded, and which tools ran become one Markdown file. Nothing is sent to a model to make that happen. Later, an agent working in the same directory is told the base exists — two sentences, not the documents — and decides for itself whether to look.

What you get

A file per document Markdown with YAML front matter under <root>/<session>/<id>-<slug>.md — a captured round (raw), a distilled finding, or a note the agent chose to record
Worth keeping, or not written A round is captured only if it clears the salience bar — a terse "12 passed" status is not knowledge, so it is not saved
Redaction before disk Tool arguments are scrubbed of credentials (tokens, --password=, .env values, PEM keys…) before the file exists, with configurable extra patterns
Readable by everything Greppable, editable, and ready for version control — the files are the source of truth, with no sidecar index
Recall, not injection A short pointer in the system prompt plus knowledge_search and knowledge_read; the documents never enter the context uninvited
Full-text search An in-memory BM25 index searches document bodies, not just titles, and returns a snippet per hit
Scoped to a workspace An agent recalls what was recorded in its own directory, so another project's knowledge is not noise in this one
A page to read it A Knowledge section in settings: filter, open, read, with kind and tag badges
A page to configure it A Config tab in the same section edits redaction, capture, and recall live — writes persist to settings, values apply without a restart

Install

dsh plugin --profile web add dsh-knowledge-sync
dsh --profile web --dump-config   # shows a "# == dsh-knowledge-sync" layer
dsh web

Documents land in ./knowledge beside wherever you launched, or wherever DSH_KNOWLEDGE_ROOT points. Override anything in the profile's cordis.patch.yml:

- id: knowledge
  config:
    root: /srv/project/knowledge

What a document looks like

---
id: "abc12345-t1"
title: "Why is the build red?"
session: "abc12345-0000-4000-8000-000000000000"
turn: 1
created: "2026-08-18T10:00:00.000Z"
kind: "raw"
outcome: "completed"
cwd: "/srv/project"
tools: ["bash"]
---

# Why is the build red?

## Question

Why is the build red?

## Answer

The lockfile was stale — `pnpm install` had not been re-run after the
dependency bump.

## Tools

- `bash` — {"command":"pnpm install"}

Reasoning is left out on purpose: a document records the conclusion, not the working that reached it. A round that committed no answer is not written at all — an abandoned turn records that something was attempted, not something learned.

Three kinds of document

kind Where it comes from Example body
raw A round that cleared the salience filter ## Question / ## Answer / ## Tools
note The agent called knowledge_note mid-work ## Finding / ## Evidence / ## Scope
distilled A kept round condensed by a small model call (opt-in) ## Summary / ## Finding / then the raw round as appendix

How recall works

The plugin does not paste the knowledge base into the conversation. A previous round is usually irrelevant to the current one, and injecting the lot would spend the context window on that irrelevance and invalidate the prompt prefix every time a round is written.

Instead an agent working in a directory with recorded rounds sees one short section:

Knowledge base — 12 documents from earlier conversation rounds for this workspace (/srv/project) are available. They are NOT included in this conversation.

Call knowledge_search when the task resembles work that may already have been done here — a recurring build failure, a decision that was already made, a file whose purpose was already established. Search reads the documents themselves, so a phrase from the conclusion will find its round. Then knowledge_read the ones worth reading in full. Prefer checking over repeating work, and prefer your own judgement over a stale document when the two disagree.

knowledge_search searches document bodies through the in-memory BM25 index — not just titles and tool names — and returns titles, kinds, tags, and a snippet of the match. Notes and distilled findings rank above raw transcripts, because a finding written down deliberately is worth more than a round that happened to record one. knowledge_search can also filter by kind, tag, and tool. knowledge_read returns one document in full, by id, and only for documents the same rule made visible.

A workspace with nothing recorded contributes no section at all. A pointer to an empty shelf teaches the model to stop believing the pointer.

Configuration

Row Field Meaning
knowledge root Where documents are written
redact.enabled Scrub credentials before they reach disk (default on)
redact.mask The replacement for a redacted value
redact.patterns Extra regular-expression patterns for redaction
knowledge-capture enabled Freeze rounds as they end
salience.minScore How a round earns its place; 0 keeps every round that has an answer
distill.enabled Condense a kept round with one small model call (default off)
distill.provider / distill.model The route to call when distillation is on
knowledge-note enabled Register the knowledge_note tool
knowledge-recall announce Tell the model the base exists
sameWorkspaceOnly Limit recall to the session's own directory
searchLimit Results per search
knowledge-http path Where the page reads from

Each row is independent: drop knowledge-http in a composition with no web server, or knowledge-recall to record without offering recall, and the rest still works.

Install note. The package is a Cordis bundle: its cordis.patch.yml must stay in step with its build output. Rebuild (pnpm run build) after changing source so lib/ carries every module the patch references (the capture, note, recall, http, distill, policy, redact, search and settings entries), then add dsh-knowledge-sync to your profile's dsh.profile.bundles and restate in your profile's cordis.patch.yml any row you override. A patch row pointing at a not-yet-built lib/<module>.js will fail the profile boot.

Config is optional. The store registers a knowledge settings namespace so the page's Config tab is writable. If no settings service is mounted, nothing changes behavior: the rows' Config defaults stay authoritative and the tab reports that live settings are unavailable.

Development

The repository is self-contained — it develops against the published @deepseek-ai/* packages, the same versions a dsh installation ships:

pnpm install
pnpm run typecheck
pnpm run test
pnpm run build

Pin those devDependencies exactly, never by range: the registry's latest tag for several harness packages points at a much older release than the CLI installs, and a range resolves to that stale set.

The tests run the real thing — a real agent loop and a scripted model — because the shape of a session log is the one thing this plugin cannot guess at.

Known limitations

  • Lexical search, not semantic. The in-memory BM25 index matches words (with CJK bigrams) — it cannot match a phrase it has never seen. Fitting in this data scale; the LLM seam has no embedding support yet.
  • Recall is per directory. Sessions in a subdirectory of a recorded workspace do not see it, because the match is exact.
  • No relation tracking yet. Documents can still contradict each other silently; the supersedes / staleness signals from the plan's third phase are not built.
  • Distillation is opt-in. Off by default; enabling it costs one small model call per kept round.
  • Documents are read-only on the page. The knowledge base is written by the conversations that produced it; a page that could rewrite history would make a document mean less than the round it froze. (Config is editable; documents are not.)

License

MIT

安装

🧩 让 Agent 自动装(推荐)

装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:

dsh plugin add dshbase-catalog

然后对 agent 说「帮我装 dsh-knowledge-sync」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。

该插件是 GitHub 源码(未发 npm)——直接从仓库装:

Web profile:

dsh plugin --profile web add github:liugu2023/dsh-knowledge-sync

Headless(CLI)profile:

dsh plugin --profile headless add github:liugu2023/dsh-knowledge-sync

实测报告

验证通过:从 GitHub 源码完成 L1 安装 + L2 加载 + L3 运行(dsh 0.1.0-rc.6)。

安全:尚未扫描——我们的每日静态扫描将很快覆盖它。

分享徽章

Developer 里更多

浏览全部 7819 个插件 →