dsh-memento 0.5.7 → 0.5.9
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/CHANGELOG.md +35 -21
- package/README.es.md +1 -1
- package/README.hi.md +1 -1
- package/README.md +1 -1
- package/README.pt.md +1 -1
- package/README.zh.md +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.9] - 2026-09-08
|
|
9
|
+
|
|
10
|
+
### Docs
|
|
11
|
+
|
|
12
|
+
- Repair GBK mojibake in historical CHANGELOG entries: em dashes, arrows, comparison signs, the multiplication sign, a mangled emoji (U+9983 U+E765), and the mangled Chinese appendix label (U+6D93 U+E15F U+6783) are restored to the clean pre-corruption text; no behavior change.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## [0.5.8] - 2026-09-07
|
|
16
|
+
|
|
17
|
+
### Docs
|
|
18
|
+
|
|
19
|
+
- Fix the DSH plugin badge URL: shields.io rejects the four-segment static badge form with "404 badge not found"; the label now uses the documented double-dash form (`dsh--plugin`), rendering identically; no behavior change.
|
|
20
|
+
|
|
21
|
+
|
|
8
22
|
## [0.5.7] - 2026-09-07
|
|
9
23
|
|
|
10
24
|
### Fixed
|
|
@@ -32,8 +46,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
32
46
|
|
|
33
47
|
### Added
|
|
34
48
|
|
|
35
|
-
- **Host settings panel integration**
|
|
36
|
-
- **Hideable floating panel button**
|
|
49
|
+
- **Host settings panel integration** — when the DSH settings service is mounted, the plugin registers the `dsh-memento` settings namespace (every `Config` field except `enabled`, plus a new `panel.enabled`), and its browser half contributes a **top-level `dsh-memento` entry to the DSH settings sidebar** (via the public `settings.section` slot, like the built-in sections). Edits persist to the settings user layer (`settings.yaml`) with staged-draft save/discard/per-field reset semantics. Nearly everything applies live: write policies, language, budgets, limits, proposals, panel; `dbPath` / `auditRetentionDays` apply by reopening the store (old one closed safely); `retrieval.vector` swaps the retriever in place; only `snapshotOrder` needs a DSH reload (changes are recorded as a `settings-startup-fields` audit row). Without the settings service the plugin behaves exactly as composed.
|
|
50
|
+
- **Hideable floating panel button** — new `panel.enabled` config (default `true`); `false` stops the web panel from rendering its 🧠 entry button (addresses upstream issue #7). The panel probes its own `/api/memento/entries` response at startup and falls back to showing the button when the probe fails.
|
|
37
51
|
|
|
38
52
|
### Changed
|
|
39
53
|
|
|
@@ -61,9 +75,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
61
75
|
|
|
62
76
|
### Added
|
|
63
77
|
|
|
64
|
-
- **Embedding Provider seam (`ctx.memoryEmbedding`)**
|
|
65
|
-
- **Retrieval Provider seam (`ctx.memoryRetrieval`)**
|
|
66
|
-
- **stdio MCP server export**
|
|
78
|
+
- **Embedding Provider seam (`ctx.memoryEmbedding`)** — new `lib/embedding.mjs` registry ships a deterministic fake-hash provider by default, so third-party plugins can register real embedding backends behind the same Service Definition.
|
|
79
|
+
- **Retrieval Provider seam (`ctx.memoryRetrieval`)** — new `lib/retrieval.mjs` registry keeps the built-in substring retriever as the zero-dependency main path and adds an optional `VectorRetriever` for semantic recall, enabled when `config.retrieval.vector` is `true` and an embedding provider is detected (graceful fallback to substring otherwise).
|
|
80
|
+
- **stdio MCP server export** — new `bin/mcp-server.mjs` and `lib/mcp.mjs` expose the memory seam as an MCP server through the `dsh-memento-mcp` bin.
|
|
67
81
|
|
|
68
82
|
## [0.4.5] - 2026-08-23
|
|
69
83
|
|
|
@@ -89,7 +103,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
89
103
|
|
|
90
104
|
### Changed
|
|
91
105
|
|
|
92
|
-
- `package.json#dshWorkshop.lifecycle.activation` upgraded from `restart-profile` to `hot-reload`: with the panel routes riding the plugin fiber since 0.4.1, dispose-and-reactivate is fully clean. Proven by a Loader-level hot-reload composition test that drives `Include.refresh()`
|
|
106
|
+
- `package.json#dshWorkshop.lifecycle.activation` upgraded from `restart-profile` to `hot-reload`: with the panel routes riding the plugin fiber since 0.4.1, dispose-and-reactivate is fully clean. Proven by a Loader-level hot-reload composition test that drives `Include.refresh()` — the same transaction the HMR watcher triggers — through a `language` en → zh → en cycle against a duplicate-strict mock `webServer`, asserting the memory seam, the re-applied config, and the routes re-registering without a duplicate route.
|
|
93
107
|
|
|
94
108
|
## [0.4.1] - 2026-08-19
|
|
95
109
|
|
|
@@ -101,33 +115,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
101
115
|
|
|
102
116
|
### Added
|
|
103
117
|
|
|
104
|
-
- **dsh-memory-protocol v1**
|
|
105
|
-
- **Protocol/implementation separation**
|
|
106
|
-
- **Adapter registry `ctx.memoryAdapters`**
|
|
107
|
-
- **Protocol conformance suite**
|
|
108
|
-
- **Upstream proposal material**
|
|
118
|
+
- **dsh-memory-protocol v1** — the community rehearsal of the DSH memory protocol: normative spec in `docs/protocol-v1.md` (+ 中文), machine-readable JSON Schema in `docs/schemas/dsh-memory-protocol-v1.schema.json`, entry spec extended with `tags` (≤16 × ≤32 chars) and a per-entry `version` that increments on every `replace` (store schema v4, forward-migrated).
|
|
119
|
+
- **Protocol/implementation separation** — write semantics moved into `lib/protocol.mjs` (`MemoryProtocolCore`, zero DSH dependencies); `MemoryService` is now a thin subclass that only injects the approval transport and the session-event emission gate. Behavior is unchanged.
|
|
120
|
+
- **Adapter registry `ctx.memoryAdapters`** — reversible `register()`/`list()`/`adapt()`/`export()` plus three built-in reference adapters: `mem0`, `hermes-memory-md`, `claude-code-memory-md` (pure data converters — never model extraction). New command verbs: `/memory adapters`, `export --adapter=<id>` (read-only), `import --adapter=<id> <path|inline>` (rides the approval-gated `seed`, per-entry audit). Onboarding guide in `docs/adapters-guide.md` (+ 中文).
|
|
121
|
+
- **Protocol conformance suite** — `test/protocol-conformance/`: 22 distributable cases (entry model, write semantics, budget model, audit reconstruction, export envelope) with a `--provider` CLI for third parties; CI runs them against dsh-memento's own provider as the golden reference (`npm run test:conformance`).
|
|
122
|
+
- **Upstream proposal material** — `docs/upstream-proposal.md` (+ 中文): why the official `ctx.memory` seam should adopt the protocol, differences from the current seam, and the migration path.
|
|
109
123
|
- `memory` tool accepts optional `tags` on add/replace/consolidate; tool results and `/memory export` documents carry `tags`/`version`.
|
|
110
124
|
|
|
111
125
|
### Changed
|
|
112
126
|
|
|
113
127
|
- Five-language READMEs: protocol section, adapter matrix, conformance suite, new command verbs, and the development gate list (now 133 tests).
|
|
114
|
-
- ARCHITECTURE: decisions 13
|
|
128
|
+
- ARCHITECTURE: decisions 13–15 (protocol separation, schema v4, adapter registry + conformance suite).
|
|
115
129
|
- npm package now ships the protocol docs and the conformance suite (`files` whitelist).
|
|
116
130
|
|
|
117
131
|
## [0.3.1] - 2026-08-15
|
|
118
132
|
|
|
119
133
|
### Fixed
|
|
120
134
|
|
|
121
|
-
- Boot crash on default Windows setups (reported in [issue #1](https://github.com/PerryLink/dsh-memento/issues/1)): `dsh web` does not write the harness's resolved home back to `process.env.DSH_HOME`, so `resolveDbPath` threw `MISSING_DSH_HOME` and failed the whole profile load. It now falls back to `~/.dsh`
|
|
135
|
+
- Boot crash on default Windows setups (reported in [issue #1](https://github.com/PerryLink/dsh-memento/issues/1)): `dsh web` does not write the harness's resolved home back to `process.env.DSH_HOME`, so `resolveDbPath` threw `MISSING_DSH_HOME` and failed the whole profile load. It now falls back to `~/.dsh` — the same documented fallback as the official harness (`resolveDshHome()`), replicated with `os.homedir()` to keep `lib/` zero-DSH-dependency. Relative `dbPath` values resolve against the same fallback home.
|
|
122
136
|
- Removed the now-unreachable `MISSING_DSH_HOME` error code.
|
|
123
137
|
|
|
124
138
|
## [0.3.0] - 2026-08-15
|
|
125
139
|
|
|
126
140
|
### Added
|
|
127
141
|
|
|
128
|
-
- `/memory import` subcommand: restores entries from a `/memory export` document (file path or inline JSON starting with `{`). Validates the `dsh-memento` / `memory-export-v1` markers and entry shapes (unknown schema versions fail loudly), caps one import at 1000 entries, then rides `seed`
|
|
129
|
-
- Approve-what-you-see approval payloads: `replace` carries `from:` (full previous entry) + `to:` (new text), `remove` carries the full text of the entry being deleted (no more bare substrings), and `consolidate` carries each target's resolved text (300-char excerpt cap per target)
|
|
130
|
-
- `*-denied` audit rows: every rejected/cancelled/unavailable write (including the turn-outside `/memory` gate path, which has no approval audit pair) lands a denied row with the real decision source
|
|
142
|
+
- `/memory import` subcommand: restores entries from a `/memory export` document (file path or inline JSON starting with `{`). Validates the `dsh-memento` / `memory-export-v1` markers and entry shapes (unknown schema versions fail loudly), caps one import at 1000 entries, then rides `seed` — single approval, full budget pre-check, one atomic transaction. `source`/`workspaceKey`/`agentKey` survive the round-trip; entries get fresh ids/timestamps and reset recall counts. This completes the backup/migration story.
|
|
143
|
+
- Approve-what-you-see approval payloads: `replace` carries `from:` (full previous entry) + `to:` (new text), `remove` carries the full text of the entry being deleted (no more bare substrings), and `consolidate` carries each target's resolved text (300-char excerpt cap per target) — the approval reason now holds the complete change being authorized.
|
|
144
|
+
- `*-denied` audit rows: every rejected/cancelled/unavailable write (including the turn-outside `/memory` gate path, which has no approval audit pair) lands a denied row with the real decision source — denials now have their own evidence chain.
|
|
131
145
|
- Session-visibility isolation for reads and write targeting: `memory` / `memory_recall` queries filter by the session's `agentPreset` (shared + own agent), and `replace`/`remove`/`consolidate` can only target entries visible to the session (shared + own agent, workspace entries only for the session cwd). Management surfaces (`/memory`, the panel) keep the full cross-agent view and now render non-shared entries' agent keys.
|
|
132
146
|
- `query` accepts an explicit `agentKey` option (`service.query(filter, { agentKey })`); without it, behavior is unchanged (full view, backward compatible).
|
|
133
147
|
|
|
@@ -136,7 +150,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
136
150
|
- `proposalDecide` now resolves and updates inside one transaction: concurrent approve/dismiss races settle first-writer-wins instead of double-deciding.
|
|
137
151
|
- `/memory proposals approve` no longer masks a successful write when the proposal was concurrently decided elsewhere.
|
|
138
152
|
- Release workflow is now idempotent: it skips `npm publish` when the tag's version is already on npm, so re-pushing an old tag cannot fail a run.
|
|
139
|
-
- Cross-platform test fix: the `resolveDbPath` absolute-path sample now matches the platform's `path.isAbsolute` semantics (a Windows drive path is relative on POSIX)
|
|
153
|
+
- Cross-platform test fix: the `resolveDbPath` absolute-path sample now matches the platform's `path.isAbsolute` semantics (a Windows drive path is relative on POSIX) — CI is green on all three platforms instead of red on Linux/macOS.
|
|
140
154
|
|
|
141
155
|
### Changed
|
|
142
156
|
|
|
@@ -153,7 +167,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
153
167
|
- Bilingual `memory_recall` tool description, parameter descriptions, and result renderer.
|
|
154
168
|
- New README section "What we learned from the terminal memories" (Claude Code / Codex / Hermes), mirrored across all five languages.
|
|
155
169
|
- `commandListLimit` (default 50) and `commandAuditLimit` (default 10) config fields for the `/memory` command surface.
|
|
156
|
-
- Coverage gate (`npm run check:coverage`: lib
|
|
170
|
+
- Coverage gate (`npm run check:coverage`: lib ≥90%, index.mjs ≥85%, all files ≥90%) and a weekly `next`-rc compatibility probe workflow.
|
|
157
171
|
- Peer dependency ranges widened to `>=0.1.0-rc.6` so later harness rc releases resolve without a coordinated release.
|
|
158
172
|
- Package metadata (`repository`/`homepage`/`bugs`), `types` conditions on the `exports` map, and this changelog.
|
|
159
173
|
|
|
@@ -163,7 +177,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
163
177
|
- `/memory list` / `query` render at most `commandListLimit` entries and label truncation instead of silently dropping rows.
|
|
164
178
|
- `seed` inserts run in one SQLite transaction: any mid-batch failure rolls back the whole batch (the documented all-or-nothing promise now holds).
|
|
165
179
|
- `replace` re-resolves the target and recomputes the net budget delta after approval, closing the stale-previous race during the approval wait.
|
|
166
|
-
- Audit rows record the real decision source (`via approval, writePolicy
|
|
180
|
+
- Audit rows record the real decision source (`via approval, writePolicy …` vs `via write gate`) instead of always labeling the configured policy.
|
|
167
181
|
- `memory_recall` description now states the true case semantics (case-sensitive for memory entries, case-insensitive for session history).
|
|
168
182
|
- `maxEntriesPerQuery` is documented and enforced as the default result cap; explicit `limit` values are hard-capped at 1000 by the provider.
|
|
169
183
|
|
|
@@ -180,5 +194,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
180
194
|
- `/memory` command (`list` / `query` / `add` / `remove` / `budgets` / `audit`) with an out-of-turn write gate sharing the same waterfall and policy.
|
|
181
195
|
- Read-only web panel (`dsh.client` drawer): browse entries, search, budget bars, audit tail.
|
|
182
196
|
- Session-event vocabulary (`memory/added|updated|removed|recalled|snapshot`) merge-declared in `types.d.ts` with rc.6-adaptive dispatch.
|
|
183
|
-
- Hard per-track/per-layer character budgets with structured `BUDGET_EXCEEDED` errors
|
|
184
|
-
- CI matrix (three platforms
|
|
197
|
+
- Hard per-track/per-layer character budgets with structured `BUDGET_EXCEEDED` errors — never truncate, never auto-compact.
|
|
198
|
+
- CI matrix (three platforms × Node 22.19/24), typecheck gate, and five-language README consistency gate.
|
package/README.es.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*Una costura tipada `ctx.memory`, una puerta de aprobación de escritura que ninguna ruta del modelo puede eludir y pistas de auditoría reconstruibles desde el registro de sesión.*
|
|
9
9
|
|
|
10
10
|
[](LICENSE)
|
|
11
|
-
[](https://github.com/topics/dsh-plugin)
|
|
12
12
|
[](#)
|
|
13
13
|
[](https://github.com/PerryLink/dsh-memento/actions)
|
|
14
14
|
[](https://github.com/PerryLink/dsh-memento/releases)
|
package/README.hi.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*एक टाइप्ड `ctx.memory` सीम, एक लेखन-अनुमोदन द्वार जिसे मॉडल का कोई मार्ग नहीं टाल सकता, और सत्र लॉग से पुनर्निर्माण-योग्य ऑडिट ट्रेल।*
|
|
9
9
|
|
|
10
10
|
[](LICENSE)
|
|
11
|
-
[](https://github.com/topics/dsh-plugin)
|
|
12
12
|
[](#)
|
|
13
13
|
[](https://github.com/PerryLink/dsh-memento/actions)
|
|
14
14
|
[](https://github.com/PerryLink/dsh-memento/releases)
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*A typed `ctx.memory` seam, a write-approval gate no model path can bypass, and audit trails rebuilt from the session log.*
|
|
10
10
|
|
|
11
11
|
[](LICENSE)
|
|
12
|
-
[](https://github.com/topics/dsh-plugin)
|
|
13
13
|
[](#)
|
|
14
14
|
[](https://github.com/PerryLink/dsh-memento/actions)
|
|
15
15
|
[](https://github.com/PerryLink/dsh-memento/releases)
|
package/README.pt.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*Uma costura tipada `ctx.memory`, uma porta de aprovação de escrita que nenhum caminho do modelo pode contornar e trilhas de auditoria reconstruíveis a partir do log de sessão.*
|
|
9
9
|
|
|
10
10
|
[](LICENSE)
|
|
11
|
-
[](https://github.com/topics/dsh-plugin)
|
|
12
12
|
[](#)
|
|
13
13
|
[](https://github.com/PerryLink/dsh-memento/actions)
|
|
14
14
|
[](https://github.com/PerryLink/dsh-memento/releases)
|
package/README.zh.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*一个类型安全的 `ctx.memory` 接缝、模型绕不过去的写入审批门,以及能从会话日志重建的审计链。*
|
|
9
9
|
|
|
10
10
|
[](LICENSE)
|
|
11
|
-
[](https://github.com/topics/dsh-plugin)
|
|
12
12
|
[](#)
|
|
13
13
|
[](https://github.com/PerryLink/dsh-memento/actions)
|
|
14
14
|
[](https://github.com/PerryLink/dsh-memento/releases)
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-memento",
|
|
3
3
|
"description": "Bounded, layered, approval-gated, auditable cross-session memory for DeepSeek Harness — a capability seam (ctx.memory service + local SQLite provider + memory tool + frozen snapshot injection), not another memory warehouse",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.9",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.mjs",
|
|
7
7
|
"types": "./types.d.ts",
|