@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,123 @@
1
+ import { z } from "zod";
2
+ import { NoteIdSchema, ForgetResultSchema, } from "../structured-content.js";
3
+ import { projectParam, resolveProject, noteProjectRef, ensureBranchSynced, } from "../helpers/project.js";
4
+ import { memoryId } from "../brands.js";
5
+ import { formatCommitBody, shouldBlockProtectedBranchCommit, wouldRelationshipCleanupTouchProjectVault, } from "../helpers/git-commit.js";
6
+ import { buildMutationRetryContract, formatRetrySummary, pushAfterMutation, } from "../helpers/persistence.js";
7
+ import { removeRelationshipsToNoteIds, addVaultChange, storageLabel, } from "../helpers/vault.js";
8
+ import { invalidateActiveProjectCache } from "../cache.js";
9
+ export function registerForgetTool(server, ctx) {
10
+ server.registerTool("forget", {
11
+ title: "Forget",
12
+ description: "Delete an existing memory by id and clean up dangling relationships.\n\n" +
13
+ "Use this when:\n" +
14
+ "- A memory should be removed entirely\n" +
15
+ "- A note is obsolete and should not remain searchable\n\n" +
16
+ "Do not use this when:\n" +
17
+ "- The note should stay but move to another vault; use `move_memory`\n" +
18
+ "- The note should be replaced or merged; use `consolidate`\n\n" +
19
+ "Returns:\n" +
20
+ "- Deleted memory id/title and relationship cleanup details\n\n" +
21
+ "Side effects: deletes note files, cleans relationship references, git commits, and may push.\n\n" +
22
+ "Typical next step:\n" +
23
+ "- Use `recall` or `list` to confirm the remaining memory set is clean.",
24
+ annotations: {
25
+ readOnlyHint: false,
26
+ destructiveHint: true,
27
+ idempotentHint: true,
28
+ openWorldHint: false,
29
+ },
30
+ inputSchema: z.object({
31
+ id: NoteIdSchema.describe("Exact memory id. Use an id returned by `recall`, `list`, `recent_memories`, or `where_is`."),
32
+ cwd: projectParam,
33
+ allowProtectedBranch: z
34
+ .boolean()
35
+ .optional()
36
+ .describe("One-time override for protected branch checks. " +
37
+ "When true, forget can commit on a protected branch without changing project policy."),
38
+ }),
39
+ outputSchema: ForgetResultSchema,
40
+ }, async ({ id, cwd, allowProtectedBranch = false }) => {
41
+ await ensureBranchSynced(ctx, cwd);
42
+ const found = await ctx.vaultManager.findNote(id, cwd);
43
+ if (!found) {
44
+ return { content: [{ type: "text", text: `No memory found with id '${id}'` }], isError: true };
45
+ }
46
+ const { note, vault: noteVault } = found;
47
+ const touchesProjectVault = noteVault.isProject || await wouldRelationshipCleanupTouchProjectVault(ctx, [id]);
48
+ if (touchesProjectVault) {
49
+ const resolvedProject = await resolveProject(ctx, cwd);
50
+ const projectLabel = resolvedProject
51
+ ? `${resolvedProject.name} (${resolvedProject.id})`
52
+ : `${note.projectName ?? "project"} (${note.project ?? "unknown"})`;
53
+ const policy = note.project ? await ctx.configStore.getProjectPolicy(note.project) : undefined;
54
+ const protectedBranchCheck = await shouldBlockProtectedBranchCommit({
55
+ ctx,
56
+ cwd,
57
+ writeScope: "project",
58
+ automaticCommit: true,
59
+ projectLabel,
60
+ policy,
61
+ allowProtectedBranch,
62
+ toolName: "forget",
63
+ });
64
+ if (protectedBranchCheck.blocked) {
65
+ return {
66
+ content: [{ type: "text", text: protectedBranchCheck.message ?? "Protected branch policy blocked this commit." }],
67
+ isError: true,
68
+ };
69
+ }
70
+ }
71
+ await noteVault.storage.deleteNote(memoryId(id));
72
+ // Clean up dangling references grouped by vault so we make one commit per vault
73
+ const vaultChanges = await removeRelationshipsToNoteIds(ctx, [id]);
74
+ // Always include the deleted note's path (git add on a deleted file stages the removal)
75
+ addVaultChange(vaultChanges, noteVault, ctx.vaultManager.noteRelPath(noteVault, id));
76
+ let retry;
77
+ for (const [v, files] of vaultChanges) {
78
+ const isPrimaryVault = v === noteVault;
79
+ const summary = isPrimaryVault ? `Deleted note and cleaned up ${files.length - 1} reference(s)` : "Cleaned up dangling reference";
80
+ const commitBody = formatCommitBody({
81
+ summary,
82
+ noteId: id,
83
+ noteTitle: note.title,
84
+ projectName: note.projectName,
85
+ });
86
+ const commitMessage = `forget: ${note.title}`;
87
+ const commitStatus = await v.git.commitWithStatus(commitMessage, files, commitBody);
88
+ if (!retry) {
89
+ retry = buildMutationRetryContract({
90
+ commit: commitStatus,
91
+ commitMessage,
92
+ commitBody,
93
+ files,
94
+ cwd,
95
+ vault: v,
96
+ mutationApplied: true,
97
+ });
98
+ }
99
+ if (commitStatus.status === "committed") {
100
+ await pushAfterMutation(ctx, v);
101
+ }
102
+ }
103
+ const structuredContent = {
104
+ action: "forgotten",
105
+ id,
106
+ title: note.title,
107
+ project: noteProjectRef(note),
108
+ relationshipsCleaned: vaultChanges.size > 0 ? Array.from(vaultChanges.values()).reduce((sum, files) => sum + files.length - 1, 0) : 0,
109
+ vaultsModified: Array.from(vaultChanges.keys()).map(v => storageLabel(v)),
110
+ retry,
111
+ };
112
+ const retrySummary = formatRetrySummary(retry);
113
+ invalidateActiveProjectCache();
114
+ return {
115
+ content: [{
116
+ type: "text",
117
+ text: `Forgotten '${id}' (${note.title})${retrySummary ? `\n${retrySummary}` : ""}`,
118
+ }],
119
+ structuredContent,
120
+ };
121
+ });
122
+ }
123
+ //# sourceMappingURL=forget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forget.js","sourceRoot":"","sources":["../../src/tools/forget.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 registerGetProjectIdentityTool(server: McpServer, ctx: ServerContext): void;
4
+ //# sourceMappingURL=get-project-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project-identity.d.ts","sourceRoot":"","sources":["../../src/tools/get-project-identity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CA2D1F"}
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { resolveProjectIdentityForCwd as resolveProjectIdentityForCwdFromModule } from "../helpers/project.js";
3
+ import { projectNotFoundResponse } from "../helpers/vault.js";
4
+ import { formatProjectIdentityText } from "./detect-project.js";
5
+ import { ProjectIdentityResultSchema } from "../structured-content.js";
6
+ export function registerGetProjectIdentityTool(server, ctx) {
7
+ server.registerTool("get_project_identity", {
8
+ title: "Get Project Identity",
9
+ description: "Show the effective project identity for a working directory, including any configured remote override.\n\n" +
10
+ "Use this when:\n" +
11
+ "- You need to verify whether project identity comes from `origin`, `upstream`, or an override\n" +
12
+ "- You are debugging project scoping issues\n\n" +
13
+ "Do not use this when:\n" +
14
+ "- You only need the project id/name to continue; use `detect_project` instead\n\n" +
15
+ "Returns:\n" +
16
+ "- Effective project identity, default identity, and any configured override\n\n" +
17
+ "Read-only.\n\n" +
18
+ "Typical next step:\n" +
19
+ "- Use `set_project_identity` only if the wrong remote is defining identity.",
20
+ annotations: {
21
+ readOnlyHint: true,
22
+ destructiveHint: false,
23
+ idempotentHint: true,
24
+ openWorldHint: false,
25
+ },
26
+ inputSchema: z.object({
27
+ 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."),
28
+ }),
29
+ outputSchema: ProjectIdentityResultSchema,
30
+ }, async ({ cwd }) => {
31
+ const identity = await resolveProjectIdentityForCwdFromModule(ctx, cwd);
32
+ if (!identity) {
33
+ return projectNotFoundResponse(cwd);
34
+ }
35
+ const structuredContent = {
36
+ action: "project_identity_shown",
37
+ project: {
38
+ id: identity.project.id,
39
+ name: identity.project.name,
40
+ source: identity.project.source,
41
+ remoteName: identity.project.remoteName,
42
+ },
43
+ defaultProject: identity.defaultProject ? {
44
+ id: identity.defaultProject.id,
45
+ name: identity.defaultProject.name,
46
+ remoteName: identity.defaultProject.remoteName,
47
+ } : undefined,
48
+ identityOverride: identity.identityOverride,
49
+ };
50
+ return {
51
+ content: [{
52
+ type: "text",
53
+ text: formatProjectIdentityText(identity),
54
+ }],
55
+ structuredContent,
56
+ };
57
+ });
58
+ }
59
+ //# sourceMappingURL=get-project-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project-identity.js","sourceRoot":"","sources":["../../src/tools/get-project-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,4BAA4B,IAAI,sCAAsC,EAAE,MAAM,uBAAuB,CAAC;AAC/G,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAA8B,MAAM,0BAA0B,CAAC;AAEnG,MAAM,UAAU,8BAA8B,CAAC,MAAiB,EAAE,GAAkB;IAClF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,4GAA4G;YAC5G,kBAAkB;YAClB,iGAAiG;YACjG,gDAAgD;YAChD,yBAAyB;YACzB,mFAAmF;YACnF,YAAY;YACZ,iFAAiF;YACjF,gBAAgB;YAChB,sBAAsB;YACtB,6EAA6E;QAC/E,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6JAA6J,CAAC;SACxL,CAAC;QACF,YAAY,EAAE,2BAA2B;KAC1C,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QAChB,MAAM,QAAQ,GAAG,MAAM,sCAAsC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,iBAAiB,GAA0B;YAC/C,MAAM,EAAE,wBAAwB;YAChC,OAAO,EAAE;gBACP,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;gBACvB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI;gBAC3B,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM;gBAC/B,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU;aACxC;YACD,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;gBACxC,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;gBAC9B,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI;gBAClC,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU;aAC/C,CAAC,CAAC,CAAC,SAAS;YACb,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;SAC5C,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yBAAyB,CAAC,QAAQ,CAAC;iBAC1C,CAAC;YACF,iBAAiB;SAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -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 registerGetTool(server: McpServer, ctx: ServerContext): void;
4
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/tools/get.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAwB1D,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAyH3E"}
@@ -0,0 +1,115 @@
1
+ import { z } from "zod";
2
+ import { performance } from "perf_hooks";
3
+ import { GetResultSchema, NoteIdSchema, } from "../structured-content.js";
4
+ import { ensureBranchSynced, resolveProject, noteProjectRef, projectParam, } from "../helpers/project.js";
5
+ import { storageLabel } from "../helpers/vault.js";
6
+ import { formatRelationshipPreview } from "../helpers/index.js";
7
+ import { getSessionCachedNote, setSessionCachedNote, recordSessionNoteAccess, } from "../cache.js";
8
+ import { getRelationshipPreview } from "../relationships.js";
9
+ export function registerGetTool(server, ctx) {
10
+ server.registerTool("get", {
11
+ title: "Get Memory",
12
+ description: "Use after `recall`, `list`, or `recent_memories` when you need the full note content.\n\n" +
13
+ "Fetch one or more memories by exact id.\n\n" +
14
+ "Use this when:\n" +
15
+ "- You already know the memory id and need the full note content\n" +
16
+ "- A previous tool returned ids that you now want to inspect exactly\n\n" +
17
+ "Do not use this when:\n" +
18
+ "- You are still searching by topic; use `recall`\n" +
19
+ "- You want to browse many notes; use `list`\n\n" +
20
+ "Returns:\n" +
21
+ "- Full note content and metadata for the requested ids, including storage label\n" +
22
+ "- Bounded 1-hop relationship previews when `includeRelationships` is true (max 3 shown)\n\n" +
23
+ "Read-only.\n\n" +
24
+ "Typical next step:\n" +
25
+ "- Use `update`, `forget`, `move_memory`, or `relate` after inspection.",
26
+ annotations: {
27
+ readOnlyHint: true,
28
+ destructiveHint: false,
29
+ idempotentHint: true,
30
+ openWorldHint: false,
31
+ },
32
+ inputSchema: z.object({
33
+ ids: z.array(NoteIdSchema).min(1).describe("One or more memory ids to fetch"),
34
+ cwd: projectParam,
35
+ includeRelationships: z.boolean().optional().default(false).describe("Include bounded direct relationship previews (1-hop expansion, max 3 shown)"),
36
+ }),
37
+ outputSchema: GetResultSchema,
38
+ }, async ({ ids, cwd, includeRelationships }) => {
39
+ const t0Get = performance.now();
40
+ await ensureBranchSynced(ctx, cwd);
41
+ const project = await resolveProject(ctx, cwd);
42
+ const found = [];
43
+ const notFound = [];
44
+ for (const id of ids) {
45
+ // Check session cache before hitting storage
46
+ let result = null;
47
+ if (project) {
48
+ for (const vault of ctx.vaultManager.allKnownVaults()) {
49
+ const cached = getSessionCachedNote(project.id, vault.storage.vaultPath, id);
50
+ if (cached !== undefined) {
51
+ result = { note: cached, vault };
52
+ break;
53
+ }
54
+ }
55
+ }
56
+ if (!result) {
57
+ result = await ctx.vaultManager.findNote(id, cwd);
58
+ }
59
+ if (!result) {
60
+ notFound.push(id);
61
+ continue;
62
+ }
63
+ const { note, vault } = result;
64
+ let relationships;
65
+ if (includeRelationships) {
66
+ relationships = await getRelationshipPreview(note, ctx.vaultManager.allKnownVaults(), { activeProjectId: project?.id, limit: 3 });
67
+ }
68
+ found.push({
69
+ id: note.id,
70
+ title: note.title,
71
+ content: note.content,
72
+ project: noteProjectRef(note),
73
+ tags: note.tags,
74
+ lifecycle: note.lifecycle,
75
+ role: note.role,
76
+ alwaysLoad: note.alwaysLoad,
77
+ relatedTo: note.relatedTo,
78
+ createdAt: note.createdAt,
79
+ updatedAt: note.updatedAt,
80
+ vault: storageLabel(vault),
81
+ relationships,
82
+ });
83
+ if (project) {
84
+ setSessionCachedNote(project.id, vault.storage.vaultPath, note);
85
+ recordSessionNoteAccess(project.id, vault.storage.vaultPath, note.id, "get");
86
+ }
87
+ }
88
+ const lines = [];
89
+ for (const note of found) {
90
+ lines.push(`## ${note.title} (${note.id})`);
91
+ lines.push(`project: ${note.project?.name ?? "global"} | stored: ${note.vault} | lifecycle: ${note.lifecycle}${note.role ? ` | role: ${note.role}` : ""}`);
92
+ if (note.tags.length > 0)
93
+ lines.push(`tags: ${note.tags.join(", ")}`);
94
+ lines.push("");
95
+ lines.push(note.content);
96
+ if (note.relationships) {
97
+ lines.push("");
98
+ lines.push(formatRelationshipPreview(note.relationships));
99
+ }
100
+ lines.push("");
101
+ }
102
+ if (notFound.length > 0) {
103
+ lines.push(`Not found: ${notFound.join(", ")}`);
104
+ }
105
+ const structuredContent = {
106
+ action: "got",
107
+ count: found.length,
108
+ notes: found,
109
+ notFound,
110
+ };
111
+ console.error(`[get:timing] ${(performance.now() - t0Get).toFixed(1)}ms`);
112
+ return { content: [{ type: "text", text: lines.join("\n").trim() }], structuredContent };
113
+ });
114
+ }
115
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/tools/get.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 registerAllTools(server: McpServer, ctx: ServerContext): void;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAwB1D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAwB5E"}
@@ -0,0 +1,47 @@
1
+ import { registerDetectProjectTool } from "./detect-project.js";
2
+ import { registerGetProjectIdentityTool } from "./get-project-identity.js";
3
+ import { registerSetProjectIdentityTool } from "./set-project-identity.js";
4
+ import { registerListMigrationsTool, registerExecuteMigrationTool } from "./migration.js";
5
+ import { registerSetProjectMemoryPolicyTool, registerGetProjectMemoryPolicyTool } from "./policy.js";
6
+ import { registerRememberTool } from "./remember.js";
7
+ import { registerRecallTool } from "./recall.js";
8
+ import { registerUpdateTool } from "./update.js";
9
+ import { registerForgetTool } from "./forget.js";
10
+ import { registerGetTool } from "./get.js";
11
+ import { registerWhereIsMemoryTool } from "./where-is-memory.js";
12
+ import { registerListTool } from "./list.js";
13
+ import { registerDiscoverTagsTool } from "./discover-tags.js";
14
+ import { registerRecentMemoriesTool } from "./recent-memories.js";
15
+ import { registerMemoryGraphTool } from "./memory-graph.js";
16
+ import { registerProjectMemorySummaryTool } from "./project-memory-summary.js";
17
+ import { registerSyncTool } from "./sync.js";
18
+ import { registerMoveMemoryTool } from "./move-memory.js";
19
+ import { registerRelateTool } from "./relate.js";
20
+ import { registerUnrelateTool } from "./unrelate.js";
21
+ import { registerConsolidateTool } from "./consolidate.js";
22
+ export function registerAllTools(server, ctx) {
23
+ registerDetectProjectTool(server, ctx);
24
+ registerGetProjectIdentityTool(server, ctx);
25
+ registerSetProjectIdentityTool(server, ctx);
26
+ registerListMigrationsTool(server, ctx);
27
+ registerExecuteMigrationTool(server, ctx);
28
+ registerSetProjectMemoryPolicyTool(server, ctx);
29
+ registerGetProjectMemoryPolicyTool(server, ctx);
30
+ registerRememberTool(server, ctx);
31
+ registerRecallTool(server, ctx);
32
+ registerUpdateTool(server, ctx);
33
+ registerForgetTool(server, ctx);
34
+ registerGetTool(server, ctx);
35
+ registerWhereIsMemoryTool(server, ctx);
36
+ registerListTool(server, ctx);
37
+ registerDiscoverTagsTool(server, ctx);
38
+ registerRecentMemoriesTool(server, ctx);
39
+ registerMemoryGraphTool(server, ctx);
40
+ registerProjectMemorySummaryTool(server, ctx);
41
+ registerSyncTool(server, ctx);
42
+ registerMoveMemoryTool(server, ctx);
43
+ registerRelateTool(server, ctx);
44
+ registerUnrelateTool(server, ctx);
45
+ registerConsolidateTool(server, ctx);
46
+ }
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,kCAAkC,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,GAAkB;IACpE,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,8BAA8B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5C,8BAA8B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5C,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,4BAA4B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,kCAAkC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,kCAAkC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,gCAAgC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC"}
@@ -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 registerListTool(server: McpServer, ctx: ServerContext): void;
4
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAoH5E"}
@@ -0,0 +1,95 @@
1
+ import { z } from "zod";
2
+ import { ListResultSchema } from "../structured-content.js";
3
+ import { projectParam, ensureBranchSynced, noteProjectRef } from "../helpers/project.js";
4
+ import { collectVisibleNotes, formatListEntry, storageLabel } from "../helpers/vault.js";
5
+ export function registerListTool(server, ctx) {
6
+ server.registerTool("list", {
7
+ title: "List Memories",
8
+ description: "List stored memories with filtering by scope, storage label, and tags.\n\n" +
9
+ "Use this when:\n" +
10
+ "- You want to browse what exists for a project or globally\n" +
11
+ "- You want a deterministic filtered list rather than a semantic search\n" +
12
+ "- You are checking inventory before creating, updating, or consolidating notes\n\n" +
13
+ "Do not use this when:\n" +
14
+ "- You want topic-based semantic search; use `recall`\n" +
15
+ "- You already know the exact id; use `get`\n\n" +
16
+ "Returns:\n" +
17
+ "- Matching memories with ids, titles, scope/storage context, and metadata\n\n" +
18
+ "Read-only.\n\n" +
19
+ "Typical next step:\n" +
20
+ "- Use `get` for exact inspection or `update` / `consolidate` for cleanup.",
21
+ annotations: {
22
+ readOnlyHint: true,
23
+ destructiveHint: false,
24
+ idempotentHint: true,
25
+ openWorldHint: false,
26
+ },
27
+ inputSchema: z.object({
28
+ cwd: projectParam,
29
+ scope: z
30
+ .enum(["project", "global", "all"])
31
+ .optional()
32
+ .default("all")
33
+ .describe("'project' = only this project's memories (project-scoped storage); " +
34
+ "'global' = only unscoped memories (main/global storage); " +
35
+ "'all' = everything visible from this context (default)"),
36
+ storedIn: z
37
+ .enum(["project-vault", "main-vault", "any"])
38
+ .optional()
39
+ .default("any")
40
+ .describe("Storage-label filter. Use `main-vault` for main/global storage. " +
41
+ "Use `project-vault` as the broad filter for any project vault, including sub-vaults. " +
42
+ "Results may still return a more specific label such as `sub-vault:.mnemonic-lib`."),
43
+ tags: z.array(z.string()).optional().describe("Filter to notes matching all of these tags."),
44
+ includeRelations: z.boolean().optional().default(false).describe("Include related memory ids and relationship types"),
45
+ includePreview: z.boolean().optional().default(false).describe("Include a short content preview for each note"),
46
+ includeStorage: z.boolean().optional().default(false).describe("Show which vault each note is stored in"),
47
+ includeUpdated: z.boolean().optional().default(false).describe("Include last-updated timestamp for each note"),
48
+ }),
49
+ outputSchema: ListResultSchema,
50
+ }, async ({ cwd, scope, storedIn, tags, includeRelations, includePreview, includeStorage, includeUpdated }) => {
51
+ await ensureBranchSynced(ctx, cwd);
52
+ const { project, entries } = await collectVisibleNotes(ctx, cwd, scope, tags, storedIn);
53
+ if (entries.length === 0) {
54
+ const structuredContent = { action: "listed", count: 0, scope: scope || "all", storedIn: storedIn || "any", project: project ? { id: project.id, name: project.name } : undefined, notes: [] };
55
+ return { content: [{ type: "text", text: "No memories found." }], structuredContent };
56
+ }
57
+ const lines = entries.map((entry) => formatListEntry(entry, {
58
+ includeRelations,
59
+ includePreview,
60
+ includeStorage,
61
+ includeUpdated,
62
+ }));
63
+ const header = project && scope !== "global"
64
+ ? `${entries.length} memories (project: ${project.name}, scope: ${scope}, storedIn: ${storedIn}):`
65
+ : `${entries.length} memories (scope: ${scope}, storedIn: ${storedIn}):`;
66
+ const textContent = `${header}\n\n${lines.join("\n")}`;
67
+ const structuredNotes = entries.map(({ note, vault }) => ({
68
+ id: note.id,
69
+ title: note.title,
70
+ project: noteProjectRef(note),
71
+ tags: note.tags,
72
+ lifecycle: note.lifecycle,
73
+ role: note.role,
74
+ vault: storageLabel(vault),
75
+ updatedAt: note.updatedAt,
76
+ hasRelated: note.relatedTo && note.relatedTo.length > 0,
77
+ }));
78
+ const structuredContent = {
79
+ action: "listed",
80
+ count: entries.length,
81
+ scope: scope || "all",
82
+ storedIn: storedIn || "any",
83
+ project: project ? { id: project.id, name: project.name } : undefined,
84
+ notes: structuredNotes,
85
+ options: {
86
+ includeRelations,
87
+ includePreview,
88
+ includeStorage,
89
+ includeUpdated,
90
+ },
91
+ };
92
+ return { content: [{ type: "text", text: textContent }], structuredContent };
93
+ });
94
+ }
95
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.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 registerMemoryGraphTool(server: McpServer, ctx: ServerContext): void;
4
+ //# sourceMappingURL=memory-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-graph.d.ts","sourceRoot":"","sources":["../../src/tools/memory-graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAe1D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CA2FnF"}
@@ -0,0 +1,84 @@
1
+ import { z } from "zod";
2
+ import { MemoryGraphResultSchema, } from "../structured-content.js";
3
+ import { projectParam, toProjectRef, ensureBranchSynced, } from "../helpers/project.js";
4
+ import { collectVisibleNotes, } from "../helpers/vault.js";
5
+ export function registerMemoryGraphTool(server, ctx) {
6
+ server.registerTool("memory_graph", {
7
+ title: "Memory Graph",
8
+ description: "Show memory nodes and their relationships as a graph-oriented view.\n\n" +
9
+ "Use this when:\n" +
10
+ "- You want to inspect how notes connect across a topic or project\n" +
11
+ "- You are evaluating whether relationships are too sparse or too dense\n\n" +
12
+ "Do not use this when:\n" +
13
+ "- You only need one note; use `get`\n" +
14
+ "- You only need ranked topic matches; use `recall`\n\n" +
15
+ "Returns:\n" +
16
+ "- Memory nodes and relationship edges for the requested slice\n\n" +
17
+ "Read-only.\n\n" +
18
+ "Typical next step:\n" +
19
+ "- Use `get`, `relate`, `unrelate`, or `consolidate` based on what the graph reveals.",
20
+ annotations: {
21
+ readOnlyHint: true,
22
+ destructiveHint: false,
23
+ idempotentHint: true,
24
+ openWorldHint: false,
25
+ },
26
+ inputSchema: z.object({
27
+ cwd: projectParam,
28
+ scope: z.enum(["project", "global", "all"]).optional().default("all"),
29
+ storedIn: z.enum(["project-vault", "main-vault", "any"]).optional().default("any"),
30
+ limit: z.number().int().min(1).max(50).optional().default(25),
31
+ }),
32
+ outputSchema: MemoryGraphResultSchema,
33
+ }, async ({ cwd, scope, storedIn, limit }) => {
34
+ await ensureBranchSynced(ctx, cwd);
35
+ const { project, entries } = await collectVisibleNotes(ctx, cwd, scope, undefined, storedIn);
36
+ if (entries.length === 0) {
37
+ const structuredContent = { action: "graph_shown", project: toProjectRef(project), nodes: [], limit, truncated: false };
38
+ return { content: [{ type: "text", text: "No memories found." }], structuredContent };
39
+ }
40
+ const visibleIds = new Set(entries.map((entry) => entry.note.id));
41
+ const lines = entries
42
+ .filter((entry) => (entry.note.relatedTo?.length ?? 0) > 0)
43
+ .slice(0, limit)
44
+ .map((entry) => {
45
+ const edges = (entry.note.relatedTo ?? [])
46
+ .filter((rel) => visibleIds.has(rel.id))
47
+ .map((rel) => `${rel.id} (${rel.type})`);
48
+ return edges.length > 0 ? `- ${entry.note.id} -> ${edges.join(", ")}` : null;
49
+ })
50
+ .filter(Boolean);
51
+ if (lines.length === 0) {
52
+ const structuredContent = { action: "graph_shown", project: toProjectRef(project), nodes: [], limit, truncated: false };
53
+ return { content: [{ type: "text", text: "No relationships found for that scope." }], structuredContent };
54
+ }
55
+ const header = project && scope !== "global"
56
+ ? `Memory graph for ${project.name}:`
57
+ : "Memory graph:";
58
+ const textContent = `${header}\n\n${lines.join("\n")}`;
59
+ // Build structured graph
60
+ const structuredNodes = entries
61
+ .filter((entry) => (entry.note.relatedTo?.length ?? 0) > 0)
62
+ .slice(0, limit)
63
+ .map((entry) => {
64
+ const edges = (entry.note.relatedTo ?? [])
65
+ .filter((rel) => visibleIds.has(rel.id))
66
+ .map((rel) => ({ toId: rel.id, type: rel.type }));
67
+ return {
68
+ id: entry.note.id,
69
+ title: entry.note.title,
70
+ edges: edges.length > 0 ? edges : [],
71
+ };
72
+ })
73
+ .filter((node) => node.edges.length > 0);
74
+ const structuredContent = {
75
+ action: "graph_shown",
76
+ project: toProjectRef(project),
77
+ nodes: structuredNodes,
78
+ limit,
79
+ truncated: structuredNodes.length < entries.filter(e => (e.note.relatedTo?.length ?? 0) > 0).length,
80
+ };
81
+ return { content: [{ type: "text", text: textContent }], structuredContent };
82
+ });
83
+ }
84
+ //# sourceMappingURL=memory-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-graph.js","sourceRoot":"","sources":["../../src/tools/memory-graph.ts"],"names":[],"mappings":"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"}