@danielmarbach/mnemonic-mcp 0.5.1 → 0.7.0
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 +25 -0
- package/README.md +34 -3
- package/build/config.d.ts +1 -1
- package/build/config.d.ts.map +1 -1
- package/build/config.js +42 -1
- package/build/config.js.map +1 -1
- package/build/index.js +309 -39
- package/build/index.js.map +1 -1
- package/build/project-memory-policy.d.ts +11 -0
- package/build/project-memory-policy.d.ts.map +1 -1
- package/build/project-memory-policy.js +25 -0
- package/build/project-memory-policy.js.map +1 -1
- package/build/project.d.ts +1 -0
- package/build/project.d.ts.map +1 -1
- package/build/project.js +10 -0
- package/build/project.js.map +1 -1
- package/build/structured-content.d.ts +4 -0
- package/build/structured-content.d.ts.map +1 -1
- package/build/structured-content.js +2 -0
- package/build/structured-content.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@ All notable changes to `mnemonic` will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is loosely based on Keep a Changelog and uses semver-style version headings.
|
|
6
6
|
|
|
7
|
+
## [0.7.0] - 2026-03-13
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Protected-branch one-time override input (`allowProtectedBranch`) for additional mutating tools that can commit to project vaults: `update`, `forget`, `move_memory`, and `consolidate` (mutating strategies).
|
|
12
|
+
- Integration coverage for protected-branch policy now verifies ask/override flows across `update`, `forget`, `move_memory`, and `consolidate` in addition to `remember`.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Protected-branch policy enforcement now applies consistently to automatic project-vault commits from mutating tools, not just `remember`. Affected paths include `update`, `forget`, `move_memory`, and mutating `consolidate` strategies (`execute-merge`, `prune-superseded`).
|
|
17
|
+
- Protected-branch guidance text now references the active tool when suggesting one-time override retries.
|
|
18
|
+
- Tool descriptions/docs were updated to reflect cross-tool protected-branch behavior in `README.md`, `AGENT.md`, and `docs/index.html`.
|
|
19
|
+
|
|
20
|
+
## [0.6.0] - 2026-03-13
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- Protected-branch policy support for automatic `remember` project-vault commits. `ProjectMemoryPolicy` now supports `protectedBranchBehavior` (`ask` | `block` | `allow`) and `protectedBranchPatterns` (glob-like patterns). Built-in patterns are `main`, `master`, and `release*`.
|
|
25
|
+
- `remember` now accepts `allowProtectedBranch` as a one-time override when a protected-branch policy would otherwise ask or block.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- `set_project_memory_policy` and `get_project_memory_policy` now manage and display protected-branch settings in addition to write-scope and consolidation defaults.
|
|
30
|
+
- `remember` now checks the current local git branch before automatic project-vault commits (scope omitted) and follows protected-branch policy with actionable guidance.
|
|
31
|
+
|
|
7
32
|
## [0.5.1] - 2026-03-12
|
|
8
33
|
|
|
9
34
|
### Fixed
|
package/README.md
CHANGED
|
@@ -208,6 +208,7 @@ User-tunable fields:
|
|
|
208
208
|
| `mutationPushMode` | `"main-only"` | When to auto-push after a write: `"all"`, `"main-only"`, or `"none"` |
|
|
209
209
|
|
|
210
210
|
`projectMemoryPolicies` and `projectIdentityOverrides` are written automatically by `set_project_memory_policy` and `set_project_identity` — no need to edit them by hand.
|
|
211
|
+
Project memory policies can include protected-branch settings (`protectedBranchBehavior`, `protectedBranchPatterns`) used by mutating tools when they commit to project vaults (`remember`, `update`, `forget`, `move_memory`, and mutating `consolidate` strategies).
|
|
211
212
|
|
|
212
213
|
Example — raise concurrency on a fast machine and disable auto-push everywhere:
|
|
213
214
|
|
|
@@ -255,7 +256,14 @@ Two vault types store notes:
|
|
|
255
256
|
- `cwd` + `scope: "global"` → main vault, with project association in frontmatter
|
|
256
257
|
- no `cwd` → main vault as a plain global memory
|
|
257
258
|
|
|
258
|
-
Use `set_project_memory_policy` to save
|
|
259
|
+
Use `set_project_memory_policy` to save per-project defaults:
|
|
260
|
+
|
|
261
|
+
- write scope (`project`, `global`, `ask`)
|
|
262
|
+
- consolidation mode (`supersedes`, `delete`)
|
|
263
|
+
- protected-branch behavior for project-vault writes (`ask`, `block`, `allow`)
|
|
264
|
+
- protected-branch patterns (glob strings; defaults are `main`, `master`, `release*`)
|
|
265
|
+
|
|
266
|
+
When write scope policy is `ask`, `remember` returns a clear storage choice instead of guessing. When protected-branch behavior is `ask`, mutating tools that would commit to the project vault return a one-time override option (`allowProtectedBranch: true`) plus instructions to persist `block`/`allow`.
|
|
259
267
|
|
|
260
268
|
### Project identity
|
|
261
269
|
|
|
@@ -370,7 +378,7 @@ Imported notes are written to the main vault with `lifecycle: permanent` and `sc
|
|
|
370
378
|
| `forget` | Delete note + embedding, git commit + push, cleanup relationships |
|
|
371
379
|
| `get` | Fetch one or more notes by exact id |
|
|
372
380
|
| `get_project_identity` | Show effective project identity and remote override |
|
|
373
|
-
| `get_project_memory_policy` | Show saved
|
|
381
|
+
| `get_project_memory_policy` | Show saved write scope, consolidation mode, and protected-branch settings |
|
|
374
382
|
| `list` | List notes filtered by scope/tags/storage |
|
|
375
383
|
| `list_migrations` | List available migrations and pending count |
|
|
376
384
|
| `memory_graph` | Show compact adjacency list of relationships |
|
|
@@ -381,7 +389,7 @@ Imported notes are written to the main vault with `lifecycle: permanent` and `sc
|
|
|
381
389
|
| `remember` | Write note + embedding; `cwd` sets context, `scope` picks storage, `lifecycle` picks temporary vs permanent |
|
|
382
390
|
| `relate` | Create typed relationship between notes (bidirectional) |
|
|
383
391
|
| `set_project_identity` | Save which git remote defines project identity |
|
|
384
|
-
| `set_project_memory_policy` | Save
|
|
392
|
+
| `set_project_memory_policy` | Save project policy defaults (scope, consolidation mode, protected-branch behavior/patterns) |
|
|
385
393
|
| `sync` | Git sync when remote exists plus embedding backfill always; `force=true` rebuilds all embeddings |
|
|
386
394
|
| `unrelate` | Remove relationship between notes |
|
|
387
395
|
| `update` | Update note content/title/tags/lifecycle, re-embeds always |
|
|
@@ -448,6 +456,29 @@ No. The embeddings here are **local vector representations** generated by Ollama
|
|
|
448
456
|
|
|
449
457
|
When you call `recall` with `cwd`, mnemonic adds a fixed **+0.15 boost** to the cosine similarity score of every note belonging to the detected project. This is a soft boost, not a hard filter — global memories are still included when relevant. The boost ensures project-specific context floats to the top when you're working inside a repo while cross-project knowledge remains accessible further down the list.
|
|
450
458
|
|
|
459
|
+
**I want to brainstorm with no repo yet. Should I create a temp folder first?**
|
|
460
|
+
|
|
461
|
+
Usually, no. If you're talking to an LLM with mnemonic MCP configured, treat it like a normal brainstorming chat and ask it to store key points in the **main vault** (global memory).
|
|
462
|
+
|
|
463
|
+
Example conversation style:
|
|
464
|
+
|
|
465
|
+
```text
|
|
466
|
+
You: I have an idea for a meal-planning app. Let's brainstorm v1 scope.
|
|
467
|
+
LLM: Great. I can capture key decisions and open questions in global memory while we explore.
|
|
468
|
+
|
|
469
|
+
You: Please remember that the app should build weekly meals from pantry items, and avoid recipes with too many missing ingredients.
|
|
470
|
+
You: Also remember that I'm undecided on mobile-first vs web-first.
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
When the idea becomes a real repo, switch to that project context and ask the LLM to migrate only the notes that became project-specific.
|
|
474
|
+
|
|
475
|
+
```text
|
|
476
|
+
You: We're creating the repo now at /path/to/meal-planner.
|
|
477
|
+
You: Recall my earlier meal-planner brainstorm notes and move the implementation-relevant ones into this project's vault.
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
This keeps early ideation reusable as personal/global knowledge while moving concrete project context into `.mnemonic/` once collaboration and implementation begin.
|
|
481
|
+
|
|
451
482
|
**How does mnemonic differ from Beads?**
|
|
452
483
|
|
|
453
484
|
mnemonic and Beads address complementary concerns. mnemonic is a **knowledge graph**: it stores notes, relationships between them, and lets agents retrieve relevant context through semantic search. [Beads](https://github.com/steveyegge/beads) is a **task and dependency tracker**: it models work items and their dependencies so agents can determine what is ready to execute next. Both tools can coexist in the same workflow — mnemonic stores knowledge and reasoning while Beads manages execution.
|
package/build/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ProjectMemoryPolicy } from "./project-memory-policy.js";
|
|
2
2
|
import type { ProjectIdentityOverride } from "./project.js";
|
|
3
3
|
export type MutationPushMode = "all" | "main-only" | "none";
|
|
4
4
|
export interface MnemonicConfig {
|
package/build/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC3D,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACnE;AAkID;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/E;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrG;AAED,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,aAAa,EAAE,MAAM;IAI3B,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;IAI/B,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAK7E,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAK3F,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/F,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAM9C,OAAO;YAgBP,QAAQ;CAGvB"}
|
package/build/config.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from "fs/promises";
|
|
2
2
|
import path from "path";
|
|
3
|
+
import { CONSOLIDATION_MODES, PROJECT_POLICY_SCOPES, PROTECTED_BRANCH_BEHAVIORS, } from "./project-memory-policy.js";
|
|
3
4
|
const defaultConfig = {
|
|
4
5
|
// Keep this at the latest schema version. When adding a new latest-schema
|
|
5
6
|
// migration, bump this value in the same change so fresh installs start at
|
|
@@ -54,6 +55,46 @@ function normalizeProjectIdentityOverrides(value) {
|
|
|
54
55
|
}
|
|
55
56
|
return normalized;
|
|
56
57
|
}
|
|
58
|
+
function normalizeProjectMemoryPolicies(value) {
|
|
59
|
+
if (!value || typeof value !== "object") {
|
|
60
|
+
return {};
|
|
61
|
+
}
|
|
62
|
+
const normalized = {};
|
|
63
|
+
for (const [projectId, policy] of Object.entries(value)) {
|
|
64
|
+
if (!policy || typeof policy !== "object") {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const policyRecord = policy;
|
|
68
|
+
const normalizedProjectId = typeof policyRecord.projectId === "string" && policyRecord.projectId.trim().length > 0
|
|
69
|
+
? policyRecord.projectId.trim()
|
|
70
|
+
: projectId;
|
|
71
|
+
const defaultScope = PROJECT_POLICY_SCOPES.includes(policyRecord.defaultScope)
|
|
72
|
+
? policyRecord.defaultScope
|
|
73
|
+
: "project";
|
|
74
|
+
const consolidationMode = CONSOLIDATION_MODES.includes(policyRecord.consolidationMode)
|
|
75
|
+
? policyRecord.consolidationMode
|
|
76
|
+
: undefined;
|
|
77
|
+
const protectedBranchBehavior = PROTECTED_BRANCH_BEHAVIORS.includes(policyRecord.protectedBranchBehavior)
|
|
78
|
+
? policyRecord.protectedBranchBehavior
|
|
79
|
+
: undefined;
|
|
80
|
+
const protectedBranchPatterns = Array.isArray(policyRecord.protectedBranchPatterns)
|
|
81
|
+
? policyRecord.protectedBranchPatterns
|
|
82
|
+
.filter((pattern) => typeof pattern === "string")
|
|
83
|
+
.map((pattern) => pattern.trim())
|
|
84
|
+
.filter((pattern) => pattern.length > 0)
|
|
85
|
+
: undefined;
|
|
86
|
+
normalized[projectId] = {
|
|
87
|
+
projectId: normalizedProjectId,
|
|
88
|
+
projectName: typeof policyRecord.projectName === "string" ? policyRecord.projectName : undefined,
|
|
89
|
+
defaultScope,
|
|
90
|
+
consolidationMode,
|
|
91
|
+
protectedBranchPatterns,
|
|
92
|
+
protectedBranchBehavior,
|
|
93
|
+
updatedAt: typeof policyRecord.updatedAt === "string" ? policyRecord.updatedAt : "",
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return normalized;
|
|
97
|
+
}
|
|
57
98
|
/**
|
|
58
99
|
* Read the schema version from a vault's config.json.
|
|
59
100
|
* Works for both main vault and project vaults.
|
|
@@ -126,7 +167,7 @@ export class MnemonicConfigStore {
|
|
|
126
167
|
schemaVersion: normalizeSchemaVersion(parsed.schemaVersion),
|
|
127
168
|
reindexEmbedConcurrency: normalizeConcurrency(parsed.reindexEmbedConcurrency),
|
|
128
169
|
mutationPushMode: normalizeMutationPushMode(parsed.mutationPushMode),
|
|
129
|
-
projectMemoryPolicies: parsed.projectMemoryPolicies
|
|
170
|
+
projectMemoryPolicies: normalizeProjectMemoryPolicies(parsed.projectMemoryPolicies),
|
|
130
171
|
projectIdentityOverrides: normalizeProjectIdentityOverrides(parsed.projectIdentityOverrides),
|
|
131
172
|
};
|
|
132
173
|
}
|
package/build/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|