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,49 @@
1
+ /**
2
+ * Merlin Lite Client
3
+ * Provides same interface as MerlinClient but reads from local .merlin/ files
4
+ */
5
+ import type { LiteFileSummary, LiteConventions, LimitCheckResult } from './types.js';
6
+ /** Response format matching MerlinClient */
7
+ export interface LiteContextResponse {
8
+ howTo: string;
9
+ files: {
10
+ files: LiteFileSummary[];
11
+ count: number;
12
+ };
13
+ conventions: LiteConventions;
14
+ }
15
+ export declare class LiteClient {
16
+ private storage;
17
+ constructor(repoRoot: string);
18
+ /** Check if lite mode is available */
19
+ isAvailable(): Promise<boolean>;
20
+ /** Get quickstart guide */
21
+ getQuickstart(): Promise<string>;
22
+ /** Get context for a task - matches MerlinClient.getHowTo */
23
+ getHowTo(task: string): Promise<string>;
24
+ /** Find files relevant to a task */
25
+ private findRelevantFiles;
26
+ /** Get files - matches MerlinClient.getFiles */
27
+ getFiles(options?: {
28
+ layer?: string;
29
+ purpose?: string;
30
+ }): Promise<{
31
+ files: LiteFileSummary[];
32
+ count: number;
33
+ }>;
34
+ /** Get conventions - matches MerlinClient.getConventions */
35
+ getConventions(): Promise<LiteConventions & {
36
+ changeGuides: any[];
37
+ }>;
38
+ /** Search files */
39
+ search(query: string): Promise<string>;
40
+ /** Find files by purpose */
41
+ findFiles(what: string): Promise<string>;
42
+ /** Check limits */
43
+ checkLimits(): Promise<LimitCheckResult>;
44
+ /** Get upgrade message if over limit */
45
+ getUpgradeMessage(): Promise<string | null>;
46
+ /** Export all data for server sync */
47
+ exportForSync(): Promise<any>;
48
+ }
49
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/server/lite/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QAAE,KAAK,EAAE,eAAe,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,WAAW,EAAE,eAAe,CAAC;CAC9B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAc;gBAEjB,QAAQ,EAAE,MAAM;IAI5B,sCAAsC;IAChC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,2BAA2B;IACrB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAQtC,6DAA6D;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuC7C,oCAAoC;IACpC,OAAO,CAAC,iBAAiB;IAmBzB,gDAAgD;IAC1C,QAAQ,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC;QAC1E,KAAK,EAAE,eAAe,EAAE,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAiBF,4DAA4D;IACtD,cAAc,IAAI,OAAO,CAAC,eAAe,GAAG;QAAE,YAAY,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAQ1E,mBAAmB;IACb,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB5C,4BAA4B;IACtB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB9C,mBAAmB;IACb,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAI9C,wCAAwC;IAClC,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqCjD,sCAAsC;IAChC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;CAGpC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Merlin Lite Client
3
+ * Provides same interface as MerlinClient but reads from local .merlin/ files
4
+ */
5
+ import { LiteStorage } from './storage.js';
6
+ export class LiteClient {
7
+ storage;
8
+ constructor(repoRoot) {
9
+ this.storage = new LiteStorage(repoRoot);
10
+ }
11
+ /** Check if lite mode is available */
12
+ async isAvailable() {
13
+ return this.storage.exists();
14
+ }
15
+ /** Get quickstart guide */
16
+ async getQuickstart() {
17
+ const quickstart = await this.storage.readQuickstart();
18
+ if (!quickstart) {
19
+ return 'No quickstart available. Run the Merlin Lite generator first.';
20
+ }
21
+ return quickstart;
22
+ }
23
+ /** Get context for a task - matches MerlinClient.getHowTo */
24
+ async getHowTo(task) {
25
+ // Check cache first
26
+ const cached = await this.storage.readHowTo(task);
27
+ if (cached) {
28
+ return cached.guide;
29
+ }
30
+ // Generate basic how-to from file analysis
31
+ const files = await this.storage.readFiles();
32
+ const relevantFiles = this.findRelevantFiles(files, task);
33
+ let guide = `# How to: ${task}\n\n`;
34
+ if (relevantFiles.length > 0) {
35
+ guide += `## Relevant Files\n\n`;
36
+ for (const file of relevantFiles) {
37
+ guide += `### ${file.path}\n`;
38
+ guide += `- **Purpose:** ${file.purpose}\n`;
39
+ guide += `- **Layer:** ${file.layer}\n`;
40
+ if (file.exports.length > 0) {
41
+ guide += `- **Exports:** ${file.exports.map(e => e.name).join(', ')}\n`;
42
+ }
43
+ guide += '\n';
44
+ }
45
+ }
46
+ else {
47
+ guide += `No directly relevant files found for "${task}".\n`;
48
+ guide += `Try searching with different keywords.\n`;
49
+ }
50
+ // Cache the response
51
+ await this.storage.writeHowTo(task, guide, relevantFiles.map(f => f.path));
52
+ return guide;
53
+ }
54
+ /** Find files relevant to a task */
55
+ findRelevantFiles(files, task) {
56
+ const taskLower = task.toLowerCase();
57
+ const keywords = taskLower.split(/\s+/);
58
+ return files
59
+ .filter(file => {
60
+ const pathLower = file.path.toLowerCase();
61
+ const purposeLower = file.purpose.toLowerCase();
62
+ // Check if any keyword matches
63
+ return keywords.some(kw => pathLower.includes(kw) ||
64
+ purposeLower.includes(kw) ||
65
+ file.exports.some(e => e.name.toLowerCase().includes(kw)));
66
+ })
67
+ .slice(0, 10); // Limit to 10 files
68
+ }
69
+ /** Get files - matches MerlinClient.getFiles */
70
+ async getFiles(options = {}) {
71
+ let files = await this.storage.readFiles();
72
+ if (options.layer) {
73
+ files = files.filter(f => f.layer === options.layer);
74
+ }
75
+ if (options.purpose) {
76
+ files = this.findRelevantFiles(files, options.purpose);
77
+ }
78
+ return {
79
+ files: files.slice(0, 20),
80
+ count: files.length,
81
+ };
82
+ }
83
+ /** Get conventions - matches MerlinClient.getConventions */
84
+ async getConventions() {
85
+ const conventions = await this.storage.readConventions();
86
+ return {
87
+ ...conventions,
88
+ changeGuides: [], // Not supported in lite mode
89
+ };
90
+ }
91
+ /** Search files */
92
+ async search(query) {
93
+ const files = await this.storage.readFiles();
94
+ const results = this.findRelevantFiles(files, query);
95
+ if (results.length === 0) {
96
+ return `No results found for "${query}"`;
97
+ }
98
+ let output = `# Search Results for "${query}"\n\n`;
99
+ output += `Found ${results.length} matching files:\n\n`;
100
+ for (const file of results) {
101
+ output += `- **${file.path}**: ${file.purpose}\n`;
102
+ }
103
+ return output;
104
+ }
105
+ /** Find files by purpose */
106
+ async findFiles(what) {
107
+ const { files } = await this.getFiles({ purpose: what });
108
+ if (files.length === 0) {
109
+ return `No files found matching "${what}"`;
110
+ }
111
+ let output = `# Files for "${what}"\n\n`;
112
+ for (const file of files) {
113
+ output += `## ${file.path}\n`;
114
+ output += `- Purpose: ${file.purpose}\n`;
115
+ output += `- Layer: ${file.layer}\n`;
116
+ if (file.exports.length > 0) {
117
+ output += `- Exports: ${file.exports.map(e => `${e.name} (${e.type})`).join(', ')}\n`;
118
+ }
119
+ output += '\n';
120
+ }
121
+ return output;
122
+ }
123
+ /** Check limits */
124
+ async checkLimits() {
125
+ return this.storage.checkLimits();
126
+ }
127
+ /** Get upgrade message if over limit */
128
+ async getUpgradeMessage() {
129
+ const limits = await this.checkLimits();
130
+ if (limits.isOverLimit) {
131
+ return `
132
+ ⚠️ **Merlin Lite Limit Reached**
133
+
134
+ Your repository has grown beyond Merlin Lite limits:
135
+ - Files: ${limits.fileCount}/${limits.fileLimit} (${limits.percentUsed.files.toFixed(0)}%)
136
+ - Lines: ${limits.lineCount}/${limits.lineLimit} (${limits.percentUsed.lines.toFixed(0)}%)
137
+
138
+ **Upgrade to Merlin Standard** for unlimited analysis:
139
+ - Full codebase indexing
140
+ - Auto-sync on every commit
141
+ - Team collaboration features
142
+ - Priority support
143
+
144
+ → Upgrade at https://merlin.build/pricing
145
+
146
+ For now, Merlin Lite will continue to work with the first ${limits.fileLimit} files.
147
+ `;
148
+ }
149
+ if (limits.percentUsed.files > 80 || limits.percentUsed.lines > 80) {
150
+ return `
151
+ 📊 **Approaching Merlin Lite Limits**
152
+
153
+ - Files: ${limits.fileCount}/${limits.fileLimit} (${limits.percentUsed.files.toFixed(0)}%)
154
+ - Lines: ${limits.lineCount}/${limits.lineLimit} (${limits.percentUsed.lines.toFixed(0)}%)
155
+
156
+ Consider upgrading to Merlin Standard at https://merlin.build/pricing
157
+ `;
158
+ }
159
+ return null;
160
+ }
161
+ /** Export all data for server sync */
162
+ async exportForSync() {
163
+ return this.storage.exportAll();
164
+ }
165
+ }
166
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/server/lite/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
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
+ export interface RepoStats {
7
+ fileCount: number;
8
+ lineCount: number;
9
+ files: string[];
10
+ }
11
+ export interface GeneratorProgress {
12
+ phase: 'scanning' | 'analyzing' | 'generating' | 'complete';
13
+ current: number;
14
+ total: number;
15
+ message: string;
16
+ }
17
+ export declare class LiteGenerator {
18
+ private repoRoot;
19
+ private storage;
20
+ private onProgress?;
21
+ constructor(repoRoot: string, onProgress?: (progress: GeneratorProgress) => void);
22
+ private report;
23
+ /** Check if path should be ignored */
24
+ private shouldIgnore;
25
+ /** Check if file is a code file */
26
+ private isCodeFile;
27
+ /** Scan repository for files and line counts */
28
+ scanRepo(): Promise<RepoStats>;
29
+ /** Analyze a single file and extract metadata */
30
+ private analyzeFile;
31
+ /** Infer the layer/category from file path */
32
+ private inferLayer;
33
+ /** Infer purpose from filename and content */
34
+ private inferPurpose;
35
+ /** Extract exports from file content */
36
+ private extractExports;
37
+ /** Extract dependencies from imports */
38
+ private extractDependencies;
39
+ /** Infer conventions from codebase */
40
+ private inferConventions;
41
+ /** Generate quickstart guide */
42
+ private generateQuickstart;
43
+ /** Generate all context files */
44
+ generate(repoUrl: string, repoName: string): Promise<{
45
+ success: boolean;
46
+ stats: RepoStats;
47
+ limitCheck: {
48
+ isOverLimit: boolean;
49
+ percentUsed: {
50
+ files: number;
51
+ lines: number;
52
+ };
53
+ };
54
+ }>;
55
+ }
56
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/server/lite/generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0CH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAwC;gBAE/C,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI;IAMhF,OAAO,CAAC,MAAM;IAId,sCAAsC;IACtC,OAAO,CAAC,YAAY;IAiBpB,mCAAmC;IACnC,OAAO,CAAC,UAAU;IAKlB,gDAAgD;IAC1C,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;IAgDpC,iDAAiD;YACnC,WAAW;IAgCzB,8CAA8C;IAC9C,OAAO,CAAC,UAAU;IAkClB,8CAA8C;IAC9C,OAAO,CAAC,YAAY;IAoCpB,wCAAwC;IACxC,OAAO,CAAC,cAAc;IAqCtB,wCAAwC;IACxC,OAAO,CAAC,mBAAmB;IAmC3B,sCAAsC;IACtC,OAAO,CAAC,gBAAgB;IA0DxB,gCAAgC;IAChC,OAAO,CAAC,kBAAkB;IA2D1B,iCAAiC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QACzD,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,SAAS,CAAC;QACjB,UAAU,EAAE;YACV,WAAW,EAAE,OAAO,CAAC;YACrB,WAAW,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,CAAC;SAC/C,CAAC;KACH,CAAC;CAqFH"}