@danielmarbach/mnemonic-mcp 0.1.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 (64) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +201 -0
  3. package/README.md +395 -0
  4. package/build/config.d.ts +34 -0
  5. package/build/config.d.ts.map +1 -0
  6. package/build/config.js +141 -0
  7. package/build/config.js.map +1 -0
  8. package/build/consolidate.d.ts +7 -0
  9. package/build/consolidate.d.ts.map +1 -0
  10. package/build/consolidate.js +42 -0
  11. package/build/consolidate.js.map +1 -0
  12. package/build/embeddings.d.ts +4 -0
  13. package/build/embeddings.d.ts.map +1 -0
  14. package/build/embeddings.js +32 -0
  15. package/build/embeddings.js.map +1 -0
  16. package/build/git.d.ts +70 -0
  17. package/build/git.d.ts.map +1 -0
  18. package/build/git.js +196 -0
  19. package/build/git.js.map +1 -0
  20. package/build/import.d.ts +14 -0
  21. package/build/import.d.ts.map +1 -0
  22. package/build/import.js +41 -0
  23. package/build/import.js.map +1 -0
  24. package/build/index.d.ts +3 -0
  25. package/build/index.d.ts.map +1 -0
  26. package/build/index.js +2753 -0
  27. package/build/index.js.map +1 -0
  28. package/build/markdown.d.ts +6 -0
  29. package/build/markdown.d.ts.map +1 -0
  30. package/build/markdown.js +51 -0
  31. package/build/markdown.js.map +1 -0
  32. package/build/migration.d.ts +65 -0
  33. package/build/migration.d.ts.map +1 -0
  34. package/build/migration.js +372 -0
  35. package/build/migration.js.map +1 -0
  36. package/build/project-introspection.d.ts +5 -0
  37. package/build/project-introspection.d.ts.map +1 -0
  38. package/build/project-introspection.js +28 -0
  39. package/build/project-introspection.js.map +1 -0
  40. package/build/project-memory-policy.d.ts +17 -0
  41. package/build/project-memory-policy.d.ts.map +1 -0
  42. package/build/project-memory-policy.js +16 -0
  43. package/build/project-memory-policy.js.map +1 -0
  44. package/build/project.d.ts +32 -0
  45. package/build/project.d.ts.map +1 -0
  46. package/build/project.js +125 -0
  47. package/build/project.js.map +1 -0
  48. package/build/recall.d.ts +10 -0
  49. package/build/recall.d.ts.map +1 -0
  50. package/build/recall.js +18 -0
  51. package/build/recall.js.map +1 -0
  52. package/build/storage.d.ts +58 -0
  53. package/build/storage.d.ts.map +1 -0
  54. package/build/storage.js +269 -0
  55. package/build/storage.js.map +1 -0
  56. package/build/structured-content.d.ts +1818 -0
  57. package/build/structured-content.d.ts.map +1 -0
  58. package/build/structured-content.js +267 -0
  59. package/build/structured-content.js.map +1 -0
  60. package/build/vault.d.ts +54 -0
  61. package/build/vault.d.ts.map +1 -0
  62. package/build/vault.js +144 -0
  63. package/build/vault.js.map +1 -0
  64. package/package.json +46 -0
@@ -0,0 +1,10 @@
1
+ import type { Vault } from "./vault.js";
2
+ export interface ScoredRecallCandidate {
3
+ id: string;
4
+ score: number;
5
+ boosted: number;
6
+ vault: Vault;
7
+ isCurrentProject: boolean;
8
+ }
9
+ export declare function selectRecallResults(scored: ScoredRecallCandidate[], limit: number, scope: "project" | "global" | "all"): ScoredRecallCandidate[];
10
+ //# sourceMappingURL=recall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,qBAAqB,EAAE,EAC/B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAClC,qBAAqB,EAAE,CAoBzB"}
@@ -0,0 +1,18 @@
1
+ export function selectRecallResults(scored, limit, scope) {
2
+ const sorted = [...scored].sort((a, b) => b.boosted - a.boosted);
3
+ if (scope !== "all") {
4
+ return sorted.slice(0, limit);
5
+ }
6
+ const projectMatches = sorted.filter((candidate) => candidate.isCurrentProject);
7
+ if (projectMatches.length === 0) {
8
+ return sorted.slice(0, limit);
9
+ }
10
+ const topProject = projectMatches.slice(0, limit);
11
+ if (topProject.length >= limit) {
12
+ return topProject;
13
+ }
14
+ const selectedIds = new Set(topProject.map((candidate) => candidate.id));
15
+ const fallback = sorted.filter((candidate) => !selectedIds.has(candidate.id));
16
+ return [...topProject, ...fallback].slice(0, limit);
17
+ }
18
+ //# sourceMappingURL=recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.js","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,mBAAmB,CACjC,MAA+B,EAC/B,KAAa,EACb,KAAmC;IAEnC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAEjE,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAChF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAClD,IAAI,UAAU,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,58 @@
1
+ export type RelationshipType = "related-to" | "explains" | "example-of" | "supersedes";
2
+ export type NoteLifecycle = "temporary" | "permanent";
3
+ export declare const NOTE_LIFECYCLES: readonly ["temporary", "permanent"];
4
+ export interface Relationship {
5
+ id: string;
6
+ type: RelationshipType;
7
+ }
8
+ export interface Note {
9
+ id: string;
10
+ title: string;
11
+ content: string;
12
+ tags: string[];
13
+ lifecycle: NoteLifecycle;
14
+ /** Stable project identifier, or undefined for global memories */
15
+ project?: string;
16
+ /** Human-readable project name for display */
17
+ projectName?: string;
18
+ relatedTo?: Relationship[];
19
+ createdAt: string;
20
+ updatedAt: string;
21
+ /** Schema version for forward compatibility (0 = pre-v0.2.0) */
22
+ memoryVersion?: number;
23
+ }
24
+ export interface EmbeddingRecord {
25
+ id: string;
26
+ model: string;
27
+ embedding: number[];
28
+ updatedAt: string;
29
+ }
30
+ export declare class Storage {
31
+ readonly vaultPath: string;
32
+ readonly notesDir: string;
33
+ readonly embeddingsDir: string;
34
+ private stagedNotesDir?;
35
+ private stagedDeletedNoteIds;
36
+ constructor(vaultPath: string);
37
+ init(): Promise<void>;
38
+ beginAtomicNotesWrite(): Promise<void>;
39
+ commitAtomicNotesWrite(): Promise<void>;
40
+ rollbackAtomicNotesWrite(): Promise<void>;
41
+ writeNote(note: Note): Promise<void>;
42
+ readNote(id: string): Promise<Note | null>;
43
+ deleteNote(id: string): Promise<boolean>;
44
+ listNotes(filter?: {
45
+ project?: string | null;
46
+ }): Promise<Note[]>;
47
+ private serializeNote;
48
+ writeEmbedding(record: EmbeddingRecord): Promise<void>;
49
+ readEmbedding(id: string): Promise<EmbeddingRecord | null>;
50
+ listEmbeddings(): Promise<EmbeddingRecord[]>;
51
+ notePath(id: string): string;
52
+ embeddingPath(id: string): string;
53
+ private stagedNotePath;
54
+ private listNoteIds;
55
+ private clearAtomicNotesWrite;
56
+ private parseNote;
57
+ }
58
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;AACvF,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;AACtD,eAAO,MAAM,eAAe,qCAAyE,CAAC;AAEtG,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;IACzB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,OAAO;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,oBAAoB,CAAqB;gBAErC,SAAS,EAAE,MAAM;IAOvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BvC,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzC,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAuB1C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBxC,SAAS,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAqBtE,OAAO,CAAC,aAAa;IAuBf,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAS1D,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAmBlD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI5B,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIjC,OAAO,CAAC,cAAc;YAMR,WAAW;YAkCX,qBAAqB;IAUnC,OAAO,CAAC,SAAS;CAoBlB"}
@@ -0,0 +1,269 @@
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+ import { randomUUID } from "crypto";
4
+ import matter from "gray-matter";
5
+ export const NOTE_LIFECYCLES = ["temporary", "permanent"];
6
+ export class Storage {
7
+ vaultPath;
8
+ notesDir;
9
+ embeddingsDir;
10
+ stagedNotesDir;
11
+ stagedDeletedNoteIds = new Set();
12
+ constructor(vaultPath) {
13
+ this.vaultPath = path.resolve(vaultPath);
14
+ this.notesDir = path.join(this.vaultPath, "notes");
15
+ // Embeddings are local-only — kept outside the synced notes tree
16
+ this.embeddingsDir = path.join(this.vaultPath, "embeddings");
17
+ }
18
+ async init() {
19
+ await fs.mkdir(this.notesDir, { recursive: true });
20
+ await fs.mkdir(this.embeddingsDir, { recursive: true });
21
+ }
22
+ // ── Notes ──────────────────────────────────────────────────────────────────
23
+ async beginAtomicNotesWrite() {
24
+ if (this.stagedNotesDir) {
25
+ throw new Error("Atomic notes write already in progress");
26
+ }
27
+ this.stagedNotesDir = path.join(this.vaultPath, `.notes-staging-${randomUUID()}`);
28
+ this.stagedDeletedNoteIds.clear();
29
+ await fs.mkdir(this.stagedNotesDir, { recursive: true });
30
+ }
31
+ async commitAtomicNotesWrite() {
32
+ if (!this.stagedNotesDir) {
33
+ return;
34
+ }
35
+ const stagedDir = this.stagedNotesDir;
36
+ const stagedFiles = await fs.readdir(stagedDir).catch(() => []);
37
+ for (const file of stagedFiles) {
38
+ if (!file.endsWith(".md")) {
39
+ continue;
40
+ }
41
+ await fs.rename(path.join(stagedDir, file), path.join(this.notesDir, file));
42
+ }
43
+ for (const noteId of this.stagedDeletedNoteIds) {
44
+ try {
45
+ await fs.unlink(this.notePath(noteId));
46
+ }
47
+ catch {
48
+ // already absent
49
+ }
50
+ }
51
+ await this.clearAtomicNotesWrite();
52
+ }
53
+ async rollbackAtomicNotesWrite() {
54
+ if (!this.stagedNotesDir) {
55
+ return;
56
+ }
57
+ await this.clearAtomicNotesWrite();
58
+ }
59
+ async writeNote(note) {
60
+ const fileContent = this.serializeNote(note);
61
+ const filePath = this.stagedNotesDir
62
+ ? path.join(this.stagedNotesDir, `${note.id}.md`)
63
+ : this.notePath(note.id);
64
+ this.stagedDeletedNoteIds.delete(note.id);
65
+ await fs.writeFile(filePath, fileContent, "utf-8");
66
+ }
67
+ async readNote(id) {
68
+ if (this.stagedDeletedNoteIds.has(id)) {
69
+ return null;
70
+ }
71
+ const stagedPath = this.stagedNotePath(id);
72
+ if (stagedPath) {
73
+ try {
74
+ const raw = await fs.readFile(stagedPath, "utf-8");
75
+ return this.parseNote(id, raw);
76
+ }
77
+ catch {
78
+ // fall back to committed note
79
+ }
80
+ }
81
+ try {
82
+ const raw = await fs.readFile(this.notePath(id), "utf-8");
83
+ return this.parseNote(id, raw);
84
+ }
85
+ catch {
86
+ return null;
87
+ }
88
+ }
89
+ async deleteNote(id) {
90
+ if (this.stagedNotesDir) {
91
+ this.stagedDeletedNoteIds.add(id);
92
+ const stagedPath = this.stagedNotePath(id);
93
+ if (stagedPath) {
94
+ try {
95
+ await fs.unlink(stagedPath);
96
+ }
97
+ catch {
98
+ // ok
99
+ }
100
+ }
101
+ return true;
102
+ }
103
+ try {
104
+ await fs.unlink(this.notePath(id));
105
+ try {
106
+ await fs.unlink(this.embeddingPath(id));
107
+ }
108
+ catch { /* ok */ }
109
+ return true;
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ }
115
+ async listNotes(filter) {
116
+ const ids = await this.listNoteIds();
117
+ const notes = [];
118
+ for (const id of ids) {
119
+ const note = await this.readNote(id);
120
+ if (!note)
121
+ continue;
122
+ if (filter !== undefined) {
123
+ if (filter.project === null) {
124
+ if (note.project)
125
+ continue;
126
+ }
127
+ else if (filter.project !== undefined) {
128
+ if (note.project !== filter.project)
129
+ continue;
130
+ }
131
+ }
132
+ notes.push(note);
133
+ }
134
+ return notes;
135
+ }
136
+ serializeNote(note) {
137
+ const frontmatter = {
138
+ title: note.title,
139
+ tags: note.tags,
140
+ lifecycle: note.lifecycle,
141
+ createdAt: note.createdAt,
142
+ updatedAt: note.updatedAt,
143
+ };
144
+ if (note.project) {
145
+ frontmatter["project"] = note.project;
146
+ if (note.projectName)
147
+ frontmatter["projectName"] = note.projectName;
148
+ }
149
+ if (note.relatedTo && note.relatedTo.length > 0) {
150
+ frontmatter["relatedTo"] = note.relatedTo;
151
+ }
152
+ if (note.memoryVersion !== undefined && note.memoryVersion > 0) {
153
+ frontmatter["memoryVersion"] = note.memoryVersion;
154
+ }
155
+ return matter.stringify(note.content, frontmatter);
156
+ }
157
+ // ── Embeddings ─────────────────────────────────────────────────────────────
158
+ async writeEmbedding(record) {
159
+ await fs.writeFile(this.embeddingPath(record.id), JSON.stringify(record, null, 2), "utf-8");
160
+ }
161
+ async readEmbedding(id) {
162
+ try {
163
+ const raw = await fs.readFile(this.embeddingPath(id), "utf-8");
164
+ return JSON.parse(raw);
165
+ }
166
+ catch {
167
+ return null;
168
+ }
169
+ }
170
+ async listEmbeddings() {
171
+ let files;
172
+ try {
173
+ files = await fs.readdir(this.embeddingsDir);
174
+ }
175
+ catch {
176
+ return [];
177
+ }
178
+ const records = [];
179
+ for (const file of files) {
180
+ if (!file.endsWith(".json"))
181
+ continue;
182
+ const id = file.replace(/\.json$/, "");
183
+ const rec = await this.readEmbedding(id);
184
+ if (rec)
185
+ records.push(rec);
186
+ }
187
+ return records;
188
+ }
189
+ // ── Helpers ────────────────────────────────────────────────────────────────
190
+ notePath(id) {
191
+ return path.join(this.notesDir, `${id}.md`);
192
+ }
193
+ embeddingPath(id) {
194
+ return path.join(this.embeddingsDir, `${id}.json`);
195
+ }
196
+ stagedNotePath(id) {
197
+ return this.stagedNotesDir
198
+ ? path.join(this.stagedNotesDir, `${id}.md`)
199
+ : undefined;
200
+ }
201
+ async listNoteIds() {
202
+ const ids = new Set();
203
+ try {
204
+ const files = await fs.readdir(this.notesDir);
205
+ for (const file of files) {
206
+ if (file.endsWith(".md")) {
207
+ ids.add(file.replace(/\.md$/, ""));
208
+ }
209
+ }
210
+ }
211
+ catch {
212
+ // treat as empty
213
+ }
214
+ if (this.stagedNotesDir) {
215
+ try {
216
+ const stagedFiles = await fs.readdir(this.stagedNotesDir);
217
+ for (const file of stagedFiles) {
218
+ if (file.endsWith(".md")) {
219
+ ids.add(file.replace(/\.md$/, ""));
220
+ }
221
+ }
222
+ }
223
+ catch {
224
+ // treat as empty
225
+ }
226
+ }
227
+ for (const deletedId of this.stagedDeletedNoteIds) {
228
+ ids.delete(deletedId);
229
+ }
230
+ return [...ids].sort();
231
+ }
232
+ async clearAtomicNotesWrite() {
233
+ const stagedDir = this.stagedNotesDir;
234
+ this.stagedNotesDir = undefined;
235
+ this.stagedDeletedNoteIds.clear();
236
+ if (stagedDir) {
237
+ await fs.rm(stagedDir, { recursive: true, force: true });
238
+ }
239
+ }
240
+ parseNote(id, raw) {
241
+ if (!raw.trimStart().startsWith("---")) {
242
+ throw new Error(`Malformed note '${id}': missing frontmatter`);
243
+ }
244
+ const parsed = matter(raw);
245
+ return {
246
+ id,
247
+ title: parsed.data["title"] ?? id,
248
+ content: parsed.content.trim(),
249
+ tags: parsed.data["tags"] ?? [],
250
+ lifecycle: normalizeLifecycle(parsed.data["lifecycle"]),
251
+ project: parsed.data["project"],
252
+ projectName: parsed.data["projectName"],
253
+ relatedTo: parsed.data["relatedTo"],
254
+ createdAt: parsed.data["createdAt"] ?? new Date().toISOString(),
255
+ updatedAt: parsed.data["updatedAt"] ?? new Date().toISOString(),
256
+ memoryVersion: normalizeMemoryVersion(parsed.data["memoryVersion"]),
257
+ };
258
+ }
259
+ }
260
+ function normalizeMemoryVersion(value) {
261
+ if (typeof value === "number" && Number.isInteger(value) && value >= 1) {
262
+ return value;
263
+ }
264
+ return 0;
265
+ }
266
+ function normalizeLifecycle(value) {
267
+ return value === "temporary" ? "temporary" : "permanent";
268
+ }
269
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}