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.
- package/CHANGELOG.md +139 -0
- package/LICENSE +21 -0
- package/README.md +300 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +294 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/capture.d.ts +12 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +191 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/import.d.ts +28 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +356 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/index.d.ts +12 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +82 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/install.d.ts +16 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +142 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/lifecycle.d.ts +21 -0
- package/dist/commands/lifecycle.d.ts.map +1 -0
- package/dist/commands/lifecycle.js +106 -0
- package/dist/commands/lifecycle.js.map +1 -0
- package/dist/commands/map.d.ts +10 -0
- package/dist/commands/map.d.ts.map +1 -0
- package/dist/commands/map.js +72 -0
- package/dist/commands/map.js.map +1 -0
- package/dist/commands/onboarding.d.ts +10 -0
- package/dist/commands/onboarding.d.ts.map +1 -0
- package/dist/commands/onboarding.js +420 -0
- package/dist/commands/onboarding.js.map +1 -0
- package/dist/commands/recall.d.ts +13 -0
- package/dist/commands/recall.d.ts.map +1 -0
- package/dist/commands/recall.js +89 -0
- package/dist/commands/recall.js.map +1 -0
- package/dist/commands/review.d.ts +11 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +66 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/search.d.ts +13 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +107 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/setup.d.ts +9 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +354 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/write.d.ts +14 -0
- package/dist/commands/write.d.ts.map +1 -0
- package/dist/commands/write.js +247 -0
- package/dist/commands/write.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +147 -0
- package/dist/config.js.map +1 -0
- package/dist/core/decay-engine.d.ts +16 -0
- package/dist/core/decay-engine.d.ts.map +1 -0
- package/dist/core/decay-engine.js +91 -0
- package/dist/core/decay-engine.js.map +1 -0
- package/dist/core/embedding.d.ts +60 -0
- package/dist/core/embedding.d.ts.map +1 -0
- package/dist/core/embedding.js +169 -0
- package/dist/core/embedding.js.map +1 -0
- package/dist/core/lifecycle-manager.d.ts +105 -0
- package/dist/core/lifecycle-manager.d.ts.map +1 -0
- package/dist/core/lifecycle-manager.js +332 -0
- package/dist/core/lifecycle-manager.js.map +1 -0
- package/dist/core/memory-template.d.ts +70 -0
- package/dist/core/memory-template.d.ts.map +1 -0
- package/dist/core/memory-template.js +496 -0
- package/dist/core/memory-template.js.map +1 -0
- package/dist/core/noise-filter.d.ts +39 -0
- package/dist/core/noise-filter.d.ts.map +1 -0
- package/dist/core/noise-filter.js +168 -0
- package/dist/core/noise-filter.js.map +1 -0
- package/dist/core/retriever.d.ts +21 -0
- package/dist/core/retriever.d.ts.map +1 -0
- package/dist/core/retriever.js +77 -0
- package/dist/core/retriever.js.map +1 -0
- package/dist/core/sanitizer.d.ts +9 -0
- package/dist/core/sanitizer.d.ts.map +1 -0
- package/dist/core/sanitizer.js +57 -0
- package/dist/core/sanitizer.js.map +1 -0
- package/dist/core/smart-extractor.d.ts +12 -0
- package/dist/core/smart-extractor.d.ts.map +1 -0
- package/dist/core/smart-extractor.js +102 -0
- package/dist/core/smart-extractor.js.map +1 -0
- package/dist/core/store.d.ts +40 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +233 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/tool-config.d.ts +33 -0
- package/dist/core/tool-config.d.ts.map +1 -0
- package/dist/core/tool-config.js +253 -0
- package/dist/core/tool-config.js.map +1 -0
- package/dist/engines/engine-adapter.d.ts +22 -0
- package/dist/engines/engine-adapter.d.ts.map +1 -0
- package/dist/engines/engine-adapter.js +7 -0
- package/dist/engines/engine-adapter.js.map +1 -0
- package/dist/engines/lancedb-engine.d.ts +55 -0
- package/dist/engines/lancedb-engine.d.ts.map +1 -0
- package/dist/engines/lancedb-engine.js +279 -0
- package/dist/engines/lancedb-engine.js.map +1 -0
- package/dist/engines/text-engine.d.ts +30 -0
- package/dist/engines/text-engine.d.ts.map +1 -0
- package/dist/engines/text-engine.js +100 -0
- package/dist/engines/text-engine.js.map +1 -0
- package/dist/platforms/claude-code.d.ts +13 -0
- package/dist/platforms/claude-code.d.ts.map +1 -0
- package/dist/platforms/claude-code.js +85 -0
- package/dist/platforms/claude-code.js.map +1 -0
- package/dist/platforms/codex.d.ts +9 -0
- package/dist/platforms/codex.d.ts.map +1 -0
- package/dist/platforms/codex.js +102 -0
- package/dist/platforms/codex.js.map +1 -0
- package/dist/platforms/cursor.d.ts +9 -0
- package/dist/platforms/cursor.d.ts.map +1 -0
- package/dist/platforms/cursor.js +112 -0
- package/dist/platforms/cursor.js.map +1 -0
- package/dist/types.d.ts +55 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Memory Template Module
|
|
4
|
+
* Provides templates and sanitization for memobank memories
|
|
5
|
+
* Aligned with: https://github.com/clawde-agent/memobank/blob/master/docs/specs/2026-03-17-memobank-design.md
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.sanitizeContent = sanitizeContent;
|
|
9
|
+
exports.checkSensitiveTopics = checkSensitiveTopics;
|
|
10
|
+
exports.validateMemoryContent = validateMemoryContent;
|
|
11
|
+
exports.generateMemorySlug = generateMemorySlug;
|
|
12
|
+
exports.generateMemoryFile = generateMemoryFile;
|
|
13
|
+
exports.getTemplateByType = getTemplateByType;
|
|
14
|
+
exports.checkAbstractionLevel = checkAbstractionLevel;
|
|
15
|
+
/**
|
|
16
|
+
* Patterns for sensitive information detection
|
|
17
|
+
* Design Goal: Safe to share - No secrets, no embeddings, no binary blobs
|
|
18
|
+
*/
|
|
19
|
+
const SENSITIVE_PATTERNS = [
|
|
20
|
+
// API Keys (various formats)
|
|
21
|
+
{ pattern: /sk-[a-zA-Z0-9]{20,}/g, label: 'API Key', replacement: '[REDACTED_API_KEY]' },
|
|
22
|
+
{
|
|
23
|
+
pattern: /api[_-]?key\s*[=:]\s*['"]?[a-zA-Z0-9]{16,}['"]?/gi,
|
|
24
|
+
label: 'API Key',
|
|
25
|
+
replacement: 'api_key=[REDACTED_API_KEY]',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
pattern: /apikey\s*[=:]\s*['"]?[a-zA-Z0-9]{16,}['"]?/gi,
|
|
29
|
+
label: 'API Key',
|
|
30
|
+
replacement: 'apikey=[REDACTED_API_KEY]',
|
|
31
|
+
},
|
|
32
|
+
// AWS
|
|
33
|
+
{ pattern: /AKIA[0-9A-Z]{16}/g, label: 'AWS Access Key', replacement: '[REDACTED_AWS_KEY]' },
|
|
34
|
+
{
|
|
35
|
+
pattern: /aws[_-]?access[_-]?key[_-]?id\s*[=:]\s*['"]?[A-Z0-9]{16,}['"]?/gi,
|
|
36
|
+
label: 'AWS Key',
|
|
37
|
+
replacement: 'aws_access_key_id=[REDACTED]',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
pattern: /aws[_-]?secret[_-]?access[_-]?key\s*[=:]\s*['"]?[a-zA-Z0-9/+=]{30,}['"]?/gi,
|
|
41
|
+
label: 'AWS Secret',
|
|
42
|
+
replacement: 'aws_secret_access_key=[REDACTED]',
|
|
43
|
+
},
|
|
44
|
+
// GitHub/GitLab tokens
|
|
45
|
+
{
|
|
46
|
+
pattern: /ghp_[a-zA-Z0-9]{36}/g,
|
|
47
|
+
label: 'GitHub Token',
|
|
48
|
+
replacement: '[REDACTED_GITHUB_TOKEN]',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
pattern: /gho_[a-zA-Z0-9]{36}/g,
|
|
52
|
+
label: 'GitHub OAuth Token',
|
|
53
|
+
replacement: '[REDACTED_GITHUB_TOKEN]',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
pattern: /glpat-[a-zA-Z0-9-]{20,}/g,
|
|
57
|
+
label: 'GitLab Token',
|
|
58
|
+
replacement: '[REDACTED_GITLAB_TOKEN]',
|
|
59
|
+
},
|
|
60
|
+
// Generic tokens
|
|
61
|
+
{
|
|
62
|
+
pattern: /token\s*[=:]\s*['"]?[a-zA-Z0-9_-]{20,}['"]?/gi,
|
|
63
|
+
label: 'Token',
|
|
64
|
+
replacement: 'token=[REDACTED_TOKEN]',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
pattern: /bearer\s+[a-zA-Z0-9_-]{20,}/gi,
|
|
68
|
+
label: 'Bearer Token',
|
|
69
|
+
replacement: 'bearer [REDACTED_TOKEN]',
|
|
70
|
+
},
|
|
71
|
+
// Passwords
|
|
72
|
+
{
|
|
73
|
+
pattern: /password\s*[=:]\s*['"]?[^\s'"]{4,}['"]?/gi,
|
|
74
|
+
label: 'Password',
|
|
75
|
+
replacement: 'password=[REDACTED_PASSWORD]',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
pattern: /passwd\s*[=:]\s*['"]?[^\s'"]{4,}['"]?/gi,
|
|
79
|
+
label: 'Password',
|
|
80
|
+
replacement: 'passwd=[REDACTED_PASSWORD]',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
pattern: /pwd\s*[=:]\s*['"]?[^\s'"]{4,}['"]?/gi,
|
|
84
|
+
label: 'Password',
|
|
85
|
+
replacement: 'pwd=[REDACTED_PASSWORD]',
|
|
86
|
+
},
|
|
87
|
+
// Private keys
|
|
88
|
+
{
|
|
89
|
+
pattern: /-----BEGIN (?:RSA |EC |DSA )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC |DSA )?PRIVATE KEY-----/g,
|
|
90
|
+
label: 'Private Key',
|
|
91
|
+
replacement: '[REDACTED_PRIVATE_KEY]',
|
|
92
|
+
},
|
|
93
|
+
// IP addresses (internal and external)
|
|
94
|
+
{
|
|
95
|
+
pattern: /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,
|
|
96
|
+
label: 'IP Address',
|
|
97
|
+
replacement: '[REDACTED_IP]',
|
|
98
|
+
},
|
|
99
|
+
// Email addresses (PII)
|
|
100
|
+
{
|
|
101
|
+
pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,
|
|
102
|
+
label: 'Email',
|
|
103
|
+
replacement: '[REDACTED_EMAIL]',
|
|
104
|
+
},
|
|
105
|
+
// Phone numbers (PII)
|
|
106
|
+
{
|
|
107
|
+
pattern: /(?:\+?1[-.\s]?)?(?:\(?\d{3}\)?)[-.\s]?\d{3}[-.\s]?\d{4}/g,
|
|
108
|
+
label: 'Phone',
|
|
109
|
+
replacement: '[REDACTED_PHONE]',
|
|
110
|
+
},
|
|
111
|
+
// Social Security Numbers (PII)
|
|
112
|
+
{ pattern: /\b\d{3}-\d{2}-\d{4}\b/g, label: 'SSN', replacement: '[REDACTED_SSN]' },
|
|
113
|
+
// Credit card numbers (PII)
|
|
114
|
+
{ pattern: /\b(?:\d{4}[-\s]?){3}\d{4}\b/g, label: 'Credit Card', replacement: '[REDACTED_CC]' },
|
|
115
|
+
// Database connection strings
|
|
116
|
+
{
|
|
117
|
+
pattern: /mongodb(?:\+srv)?:\/\/[^\s'"]+/g,
|
|
118
|
+
label: 'MongoDB URI',
|
|
119
|
+
replacement: '[REDACTED_DB_URI]',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
pattern: /postgres(?:ql)?:\/\/[^\s'"]+/g,
|
|
123
|
+
label: 'PostgreSQL URI',
|
|
124
|
+
replacement: '[REDACTED_DB_URI]',
|
|
125
|
+
},
|
|
126
|
+
{ pattern: /mysql:\/\/[^\s'"]+/g, label: 'MySQL URI', replacement: '[REDACTED_DB_URI]' },
|
|
127
|
+
{ pattern: /redis:\/\/[^\s'"]+/g, label: 'Redis URI', replacement: '[REDACTED_DB_URI]' },
|
|
128
|
+
// JWT tokens
|
|
129
|
+
{
|
|
130
|
+
pattern: /eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,
|
|
131
|
+
label: 'JWT',
|
|
132
|
+
replacement: '[REDACTED_JWT]',
|
|
133
|
+
},
|
|
134
|
+
// Secret/Key generic
|
|
135
|
+
{
|
|
136
|
+
pattern: /secret\s*[=:]\s*['"]?[a-zA-Z0-9_-]{16,}['"]?/gi,
|
|
137
|
+
label: 'Secret',
|
|
138
|
+
replacement: 'secret=[REDACTED_SECRET]',
|
|
139
|
+
},
|
|
140
|
+
];
|
|
141
|
+
/**
|
|
142
|
+
* High-level topics that are safe to store
|
|
143
|
+
*/
|
|
144
|
+
const SAFE_HIGH_LEVEL_TOPICS = [
|
|
145
|
+
'architecture',
|
|
146
|
+
'design pattern',
|
|
147
|
+
'system design',
|
|
148
|
+
'microservices',
|
|
149
|
+
'api design',
|
|
150
|
+
'database schema',
|
|
151
|
+
'data model',
|
|
152
|
+
'technology stack',
|
|
153
|
+
'framework',
|
|
154
|
+
'library',
|
|
155
|
+
'tool',
|
|
156
|
+
'infrastructure',
|
|
157
|
+
'deployment',
|
|
158
|
+
'ci/cd',
|
|
159
|
+
'pipeline',
|
|
160
|
+
'workflow',
|
|
161
|
+
'process',
|
|
162
|
+
'methodology',
|
|
163
|
+
'best practice',
|
|
164
|
+
'guideline',
|
|
165
|
+
'principle',
|
|
166
|
+
'convention',
|
|
167
|
+
'standard',
|
|
168
|
+
];
|
|
169
|
+
/**
|
|
170
|
+
* Middle-level topics that are generally safe
|
|
171
|
+
*/
|
|
172
|
+
const SAFE_MIDDLE_LEVEL_TOPICS = [
|
|
173
|
+
'configuration',
|
|
174
|
+
'setting',
|
|
175
|
+
'option',
|
|
176
|
+
'parameter',
|
|
177
|
+
'environment',
|
|
178
|
+
'connection pool',
|
|
179
|
+
'cache',
|
|
180
|
+
'timeout',
|
|
181
|
+
'retry',
|
|
182
|
+
'error handling',
|
|
183
|
+
'logging',
|
|
184
|
+
'monitoring',
|
|
185
|
+
'testing',
|
|
186
|
+
'debugging',
|
|
187
|
+
'performance',
|
|
188
|
+
'optimization',
|
|
189
|
+
'scaling',
|
|
190
|
+
'load balancing',
|
|
191
|
+
'rate limiting',
|
|
192
|
+
'authentication',
|
|
193
|
+
'authorization',
|
|
194
|
+
'permission',
|
|
195
|
+
'role',
|
|
196
|
+
'access control',
|
|
197
|
+
];
|
|
198
|
+
/**
|
|
199
|
+
* Sensitive topics that should NOT be stored
|
|
200
|
+
*/
|
|
201
|
+
const SENSITIVE_TOPICS = [
|
|
202
|
+
'credential',
|
|
203
|
+
'password',
|
|
204
|
+
'secret',
|
|
205
|
+
'token',
|
|
206
|
+
'key',
|
|
207
|
+
'certificate',
|
|
208
|
+
'private key',
|
|
209
|
+
'api key',
|
|
210
|
+
'access token',
|
|
211
|
+
'refresh token',
|
|
212
|
+
];
|
|
213
|
+
/**
|
|
214
|
+
* Sanitize content by removing sensitive information
|
|
215
|
+
*/
|
|
216
|
+
function sanitizeContent(content) {
|
|
217
|
+
const redacted = [];
|
|
218
|
+
let sanitized = content;
|
|
219
|
+
for (const { pattern, label, replacement } of SENSITIVE_PATTERNS) {
|
|
220
|
+
const matches = sanitized.match(pattern);
|
|
221
|
+
if (matches && matches.length > 0) {
|
|
222
|
+
redacted.push(...matches.map((m) => `${label}: ${m.substring(0, 20)}...`));
|
|
223
|
+
sanitized = sanitized.replace(pattern, replacement);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return { sanitized, redacted };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Check if content contains sensitive topics
|
|
230
|
+
*/
|
|
231
|
+
function checkSensitiveTopics(content) {
|
|
232
|
+
const found = [];
|
|
233
|
+
const lowerContent = content.toLowerCase();
|
|
234
|
+
for (const topic of SENSITIVE_TOPICS) {
|
|
235
|
+
if (lowerContent.includes(topic)) {
|
|
236
|
+
found.push(topic);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return found;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Validate memory content for safety
|
|
243
|
+
*/
|
|
244
|
+
function validateMemoryContent(content) {
|
|
245
|
+
const warnings = [];
|
|
246
|
+
const errors = [];
|
|
247
|
+
// Check for sensitive patterns
|
|
248
|
+
const { redacted } = sanitizeContent(content);
|
|
249
|
+
if (redacted.length > 0) {
|
|
250
|
+
errors.push(`Found ${redacted.length} sensitive information item(s) that must be removed`);
|
|
251
|
+
}
|
|
252
|
+
// Check for sensitive topics
|
|
253
|
+
const sensitiveTopics = checkSensitiveTopics(content);
|
|
254
|
+
if (sensitiveTopics.length > 0) {
|
|
255
|
+
warnings.push(`Content mentions sensitive topics: ${sensitiveTopics.join(', ')}. Ensure no actual secrets are included.`);
|
|
256
|
+
}
|
|
257
|
+
// Check abstraction level
|
|
258
|
+
const lowerContent = content.toLowerCase();
|
|
259
|
+
const hasHighLevel = SAFE_HIGH_LEVEL_TOPICS.some((t) => lowerContent.includes(t));
|
|
260
|
+
const hasMiddleLevel = SAFE_MIDDLE_LEVEL_TOPICS.some((t) => lowerContent.includes(t));
|
|
261
|
+
if (!hasHighLevel && !hasMiddleLevel) {
|
|
262
|
+
warnings.push('Content may be too specific. Consider documenting at a higher abstraction level.');
|
|
263
|
+
}
|
|
264
|
+
// Check for file paths (potential security risk)
|
|
265
|
+
const filePathPattern = /(?:\/[a-zA-Z0-9._-]+)+\/[a-zA-Z0-9._-]+\.[a-zA-Z0-9]+/g;
|
|
266
|
+
const filePaths = content.match(filePathPattern);
|
|
267
|
+
if (filePaths && filePaths.length > 3) {
|
|
268
|
+
warnings.push('Content contains many file paths. Ensure they are relative and not system-specific.');
|
|
269
|
+
}
|
|
270
|
+
// Check for code snippets with potential secrets
|
|
271
|
+
const codeBlockPattern = /```[\s\S]*?```/g;
|
|
272
|
+
const codeBlocks = content.match(codeBlockPattern);
|
|
273
|
+
if (codeBlocks) {
|
|
274
|
+
for (const block of codeBlocks) {
|
|
275
|
+
const blockLower = block.toLowerCase();
|
|
276
|
+
if (blockLower.includes('password') ||
|
|
277
|
+
blockLower.includes('secret') ||
|
|
278
|
+
blockLower.includes('key')) {
|
|
279
|
+
warnings.push('Code block may contain sensitive variable names. Review before saving.');
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
valid: errors.length === 0,
|
|
285
|
+
warnings,
|
|
286
|
+
errors,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Generate memory file name (slug format)
|
|
291
|
+
*/
|
|
292
|
+
function generateMemorySlug(name) {
|
|
293
|
+
return name
|
|
294
|
+
.toLowerCase()
|
|
295
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
296
|
+
.replace(/^-+|-+$/g, '')
|
|
297
|
+
.slice(0, 60);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Generate memory file content with frontmatter
|
|
301
|
+
* Aligned with memobank design spec:
|
|
302
|
+
* - Filename: <date>-<name>.md
|
|
303
|
+
* - Frontmatter: YAML with required fields
|
|
304
|
+
* - Body: Free-form Markdown
|
|
305
|
+
* - Design Goal: Human-readable, Git-native, Portable
|
|
306
|
+
*/
|
|
307
|
+
function generateMemoryFile(template) {
|
|
308
|
+
const slug = generateMemorySlug(template.name);
|
|
309
|
+
const date = template.created.split('T')[0]; // Extract YYYY-MM-DD from ISO date
|
|
310
|
+
const fileName = `${date}-${slug}.md`;
|
|
311
|
+
// Build frontmatter aligned with memobank spec
|
|
312
|
+
const frontmatterFields = {
|
|
313
|
+
name: slug,
|
|
314
|
+
type: template.type,
|
|
315
|
+
description: template.description,
|
|
316
|
+
tags: template.tags,
|
|
317
|
+
created: date, // Use date-only format for readability
|
|
318
|
+
};
|
|
319
|
+
// Add optional fields
|
|
320
|
+
if (template.updated) {
|
|
321
|
+
frontmatterFields.updated = template.updated.split('T')[0];
|
|
322
|
+
}
|
|
323
|
+
if (template.reviewAfter) {
|
|
324
|
+
frontmatterFields.review_after = template.reviewAfter;
|
|
325
|
+
}
|
|
326
|
+
if (template.confidence) {
|
|
327
|
+
frontmatterFields.confidence = template.confidence;
|
|
328
|
+
}
|
|
329
|
+
// Generate YAML frontmatter manually (no external dependency)
|
|
330
|
+
const frontmatter = '---\n' +
|
|
331
|
+
Object.entries(frontmatterFields)
|
|
332
|
+
.map(([key, value]) => {
|
|
333
|
+
if (Array.isArray(value)) {
|
|
334
|
+
return `${key}: [${value.join(', ')}]`;
|
|
335
|
+
}
|
|
336
|
+
return `${key}: ${value}`;
|
|
337
|
+
})
|
|
338
|
+
.join('\n') +
|
|
339
|
+
'\n---\n\n';
|
|
340
|
+
const content = template.content.trim();
|
|
341
|
+
return {
|
|
342
|
+
fileName,
|
|
343
|
+
content: frontmatter + content,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Get template by type
|
|
348
|
+
* Aligned with memobank design spec directory semantics:
|
|
349
|
+
* - lessons/: Post-mortems, bugs fixed, gotchas
|
|
350
|
+
* - decisions/: ADRs: context, options, decision, consequences
|
|
351
|
+
* - workflows/: Step-by-step runbooks, deploy flows, onboarding
|
|
352
|
+
* - architecture/: System diagrams, component descriptions, data flows
|
|
353
|
+
*/
|
|
354
|
+
function getTemplateByType(type) {
|
|
355
|
+
const templates = {
|
|
356
|
+
lesson: `## Problem
|
|
357
|
+
|
|
358
|
+
[Describe the problem or challenge encountered]
|
|
359
|
+
|
|
360
|
+
## Solution
|
|
361
|
+
|
|
362
|
+
[Describe the solution or approach that worked]
|
|
363
|
+
|
|
364
|
+
## Key Takeaways
|
|
365
|
+
|
|
366
|
+
- [Key insight 1]
|
|
367
|
+
- [Key insight 2]
|
|
368
|
+
- [Key insight 3]
|
|
369
|
+
|
|
370
|
+
## Related
|
|
371
|
+
|
|
372
|
+
- Tags: #topic #technology
|
|
373
|
+
- See also: [related memories or documentation]`,
|
|
374
|
+
decision: `## Context
|
|
375
|
+
|
|
376
|
+
[Describe the situation requiring a decision]
|
|
377
|
+
|
|
378
|
+
## Options Considered
|
|
379
|
+
|
|
380
|
+
1. **[Option A]**
|
|
381
|
+
- Pros: [...]
|
|
382
|
+
- Cons: [...]
|
|
383
|
+
|
|
384
|
+
2. **[Option B]**
|
|
385
|
+
- Pros: [...]
|
|
386
|
+
- Cons: [...]
|
|
387
|
+
|
|
388
|
+
## Decision
|
|
389
|
+
|
|
390
|
+
[State the decision made]
|
|
391
|
+
|
|
392
|
+
## Rationale
|
|
393
|
+
|
|
394
|
+
[Explain why this decision was made]
|
|
395
|
+
|
|
396
|
+
## Consequences
|
|
397
|
+
|
|
398
|
+
[Document expected outcomes and trade-offs]
|
|
399
|
+
|
|
400
|
+
## Review Date
|
|
401
|
+
|
|
402
|
+
[When should this decision be reviewed?]`,
|
|
403
|
+
workflow: `## Purpose
|
|
404
|
+
|
|
405
|
+
[What does this workflow accomplish?]
|
|
406
|
+
|
|
407
|
+
## Prerequisites
|
|
408
|
+
|
|
409
|
+
- [Required setup or dependencies]
|
|
410
|
+
|
|
411
|
+
## Steps
|
|
412
|
+
|
|
413
|
+
1. **[Step 1]** [Description]
|
|
414
|
+
\`\`\`bash
|
|
415
|
+
[command if applicable]
|
|
416
|
+
\`\`\`
|
|
417
|
+
|
|
418
|
+
2. **[Step 2]** [Description]
|
|
419
|
+
|
|
420
|
+
3. **[Step 3]** [Description]
|
|
421
|
+
|
|
422
|
+
## Troubleshooting
|
|
423
|
+
|
|
424
|
+
- **Issue**: [Common problem]
|
|
425
|
+
- **Solution**: [How to fix]
|
|
426
|
+
|
|
427
|
+
## Related
|
|
428
|
+
|
|
429
|
+
- Commands: \`[relevant commands]\`
|
|
430
|
+
- Documentation: [links]`,
|
|
431
|
+
architecture: `## Overview
|
|
432
|
+
|
|
433
|
+
[High-level description of the architecture]
|
|
434
|
+
|
|
435
|
+
## Components
|
|
436
|
+
|
|
437
|
+
### [Component A]
|
|
438
|
+
|
|
439
|
+
- **Purpose**: [What it does]
|
|
440
|
+
- **Technology**: [Tools/frameworks used]
|
|
441
|
+
- **Interfaces**: [How it connects to other components]
|
|
442
|
+
|
|
443
|
+
### [Component B]
|
|
444
|
+
|
|
445
|
+
- **Purpose**: [What it does]
|
|
446
|
+
- **Technology**: [Tools/frameworks used]
|
|
447
|
+
- **Interfaces**: [How it connects to other components]
|
|
448
|
+
|
|
449
|
+
## Data Flow
|
|
450
|
+
|
|
451
|
+
[Describe how data moves through the system]
|
|
452
|
+
|
|
453
|
+
## Design Decisions
|
|
454
|
+
|
|
455
|
+
- **[Decision 1]**: [Rationale]
|
|
456
|
+
- **[Decision 2]**: [Rationale]
|
|
457
|
+
|
|
458
|
+
## Scalability
|
|
459
|
+
|
|
460
|
+
[How the architecture handles growth]
|
|
461
|
+
|
|
462
|
+
## Security
|
|
463
|
+
|
|
464
|
+
[Security considerations and measures]`,
|
|
465
|
+
};
|
|
466
|
+
return templates[type];
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Validate memory abstraction level
|
|
470
|
+
*/
|
|
471
|
+
function checkAbstractionLevel(content) {
|
|
472
|
+
const lowerContent = content.toLowerCase();
|
|
473
|
+
// Check for high-level indicators
|
|
474
|
+
const highLevelCount = SAFE_HIGH_LEVEL_TOPICS.filter((t) => lowerContent.includes(t)).length;
|
|
475
|
+
const middleLevelCount = SAFE_MIDDLE_LEVEL_TOPICS.filter((t) => lowerContent.includes(t)).length;
|
|
476
|
+
// Check for overly specific indicators
|
|
477
|
+
const specificPatterns = [
|
|
478
|
+
/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/, // IP addresses
|
|
479
|
+
/\b[a-f0-9]{32,}\b/, // Hashes/tokens
|
|
480
|
+
/localhost:\d+/, // Localhost with port
|
|
481
|
+
/\/Users\/[a-zA-Z0-9]+/, // User paths
|
|
482
|
+
/\/home\/[a-zA-Z0-9]+/, // Home directories
|
|
483
|
+
];
|
|
484
|
+
const specificCount = specificPatterns.filter((p) => p.test(content)).length;
|
|
485
|
+
if (specificCount >= 2) {
|
|
486
|
+
return 'too-specific';
|
|
487
|
+
}
|
|
488
|
+
if (highLevelCount >= 3) {
|
|
489
|
+
return 'high';
|
|
490
|
+
}
|
|
491
|
+
if (highLevelCount >= 1 || middleLevelCount >= 2) {
|
|
492
|
+
return 'medium';
|
|
493
|
+
}
|
|
494
|
+
return 'low';
|
|
495
|
+
}
|
|
496
|
+
//# sourceMappingURL=memory-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-template.js","sourceRoot":"","sources":["../../src/core/memory-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Noise Filter Module
|
|
3
|
+
* Filters out low-value content before capturing as memory
|
|
4
|
+
* Ported from memory-lancedb-pro
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Check if content is likely noise
|
|
8
|
+
*/
|
|
9
|
+
export declare function isNoise(content: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Check if content has high value indicators
|
|
12
|
+
*/
|
|
13
|
+
export declare function hasHighValueIndicators(content: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Calculate content value score (0-1)
|
|
16
|
+
*/
|
|
17
|
+
export declare function calculateValueScore(content: string): number;
|
|
18
|
+
/**
|
|
19
|
+
* Filter and rank memories by value
|
|
20
|
+
*/
|
|
21
|
+
export interface FilteredMemory {
|
|
22
|
+
content: string;
|
|
23
|
+
score: number;
|
|
24
|
+
reason: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function filterAndRank(memories: Array<{
|
|
27
|
+
content: string;
|
|
28
|
+
name?: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
}>): FilteredMemory[];
|
|
31
|
+
/**
|
|
32
|
+
* Get recommendation for whether to capture
|
|
33
|
+
*/
|
|
34
|
+
export declare function getCaptureRecommendation(score: number): {
|
|
35
|
+
shouldCapture: boolean;
|
|
36
|
+
confidence: 'high' | 'medium' | 'low';
|
|
37
|
+
reason: string;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=noise-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise-filter.d.ts","sourceRoot":"","sources":["../../src/core/noise-filter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0CH;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAgBhD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA2B3D;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACxE,cAAc,EAAE,CAkClB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG;IACvD,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB,CA0BA"}
|