dsh-maestro-memory

DSH PLUGIN记忆与知识

仓库 ddtcorex/dsh-maestro-memory · npm @ddtcorex/dsh-maestro-memory

记忆与知识 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

为 DeepSeek Harness 提供跨会话持久记忆与待办管理,支持全局/用户/项目/关键/每日五轨,确认门控写入与 Git 同步,原地采用 ~/.dsh/memories。

验证等级 L5 L5 · 运行验证通过
GitHub 星标 1 复刻 0 · 未关闭 issue 0
最近更新 2026-10-10 创建于 2026-08-24
README 8.5 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add @ddtcorex/[email protected]
兼容 DSH 版本0.2.0-rc.2 等 9 个版本版本不匹配时安装会报错
Node.js 要求^22.19.0 || >=24.0.0来自仓库 package.json 的 engines 字段
前置依赖@deepseek-ai/cordis@~4.0.4、@deepseek-ai/dsh-client-locale@^0.1.0-rc.6 || >=0.1.1-rc.0 <0.3.0-0 等 5 个需要同时安装的同级依赖
npm 包名@ddtcorex/dsh-maestro-memory可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-maestro-memory:DeepSeek Harness 的持久记忆与待办插件

  • 跨会话持久记忆
  • 五轨分类管理
  • 确认门控写入
  • Git 同步备份
  • 原地采用现有记忆

适用场景

记忆存储GitHub 集成

上游标签

ai-agentscordisdeepseek-harnessdshdsh-pluginmemorytodos

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-08): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ✓ 通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

仓库档案

记忆与知识
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方ddtcorex仓库 dsh-maestro-memory · 默认分支 master
分类记忆与知识memory
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言TypeScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue1 / 0 / 0收录时的数值,非实时
创建 / 更新2026-08-24 · 2026-10-10最后推送 2026-10-10
本站收录2026-08-25首次进入本站目录的时间

README 全文

8.5 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-maestro-memory

Durable memory and todos for DeepSeek Harness (DSH) — preserves ~/.dsh/memories in place.

> Give the AI cross-session durable memory and todos — the more you use it, the more it understands you.

  • Package: @ddtcorex/dsh-maestro-memory (cordis.patch.yml id maestro-memory)
  • Version: see package.json · Changelog: CHANGELOG.md

Requirements

  • Node.js ^22.19.0 || &gt;=24.0.0, pnpm 11+ (packageManager in package.json)
  • A DSH release inside the @deepseek-ai/dsh-client-* peer range declared in package.json

Install

pnpm install
pnpm run build   # -&gt; lib/
pnpm test        # vitest run

DSH profile (operator):

dsh plugin --profile web add link:/packages/dsh-maestro-memory
# production: dsh plugin --profile web add github:ddtcorex/dsh-maestro-memory#

cordis.patch.yml is shipped with the package, including a connection entry that declares webServer (DSH 0.2.x needs it before rpc.handle can register a channel). Do not duplicate it in the profile. Pin a release with @ddtcorex/dsh-maestro-memory@ when installing from npm, and run pnpm install &amp;&amp; pnpm build after every git pull of a link: checkout.

- insert:
- id: maestro-memory
name: &#x27;@ddtcorex/dsh-maestro-memory&#x27;
config:
memoryDir: null      # -&gt; ~/.dsh/memories
snapshotOrder: 500
autoMemory: { enabled: false, userMessage: true, desensitize: true } # opt-in
writeGuard: { enabled: false, threshold: 2 }  # per-turn write watchdog, opt-in

writeGuard is read once at apply() time — changing it needs a profile edit and a
host restart. threshold counts consecutive working human turns with no
daily/project write; any value below 1 is read as 1.

Tools

Tool Purpose
memory Five tracks memory/user/project/key/daily + archive/expand. key is gated via memory_suggest.
maestro_todo Durable cross-session todo store (four tracks life/work/project/daily with ids, smart view max 8). Named apart from the harness's own in-session task list todo_write.
memory_suggest Gated proposals to SUGGESTIONS.jsonl — requires human approve.

memory sanitizes sensitive fragments ([Filtered:API key/password/token/ID/phone], pure credential → content filtered).

System Prompt Snapshot

memory:snapshot (order 500) injects bounded deterministic context:

USER + MEMORY + KEY (branch-filtered) + Project Context (auto-recall top-4, 600 chars each, cap 1024) + Recent Daily (last 2 days, 512) + header + discipline note

Caps: memory 2048 / user 4096 / key 6144 / recentDaily 512 / autoRecall 1024, plus
per-section entry budgets memory 8 / user 8 / key 12 / recentDaily 2 / autoRecall 4.

A cap is hard in both dimensions. The newest entry is always kept — compacted
to head + [summary:…] when it carries a summary tag. An untagged entry larger
than twice its byte cap is truncated with an explicit …[truncated] marker
instead of being kept whole: before that rule, a single 2,293-byte global entry
owned the 2,048-byte section and pushed every other entry out of the prompt.

Cost reporting. renderSnapshotWithStats (the renderer behind
memory:snapshot) reports the bytes, entry count and excluded-entry count of
every section. The host keeps the last 50 renders in memory and returns them as
cost on /dsh-maestro-memory-health: samples, last, medianTotalBytes,
maxTotalBytes, medianBySection. Entry text is never retained — byte counts
only.

Write watchdog. With writeGuard.enabled, the host counts consecutive human
turns in which work happened but no daily/project entry was written
(agent/turn-stopping). Three things must hold for a turn to count:

  1. it was opened by a direct human prompt — goal-continuation rounds
    (source.kind === &#x27;goal&#x27;) and injected context (&#x27;plugin&#x27;, e.g. wake
    notices) carry no per-turn duty;
  2. it is not a subagent session;
  3. it dispatched at least one tool call. A turn that only answered a
    question is conversation, not work, so no debt accrues — otherwise the
    watchdog would push the model to write filler entries, exactly what the
    discipline note forbids.

Once the gap reaches threshold, the snapshot gains a
# ⚠️ Memory Write Backlog section immediately before the discipline note, and
it stays until a write succeeds.
Only a write that actually recorded something counts — a deduplicated add does
not. The alert text is static (threshold only, never the live count), so one
open gap costs at most two tail snapshots: appear, then disappear.

Subagent sessions (session.header.origin === &#x27;subagent&#x27;) get a restrained
per-achievement cadence instead of the per-turn duty, and never see the backlog
alert. The shared memory context (MEMORY / USER / KEY / Project Context) is
still injected for them.

The rendered snapshot collapses brace runs of two or more to a single brace: DSH interpolates each prompt context and fails the whole turn on a {{name}} group with a malformed or unregistered name, so free-form memory prose never reaches it as template syntax.

UI & RPC

One conversation.view slot (maestro-memory, order 40) with tabs Memory / Queue / Todo / Skills / Health. Health shows coverage, daily last 7d, longest + 5-dim score S/R/J/C/Safety (composite min*0.4+mean*0.6).

The Memory tab lists each track read-only and carries a manual add composer:
pick a track, type an entry, press Add. It posts memory.mutate with
action: &#x27;add&#x27;, so it needs no model round-trip; drafts are kept per track and
the button stays disabled while the entry is empty or while key/project has
no cwd. The model's key gate is exec.agent-scoped on the host, so it stays in
force — a human writing key here is equivalent to approving a queued
suggestion.

RPC: /dsh-maestro-memory + loopback /dsh-maestro-memory-health + /dsh-maestro-memory-propose.

Maintenance endpoints on /dsh-maestro-memory (both preview-first: dryRun
defaults to true and an actual write needs confirm: true):

Endpoint What it does
memory.repair Splits entries glued without the § delimiter, drops exact duplicates and moves a trailing [summary:…] to its canonical header position, across every store file. Reports files / changed / split / deduped / relocated.
memory.maintenance Plans (and optionally applies) the archive of the oldest entries of memory/user/key/project beyond DEFAULT_ARCHIVE_POLICY (keep-bytes + max-age). Overgrown entries move to the track's *-archive.md; they are never dropped.

Archive vs. the two-machine sync. sync/ merges MEMORY.md, KEY.md and KEY-archive.md
as a union — it never drops a version, and project/global entries carry no [id:…], so a
deletion on one machine is indistinguishable from "the other machine has not seen it yet".
Consequences worth knowing before archiving:

  • Archiving on ONE machine only is not stable: the next union merge pulls the archived entries
    back into the live file, because the peer still carries them there. Archive on every machine
    (same policy) so both sides agree and the union is a no-op, or archive with sync disabled.
  • MEMORY-archive.md is not in the merge set (only KEY-archive.md is), so a project-track
    archive stays local. That is safe for the live file but means the two machines' archive files
    can legitimately differ.
  • The archive does not change what the prompt shows: # Project Key Memory is capped at 6,144 B
    and # Project Context at the newest 4 entries, both far below the archive policy's keep
    budget. Verified on the live store: rendering was byte-identical before and after the run.

One repair pass runs once at boot, gated by a flag file under
/.maestro-memory/ (maestroMetaDir): delimiter-repaired-v3 covers
every store file and writes its run report into the flag. (v1 was a KEY-only pass
that had been a silent no-op — it was called with a bogus cwd — and v2 covered
the store without the stray-delimiter split; the versioned flag is what lets an
existing machine pick up a new repair rule exactly once.)

Maintenance

Maintenance runs through the memory.repair and memory.maintenance RPC endpoints
described under UI & RPC above (preview-first, confirm: true to write). There are
no standalone maintenance scripts; scripts/ only holds the build helper.

常见问题

8 问
答案由本站依据条目字段整理,不引用上游原文
dsh-maestro-memory 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add @ddtcorex/[email protected]` 即可。对应的 npm 包名是 `@ddtcorex/dsh-maestro-memory`。

dsh-maestro-memory 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-maestro-memory 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

dsh-maestro-memory 支持哪些 DSH 版本?

上游记录的兼容版本包括 0.2.0-rc.2、0.1.7-rc.2、0.1.7-rc.1、0.1.6-alpha.2、0.1.6-alpha.1、0.1.5-rc.2、0.1.3-alpha.2、0.1.3-alpha.1。版本较多,只列出前 8 个。

dsh-maestro-memory 需要什么运行环境?

Node.js ^22.19.0 || >=24.0.0;需要同时安装 @deepseek-ai/cordis@~4.0.4、@deepseek-ai/dsh-client-locale@^0.1.0-rc.6 || >=0.1.1-rc.0 <0.3.0-0、@deepseek-ai/dsh-client-ui-conversation@^0.1.0-rc.6 || >=0.1.1-rc.0 <0.3.0-0、@deepseek-ai/dsh-client-ui-slots@^0.1.0-rc.6 || >=0.1.1-rc.0 <0.3.0-0、react@^18.2.0。环境不满足时安装会失败,建议先确认本机版本。

dsh-maestro-memory 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-maestro-memory 有哪些功能?

跨会话持久记忆、五轨分类管理、确认门控写入、Git 同步备份、原地采用现有记忆。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

记忆与知识
按星标排序,可作替代方案

ruflo

ruflo

L3 · 安装规范通过 7.4 万 星

OpenViking

OpenViking

面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`vik

L3 · 安装规范通过 3.9 万 星

WeKnora

WeKnora

把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己

L4 · 沙盒安装通过 3.3 万 星

distilly

distilly

Distilly — Distill how they think into reusable Skills for any Agent o

L4 · 沙盒安装通过 2.5 万 星

EverOS

EverOS

L4 · 沙盒安装通过 1.3 万 星

MemOS

MemOS

L4 · 沙盒安装通过 1.2 万 星

ddtcorex 的其它插件

6 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-08。