@enfyra/mcp-server 0.1.14 → 0.1.16
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/index.js +0 -0
- package/dist/lib/extension-search-tools.d.ts +58 -0
- package/dist/lib/extension-search-tools.js +455 -0
- package/dist/lib/extension-search-tools.js.map +1 -0
- package/dist/lib/mcp-instructions.js +2 -1
- package/dist/lib/mcp-instructions.js.map +1 -1
- package/dist/lib/required-knowledge.d.ts +1 -1
- package/dist/lib/required-knowledge.js +21 -2
- package/dist/lib/required-knowledge.js.map +1 -1
- package/dist/lib/runtime-zone-tools.d.ts +219 -0
- package/dist/lib/runtime-zone-tools.js +412 -0
- package/dist/lib/runtime-zone-tools.js.map +1 -0
- package/dist/lib/tool-routing.js +6 -6
- package/dist/lib/tool-routing.js.map +1 -1
- package/dist/mcp-server-entry.js +2 -0
- package/dist/mcp-server-entry.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare function searchExtensions(apiUrl: string, input: any): Promise<{
|
|
2
|
+
action: string;
|
|
3
|
+
query: string;
|
|
4
|
+
path: string;
|
|
5
|
+
type: any;
|
|
6
|
+
searched: {
|
|
7
|
+
extensions: number;
|
|
8
|
+
menus: number;
|
|
9
|
+
includeDisabled: boolean;
|
|
10
|
+
};
|
|
11
|
+
results: any[];
|
|
12
|
+
resultCount: number;
|
|
13
|
+
tokenBudget: {
|
|
14
|
+
estimatedOutputChars: number;
|
|
15
|
+
estimatedOutputTokens: number;
|
|
16
|
+
controls: {
|
|
17
|
+
maxResults: number;
|
|
18
|
+
snippetChars: number;
|
|
19
|
+
maxMatchesPerExtension: number;
|
|
20
|
+
includeSourceArtifact: boolean;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
guidance: string[];
|
|
24
|
+
}>;
|
|
25
|
+
export declare function inspectExtensionLocation(apiUrl: string, input: any): Promise<{
|
|
26
|
+
action: string;
|
|
27
|
+
extension: {
|
|
28
|
+
id: any;
|
|
29
|
+
name: any;
|
|
30
|
+
extensionId: any;
|
|
31
|
+
type: any;
|
|
32
|
+
isEnabled: any;
|
|
33
|
+
version: any;
|
|
34
|
+
updatedAt: any;
|
|
35
|
+
description: any;
|
|
36
|
+
};
|
|
37
|
+
surface: string;
|
|
38
|
+
menu: {
|
|
39
|
+
id: any;
|
|
40
|
+
label: any;
|
|
41
|
+
path: any;
|
|
42
|
+
icon: any;
|
|
43
|
+
sidebarId: any;
|
|
44
|
+
parent: {
|
|
45
|
+
id: any;
|
|
46
|
+
label: any;
|
|
47
|
+
path: any;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
source: {
|
|
51
|
+
tmpFile: string;
|
|
52
|
+
length: number;
|
|
53
|
+
sha256: string;
|
|
54
|
+
preview: string;
|
|
55
|
+
};
|
|
56
|
+
consumers: any[];
|
|
57
|
+
nextSteps: string[];
|
|
58
|
+
}>;
|
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { fetchAPI } from './fetch.js';
|
|
2
|
+
import { writeSourceArtifact } from './source-artifacts.js';
|
|
3
|
+
const STOP_WORDS = new Set([
|
|
4
|
+
'a',
|
|
5
|
+
'an',
|
|
6
|
+
'and',
|
|
7
|
+
'are',
|
|
8
|
+
'as',
|
|
9
|
+
'at',
|
|
10
|
+
'be',
|
|
11
|
+
'but',
|
|
12
|
+
'by',
|
|
13
|
+
'for',
|
|
14
|
+
'from',
|
|
15
|
+
'in',
|
|
16
|
+
'is',
|
|
17
|
+
'it',
|
|
18
|
+
'of',
|
|
19
|
+
'on',
|
|
20
|
+
'or',
|
|
21
|
+
'the',
|
|
22
|
+
'this',
|
|
23
|
+
'to',
|
|
24
|
+
'và',
|
|
25
|
+
'la',
|
|
26
|
+
'là',
|
|
27
|
+
'cua',
|
|
28
|
+
'của',
|
|
29
|
+
'o',
|
|
30
|
+
'ở',
|
|
31
|
+
'cho',
|
|
32
|
+
'nay',
|
|
33
|
+
'này',
|
|
34
|
+
]);
|
|
35
|
+
const EXTENSION_FIELDS = [
|
|
36
|
+
'id',
|
|
37
|
+
'_id',
|
|
38
|
+
'type',
|
|
39
|
+
'name',
|
|
40
|
+
'extensionId',
|
|
41
|
+
'version',
|
|
42
|
+
'isEnabled',
|
|
43
|
+
'isSystem',
|
|
44
|
+
'description',
|
|
45
|
+
'updatedAt',
|
|
46
|
+
'menu.id',
|
|
47
|
+
'menu._id',
|
|
48
|
+
'menu.label',
|
|
49
|
+
'menu.path',
|
|
50
|
+
'menu.icon',
|
|
51
|
+
'menu.sidebar.id',
|
|
52
|
+
'menu.sidebar._id',
|
|
53
|
+
'code',
|
|
54
|
+
].join(',');
|
|
55
|
+
const MENU_FIELDS_WITH_EXTENSION = [
|
|
56
|
+
'id',
|
|
57
|
+
'_id',
|
|
58
|
+
'label',
|
|
59
|
+
'path',
|
|
60
|
+
'icon',
|
|
61
|
+
'type',
|
|
62
|
+
'order',
|
|
63
|
+
'isEnabled',
|
|
64
|
+
'parent.id',
|
|
65
|
+
'parent._id',
|
|
66
|
+
'parent.label',
|
|
67
|
+
'parent.path',
|
|
68
|
+
'sidebar.id',
|
|
69
|
+
'sidebar._id',
|
|
70
|
+
'extension.id',
|
|
71
|
+
'extension._id',
|
|
72
|
+
'extension.type',
|
|
73
|
+
'extension.name',
|
|
74
|
+
'extension.extensionId',
|
|
75
|
+
'extension.version',
|
|
76
|
+
'extension.isEnabled',
|
|
77
|
+
'extension.description',
|
|
78
|
+
'extension.updatedAt',
|
|
79
|
+
].join(',');
|
|
80
|
+
function getId(record) {
|
|
81
|
+
return record?.id ?? record?._id ?? null;
|
|
82
|
+
}
|
|
83
|
+
function unwrapData(result) {
|
|
84
|
+
if (Array.isArray(result?.data))
|
|
85
|
+
return result.data;
|
|
86
|
+
if (Array.isArray(result))
|
|
87
|
+
return result;
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
function normalizeText(value) {
|
|
91
|
+
return String(value ?? '')
|
|
92
|
+
.normalize('NFD')
|
|
93
|
+
.replace(/\p{Diacritic}/gu, '')
|
|
94
|
+
.replace(/\s+/g, ' ')
|
|
95
|
+
.toLowerCase();
|
|
96
|
+
}
|
|
97
|
+
function normalizePath(path) {
|
|
98
|
+
if (!path)
|
|
99
|
+
return '';
|
|
100
|
+
const trimmed = String(path).trim();
|
|
101
|
+
if (!trimmed)
|
|
102
|
+
return '';
|
|
103
|
+
return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
|
|
104
|
+
}
|
|
105
|
+
function filterQuery(filter) {
|
|
106
|
+
return encodeURIComponent(JSON.stringify(filter));
|
|
107
|
+
}
|
|
108
|
+
async function fetchAllExtensions(apiUrl, type) {
|
|
109
|
+
const filter = type ? `&filter=${filterQuery({ type: { _eq: type } })}` : '';
|
|
110
|
+
const result = await fetchAPI(apiUrl, `/enfyra_extension?limit=0&sort=type,name,id&fields=${encodeURIComponent(EXTENSION_FIELDS)}${filter}`);
|
|
111
|
+
return unwrapData(result);
|
|
112
|
+
}
|
|
113
|
+
async function fetchMenusWithExtensions(apiUrl) {
|
|
114
|
+
const result = await fetchAPI(apiUrl, `/enfyra_menu?limit=0&sort=order,label,path,id&fields=${encodeURIComponent(MENU_FIELDS_WITH_EXTENSION)}`);
|
|
115
|
+
return unwrapData(result);
|
|
116
|
+
}
|
|
117
|
+
function menuForExtension(extension, menus) {
|
|
118
|
+
const extensionId = String(getId(extension) ?? '');
|
|
119
|
+
const directMenu = extension.menu;
|
|
120
|
+
if (directMenu)
|
|
121
|
+
return directMenu;
|
|
122
|
+
if (!extensionId)
|
|
123
|
+
return null;
|
|
124
|
+
return menus.find((menu) => String(getId(menu.extension)) === extensionId) ?? null;
|
|
125
|
+
}
|
|
126
|
+
function surfaceFor(extension, menu) {
|
|
127
|
+
const type = extension.type || 'page';
|
|
128
|
+
if (type === 'page')
|
|
129
|
+
return menu?.path ? `page:${menu.path}` : 'page:(menu missing)';
|
|
130
|
+
if (type === 'global')
|
|
131
|
+
return 'global:shell';
|
|
132
|
+
if (type === 'widget')
|
|
133
|
+
return `widget:${getId(extension) ?? extension.name}`;
|
|
134
|
+
return String(type);
|
|
135
|
+
}
|
|
136
|
+
function splitSections(code) {
|
|
137
|
+
const sections = [];
|
|
138
|
+
const patterns = [
|
|
139
|
+
['template', /<template\b[^>]*>[\s\S]*?<\/template>/i],
|
|
140
|
+
['script', /<script\b[^>]*>[\s\S]*?<\/script>/i],
|
|
141
|
+
['style', /<style\b[^>]*>[\s\S]*?<\/style>/i],
|
|
142
|
+
];
|
|
143
|
+
for (const [section, pattern] of patterns) {
|
|
144
|
+
const match = pattern.exec(code);
|
|
145
|
+
if (match?.index !== undefined) {
|
|
146
|
+
sections.push({ section, start: match.index, end: match.index + match[0].length, text: match[0] });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (!sections.length)
|
|
150
|
+
sections.push({ section: 'code', start: 0, end: code.length, text: code });
|
|
151
|
+
return sections;
|
|
152
|
+
}
|
|
153
|
+
function sectionAtOffset(sections, offset) {
|
|
154
|
+
return sections.find((item) => offset >= item.start && offset <= item.end)?.section ?? 'code';
|
|
155
|
+
}
|
|
156
|
+
function lineEntries(code) {
|
|
157
|
+
const lines = code.split('\n');
|
|
158
|
+
let offset = 0;
|
|
159
|
+
return lines.map((line, index) => {
|
|
160
|
+
const entry = { line, lineNumber: index + 1, offset };
|
|
161
|
+
offset += line.length + 1;
|
|
162
|
+
return entry;
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
function compactArtifact(artifact) {
|
|
166
|
+
return {
|
|
167
|
+
tmpFile: artifact.tmpFile,
|
|
168
|
+
length: artifact.length,
|
|
169
|
+
sha256: artifact.sha256,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function metadataMatches(extension, menu, terms, phrase, snippetChars) {
|
|
173
|
+
const fields = [
|
|
174
|
+
['name', extension.name, 45],
|
|
175
|
+
['description', extension.description, 25],
|
|
176
|
+
['type', extension.type, 15],
|
|
177
|
+
['extensionId', extension.extensionId, 25],
|
|
178
|
+
['menu.label', menu?.label, 45],
|
|
179
|
+
['menu.path', menu?.path, 50],
|
|
180
|
+
['menu.icon', menu?.icon, 15],
|
|
181
|
+
];
|
|
182
|
+
const matches = [];
|
|
183
|
+
for (const [field, value, weight] of fields) {
|
|
184
|
+
const text = normalizeText(value);
|
|
185
|
+
if (!text)
|
|
186
|
+
continue;
|
|
187
|
+
const hasPhrase = phrase && text.includes(phrase);
|
|
188
|
+
const termHits = terms.filter((term) => text.includes(term));
|
|
189
|
+
if (!hasPhrase && termHits.length === 0)
|
|
190
|
+
continue;
|
|
191
|
+
matches.push({
|
|
192
|
+
field,
|
|
193
|
+
score: weight + (hasPhrase ? 40 : 0) + termHits.length * 8,
|
|
194
|
+
reason: hasPhrase ? 'metadata phrase match' : `metadata term match: ${termHits.join(', ')}`,
|
|
195
|
+
snippet: String(value ?? '').slice(0, snippetChars),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
return matches;
|
|
199
|
+
}
|
|
200
|
+
function codeMatches(code, terms, phrase, snippetChars, maxPerExtension) {
|
|
201
|
+
if (!code)
|
|
202
|
+
return [];
|
|
203
|
+
const minTermHits = phrase && terms.length >= 3 ? Math.min(2, terms.length) : 1;
|
|
204
|
+
const sections = splitSections(code);
|
|
205
|
+
const candidates = [];
|
|
206
|
+
const entries = lineEntries(code);
|
|
207
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
208
|
+
const windowEntries = entries.slice(index, Math.min(entries.length, index + 3));
|
|
209
|
+
const text = windowEntries.map((entry) => entry.line).join(' ');
|
|
210
|
+
const normalized = normalizeText(text);
|
|
211
|
+
const phraseHit = Boolean(phrase && normalized.includes(phrase));
|
|
212
|
+
const termHits = terms.filter((term) => normalized.includes(term));
|
|
213
|
+
const distinctHits = [...new Set(termHits)];
|
|
214
|
+
if (!phraseHit && distinctHits.length < minTermHits)
|
|
215
|
+
continue;
|
|
216
|
+
const section = sectionAtOffset(sections, entries[index].offset);
|
|
217
|
+
const score = (phraseHit ? 70 : 0)
|
|
218
|
+
+ distinctHits.length * 18
|
|
219
|
+
+ (section === 'template' ? 12 : section === 'script' ? 8 : 0);
|
|
220
|
+
candidates.push({
|
|
221
|
+
field: 'code',
|
|
222
|
+
section,
|
|
223
|
+
line: entries[index].lineNumber,
|
|
224
|
+
score,
|
|
225
|
+
reason: phraseHit ? 'source phrase match' : `source term match: ${distinctHits.join(', ')}`,
|
|
226
|
+
snippet: text.replace(/\s+/g, ' ').trim().slice(0, snippetChars),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return candidates
|
|
230
|
+
.sort((a, b) => b.score - a.score || (a.line ?? 0) - (b.line ?? 0))
|
|
231
|
+
.slice(0, maxPerExtension);
|
|
232
|
+
}
|
|
233
|
+
function summarizeExtension(extension, menu, matches, includeSourceArtifact, exactPathMatch = false) {
|
|
234
|
+
const id = getId(extension);
|
|
235
|
+
const code = typeof extension.code === 'string' ? extension.code : '';
|
|
236
|
+
return {
|
|
237
|
+
id,
|
|
238
|
+
name: extension.name,
|
|
239
|
+
type: extension.type,
|
|
240
|
+
isEnabled: extension.isEnabled,
|
|
241
|
+
version: extension.version,
|
|
242
|
+
updatedAt: extension.updatedAt,
|
|
243
|
+
surface: surfaceFor(extension, menu),
|
|
244
|
+
menu: menu ? {
|
|
245
|
+
id: getId(menu),
|
|
246
|
+
label: menu.label,
|
|
247
|
+
path: menu.path,
|
|
248
|
+
icon: menu.icon,
|
|
249
|
+
sidebarId: getId(menu.sidebar),
|
|
250
|
+
parent: menu.parent ? { id: getId(menu.parent), label: menu.parent.label, path: menu.parent.path } : null,
|
|
251
|
+
} : null,
|
|
252
|
+
exactPathMatch,
|
|
253
|
+
score: matches.reduce((sum, item) => sum + item.score, 0),
|
|
254
|
+
matches: matches
|
|
255
|
+
.sort((a, b) => b.score - a.score)
|
|
256
|
+
.slice(0, 4),
|
|
257
|
+
source: code
|
|
258
|
+
? includeSourceArtifact
|
|
259
|
+
? compactArtifact(writeSourceArtifact({ tableName: 'enfyra_extension', id: id ?? extension.name, fieldName: 'code', source: code }))
|
|
260
|
+
: { length: code.length }
|
|
261
|
+
: null,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
export async function searchExtensions(apiUrl, input) {
|
|
265
|
+
const query = String(input.query ?? '').trim();
|
|
266
|
+
const path = normalizePath(input.path);
|
|
267
|
+
const type = input.type;
|
|
268
|
+
const maxResults = Math.min(Math.max(Number(input.maxResults ?? 4), 1), 25);
|
|
269
|
+
const snippetChars = Math.min(Math.max(Number(input.snippetChars ?? 180), 120), 600);
|
|
270
|
+
const maxMatchesPerExtension = Math.min(Math.max(Number(input.maxMatchesPerExtension ?? 2), 1), 8);
|
|
271
|
+
const includeDisabled = input.includeDisabled !== false;
|
|
272
|
+
const includeSourceArtifact = Boolean(input.includeSourceArtifact);
|
|
273
|
+
if (!query && !path && !type) {
|
|
274
|
+
throw new Error('Provide query, path, or type so extension search stays bounded.');
|
|
275
|
+
}
|
|
276
|
+
const [extensions, menus] = await Promise.all([
|
|
277
|
+
fetchAllExtensions(apiUrl, type),
|
|
278
|
+
fetchMenusWithExtensions(apiUrl),
|
|
279
|
+
]);
|
|
280
|
+
const phrase = normalizeText(query || path);
|
|
281
|
+
const terms = normalizeText([query, path].filter(Boolean).join(' '))
|
|
282
|
+
.split(/[^a-z0-9_./:-]+/i)
|
|
283
|
+
.map((term) => term.trim())
|
|
284
|
+
.filter((term) => term.length >= 2 && !STOP_WORDS.has(term));
|
|
285
|
+
const results = [];
|
|
286
|
+
for (const extension of extensions) {
|
|
287
|
+
if (!includeDisabled && extension.isEnabled === false)
|
|
288
|
+
continue;
|
|
289
|
+
const menu = menuForExtension(extension, menus);
|
|
290
|
+
const exactPathMatch = Boolean(path && extension.type === 'page' && normalizePath(menu?.path) === path);
|
|
291
|
+
if (path && !query && !type && !exactPathMatch)
|
|
292
|
+
continue;
|
|
293
|
+
if (path && query && extension.type === 'page' && normalizePath(menu?.path) !== path)
|
|
294
|
+
continue;
|
|
295
|
+
const matches = [
|
|
296
|
+
...metadataMatches(extension, menu, terms, phrase, snippetChars),
|
|
297
|
+
...codeMatches(String(extension.code ?? ''), terms, phrase, snippetChars, maxMatchesPerExtension),
|
|
298
|
+
];
|
|
299
|
+
if (exactPathMatch) {
|
|
300
|
+
matches.push({
|
|
301
|
+
field: 'menu.path',
|
|
302
|
+
score: 120,
|
|
303
|
+
reason: 'exact page path match',
|
|
304
|
+
snippet: String(menu?.path ?? '').slice(0, snippetChars),
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
if (matches.length > 0 || (type && !query && !path)) {
|
|
308
|
+
results.push(summarizeExtension(extension, menu, matches, includeSourceArtifact, exactPathMatch));
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
results.sort((a, b) => Number(b.exactPathMatch) - Number(a.exactPathMatch) || b.score - a.score || String(a.name).localeCompare(String(b.name)));
|
|
312
|
+
const limited = results.slice(0, maxResults);
|
|
313
|
+
const estimatedOutputChars = JSON.stringify(limited).length;
|
|
314
|
+
return {
|
|
315
|
+
action: 'extensions_searched',
|
|
316
|
+
query: query || null,
|
|
317
|
+
path: path || null,
|
|
318
|
+
type: type || null,
|
|
319
|
+
searched: {
|
|
320
|
+
extensions: extensions.length,
|
|
321
|
+
menus: menus.length,
|
|
322
|
+
includeDisabled,
|
|
323
|
+
},
|
|
324
|
+
results: limited,
|
|
325
|
+
resultCount: results.length,
|
|
326
|
+
tokenBudget: {
|
|
327
|
+
estimatedOutputChars,
|
|
328
|
+
estimatedOutputTokens: Math.ceil(estimatedOutputChars / 4),
|
|
329
|
+
controls: {
|
|
330
|
+
maxResults,
|
|
331
|
+
snippetChars,
|
|
332
|
+
maxMatchesPerExtension,
|
|
333
|
+
includeSourceArtifact,
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
guidance: [
|
|
337
|
+
'Use path when the user points to an admin page route.',
|
|
338
|
+
'Use type=global for shell/menu/account-panel notifications and type=widget for embeddable blocks.',
|
|
339
|
+
'Open the source tmpFile only for the best candidate when snippets are not enough.',
|
|
340
|
+
],
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function escapeRegExp(value) {
|
|
344
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
345
|
+
}
|
|
346
|
+
function hasWidgetConsumerReference(code, widget) {
|
|
347
|
+
const id = getId(widget);
|
|
348
|
+
const names = [widget.name, widget.extensionId].filter(Boolean).map(String);
|
|
349
|
+
const widgetComponentPattern = /<DynamicWidgetComponent\b[^>]*>/gi;
|
|
350
|
+
const tags = code.match(widgetComponentPattern) ?? [];
|
|
351
|
+
for (const tag of tags) {
|
|
352
|
+
if (id != null) {
|
|
353
|
+
const idPattern = new RegExp(`(?:^|\\s)(?::id|id)\\s*=\\s*["']?${escapeRegExp(String(id))}(?:["'\\s>]|$)`, 'i');
|
|
354
|
+
if (idPattern.test(tag))
|
|
355
|
+
return `DynamicWidgetComponent id ${id}`;
|
|
356
|
+
}
|
|
357
|
+
for (const name of names) {
|
|
358
|
+
const namePattern = new RegExp(`(?:^|\\s)(?:name|widget|widget-id|extension-id)\\s*=\\s*["']${escapeRegExp(name)}["']`, 'i');
|
|
359
|
+
if (namePattern.test(tag))
|
|
360
|
+
return `DynamicWidgetComponent reference ${name}`;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
if (id != null) {
|
|
364
|
+
const loaderPattern = new RegExp(`loadWidgetExtension\\(\\s*["']?${escapeRegExp(String(id))}["']?\\s*\\)`, 'i');
|
|
365
|
+
if (loaderPattern.test(code))
|
|
366
|
+
return `loadWidgetExtension(${id})`;
|
|
367
|
+
}
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
export async function inspectExtensionLocation(apiUrl, input) {
|
|
371
|
+
const [extensions, menus] = await Promise.all([
|
|
372
|
+
fetchAllExtensions(apiUrl),
|
|
373
|
+
fetchMenusWithExtensions(apiUrl),
|
|
374
|
+
]);
|
|
375
|
+
const wantedId = input.id == null ? null : String(input.id);
|
|
376
|
+
const wantedName = input.name == null ? null : normalizeText(input.name);
|
|
377
|
+
const wantedPath = normalizePath(input.path);
|
|
378
|
+
let extension = extensions.find((item) => {
|
|
379
|
+
const menu = menuForExtension(item, menus);
|
|
380
|
+
if (wantedId && String(getId(item)) === wantedId)
|
|
381
|
+
return true;
|
|
382
|
+
if (wantedName && normalizeText(item.name) === wantedName)
|
|
383
|
+
return true;
|
|
384
|
+
if (wantedPath && item.type === 'page' && normalizePath(menu?.path) === wantedPath)
|
|
385
|
+
return true;
|
|
386
|
+
return false;
|
|
387
|
+
});
|
|
388
|
+
if (!extension && input.query) {
|
|
389
|
+
const searched = await searchExtensions(apiUrl, { query: input.query, maxResults: 1, includeSourceArtifact: false });
|
|
390
|
+
const first = searched.results[0];
|
|
391
|
+
extension = first ? extensions.find((item) => String(getId(item)) === String(first.id)) : null;
|
|
392
|
+
}
|
|
393
|
+
if (!extension) {
|
|
394
|
+
throw new Error('Extension not found. Provide id, name, path, or a query that matches extension metadata/source.');
|
|
395
|
+
}
|
|
396
|
+
const menu = menuForExtension(extension, menus);
|
|
397
|
+
const id = getId(extension);
|
|
398
|
+
const code = String(extension.code ?? '');
|
|
399
|
+
const consumers = [];
|
|
400
|
+
if (extension.type === 'widget') {
|
|
401
|
+
for (const candidate of extensions) {
|
|
402
|
+
if (String(getId(candidate)) === String(id))
|
|
403
|
+
continue;
|
|
404
|
+
const candidateCode = String(candidate.code ?? '');
|
|
405
|
+
if (!candidateCode)
|
|
406
|
+
continue;
|
|
407
|
+
const hit = hasWidgetConsumerReference(candidateCode, extension);
|
|
408
|
+
if (!hit)
|
|
409
|
+
continue;
|
|
410
|
+
const candidateMenu = menuForExtension(candidate, menus);
|
|
411
|
+
consumers.push({
|
|
412
|
+
id: getId(candidate),
|
|
413
|
+
name: candidate.name,
|
|
414
|
+
type: candidate.type,
|
|
415
|
+
surface: surfaceFor(candidate, candidateMenu),
|
|
416
|
+
menu: candidateMenu ? { id: getId(candidateMenu), label: candidateMenu.label, path: candidateMenu.path } : null,
|
|
417
|
+
reason: hit,
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
const source = code
|
|
422
|
+
? writeSourceArtifact({ tableName: 'enfyra_extension', id: id ?? extension.name, fieldName: 'code', source: code })
|
|
423
|
+
: null;
|
|
424
|
+
return {
|
|
425
|
+
action: 'extension_location_inspected',
|
|
426
|
+
extension: {
|
|
427
|
+
id,
|
|
428
|
+
name: extension.name,
|
|
429
|
+
extensionId: extension.extensionId,
|
|
430
|
+
type: extension.type,
|
|
431
|
+
isEnabled: extension.isEnabled,
|
|
432
|
+
version: extension.version,
|
|
433
|
+
updatedAt: extension.updatedAt,
|
|
434
|
+
description: extension.description,
|
|
435
|
+
},
|
|
436
|
+
surface: surfaceFor(extension, menu),
|
|
437
|
+
menu: menu ? {
|
|
438
|
+
id: getId(menu),
|
|
439
|
+
label: menu.label,
|
|
440
|
+
path: menu.path,
|
|
441
|
+
icon: menu.icon,
|
|
442
|
+
sidebarId: getId(menu.sidebar),
|
|
443
|
+
parent: menu.parent ? { id: getId(menu.parent), label: menu.parent.label, path: menu.parent.path } : null,
|
|
444
|
+
} : null,
|
|
445
|
+
source,
|
|
446
|
+
consumers,
|
|
447
|
+
nextSteps: [
|
|
448
|
+
'Use update_extension_code with this extension id after editing the source.',
|
|
449
|
+
'For page extension bugs, preserve menu.path/menu permission and update only extension code unless navigation itself is wrong.',
|
|
450
|
+
'For widget bugs, inspect consumers before changing the widget contract.',
|
|
451
|
+
'For global extension bugs, look for shell registry calls such as menu notifications, account panel entries, and global listeners.',
|
|
452
|
+
],
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=extension-search-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-search-tools.js","sourceRoot":"","sources":["../../src/lib/extension-search-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,8 @@ export function buildMcpServerInstructions(apiBaseUrl) {
|
|
|
24
24
|
'- For a quick target/base sanity check, call `get_enfyra_api_context`; do not call broad discovery just to confirm which instance this MCP is connected to.',
|
|
25
25
|
'- When the task intent is clear but the right tool path is not, call `discover_enfyra_workflows` with the intent, risk, and optional surface. Use `detail: "plan"` before writes to get firstTools, required acknowledgements, verify tools, and avoidTools.',
|
|
26
26
|
'- Discover before deciding. For architecture/capability questions call `discover_enfyra_system`; for DB/pk/runtime/cache context call `discover_runtime_context`; for filters/deep/sort/relation query shape call `discover_query_capabilities`. Run broad discovery tools sequentially, not in parallel.',
|
|
27
|
-
'- Inspect narrowly. Use `inspect_table`, `inspect_route`,
|
|
27
|
+
'- Inspect narrowly. Use `inspect_table`, `inspect_route`, `inspect_feature`, and DB-backed runtime zone tools for the table/route/feature/surface being changed instead of loading broad metadata.',
|
|
28
|
+
'- For DB-backed runtime artifacts that are not visible in repo search, use the single `search_runtime_zone` tool. Call it with `mode: "search"` first, then call it again with `mode: "inspect"` using `nextInspect.input` before editing. Key zones: `admin_ui` = menu+extensions, `api_runtime` = routes/handlers/hooks/guards, `flow_runtime`, `websocket_runtime`, `graphql_runtime`, `schema_data`, `package_runtime`, `storage_file`, and `auth_security`.',
|
|
28
29
|
'- Load examples only when needed. Use `get_enfyra_examples` by category. Before extension UI, call `get_extension_theme_contract`; call `get_theme_class_reference` for exact eapp/Nuxt UI theme classes.',
|
|
29
30
|
'- For server scripts, call `discover_script_contexts` before writing or reviewing handler/hook/flow/websocket/GraphQL logic.',
|
|
30
31
|
'- Before mutating metadata, schema, routes, permissions, menus, packages, cache state, dynamic code, or extension UI, call `get_enfyra_required_knowledge`, read the global rules, and pass `globalRulesAckKey` into write tools. Dynamic server code also requires `dynamicCodeAckKey`; extension code also requires `extensionAckKey`.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-instructions.js","sourceRoot":"","sources":["../../src/lib/mcp-instructions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,UAAU;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzD,OAAO;QACL,cAAc,EAAE,GAAG,IAAI,UAAU;QACjC,gBAAgB,EAAE,GAAG,IAAI,iBAAiB;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,UAAU;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAE1E,OAAO;QACL,eAAe;QACf,EAAE;QACF,gCAAgC,IAAI,KAAK;QACzC,wBAAwB,cAAc,YAAY,gBAAgB,KAAK;QACvE,EAAE;QACF,eAAe;QACf,6JAA6J;QAC7J,8PAA8P;QAC9P,2SAA2S;QAC3S,
|
|
1
|
+
{"version":3,"file":"mcp-instructions.js","sourceRoot":"","sources":["../../src/lib/mcp-instructions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,UAAU;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzD,OAAO;QACL,cAAc,EAAE,GAAG,IAAI,UAAU;QACjC,gBAAgB,EAAE,GAAG,IAAI,iBAAiB;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,UAAU;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAE1E,OAAO;QACL,eAAe;QACf,EAAE;QACF,gCAAgC,IAAI,KAAK;QACzC,wBAAwB,cAAc,YAAY,gBAAgB,KAAK;QACvE,EAAE;QACF,eAAe;QACf,6JAA6J;QAC7J,8PAA8P;QAC9P,2SAA2S;QAC3S,oMAAoM;QACpM,kcAAkc;QAClc,2MAA2M;QAC3M,8HAA8H;QAC9H,0UAA0U;QAC1U,4SAA4S;QAC5S,iLAAiL;QACjL,gVAAgV;QAChV,oKAAoK;QACpK,+LAA+L;QAC/L,wJAAwJ;QACxJ,EAAE;QACF,oBAAoB;QACpB,4KAA4K;QAC5K,sMAAsM;QACtM,sQAAsQ;QACtQ,6IAA6I;QAC7I,sMAAsM;QACtM,gOAAgO;QAChO,+LAA+L;QAC/L,qKAAqK;QACrK,2NAA2N;QAC3N,gYAAgY;QAChY,mMAAmM;QACnM,6QAA6Q;QAC7Q,iRAAiR;QACjR,6bAA6b;QAC7b,sOAAsO;QACtO,kIAAkI;QAClI,4GAA4G;QAC5G,oPAAoP;QACpP,6RAA6R;QAC7R,yKAAyK;QACzK,yMAAyM;QACzM,EAAE;QACF,6BAA6B;QAC7B,4NAA4N;QAC5N,uMAAuM;QACvM,sMAAsM;QACtM,EAAE;QACF,4BAA4B;QAC5B,6WAA6W;QAC7W,+PAA+P;QAC/P,EAAE;QACF,yBAAyB;QACzB,kNAAkN;QAClN,idAAid;QACjd,6VAA6V;QAC7V,EAAE;QACF,uIAAuI;KACxI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const GLOBAL_RULES_ACK_KEY = "EFYRA::GLOBAL-RULES::UNIQUE-FIELDS-
|
|
1
|
+
export declare const GLOBAL_RULES_ACK_KEY = "EFYRA::GLOBAL-RULES::RUNTIME-ZONES::UNIQUE-FIELDS-INDEXED::20260703C";
|
|
2
2
|
export declare const DYNAMIC_CODE_KNOWLEDGE_ACK_KEY = "EFYRA::SECURE-REPO-CONTRACT::R9x-kelp-42Q::NO-RAW-TRUSTED";
|
|
3
3
|
export declare const EXTENSION_KNOWLEDGE_ACK_KEY = "EFYRA::EXTENSION-THEME-CONTRACT::VIOLET-IS-NOT-A-PLAN::7mQ";
|
|
4
4
|
export declare function globalRulesAckParam(z: any): any;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export const GLOBAL_RULES_ACK_KEY = 'EFYRA::GLOBAL-RULES::UNIQUE-FIELDS-
|
|
1
|
+
export const GLOBAL_RULES_ACK_KEY = 'EFYRA::GLOBAL-RULES::RUNTIME-ZONES::UNIQUE-FIELDS-INDEXED::20260703C';
|
|
2
2
|
export const DYNAMIC_CODE_KNOWLEDGE_ACK_KEY = 'EFYRA::SECURE-REPO-CONTRACT::R9x-kelp-42Q::NO-RAW-TRUSTED';
|
|
3
3
|
export const EXTENSION_KNOWLEDGE_ACK_KEY = 'EFYRA::EXTENSION-THEME-CONTRACT::VIOLET-IS-NOT-A-PLAN::7mQ';
|
|
4
|
-
const REQUIRED_KNOWLEDGE_VERSION = '2026-07-
|
|
4
|
+
const REQUIRED_KNOWLEDGE_VERSION = '2026-07-03.global-rules-v3-runtime-zones';
|
|
5
5
|
export function globalRulesAckParam(z) {
|
|
6
6
|
return z.string().describe('Required global-rules acknowledgement key from get_enfyra_required_knowledge. Call that tool, read the global Enfyra MCP rules, then pass globalRulesAckKey exactly.');
|
|
7
7
|
}
|
|
@@ -64,9 +64,28 @@ export function buildRequiredKnowledgePayload() {
|
|
|
64
64
|
rules: [
|
|
65
65
|
'Inspect live metadata/routes/features before schema, route, permission, extension, flow, or handler changes.',
|
|
66
66
|
'Use narrow inspection tools for the table, route, feature, or script being changed instead of broad discovery after the target is known.',
|
|
67
|
+
'When the thing to find lives in DB-backed runtime state rather than repo files, pick a runtime zone and use search_runtime_zone before raw query_table or broad trace tools.',
|
|
67
68
|
'Read sourceCode, not compiledCode, for editable dynamic scripts.',
|
|
68
69
|
],
|
|
69
70
|
},
|
|
71
|
+
{
|
|
72
|
+
id: 'runtime-zone-locators',
|
|
73
|
+
rules: [
|
|
74
|
+
'Use search_runtime_zone as the single zone search/inspect tool when the user points to a DB-backed artifact but repo search cannot locate it.',
|
|
75
|
+
'Use search_runtime_zone with mode=search first, then call the same tool with mode=inspect using nextInspect.input before editing.',
|
|
76
|
+
'Use search_runtime_zone with zone=admin_ui for menu + extension UI: page extensions, widget extensions, global shell extensions, menu chips, account panel entries, visible buttons, labels, icons, tabs, and blocks.',
|
|
77
|
+
'Use search_runtime_zone with zone=api_runtime for routes, handlers, pre-hooks, post-hooks, guards, guard rules, and route permissions.',
|
|
78
|
+
'Use search_runtime_zone with zone=flow_runtime for flows and flow steps.',
|
|
79
|
+
'Use search_runtime_zone with zone=websocket_runtime for websocket gateways and events.',
|
|
80
|
+
'Use search_runtime_zone with zone=graphql_runtime for GraphQL exposure and resolver source.',
|
|
81
|
+
'Use search_runtime_zone with zone=schema_data for tables, columns, relations, field permissions, and column rules.',
|
|
82
|
+
'Use search_runtime_zone with zone=package_runtime for installed app/server packages.',
|
|
83
|
+
'Use search_runtime_zone with zone=storage_file for storage configs, folders, files, public asset state, and file permissions.',
|
|
84
|
+
'Use search_runtime_zone with zone=auth_security for roles, route permissions, field permissions, guards, OAuth configs, and access surfaces.',
|
|
85
|
+
'After search_runtime_zone mode=search, call search_runtime_zone mode=inspect with the returned nextInspect.input before editing source or metadata.',
|
|
86
|
+
'Use zone-specific write tools after inspection; do not mutate DB-backed runtime artifacts with generic CRUD when a business operation tool exists.',
|
|
87
|
+
],
|
|
88
|
+
},
|
|
70
89
|
{
|
|
71
90
|
id: 'mutations-are-intentional',
|
|
72
91
|
rules: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"required-knowledge.js","sourceRoot":"","sources":["../../src/lib/required-knowledge.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG
|
|
1
|
+
{"version":3,"file":"required-knowledge.js","sourceRoot":"","sources":["../../src/lib/required-knowledge.ts"],"names":[],"mappings":"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"}
|