memobank-cli 0.2.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 (128) hide show
  1. package/CHANGELOG.md +139 -0
  2. package/LICENSE +21 -0
  3. package/README.md +300 -0
  4. package/dist/cli.d.ts +7 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +294 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/capture.d.ts +12 -0
  9. package/dist/commands/capture.d.ts.map +1 -0
  10. package/dist/commands/capture.js +191 -0
  11. package/dist/commands/capture.js.map +1 -0
  12. package/dist/commands/import.d.ts +28 -0
  13. package/dist/commands/import.d.ts.map +1 -0
  14. package/dist/commands/import.js +356 -0
  15. package/dist/commands/import.js.map +1 -0
  16. package/dist/commands/index.d.ts +12 -0
  17. package/dist/commands/index.d.ts.map +1 -0
  18. package/dist/commands/index.js +82 -0
  19. package/dist/commands/index.js.map +1 -0
  20. package/dist/commands/install.d.ts +16 -0
  21. package/dist/commands/install.d.ts.map +1 -0
  22. package/dist/commands/install.js +142 -0
  23. package/dist/commands/install.js.map +1 -0
  24. package/dist/commands/lifecycle.d.ts +21 -0
  25. package/dist/commands/lifecycle.d.ts.map +1 -0
  26. package/dist/commands/lifecycle.js +106 -0
  27. package/dist/commands/lifecycle.js.map +1 -0
  28. package/dist/commands/map.d.ts +10 -0
  29. package/dist/commands/map.d.ts.map +1 -0
  30. package/dist/commands/map.js +72 -0
  31. package/dist/commands/map.js.map +1 -0
  32. package/dist/commands/onboarding.d.ts +10 -0
  33. package/dist/commands/onboarding.d.ts.map +1 -0
  34. package/dist/commands/onboarding.js +420 -0
  35. package/dist/commands/onboarding.js.map +1 -0
  36. package/dist/commands/recall.d.ts +13 -0
  37. package/dist/commands/recall.d.ts.map +1 -0
  38. package/dist/commands/recall.js +89 -0
  39. package/dist/commands/recall.js.map +1 -0
  40. package/dist/commands/review.d.ts +11 -0
  41. package/dist/commands/review.d.ts.map +1 -0
  42. package/dist/commands/review.js +66 -0
  43. package/dist/commands/review.js.map +1 -0
  44. package/dist/commands/search.d.ts +13 -0
  45. package/dist/commands/search.d.ts.map +1 -0
  46. package/dist/commands/search.js +107 -0
  47. package/dist/commands/search.js.map +1 -0
  48. package/dist/commands/setup.d.ts +9 -0
  49. package/dist/commands/setup.d.ts.map +1 -0
  50. package/dist/commands/setup.js +354 -0
  51. package/dist/commands/setup.js.map +1 -0
  52. package/dist/commands/write.d.ts +14 -0
  53. package/dist/commands/write.d.ts.map +1 -0
  54. package/dist/commands/write.js +247 -0
  55. package/dist/commands/write.js.map +1 -0
  56. package/dist/config.d.ts +19 -0
  57. package/dist/config.d.ts.map +1 -0
  58. package/dist/config.js +147 -0
  59. package/dist/config.js.map +1 -0
  60. package/dist/core/decay-engine.d.ts +16 -0
  61. package/dist/core/decay-engine.d.ts.map +1 -0
  62. package/dist/core/decay-engine.js +91 -0
  63. package/dist/core/decay-engine.js.map +1 -0
  64. package/dist/core/embedding.d.ts +60 -0
  65. package/dist/core/embedding.d.ts.map +1 -0
  66. package/dist/core/embedding.js +169 -0
  67. package/dist/core/embedding.js.map +1 -0
  68. package/dist/core/lifecycle-manager.d.ts +105 -0
  69. package/dist/core/lifecycle-manager.d.ts.map +1 -0
  70. package/dist/core/lifecycle-manager.js +332 -0
  71. package/dist/core/lifecycle-manager.js.map +1 -0
  72. package/dist/core/memory-template.d.ts +70 -0
  73. package/dist/core/memory-template.d.ts.map +1 -0
  74. package/dist/core/memory-template.js +496 -0
  75. package/dist/core/memory-template.js.map +1 -0
  76. package/dist/core/noise-filter.d.ts +39 -0
  77. package/dist/core/noise-filter.d.ts.map +1 -0
  78. package/dist/core/noise-filter.js +168 -0
  79. package/dist/core/noise-filter.js.map +1 -0
  80. package/dist/core/retriever.d.ts +21 -0
  81. package/dist/core/retriever.d.ts.map +1 -0
  82. package/dist/core/retriever.js +77 -0
  83. package/dist/core/retriever.js.map +1 -0
  84. package/dist/core/sanitizer.d.ts +9 -0
  85. package/dist/core/sanitizer.d.ts.map +1 -0
  86. package/dist/core/sanitizer.js +57 -0
  87. package/dist/core/sanitizer.js.map +1 -0
  88. package/dist/core/smart-extractor.d.ts +12 -0
  89. package/dist/core/smart-extractor.d.ts.map +1 -0
  90. package/dist/core/smart-extractor.js +102 -0
  91. package/dist/core/smart-extractor.js.map +1 -0
  92. package/dist/core/store.d.ts +40 -0
  93. package/dist/core/store.d.ts.map +1 -0
  94. package/dist/core/store.js +233 -0
  95. package/dist/core/store.js.map +1 -0
  96. package/dist/core/tool-config.d.ts +33 -0
  97. package/dist/core/tool-config.d.ts.map +1 -0
  98. package/dist/core/tool-config.js +253 -0
  99. package/dist/core/tool-config.js.map +1 -0
  100. package/dist/engines/engine-adapter.d.ts +22 -0
  101. package/dist/engines/engine-adapter.d.ts.map +1 -0
  102. package/dist/engines/engine-adapter.js +7 -0
  103. package/dist/engines/engine-adapter.js.map +1 -0
  104. package/dist/engines/lancedb-engine.d.ts +55 -0
  105. package/dist/engines/lancedb-engine.d.ts.map +1 -0
  106. package/dist/engines/lancedb-engine.js +279 -0
  107. package/dist/engines/lancedb-engine.js.map +1 -0
  108. package/dist/engines/text-engine.d.ts +30 -0
  109. package/dist/engines/text-engine.d.ts.map +1 -0
  110. package/dist/engines/text-engine.js +100 -0
  111. package/dist/engines/text-engine.js.map +1 -0
  112. package/dist/platforms/claude-code.d.ts +13 -0
  113. package/dist/platforms/claude-code.d.ts.map +1 -0
  114. package/dist/platforms/claude-code.js +85 -0
  115. package/dist/platforms/claude-code.js.map +1 -0
  116. package/dist/platforms/codex.d.ts +9 -0
  117. package/dist/platforms/codex.d.ts.map +1 -0
  118. package/dist/platforms/codex.js +102 -0
  119. package/dist/platforms/codex.js.map +1 -0
  120. package/dist/platforms/cursor.d.ts +9 -0
  121. package/dist/platforms/cursor.d.ts.map +1 -0
  122. package/dist/platforms/cursor.js +112 -0
  123. package/dist/platforms/cursor.js.map +1 -0
  124. package/dist/types.d.ts +55 -0
  125. package/dist/types.d.ts.map +1 -0
  126. package/dist/types.js +6 -0
  127. package/dist/types.js.map +1 -0
  128. package/package.json +87 -0
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ /**
3
+ * File I/O layer for memobank
4
+ * Reads and writes .md files with YAML frontmatter
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.findRepoRoot = findRepoRoot;
44
+ exports.loadAll = loadAll;
45
+ exports.loadFile = loadFile;
46
+ exports.writeMemory = writeMemory;
47
+ exports.writeMemoryMd = writeMemoryMd;
48
+ exports.readMemoryMd = readMemoryMd;
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const gray_matter_1 = __importDefault(require("gray-matter"));
52
+ const glob_1 = require("glob");
53
+ const MEMORY_TYPES = ['lesson', 'decision', 'workflow', 'architecture'];
54
+ /**
55
+ * Find memobank root directory
56
+ * Resolution order:
57
+ * 1. --repo CLI flag (passed as parameter)
58
+ * 2. MEMOBANK_REPO env var
59
+ * 3. meta/config.yaml in cwd or parent dirs (walk up)
60
+ * 4. ~/.memobank/<git-repo-name>/
61
+ * 5. ~/.memobank/default/
62
+ */
63
+ function findRepoRoot(cwd, repoFlag) {
64
+ // 1. CLI flag
65
+ if (repoFlag) {
66
+ return path.resolve(repoFlag);
67
+ }
68
+ // 2. Environment variable
69
+ const envRepo = process.env.MEMOBANK_REPO;
70
+ if (envRepo) {
71
+ return path.resolve(envRepo);
72
+ }
73
+ // 3. Walk up looking for meta/config.yaml
74
+ let current = cwd;
75
+ while (current !== path.dirname(current)) {
76
+ const configPath = path.join(current, 'meta', 'config.yaml');
77
+ if (fs.existsSync(configPath)) {
78
+ return current;
79
+ }
80
+ current = path.dirname(current);
81
+ }
82
+ // 4. Try to detect git repo name for ~/.memobank/<project>/
83
+ try {
84
+ // Check if we're in a git repo
85
+ const gitRoot = path.join(cwd, '.git');
86
+ if (fs.existsSync(gitRoot)) {
87
+ // Try to get repo name from remote or use directory name
88
+ const repoName = path.basename(cwd);
89
+ const memobankPath = path.join(osHomeDir(), '.memobank', repoName);
90
+ if (fs.existsSync(memobankPath)) {
91
+ return memobankPath;
92
+ }
93
+ }
94
+ }
95
+ catch (e) {
96
+ // Ignore git detection errors
97
+ }
98
+ // 5. Default: ~/.memobank/default/
99
+ return path.join(osHomeDir(), '.memobank', 'default');
100
+ }
101
+ /**
102
+ * Get home directory across platforms
103
+ */
104
+ function osHomeDir() {
105
+ return process.env.HOME || process.env.USERPROFILE || '';
106
+ }
107
+ /**
108
+ * Load all memory files from a repo
109
+ */
110
+ function loadAll(repoRoot) {
111
+ const memories = [];
112
+ for (const type of MEMORY_TYPES) {
113
+ const pattern = path.join(repoRoot, type, '**', '*.md');
114
+ const files = glob_1.glob.sync(pattern);
115
+ for (const filePath of files) {
116
+ try {
117
+ const memory = loadFile(filePath);
118
+ memories.push(memory);
119
+ }
120
+ catch (e) {
121
+ // Skip files that can't be parsed
122
+ console.warn(`Warning: Could not load ${filePath}: ${e.message}`);
123
+ }
124
+ }
125
+ }
126
+ return memories;
127
+ }
128
+ /**
129
+ * Load a single memory file
130
+ */
131
+ function loadFile(filePath) {
132
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
133
+ const parsed = (0, gray_matter_1.default)(fileContent);
134
+ const data = parsed.data;
135
+ // Validate required fields
136
+ if (!data.name || !data.type || !data.description || !data.created) {
137
+ throw new Error(`Missing required frontmatter fields in ${filePath}`);
138
+ }
139
+ if (!MEMORY_TYPES.includes(data.type)) {
140
+ throw new Error(`Invalid memory type "${data.type}" in ${filePath}`);
141
+ }
142
+ const memory = {
143
+ path: filePath,
144
+ name: data.name,
145
+ type: data.type,
146
+ description: data.description,
147
+ tags: Array.isArray(data.tags) ? data.tags : [],
148
+ created: data.created,
149
+ updated: data.updated,
150
+ review_after: data.review_after,
151
+ confidence: data.confidence,
152
+ content: parsed.content,
153
+ };
154
+ return memory;
155
+ }
156
+ /**
157
+ * Write a new memory file
158
+ * Creates filename from name + created date
159
+ */
160
+ function writeMemory(repoRoot, memory) {
161
+ const typeDir = path.join(repoRoot, memory.type);
162
+ // Ensure directory exists
163
+ if (!fs.existsSync(typeDir)) {
164
+ fs.mkdirSync(typeDir, { recursive: true });
165
+ }
166
+ // Generate filename: YYYY-MM-DD-name.md
167
+ const date = new Date(memory.created);
168
+ const dateStr = date.toISOString().split('T')[0];
169
+ const slug = memory.name
170
+ .toLowerCase()
171
+ .replace(/\s+/g, '-')
172
+ .replace(/[^a-z0-9-]/g, '');
173
+ const filename = `${dateStr}-${slug}.md`;
174
+ const filePath = path.join(typeDir, filename);
175
+ // Build frontmatter
176
+ const frontmatter = {
177
+ name: memory.name,
178
+ type: memory.type,
179
+ description: memory.description,
180
+ tags: memory.tags,
181
+ created: memory.created,
182
+ };
183
+ if (memory.updated)
184
+ frontmatter.updated = memory.updated;
185
+ if (memory.review_after)
186
+ frontmatter.review_after = memory.review_after;
187
+ if (memory.confidence)
188
+ frontmatter.confidence = memory.confidence;
189
+ // Write file
190
+ const fileContent = gray_matter_1.default.stringify(memory.content, frontmatter);
191
+ fs.writeFileSync(filePath, fileContent, 'utf-8');
192
+ return filePath;
193
+ }
194
+ /**
195
+ * Update MEMORY.md with recall results
196
+ */
197
+ function writeMemoryMd(repoRoot, results, query, engine) {
198
+ const memoryDir = path.join(repoRoot, 'memory');
199
+ if (!fs.existsSync(memoryDir)) {
200
+ fs.mkdirSync(memoryDir, { recursive: true });
201
+ }
202
+ const filePath = path.join(memoryDir, 'MEMORY.md');
203
+ let markdown = `<!-- Last updated: ${new Date().toISOString()} | query: "${query}" | engine: ${engine} | top ${results.length} -->\n\n`;
204
+ markdown += `## Recalled Memory\n\n`;
205
+ if (results.length === 0) {
206
+ markdown += `*No memories found for "${query}"*\n`;
207
+ }
208
+ else {
209
+ for (const result of results) {
210
+ const { memory, score } = result;
211
+ const relativePath = path.relative(repoRoot, memory.path);
212
+ const confidenceStr = memory.confidence ? ` · ${memory.confidence} confidence` : '';
213
+ const tagStr = memory.tags.length > 0 ? ` · tags: ${memory.tags.join(', ')}` : '';
214
+ markdown += `### [${memory.type}] ${memory.name}${confidenceStr}\n`;
215
+ markdown += `> ${memory.description}\n`;
216
+ markdown += `> \`${relativePath}\`${tagStr}\n\n`;
217
+ }
218
+ }
219
+ markdown += `---\n`;
220
+ markdown += `*${results.length} memories · engine: ${engine}*`;
221
+ fs.writeFileSync(filePath, markdown, 'utf-8');
222
+ }
223
+ /**
224
+ * Read MEMORY.md content
225
+ */
226
+ function readMemoryMd(repoRoot) {
227
+ const filePath = path.join(repoRoot, 'memory', 'MEMORY.md');
228
+ if (!fs.existsSync(filePath)) {
229
+ return null;
230
+ }
231
+ return fs.readFileSync(filePath, 'utf-8');
232
+ }
233
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/core/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Tool Configuration Module
3
+ * Configures AI coding tools to use memobank for memory
4
+ */
5
+ export interface ToolConfig {
6
+ name: string;
7
+ scope: 'global' | 'project';
8
+ projectPath?: string;
9
+ }
10
+ /**
11
+ * Configure Claude Code to use memobank
12
+ */
13
+ export declare function configureClaudeCode(config: ToolConfig): Promise<void>;
14
+ /**
15
+ * Configure Gemini CLI to use memobank
16
+ */
17
+ export declare function configureGeminiCli(config: ToolConfig): Promise<void>;
18
+ /**
19
+ * Configure Qwen Code to use memobank
20
+ */
21
+ export declare function configureQwenCode(config: ToolConfig): Promise<void>;
22
+ /**
23
+ * Configure all selected tools
24
+ */
25
+ export declare function configureTools(tools: ToolConfig[]): Promise<void>;
26
+ /**
27
+ * Check which tools are installed
28
+ */
29
+ export declare function detectInstalledTools(): {
30
+ name: string;
31
+ installed: boolean;
32
+ }[];
33
+ //# sourceMappingURL=tool-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-config.d.ts","sourceRoot":"","sources":["../../src/core/tool-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B3E;AAaD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D1E;AAaD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DzE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAAE,CAW7E"}
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ /**
3
+ * Tool Configuration Module
4
+ * Configures AI coding tools to use memobank for memory
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.configureClaudeCode = configureClaudeCode;
41
+ exports.configureGeminiCli = configureGeminiCli;
42
+ exports.configureQwenCode = configureQwenCode;
43
+ exports.configureTools = configureTools;
44
+ exports.detectInstalledTools = detectInstalledTools;
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const os = __importStar(require("os"));
48
+ /**
49
+ * Get Claude Code settings path
50
+ */
51
+ function getClaudeSettingsPath(scope, projectPath) {
52
+ if (scope === 'global') {
53
+ return path.join(os.homedir(), '.claude', 'settings.local.json');
54
+ }
55
+ else {
56
+ return path.join(projectPath || process.cwd(), '.claude', 'settings.local.json');
57
+ }
58
+ }
59
+ /**
60
+ * Configure Claude Code to use memobank
61
+ */
62
+ async function configureClaudeCode(config) {
63
+ const settingsPath = getClaudeSettingsPath(config.scope, config.projectPath);
64
+ const settingsDir = path.dirname(settingsPath);
65
+ // Ensure directory exists
66
+ if (!fs.existsSync(settingsDir)) {
67
+ fs.mkdirSync(settingsDir, { recursive: true });
68
+ }
69
+ // Load existing settings or create new
70
+ let settings = {};
71
+ if (fs.existsSync(settingsPath)) {
72
+ settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
73
+ }
74
+ // Get memobank path
75
+ const projectName = config.projectPath ? path.basename(config.projectPath) : 'default';
76
+ const memobankPath = path.join(os.homedir(), '.memobank', projectName);
77
+ // Configure autoMemoryDirectory
78
+ settings.autoMemoryDirectory = memobankPath;
79
+ // Write settings
80
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf-8');
81
+ console.log(`✓ Claude Code configured (${config.scope})`);
82
+ console.log(` Settings: ${settingsPath}`);
83
+ console.log(` Memory: ${memobankPath}`);
84
+ }
85
+ /**
86
+ * Get Gemini CLI config path
87
+ */
88
+ function getGeminiConfigPath(scope, projectPath) {
89
+ if (scope === 'global') {
90
+ return path.join(os.homedir(), '.gemini', 'settings.json');
91
+ }
92
+ else {
93
+ return path.join(projectPath || process.cwd(), '.gemini', 'settings.json');
94
+ }
95
+ }
96
+ /**
97
+ * Configure Gemini CLI to use memobank
98
+ */
99
+ async function configureGeminiCli(config) {
100
+ const configPath = getGeminiConfigPath(config.scope, config.projectPath);
101
+ const configDir = path.dirname(configPath);
102
+ // Ensure directory exists
103
+ if (!fs.existsSync(configDir)) {
104
+ fs.mkdirSync(configDir, { recursive: true });
105
+ }
106
+ // Load existing config or create new
107
+ let geminiConfig = {};
108
+ if (fs.existsSync(configPath)) {
109
+ geminiConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
110
+ }
111
+ // Get memobank path
112
+ const projectName = config.projectPath ? path.basename(config.projectPath) : 'default';
113
+ const memobankPath = path.join(os.homedir(), '.memobank', projectName);
114
+ // Configure memory path
115
+ geminiConfig.memoryPath = memobankPath;
116
+ geminiConfig.useMemobank = true;
117
+ // Write config
118
+ fs.writeFileSync(configPath, JSON.stringify(geminiConfig, null, 2), 'utf-8');
119
+ // Create GEMINI.md that references memobank
120
+ const geminiMdPath = config.scope === 'global'
121
+ ? path.join(os.homedir(), '.gemini', 'GEMINI.md')
122
+ : path.join(config.projectPath || process.cwd(), 'GEMINI.md');
123
+ const memobankRef = `# Gemini CLI Memory via Memobank
124
+
125
+ This project uses memobank for persistent memory.
126
+
127
+ ## Memory Location
128
+
129
+ \`${memobankPath}\`
130
+
131
+ ## Commands
132
+
133
+ - Run \`memo recall "query"\` to search memories
134
+ - Run \`memo write lesson\` to create new memories
135
+ - Run \`memo import\` to import from other AI tools
136
+
137
+ ## Auto-Memory
138
+
139
+ Memories are automatically recalled at session start and captured at session end.
140
+ `;
141
+ if (!fs.existsSync(geminiMdPath)) {
142
+ fs.writeFileSync(geminiMdPath, memobankRef, 'utf-8');
143
+ console.log(`✓ Created ${geminiMdPath}`);
144
+ }
145
+ console.log(`✓ Gemini CLI configured (${config.scope})`);
146
+ console.log(` Config: ${configPath}`);
147
+ console.log(` Memory: ${memobankPath}`);
148
+ }
149
+ /**
150
+ * Get Qwen Code config path
151
+ */
152
+ function getQwenConfigPath(scope, projectPath) {
153
+ if (scope === 'global') {
154
+ return path.join(os.homedir(), '.qwen', 'settings.json');
155
+ }
156
+ else {
157
+ return path.join(projectPath || process.cwd(), '.qwen', 'settings.json');
158
+ }
159
+ }
160
+ /**
161
+ * Configure Qwen Code to use memobank
162
+ */
163
+ async function configureQwenCode(config) {
164
+ const configPath = getQwenConfigPath(config.scope, config.projectPath);
165
+ const configDir = path.dirname(configPath);
166
+ // Ensure directory exists
167
+ if (!fs.existsSync(configDir)) {
168
+ fs.mkdirSync(configDir, { recursive: true });
169
+ }
170
+ // Load existing config or create new
171
+ let qwenConfig = {};
172
+ if (fs.existsSync(configPath)) {
173
+ qwenConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
174
+ }
175
+ // Get memobank path
176
+ const projectName = config.projectPath ? path.basename(config.projectPath) : 'default';
177
+ const memobankPath = path.join(os.homedir(), '.memobank', projectName);
178
+ // Configure context file to use memobank
179
+ qwenConfig.contextFileName = path.join(memobankPath, 'memory', 'MEMORY.md');
180
+ qwenConfig.useMemobank = true;
181
+ qwenConfig.memobankPath = memobankPath;
182
+ // Write config
183
+ fs.writeFileSync(configPath, JSON.stringify(qwenConfig, null, 2), 'utf-8');
184
+ // Create QWEN.md that references memobank
185
+ const qwenMdPath = config.scope === 'global'
186
+ ? path.join(os.homedir(), '.qwen', 'QWEN.md')
187
+ : path.join(config.projectPath || process.cwd(), 'QWEN.md');
188
+ const memobankRef = `# Qwen Code Memory via Memobank
189
+
190
+ This project uses memobank for persistent memory.
191
+
192
+ ## Memory Location
193
+
194
+ \`${memobankPath}\`
195
+
196
+ ## Commands
197
+
198
+ - Run \`memo recall "query"\` to search memories
199
+ - Run \`memo write lesson\` to create new memories
200
+ - Run \`memo import\` to import from other AI tools
201
+
202
+ ## Auto-Memory
203
+
204
+ Memories are automatically recalled at session start and captured at session end.
205
+ `;
206
+ if (!fs.existsSync(qwenMdPath)) {
207
+ fs.writeFileSync(qwenMdPath, memobankRef, 'utf-8');
208
+ console.log(`✓ Created ${qwenMdPath}`);
209
+ }
210
+ console.log(`✓ Qwen Code configured (${config.scope})`);
211
+ console.log(` Config: ${configPath}`);
212
+ console.log(` Memory: ${memobankPath}`);
213
+ }
214
+ /**
215
+ * Configure all selected tools
216
+ */
217
+ async function configureTools(tools) {
218
+ for (const tool of tools) {
219
+ try {
220
+ switch (tool.name) {
221
+ case 'Claude Code':
222
+ await configureClaudeCode(tool);
223
+ break;
224
+ case 'Gemini CLI':
225
+ await configureGeminiCli(tool);
226
+ break;
227
+ case 'Qwen Code':
228
+ await configureQwenCode(tool);
229
+ break;
230
+ default:
231
+ console.log(`⚠ Unknown tool: ${tool.name}`);
232
+ }
233
+ }
234
+ catch (error) {
235
+ console.log(`✗ Failed to configure ${tool.name}: ${error.message}`);
236
+ }
237
+ }
238
+ }
239
+ /**
240
+ * Check which tools are installed
241
+ */
242
+ function detectInstalledTools() {
243
+ const tools = [
244
+ { name: 'Claude Code', checkPath: path.join(os.homedir(), '.claude') },
245
+ { name: 'Gemini CLI', checkPath: path.join(os.homedir(), '.gemini') },
246
+ { name: 'Qwen Code', checkPath: path.join(os.homedir(), '.qwen') },
247
+ ];
248
+ return tools.map((tool) => ({
249
+ name: tool.name,
250
+ installed: fs.existsSync(tool.checkPath),
251
+ }));
252
+ }
253
+ //# sourceMappingURL=tool-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-config.js","sourceRoot":"","sources":["../../src/core/tool-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Shared engine adapter interface
3
+ * All search engines must implement this interface
4
+ */
5
+ import { MemoryFile, RecallResult } from '../types';
6
+ export interface EngineAdapter {
7
+ /**
8
+ * Search for memories matching a query
9
+ * @param query - Search query string
10
+ * @param memories - All memories to search through
11
+ * @param topK - Maximum number of results to return
12
+ * @returns Array of recall results sorted by score (descending)
13
+ */
14
+ search(query: string, memories: MemoryFile[], topK: number): Promise<RecallResult[]>;
15
+ /**
16
+ * Index memories (optional - some engines don't need pre-indexing)
17
+ * @param memories - Memories to index
18
+ * @param incremental - Whether to update incrementally or rebuild
19
+ */
20
+ index?(memories: MemoryFile[], incremental: boolean): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=engine-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-adapter.d.ts","sourceRoot":"","sources":["../../src/engines/engine-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAErF;;;;OAIG;IACH,KAAK,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Shared engine adapter interface
4
+ * All search engines must implement this interface
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=engine-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-adapter.js","sourceRoot":"","sources":["../../src/engines/engine-adapter.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * LanceDB Engine
3
+ * Vector search engine using LanceDB with hybrid BM25 + vector search
4
+ */
5
+ import { MemoryFile, RecallResult } from '../types';
6
+ import { EngineAdapter } from './engine-adapter';
7
+ import { EmbeddingGenerator } from '../core/embedding';
8
+ export declare class LanceDbEngine implements EngineAdapter {
9
+ private dbPath;
10
+ private embeddingGenerator;
11
+ private db;
12
+ private table;
13
+ private readonly tableName;
14
+ private readonly indexDirName;
15
+ constructor(dbPath: string, embeddingGenerator: EmbeddingGenerator);
16
+ /**
17
+ * Initialize LanceDB connection and table
18
+ */
19
+ private init;
20
+ /**
21
+ * Index memories into LanceDB
22
+ * @param memories - Memories to index
23
+ * @param incremental - Whether to update incrementally or rebuild
24
+ */
25
+ index(memories: MemoryFile[], incremental: boolean): Promise<void>;
26
+ /**
27
+ * Search for memories using hybrid vector + BM25 search
28
+ * @param query - Search query string
29
+ * @param memories - All memories (fallback for text search)
30
+ * @param topK - Maximum number of results
31
+ * @returns Array of recall results sorted by score
32
+ */
33
+ search(query: string, memories: MemoryFile[], topK: number): Promise<RecallResult[]>;
34
+ /**
35
+ * Get combined text for embedding generation
36
+ */
37
+ private getEmbeddingText;
38
+ /**
39
+ * Generate unique memory ID
40
+ */
41
+ private memoryId;
42
+ /**
43
+ * Check if memory has been updated since last indexing
44
+ */
45
+ private isMemoryUpdated;
46
+ /**
47
+ * Convert LanceDB row to MemoryFile
48
+ */
49
+ private rowToMemory;
50
+ /**
51
+ * Infer memory type from name/path
52
+ */
53
+ private inferType;
54
+ }
55
+ //# sourceMappingURL=lancedb-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lancedb-engine.d.ts","sourceRoot":"","sources":["../../src/engines/lancedb-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAmBvD,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;gBAE/B,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,kBAAkB;IAKlE;;OAEG;YACW,IAAI;IAwBlB;;;;OAIG;IACG,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA+GxE;;;;;;OAMG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA6C1F;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAKhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,SAAS;CAQlB"}