create-merlin-brain 2.2.2 → 2.3.2

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 (41) hide show
  1. package/dist/server/lite/client.d.ts +49 -0
  2. package/dist/server/lite/client.d.ts.map +1 -0
  3. package/dist/server/lite/client.js +166 -0
  4. package/dist/server/lite/client.js.map +1 -0
  5. package/dist/server/lite/generator.d.ts +56 -0
  6. package/dist/server/lite/generator.d.ts.map +1 -0
  7. package/dist/server/lite/generator.js +474 -0
  8. package/dist/server/lite/generator.js.map +1 -0
  9. package/dist/server/lite/index.d.ts +10 -0
  10. package/dist/server/lite/index.d.ts.map +1 -0
  11. package/dist/server/lite/index.js +10 -0
  12. package/dist/server/lite/index.js.map +1 -0
  13. package/dist/server/lite/storage.d.ts +42 -0
  14. package/dist/server/lite/storage.d.ts.map +1 -0
  15. package/dist/server/lite/storage.js +283 -0
  16. package/dist/server/lite/storage.js.map +1 -0
  17. package/dist/server/lite/types.d.ts +122 -0
  18. package/dist/server/lite/types.d.ts.map +1 -0
  19. package/dist/server/lite/types.js +40 -0
  20. package/dist/server/lite/types.js.map +1 -0
  21. package/dist/server/server.d.ts.map +1 -1
  22. package/dist/server/server.js +157 -5
  23. package/dist/server/server.js.map +1 -1
  24. package/dist/server/stats.d.ts.map +1 -1
  25. package/dist/server/stats.js +18 -0
  26. package/dist/server/stats.js.map +1 -1
  27. package/dist/server/tools/config-sync.d.ts +13 -0
  28. package/dist/server/tools/config-sync.d.ts.map +1 -0
  29. package/dist/server/tools/config-sync.js +414 -0
  30. package/dist/server/tools/config-sync.js.map +1 -0
  31. package/dist/server/tools/lite.d.ts +20 -0
  32. package/dist/server/tools/lite.d.ts.map +1 -0
  33. package/dist/server/tools/lite.js +374 -0
  34. package/dist/server/tools/lite.js.map +1 -0
  35. package/dist/server/tools/types.d.ts +3 -0
  36. package/dist/server/tools/types.d.ts.map +1 -1
  37. package/dist/server/version.d.ts +1 -1
  38. package/dist/server/version.js +1 -1
  39. package/files/CLAUDE.md +267 -0
  40. package/files/agents/merlin.md +80 -0
  41. package/package.json +1 -1
@@ -0,0 +1,474 @@
1
+ /**
2
+ * Merlin Lite Context Generator
3
+ * Generates context files by analyzing the codebase
4
+ * Uses local file scanning (no Claude tokens for initial analysis)
5
+ */
6
+ import * as fs from 'fs/promises';
7
+ import * as path from 'path';
8
+ import { LiteStorage } from './storage.js';
9
+ /** Files/directories to ignore during analysis */
10
+ const IGNORE_PATTERNS = [
11
+ 'node_modules',
12
+ '.git',
13
+ '.merlin',
14
+ 'dist',
15
+ 'build',
16
+ '.next',
17
+ 'coverage',
18
+ '__pycache__',
19
+ '.venv',
20
+ 'venv',
21
+ '.env',
22
+ '.DS_Store',
23
+ '*.log',
24
+ '*.lock',
25
+ 'package-lock.json',
26
+ 'pnpm-lock.yaml',
27
+ 'yarn.lock',
28
+ ];
29
+ /** Code file extensions */
30
+ const CODE_EXTENSIONS = [
31
+ '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
32
+ '.py', '.rb', '.go', '.rs', '.java', '.kt',
33
+ '.swift', '.c', '.cpp', '.h', '.hpp',
34
+ '.cs', '.php', '.vue', '.svelte',
35
+ ];
36
+ /** Config/doc extensions */
37
+ const CONFIG_EXTENSIONS = [
38
+ '.json', '.yaml', '.yml', '.toml', '.md', '.mdx',
39
+ ];
40
+ export class LiteGenerator {
41
+ repoRoot;
42
+ storage;
43
+ onProgress;
44
+ constructor(repoRoot, onProgress) {
45
+ this.repoRoot = repoRoot;
46
+ this.storage = new LiteStorage(repoRoot);
47
+ this.onProgress = onProgress;
48
+ }
49
+ report(progress) {
50
+ this.onProgress?.(progress);
51
+ }
52
+ /** Check if path should be ignored */
53
+ shouldIgnore(filePath) {
54
+ const relativePath = path.relative(this.repoRoot, filePath);
55
+ const parts = relativePath.split(path.sep);
56
+ for (const pattern of IGNORE_PATTERNS) {
57
+ if (pattern.startsWith('*')) {
58
+ // Glob pattern like *.log
59
+ const ext = pattern.slice(1);
60
+ if (filePath.endsWith(ext))
61
+ return true;
62
+ }
63
+ else {
64
+ // Directory or file name
65
+ if (parts.includes(pattern))
66
+ return true;
67
+ }
68
+ }
69
+ return false;
70
+ }
71
+ /** Check if file is a code file */
72
+ isCodeFile(filePath) {
73
+ const ext = path.extname(filePath).toLowerCase();
74
+ return CODE_EXTENSIONS.includes(ext) || CONFIG_EXTENSIONS.includes(ext);
75
+ }
76
+ /** Scan repository for files and line counts */
77
+ async scanRepo() {
78
+ this.report({ phase: 'scanning', current: 0, total: 0, message: 'Scanning repository...' });
79
+ const files = [];
80
+ let lineCount = 0;
81
+ const scan = async (dir) => {
82
+ if (this.shouldIgnore(dir))
83
+ return;
84
+ try {
85
+ const entries = await fs.readdir(dir, { withFileTypes: true });
86
+ for (const entry of entries) {
87
+ const fullPath = path.join(dir, entry.name);
88
+ if (this.shouldIgnore(fullPath))
89
+ continue;
90
+ if (entry.isDirectory()) {
91
+ await scan(fullPath);
92
+ }
93
+ else if (entry.isFile() && this.isCodeFile(fullPath)) {
94
+ files.push(path.relative(this.repoRoot, fullPath));
95
+ // Count lines
96
+ try {
97
+ const content = await fs.readFile(fullPath, 'utf-8');
98
+ lineCount += content.split('\n').length;
99
+ }
100
+ catch {
101
+ // Skip files we can't read
102
+ }
103
+ }
104
+ }
105
+ }
106
+ catch {
107
+ // Skip directories we can't read
108
+ }
109
+ };
110
+ await scan(this.repoRoot);
111
+ this.report({
112
+ phase: 'scanning',
113
+ current: files.length,
114
+ total: files.length,
115
+ message: `Found ${files.length} files, ${lineCount} lines`,
116
+ });
117
+ return { fileCount: files.length, lineCount, files };
118
+ }
119
+ /** Analyze a single file and extract metadata */
120
+ async analyzeFile(relativePath) {
121
+ const fullPath = path.join(this.repoRoot, relativePath);
122
+ try {
123
+ const content = await fs.readFile(fullPath, 'utf-8');
124
+ const ext = path.extname(relativePath).toLowerCase();
125
+ // Determine layer from path
126
+ const layer = this.inferLayer(relativePath);
127
+ // Extract exports (simple regex-based extraction)
128
+ const exports = this.extractExports(content, ext);
129
+ // Infer purpose from filename and path
130
+ const purpose = this.inferPurpose(relativePath, content);
131
+ // Extract dependencies
132
+ const dependencies = this.extractDependencies(content, ext);
133
+ return {
134
+ path: relativePath,
135
+ purpose,
136
+ layer,
137
+ exports,
138
+ dependencies,
139
+ modifyFor: [],
140
+ };
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ }
146
+ /** Infer the layer/category from file path */
147
+ inferLayer(filePath) {
148
+ const lower = filePath.toLowerCase();
149
+ if (lower.includes('/routes/') || lower.includes('/api/') || lower.includes('/pages/api/')) {
150
+ return 'routes';
151
+ }
152
+ if (lower.includes('/services/') || lower.includes('/lib/')) {
153
+ return 'services';
154
+ }
155
+ if (lower.includes('/models/') || lower.includes('/entities/') || lower.includes('/schema')) {
156
+ return 'models';
157
+ }
158
+ if (lower.includes('/components/') || lower.includes('/ui/')) {
159
+ return 'components';
160
+ }
161
+ if (lower.includes('/hooks/')) {
162
+ return 'hooks';
163
+ }
164
+ if (lower.includes('/utils/') || lower.includes('/helpers/')) {
165
+ return 'utils';
166
+ }
167
+ if (lower.includes('/test') || lower.includes('.test.') || lower.includes('.spec.')) {
168
+ return 'tests';
169
+ }
170
+ if (lower.includes('/config') || lower.endsWith('.config.js') || lower.endsWith('.config.ts')) {
171
+ return 'config';
172
+ }
173
+ if (lower.includes('/types/') || lower.endsWith('.d.ts')) {
174
+ return 'types';
175
+ }
176
+ return 'other';
177
+ }
178
+ /** Infer purpose from filename and content */
179
+ inferPurpose(filePath, content) {
180
+ const filename = path.basename(filePath, path.extname(filePath));
181
+ const lower = filename.toLowerCase();
182
+ // Common patterns
183
+ if (lower.includes('auth'))
184
+ return 'Authentication handling';
185
+ if (lower.includes('user'))
186
+ return 'User management';
187
+ if (lower.includes('api'))
188
+ return 'API endpoint definitions';
189
+ if (lower.includes('route'))
190
+ return 'Route definitions';
191
+ if (lower.includes('model'))
192
+ return 'Data model definitions';
193
+ if (lower.includes('service'))
194
+ return 'Business logic service';
195
+ if (lower.includes('util') || lower.includes('helper'))
196
+ return 'Utility functions';
197
+ if (lower.includes('config'))
198
+ return 'Configuration';
199
+ if (lower.includes('test') || lower.includes('spec'))
200
+ return 'Tests';
201
+ if (lower.includes('hook'))
202
+ return 'React hook';
203
+ if (lower.includes('context'))
204
+ return 'React context provider';
205
+ if (lower.includes('store'))
206
+ return 'State management';
207
+ if (lower.includes('middleware'))
208
+ return 'Middleware';
209
+ if (lower.includes('schema'))
210
+ return 'Schema definitions';
211
+ if (lower.includes('migration'))
212
+ return 'Database migration';
213
+ if (lower === 'index')
214
+ return 'Module entry point';
215
+ if (lower === 'main' || lower === 'app')
216
+ return 'Application entry point';
217
+ // Check content for clues
218
+ if (content.includes('export default function') || content.includes('export function')) {
219
+ if (content.includes('Request') && content.includes('Response')) {
220
+ return 'API handler';
221
+ }
222
+ if (content.includes('useState') || content.includes('useEffect')) {
223
+ return 'React component';
224
+ }
225
+ }
226
+ return `${filename} module`;
227
+ }
228
+ /** Extract exports from file content */
229
+ extractExports(content, ext) {
230
+ const exports = [];
231
+ if (['.ts', '.tsx', '.js', '.jsx', '.mjs'].includes(ext)) {
232
+ // Named exports: export function/const/class/interface/type
233
+ const namedExportRegex = /export\s+(async\s+)?(function|const|let|class|interface|type)\s+(\w+)/g;
234
+ let match;
235
+ while ((match = namedExportRegex.exec(content)) !== null) {
236
+ const kind = match[2];
237
+ const name = match[3];
238
+ let type = 'function';
239
+ if (kind === 'class')
240
+ type = 'class';
241
+ else if (kind === 'const' || kind === 'let')
242
+ type = 'constant';
243
+ else if (kind === 'type')
244
+ type = 'type';
245
+ else if (kind === 'interface')
246
+ type = 'interface';
247
+ if (!exports.find(e => e.name === name)) {
248
+ exports.push({ name, type });
249
+ }
250
+ }
251
+ // Default export: export default function/class Name
252
+ const defaultExportRegex = /export\s+default\s+(async\s+)?(function|class)\s+(\w+)/g;
253
+ while ((match = defaultExportRegex.exec(content)) !== null) {
254
+ const kind = match[2];
255
+ const name = match[3];
256
+ const type = kind === 'class' ? 'class' : 'function';
257
+ if (!exports.find(e => e.name === name)) {
258
+ exports.push({ name, type });
259
+ }
260
+ }
261
+ }
262
+ return exports.slice(0, 10); // Limit to 10 exports
263
+ }
264
+ /** Extract dependencies from imports */
265
+ extractDependencies(content, ext) {
266
+ const deps = new Set();
267
+ if (['.ts', '.tsx', '.js', '.jsx', '.mjs'].includes(ext)) {
268
+ // import ... from 'package'
269
+ const importRegex = /import\s+.*?\s+from\s+['"]([^'"]+)['"]/g;
270
+ let match;
271
+ while ((match = importRegex.exec(content)) !== null) {
272
+ const dep = match[1];
273
+ // Only include external packages, not relative imports
274
+ if (!dep.startsWith('.') && !dep.startsWith('/')) {
275
+ // Get package name (handle scoped packages)
276
+ const pkgName = dep.startsWith('@')
277
+ ? dep.split('/').slice(0, 2).join('/')
278
+ : dep.split('/')[0];
279
+ deps.add(pkgName);
280
+ }
281
+ }
282
+ // require('package')
283
+ const requireRegex = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
284
+ while ((match = requireRegex.exec(content)) !== null) {
285
+ const dep = match[1];
286
+ if (!dep.startsWith('.') && !dep.startsWith('/')) {
287
+ const pkgName = dep.startsWith('@')
288
+ ? dep.split('/').slice(0, 2).join('/')
289
+ : dep.split('/')[0];
290
+ deps.add(pkgName);
291
+ }
292
+ }
293
+ }
294
+ return Array.from(deps).slice(0, 20); // Limit to 20 deps
295
+ }
296
+ /** Infer conventions from codebase */
297
+ inferConventions(files) {
298
+ const conventions = [];
299
+ const antiPatterns = [];
300
+ // Detect TypeScript usage
301
+ const tsFiles = files.filter(f => f.path.endsWith('.ts') || f.path.endsWith('.tsx'));
302
+ const jsFiles = files.filter(f => f.path.endsWith('.js') || f.path.endsWith('.jsx'));
303
+ if (tsFiles.length > jsFiles.length) {
304
+ conventions.push({
305
+ category: 'Language',
306
+ rule: 'Use TypeScript for all new files',
307
+ exampleFiles: tsFiles.slice(0, 2).map(f => f.path),
308
+ });
309
+ }
310
+ // Detect folder structure patterns
311
+ const layers = new Set(files.map(f => f.layer));
312
+ if (layers.has('routes') && layers.has('services')) {
313
+ conventions.push({
314
+ category: 'Architecture',
315
+ rule: 'Separate routes from business logic - routes call services',
316
+ exampleFiles: [],
317
+ });
318
+ }
319
+ if (layers.has('components') && layers.has('hooks')) {
320
+ conventions.push({
321
+ category: 'React',
322
+ rule: 'Extract reusable logic into custom hooks',
323
+ exampleFiles: files.filter(f => f.layer === 'hooks').slice(0, 2).map(f => f.path),
324
+ });
325
+ }
326
+ // Detect naming conventions
327
+ const kebabCaseFiles = files.filter(f => /^[a-z0-9-]+\.[a-z]+$/.test(path.basename(f.path)));
328
+ const camelCaseFiles = files.filter(f => /^[a-z][a-zA-Z0-9]*\.[a-z]+$/.test(path.basename(f.path)));
329
+ const pascalCaseFiles = files.filter(f => /^[A-Z][a-zA-Z0-9]*\.[a-z]+$/.test(path.basename(f.path)));
330
+ if (kebabCaseFiles.length > camelCaseFiles.length && kebabCaseFiles.length > pascalCaseFiles.length) {
331
+ conventions.push({
332
+ category: 'Naming',
333
+ rule: 'Use kebab-case for file names',
334
+ example: 'user-service.ts, auth-middleware.ts',
335
+ exampleFiles: kebabCaseFiles.slice(0, 2).map(f => f.path),
336
+ });
337
+ }
338
+ else if (pascalCaseFiles.length > 5) {
339
+ conventions.push({
340
+ category: 'Naming',
341
+ rule: 'Use PascalCase for component files',
342
+ example: 'UserProfile.tsx, AuthProvider.tsx',
343
+ exampleFiles: pascalCaseFiles.slice(0, 2).map(f => f.path),
344
+ });
345
+ }
346
+ return { conventions, antiPatterns };
347
+ }
348
+ /** Generate quickstart guide */
349
+ generateQuickstart(repoName, files, stats) {
350
+ const layers = new Set(files.map(f => f.layer));
351
+ const entryPoints = files.filter(f => f.path.includes('index') ||
352
+ f.path.includes('main') ||
353
+ f.path.includes('app') ||
354
+ f.layer === 'routes');
355
+ let quickstart = `# ${repoName}\n\n`;
356
+ quickstart += `## Overview\n`;
357
+ quickstart += `- **Files:** ${stats.fileCount}\n`;
358
+ quickstart += `- **Lines:** ${stats.lineCount}\n`;
359
+ quickstart += `- **Layers:** ${Array.from(layers).join(', ')}\n\n`;
360
+ quickstart += `## Structure\n`;
361
+ for (const layer of layers) {
362
+ const layerFiles = files.filter(f => f.layer === layer);
363
+ quickstart += `- **${layer}/** (${layerFiles.length} files)\n`;
364
+ }
365
+ quickstart += '\n';
366
+ if (entryPoints.length > 0) {
367
+ quickstart += `## Entry Points\n`;
368
+ for (const ep of entryPoints.slice(0, 5)) {
369
+ quickstart += `- \`${ep.path}\`: ${ep.purpose}\n`;
370
+ }
371
+ quickstart += '\n';
372
+ }
373
+ // Detect tech stack from dependencies
374
+ const allDeps = new Set(files.flatMap(f => f.dependencies));
375
+ const techStack = [];
376
+ if (allDeps.has('react') || allDeps.has('react-dom'))
377
+ techStack.push('React');
378
+ if (allDeps.has('next'))
379
+ techStack.push('Next.js');
380
+ if (allDeps.has('express'))
381
+ techStack.push('Express');
382
+ if (allDeps.has('fastify'))
383
+ techStack.push('Fastify');
384
+ if (allDeps.has('prisma') || allDeps.has('@prisma/client'))
385
+ techStack.push('Prisma');
386
+ if (allDeps.has('mongoose'))
387
+ techStack.push('MongoDB/Mongoose');
388
+ if (allDeps.has('pg') || allDeps.has('postgres'))
389
+ techStack.push('PostgreSQL');
390
+ if (allDeps.has('tailwindcss'))
391
+ techStack.push('Tailwind CSS');
392
+ if (allDeps.has('zod'))
393
+ techStack.push('Zod');
394
+ if (techStack.length > 0) {
395
+ quickstart += `## Tech Stack\n`;
396
+ quickstart += techStack.map(t => `- ${t}`).join('\n');
397
+ quickstart += '\n\n';
398
+ }
399
+ quickstart += `---\n*Generated by Merlin Lite*\n`;
400
+ return quickstart;
401
+ }
402
+ /** Generate all context files */
403
+ async generate(repoUrl, repoName) {
404
+ // Initialize storage
405
+ await this.storage.initialize(repoUrl, repoName);
406
+ // Scan repository
407
+ const stats = await this.scanRepo();
408
+ // Analyze files (limit to 500 for performance, but no pricing limit)
409
+ const MAX_FILES_FOR_ANALYSIS = 500;
410
+ const filesToAnalyze = stats.files.slice(0, MAX_FILES_FOR_ANALYSIS);
411
+ this.report({
412
+ phase: 'analyzing',
413
+ current: 0,
414
+ total: filesToAnalyze.length,
415
+ message: 'Analyzing files...',
416
+ });
417
+ const fileSummaries = [];
418
+ for (let i = 0; i < filesToAnalyze.length; i++) {
419
+ const summary = await this.analyzeFile(filesToAnalyze[i]);
420
+ if (summary) {
421
+ fileSummaries.push(summary);
422
+ }
423
+ if (i % 10 === 0) {
424
+ this.report({
425
+ phase: 'analyzing',
426
+ current: i,
427
+ total: filesToAnalyze.length,
428
+ message: `Analyzing ${filesToAnalyze[i]}...`,
429
+ });
430
+ }
431
+ }
432
+ // Generate context
433
+ this.report({
434
+ phase: 'generating',
435
+ current: 0,
436
+ total: 3,
437
+ message: 'Generating quickstart...',
438
+ });
439
+ const quickstart = this.generateQuickstart(repoName, fileSummaries, stats);
440
+ await this.storage.writeQuickstart(quickstart);
441
+ this.report({
442
+ phase: 'generating',
443
+ current: 1,
444
+ total: 3,
445
+ message: 'Inferring conventions...',
446
+ });
447
+ const conventions = this.inferConventions(fileSummaries);
448
+ await this.storage.writeConventions(conventions);
449
+ this.report({
450
+ phase: 'generating',
451
+ current: 2,
452
+ total: 3,
453
+ message: 'Saving file summaries...',
454
+ });
455
+ await this.storage.writeFiles(fileSummaries);
456
+ // Update stats
457
+ const limitCheck = await this.storage.updateStats(stats.fileCount, stats.lineCount);
458
+ this.report({
459
+ phase: 'complete',
460
+ current: 3,
461
+ total: 3,
462
+ message: `Complete! ${fileSummaries.length} files analyzed.`,
463
+ });
464
+ return {
465
+ success: true,
466
+ stats,
467
+ limitCheck: {
468
+ isOverLimit: limitCheck.isOverLimit,
469
+ percentUsed: limitCheck.percentUsed,
470
+ },
471
+ };
472
+ }
473
+ }
474
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/server/lite/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Merlin Lite
3
+ * Local file-based context for small repos
4
+ */
5
+ export * from './types.js';
6
+ export { LiteStorage } from './storage.js';
7
+ export { LiteGenerator } from './generator.js';
8
+ export { LiteClient } from './client.js';
9
+ export { getTierForLines, getUpgradeRecommendation, PRICING_TIERS } from './types.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/lite/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Merlin Lite
3
+ * Local file-based context for small repos
4
+ */
5
+ export * from './types.js';
6
+ export { LiteStorage } from './storage.js';
7
+ export { LiteGenerator } from './generator.js';
8
+ export { LiteClient } from './client.js';
9
+ export { getTierForLines, getUpgradeRecommendation, PRICING_TIERS } from './types.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/lite/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Merlin Lite Storage
3
+ * Handles reading/writing .merlin/ local files
4
+ */
5
+ import type { LiteManifest, LiteFileSummary, LiteConventions, LiteHowTo, LiteDiscovery, LiteSyncStatus, LimitCheckResult } from './types.js';
6
+ export declare class LiteStorage {
7
+ private basePath;
8
+ private repoRoot;
9
+ constructor(repoRoot: string);
10
+ /** Check if .merlin/ exists */
11
+ exists(): Promise<boolean>;
12
+ /** Initialize .merlin/ directory structure */
13
+ initialize(repoUrl: string, repoName: string): Promise<void>;
14
+ /** Ensure .merlin/ is in .gitignore */
15
+ private ensureGitignore;
16
+ readManifest(): Promise<LiteManifest | null>;
17
+ writeManifest(manifest: LiteManifest): Promise<void>;
18
+ updateStats(fileCount: number, lineCount: number): Promise<LimitCheckResult>;
19
+ readFiles(): Promise<LiteFileSummary[]>;
20
+ writeFiles(files: LiteFileSummary[]): Promise<void>;
21
+ readConventions(): Promise<LiteConventions>;
22
+ writeConventions(conventions: LiteConventions): Promise<void>;
23
+ readQuickstart(): Promise<string | null>;
24
+ writeQuickstart(content: string): Promise<void>;
25
+ private getHowToKey;
26
+ readHowTo(task: string): Promise<LiteHowTo | null>;
27
+ writeHowTo(task: string, guide: string, relevantFiles: string[]): Promise<void>;
28
+ readDiscoveries(): Promise<LiteDiscovery[]>;
29
+ writeDiscoveries(discoveries: LiteDiscovery[]): Promise<void>;
30
+ addDiscovery(discovery: Omit<LiteDiscovery, 'id' | 'createdAt'>): Promise<LiteDiscovery>;
31
+ readSyncStatus(): Promise<LiteSyncStatus>;
32
+ writeSyncStatus(status: LiteSyncStatus): Promise<void>;
33
+ exportAll(): Promise<{
34
+ manifest: LiteManifest | null;
35
+ files: LiteFileSummary[];
36
+ conventions: LiteConventions;
37
+ quickstart: string | null;
38
+ discoveries: LiteDiscovery[];
39
+ }>;
40
+ checkLimits(): Promise<LimitCheckResult>;
41
+ }
42
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/server/lite/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,SAAS,EACT,aAAa,EACb,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAGpB,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAK5B,+BAA+B;IACzB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,8CAA8C;IACxC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwClE,uCAAuC;YACzB,eAAe;IAuBvB,YAAY,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAY5C,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgC5E,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAYvC,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnD,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IAY3C,gBAAgB,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7D,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWxC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD,OAAO,CAAC,WAAW;IAIb,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAqBlD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/E,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAY3C,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7D,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAgBxF,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC;IAYzC,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtD,SAAS,IAAI,OAAO,CAAC;QACzB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;QAC9B,KAAK,EAAE,eAAe,EAAE,CAAC;QACzB,WAAW,EAAE,eAAe,CAAC;QAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,WAAW,EAAE,aAAa,EAAE,CAAC;KAC9B,CAAC;IAgBI,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC;CA6B/C"}