create-merlin-brain 2.2.1 → 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.
- package/dist/server/api/client.d.ts +39 -0
- package/dist/server/api/client.d.ts.map +1 -1
- package/dist/server/api/client.js +29 -0
- package/dist/server/api/client.js.map +1 -1
- package/dist/server/lite/client.d.ts +49 -0
- package/dist/server/lite/client.d.ts.map +1 -0
- package/dist/server/lite/client.js +166 -0
- package/dist/server/lite/client.js.map +1 -0
- package/dist/server/lite/generator.d.ts +56 -0
- package/dist/server/lite/generator.d.ts.map +1 -0
- package/dist/server/lite/generator.js +474 -0
- package/dist/server/lite/generator.js.map +1 -0
- package/dist/server/lite/index.d.ts +10 -0
- package/dist/server/lite/index.d.ts.map +1 -0
- package/dist/server/lite/index.js +10 -0
- package/dist/server/lite/index.js.map +1 -0
- package/dist/server/lite/storage.d.ts +42 -0
- package/dist/server/lite/storage.d.ts.map +1 -0
- package/dist/server/lite/storage.js +283 -0
- package/dist/server/lite/storage.js.map +1 -0
- package/dist/server/lite/types.d.ts +122 -0
- package/dist/server/lite/types.d.ts.map +1 -0
- package/dist/server/lite/types.js +40 -0
- package/dist/server/lite/types.js.map +1 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +166 -5
- package/dist/server/server.js.map +1 -1
- package/dist/server/stats.d.ts.map +1 -1
- package/dist/server/stats.js +18 -0
- package/dist/server/stats.js.map +1 -1
- package/dist/server/tools/config-sync.d.ts +13 -0
- package/dist/server/tools/config-sync.d.ts.map +1 -0
- package/dist/server/tools/config-sync.js +414 -0
- package/dist/server/tools/config-sync.js.map +1 -0
- package/dist/server/tools/discoveries.d.ts +10 -0
- package/dist/server/tools/discoveries.d.ts.map +1 -0
- package/dist/server/tools/discoveries.js +248 -0
- package/dist/server/tools/discoveries.js.map +1 -0
- package/dist/server/tools/index.d.ts +1 -0
- package/dist/server/tools/index.d.ts.map +1 -1
- package/dist/server/tools/index.js +1 -0
- package/dist/server/tools/index.js.map +1 -1
- package/dist/server/tools/lite.d.ts +20 -0
- package/dist/server/tools/lite.d.ts.map +1 -0
- package/dist/server/tools/lite.js +374 -0
- package/dist/server/tools/lite.js.map +1 -0
- package/dist/server/tools/types.d.ts +3 -0
- package/dist/server/tools/types.d.ts.map +1 -1
- package/dist/server/version.d.ts +1 -1
- package/dist/server/version.js +1 -1
- package/files/CLAUDE.md +308 -1
- package/files/agents/merlin.md +80 -0
- package/package.json +1 -1
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery Tools
|
|
3
|
+
* MCP tools for teaching Sights what Claude learns through manual exploration
|
|
4
|
+
*
|
|
5
|
+
* When Sights returns low confidence, Claude explores manually and discovers answers.
|
|
6
|
+
* These tools let Claude push that knowledge back so future queries return high confidence.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
export function registerDiscoveryTools(ctx) {
|
|
10
|
+
const { server, client, resolveRepoId } = ctx;
|
|
11
|
+
/**
|
|
12
|
+
* Teach Sights what Claude discovered through manual exploration
|
|
13
|
+
*/
|
|
14
|
+
server.tool('merlin_teach_discovery', `Teach Sights what you discovered through manual exploration.
|
|
15
|
+
|
|
16
|
+
When merlin_get_context returns low confidence and you manually explore (grep, read files, etc.)
|
|
17
|
+
to find the answer, use this tool to save your discovery. Future queries will return your knowledge.
|
|
18
|
+
|
|
19
|
+
Example: After discovering that 61 files reference "erevtov.me" and config.js controls the domain:
|
|
20
|
+
{
|
|
21
|
+
"query": "domain migration SEO",
|
|
22
|
+
"summary": "Domain references in 61 files. config.js has baseUrl which is the source of truth.",
|
|
23
|
+
"relevantFiles": [
|
|
24
|
+
{ "path": "config.js", "reason": "Contains baseUrl - the source of truth for domain" },
|
|
25
|
+
{ "path": "public/.well-known/ai-plugin.json", "reason": "AI agent config with domain references" }
|
|
26
|
+
],
|
|
27
|
+
"patterns": ["Domain hardcoded in 61 files", "baseUrl in config.js is the source of truth"],
|
|
28
|
+
"relatedTopics": ["SEO", "domain", "configuration", "ai-plugin"]
|
|
29
|
+
}`, {
|
|
30
|
+
query: z.string().describe('The original query that had low confidence (what you were looking for)'),
|
|
31
|
+
summary: z.string().describe('Brief summary of what you discovered (1-2 sentences)'),
|
|
32
|
+
relevantFiles: z.array(z.object({
|
|
33
|
+
path: z.string().describe('File path'),
|
|
34
|
+
reason: z.string().describe('Why this file is relevant'),
|
|
35
|
+
})).optional().describe('Key files you found'),
|
|
36
|
+
patterns: z.array(z.string()).optional().describe('Patterns you observed'),
|
|
37
|
+
relatedTopics: z.array(z.string()).optional().describe('Related search terms for fuzzy matching'),
|
|
38
|
+
repoUrl: z.string().optional().describe('GitHub URL of the repository'),
|
|
39
|
+
}, async ({ query, summary, relevantFiles, patterns, relatedTopics, repoUrl }) => {
|
|
40
|
+
try {
|
|
41
|
+
const repoId = await resolveRepoId(repoUrl);
|
|
42
|
+
if (!repoId) {
|
|
43
|
+
return {
|
|
44
|
+
content: [{
|
|
45
|
+
type: 'text',
|
|
46
|
+
text: 'Could not find repository. Select a repo first with merlin_select_repo.',
|
|
47
|
+
}],
|
|
48
|
+
isError: true,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const result = await client.saveDiscovery(repoId, {
|
|
52
|
+
query,
|
|
53
|
+
summary,
|
|
54
|
+
relevantFiles,
|
|
55
|
+
patterns,
|
|
56
|
+
relatedTopics,
|
|
57
|
+
agentId: 'claude',
|
|
58
|
+
});
|
|
59
|
+
if (!result.success) {
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: 'text', text: 'Failed to save discovery.' }],
|
|
62
|
+
isError: true,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const discovery = result.discovery;
|
|
66
|
+
let response = `# Discovery Saved ✓\n\n`;
|
|
67
|
+
response += `**Query:** "${query}"\n`;
|
|
68
|
+
response += `**Summary:** ${summary}\n\n`;
|
|
69
|
+
if (relevantFiles && relevantFiles.length > 0) {
|
|
70
|
+
response += `**Key Files:**\n`;
|
|
71
|
+
relevantFiles.forEach(f => {
|
|
72
|
+
response += `- \`${f.path}\` — ${f.reason}\n`;
|
|
73
|
+
});
|
|
74
|
+
response += '\n';
|
|
75
|
+
}
|
|
76
|
+
if (patterns && patterns.length > 0) {
|
|
77
|
+
response += `**Patterns:** ${patterns.join(', ')}\n\n`;
|
|
78
|
+
}
|
|
79
|
+
response += `**Confidence:** ${discovery.confidence}\n`;
|
|
80
|
+
response += `\n_Next time you or another agent queries "${query}", Sights will return this discovery._`;
|
|
81
|
+
return { content: [{ type: 'text', text: response }] };
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return {
|
|
85
|
+
content: [{
|
|
86
|
+
type: 'text',
|
|
87
|
+
text: `Error saving discovery: ${error instanceof Error ? error.message : 'Unknown'}`,
|
|
88
|
+
}],
|
|
89
|
+
isError: true,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
/**
|
|
94
|
+
* Check if Sights has discoveries for a query before manual exploration
|
|
95
|
+
*/
|
|
96
|
+
server.tool('merlin_check_discovery', `Check if Sights has cached discoveries for a query.
|
|
97
|
+
|
|
98
|
+
Call this before doing expensive manual exploration. If a previous agent already
|
|
99
|
+
discovered the answer, you can use it instead of re-exploring.`, {
|
|
100
|
+
query: z.string().describe('What you want to find'),
|
|
101
|
+
repoUrl: z.string().optional().describe('GitHub URL of the repository'),
|
|
102
|
+
}, async ({ query, repoUrl }) => {
|
|
103
|
+
try {
|
|
104
|
+
const repoId = await resolveRepoId(repoUrl);
|
|
105
|
+
if (!repoId) {
|
|
106
|
+
return {
|
|
107
|
+
content: [{
|
|
108
|
+
type: 'text',
|
|
109
|
+
text: 'Could not find repository. Select a repo first.',
|
|
110
|
+
}],
|
|
111
|
+
isError: true,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const result = await client.matchDiscovery(repoId, query);
|
|
115
|
+
if (!result.found || result.discoveries.length === 0) {
|
|
116
|
+
return {
|
|
117
|
+
content: [{
|
|
118
|
+
type: 'text',
|
|
119
|
+
text: `No discoveries found for "${query}". Manual exploration needed.\n\nAfter you discover the answer, use merlin_teach_discovery to save it.`,
|
|
120
|
+
}],
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const best = result.bestMatch;
|
|
124
|
+
let response = `# Discovery Found ✓\n\n`;
|
|
125
|
+
response += `**Query:** "${query}"\n`;
|
|
126
|
+
response += `**Summary:** ${best.summary}\n\n`;
|
|
127
|
+
const files = best.relevant_files || [];
|
|
128
|
+
if (files.length > 0) {
|
|
129
|
+
response += `**Key Files:**\n`;
|
|
130
|
+
files.forEach((f) => {
|
|
131
|
+
response += `- \`${f.path}\` — ${f.reason}\n`;
|
|
132
|
+
});
|
|
133
|
+
response += '\n';
|
|
134
|
+
}
|
|
135
|
+
const patternsData = best.patterns || [];
|
|
136
|
+
if (patternsData.length > 0) {
|
|
137
|
+
response += `**Patterns:** ${patternsData.join(', ')}\n\n`;
|
|
138
|
+
}
|
|
139
|
+
response += `**Confidence:** ${best.confidence} (used ${best.times_used}x, confirmed ${best.times_confirmed}x)\n`;
|
|
140
|
+
response += `**Discovery ID:** ${best.id}\n`;
|
|
141
|
+
if (result.discoveries.length > 1) {
|
|
142
|
+
response += `\n_${result.discoveries.length - 1} more related discoveries available._`;
|
|
143
|
+
}
|
|
144
|
+
return { content: [{ type: 'text', text: response }] };
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
return {
|
|
148
|
+
content: [{
|
|
149
|
+
type: 'text',
|
|
150
|
+
text: `Error checking discoveries: ${error instanceof Error ? error.message : 'Unknown'}`,
|
|
151
|
+
}],
|
|
152
|
+
isError: true,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
/**
|
|
157
|
+
* Confirm a discovery was helpful (increases confidence)
|
|
158
|
+
*/
|
|
159
|
+
server.tool('merlin_confirm_discovery', `Confirm that a discovery was helpful. Increases its confidence score.
|
|
160
|
+
|
|
161
|
+
Call this when a cached discovery helped you complete your task successfully.`, {
|
|
162
|
+
discoveryId: z.string().describe('ID of the discovery to confirm'),
|
|
163
|
+
repoUrl: z.string().optional().describe('GitHub URL of the repository'),
|
|
164
|
+
}, async ({ discoveryId, repoUrl }) => {
|
|
165
|
+
try {
|
|
166
|
+
const repoId = await resolveRepoId(repoUrl);
|
|
167
|
+
if (!repoId) {
|
|
168
|
+
return {
|
|
169
|
+
content: [{ type: 'text', text: 'Could not find repository.' }],
|
|
170
|
+
isError: true,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
const result = await client.confirmDiscovery(repoId, discoveryId);
|
|
174
|
+
if (!result.success) {
|
|
175
|
+
return {
|
|
176
|
+
content: [{ type: 'text', text: 'Failed to confirm discovery.' }],
|
|
177
|
+
isError: true,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
content: [{
|
|
182
|
+
type: 'text',
|
|
183
|
+
text: `✓ Discovery confirmed. Confidence increased to ${result.discovery?.confidence}.`,
|
|
184
|
+
}],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
return {
|
|
189
|
+
content: [{
|
|
190
|
+
type: 'text',
|
|
191
|
+
text: `Error: ${error instanceof Error ? error.message : 'Unknown'}`,
|
|
192
|
+
}],
|
|
193
|
+
isError: true,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
/**
|
|
198
|
+
* Reject a discovery (decreases confidence)
|
|
199
|
+
*/
|
|
200
|
+
server.tool('merlin_reject_discovery', `Reject a discovery that was wrong or unhelpful. Decreases its confidence score.
|
|
201
|
+
|
|
202
|
+
Call this when a cached discovery was incorrect or led you astray.`, {
|
|
203
|
+
discoveryId: z.string().describe('ID of the discovery to reject'),
|
|
204
|
+
reason: z.string().optional().describe('Why this discovery was wrong'),
|
|
205
|
+
repoUrl: z.string().optional().describe('GitHub URL of the repository'),
|
|
206
|
+
}, async ({ discoveryId, reason, repoUrl }) => {
|
|
207
|
+
try {
|
|
208
|
+
const repoId = await resolveRepoId(repoUrl);
|
|
209
|
+
if (!repoId) {
|
|
210
|
+
return {
|
|
211
|
+
content: [{ type: 'text', text: 'Could not find repository.' }],
|
|
212
|
+
isError: true,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const result = await client.rejectDiscovery(repoId, discoveryId, reason);
|
|
216
|
+
if (!result.success) {
|
|
217
|
+
return {
|
|
218
|
+
content: [{ type: 'text', text: 'Failed to reject discovery.' }],
|
|
219
|
+
isError: true,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
if (result.deleted) {
|
|
223
|
+
return {
|
|
224
|
+
content: [{
|
|
225
|
+
type: 'text',
|
|
226
|
+
text: '✗ Discovery removed (confidence dropped to 0).',
|
|
227
|
+
}],
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
content: [{
|
|
232
|
+
type: 'text',
|
|
233
|
+
text: `✗ Discovery rejected. Confidence decreased to ${result.discovery?.confidence}.`,
|
|
234
|
+
}],
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
return {
|
|
239
|
+
content: [{
|
|
240
|
+
type: 'text',
|
|
241
|
+
text: `Error: ${error instanceof Error ? error.message : 'Unknown'}`,
|
|
242
|
+
}],
|
|
243
|
+
isError: true,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=discoveries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discoveries.js","sourceRoot":"","sources":["../../../src/server/tools/discoveries.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,sBAAsB,CAAC,GAAgB;IACrD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC;IAE9C;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB;;;;;;;;;;;;;;;EAeF,EACE;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;QACpG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;QACpF,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SACzD,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC9C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC1E,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACjG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACxE,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,yEAAyE;yBAChF,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE;gBAChD,KAAK;gBACL,OAAO;gBACP,aAAa;gBACb,QAAQ;gBACR,aAAa;gBACb,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;oBAC9D,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YACnC,IAAI,QAAQ,GAAG,yBAAyB,CAAC;YACzC,QAAQ,IAAI,eAAe,KAAK,KAAK,CAAC;YACtC,QAAQ,IAAI,gBAAgB,OAAO,MAAM,CAAC;YAE1C,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,QAAQ,IAAI,kBAAkB,CAAC;gBAC/B,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACxB,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC;gBAChD,CAAC,CAAC,CAAC;gBACH,QAAQ,IAAI,IAAI,CAAC;YACnB,CAAC;YAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,QAAQ,IAAI,iBAAiB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACzD,CAAC;YAED,QAAQ,IAAI,mBAAmB,SAAS,CAAC,UAAU,IAAI,CAAC;YACxD,QAAQ,IAAI,8CAA8C,KAAK,wCAAwC,CAAC;YAExG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE;qBACtF,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB;;;+DAG2D,EAC3D;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACxE,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,iDAAiD;yBACxD,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAE1D,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrD,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,6BAA6B,KAAK,wGAAwG;yBACjJ,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;YAC9B,IAAI,QAAQ,GAAG,yBAAyB,CAAC;YACzC,QAAQ,IAAI,eAAe,KAAK,KAAK,CAAC;YACtC,QAAQ,IAAI,gBAAgB,IAAI,CAAC,OAAO,MAAM,CAAC;YAE/C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;YACxC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,QAAQ,IAAI,kBAAkB,CAAC;gBAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;oBACvB,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC;gBAChD,CAAC,CAAC,CAAC;gBACH,QAAQ,IAAI,IAAI,CAAC;YACnB,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACzC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,QAAQ,IAAI,iBAAiB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7D,CAAC;YAED,QAAQ,IAAI,mBAAmB,IAAI,CAAC,UAAU,UAAU,IAAI,CAAC,UAAU,gBAAgB,IAAI,CAAC,eAAe,MAAM,CAAC;YAClH,QAAQ,IAAI,qBAAqB,IAAI,CAAC,EAAE,IAAI,CAAC;YAE7C,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,QAAQ,IAAI,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,uCAAuC,CAAC;YACzF,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE;qBAC1F,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B;;8EAE0E,EAC1E;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAClE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACxE,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,CAAC;oBAC/D,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAElE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;oBACjE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,kDAAkD,MAAM,CAAC,SAAS,EAAE,UAAU,GAAG;qBACxF,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE;qBACrE,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB;;mEAE+D,EAC/D;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACjE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACxE,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,CAAC;oBAC/D,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAEzE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;oBAChE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,gDAAgD;yBACvD,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iDAAiD,MAAM,CAAC,SAAS,EAAE,UAAU,GAAG;qBACvF,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE;qBACrE,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -10,4 +10,5 @@ export { registerBehaviorTools } from './behaviors.js';
|
|
|
10
10
|
export { registerVerificationTools } from './verification.js';
|
|
11
11
|
export { registerAdaptiveTools } from './adaptive.js';
|
|
12
12
|
export { registerAgentTools } from './agents.js';
|
|
13
|
+
export { registerDiscoveryTools } from './discoveries.js';
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -9,4 +9,5 @@ export { registerBehaviorTools } from './behaviors.js';
|
|
|
9
9
|
export { registerVerificationTools } from './verification.js';
|
|
10
10
|
export { registerAdaptiveTools } from './adaptive.js';
|
|
11
11
|
export { registerAgentTools } from './agents.js';
|
|
12
|
+
export { registerDiscoveryTools } from './discoveries.js';
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merlin Lite Tools
|
|
3
|
+
* Tools for managing local file-based context with server sync
|
|
4
|
+
*/
|
|
5
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
|
+
import { LiteClient } from '../lite/index.js';
|
|
7
|
+
interface LiteToolsContext {
|
|
8
|
+
server: McpServer;
|
|
9
|
+
getRepoRootPath: () => Promise<string | null>;
|
|
10
|
+
getApiUrl?: () => string;
|
|
11
|
+
getAuthToken?: () => Promise<string | null>;
|
|
12
|
+
}
|
|
13
|
+
/** Check if lite mode is available (has .merlin/ folder) */
|
|
14
|
+
export declare function isLiteModeAvailable(repoRoot: string): Promise<boolean>;
|
|
15
|
+
/** Get lite client if available */
|
|
16
|
+
export declare function getLiteClient(repoRoot: string): Promise<LiteClient | null>;
|
|
17
|
+
/** Register lite mode tools */
|
|
18
|
+
export declare function registerLiteTools(ctx: LiteToolsContext): void;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=lite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lite.d.ts","sourceRoot":"","sources":["../../../src/server/tools/lite.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAA8B,UAAU,EAAwD,MAAM,kBAAkB,CAAC;AAEhI,UAAU,gBAAgB;IACxB,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC7C;AA0CD,4DAA4D;AAC5D,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG5E;AAED,mCAAmC;AACnC,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAMhF;AAED,+BAA+B;AAC/B,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAkY7D"}
|