@mycelish/cli 0.2.4 → 0.2.6

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 (143) hide show
  1. package/dist/__tests__/unified-item-state.integration.test.js +0 -5
  2. package/dist/__tests__/unified-item-state.integration.test.js.map +1 -1
  3. package/dist/commands/disable.test.js +0 -1
  4. package/dist/commands/disable.test.js.map +1 -1
  5. package/dist/commands/doctor.d.ts +1 -1
  6. package/dist/commands/doctor.d.ts.map +1 -1
  7. package/dist/commands/doctor.js +1 -1
  8. package/dist/commands/doctor.js.map +1 -1
  9. package/dist/commands/doctor.test.js +1 -84
  10. package/dist/commands/doctor.test.js.map +1 -1
  11. package/dist/commands/enable.test.js +0 -1
  12. package/dist/commands/enable.test.js.map +1 -1
  13. package/dist/commands/health-checks/index.d.ts +0 -1
  14. package/dist/commands/health-checks/index.d.ts.map +1 -1
  15. package/dist/commands/health-checks/index.js +0 -1
  16. package/dist/commands/health-checks/index.js.map +1 -1
  17. package/dist/commands/health-checks/runner.d.ts.map +1 -1
  18. package/dist/commands/health-checks/runner.js +5 -19
  19. package/dist/commands/health-checks/runner.js.map +1 -1
  20. package/dist/commands/init.d.ts +0 -3
  21. package/dist/commands/init.d.ts.map +1 -1
  22. package/dist/commands/init.js +5 -6
  23. package/dist/commands/init.js.map +1 -1
  24. package/dist/commands/init.test.js +0 -1
  25. package/dist/commands/init.test.js.map +1 -1
  26. package/dist/commands/migrate.d.ts.map +1 -1
  27. package/dist/commands/migrate.js +6 -12
  28. package/dist/commands/migrate.js.map +1 -1
  29. package/dist/commands/preset.js +0 -3
  30. package/dist/commands/preset.js.map +1 -1
  31. package/dist/commands/preset.test.js +1 -5
  32. package/dist/commands/preset.test.js.map +1 -1
  33. package/dist/commands/status.d.ts +0 -2
  34. package/dist/commands/status.d.ts.map +1 -1
  35. package/dist/commands/status.js +2 -30
  36. package/dist/commands/status.js.map +1 -1
  37. package/dist/commands/status.test.d.ts +0 -1
  38. package/dist/commands/status.test.d.ts.map +1 -1
  39. package/dist/commands/status.test.js +1 -23
  40. package/dist/commands/status.test.js.map +1 -1
  41. package/dist/commands/sync.d.ts +0 -1
  42. package/dist/commands/sync.d.ts.map +1 -1
  43. package/dist/commands/sync.js +0 -21
  44. package/dist/commands/sync.js.map +1 -1
  45. package/dist/commands/sync.test.js +0 -46
  46. package/dist/commands/sync.test.js.map +1 -1
  47. package/dist/core/auto-adapter.d.ts +1 -1
  48. package/dist/core/auto-adapter.js +1 -1
  49. package/dist/core/auto-adapter.test.js +2 -48
  50. package/dist/core/auto-adapter.test.js.map +1 -1
  51. package/dist/core/config-merger.d.ts.map +1 -1
  52. package/dist/core/config-merger.js +0 -25
  53. package/dist/core/config-merger.js.map +1 -1
  54. package/dist/core/fs-helpers.d.ts +0 -3
  55. package/dist/core/fs-helpers.d.ts.map +1 -1
  56. package/dist/core/fs-helpers.js +0 -6
  57. package/dist/core/fs-helpers.js.map +1 -1
  58. package/dist/core/fs-helpers.test.js +0 -4
  59. package/dist/core/fs-helpers.test.js.map +1 -1
  60. package/dist/core/migrator/executor.d.ts.map +1 -1
  61. package/dist/core/migrator/executor.js +0 -29
  62. package/dist/core/migrator/executor.js.map +1 -1
  63. package/dist/core/migrator/planner.d.ts.map +1 -1
  64. package/dist/core/migrator/planner.js +0 -3
  65. package/dist/core/migrator/planner.js.map +1 -1
  66. package/dist/core/migrator/scanners.d.ts +0 -1
  67. package/dist/core/migrator/scanners.d.ts.map +1 -1
  68. package/dist/core/migrator/scanners.js +1 -163
  69. package/dist/core/migrator/scanners.js.map +1 -1
  70. package/dist/core/migrator/scanners.test.js +1 -75
  71. package/dist/core/migrator/scanners.test.js.map +1 -1
  72. package/dist/core/migrator.test.js +8 -54
  73. package/dist/core/migrator.test.js.map +1 -1
  74. package/dist/core/presets.d.ts +1 -7
  75. package/dist/core/presets.d.ts.map +1 -1
  76. package/dist/core/presets.js +1 -2
  77. package/dist/core/presets.js.map +1 -1
  78. package/dist/core/state-verifier.d.ts +1 -1
  79. package/dist/core/state-verifier.d.ts.map +1 -1
  80. package/dist/core/state-verifier.js +2 -6
  81. package/dist/core/state-verifier.js.map +1 -1
  82. package/dist/core/state-verifier.test.js +3 -3
  83. package/dist/core/state-verifier.test.js.map +1 -1
  84. package/dist/core/sync-writer.test.js +1 -1
  85. package/dist/core/sync-writer.test.js.map +1 -1
  86. package/dist/core/tool-adapter.d.ts +0 -7
  87. package/dist/core/tool-adapter.d.ts.map +1 -1
  88. package/dist/core/tool-adapter.js +0 -86
  89. package/dist/core/tool-adapter.js.map +1 -1
  90. package/dist/core/tool-adapter.test.js +1 -32
  91. package/dist/core/tool-adapter.test.js.map +1 -1
  92. package/dist/core/tool-detector.d.ts +1 -0
  93. package/dist/core/tool-detector.d.ts.map +1 -1
  94. package/dist/core/tool-detector.js +19 -2
  95. package/dist/core/tool-detector.js.map +1 -1
  96. package/dist/core/tool-detector.test.js +28 -8
  97. package/dist/core/tool-detector.test.js.map +1 -1
  98. package/dist/core/watcher.d.ts.map +1 -1
  99. package/dist/core/watcher.js +0 -6
  100. package/dist/core/watcher.js.map +1 -1
  101. package/dist/core/watcher.test.js +0 -9
  102. package/dist/core/watcher.test.js.map +1 -1
  103. package/dist/dashboard/assets/index-Bnzy2ItZ.js +150 -0
  104. package/dist/dashboard/index.html +1 -1
  105. package/dist/index.d.ts +1 -1
  106. package/dist/index.js +1 -1
  107. package/dist/mcp/resources.js +1 -1
  108. package/dist/mcp/resources.js.map +1 -1
  109. package/dist/mcp/server.d.ts.map +1 -1
  110. package/dist/mcp/server.js +0 -2
  111. package/dist/mcp/server.js.map +1 -1
  112. package/dist/routes/state.js +1 -1
  113. package/dist/routes/state.js.map +1 -1
  114. package/package.json +2 -2
  115. package/dist/commands/health-checks/memory-check.d.ts +0 -15
  116. package/dist/commands/health-checks/memory-check.d.ts.map +0 -1
  117. package/dist/commands/health-checks/memory-check.js +0 -92
  118. package/dist/commands/health-checks/memory-check.js.map +0 -1
  119. package/dist/core/memory-scoper.d.ts +0 -43
  120. package/dist/core/memory-scoper.d.ts.map +0 -1
  121. package/dist/core/memory-scoper.js +0 -165
  122. package/dist/core/memory-scoper.js.map +0 -1
  123. package/dist/core/memory-scoper.test.d.ts +0 -6
  124. package/dist/core/memory-scoper.test.d.ts.map +0 -1
  125. package/dist/core/memory-scoper.test.js +0 -456
  126. package/dist/core/memory-scoper.test.js.map +0 -1
  127. package/dist/core/smart-memory.d.ts +0 -22
  128. package/dist/core/smart-memory.d.ts.map +0 -1
  129. package/dist/core/smart-memory.js +0 -63
  130. package/dist/core/smart-memory.js.map +0 -1
  131. package/dist/core/smart-memory.test.d.ts +0 -2
  132. package/dist/core/smart-memory.test.d.ts.map +0 -1
  133. package/dist/core/smart-memory.test.js +0 -87
  134. package/dist/core/smart-memory.test.js.map +0 -1
  135. package/dist/dashboard/assets/index-C9q5nAP3.js +0 -153
  136. package/dist/mcp/tools/memory-tools.d.ts +0 -3
  137. package/dist/mcp/tools/memory-tools.d.ts.map +0 -1
  138. package/dist/mcp/tools/memory-tools.js +0 -68
  139. package/dist/mcp/tools/memory-tools.js.map +0 -1
  140. package/dist/mcp/tools/memory-tools.test.d.ts +0 -2
  141. package/dist/mcp/tools/memory-tools.test.d.ts.map +0 -1
  142. package/dist/mcp/tools/memory-tools.test.js +0 -144
  143. package/dist/mcp/tools/memory-tools.test.js.map +0 -1
@@ -1,456 +0,0 @@
1
- /**
2
- * Tests for memory-scoper module
3
- * TDD: Write tests first, then implement
4
- */
5
- import { describe, it, expect, vi, beforeEach } from "vitest";
6
- // Mock fs/promises
7
- vi.mock("node:fs/promises", () => ({
8
- readdir: vi.fn(),
9
- readFile: vi.fn(),
10
- writeFile: vi.fn(),
11
- mkdir: vi.fn(),
12
- access: vi.fn(),
13
- }));
14
- // Mock @mycelish/core utilities
15
- vi.mock("@mycelish/core", async () => {
16
- const actual = await vi.importActual("@mycelish/core");
17
- return {
18
- ...actual,
19
- expandPath: vi.fn((p) => p.replace("~", "/home/user")),
20
- ensureDir: vi.fn(),
21
- pathExists: vi.fn(),
22
- };
23
- });
24
- describe("memory-scoper", () => {
25
- beforeEach(() => {
26
- vi.clearAllMocks();
27
- });
28
- describe("MEMORY_SCOPE_CONFIG", () => {
29
- it("should define shared scope syncing to all tools", async () => {
30
- const { MEMORY_SCOPE_CONFIG } = await import("./memory-scoper.js");
31
- expect(MEMORY_SCOPE_CONFIG.shared.syncTo).toEqual([
32
- "claude-code",
33
- "codex",
34
- "gemini-cli",
35
- "opencode",
36
- "openclaw",
37
- "aider",
38
- "cursor",
39
- "vscode",
40
- "antigravity",
41
- ]);
42
- expect(MEMORY_SCOPE_CONFIG.shared.path).toBe("global/memory/shared/");
43
- });
44
- it("should define coding scope excluding openclaw", async () => {
45
- const { MEMORY_SCOPE_CONFIG } = await import("./memory-scoper.js");
46
- expect(MEMORY_SCOPE_CONFIG.coding.syncTo).toEqual([
47
- "claude-code",
48
- "codex",
49
- "gemini-cli",
50
- "opencode",
51
- "aider",
52
- "cursor",
53
- "vscode",
54
- "antigravity",
55
- ]);
56
- expect(MEMORY_SCOPE_CONFIG.coding.excludeFrom).toEqual(["openclaw"]);
57
- expect(MEMORY_SCOPE_CONFIG.coding.path).toBe("global/memory/coding/");
58
- });
59
- it("should define personal scope only for openclaw", async () => {
60
- const { MEMORY_SCOPE_CONFIG } = await import("./memory-scoper.js");
61
- expect(MEMORY_SCOPE_CONFIG.personal.syncTo).toEqual(["openclaw"]);
62
- expect(MEMORY_SCOPE_CONFIG.personal.excludeFrom).toEqual([
63
- "claude-code",
64
- "codex",
65
- "gemini-cli",
66
- "opencode",
67
- "aider",
68
- "cursor",
69
- "vscode",
70
- "antigravity",
71
- ]);
72
- expect(MEMORY_SCOPE_CONFIG.personal.path).toBe("global/memory/personal/");
73
- });
74
- });
75
- describe("isToolInScope", () => {
76
- it("should return true for claude-code in shared scope", async () => {
77
- const { isToolInScope } = await import("./memory-scoper.js");
78
- expect(isToolInScope("claude-code", "shared")).toBe(true);
79
- });
80
- it("should return true for claude-code in coding scope", async () => {
81
- const { isToolInScope } = await import("./memory-scoper.js");
82
- expect(isToolInScope("claude-code", "coding")).toBe(true);
83
- });
84
- it("should return false for claude-code in personal scope", async () => {
85
- const { isToolInScope } = await import("./memory-scoper.js");
86
- expect(isToolInScope("claude-code", "personal")).toBe(false);
87
- });
88
- it("should return true for openclaw in shared scope", async () => {
89
- const { isToolInScope } = await import("./memory-scoper.js");
90
- expect(isToolInScope("openclaw", "shared")).toBe(true);
91
- });
92
- it("should return false for openclaw in coding scope", async () => {
93
- const { isToolInScope } = await import("./memory-scoper.js");
94
- expect(isToolInScope("openclaw", "coding")).toBe(false);
95
- });
96
- it("should return true for openclaw in personal scope", async () => {
97
- const { isToolInScope } = await import("./memory-scoper.js");
98
- expect(isToolInScope("openclaw", "personal")).toBe(true);
99
- });
100
- it("should return true for aider in coding scope", async () => {
101
- const { isToolInScope } = await import("./memory-scoper.js");
102
- expect(isToolInScope("aider", "coding")).toBe(true);
103
- });
104
- it("should return false for aider in personal scope", async () => {
105
- const { isToolInScope } = await import("./memory-scoper.js");
106
- expect(isToolInScope("aider", "personal")).toBe(false);
107
- });
108
- });
109
- describe("getScopesForTool", () => {
110
- it("should return shared and coding scopes for claude-code", async () => {
111
- const { getScopesForTool } = await import("./memory-scoper.js");
112
- const scopes = getScopesForTool("claude-code");
113
- expect(scopes).toEqual(["shared", "coding"]);
114
- });
115
- it("should return shared and coding scopes for codex", async () => {
116
- const { getScopesForTool } = await import("./memory-scoper.js");
117
- const scopes = getScopesForTool("codex");
118
- expect(scopes).toEqual(["shared", "coding"]);
119
- });
120
- it("should return shared and coding scopes for gemini-cli", async () => {
121
- const { getScopesForTool } = await import("./memory-scoper.js");
122
- const scopes = getScopesForTool("gemini-cli");
123
- expect(scopes).toEqual(["shared", "coding"]);
124
- });
125
- it("should return shared and coding scopes for opencode", async () => {
126
- const { getScopesForTool } = await import("./memory-scoper.js");
127
- const scopes = getScopesForTool("opencode");
128
- expect(scopes).toEqual(["shared", "coding"]);
129
- });
130
- it("should return shared and coding scopes for aider", async () => {
131
- const { getScopesForTool } = await import("./memory-scoper.js");
132
- const scopes = getScopesForTool("aider");
133
- expect(scopes).toEqual(["shared", "coding"]);
134
- });
135
- it("should return shared and personal scopes for openclaw", async () => {
136
- const { getScopesForTool } = await import("./memory-scoper.js");
137
- const scopes = getScopesForTool("openclaw");
138
- expect(scopes).toEqual(["shared", "personal"]);
139
- });
140
- });
141
- describe("getMemoryFilesForTool", () => {
142
- it("should return files from shared and coding scopes for claude-code", async () => {
143
- const fs = await import("node:fs/promises");
144
- const { pathExists } = await import("@mycelish/core");
145
- const { getMemoryFilesForTool } = await import("./memory-scoper.js");
146
- vi.mocked(pathExists).mockResolvedValue(true);
147
- vi.mocked(fs.readdir).mockImplementation(async (dir) => {
148
- const dirStr = dir.toString();
149
- if (dirStr.includes("shared")) {
150
- return ["context.md", "preferences.md"];
151
- }
152
- if (dirStr.includes("coding")) {
153
- return ["coding-style.md", "tech-stack.md"];
154
- }
155
- return [];
156
- });
157
- const files = await getMemoryFilesForTool("claude-code");
158
- expect(files).toHaveLength(4);
159
- expect(files).toContainEqual(expect.objectContaining({
160
- scope: "shared",
161
- filename: "context.md",
162
- }));
163
- expect(files).toContainEqual(expect.objectContaining({
164
- scope: "shared",
165
- filename: "preferences.md",
166
- }));
167
- expect(files).toContainEqual(expect.objectContaining({
168
- scope: "coding",
169
- filename: "coding-style.md",
170
- }));
171
- expect(files).toContainEqual(expect.objectContaining({
172
- scope: "coding",
173
- filename: "tech-stack.md",
174
- }));
175
- });
176
- it("should return files from shared and personal scopes for openclaw", async () => {
177
- const fs = await import("node:fs/promises");
178
- const { pathExists } = await import("@mycelish/core");
179
- const { getMemoryFilesForTool } = await import("./memory-scoper.js");
180
- vi.mocked(pathExists).mockResolvedValue(true);
181
- vi.mocked(fs.readdir).mockImplementation(async (dir) => {
182
- const dirStr = dir.toString();
183
- if (dirStr.includes("shared")) {
184
- return ["context.md"];
185
- }
186
- if (dirStr.includes("personal")) {
187
- return ["private-notes.md", "diary.md"];
188
- }
189
- return [];
190
- });
191
- const files = await getMemoryFilesForTool("openclaw");
192
- expect(files).toHaveLength(3);
193
- expect(files).toContainEqual(expect.objectContaining({
194
- scope: "shared",
195
- filename: "context.md",
196
- }));
197
- expect(files).toContainEqual(expect.objectContaining({
198
- scope: "personal",
199
- filename: "private-notes.md",
200
- }));
201
- expect(files).toContainEqual(expect.objectContaining({
202
- scope: "personal",
203
- filename: "diary.md",
204
- }));
205
- });
206
- it("should NOT return coding files for openclaw", async () => {
207
- const fs = await import("node:fs/promises");
208
- const { pathExists } = await import("@mycelish/core");
209
- const { getMemoryFilesForTool } = await import("./memory-scoper.js");
210
- vi.mocked(pathExists).mockResolvedValue(true);
211
- vi.mocked(fs.readdir).mockImplementation(async (dir) => {
212
- const dirStr = dir.toString();
213
- if (dirStr.includes("shared")) {
214
- return ["context.md"];
215
- }
216
- if (dirStr.includes("coding")) {
217
- return ["coding-style.md"];
218
- }
219
- if (dirStr.includes("personal")) {
220
- return ["private.md"];
221
- }
222
- return [];
223
- });
224
- const files = await getMemoryFilesForTool("openclaw");
225
- // Should NOT include coding files
226
- expect(files.some((f) => f.scope === "coding")).toBe(false);
227
- expect(files.some((f) => f.filename === "coding-style.md")).toBe(false);
228
- });
229
- it("should return empty array when scope directories do not exist", async () => {
230
- const { pathExists } = await import("@mycelish/core");
231
- const { getMemoryFilesForTool } = await import("./memory-scoper.js");
232
- vi.mocked(pathExists).mockResolvedValue(false);
233
- const files = await getMemoryFilesForTool("claude-code");
234
- expect(files).toEqual([]);
235
- });
236
- it("should only include .md files", async () => {
237
- const fs = await import("node:fs/promises");
238
- const { pathExists } = await import("@mycelish/core");
239
- const { getMemoryFilesForTool } = await import("./memory-scoper.js");
240
- vi.mocked(pathExists).mockResolvedValue(true);
241
- vi.mocked(fs.readdir).mockImplementation(async (dir) => {
242
- const dirStr = dir.toString();
243
- if (dirStr.includes("shared")) {
244
- return [
245
- "context.md",
246
- "image.png",
247
- "data.json",
248
- "notes.md",
249
- ];
250
- }
251
- return [];
252
- });
253
- const files = await getMemoryFilesForTool("claude-code");
254
- expect(files).toHaveLength(2);
255
- expect(files.every((f) => f.filename.endsWith(".md"))).toBe(true);
256
- });
257
- });
258
- describe("loadMemoryFiles", () => {
259
- it("should load all memory files from a scope directory", async () => {
260
- const fs = await import("node:fs/promises");
261
- const { pathExists } = await import("@mycelish/core");
262
- const { loadMemoryFiles } = await import("./memory-scoper.js");
263
- vi.mocked(pathExists).mockResolvedValue(true);
264
- vi.mocked(fs.readdir).mockResolvedValue([
265
- "file1.md",
266
- "file2.md",
267
- ]);
268
- vi.mocked(fs.readFile).mockImplementation(async (path) => {
269
- const pathStr = path.toString();
270
- if (pathStr.includes("file1.md")) {
271
- return "# File 1 content";
272
- }
273
- if (pathStr.includes("file2.md")) {
274
- return "# File 2 content";
275
- }
276
- return "";
277
- });
278
- const files = await loadMemoryFiles("shared");
279
- expect(files).toHaveLength(2);
280
- expect(files[0]).toEqual({
281
- scope: "shared",
282
- filename: "file1.md",
283
- path: expect.stringContaining("file1.md"),
284
- content: "# File 1 content",
285
- });
286
- expect(files[1]).toEqual({
287
- scope: "shared",
288
- filename: "file2.md",
289
- path: expect.stringContaining("file2.md"),
290
- content: "# File 2 content",
291
- });
292
- });
293
- it("should return empty array when scope directory does not exist", async () => {
294
- const { pathExists } = await import("@mycelish/core");
295
- const { loadMemoryFiles } = await import("./memory-scoper.js");
296
- vi.mocked(pathExists).mockResolvedValue(false);
297
- const files = await loadMemoryFiles("personal");
298
- expect(files).toEqual([]);
299
- });
300
- });
301
- describe("syncMemoryToTool", () => {
302
- it("should concatenate memory files and write to tool path", async () => {
303
- const fs = await import("node:fs/promises");
304
- const { pathExists, ensureDir } = await import("@mycelish/core");
305
- const { syncMemoryToTool } = await import("./memory-scoper.js");
306
- vi.mocked(pathExists).mockResolvedValue(true);
307
- vi.mocked(fs.readdir).mockImplementation(async (dir) => {
308
- const dirStr = dir.toString();
309
- if (dirStr.includes("shared")) {
310
- return ["context.md"];
311
- }
312
- if (dirStr.includes("coding")) {
313
- return ["style.md"];
314
- }
315
- return [];
316
- });
317
- vi.mocked(fs.readFile).mockImplementation(async (path) => {
318
- const pathStr = path.toString();
319
- if (pathStr.includes("context.md")) {
320
- return "# Context\nShared content here";
321
- }
322
- if (pathStr.includes("style.md")) {
323
- return "# Style Guide\nCoding style content";
324
- }
325
- return "";
326
- });
327
- vi.mocked(fs.writeFile).mockResolvedValue();
328
- const result = await syncMemoryToTool("claude-code");
329
- expect(result.success).toBe(true);
330
- expect(result.filesWritten).toBe(1);
331
- expect(fs.writeFile).toHaveBeenCalledTimes(1);
332
- const writeCall = vi.mocked(fs.writeFile).mock.calls[0];
333
- const writtenContent = writeCall[1];
334
- expect(writtenContent).toContain("# Context");
335
- expect(writtenContent).toContain("# Style Guide");
336
- });
337
- it("should add scope headers between sections", async () => {
338
- const fs = await import("node:fs/promises");
339
- const { pathExists, ensureDir } = await import("@mycelish/core");
340
- const { syncMemoryToTool } = await import("./memory-scoper.js");
341
- vi.mocked(pathExists).mockResolvedValue(true);
342
- vi.mocked(fs.readdir).mockImplementation(async (dir) => {
343
- const dirStr = dir.toString();
344
- if (dirStr.includes("shared")) {
345
- return ["a.md", "b.md"];
346
- }
347
- if (dirStr.includes("coding")) {
348
- return ["c.md"];
349
- }
350
- return [];
351
- });
352
- vi.mocked(fs.readFile).mockImplementation(async (path) => {
353
- const pathStr = path.toString();
354
- if (pathStr.includes("a.md"))
355
- return "Content A";
356
- if (pathStr.includes("b.md"))
357
- return "Content B";
358
- if (pathStr.includes("c.md"))
359
- return "Content C";
360
- return "";
361
- });
362
- vi.mocked(fs.writeFile).mockResolvedValue();
363
- await syncMemoryToTool("codex");
364
- const writeCall = vi.mocked(fs.writeFile).mock.calls[0];
365
- const writtenContent = writeCall[1];
366
- // Verify content order: shared files before coding files
367
- const contentAIndex = writtenContent.indexOf("Content A");
368
- const contentBIndex = writtenContent.indexOf("Content B");
369
- const contentCIndex = writtenContent.indexOf("Content C");
370
- expect(contentAIndex).toBeLessThan(contentBIndex);
371
- expect(contentBIndex).toBeLessThan(contentCIndex);
372
- });
373
- it("should write to correct tool memory path", async () => {
374
- const fs = await import("node:fs/promises");
375
- const { pathExists, ensureDir } = await import("@mycelish/core");
376
- const { syncMemoryToTool } = await import("./memory-scoper.js");
377
- vi.mocked(pathExists).mockResolvedValue(true);
378
- vi.mocked(fs.readdir).mockResolvedValue([
379
- "test.md",
380
- ]);
381
- vi.mocked(fs.readFile).mockResolvedValue("test content");
382
- vi.mocked(fs.writeFile).mockResolvedValue();
383
- await syncMemoryToTool("claude-code");
384
- // Should write to expanded claude-code memory path
385
- expect(fs.writeFile).toHaveBeenCalledWith("/home/user/.claude/CLAUDE.md", expect.any(String), "utf-8");
386
- });
387
- it("should ensure target directory exists before writing", async () => {
388
- const fs = await import("node:fs/promises");
389
- const { pathExists, ensureDir } = await import("@mycelish/core");
390
- const { syncMemoryToTool } = await import("./memory-scoper.js");
391
- vi.mocked(pathExists).mockResolvedValue(true);
392
- vi.mocked(fs.readdir).mockResolvedValue([
393
- "test.md",
394
- ]);
395
- vi.mocked(fs.readFile).mockResolvedValue("test content");
396
- vi.mocked(fs.writeFile).mockResolvedValue();
397
- await syncMemoryToTool("opencode");
398
- expect(ensureDir).toHaveBeenCalledWith("/home/user/.opencode");
399
- });
400
- it("should sync personal scope only to openclaw", async () => {
401
- const fs = await import("node:fs/promises");
402
- const { pathExists, ensureDir } = await import("@mycelish/core");
403
- const { syncMemoryToTool } = await import("./memory-scoper.js");
404
- vi.mocked(pathExists).mockResolvedValue(true);
405
- vi.mocked(fs.readdir).mockImplementation(async (dir) => {
406
- const dirStr = dir.toString();
407
- if (dirStr.includes("shared")) {
408
- return ["shared.md"];
409
- }
410
- if (dirStr.includes("personal")) {
411
- return ["personal.md"];
412
- }
413
- return [];
414
- });
415
- vi.mocked(fs.readFile).mockImplementation(async (path) => {
416
- const pathStr = path.toString();
417
- if (pathStr.includes("shared.md"))
418
- return "Shared content";
419
- if (pathStr.includes("personal.md"))
420
- return "Personal content";
421
- return "";
422
- });
423
- vi.mocked(fs.writeFile).mockResolvedValue();
424
- await syncMemoryToTool("openclaw");
425
- const writeCall = vi.mocked(fs.writeFile).mock.calls[0];
426
- const writtenContent = writeCall[1];
427
- expect(writtenContent).toContain("Shared content");
428
- expect(writtenContent).toContain("Personal content");
429
- });
430
- it("should return error result when write fails", async () => {
431
- const fs = await import("node:fs/promises");
432
- const { pathExists, ensureDir } = await import("@mycelish/core");
433
- const { syncMemoryToTool } = await import("./memory-scoper.js");
434
- vi.mocked(pathExists).mockResolvedValue(true);
435
- vi.mocked(fs.readdir).mockResolvedValue([
436
- "test.md",
437
- ]);
438
- vi.mocked(fs.readFile).mockResolvedValue("test content");
439
- vi.mocked(fs.writeFile).mockRejectedValue(new Error("Permission denied"));
440
- const result = await syncMemoryToTool("claude-code");
441
- expect(result.success).toBe(false);
442
- expect(result.error).toBe("Permission denied");
443
- });
444
- it("should handle empty memory files gracefully", async () => {
445
- const fs = await import("node:fs/promises");
446
- const { pathExists } = await import("@mycelish/core");
447
- const { syncMemoryToTool } = await import("./memory-scoper.js");
448
- vi.mocked(pathExists).mockResolvedValue(false);
449
- const result = await syncMemoryToTool("claude-code");
450
- expect(result.success).toBe(true);
451
- expect(result.filesWritten).toBe(0);
452
- expect(fs.writeFile).not.toHaveBeenCalled();
453
- });
454
- });
455
- });
456
- //# sourceMappingURL=memory-scoper.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-scoper.test.js","sourceRoot":"","sources":["../../src/core/memory-scoper.test.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Smart Memory Module
3
- * Compresses, deduplicates, and intelligently syncs memory across tools
4
- */
5
- interface CompressOptions {
6
- maxLines: number;
7
- preserveHeaders?: boolean;
8
- }
9
- /**
10
- * Compress memory content to fit within line limits.
11
- * Prioritizes: headers > key insights > recent content > verbose details
12
- */
13
- export declare function compressMemory(content: string, options: CompressOptions): string;
14
- /**
15
- * Merge multiple memory files with deduplication
16
- */
17
- export declare function mergeMemoryFiles(files: Array<{
18
- scope: string;
19
- content: string;
20
- }>): string;
21
- export {};
22
- //# sourceMappingURL=smart-memory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smart-memory.d.ts","sourceRoot":"","sources":["../../src/core/smart-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CA8BhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,MAAM,CAwBR"}
@@ -1,63 +0,0 @@
1
- /**
2
- * Smart Memory Module
3
- * Compresses, deduplicates, and intelligently syncs memory across tools
4
- */
5
- const KEY_INSIGHT_PATTERN = /^[-*]\s*(Bug|Fix|Pattern|Important|Note|Key|Critical|Rule|Lesson|Remember):/i;
6
- /**
7
- * Compress memory content to fit within line limits.
8
- * Prioritizes: headers > key insights > recent content > verbose details
9
- */
10
- export function compressMemory(content, options) {
11
- const { maxLines, preserveHeaders = true } = options;
12
- const lines = content.split("\n");
13
- if (lines.length <= maxLines)
14
- return content;
15
- const headers = [];
16
- const keyInsights = [];
17
- const other = [];
18
- for (const line of lines) {
19
- if (line.startsWith("#")) {
20
- headers.push(line);
21
- }
22
- else if (KEY_INSIGHT_PATTERN.test(line)) {
23
- keyInsights.push(line);
24
- }
25
- else {
26
- other.push(line);
27
- }
28
- }
29
- const result = [];
30
- if (preserveHeaders)
31
- result.push(...headers);
32
- result.push(...keyInsights);
33
- const remaining = maxLines - result.length;
34
- if (remaining > 0) {
35
- result.push(...other.slice(-remaining));
36
- }
37
- return result.slice(0, maxLines).join("\n");
38
- }
39
- /**
40
- * Merge multiple memory files with deduplication
41
- */
42
- export function mergeMemoryFiles(files) {
43
- const seen = new Set();
44
- const sections = [];
45
- for (const file of files) {
46
- const lines = file.content.split("\n");
47
- const uniqueLines = [];
48
- for (const line of lines) {
49
- const normalized = line.trim().toLowerCase();
50
- if (normalized === "" || normalized.startsWith("#")) {
51
- uniqueLines.push(line);
52
- continue;
53
- }
54
- if (!seen.has(normalized)) {
55
- seen.add(normalized);
56
- uniqueLines.push(line);
57
- }
58
- }
59
- sections.push(uniqueLines.join("\n"));
60
- }
61
- return sections.join("\n\n");
62
- }
63
- //# sourceMappingURL=smart-memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smart-memory.js","sourceRoot":"","sources":["../../src/core/smart-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,mBAAmB,GAAG,8EAA8E,CAAC;AAE3G;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAwB;IACtE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC;IAE7C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,eAAe;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAE5B,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAgD;IAEhD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=smart-memory.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smart-memory.test.d.ts","sourceRoot":"","sources":["../../src/core/smart-memory.test.ts"],"names":[],"mappings":""}