@cl-mcp/core 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/config.d.ts +18 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -0
- package/dist/data/metadata.d.ts +36 -0
- package/dist/data/metadata.d.ts.map +1 -0
- package/dist/data/metadata.js +98 -0
- package/dist/data/metadata.js.map +1 -0
- package/dist/data/paths.d.ts +17 -0
- package/dist/data/paths.d.ts.map +1 -0
- package/dist/data/paths.js +99 -0
- package/dist/data/paths.js.map +1 -0
- package/dist/data/registry.d.ts +48 -0
- package/dist/data/registry.d.ts.map +1 -0
- package/dist/data/registry.js +193 -0
- package/dist/data/registry.js.map +1 -0
- package/dist/data/schema.d.ts +4924 -0
- package/dist/data/schema.d.ts.map +1 -0
- package/dist/data/schema.js +356 -0
- package/dist/data/schema.js.map +1 -0
- package/dist/domain/context.d.ts +11 -0
- package/dist/domain/context.d.ts.map +1 -0
- package/dist/domain/context.js +168 -0
- package/dist/domain/context.js.map +1 -0
- package/dist/domain/formatters.d.ts +64 -0
- package/dist/domain/formatters.d.ts.map +1 -0
- package/dist/domain/formatters.js +607 -0
- package/dist/domain/formatters.js.map +1 -0
- package/dist/domain/resolver.d.ts +19 -0
- package/dist/domain/resolver.d.ts.map +1 -0
- package/dist/domain/resolver.js +146 -0
- package/dist/domain/resolver.js.map +1 -0
- package/dist/domain/search.d.ts +25 -0
- package/dist/domain/search.d.ts.map +1 -0
- package/dist/domain/search.js +177 -0
- package/dist/domain/search.js.map +1 -0
- package/dist/handlers.d.ts +24 -0
- package/dist/handlers.d.ts.map +1 -0
- package/dist/handlers.js +378 -0
- package/dist/handlers.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +44 -0
package/dist/handlers.js
ADDED
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool handlers — the application layer of cl-mcp.
|
|
3
|
+
*
|
|
4
|
+
* Transport-agnostic: every handler is a pure `args → ToolResponse` function
|
|
5
|
+
* with NO dependency on the MCP SDK or any I/O channel. The MCP server
|
|
6
|
+
* (`@cl-mcp/mcp-server`) registers these behind `tools/call`; the CLI
|
|
7
|
+
* (`@cl-mcp/cli`) invokes them directly. Both frontends therefore share one
|
|
8
|
+
* implementation by construction.
|
|
9
|
+
*
|
|
10
|
+
* Multi-library mode: every tool accepts an optional `library` argument, and
|
|
11
|
+
* component names accept a `lib:Name` qualifier. When neither is given, the
|
|
12
|
+
* handler resolves the component across ALL loaded libraries (unambiguous hit
|
|
13
|
+
* wins; ambiguity returns qualified suggestions). Handlers compute
|
|
14
|
+
* synchronously, so switching the active library per request is safe.
|
|
15
|
+
*/
|
|
16
|
+
import { getLibraryConfig } from "./config.js";
|
|
17
|
+
import { componentExists, getAnalyzedEntry, getAvailableComponents, getComponentAnalysis } from "./data/metadata.js";
|
|
18
|
+
import { getLibraryNames, isMultiLibrary, resolveLibraryQualifier, withLibrary } from "./data/registry.js";
|
|
19
|
+
import { formatQuickContextForLLM, getQuickContext } from "./domain/context.js";
|
|
20
|
+
import { errorResponse, handleComponentApi, handleComponentExamples, handleComponentFull, handleComponentListing, handleComponentSearch, handleComponentTypes, jsonResponse, requireComponent, textResponse, } from "./domain/formatters.js";
|
|
21
|
+
import { resolveComponentName } from "./domain/resolver.js";
|
|
22
|
+
import { JsxValidator, TemplateValidator, formatValidationResult } from "./types.js";
|
|
23
|
+
const MAX_TEMPLATE_LENGTH = 100_000;
|
|
24
|
+
// ── Library targeting helpers ─────────────────────────────────────
|
|
25
|
+
/** Resolve the optional `library` argument. */
|
|
26
|
+
function resolveLibraryArg(args) {
|
|
27
|
+
const raw = args.library;
|
|
28
|
+
if (raw === undefined || raw === null || raw === "")
|
|
29
|
+
return {};
|
|
30
|
+
if (typeof raw !== "string")
|
|
31
|
+
return { error: errorResponse("Error: library must be a string.") };
|
|
32
|
+
const resolved = resolveLibraryQualifier(raw);
|
|
33
|
+
if (!resolved) {
|
|
34
|
+
return { error: errorResponse(`Error: unknown library "${raw}". Available: ${getLibraryNames().join(", ")}`) };
|
|
35
|
+
}
|
|
36
|
+
return { library: resolved };
|
|
37
|
+
}
|
|
38
|
+
/** Split a `lib:Name` qualifier. Returns null library when unqualified. */
|
|
39
|
+
function splitQualifiedName(name) {
|
|
40
|
+
const idx = name.indexOf(":");
|
|
41
|
+
if (idx === -1)
|
|
42
|
+
return { library: null, componentName: name };
|
|
43
|
+
const qualifier = name.slice(0, idx).trim();
|
|
44
|
+
const rest = name.slice(idx + 1).trim();
|
|
45
|
+
const resolved = resolveLibraryQualifier(qualifier);
|
|
46
|
+
if (!resolved) {
|
|
47
|
+
return {
|
|
48
|
+
library: null,
|
|
49
|
+
componentName: rest,
|
|
50
|
+
error: errorResponse(`Error: unknown library qualifier "${qualifier}" in "${name}". Available: ${getLibraryNames().join(", ")}`),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return { library: resolved, componentName: rest };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve a (possibly qualified) component name to a concrete library +
|
|
57
|
+
* component. Explicit qualifier/argument wins; otherwise every library is
|
|
58
|
+
* tried and exactly one hit is required.
|
|
59
|
+
*/
|
|
60
|
+
function resolveComponentTarget(rawName, libraryArg) {
|
|
61
|
+
const split = splitQualifiedName(rawName);
|
|
62
|
+
if (split.error)
|
|
63
|
+
return { error: split.error };
|
|
64
|
+
const explicitLibrary = split.library ?? libraryArg;
|
|
65
|
+
if (explicitLibrary) {
|
|
66
|
+
return withLibrary(explicitLibrary, () => {
|
|
67
|
+
const result = requireComponent(split.componentName);
|
|
68
|
+
if ("error" in result)
|
|
69
|
+
return { error: result.error };
|
|
70
|
+
return {
|
|
71
|
+
target: { library: explicitLibrary, resolved: result.resolved, matchedSelector: result.matchedSelector },
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const hits = [];
|
|
76
|
+
const suggestionPool = [];
|
|
77
|
+
for (const lib of getLibraryNames()) {
|
|
78
|
+
withLibrary(lib, () => {
|
|
79
|
+
const result = resolveComponentName(split.componentName);
|
|
80
|
+
if ("resolved" in result) {
|
|
81
|
+
hits.push({ library: lib, resolved: result.resolved, matchedSelector: result.matchedSelector });
|
|
82
|
+
}
|
|
83
|
+
else if ("suggestions" in result) {
|
|
84
|
+
suggestionPool.push(...result.suggestions.map((s) => `${lib}:${s}`));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (hits.length === 1)
|
|
89
|
+
return { target: hits[0] };
|
|
90
|
+
if (hits.length > 1) {
|
|
91
|
+
const qualified = hits.map((h) => `${h.library}:${h.resolved}`);
|
|
92
|
+
return {
|
|
93
|
+
error: errorResponse(`Error: "${split.componentName}" matches components in multiple libraries: ${qualified.join(", ")}. ` +
|
|
94
|
+
`Qualify the name (e.g. "${qualified[0]}") or pass the "library" argument.`),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (suggestionPool.length > 0) {
|
|
98
|
+
return {
|
|
99
|
+
error: errorResponse(`Component "${split.componentName}" not found. Did you mean: ${suggestionPool.join(", ")}?`),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
error: errorResponse(`Component "${split.componentName}" not found in any library (${getLibraryNames().join(", ")}).`),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/** Header line naming the library — only added in multi-library mode. */
|
|
107
|
+
function libraryHeader(library) {
|
|
108
|
+
return isMultiLibrary() ? `**Library:** \`${library}\`\n\n` : "";
|
|
109
|
+
}
|
|
110
|
+
// ── Detail-level dispatch ─────────────────────────────────────────
|
|
111
|
+
function formatByDetailLevel(level, resolvedName, matchedSelector) {
|
|
112
|
+
switch (level) {
|
|
113
|
+
case "api":
|
|
114
|
+
return handleComponentApi(resolvedName, matchedSelector);
|
|
115
|
+
case "full":
|
|
116
|
+
return handleComponentFull(resolvedName);
|
|
117
|
+
case "examples":
|
|
118
|
+
return handleComponentExamples(resolvedName);
|
|
119
|
+
case "types":
|
|
120
|
+
return handleComponentTypes(resolvedName, matchedSelector);
|
|
121
|
+
default:
|
|
122
|
+
return errorResponse(`Unknown detail_level: "${level}". Use: api, full, examples, types.`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function formatTarget(level, target) {
|
|
126
|
+
return withLibrary(target.library, () => {
|
|
127
|
+
const response = formatByDetailLevel(level, target.resolved, target.matchedSelector);
|
|
128
|
+
if (response.isError)
|
|
129
|
+
return response;
|
|
130
|
+
return {
|
|
131
|
+
...response,
|
|
132
|
+
content: [{ type: "text", text: libraryHeader(target.library) + response.content[0].text }],
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// ── Tool handlers ──────────────────────────────────────────────────
|
|
137
|
+
function handleLibraryOverview(args) {
|
|
138
|
+
const { format } = args;
|
|
139
|
+
const libArg = resolveLibraryArg(args);
|
|
140
|
+
if (libArg.error)
|
|
141
|
+
return libArg.error;
|
|
142
|
+
const targets = libArg.library ? [libArg.library] : getLibraryNames();
|
|
143
|
+
if (format === "json") {
|
|
144
|
+
if (targets.length === 1)
|
|
145
|
+
return withLibrary(targets[0], () => jsonResponse(getQuickContext()));
|
|
146
|
+
const combined = {};
|
|
147
|
+
for (const lib of targets) {
|
|
148
|
+
combined[lib] = withLibrary(lib, () => getQuickContext());
|
|
149
|
+
}
|
|
150
|
+
return jsonResponse({ libraries: combined });
|
|
151
|
+
}
|
|
152
|
+
if (targets.length === 1)
|
|
153
|
+
return withLibrary(targets[0], () => textResponse(formatQuickContextForLLM()));
|
|
154
|
+
const sections = [
|
|
155
|
+
`# Component Libraries (${targets.length})\n\n${targets
|
|
156
|
+
.map((lib) => withLibrary(lib, () => `- \`${lib}\` — ${getLibraryConfig().packageName} (${getLibraryConfig().framework ?? "angular"})`))
|
|
157
|
+
.join("\n")}\n\nQualify component names as \`<library>:<component>\` or pass the \`library\` argument to scope any tool.`,
|
|
158
|
+
...targets.map((lib) => withLibrary(lib, () => `# Library: ${lib}\n\n${formatQuickContextForLLM()}`)),
|
|
159
|
+
];
|
|
160
|
+
return textResponse(sections.join("\n\n---\n\n"));
|
|
161
|
+
}
|
|
162
|
+
function handleFindComponents(args) {
|
|
163
|
+
const { query, list_all } = args;
|
|
164
|
+
const libArg = resolveLibraryArg(args);
|
|
165
|
+
if (libArg.error)
|
|
166
|
+
return libArg.error;
|
|
167
|
+
const targets = libArg.library ? [libArg.library] : getLibraryNames();
|
|
168
|
+
if (targets.length === 1) {
|
|
169
|
+
return withLibrary(targets[0], () => {
|
|
170
|
+
const components = getAvailableComponents();
|
|
171
|
+
if (query)
|
|
172
|
+
return handleComponentSearch(query, components);
|
|
173
|
+
return handleComponentListing(components, list_all);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
const sections = targets.map((lib) => withLibrary(lib, () => {
|
|
177
|
+
const components = getAvailableComponents();
|
|
178
|
+
const response = query ? handleComponentSearch(query, components) : handleComponentListing(components, list_all);
|
|
179
|
+
return `# Library: ${lib}\n\n${response.content[0].text}`;
|
|
180
|
+
}));
|
|
181
|
+
return textResponse(sections.join("\n\n---\n\n"));
|
|
182
|
+
}
|
|
183
|
+
function handleGetComponent(args) {
|
|
184
|
+
const { componentName, detail_level } = args;
|
|
185
|
+
if (!componentName || typeof componentName !== "string") {
|
|
186
|
+
return errorResponse("Error: componentName is required and must be a string.");
|
|
187
|
+
}
|
|
188
|
+
const libArg = resolveLibraryArg(args);
|
|
189
|
+
if (libArg.error)
|
|
190
|
+
return libArg.error;
|
|
191
|
+
const { target, error } = resolveComponentTarget(componentName, libArg.library);
|
|
192
|
+
if (error || !target)
|
|
193
|
+
return error ?? errorResponse("Component resolution failed.");
|
|
194
|
+
try {
|
|
195
|
+
return formatTarget(detail_level || "api", target);
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
return errorResponse(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function handleGetComponentsBatch(args) {
|
|
202
|
+
const { componentNames, detail_level } = args;
|
|
203
|
+
if (!Array.isArray(componentNames) || componentNames.length === 0) {
|
|
204
|
+
return errorResponse("Error: componentNames must be a non-empty array of strings.");
|
|
205
|
+
}
|
|
206
|
+
const libArg = resolveLibraryArg(args);
|
|
207
|
+
if (libArg.error)
|
|
208
|
+
return libArg.error;
|
|
209
|
+
const level = detail_level || "api";
|
|
210
|
+
const sections = [];
|
|
211
|
+
for (const componentName of componentNames) {
|
|
212
|
+
const { target, error } = resolveComponentTarget(componentName, libArg.library);
|
|
213
|
+
if (error || !target) {
|
|
214
|
+
const msg = error?.content[0].text ?? "Component resolution failed.";
|
|
215
|
+
sections.push(`# ${componentName}\n\n**Error:** ${msg}\n`);
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
try {
|
|
219
|
+
const response = formatTarget(level, target);
|
|
220
|
+
sections.push(response.content[0].text);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
sections.push(`# ${componentName}\n\n**Error:** ${err instanceof Error ? err.message : String(err)}\n`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return textResponse(sections.join("\n---\n\n"));
|
|
227
|
+
}
|
|
228
|
+
// ── Validation ─────────────────────────────────────────────────────
|
|
229
|
+
/**
|
|
230
|
+
* Deterministic component-name lookup for validation: exact entry key, else
|
|
231
|
+
* a UNIQUE match after normalizing case and separators ("DialogRoot" ↔
|
|
232
|
+
* "Dialog.Root", "org-input" ↔ "OrgInput"). Deliberately narrower than the
|
|
233
|
+
* full resolver cascade — validation must never silently pick a fuzzy or
|
|
234
|
+
* semantic guess.
|
|
235
|
+
*/
|
|
236
|
+
function resolveValidationComponentName(name) {
|
|
237
|
+
if (componentExists(name))
|
|
238
|
+
return name;
|
|
239
|
+
const normalize = (s) => s.toLowerCase().replace(/[-_.]/g, "");
|
|
240
|
+
const wanted = normalize(name);
|
|
241
|
+
const matches = getAvailableComponents().filter((candidate) => normalize(candidate) === wanted);
|
|
242
|
+
return matches.length === 1 ? matches[0] : null;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Pick the library whose metadata contains ALL of the given component names.
|
|
246
|
+
* Explicit choice wins; otherwise exactly one candidate library must match.
|
|
247
|
+
*/
|
|
248
|
+
function resolveValidationLibrary(componentNames, explicit) {
|
|
249
|
+
if (explicit)
|
|
250
|
+
return { library: explicit };
|
|
251
|
+
const candidates = getLibraryNames().filter((lib) => withLibrary(lib, () => componentNames.every((name) => resolveValidationComponentName(name) !== null)));
|
|
252
|
+
if (candidates.length === 1)
|
|
253
|
+
return { library: candidates[0] };
|
|
254
|
+
if (candidates.length === 0) {
|
|
255
|
+
// Fall back to libraries containing at least one of the names.
|
|
256
|
+
const partial = getLibraryNames().filter((lib) => withLibrary(lib, () => componentNames.some((name) => resolveValidationComponentName(name) !== null)));
|
|
257
|
+
if (partial.length === 1)
|
|
258
|
+
return { library: partial[0] };
|
|
259
|
+
return {
|
|
260
|
+
error: errorResponse(`Error: none of the libraries (${getLibraryNames().join(", ")}) contains the named components. Check the names or pass the "library" argument.`),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
return {
|
|
264
|
+
error: errorResponse(`Error: components exist in multiple libraries (${candidates.join(", ")}). Pass the "library" argument.`),
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
function validateAngularTemplate(template, componentNames) {
|
|
268
|
+
const libConfig = getLibraryConfig();
|
|
269
|
+
const validator = new TemplateValidator({
|
|
270
|
+
selectorPrefix: libConfig.selectorPrefix,
|
|
271
|
+
libraryName: libConfig.name,
|
|
272
|
+
});
|
|
273
|
+
for (const compName of componentNames) {
|
|
274
|
+
const resolved = resolveValidationComponentName(compName);
|
|
275
|
+
if (resolved) {
|
|
276
|
+
const analyses = getComponentAnalysis(resolved);
|
|
277
|
+
validator.registerFromAnalysis(analyses);
|
|
278
|
+
const preloaded = getAnalyzedEntry(resolved);
|
|
279
|
+
if (preloaded?.inheritance) {
|
|
280
|
+
for (const inh of Object.values(preloaded.inheritance)) {
|
|
281
|
+
validator.registerInheritedProperties(inh.inheritedInputs || [], inh.inheritedOutputs || []);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const result = validator.validate(template);
|
|
287
|
+
if (result.errors.length === 0) {
|
|
288
|
+
return jsonResponse({
|
|
289
|
+
valid: true,
|
|
290
|
+
message: "Template is valid. All inputs and outputs exist on the specified components.",
|
|
291
|
+
registeredSelectors: validator.getRegisteredSelectors(),
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
return {
|
|
295
|
+
content: [{ type: "text", text: formatValidationResult(result) }],
|
|
296
|
+
isError: true,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function validateReactUsage(code, componentNames) {
|
|
300
|
+
const validator = new JsxValidator();
|
|
301
|
+
for (const compName of componentNames) {
|
|
302
|
+
const resolved = resolveValidationComponentName(compName);
|
|
303
|
+
if (resolved) {
|
|
304
|
+
validator.registerFromAnalysis(getComponentAnalysis(resolved));
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
const result = validator.validate(code);
|
|
308
|
+
if (result.errors.length === 0) {
|
|
309
|
+
const notes = result.suggestions.length > 0 ? ` Notes: ${result.suggestions.join(" ")}` : "";
|
|
310
|
+
return jsonResponse({
|
|
311
|
+
valid: true,
|
|
312
|
+
message: `JSX usage is valid. All props exist on the specified components.${notes}`,
|
|
313
|
+
registeredComponents: validator.registeredComponents,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
return {
|
|
317
|
+
content: [{ type: "text", text: formatValidationResult(result) }],
|
|
318
|
+
isError: true,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
function checkValidationInput(code, componentNames, codeLabel) {
|
|
322
|
+
if (!code || typeof code !== "string") {
|
|
323
|
+
return errorResponse(`Error: ${codeLabel} parameter is required and must be a string.`);
|
|
324
|
+
}
|
|
325
|
+
if (code.length > MAX_TEMPLATE_LENGTH) {
|
|
326
|
+
return errorResponse(`Error: ${codeLabel} exceeds maximum length of ${MAX_TEMPLATE_LENGTH} characters (got ${code.length}).`);
|
|
327
|
+
}
|
|
328
|
+
if (!Array.isArray(componentNames) || componentNames.length === 0) {
|
|
329
|
+
return errorResponse("Error: componentNames must be a non-empty array of strings.");
|
|
330
|
+
}
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
function handleValidateTemplate(args) {
|
|
334
|
+
const { template, componentNames } = args;
|
|
335
|
+
const inputError = checkValidationInput(template, componentNames, "template");
|
|
336
|
+
if (inputError)
|
|
337
|
+
return inputError;
|
|
338
|
+
const libArg = resolveLibraryArg(args);
|
|
339
|
+
if (libArg.error)
|
|
340
|
+
return libArg.error;
|
|
341
|
+
const { library, error } = resolveValidationLibrary(componentNames, libArg.library);
|
|
342
|
+
if (error || !library)
|
|
343
|
+
return error ?? errorResponse("Library resolution failed.");
|
|
344
|
+
return withLibrary(library, () => {
|
|
345
|
+
if ((getLibraryConfig().framework ?? "angular") === "react") {
|
|
346
|
+
return errorResponse(`Error: library "${library}" is a React library — validate_template checks Angular templates. Use validate_usage instead.`);
|
|
347
|
+
}
|
|
348
|
+
return validateAngularTemplate(template, componentNames);
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
function handleValidateUsage(args) {
|
|
352
|
+
const { code, componentNames } = args;
|
|
353
|
+
const inputError = checkValidationInput(code, componentNames, "code");
|
|
354
|
+
if (inputError)
|
|
355
|
+
return inputError;
|
|
356
|
+
const libArg = resolveLibraryArg(args);
|
|
357
|
+
if (libArg.error)
|
|
358
|
+
return libArg.error;
|
|
359
|
+
const { library, error } = resolveValidationLibrary(componentNames, libArg.library);
|
|
360
|
+
if (error || !library)
|
|
361
|
+
return error ?? errorResponse("Library resolution failed.");
|
|
362
|
+
return withLibrary(library, () => {
|
|
363
|
+
const framework = getLibraryConfig().framework ?? "angular";
|
|
364
|
+
return framework === "react"
|
|
365
|
+
? validateReactUsage(code, componentNames)
|
|
366
|
+
: validateAngularTemplate(code, componentNames);
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
// ── Dispatch table ─────────────────────────────────────────────────
|
|
370
|
+
export const TOOL_HANDLERS = {
|
|
371
|
+
get_library_overview: handleLibraryOverview,
|
|
372
|
+
find_components: handleFindComponents,
|
|
373
|
+
get_component: handleGetComponent,
|
|
374
|
+
get_components_batch: handleGetComponentsBatch,
|
|
375
|
+
validate_template: handleValidateTemplate,
|
|
376
|
+
validate_usage: handleValidateUsage,
|
|
377
|
+
};
|
|
378
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cl-mcp/core
|
|
3
|
+
*
|
|
4
|
+
* Transport-agnostic core of cl-mcp: metadata loading (multi-library
|
|
5
|
+
* registry), the search/resolution domain, and the tool handlers. Both
|
|
6
|
+
* frontends are thin adapters over this package:
|
|
7
|
+
*
|
|
8
|
+
* - `@cl-mcp/mcp-server` — MCP protocol (stdio) adapter
|
|
9
|
+
* - `@cl-mcp/cli` — shell adapter
|
|
10
|
+
*
|
|
11
|
+
* Importing this package has no side effects; call `loadPreloadedMetadata()`
|
|
12
|
+
* before using any accessor or handler.
|
|
13
|
+
*/
|
|
14
|
+
export { METADATA_FILENAME, getLibraryConfig, setLibraryConfig, type LibraryConfig } from "./config.js";
|
|
15
|
+
export { buildImportedByIndex, componentExists, getAnalyzedEntry, getAvailableComponents, getComponentAnalysis, getMetadata, getPreloadedComponentMetadata, loadPreloadedMetadata, } from "./data/metadata.js";
|
|
16
|
+
export { __resetRegistryForTests, __setLibrariesForTests, getActiveLibrary, getLibraryNames, isMultiLibrary, resolveLibraryQualifier, setActiveLibrary, withLibrary, type LoadedLibrary, } from "./data/registry.js";
|
|
17
|
+
export { resolveAllMetadataPaths, resolveMetadataPath } from "./data/paths.js";
|
|
18
|
+
export { ComponentMetadataFileSchema, parseComponentMetadata } from "./data/schema.js";
|
|
19
|
+
export { formatQuickContextForLLM, generateQuickContext, getQuickContext } from "./domain/context.js";
|
|
20
|
+
export { resolveComponentName } from "./domain/resolver.js";
|
|
21
|
+
export { searchComponents, type ComponentSearchMeta, type SearchResult } from "./domain/search.js";
|
|
22
|
+
export { TOOL_HANDLERS, type ToolResponse } from "./handlers.js";
|
|
23
|
+
export type { AnalyzedComponentEntry, AnalyzerDiagnostic, ComponentAnalysis, ComponentMetadataEntry, ComponentMetadataFile, EnhancedComponentMetadataEntry, FileAnalysis, InputProperty, OutputProperty, QuickContext, SelectorQuickInfo, StrictComponentAPI, ValidationResult, } from "./types.js";
|
|
24
|
+
export { JsxValidator, TemplateValidator, formatValidationResult } from "./types.js";
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGxG,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAGvF,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGnG,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAGjE,YAAY,EACV,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cl-mcp/core
|
|
3
|
+
*
|
|
4
|
+
* Transport-agnostic core of cl-mcp: metadata loading (multi-library
|
|
5
|
+
* registry), the search/resolution domain, and the tool handlers. Both
|
|
6
|
+
* frontends are thin adapters over this package:
|
|
7
|
+
*
|
|
8
|
+
* - `@cl-mcp/mcp-server` — MCP protocol (stdio) adapter
|
|
9
|
+
* - `@cl-mcp/cli` — shell adapter
|
|
10
|
+
*
|
|
11
|
+
* Importing this package has no side effects; call `loadPreloadedMetadata()`
|
|
12
|
+
* before using any accessor or handler.
|
|
13
|
+
*/
|
|
14
|
+
// ── Configuration ───────────────────────────────────────────────────
|
|
15
|
+
export { METADATA_FILENAME, getLibraryConfig, setLibraryConfig } from "./config.js";
|
|
16
|
+
// ── Data layer ──────────────────────────────────────────────────────
|
|
17
|
+
export { buildImportedByIndex, componentExists, getAnalyzedEntry, getAvailableComponents, getComponentAnalysis, getMetadata, getPreloadedComponentMetadata, loadPreloadedMetadata, } from "./data/metadata.js";
|
|
18
|
+
export { __resetRegistryForTests, __setLibrariesForTests, getActiveLibrary, getLibraryNames, isMultiLibrary, resolveLibraryQualifier, setActiveLibrary, withLibrary, } from "./data/registry.js";
|
|
19
|
+
export { resolveAllMetadataPaths, resolveMetadataPath } from "./data/paths.js";
|
|
20
|
+
export { ComponentMetadataFileSchema, parseComponentMetadata } from "./data/schema.js";
|
|
21
|
+
// ── Domain layer ────────────────────────────────────────────────────
|
|
22
|
+
export { formatQuickContextForLLM, generateQuickContext, getQuickContext } from "./domain/context.js";
|
|
23
|
+
export { resolveComponentName } from "./domain/resolver.js";
|
|
24
|
+
export { searchComponents } from "./domain/search.js";
|
|
25
|
+
// ── Application layer (tool handlers) ───────────────────────────────
|
|
26
|
+
export { TOOL_HANDLERS } from "./handlers.js";
|
|
27
|
+
export { JsxValidator, TemplateValidator, formatValidationResult } from "./types.js";
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,uEAAuE;AACvE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AAExG,uEAAuE;AACvE,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,GAEZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAEvF,uEAAuE;AACvE,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAA+C,MAAM,oBAAoB,CAAC;AAEnG,uEAAuE;AACvE,OAAO,EAAE,aAAa,EAAqB,MAAM,eAAe,CAAC;AAkBjE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type re-exports from @cl-mcp/analyzer.
|
|
3
|
+
* Single import path for MCP server consumers.
|
|
4
|
+
*/
|
|
5
|
+
export type { FileAnalysis, AnalyzedComponentEntry, ComponentMetadataEntry, ComponentMetadataFile, SelectorQuickInfo, EnhancedComponentMetadataEntry, ComponentAnalysis, StrictComponentAPI, QuickContext, ValidationResult, InputProperty, OutputProperty, AnalyzerDiagnostic, } from "@cl-mcp/analyzer";
|
|
6
|
+
export { TemplateValidator, JsxValidator, buildStrictAPIFromAnalysis, formatValidationResult, generateInputExample, capitalize, } from "@cl-mcp/analyzer";
|
|
7
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,8BAA8B,EAC9B,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,UAAU,GACX,MAAM,kBAAkB,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type re-exports from @cl-mcp/analyzer.
|
|
3
|
+
* Single import path for MCP server consumers.
|
|
4
|
+
*/
|
|
5
|
+
export { TemplateValidator, JsxValidator, buildStrictAPIFromAnalysis, formatValidationResult, generateInputExample, capitalize, } from "@cl-mcp/analyzer";
|
|
6
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,UAAU,GACX,MAAM,kBAAkB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cl-mcp/core",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Transport-agnostic core of cl-mcp: metadata loading (multi-library registry), search/resolution domain, and tool handlers shared by the MCP server and the CLI",
|
|
5
|
+
"keywords": ["mcp", "component-library", "metadata", "angular", "react"],
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Marcin Milewicz",
|
|
8
|
+
"homepage": "https://github.com/marcinmilewicz/cl-mcp/tree/main/packages/core#readme",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/marcinmilewicz/cl-mcp.git",
|
|
12
|
+
"directory": "packages/core"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/marcinmilewicz/cl-mcp/issues"
|
|
16
|
+
},
|
|
17
|
+
"type": "module",
|
|
18
|
+
"main": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"default": "./dist/index.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"files": ["dist", "README.md", "LICENSE"],
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=18"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc",
|
|
35
|
+
"test": "vitest run",
|
|
36
|
+
"prepublishOnly": "npm run build"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"zod": "^3.25.0"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"@cl-mcp/analyzer": "^2.0.0"
|
|
43
|
+
}
|
|
44
|
+
}
|