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,354 @@
1
+ "use strict";
2
+ /**
3
+ * Setup Command
4
+ * Interactive setup wizard for memobank configuration
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.setupWizard = setupWizard;
41
+ const path = __importStar(require("path"));
42
+ const readline = __importStar(require("readline"));
43
+ const store_1 = require("../core/store");
44
+ const config_1 = require("../config");
45
+ const import_1 = require("./import");
46
+ const tool_config_1 = require("../core/tool-config");
47
+ /**
48
+ * Create readline interface
49
+ */
50
+ function createReadline() {
51
+ return readline.createInterface({
52
+ input: process.stdin,
53
+ output: process.stdout,
54
+ });
55
+ }
56
+ /**
57
+ * Prompt user with yes/no question
58
+ */
59
+ function askYesNo(rl, question, defaultValue = true) {
60
+ return new Promise((resolve) => {
61
+ const defaultStr = defaultValue ? 'Y/n' : 'y/N';
62
+ rl.question(`${question} (${defaultStr}): `, (answer) => {
63
+ if (!answer || answer.trim() === '') {
64
+ resolve(defaultValue);
65
+ }
66
+ else {
67
+ const lower = answer.toLowerCase().trim();
68
+ resolve(lower === 'y' || lower === 'yes');
69
+ }
70
+ });
71
+ });
72
+ }
73
+ /**
74
+ * Prompt user to select from options
75
+ */
76
+ function askSelect(rl, question, options) {
77
+ return new Promise((resolve) => {
78
+ console.log(question);
79
+ options.forEach((opt, i) => {
80
+ console.log(` ${i + 1}. ${opt}`);
81
+ });
82
+ rl.question(`Select (1-${options.length}, or 0 to skip): `, (answer) => {
83
+ const num = parseInt(answer.trim());
84
+ if (isNaN(num) || num < 0 || num > options.length) {
85
+ resolve(-1);
86
+ }
87
+ else {
88
+ resolve(num - 1);
89
+ }
90
+ });
91
+ });
92
+ }
93
+ /**
94
+ * Prompt user to select multiple options
95
+ */
96
+ function askMultiSelect(rl, question, options) {
97
+ return new Promise((resolve) => {
98
+ console.log(question);
99
+ options.forEach((opt, i) => {
100
+ console.log(` ${i + 1}. ${opt}`);
101
+ });
102
+ rl.question(`Select (comma-separated, e.g., "1,3" or "all"): `, (answer) => {
103
+ const trimmed = answer.trim().toLowerCase();
104
+ if (trimmed === 'all') {
105
+ resolve(options.map((_, i) => i));
106
+ }
107
+ else if (!trimmed) {
108
+ resolve([]);
109
+ }
110
+ else {
111
+ const indices = trimmed
112
+ .split(',')
113
+ .map((s) => parseInt(s.trim()) - 1)
114
+ .filter((n) => !isNaN(n) && n >= 0 && n < options.length);
115
+ resolve(indices);
116
+ }
117
+ });
118
+ });
119
+ }
120
+ /**
121
+ * Ask user for scope (global or project)
122
+ */
123
+ async function askScope(rl, toolName) {
124
+ console.log(`\nšŸ“ ${toolName} Memory Scope`);
125
+ console.log('Where should memories be stored?\n');
126
+ console.log(' 1. Global - Shared across all projects');
127
+ console.log(' 2. Project - Specific to this project only');
128
+ const answer = await new Promise((resolve) => {
129
+ rl.question('Select (1-2): ', resolve);
130
+ });
131
+ return answer.trim() === '1' ? 'global' : 'project';
132
+ }
133
+ /**
134
+ * Check if Ollama is installed and running
135
+ */
136
+ async function checkOllama() {
137
+ return new Promise((resolve) => {
138
+ const { exec } = require('child_process');
139
+ exec('ollama list', (error, stdout) => {
140
+ if (error) {
141
+ resolve({ installed: false, models: [] });
142
+ }
143
+ else {
144
+ const models = stdout
145
+ .split('\n')
146
+ .slice(1) // Skip header
147
+ .filter((line) => line.trim())
148
+ .map((line) => line.split(/\s+/)[0])
149
+ .filter((name) => !!name);
150
+ resolve({ installed: true, models });
151
+ }
152
+ });
153
+ });
154
+ }
155
+ /**
156
+ * Setup embedding configuration
157
+ */
158
+ async function setupEmbedding(rl, config) {
159
+ console.log('\nšŸ“” Embedding Configuration\n');
160
+ console.log('Vector embeddings enable semantic search for your memories.\n');
161
+ const useEmbedding = await askYesNo(rl, 'Enable vector search with embeddings?', true);
162
+ if (!useEmbedding) {
163
+ config.embedding.engine = 'text';
164
+ console.log('āœ“ Using text-based search only.\n');
165
+ return config;
166
+ }
167
+ // Check for Ollama
168
+ const ollamaStatus = await checkOllama();
169
+ if (ollamaStatus.installed) {
170
+ console.log(`\nāœ“ Ollama detected (${ollamaStatus.models.length} models installed)`);
171
+ const hasMxbai = ollamaStatus.models.some((m) => m.includes('mxbai') || m.includes('embed'));
172
+ if (!hasMxbai) {
173
+ console.log(' Note: Recommended model "mxbai-embed-large" not found.');
174
+ console.log(' Run: ollama pull mxbai-embed-large\n');
175
+ }
176
+ const useOllama = await askYesNo(rl, 'Use Ollama for local embeddings?', true);
177
+ if (useOllama) {
178
+ config.embedding.engine = 'lancedb';
179
+ config.embedding.provider = 'ollama';
180
+ config.embedding.model = 'mxbai-embed-large';
181
+ config.embedding.dimensions = 1024;
182
+ console.log('āœ“ Configured: Ollama + LanceDB\n');
183
+ return config;
184
+ }
185
+ }
186
+ else {
187
+ console.log('\n⚠ Ollama not detected.');
188
+ console.log(' Install: https://ollama.ai\n');
189
+ }
190
+ // OpenAI option
191
+ const useOpenAI = await askYesNo(rl, 'Use OpenAI for embeddings?', false);
192
+ if (useOpenAI) {
193
+ const hasKey = !!process.env.OPENAI_API_KEY;
194
+ if (!hasKey) {
195
+ console.log(' ⚠ OPENAI_API_KEY not set in environment.');
196
+ console.log(' Export: export OPENAI_API_KEY="sk-..."');
197
+ }
198
+ config.embedding.engine = 'lancedb';
199
+ config.embedding.provider = 'openai';
200
+ config.embedding.model = 'text-embedding-3-small';
201
+ config.embedding.dimensions = 1536;
202
+ console.log('āœ“ Configured: OpenAI + LanceDB\n');
203
+ return config;
204
+ }
205
+ // Default to text
206
+ config.embedding.engine = 'text';
207
+ console.log('āœ“ Using text-based search only.\n');
208
+ return config;
209
+ }
210
+ /**
211
+ * Configure AI tools to use memobank
212
+ */
213
+ async function setupToolConfiguration(rl, repoRoot) {
214
+ console.log('\nšŸ”Œ AI Tool Configuration\n');
215
+ console.log('Memobank can integrate with your AI coding tools to provide\nautomatic memory recall and capture.\n');
216
+ const installedTools = (0, tool_config_1.detectInstalledTools)();
217
+ const availableTools = installedTools.filter((t) => t.installed);
218
+ if (availableTools.length === 0) {
219
+ console.log('No supported AI tools detected.\n');
220
+ console.log('Install one of:');
221
+ console.log(' • Claude Code - https://claude.ai/code');
222
+ console.log(' • Gemini CLI - https://geminicli.com');
223
+ console.log(' • Qwen Code - https://qwenlm.github.io/qwen-code\n');
224
+ return;
225
+ }
226
+ console.log('Detected installed tools:\n');
227
+ availableTools.forEach((t, i) => {
228
+ console.log(` ${i + 1}. ${t.name}`);
229
+ });
230
+ console.log();
231
+ const configureToolsPrompt = await askYesNo(rl, 'Configure these tools to use memobank?', true);
232
+ if (!configureToolsPrompt) {
233
+ console.log('āœ“ Skipping tool configuration.\n');
234
+ return;
235
+ }
236
+ // Let user select which tools to configure
237
+ const selectedIndices = await askMultiSelect(rl, 'Which tools to configure?', availableTools.map((t) => t.name));
238
+ if (selectedIndices.length === 0) {
239
+ console.log('āœ“ Skipping tool configuration.\n');
240
+ return;
241
+ }
242
+ // Get project path for project-scoped tools
243
+ const cwd = process.cwd();
244
+ const projectPath = (0, store_1.findRepoRoot)(cwd, repoRoot);
245
+ const projectName = path.basename(projectPath);
246
+ // Configure each selected tool with scope
247
+ const toolConfigs = [];
248
+ for (const index of selectedIndices) {
249
+ const tool = availableTools[index];
250
+ if (!tool)
251
+ continue;
252
+ const scope = await askScope(rl, tool.name);
253
+ toolConfigs.push({
254
+ name: tool.name,
255
+ scope,
256
+ projectPath: scope === 'project' ? projectPath : undefined,
257
+ });
258
+ console.log(`āœ“ ${tool.name} will use ${scope} memory\n`);
259
+ }
260
+ // Apply configurations
261
+ console.log('\nāš™ļø Applying configurations...\n');
262
+ await (0, tool_config_1.configureTools)(toolConfigs);
263
+ console.log();
264
+ }
265
+ /**
266
+ * Import memories from other AI tools
267
+ */
268
+ async function setupImport(rl, repoRoot) {
269
+ console.log('\nšŸ“„ Import Existing Memories\n');
270
+ console.log('Memobank can import memories from other AI coding tools.\n');
271
+ const availableTools = (0, import_1.detectAvailableTools)();
272
+ if (availableTools.length === 0) {
273
+ console.log('No existing AI tool memories found.\n');
274
+ console.log('Supported tools:');
275
+ console.log(' • Claude Code - ~/.claude/projects/<project>/memory/');
276
+ console.log(' • Gemini CLI - ~/.gemini/GEMINI.md, ./GEMINI.md');
277
+ console.log(' • Qwen Code - ~/.qwen/QWEN.md\n');
278
+ return;
279
+ }
280
+ console.log('Found memories from:\n');
281
+ availableTools.forEach((t, i) => {
282
+ console.log(` ${i + 1}. ${t.name}`);
283
+ });
284
+ console.log();
285
+ const doImport = await askYesNo(rl, 'Import these memories to memobank?', true);
286
+ if (!doImport) {
287
+ console.log('āœ“ Skipping import.\n');
288
+ return;
289
+ }
290
+ // Select which tools to import
291
+ const selection = await askSelect(rl, 'Which memories to import?', [
292
+ ...availableTools.map((t) => t.name),
293
+ 'All of the above',
294
+ ]);
295
+ if (selection === -1 || selection === availableTools.length) {
296
+ // Import all
297
+ await (0, import_1.importMemories)({ repo: repoRoot, dryRun: false });
298
+ }
299
+ else {
300
+ const tool = availableTools[selection];
301
+ if (!tool)
302
+ return;
303
+ if (tool.name.toLowerCase().includes('claude')) {
304
+ await (0, import_1.importMemories)({ repo: repoRoot, claude: true, dryRun: false });
305
+ }
306
+ else if (tool.name.toLowerCase().includes('gemini')) {
307
+ await (0, import_1.importMemories)({ repo: repoRoot, gemini: true, dryRun: false });
308
+ }
309
+ else if (tool.name.toLowerCase().includes('qwen')) {
310
+ await (0, import_1.importMemories)({ repo: repoRoot, qwen: true, dryRun: false });
311
+ }
312
+ }
313
+ console.log();
314
+ }
315
+ /**
316
+ * Main setup wizard
317
+ */
318
+ async function setupWizard(repoRoot) {
319
+ const rl = createReadline();
320
+ const cwd = process.cwd();
321
+ const root = (0, store_1.findRepoRoot)(cwd, repoRoot);
322
+ console.log('\n🧠 Memobank Setup Wizard\n');
323
+ console.log('This wizard will help you configure memobank.\n');
324
+ console.log(`Repository: ${root}\n`);
325
+ // Load existing config
326
+ let config = (0, config_1.loadConfig)(root);
327
+ // Step 1: Embedding setup
328
+ config = await setupEmbedding(rl, config);
329
+ // Step 2: Tool configuration
330
+ await setupToolConfiguration(rl, root);
331
+ // Step 3: Import existing memories
332
+ await setupImport(rl, root);
333
+ // Save config
334
+ console.log('šŸ’¾ Saving configuration...\n');
335
+ (0, config_1.writeConfig)(root, config);
336
+ // Summary
337
+ console.log('āœ… Setup Complete!\n');
338
+ console.log('Configuration summary:');
339
+ console.log(` • Search engine: ${config.embedding.engine}`);
340
+ if (config.embedding.engine === 'lancedb') {
341
+ console.log(` • Provider: ${config.embedding.provider}`);
342
+ console.log(` • Model: ${config.embedding.model}`);
343
+ }
344
+ console.log(` • Top K results: ${config.memory.top_k}`);
345
+ console.log(` • Token budget: ${config.memory.token_budget}`);
346
+ console.log('\nNext steps:');
347
+ console.log(' memo map # View memory statistics');
348
+ console.log(' memo write lesson # Create your first memory');
349
+ console.log(' memo recall "query" # Search memories');
350
+ console.log(' memo import # Import from other AI tools');
351
+ console.log(' memo --help # See all commands\n');
352
+ rl.close();
353
+ }
354
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Write command
3
+ * Interactive + non-interactive memory creation
4
+ */
5
+ import { MemoryType } from '../types';
6
+ export interface WriteOptions {
7
+ name?: string;
8
+ description?: string;
9
+ tags?: string;
10
+ content?: string;
11
+ repo?: string;
12
+ }
13
+ export declare function writeMemoryCommand(type: MemoryType, options?: WriteOptions): Promise<void>;
14
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,UAAU,EAAc,MAAM,UAAU,CAAC;AAYlD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA8FD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA6Hf"}
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ /**
3
+ * Write command
4
+ * Interactive + non-interactive memory creation
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.writeMemoryCommand = writeMemoryCommand;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const os = __importStar(require("os"));
44
+ const child_process_1 = require("child_process");
45
+ const util_1 = require("util");
46
+ const store_1 = require("../core/store");
47
+ const memory_template_1 = require("../core/memory-template");
48
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
49
+ /**
50
+ * Memory template for editor
51
+ */
52
+ function getTemplate(type) {
53
+ const baseTemplate = (0, memory_template_1.getTemplateByType)(type);
54
+ return `---
55
+ name: ${(0, memory_template_1.generateMemorySlug)('your-memory-name')}
56
+ type: ${type}
57
+ description: One-sentence summary
58
+ tags: [topic, technology]
59
+ confidence: medium
60
+ created: ${new Date().toISOString()}
61
+ ---
62
+
63
+ ${baseTemplate}
64
+
65
+ ---
66
+ # SECURITY CHECKLIST (remove this section before saving)
67
+ # - [ ] No API keys, passwords, or tokens
68
+ # - [ ] No IP addresses or hostnames
69
+ # - [ ] No email addresses or phone numbers
70
+ # - [ ] No database connection strings
71
+ # - [ ] No private keys or certificates
72
+ # - [ ] Content is at appropriate abstraction level (high/medium)
73
+ `;
74
+ }
75
+ /**
76
+ * Parse content from edited template
77
+ */
78
+ function parseTemplate(content, type) {
79
+ // Find frontmatter boundaries
80
+ const lines = content.split('\n');
81
+ let frontmatter = '';
82
+ let body = '';
83
+ let inFrontmatter = false;
84
+ let foundFirstDash = false;
85
+ for (const line of lines) {
86
+ if (line === '---') {
87
+ if (!foundFirstDash) {
88
+ foundFirstDash = true;
89
+ inFrontmatter = true;
90
+ }
91
+ else if (inFrontmatter) {
92
+ inFrontmatter = false;
93
+ }
94
+ continue;
95
+ }
96
+ if (inFrontmatter) {
97
+ frontmatter += line + '\n';
98
+ }
99
+ else if (!line.startsWith('# SECURITY CHECKLIST')) {
100
+ body += line + '\n';
101
+ }
102
+ }
103
+ // Parse YAML frontmatter
104
+ const data = {
105
+ name: '',
106
+ type,
107
+ description: '',
108
+ tags: [],
109
+ confidence: 'medium',
110
+ created: new Date().toISOString(),
111
+ };
112
+ for (const line of frontmatter.split('\n')) {
113
+ const match = line.match(/^(\w+):\s*(.*)$/);
114
+ if (match?.[1]) {
115
+ const key = match[1];
116
+ const value = match[2]?.trim() ?? '';
117
+ if (key === 'tags') {
118
+ // Parse array format: [tag1, tag2]
119
+ const tagArray = value
120
+ .replace(/^\[|\]$/g, '')
121
+ .split(',')
122
+ .map((t) => t.trim().replace(/['"]/g, ''))
123
+ .filter((t) => t.length > 0);
124
+ data[key] = tagArray;
125
+ }
126
+ else if (value) {
127
+ data[key] = value;
128
+ }
129
+ }
130
+ }
131
+ data.content = body.trim();
132
+ return data;
133
+ }
134
+ async function writeMemoryCommand(type, options = {}) {
135
+ const cwd = process.cwd();
136
+ const repoRoot = (0, store_1.findRepoRoot)(cwd, options.repo);
137
+ // Check if non-interactive mode
138
+ const isNonInteractive = options.name && options.description && options.content;
139
+ let memoryData;
140
+ if (isNonInteractive) {
141
+ // Non-interactive mode
142
+ memoryData = {
143
+ name: options.name,
144
+ type,
145
+ description: options.description,
146
+ tags: options.tags ? options.tags.split(',').map((t) => t.trim()) : [],
147
+ confidence: 'medium',
148
+ content: options.content || '',
149
+ created: new Date().toISOString(),
150
+ };
151
+ }
152
+ else {
153
+ // Interactive mode - open editor
154
+ const template = getTemplate(type);
155
+ const tmpFile = path.join(os.tmpdir(), `memo-${Date.now()}.md`);
156
+ fs.writeFileSync(tmpFile, template, 'utf-8');
157
+ const editor = process.env.EDITOR || 'vi';
158
+ console.log(`Opening ${editor}...`);
159
+ console.log('\nšŸ“ Security Guidelines:');
160
+ console.log(' • Do NOT include API keys, passwords, or tokens');
161
+ console.log(' • Do NOT include IP addresses or hostnames');
162
+ console.log(' • Do NOT include email addresses or phone numbers');
163
+ console.log(' • Keep content at high/medium abstraction level\n');
164
+ try {
165
+ await execAsync(`${editor} "${tmpFile}"`);
166
+ const editedContent = fs.readFileSync(tmpFile, 'utf-8');
167
+ memoryData = parseTemplate(editedContent, type);
168
+ }
169
+ catch (error) {
170
+ console.error(`Editor error: ${error.message}`);
171
+ fs.unlinkSync(tmpFile);
172
+ return;
173
+ }
174
+ finally {
175
+ fs.unlinkSync(tmpFile);
176
+ }
177
+ }
178
+ // Validate required fields
179
+ if (!memoryData.name) {
180
+ console.error('Error: name is required');
181
+ return;
182
+ }
183
+ if (!memoryData.description) {
184
+ console.error('Error: description is required');
185
+ return;
186
+ }
187
+ if (!memoryData.content) {
188
+ console.error('Error: content is required');
189
+ return;
190
+ }
191
+ // Security validation
192
+ console.log('\nšŸ”’ Security check...');
193
+ const { sanitized, redacted } = (0, memory_template_1.sanitizeContent)(memoryData.content);
194
+ if (redacted.length > 0) {
195
+ console.log('āš ļø Found sensitive information that will be redacted:');
196
+ redacted.forEach((item) => console.log(` • ${item}`));
197
+ console.log('');
198
+ // Auto-sanitize
199
+ memoryData.content = sanitized;
200
+ console.log('āœ“ Content has been automatically sanitized\n');
201
+ }
202
+ // Validate content
203
+ const validation = (0, memory_template_1.validateMemoryContent)(memoryData.content);
204
+ if (validation.errors.length > 0) {
205
+ console.error('āŒ Validation errors:');
206
+ validation.errors.forEach((err) => console.error(` • ${err}`));
207
+ console.error('\nPlease remove sensitive information and try again.');
208
+ return;
209
+ }
210
+ if (validation.warnings.length > 0) {
211
+ console.log('āš ļø Warnings:');
212
+ validation.warnings.forEach((warn) => console.log(` • ${warn}`));
213
+ console.log('');
214
+ }
215
+ // Check abstraction level
216
+ const abstractionLevel = (0, memory_template_1.checkAbstractionLevel)(memoryData.content);
217
+ if (abstractionLevel === 'too-specific') {
218
+ console.error('āš ļø Content appears too specific.');
219
+ console.error(' Please document at a higher abstraction level.');
220
+ console.error(' Focus on patterns, principles, and decisions rather than:');
221
+ console.error(' • Specific IP addresses or hostnames');
222
+ console.error(' • User-specific file paths');
223
+ console.error(' • Hard-coded values that may change\n');
224
+ return;
225
+ }
226
+ console.log(`āœ“ Abstraction level: ${abstractionLevel}\n`);
227
+ // Write memory
228
+ try {
229
+ const { fileName, content: fileContent } = (0, memory_template_1.generateMemoryFile)({
230
+ name: memoryData.name,
231
+ type: memoryData.type,
232
+ description: memoryData.description,
233
+ tags: memoryData.tags,
234
+ created: memoryData.created,
235
+ content: memoryData.content,
236
+ confidence: memoryData.confidence,
237
+ });
238
+ // Update memoryData with generated file name
239
+ memoryData.name = fileName.replace('.md', '').replace(/^\d{4}-\d{2}-\d{2}-/, '');
240
+ const filePath = (0, store_1.writeMemory)(repoRoot, memoryData);
241
+ console.log(`āœ… Created: ${filePath}`);
242
+ }
243
+ catch (error) {
244
+ console.error(`Error writing memory: ${error.message}`);
245
+ }
246
+ }
247
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Config module
3
+ * Read and write meta/config.yaml
4
+ */
5
+ import { MemoConfig } from './types';
6
+ /**
7
+ * Load config from repo root
8
+ * Falls back to defaults if file doesn't exist
9
+ */
10
+ export declare function loadConfig(repoRoot: string): MemoConfig;
11
+ /**
12
+ * Write config to repo root
13
+ */
14
+ export declare function writeConfig(repoRoot: string, config: MemoConfig): void;
15
+ /**
16
+ * Initialize config with project name
17
+ */
18
+ export declare function initConfig(repoRoot: string, projectName: string): void;
19
+ //# sourceMappingURL=config.d.ts.map