dsh-memoir 0.5.3 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +29 -11
- package/README.md +29 -11
- package/cordis.patch.yml +9 -2
- package/lib/client.js +331 -84
- package/lib/client.js.map +3 -3
- package/lib/index.js +61 -36
- package/lib/retrieval.d.ts +6 -1
- package/lib/retrieval.js +12 -0
- package/lib/routes.d.ts +9 -8
- package/lib/routes.js +3 -3
- package/lib/settings.d.ts +41 -19
- package/lib/settings.js +120 -48
- package/lib/snapshot.d.ts +8 -1
- package/lib/snapshot.js +18 -6
- package/lib/tools.d.ts +3 -1
- package/lib/tools.js +10 -4
- package/package.json +5 -2
package/README.en.md
CHANGED
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
> Cache-aware local project memory for DeepSeek Harness.
|
|
10
10
|
|
|
11
11
|
- **Local-only** — all data stays on your machine (`~/.dsh/dsh-memoir.json` + per-project `PROJECT_MEMORY.md`)
|
|
12
|
+
- **Zero regular runtime dependencies** — the npm package has no `dependencies`; its core relies only on DSH platform contracts and the Node.js standard library
|
|
12
13
|
- **Zero external memory service** — no vector database, no embedding API, no cloud memory service
|
|
13
14
|
- **Bounded hot-memory injection** — token-budgeted Hot Memory is injected into the system prompt (default 900/1200)
|
|
14
15
|
- **Ranked local recall** — inverted index + BM25 local ranked retrieval; `memoir_read` fetches long-tail history on demand
|
|
15
|
-
- **Web GUI** — a sidebar
|
|
16
|
+
- **Web GUI** — a bilingual sidebar panel with complete lifecycle editing, project/global browsing, BM25 search, Hot Memory, diagnostics, and live settings
|
|
16
17
|
|
|
17
18
|
## Quick Start
|
|
18
19
|
|
|
@@ -81,11 +82,16 @@ need long-tail history? memoir_read (local relevance-ranked recall)
|
|
|
81
82
|
|
|
82
83
|
**Session Snapshot freezing semantics**: one session's injected text is built once and frozen (stable prompt prefix, maximizing prompt-prefix cache hits); the current session does not re-consume memory it just wrote, and a new session rebuilds and sees the latest memory. Since v0.4.2, when there is no unique session identity (session.id / agent.id), freezing is skipped — a cache miss beats wrongly reusing another session's snapshot.
|
|
83
84
|
|
|
84
|
-
## v0.5.
|
|
85
|
+
## v0.5.4 Complete GUI, bilingual settings, and Web UI integration
|
|
85
86
|
|
|
86
87
|
- The development and peer-dependency baseline is `@deepseek-ai/dsh-* 0.1.1-rc.2`.
|
|
87
|
-
-
|
|
88
|
-
-
|
|
88
|
+
- Add/edit forms now cover `importance`, `pinned`, `tags`, and `supersedes`; cards expose importance, tags, and replacement relationships, with a new section filter.
|
|
89
|
+
- Memory Settings now appears both inside the Memory panel and under Settings → Web UI Plugins. It covers agent injection, auto-distill, Hot Memory, recall, session snapshots, and the BM25 query cache.
|
|
90
|
+
- Every saved setting applies live and persists in `~/.dsh/dsh-memoir.settings.json`; version-1 settings remain readable and upgrade to version 2 only on the next save.
|
|
91
|
+
- The GUI follows DSH's `<html lang>` and switches between Chinese and English without a reload, including the sidebar entry, panel, and Settings card.
|
|
92
|
+
- The panel and sidebar emit `data-dsh-plugin="memoir"` / `data-dsh-part` semantic attributes for the dsh-web-ui v0.3 skin contract. Sidebar mounting is idempotent and self-heals after a complete shell rebuild.
|
|
93
|
+
- Center-panel coordination now responds to any sibling through the generic `dsh-panel-activate` protocol instead of recognizing only SSH and Task Board.
|
|
94
|
+
- Auto-distill retains per-agent worked-turn intervals, time cooldowns, and tool-call thresholds; defaults `1 / 0 / 1` preserve prior behavior.
|
|
89
95
|
- Store format v3 migrates v2 entries without changing their `id`, content, or timestamp. The first mutation materializes `importance`, `pinned`, `status`, `supersedes`, and `tags`; startup reads do not rewrite old files.
|
|
90
96
|
- Retrieval defaults to `active`. Archived and superseded history is retained and can be inspected from the Web panel. Explicit `supersedes` marks its targets as superseded; history is never deleted automatically.
|
|
91
97
|
- Agents can use `memoir_update` to edit an entry's section, title, content, and lifecycle in place; the Web panel also supports editing, pinning, marking superseded, archiving, and restoring.
|
|
@@ -118,15 +124,27 @@ Curated-query Top-5 hit rate: 100% (quality gate ≥ 90%, see `test/recall-quali
|
|
|
118
124
|
|
|
119
125
|
## GUI
|
|
120
126
|
|
|
121
|
-
The
|
|
127
|
+
The Project / Global / Search / Add / Delete / Diagnostics architecture now forms a complete management surface:
|
|
122
128
|
|
|
123
129
|
- **Search unified on RetrievalEngine**: a non-empty query calls `GET /api/dsh-memoir/search` — the same BM25 ranking as the agent's `memoir_read` — results ordered by relevance with scores shown
|
|
124
130
|
- **Hot Memory Inspector**: expand to see the Hot Memory that will actually be injected for the current workspace (Actions / Lessons / Recent state) — i.e. "what exactly the next session inherits"
|
|
125
131
|
- **Retrieval Diagnostics**: Retrieval Index (docs/terms/epoch), Query Cache (hits/misses/evictions/hit rate/size/capacity), Last Query (latency/returned), Session Snapshot (hash/createdAt/storeRevision)
|
|
126
|
-
- **
|
|
132
|
+
- **Complete lifecycle forms (v0.5.4)**: add and edit section, title, content, importance, pinning, tags, and explicit replacement relationships; filter by status and section
|
|
133
|
+
- **Complete live settings (v0.5.4)**: adjust agent injection, auto-distill, Hot Memory target/hard limits, recall defaults/maxima, session snapshots, and query cache immediately
|
|
134
|
+
- **Settings integration (v0.5.4)**: the same bilingual card mounts in the Memory panel and Settings → Web UI Plugins, and redraws immediately when the page language changes
|
|
127
135
|
|
|
128
136
|
## Screenshots
|
|
129
137
|
|
|
138
|
+
**v0.5.4 memory management**: importance, tags, replacement relationships, status/section filters, and lifecycle actions in one panel.
|
|
139
|
+
|
|
140
|
+

|
|
141
|
+
|
|
142
|
+
**v0.5.4 complete live settings**: the English Settings → Web UI Plugins card, switched live from the same Chinese-capable GUI.
|
|
143
|
+
|
|
144
|
+

|
|
145
|
+
|
|
146
|
+
The following screenshots retain the feature history of earlier releases:
|
|
147
|
+
|
|
130
148
|
**1. Plugin active & overall UI**: the sidebar gains a "Memory" entry (alongside SSH / Task Board, mutually exclusive panels); clicking opens the memory panel in the center column.
|
|
131
149
|
|
|
132
150
|

|
|
@@ -151,7 +169,7 @@ The v0.4 Project / Global / Search / Add / Delete / Diagnostics architecture is
|
|
|
151
169
|
|
|
152
170
|
```text
|
|
153
171
|
~/.dsh/dsh-memoir.json ← structured JSON (single source of truth / SSOT)
|
|
154
|
-
~/.dsh/dsh-memoir.settings.json ←
|
|
172
|
+
~/.dsh/dsh-memoir.settings.json ← complete runtime overrides saved by either GUI settings surface
|
|
155
173
|
<workspace>/PROJECT_MEMORY.md ← human-readable projection regenerated from the JSON (git-friendly)
|
|
156
174
|
|
|
157
175
|
No cloud memory DB · No embedding API · No vector DB
|
|
@@ -184,7 +202,7 @@ Add a `config` block on the plugin row in `cordis.patch.yml` (all optional; defa
|
|
|
184
202
|
|
|
185
203
|
The three auto-distill frequency conditions are combined with AND and isolated per agent. Idle, aborted, subagent, and prior-`memoir_record` turns do not advance the interval. A worked turn below `autoDistillMinTools` advances the interval but cannot trigger by itself. Cooldown changes only after a successful steer.
|
|
186
204
|
|
|
187
|
-
|
|
205
|
+
Fields in `cordis.patch.yml` remain startup defaults. Since v0.5.4, the Memory panel or Settings → Web UI Plugins can edit every runtime field except the master `enabled` switch. Saving atomically writes `~/.dsh/dsh-memoir.settings.json`; subsequent requests and turns read the new values immediately, and shrinking snapshot/query-cache capacities evicts the oldest entries at once. Already frozen session snapshots are not rewritten when budgets change, preserving prompt-prefix cache stability. Restore Startup Config removes the Web override and returns to the profile values resolved when the plugin mounted.
|
|
188
206
|
|
|
189
207
|
## Design Trade-offs
|
|
190
208
|
|
|
@@ -194,7 +212,7 @@ The auto-distill fields in `cordis.patch.yml` are startup defaults. Since v0.5.3
|
|
|
194
212
|
- **Multi-process safety**: store record/remove runs inside a cross-process critical section on `~/.dsh/dsh-memoir.lock` (exclusive O_EXCL creation with timeout); the section force-reloads from disk before mutating, so two interleaved DSH processes lose no updates (v0.4.2).
|
|
195
213
|
- **Windows paths**: canonical keys are fully lowercased (`C:\A` / `c:\a\` / `C:/A` share one bucket) while display paths keep the original casing (v0.4.2).
|
|
196
214
|
- **GUI and Agent share one engine**: panel search and `memoir_read` use the same RetrievalEngine instead of separate filter logic (v0.4.2).
|
|
197
|
-
- **Auto-distill cadence**: the default still reminds after every worked turn; research-heavy sessions can combine interval, cooldown, and activity thresholds and tune them immediately from
|
|
215
|
+
- **Auto-distill cadence**: the default still reminds after every worked turn; research-heavy sessions can combine interval, cooldown, and activity thresholds and tune them immediately from either GUI settings surface (v0.5.4).
|
|
198
216
|
|
|
199
217
|
## Use Cases
|
|
200
218
|
|
|
@@ -225,7 +243,7 @@ Each plugin has its own focus — pick per need; no "which is stronger" narrativ
|
|
|
225
243
|
pnpm install # install devDeps (typescript, esbuild, @deepseek-ai/* type packages)
|
|
226
244
|
pnpm run build # tsc builds the host + esbuild builds the client bundle
|
|
227
245
|
pnpm run typecheck # full type check (src + test)
|
|
228
|
-
pnpm test #
|
|
246
|
+
pnpm test # 160 tests: store (incl. multi-process lock) / settings / snapshot / selector / retrieval / tools / routes / auto-distill / GUI mounting & bilingual behavior / integration / bundle protocol & purity / release notes
|
|
229
247
|
npm run bench # benchmark (100/1k/10k/100k entries); results written to bench/report.md
|
|
230
248
|
```
|
|
231
249
|
|
|
@@ -259,7 +277,7 @@ Bug reports must include screenshot / log evidence, a smoke test, code reference
|
|
|
259
277
|
|
|
260
278
|
## Release
|
|
261
279
|
|
|
262
|
-
Current stable release: **v0.5.
|
|
280
|
+
Current stable release: **v0.5.4** (2026-08-23) · [GitHub Release](https://github.com/Qinling-Melon-Farmers/dsh-memoir/releases/tag/v0.5.4) · [npm](https://www.npmjs.com/package/dsh-memoir/v/0.5.4). Full history is in [CHANGELOG.md](./CHANGELOG.md).
|
|
263
281
|
|
|
264
282
|
Every version keeps Chinese and English release notes in sync. GitHub Releases show Chinese by default and place the English notes in a collapsible `English` section.
|
|
265
283
|
|
package/README.md
CHANGED
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
> Cache-aware local project memory for DeepSeek Harness.
|
|
10
10
|
|
|
11
11
|
- **Local-only**:全部数据留在本机(`~/.dsh/dsh-memoir.json` + 项目内 `PROJECT_MEMORY.md`)
|
|
12
|
+
- **零普通运行时依赖**:npm 包没有 `dependencies`,核心逻辑只依赖 DSH 平台契约与 Node.js 标准库
|
|
12
13
|
- **Zero external memory service**:无向量数据库、无 embedding API、无云端记忆服务
|
|
13
14
|
- **Bounded hot-memory injection**:token 预算内的 Hot Memory 自动注入 system prompt(默认 900/1200)
|
|
14
15
|
- **Ranked local recall**:倒排索引 + BM25 本地排序召回,`memoir_read` 按需检索长尾历史
|
|
15
|
-
- **Web GUI
|
|
16
|
+
- **Web GUI**:中英双语侧边栏面板——完整生命周期编辑、项目/全局浏览、BM25 搜索、Hot Memory、诊断和实时设置
|
|
16
17
|
|
|
17
18
|
## Quick Start
|
|
18
19
|
|
|
@@ -81,11 +82,16 @@ memoir_record 沉淀工作 / 教训 / 下一步
|
|
|
81
82
|
|
|
82
83
|
**Session Snapshot 冻结语义**:同一 session 的注入文本只构建一次并冻结(prompt 前缀稳定,最大化 prompt-prefix cache 命中);当前 session 不重新消费自己刚写的记忆,新 session 重建并看到最新记忆。v0.4.2 起,没有唯一会话身份(session.id / agent.id)时**不做冻结**——宁可 cache miss,不可跨 session 错复用旧快照。
|
|
83
84
|
|
|
84
|
-
## v0.5.
|
|
85
|
+
## v0.5.4 完整 GUI、双语设置与 Web UI 适配
|
|
85
86
|
|
|
86
87
|
- 当前开发基线为 `@deepseek-ai/dsh-* 0.1.1-rc.2`;peer dependency 与开发依赖已统一到 rc2。
|
|
87
|
-
-
|
|
88
|
-
-
|
|
88
|
+
- 新增/编辑表单现已完整覆盖 `importance`、`pinned`、`tags` 与 `supersedes`;列表显示重要度、标签和替代关系,并新增 section 筛选。
|
|
89
|
+
- 「记忆设置」同时出现在记忆面板和 Settings → Web UI 插件,覆盖 agent 注入、自动蒸馏、Hot Memory、召回、会话快照与 BM25 查询缓存。
|
|
90
|
+
- 保存后的所有设置实时生效并持久化到 `~/.dsh/dsh-memoir.settings.json`;v1 设置文件兼容读取,首次保存再升级到 v2。
|
|
91
|
+
- GUI 根据 DSH 的 `<html lang>` 在中文/英文之间即时切换,无需刷新;侧栏入口、面板和 Settings 卡保持同一语言。
|
|
92
|
+
- 面板与侧栏输出 `data-dsh-plugin="memoir"` / `data-dsh-part` 语义属性,支持 dsh-web-ui v0.3 皮肤契约;侧栏挂载具备幂等和整棵 shell 重建自愈。
|
|
93
|
+
- 中心面板通过通用 `dsh-panel-activate` 协议响应任意兄弟面板,不再只识别 SSH / Task Board。
|
|
94
|
+
- 自动蒸馏继续支持按 agent 配置 worked-turn 间隔、时间冷却和工具调用阈值;默认值 `1 / 0 / 1` 与旧版行为一致。
|
|
89
95
|
- 存储格式从 v2 迁移到 v3:旧条目保持原有 `id`、内容和时间,首次变更时补齐 `importance`、`pinned`、`status`、`supersedes` 与 `tags`;启动读取不会重写旧文件。
|
|
90
96
|
- 默认只召回 `active` 条目;归档和被替代条目保留在历史中,可在 Web 面板切换状态查看。显式 `supersedes` 会把目标条目标记为 `superseded`,不会自动删除历史。
|
|
91
97
|
- Agent 可用 `memoir_update` 原地编辑条目的分类、标题、正文和生命周期;Web 面板也支持编辑、置顶、标记过时、归档与恢复。
|
|
@@ -118,15 +124,27 @@ curated 查询 Top-5 命中率 100%(质量门禁 ≥90%,见 `test/recall-qua
|
|
|
118
124
|
|
|
119
125
|
## GUI
|
|
120
126
|
|
|
121
|
-
|
|
127
|
+
Project / Global / Search / Add / Delete / Diagnostics 架构已经扩展为完整管理面:
|
|
122
128
|
|
|
123
129
|
- **搜索统一走 RetrievalEngine**:query 非空时面板调用 `GET /api/dsh-memoir/search`,与 agent 的 `memoir_read` 共用同一套 BM25 排序,结果按相关性排列并显示分数
|
|
124
130
|
- **Hot Memory Inspector**:展开查看当前工作区实际会被注入的 Hot Memory(Actions / Lessons / Recent state),即「下一会话到底自动继承什么」
|
|
125
131
|
- **Retrieval Diagnostics**:Retrieval Index(docs/terms/epoch)、Query Cache(hits/misses/evictions/hit rate/size/capacity)、Last Query(latency/returned)、Session Snapshot(hash/createdAt/storeRevision)
|
|
126
|
-
-
|
|
132
|
+
- **完整生命周期表单(v0.5.4)**:新建与编辑均支持分类、标题、正文、重要度、置顶、标签和显式替代关系;支持状态与分类双重筛选
|
|
133
|
+
- **完整实时设置(v0.5.4)**:agent 注入、auto-distill、Hot Memory 目标/硬上限、读取默认/最大条数、会话快照和查询缓存均可即时调整
|
|
134
|
+
- **Settings 集成(v0.5.4)**:同一双语设置卡同时挂载到记忆面板和 Settings → Web UI 插件;页面切换语言时即时重绘
|
|
127
135
|
|
|
128
136
|
## 界面预览
|
|
129
137
|
|
|
138
|
+
**v0.5.4 记忆管理**:重要度、标签、替代关系、状态/分类筛选与完整生命周期操作集中在同一面板。
|
|
139
|
+
|
|
140
|
+

|
|
141
|
+
|
|
142
|
+
**v0.5.4 完整实时设置**:Settings → Web UI 插件中的中文设置卡;README English 展示同一卡片的英文实时切换效果。
|
|
143
|
+
|
|
144
|
+

|
|
145
|
+
|
|
146
|
+
以下图片保留早期版本的功能演进记录:
|
|
147
|
+
|
|
130
148
|
**1. 插件生效与整体 UI**:侧边栏出现「记忆」入口(与 SSH / 任务看板同列、互斥展开),点击后在中心列打开记忆面板。
|
|
131
149
|
|
|
132
150
|

|
|
@@ -151,7 +169,7 @@ curated 查询 Top-5 命中率 100%(质量门禁 ≥90%,见 `test/recall-qua
|
|
|
151
169
|
|
|
152
170
|
```text
|
|
153
171
|
~/.dsh/dsh-memoir.json ← 结构化 JSON(唯一事实源 / SSOT)
|
|
154
|
-
~/.dsh/dsh-memoir.settings.json ←
|
|
172
|
+
~/.dsh/dsh-memoir.settings.json ← 两个 GUI 设置面保存的完整运行时覆盖
|
|
155
173
|
<工作区>/PROJECT_MEMORY.md ← 由 JSON 重新生成的人类可读投影(git 友好)
|
|
156
174
|
|
|
157
175
|
No cloud memory DB · No embedding API · No vector DB
|
|
@@ -184,7 +202,7 @@ JSON 是 source of truth,Markdown 是 generated projection:面板、工具
|
|
|
184
202
|
|
|
185
203
|
三个 auto-distill 频率条件按 AND 关系判定并按 agent 隔离。idle、aborted、subagent、已调用 `memoir_record` 的 turn 不推进间隔计数;低于 `autoDistillMinTools` 的 worked turn 会推进间隔,但自身不能触发提醒。冷却只在 steer 成功后更新。
|
|
186
204
|
|
|
187
|
-
`cordis.patch.yml`
|
|
205
|
+
`cordis.patch.yml` 中的字段是启动默认值。v0.5.4 起,可从记忆面板或 Settings → Web UI 插件修改除总开关 `enabled` 外的全部运行时字段:保存会原子写入 `~/.dsh/dsh-memoir.settings.json`,后续请求或 turn 立即读取;缩小快照/查询缓存容量会立即淘汰最旧项。已冻结的 session snapshot 不会因预算变化而重写,以继续保证 prompt-prefix cache 稳定。「恢复启动配置」会删除 Web 覆盖并回到本次挂载时解析出的 profile 值。
|
|
188
206
|
|
|
189
207
|
## Design Trade-offs
|
|
190
208
|
|
|
@@ -194,7 +212,7 @@ JSON 是 source of truth,Markdown 是 generated projection:面板、工具
|
|
|
194
212
|
- **多进程安全**:store 的 record/remove 走 `~/.dsh/dsh-memoir.lock` 跨进程临界区(O_EXCL 独占创建 + 超时),临界区内强制从磁盘重读再改,两个 DSH 进程交错写入不丢更新(v0.4.2)。
|
|
195
213
|
- **Windows 路径**:canonical key 全小写(`C:\A` / `c:\a\` / `C:/A` 一个桶),display path 保留原始大小写(v0.4.2)。
|
|
196
214
|
- **GUI 与 Agent 同源**:面板搜索与 `memoir_read` 共用 RetrievalEngine,不再各写一套过滤逻辑(v0.4.2)。
|
|
197
|
-
- **自动收尾节奏**:默认仍逐 worked turn
|
|
215
|
+
- **自动收尾节奏**:默认仍逐 worked turn 提醒;研究型会话可组合轮次间隔、冷却与活动阈值降低打扰,并从两个 GUI 设置面即时调节(v0.5.4)。
|
|
198
216
|
|
|
199
217
|
## Use Cases
|
|
200
218
|
|
|
@@ -225,7 +243,7 @@ JSON 是 source of truth,Markdown 是 generated projection:面板、工具
|
|
|
225
243
|
pnpm install # 安装 devDeps(typescript、esbuild、@deepseek-ai/* 类型包)
|
|
226
244
|
pnpm run build # tsc 构建 host + esbuild 构建 client bundle
|
|
227
245
|
pnpm run typecheck # 全量类型检查(src + test)
|
|
228
|
-
pnpm test #
|
|
246
|
+
pnpm test # 160 项测试:store(含多进程锁) / settings / snapshot / selector / retrieval / tools / routes / 自动收尾 / GUI 挂载与双语 / 集成 / bundle 协议与纯净性 / 发布说明
|
|
229
247
|
npm run bench # benchmark(100/1k/10k/100k 条目),结果写入 bench/report.md
|
|
230
248
|
```
|
|
231
249
|
|
|
@@ -260,7 +278,7 @@ PR 请先提 Issue 讨论。
|
|
|
260
278
|
|
|
261
279
|
## Release
|
|
262
280
|
|
|
263
|
-
当前稳定版:**v0.5.
|
|
281
|
+
当前稳定版:**v0.5.4**(2026-08-23) · [GitHub Release](https://github.com/Qinling-Melon-Farmers/dsh-memoir/releases/tag/v0.5.4) · [npm](https://www.npmjs.com/package/dsh-memoir/v/0.5.4)。完整历史见 [CHANGELOG.md](./CHANGELOG.md)。
|
|
264
282
|
|
|
265
283
|
每个版本的更新日志均同步维护中英文;GitHub Release 默认展开中文,英文说明收纳在可折叠的 `English` 区域。
|
|
266
284
|
|
package/cordis.patch.yml
CHANGED
|
@@ -19,8 +19,15 @@
|
|
|
19
19
|
# autoDistillEvery: 1 # remind at most once per N worked turns
|
|
20
20
|
# autoDistillCooldownMin: 0 # minimum minutes between successful reminders
|
|
21
21
|
# autoDistillMinTools: 1 # minimum tool calls on the triggering turn
|
|
22
|
-
#
|
|
23
|
-
#
|
|
22
|
+
# All fields except enabled are startup defaults. v0.5.4+ can persist complete
|
|
23
|
+
# live overrides from the Memory panel or Settings -> Web UI Plugins:
|
|
24
|
+
# hotMemoryTokens: 900
|
|
25
|
+
# hotMemoryMaxTokens: 1200
|
|
26
|
+
# readDefaultLimit: 8
|
|
27
|
+
# readMaxLimit: 30
|
|
28
|
+
# sessionSnapshotMax: 128
|
|
29
|
+
# queryCacheSize: 128
|
|
30
|
+
# Overrides live in ~/.dsh/dsh-memoir.settings.json and can be reset.
|
|
24
31
|
- insert:
|
|
25
32
|
- id: memoir
|
|
26
33
|
name: dsh-memoir
|