@danielmarbach/mnemonic-mcp 0.27.2 → 0.28.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.
Files changed (244) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/build/auto-relate.d.ts.map +1 -1
  3. package/build/auto-relate.js +11 -5
  4. package/build/auto-relate.js.map +1 -1
  5. package/build/brands.d.ts +38 -0
  6. package/build/brands.d.ts.map +1 -0
  7. package/build/brands.js +51 -0
  8. package/build/brands.js.map +1 -0
  9. package/build/cache.d.ts.map +1 -1
  10. package/build/cache.js +2 -4
  11. package/build/cache.js.map +1 -1
  12. package/build/cli/import-claude-memory.d.ts +4 -0
  13. package/build/cli/import-claude-memory.d.ts.map +1 -0
  14. package/build/cli/import-claude-memory.js +144 -0
  15. package/build/cli/import-claude-memory.js.map +1 -0
  16. package/build/cli/migrate.d.ts +2 -0
  17. package/build/cli/migrate.d.ts.map +1 -0
  18. package/build/cli/migrate.js +104 -0
  19. package/build/cli/migrate.js.map +1 -0
  20. package/build/config.d.ts +2 -0
  21. package/build/config.d.ts.map +1 -1
  22. package/build/config.js +41 -14
  23. package/build/config.js.map +1 -1
  24. package/build/consolidate.d.ts +2 -1
  25. package/build/consolidate.d.ts.map +1 -1
  26. package/build/consolidate.js +3 -6
  27. package/build/consolidate.js.map +1 -1
  28. package/build/context.d.ts +5 -0
  29. package/build/context.d.ts.map +1 -0
  30. package/build/context.js +41 -0
  31. package/build/context.js.map +1 -0
  32. package/build/date-utils.d.ts +3 -0
  33. package/build/date-utils.d.ts.map +1 -0
  34. package/build/date-utils.js +10 -0
  35. package/build/date-utils.js.map +1 -0
  36. package/build/embeddings.d.ts +2 -1
  37. package/build/embeddings.d.ts.map +1 -1
  38. package/build/embeddings.js +24 -2
  39. package/build/embeddings.js.map +1 -1
  40. package/build/error-utils.d.ts +3 -0
  41. package/build/error-utils.d.ts.map +1 -0
  42. package/build/error-utils.js +9 -0
  43. package/build/error-utils.js.map +1 -0
  44. package/build/git-constants.d.ts +2 -0
  45. package/build/git-constants.d.ts.map +1 -0
  46. package/build/git-constants.js +2 -0
  47. package/build/git-constants.js.map +1 -0
  48. package/build/git.d.ts +27 -18
  49. package/build/git.d.ts.map +1 -1
  50. package/build/git.js +39 -22
  51. package/build/git.js.map +1 -1
  52. package/build/helpers/embed.d.ts +13 -0
  53. package/build/helpers/embed.d.ts.map +1 -0
  54. package/build/helpers/embed.js +70 -0
  55. package/build/helpers/embed.js.map +1 -0
  56. package/build/helpers/git-commit.d.ts +43 -0
  57. package/build/helpers/git-commit.d.ts.map +1 -0
  58. package/build/helpers/git-commit.js +129 -0
  59. package/build/helpers/git-commit.js.map +1 -0
  60. package/build/helpers/index.d.ts +19 -0
  61. package/build/helpers/index.d.ts.map +1 -0
  62. package/build/helpers/index.js +83 -0
  63. package/build/helpers/index.js.map +1 -0
  64. package/build/helpers/persistence.d.ts +34 -0
  65. package/build/helpers/persistence.d.ts.map +1 -0
  66. package/build/helpers/persistence.js +176 -0
  67. package/build/helpers/persistence.js.map +1 -0
  68. package/build/helpers/project.d.ts +21 -0
  69. package/build/helpers/project.d.ts.map +1 -0
  70. package/build/helpers/project.js +75 -0
  71. package/build/helpers/project.js.map +1 -0
  72. package/build/helpers/vault.d.ts +50 -0
  73. package/build/helpers/vault.d.ts.map +1 -0
  74. package/build/helpers/vault.js +196 -0
  75. package/build/helpers/vault.js.map +1 -0
  76. package/build/index.js +12 -5467
  77. package/build/index.js.map +1 -1
  78. package/build/lexical.d.ts +1 -1
  79. package/build/lexical.d.ts.map +1 -1
  80. package/build/lexical.js +2 -3
  81. package/build/lexical.js.map +1 -1
  82. package/build/markdown-ast.d.ts.map +1 -1
  83. package/build/markdown-ast.js +4 -2
  84. package/build/markdown-ast.js.map +1 -1
  85. package/build/migration.d.ts.map +1 -1
  86. package/build/migration.js +6 -5
  87. package/build/migration.js.map +1 -1
  88. package/build/project-introspection.d.ts +4 -4
  89. package/build/project-introspection.d.ts.map +1 -1
  90. package/build/project-introspection.js +68 -26
  91. package/build/project-introspection.js.map +1 -1
  92. package/build/project-memory-policy.d.ts.map +1 -1
  93. package/build/project-memory-policy.js +38 -3
  94. package/build/project-memory-policy.js.map +1 -1
  95. package/build/project.d.ts +2 -1
  96. package/build/project.d.ts.map +1 -1
  97. package/build/project.js +5 -4
  98. package/build/project.js.map +1 -1
  99. package/build/projections.d.ts.map +1 -1
  100. package/build/projections.js +2 -1
  101. package/build/projections.js.map +1 -1
  102. package/build/prompts.d.ts +3 -0
  103. package/build/prompts.d.ts.map +1 -0
  104. package/build/prompts.js +138 -0
  105. package/build/prompts.js.map +1 -0
  106. package/build/provenance.d.ts +1 -1
  107. package/build/provenance.d.ts.map +1 -1
  108. package/build/provenance.js +8 -11
  109. package/build/provenance.js.map +1 -1
  110. package/build/recall.d.ts +2 -1
  111. package/build/recall.d.ts.map +1 -1
  112. package/build/recall.js +29 -14
  113. package/build/recall.js.map +1 -1
  114. package/build/relationships.d.ts +2 -2
  115. package/build/relationships.d.ts.map +1 -1
  116. package/build/relationships.js +34 -38
  117. package/build/relationships.js.map +1 -1
  118. package/build/semantic-patch.d.ts.map +1 -1
  119. package/build/semantic-patch.js +10 -4
  120. package/build/semantic-patch.js.map +1 -1
  121. package/build/server-context.d.ts +18 -0
  122. package/build/server-context.d.ts.map +1 -0
  123. package/build/server-context.js +2 -0
  124. package/build/server-context.js.map +1 -0
  125. package/build/startup.d.ts +5 -0
  126. package/build/startup.d.ts.map +1 -0
  127. package/build/startup.js +37 -0
  128. package/build/startup.js.map +1 -0
  129. package/build/storage.d.ts +17 -15
  130. package/build/storage.d.ts.map +1 -1
  131. package/build/storage.js +32 -40
  132. package/build/storage.js.map +1 -1
  133. package/build/structured-content.d.ts +81 -74
  134. package/build/structured-content.d.ts.map +1 -1
  135. package/build/structured-content.js +25 -17
  136. package/build/structured-content.js.map +1 -1
  137. package/build/temporal-interpretation.d.ts +2 -1
  138. package/build/temporal-interpretation.d.ts.map +1 -1
  139. package/build/temporal-interpretation.js +13 -7
  140. package/build/temporal-interpretation.js.map +1 -1
  141. package/build/tools/consolidate-helpers.d.ts +55 -0
  142. package/build/tools/consolidate-helpers.d.ts.map +1 -0
  143. package/build/tools/consolidate-helpers.js +815 -0
  144. package/build/tools/consolidate-helpers.js.map +1 -0
  145. package/build/tools/consolidate.d.ts +4 -0
  146. package/build/tools/consolidate.d.ts.map +1 -0
  147. package/build/tools/consolidate.js +127 -0
  148. package/build/tools/consolidate.js.map +1 -0
  149. package/build/tools/detect-project.d.ts +6 -0
  150. package/build/tools/detect-project.d.ts.map +1 -0
  151. package/build/tools/detect-project.js +79 -0
  152. package/build/tools/detect-project.js.map +1 -0
  153. package/build/tools/discover-tags.d.ts +4 -0
  154. package/build/tools/discover-tags.d.ts.map +1 -0
  155. package/build/tools/discover-tags.js +236 -0
  156. package/build/tools/discover-tags.js.map +1 -0
  157. package/build/tools/forget.d.ts +4 -0
  158. package/build/tools/forget.d.ts.map +1 -0
  159. package/build/tools/forget.js +123 -0
  160. package/build/tools/forget.js.map +1 -0
  161. package/build/tools/get-project-identity.d.ts +4 -0
  162. package/build/tools/get-project-identity.d.ts.map +1 -0
  163. package/build/tools/get-project-identity.js +59 -0
  164. package/build/tools/get-project-identity.js.map +1 -0
  165. package/build/tools/get.d.ts +4 -0
  166. package/build/tools/get.d.ts.map +1 -0
  167. package/build/tools/get.js +115 -0
  168. package/build/tools/get.js.map +1 -0
  169. package/build/tools/index.d.ts +4 -0
  170. package/build/tools/index.d.ts.map +1 -0
  171. package/build/tools/index.js +47 -0
  172. package/build/tools/index.js.map +1 -0
  173. package/build/tools/list.d.ts +4 -0
  174. package/build/tools/list.d.ts.map +1 -0
  175. package/build/tools/list.js +95 -0
  176. package/build/tools/list.js.map +1 -0
  177. package/build/tools/memory-graph.d.ts +4 -0
  178. package/build/tools/memory-graph.d.ts.map +1 -0
  179. package/build/tools/memory-graph.js +84 -0
  180. package/build/tools/memory-graph.js.map +1 -0
  181. package/build/tools/migration.d.ts +5 -0
  182. package/build/tools/migration.d.ts.map +1 -0
  183. package/build/tools/migration.js +157 -0
  184. package/build/tools/migration.js.map +1 -0
  185. package/build/tools/move-memory.d.ts +4 -0
  186. package/build/tools/move-memory.d.ts.map +1 -0
  187. package/build/tools/move-memory.js +170 -0
  188. package/build/tools/move-memory.js.map +1 -0
  189. package/build/tools/policy.d.ts +5 -0
  190. package/build/tools/policy.d.ts.map +1 -0
  191. package/build/tools/policy.js +195 -0
  192. package/build/tools/policy.js.map +1 -0
  193. package/build/tools/project-memory-summary.d.ts +4 -0
  194. package/build/tools/project-memory-summary.d.ts.map +1 -0
  195. package/build/tools/project-memory-summary.js +477 -0
  196. package/build/tools/project-memory-summary.js.map +1 -0
  197. package/build/tools/recall-helpers.d.ts +28 -0
  198. package/build/tools/recall-helpers.d.ts.map +1 -0
  199. package/build/tools/recall-helpers.js +137 -0
  200. package/build/tools/recall-helpers.js.map +1 -0
  201. package/build/tools/recall.d.ts +4 -0
  202. package/build/tools/recall.d.ts.map +1 -0
  203. package/build/tools/recall.js +343 -0
  204. package/build/tools/recall.js.map +1 -0
  205. package/build/tools/recent-memories.d.ts +4 -0
  206. package/build/tools/recent-memories.d.ts.map +1 -0
  207. package/build/tools/recent-memories.js +79 -0
  208. package/build/tools/recent-memories.js.map +1 -0
  209. package/build/tools/relate.d.ts +4 -0
  210. package/build/tools/relate.d.ts.map +1 -0
  211. package/build/tools/relate.js +180 -0
  212. package/build/tools/relate.js.map +1 -0
  213. package/build/tools/remember.d.ts +4 -0
  214. package/build/tools/remember.d.ts.map +1 -0
  215. package/build/tools/remember.js +219 -0
  216. package/build/tools/remember.js.map +1 -0
  217. package/build/tools/set-project-identity.d.ts +4 -0
  218. package/build/tools/set-project-identity.d.ts.map +1 -0
  219. package/build/tools/set-project-identity.js +113 -0
  220. package/build/tools/set-project-identity.js.map +1 -0
  221. package/build/tools/sync.d.ts +4 -0
  222. package/build/tools/sync.d.ts.map +1 -0
  223. package/build/tools/sync.js +127 -0
  224. package/build/tools/sync.js.map +1 -0
  225. package/build/tools/unrelate.d.ts +4 -0
  226. package/build/tools/unrelate.d.ts.map +1 -0
  227. package/build/tools/unrelate.js +179 -0
  228. package/build/tools/unrelate.js.map +1 -0
  229. package/build/tools/update.d.ts +4 -0
  230. package/build/tools/update.d.ts.map +1 -0
  231. package/build/tools/update.js +365 -0
  232. package/build/tools/update.js.map +1 -0
  233. package/build/tools/where-is-memory.d.ts +4 -0
  234. package/build/tools/where-is-memory.d.ts.map +1 -0
  235. package/build/tools/where-is-memory.js +61 -0
  236. package/build/tools/where-is-memory.js.map +1 -0
  237. package/build/validation.d.ts +24 -0
  238. package/build/validation.d.ts.map +1 -0
  239. package/build/validation.js +62 -0
  240. package/build/validation.js.map +1 -0
  241. package/build/vault.d.ts.map +1 -1
  242. package/build/vault.js +11 -5
  243. package/build/vault.js.map +1 -1
  244. package/package.json +2 -1
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ServerContext } from "../server-context.js";
3
+ export declare function registerListMigrationsTool(server: McpServer, ctx: ServerContext): void;
4
+ export declare function registerExecuteMigrationTool(server: McpServer, ctx: ServerContext): void;
5
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/tools/migration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAqEtF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAuGxF"}
@@ -0,0 +1,157 @@
1
+ import { z } from "zod";
2
+ import { readVaultSchemaVersion } from "../config.js";
3
+ import { MigrationListResultSchema, MigrationExecuteResultSchema } from "../structured-content.js";
4
+ import { getErrorMessage } from "../error-utils.js";
5
+ import { ensureBranchSynced as ensureBranchSyncedFromModule, projectParam } from "../helpers/project.js";
6
+ export function registerListMigrationsTool(server, ctx) {
7
+ server.registerTool("list_migrations", {
8
+ title: "List Migrations",
9
+ description: "List available schema migrations and show which ones are pending for each vault.\n\n" +
10
+ "Use this when:\n" +
11
+ "- Checking whether a mnemonic upgrade requires vault changes\n" +
12
+ "- Preparing to run `execute_migration`\n\n" +
13
+ "Do not use this when:\n" +
14
+ "- You already know the exact migration to run and only need to execute it\n\n" +
15
+ "Returns:\n" +
16
+ "- Available migrations, vault schema versions, and pending counts\n\n" +
17
+ "Read-only.\n\n" +
18
+ "Typical next step:\n" +
19
+ "- Run `execute_migration` with `dryRun: true` first.",
20
+ annotations: {
21
+ readOnlyHint: true,
22
+ destructiveHint: false,
23
+ idempotentHint: true,
24
+ openWorldHint: false,
25
+ },
26
+ inputSchema: z.object({}),
27
+ outputSchema: MigrationListResultSchema,
28
+ }, async () => {
29
+ const available = ctx.migrator.listAvailableMigrations();
30
+ const lines = [];
31
+ lines.push("Vault schema versions:");
32
+ let totalPending = 0;
33
+ const vaultsInfo = [];
34
+ for (const vault of ctx.vaultManager.allKnownVaults()) {
35
+ const version = await readVaultSchemaVersion(vault.storage.vaultPath);
36
+ const pending = await ctx.migrator.getPendingMigrations(version);
37
+ totalPending += pending.length;
38
+ const label = vault.isProject ? "project" : "main";
39
+ lines.push(` ${label} (${vault.storage.vaultPath}): ${version} — ${pending.length} pending`);
40
+ vaultsInfo.push({
41
+ path: vault.storage.vaultPath,
42
+ type: vault.isProject ? "project" : "main",
43
+ version,
44
+ pending: pending.length,
45
+ });
46
+ }
47
+ lines.push("");
48
+ lines.push("Available migrations:");
49
+ for (const migration of available) {
50
+ lines.push(` ${migration.name}`);
51
+ lines.push(` ${migration.description}`);
52
+ }
53
+ lines.push("");
54
+ if (totalPending > 0) {
55
+ lines.push("Run migration with: mnemonic migrate (CLI) or execute_migration (MCP)");
56
+ }
57
+ const structuredContent = {
58
+ action: "migration_list",
59
+ vaults: vaultsInfo,
60
+ available: available.map(m => ({ name: m.name, description: m.description })),
61
+ totalPending,
62
+ };
63
+ return { content: [{ type: "text", text: lines.join("\n") }], structuredContent };
64
+ });
65
+ }
66
+ export function registerExecuteMigrationTool(server, ctx) {
67
+ server.registerTool("execute_migration", {
68
+ title: "Execute Migration",
69
+ description: "Execute a named schema migration on vault notes.\n\n" +
70
+ "Use this when:\n" +
71
+ "- `list_migrations` shows pending migrations that should be applied\n\n" +
72
+ "Do not use this when:\n" +
73
+ "- You have not checked pending migrations yet\n" +
74
+ "- You have not previewed the migration with `dryRun: true`\n\n" +
75
+ "Returns:\n" +
76
+ "- Per-vault migration results, counts, warnings, and errors\n\n" +
77
+ "Side effects: modifies note files, git commits per affected vault, and may push.\n\n" +
78
+ "Typical next step:\n" +
79
+ "- Re-run `list_migrations` to confirm nothing is pending.",
80
+ annotations: {
81
+ readOnlyHint: false,
82
+ destructiveHint: false,
83
+ idempotentHint: true,
84
+ openWorldHint: false,
85
+ },
86
+ inputSchema: z.object({
87
+ migrationName: z.string().describe("Name of the migration to execute (get names from `list_migrations`)"),
88
+ dryRun: z.boolean().default(true).describe("If true, show what would change without actually modifying notes. Always try dry-run first."),
89
+ backup: z.boolean().default(true).describe("If true, warn about backing up before real migration"),
90
+ cwd: projectParam.optional().describe("Optional: limit migration to a specific project vault"),
91
+ }),
92
+ outputSchema: MigrationExecuteResultSchema,
93
+ }, async ({ migrationName, dryRun, backup, cwd }) => {
94
+ await ensureBranchSyncedFromModule(ctx, cwd);
95
+ try {
96
+ const { results, vaultsProcessed } = await ctx.migrator.runMigration(migrationName, {
97
+ dryRun,
98
+ backup,
99
+ cwd,
100
+ });
101
+ const lines = [];
102
+ lines.push(`Migration: ${migrationName}`);
103
+ lines.push(`Mode: ${dryRun ? "DRY-RUN" : "EXECUTE"}`);
104
+ lines.push(`Vaults processed: ${vaultsProcessed}`);
105
+ lines.push("");
106
+ const vaultResults = [];
107
+ for (const [vaultPath, result] of results) {
108
+ lines.push(`Vault: ${vaultPath}`);
109
+ lines.push(` Notes processed: ${result.notesProcessed}`);
110
+ lines.push(` Notes modified: ${result.notesModified}`);
111
+ const vaultResultErrors = [];
112
+ const vaultResultWarnings = [];
113
+ if (result.errors.length > 0) {
114
+ lines.push(` Errors: ${result.errors.length}`);
115
+ result.errors.forEach(e => lines.push(` - ${e.noteId}: ${e.error}`));
116
+ vaultResultErrors.push(...result.errors.map(e => ({ noteId: e.noteId, error: e.error })));
117
+ }
118
+ if (result.warnings.length > 0) {
119
+ lines.push(` Warnings: ${result.warnings.length}`);
120
+ result.warnings.forEach(w => lines.push(` - ${w}`));
121
+ vaultResultWarnings.push(...result.warnings);
122
+ }
123
+ vaultResults.push({
124
+ path: vaultPath,
125
+ notesProcessed: result.notesProcessed,
126
+ notesModified: result.notesModified,
127
+ errors: vaultResultErrors,
128
+ warnings: vaultResultWarnings,
129
+ });
130
+ lines.push("");
131
+ }
132
+ if (!dryRun) {
133
+ lines.push("Migration executed. Modified vaults were auto-committed and pushed when git was available.");
134
+ }
135
+ else {
136
+ lines.push("✓ Dry-run completed - no changes made");
137
+ }
138
+ const structuredContent = {
139
+ action: "migration_executed",
140
+ migration: migrationName,
141
+ dryRun,
142
+ vaultsProcessed,
143
+ vaultResults,
144
+ };
145
+ return { content: [{ type: "text", text: lines.join("\n") }], structuredContent };
146
+ }
147
+ catch (err) {
148
+ return {
149
+ content: [{
150
+ type: "text",
151
+ text: `Migration failed: ${getErrorMessage(err)}`,
152
+ }],
153
+ };
154
+ }
155
+ });
156
+ }
157
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/tools/migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ServerContext } from "../server-context.js";
3
+ export declare function registerMoveMemoryTool(server: McpServer, ctx: ServerContext): void;
4
+ //# sourceMappingURL=move-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-memory.d.ts","sourceRoot":"","sources":["../../src/tools/move-memory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAwB1D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAoLlF"}
@@ -0,0 +1,170 @@
1
+ import { z } from "zod";
2
+ import { NoteIdSchema, MoveResultSchema, } from "../structured-content.js";
3
+ import { projectParam, resolveProject, ensureBranchSynced, } from "../helpers/project.js";
4
+ import { memoryId, isoDateString } from "../brands.js";
5
+ import { shouldBlockProtectedBranchCommit } from "../helpers/git-commit.js";
6
+ import { formatPersistenceSummary, } from "../helpers/persistence.js";
7
+ import { moveNoteBetweenVaults, projectNotFoundResponse, storageLabel, } from "../helpers/vault.js";
8
+ import { invalidateActiveProjectCache } from "../cache.js";
9
+ export function registerMoveMemoryTool(server, ctx) {
10
+ server.registerTool("move_memory", {
11
+ title: "Move Memory",
12
+ description: "Use after `where_is_memory` or `get` confirms a memory is stored in the wrong place.\n\n" +
13
+ "Move a memory between main storage and project storage, optionally targeting a specific sub-vault folder.\n\n" +
14
+ "Use this when:\n" +
15
+ "- A note is stored in the wrong place\n" +
16
+ "- Project-specific knowledge should move between shared project storage and main storage\n" +
17
+ "- A note should live in a specific sub-vault such as `.mnemonic-lib`\n\n" +
18
+ "Do not use this when:\n" +
19
+ "- You only need to edit the note content; use `update`\n" +
20
+ "- You want to delete the note; use `forget`\n\n" +
21
+ "Returns:\n" +
22
+ "- The moved memory id, resulting storage label, project association, and persistence status\n\n" +
23
+ "Side effects: rewrites storage location, may adjust project association, git commits, and may push.\n\n" +
24
+ "Typical next step:\n" +
25
+ "- Use `where_is_memory` or `get` to verify the final state.\n" +
26
+ "- Use `relate` if the moved memory connects to existing notes in the new vault.",
27
+ annotations: {
28
+ readOnlyHint: false,
29
+ destructiveHint: false,
30
+ idempotentHint: true,
31
+ openWorldHint: false,
32
+ },
33
+ inputSchema: z.object({
34
+ id: NoteIdSchema.describe("Exact memory id. Use an id returned by `recall`, `list`, `recent_memories`, or `where_is`."),
35
+ target: z.enum(["main-vault", "project-vault"]).describe("Destination: 'main-vault' for private/global storage, 'project-vault' for shared project storage"),
36
+ vaultFolder: z
37
+ .string()
38
+ .optional()
39
+ .describe("Optional target project vault folder name, such as `.mnemonic-lib`. " +
40
+ "Use this only when moving into a specific sub-vault instead of the primary project vault."),
41
+ cwd: projectParam,
42
+ allowProtectedBranch: z
43
+ .boolean()
44
+ .optional()
45
+ .describe("One-time override for protected branch checks. " +
46
+ "When true, move_memory can commit on a protected branch without changing project policy."),
47
+ }),
48
+ outputSchema: MoveResultSchema,
49
+ }, async ({ id, target, vaultFolder, cwd, allowProtectedBranch = false }) => {
50
+ await ensureBranchSynced(ctx, cwd);
51
+ const found = await ctx.vaultManager.findNote(id, cwd);
52
+ if (!found) {
53
+ return { content: [{ type: "text", text: `No memory found with id '${id}'` }], isError: true };
54
+ }
55
+ const currentStorage = storageLabel(found.vault);
56
+ let targetVault;
57
+ let targetProject;
58
+ if (target === "main-vault") {
59
+ targetVault = ctx.vaultManager.main;
60
+ }
61
+ else {
62
+ if (!cwd) {
63
+ return {
64
+ content: [{
65
+ type: "text",
66
+ text: "Moving into a project vault requires `cwd` so mnemonic can resolve the destination project.",
67
+ }],
68
+ isError: true,
69
+ };
70
+ }
71
+ if (vaultFolder) {
72
+ // Target a specific submodule vault by folder name.
73
+ const subVault = await ctx.vaultManager.getVaultByFolder(cwd, vaultFolder);
74
+ if (!subVault) {
75
+ return {
76
+ content: [{ type: "text", text: `Vault folder '${vaultFolder}' not found under the git root for: ${cwd}` }],
77
+ isError: true,
78
+ };
79
+ }
80
+ targetVault = subVault;
81
+ }
82
+ else {
83
+ // Default: primary project vault (.mnemonic).
84
+ const projectVault = await ctx.vaultManager.getOrCreateProjectVault(cwd);
85
+ if (!projectVault) {
86
+ return { content: [{ type: "text", text: `Could not resolve a project vault for: ${cwd}` }], isError: true };
87
+ }
88
+ targetVault = projectVault;
89
+ }
90
+ targetProject = await resolveProject(ctx, cwd);
91
+ if (!targetProject) {
92
+ return projectNotFoundResponse(cwd);
93
+ }
94
+ }
95
+ // Check if the note is already in the target vault.
96
+ if (found.vault.storage.vaultPath === targetVault.storage.vaultPath) {
97
+ const targetLabel = storageLabel(targetVault);
98
+ return { content: [{ type: "text", text: `Memory '${id}' is already stored in ${targetLabel}.` }], isError: true };
99
+ }
100
+ if (found.vault.isProject || targetVault.isProject) {
101
+ const resolvedProject = targetProject ?? await resolveProject(ctx, cwd);
102
+ const projectLabel = resolvedProject
103
+ ? `${resolvedProject.name} (${resolvedProject.id})`
104
+ : `${found.note.projectName ?? "project"} (${found.note.project ?? "unknown"})`;
105
+ const projectId = targetProject?.id ?? found.note.project;
106
+ const policy = projectId ? await ctx.configStore.getProjectPolicy(projectId) : undefined;
107
+ const protectedBranchCheck = await shouldBlockProtectedBranchCommit({
108
+ ctx,
109
+ cwd,
110
+ writeScope: "project",
111
+ automaticCommit: true,
112
+ projectLabel,
113
+ policy,
114
+ allowProtectedBranch,
115
+ toolName: "move_memory",
116
+ });
117
+ if (protectedBranchCheck.blocked) {
118
+ return {
119
+ content: [{ type: "text", text: protectedBranchCheck.message ?? "Protected branch policy blocked this commit." }],
120
+ isError: true,
121
+ };
122
+ }
123
+ }
124
+ const targetLabel = storageLabel(targetVault);
125
+ const existing = await targetVault.storage.readNote(memoryId(id));
126
+ if (existing) {
127
+ return { content: [{ type: "text", text: `Cannot move '${id}' because a note with that id already exists in ${targetLabel}.` }], isError: true };
128
+ }
129
+ let noteToWrite = found.note;
130
+ let metadataRewritten = false;
131
+ if (target === "project-vault" && targetProject) {
132
+ const rewrittenProject = targetProject.id;
133
+ const rewrittenProjectName = targetProject.name;
134
+ metadataRewritten = noteToWrite.project !== rewrittenProject || noteToWrite.projectName !== rewrittenProjectName;
135
+ noteToWrite = {
136
+ ...noteToWrite,
137
+ project: rewrittenProject,
138
+ projectName: rewrittenProjectName,
139
+ updatedAt: isoDateString(new Date().toISOString()),
140
+ };
141
+ }
142
+ const moveResult = await moveNoteBetweenVaults(ctx, found, targetVault, noteToWrite, cwd);
143
+ const movedNote = moveResult.note;
144
+ const associationValue = movedNote.projectName && movedNote.project
145
+ ? `${movedNote.projectName} (${movedNote.project})`
146
+ : movedNote.projectName ?? movedNote.project ?? "global";
147
+ const structuredContent = {
148
+ action: "moved",
149
+ id,
150
+ fromVault: currentStorage,
151
+ toVault: targetLabel,
152
+ projectAssociation: associationValue,
153
+ title: movedNote.title,
154
+ metadataRewritten,
155
+ persistence: moveResult.persistence,
156
+ };
157
+ const associationText = metadataRewritten
158
+ ? `Project association is now ${associationValue}.`
159
+ : `Project association remains ${associationValue}.`;
160
+ invalidateActiveProjectCache();
161
+ return {
162
+ content: [{
163
+ type: "text",
164
+ text: `Moved '${id}' from ${currentStorage} to ${targetLabel}. ${associationText}\n${formatPersistenceSummary(moveResult.persistence)}`,
165
+ }],
166
+ structuredContent,
167
+ };
168
+ });
169
+ }
170
+ //# sourceMappingURL=move-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-memory.js","sourceRoot":"","sources":["../../src/tools/move-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ServerContext } from "../server-context.js";
3
+ export declare function registerSetProjectMemoryPolicyTool(server: McpServer, ctx: ServerContext): void;
4
+ export declare function registerGetProjectMemoryPolicyTool(server: McpServer, ctx: ServerContext): void;
5
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/tools/policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAQ1D,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CA6I9F;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CA8E9F"}
@@ -0,0 +1,195 @@
1
+ import { z } from "zod";
2
+ import { resolveProject as resolveProjectFromModule } from "../helpers/project.js";
3
+ import { projectNotFoundResponse } from "../helpers/vault.js";
4
+ import { CONSOLIDATION_MODES, PROTECTED_BRANCH_BEHAVIORS, PROJECT_POLICY_SCOPES } from "../project-memory-policy.js";
5
+ import { formatCommitBody } from "../helpers/git-commit.js";
6
+ import { pushAfterMutation as pushAfterMutationFromModule, buildMutationRetryContract, formatRetrySummary } from "../helpers/persistence.js";
7
+ import { PolicyResultSchema } from "../structured-content.js";
8
+ export function registerSetProjectMemoryPolicyTool(server, ctx) {
9
+ server.registerTool("set_project_memory_policy", {
10
+ title: "Set Project Memory Policy",
11
+ description: "Set the default write scope and memory behavior for a project.\n\n" +
12
+ "Use this when:\n" +
13
+ "- A project should default to project or global storage\n" +
14
+ "- Protected-branch handling or consolidation behavior should be standardized\n\n" +
15
+ "Do not use this when:\n" +
16
+ "- You only need a one-off write location for a single `remember` call\n\n" +
17
+ "Returns:\n" +
18
+ "- The saved project policy and effective values\n\n" +
19
+ "Side effects: writes config, git commits, and may push.\n\n" +
20
+ "Typical next step:\n" +
21
+ "- Use `get_project_memory_policy` to verify the saved policy.",
22
+ annotations: {
23
+ readOnlyHint: false,
24
+ destructiveHint: false,
25
+ idempotentHint: true,
26
+ openWorldHint: false,
27
+ },
28
+ inputSchema: z.object({
29
+ cwd: z.string().describe("Absolute project working directory. Pass this whenever the task is project-related so routing, search boosting, policy, and vault selection work correctly."),
30
+ defaultScope: z.enum(PROJECT_POLICY_SCOPES).optional().describe("Default storage: 'project' = shared project vault, 'global' = private main vault, 'ask' = prompt each time"),
31
+ consolidationMode: z.enum(CONSOLIDATION_MODES).optional().describe("Default consolidation mode: 'supersedes' preserves history (default), 'delete' removes sources immediately"),
32
+ protectedBranchBehavior: z.enum(PROTECTED_BRANCH_BEHAVIORS).optional().describe("Behavior for protected-branch matches during project-vault commits by mutating tools: 'ask', 'block', or 'allow'"),
33
+ protectedBranchPatterns: z.array(z.string()).optional().describe("Protected branch glob patterns. Defaults to [\"main\", \"master\", \"release*\"] when not set"),
34
+ }),
35
+ outputSchema: PolicyResultSchema,
36
+ }, async ({ cwd, defaultScope, consolidationMode, protectedBranchBehavior, protectedBranchPatterns }) => {
37
+ const project = await resolveProjectFromModule(ctx, cwd);
38
+ if (!project) {
39
+ return projectNotFoundResponse(cwd);
40
+ }
41
+ if (defaultScope === undefined
42
+ && consolidationMode === undefined
43
+ && protectedBranchBehavior === undefined
44
+ && protectedBranchPatterns === undefined) {
45
+ return {
46
+ content: [{
47
+ type: "text",
48
+ text: "No policy fields provided. Set at least one of: defaultScope, consolidationMode, protectedBranchBehavior, protectedBranchPatterns.",
49
+ }],
50
+ isError: true,
51
+ };
52
+ }
53
+ const existing = await ctx.configStore.getProjectPolicy(project.id);
54
+ const effectiveDefaultScope = defaultScope ?? existing?.defaultScope ?? "project";
55
+ const effectiveConsolidationMode = consolidationMode ?? existing?.consolidationMode;
56
+ const effectiveProtectedBranchBehavior = protectedBranchBehavior ?? existing?.protectedBranchBehavior;
57
+ const effectiveProtectedBranchPatterns = protectedBranchPatterns
58
+ ? protectedBranchPatterns.map((pattern) => pattern.trim()).filter((pattern) => pattern.length > 0)
59
+ : existing?.protectedBranchPatterns;
60
+ const now = new Date().toISOString();
61
+ const policy = {
62
+ projectId: project.id,
63
+ projectName: project.name,
64
+ defaultScope: effectiveDefaultScope,
65
+ consolidationMode: effectiveConsolidationMode,
66
+ protectedBranchBehavior: effectiveProtectedBranchBehavior,
67
+ protectedBranchPatterns: effectiveProtectedBranchPatterns,
68
+ updatedAt: now,
69
+ };
70
+ await ctx.configStore.setProjectPolicy(policy);
71
+ const modeStr = effectiveConsolidationMode ? `, consolidationMode=${effectiveConsolidationMode}` : "";
72
+ const branchBehaviorStr = effectiveProtectedBranchBehavior
73
+ ? `, protectedBranchBehavior=${effectiveProtectedBranchBehavior}`
74
+ : "";
75
+ const branchPatternsStr = effectiveProtectedBranchPatterns && effectiveProtectedBranchPatterns.length > 0
76
+ ? `, protectedBranchPatterns=${effectiveProtectedBranchPatterns.join("|")}`
77
+ : "";
78
+ const commitBody = formatCommitBody({
79
+ projectName: project.name,
80
+ description: `Default scope: ${effectiveDefaultScope}` +
81
+ `${effectiveConsolidationMode ? `\nConsolidation mode: ${effectiveConsolidationMode}` : ""}` +
82
+ `${effectiveProtectedBranchBehavior ? `\nProtected branch behavior: ${effectiveProtectedBranchBehavior}` : ""}` +
83
+ `${effectiveProtectedBranchPatterns && effectiveProtectedBranchPatterns.length > 0
84
+ ? `\nProtected branch patterns: ${effectiveProtectedBranchPatterns.join(", ")}`
85
+ : ""}`,
86
+ });
87
+ const commitMessage = `policy: ${project.name} default scope ${effectiveDefaultScope}`;
88
+ const commitFiles = ["config.json"];
89
+ const commitStatus = await ctx.vaultManager.main.git.commitWithStatus(commitMessage, commitFiles, commitBody);
90
+ const pushStatus = commitStatus.status === "committed"
91
+ ? await pushAfterMutationFromModule(ctx, ctx.vaultManager.main)
92
+ : { status: "skipped", reason: "commit-failed" };
93
+ const retry = buildMutationRetryContract({
94
+ commit: commitStatus,
95
+ commitMessage,
96
+ commitBody,
97
+ files: commitFiles,
98
+ cwd,
99
+ vault: ctx.vaultManager.main,
100
+ mutationApplied: true,
101
+ });
102
+ const structuredContent = {
103
+ action: "policy_set",
104
+ project: { id: project.id, name: project.name },
105
+ defaultScope: effectiveDefaultScope,
106
+ consolidationMode: effectiveConsolidationMode,
107
+ protectedBranchBehavior: effectiveProtectedBranchBehavior,
108
+ protectedBranchPatterns: effectiveProtectedBranchPatterns,
109
+ updatedAt: now,
110
+ retry,
111
+ };
112
+ return {
113
+ content: [{
114
+ type: "text",
115
+ text: `Project memory policy set for ${project.name}: defaultScope=${effectiveDefaultScope}` +
116
+ `${modeStr}${branchBehaviorStr}${branchPatternsStr}` +
117
+ `${commitStatus.status === "failed"
118
+ ? `\n${formatRetrySummary(retry) ?? `Commit failed. Push status: ${pushStatus.status}.`}`
119
+ : ""}`,
120
+ }],
121
+ structuredContent,
122
+ };
123
+ });
124
+ }
125
+ export function registerGetProjectMemoryPolicyTool(server, ctx) {
126
+ server.registerTool("get_project_memory_policy", {
127
+ title: "Get Project Memory Policy",
128
+ description: "Show the saved memory policy for a project.\n\n" +
129
+ "Use this when:\n" +
130
+ "- You want to confirm the default write scope before storing memory\n" +
131
+ "- You are debugging why notes land in an unexpected vault\n" +
132
+ "- You need to inspect protected-branch or consolidation defaults\n\n" +
133
+ "Do not use this when:\n" +
134
+ "- You want to change the policy; use `set_project_memory_policy`\n\n" +
135
+ "Returns:\n" +
136
+ "- Saved policy values or an explanation of the fallback behavior\n\n" +
137
+ "Read-only.\n\n" +
138
+ "Typical next step:\n" +
139
+ "- Call `remember` with explicit `scope` for a one-off override, or `set_project_memory_policy` to change defaults.",
140
+ annotations: {
141
+ readOnlyHint: true,
142
+ destructiveHint: false,
143
+ idempotentHint: true,
144
+ openWorldHint: false,
145
+ },
146
+ inputSchema: z.object({
147
+ cwd: z.string().describe("Absolute project working directory. Pass this whenever the task is project-related so routing, search boosting, policy, and vault selection work correctly."),
148
+ }),
149
+ outputSchema: PolicyResultSchema,
150
+ }, async ({ cwd }) => {
151
+ const project = await resolveProjectFromModule(ctx, cwd);
152
+ if (!project) {
153
+ return projectNotFoundResponse(cwd);
154
+ }
155
+ const policy = await ctx.configStore.getProjectPolicy(project.id);
156
+ if (!policy) {
157
+ const structuredContent = {
158
+ action: "policy_shown",
159
+ project: { id: project.id, name: project.name },
160
+ };
161
+ return {
162
+ content: [{
163
+ type: "text",
164
+ text: `No project memory policy set for ${project.name}. Default write behavior remains scope=project when cwd is present.`,
165
+ }],
166
+ structuredContent,
167
+ };
168
+ }
169
+ const structuredContent = {
170
+ action: "policy_shown",
171
+ project: { id: project.id, name: project.name },
172
+ defaultScope: policy.defaultScope,
173
+ consolidationMode: policy.consolidationMode,
174
+ protectedBranchBehavior: policy.protectedBranchBehavior,
175
+ protectedBranchPatterns: policy.protectedBranchPatterns,
176
+ updatedAt: policy.updatedAt,
177
+ };
178
+ const details = [
179
+ `defaultScope=${policy.defaultScope}`,
180
+ policy.consolidationMode ? `consolidationMode=${policy.consolidationMode}` : undefined,
181
+ policy.protectedBranchBehavior ? `protectedBranchBehavior=${policy.protectedBranchBehavior}` : undefined,
182
+ policy.protectedBranchPatterns && policy.protectedBranchPatterns.length > 0
183
+ ? `protectedBranchPatterns=${policy.protectedBranchPatterns.join("|")}`
184
+ : undefined,
185
+ ].filter(Boolean).join(", ");
186
+ return {
187
+ content: [{
188
+ type: "text",
189
+ text: `Project memory policy for ${project.name}: ${details} (updated ${policy.updatedAt})`,
190
+ }],
191
+ structuredContent,
192
+ };
193
+ });
194
+ }
195
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/tools/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ServerContext } from "../server-context.js";
3
+ export declare function registerProjectMemorySummaryTool(server: McpServer, ctx: ServerContext): void;
4
+ //# sourceMappingURL=project-memory-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-memory-summary.d.ts","sourceRoot":"","sources":["../../src/tools/project-memory-summary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAsC1D,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAkhB5F"}