@urbicon-ui/mcp-server 6.24.0 → 6.26.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/package.json +9 -3
- package/dist/data/catalog-loader.d.ts +0 -37
- package/dist/data/catalog-loader.d.ts.map +0 -1
- package/dist/data/catalog-loader.js +0 -15
- package/dist/data/catalog-loader.js.map +0 -1
- package/dist/data/component-loader.d.ts +0 -2
- package/dist/data/component-loader.d.ts.map +0 -1
- package/dist/data/component-loader.js +0 -17
- package/dist/data/component-loader.js.map +0 -1
- package/dist/data/recipe-loader.d.ts +0 -4
- package/dist/data/recipe-loader.d.ts.map +0 -1
- package/dist/data/recipe-loader.js +0 -102
- package/dist/data/recipe-loader.js.map +0 -1
- package/dist/data/template-loader.d.ts +0 -8
- package/dist/data/template-loader.d.ts.map +0 -1
- package/dist/data/template-loader.js +0 -33
- package/dist/data/template-loader.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -57
- package/dist/index.js.map +0 -1
- package/dist/resources/catalog.d.ts +0 -3
- package/dist/resources/catalog.d.ts.map +0 -1
- package/dist/resources/catalog.js +0 -20
- package/dist/resources/catalog.js.map +0 -1
- package/dist/resources/component.d.ts +0 -3
- package/dist/resources/component.d.ts.map +0 -1
- package/dist/resources/component.js +0 -29
- package/dist/resources/component.js.map +0 -1
- package/dist/resources/guides.d.ts +0 -3
- package/dist/resources/guides.d.ts.map +0 -1
- package/dist/resources/guides.js +0 -36
- package/dist/resources/guides.js.map +0 -1
- package/dist/server.d.ts +0 -3
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/tools/find-components.d.ts +0 -3
- package/dist/tools/find-components.d.ts.map +0 -1
- package/dist/tools/find-components.js +0 -21
- package/dist/tools/find-components.js.map +0 -1
- package/dist/tools/get-recipe.d.ts +0 -3
- package/dist/tools/get-recipe.d.ts.map +0 -1
- package/dist/tools/get-recipe.js +0 -48
- package/dist/tools/get-recipe.js.map +0 -1
- package/dist/tools/suggest-implementation.d.ts +0 -3
- package/dist/tools/suggest-implementation.d.ts.map +0 -1
- package/dist/tools/suggest-implementation.js +0 -178
- package/dist/tools/suggest-implementation.js.map +0 -1
- package/dist/transports/http.d.ts +0 -2
- package/dist/transports/http.d.ts.map +0 -1
- package/dist/transports/http.js +0 -77
- package/dist/transports/http.js.map +0 -1
- package/dist/transports/stdio.d.ts +0 -3
- package/dist/transports/stdio.d.ts.map +0 -1
- package/dist/transports/stdio.js +0 -6
- package/dist/transports/stdio.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utils/format-catalog.d.ts +0 -7
- package/dist/utils/format-catalog.d.ts.map +0 -1
- package/dist/utils/format-catalog.js +0 -93
- package/dist/utils/format-catalog.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -7
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js +0 -23
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/search.d.ts +0 -3
- package/dist/utils/search.d.ts.map +0 -1
- package/dist/utils/search.js +0 -44
- package/dist/utils/search.js.map +0 -1
- package/src/data/catalog-loader.test.ts +0 -42
- package/src/data/design-system-loader.test.ts +0 -82
- package/src/data/icon-loader.test.ts +0 -30
- package/src/eval/briefs.ts +0 -104
- package/src/eval/eval.test.ts +0 -106
- package/src/eval/index.ts +0 -11
- package/src/eval/score.ts +0 -128
- package/src/prompts/design-prompts.test.ts +0 -79
- package/src/server.test.ts +0 -78
- package/src/utils/format-catalog.test.ts +0 -144
- package/tsconfig.json +0 -27
- package/vitest.config.ts +0 -15
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@urbicon-ui/mcp-server",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.26.0",
|
|
4
4
|
"description": "Model Context Protocol server exposing the Urbicon UI component catalog, recipes and design intelligence to LLM agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
"engines": {
|
|
21
21
|
"bun": ">=1.0.0"
|
|
22
22
|
},
|
|
23
|
+
"files": [
|
|
24
|
+
"src",
|
|
25
|
+
"!src/**/*.test.*",
|
|
26
|
+
"!src/**/*.spec.*",
|
|
27
|
+
"!src/eval/**"
|
|
28
|
+
],
|
|
23
29
|
"main": "./src/index.ts",
|
|
24
30
|
"scripts": {
|
|
25
31
|
"build": "echo 'no build needed — Bun runs TypeScript directly'",
|
|
@@ -32,8 +38,8 @@
|
|
|
32
38
|
},
|
|
33
39
|
"dependencies": {
|
|
34
40
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
35
|
-
"@urbicon-ui/design-content": "6.
|
|
36
|
-
"@urbicon-ui/design-engine": "6.
|
|
41
|
+
"@urbicon-ui/design-content": "6.26.0",
|
|
42
|
+
"@urbicon-ui/design-engine": "6.26.0",
|
|
37
43
|
"zod": "^4.3.6"
|
|
38
44
|
},
|
|
39
45
|
"devDependencies": {
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export interface ComponentCatalogEntry {
|
|
2
|
-
name: string;
|
|
3
|
-
slug: string;
|
|
4
|
-
package: string;
|
|
5
|
-
group: 'primitives' | 'components' | 'core';
|
|
6
|
-
description: string;
|
|
7
|
-
tags: string[];
|
|
8
|
-
import: string;
|
|
9
|
-
llmTxtPath: string;
|
|
10
|
-
variants: {
|
|
11
|
-
name: string;
|
|
12
|
-
values: string[];
|
|
13
|
-
default?: string;
|
|
14
|
-
}[];
|
|
15
|
-
keyProps: string[];
|
|
16
|
-
slots: string[];
|
|
17
|
-
hasExamples: boolean;
|
|
18
|
-
relatedComponents: string[];
|
|
19
|
-
}
|
|
20
|
-
export interface RecipeEntry {
|
|
21
|
-
id: string;
|
|
22
|
-
title: string;
|
|
23
|
-
description: string;
|
|
24
|
-
components: string[];
|
|
25
|
-
code: string;
|
|
26
|
-
features: string[];
|
|
27
|
-
}
|
|
28
|
-
export interface ComponentCatalog {
|
|
29
|
-
generated: string;
|
|
30
|
-
version: string;
|
|
31
|
-
components: ComponentCatalogEntry[];
|
|
32
|
-
recipes: RecipeEntry[];
|
|
33
|
-
tags: string[];
|
|
34
|
-
}
|
|
35
|
-
export declare function loadCatalog(): Promise<ComponentCatalog>;
|
|
36
|
-
export declare function getCachedCatalog(): ComponentCatalog | null;
|
|
37
|
-
//# sourceMappingURL=catalog-loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-loader.d.ts","sourceRoot":"","sources":["../../src/data/catalog-loader.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAID,wBAAsB,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAO7D;AAED,wBAAgB,gBAAgB,IAAI,gBAAgB,GAAG,IAAI,CAE1D"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import { getCatalogPath } from '../utils/paths.js';
|
|
3
|
-
let cachedCatalog = null;
|
|
4
|
-
export async function loadCatalog() {
|
|
5
|
-
if (cachedCatalog)
|
|
6
|
-
return cachedCatalog;
|
|
7
|
-
const catalogPath = getCatalogPath();
|
|
8
|
-
const raw = await readFile(catalogPath, 'utf-8');
|
|
9
|
-
cachedCatalog = JSON.parse(raw);
|
|
10
|
-
return cachedCatalog;
|
|
11
|
-
}
|
|
12
|
-
export function getCachedCatalog() {
|
|
13
|
-
return cachedCatalog;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=catalog-loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-loader.js","sourceRoot":"","sources":["../../src/data/catalog-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAmCnD,IAAI,aAAa,GAA4B,IAAI,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjD,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;IACpD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-loader.d.ts","sourceRoot":"","sources":["../../src/data/component-loader.ts"],"names":[],"mappings":"AAKA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW9E"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { readFile, access } from 'node:fs/promises';
|
|
2
|
-
import { getComponentLlmPath } from '../utils/paths.js';
|
|
3
|
-
const SEARCH_GROUPS = ['blocks/primitives', 'blocks/components', 'docs/components', 'table'];
|
|
4
|
-
export async function loadComponentLlmTxt(slug) {
|
|
5
|
-
for (const group of SEARCH_GROUPS) {
|
|
6
|
-
const path = getComponentLlmPath(group, slug);
|
|
7
|
-
try {
|
|
8
|
-
await access(path);
|
|
9
|
-
return await readFile(path, 'utf-8');
|
|
10
|
-
}
|
|
11
|
-
catch {
|
|
12
|
-
continue;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=component-loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-loader.js","sourceRoot":"","sources":["../../src/data/component-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,aAAa,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAE7F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recipe-loader.d.ts","sourceRoot":"","sources":["../../src/data/recipe-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAqEvD,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAuC1D;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAG3E"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { readFile, readdir, stat } from 'node:fs/promises';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
3
|
-
import { getRecipeDir } from '../utils/paths.js';
|
|
4
|
-
let cachedRecipes = null;
|
|
5
|
-
function extractArray(content, varName) {
|
|
6
|
-
const pattern = new RegExp(`const\\s+${varName}\\s*=\\s*\\[([^\\]]+)\\]`, 's');
|
|
7
|
-
const match = content.match(pattern);
|
|
8
|
-
if (!match?.[1])
|
|
9
|
-
return [];
|
|
10
|
-
return match[1]
|
|
11
|
-
.split(',')
|
|
12
|
-
.map((s) => s.trim().replace(/^['"]|['"]$/g, ''))
|
|
13
|
-
.filter((s) => s.length > 0 && !s.includes('{'));
|
|
14
|
-
}
|
|
15
|
-
function extractRecipeCode(content) {
|
|
16
|
-
// Find the recipeCode assignment start
|
|
17
|
-
const startMatch = content.match(/const\s+recipeCode\s*=\s*\n?\s*/);
|
|
18
|
-
if (!startMatch)
|
|
19
|
-
return '';
|
|
20
|
-
const startIdx = (startMatch.index ?? 0) + startMatch[0].length;
|
|
21
|
-
const rest = content.slice(startIdx);
|
|
22
|
-
// Find the end: a backtick followed by a semicolon (possibly with whitespace)
|
|
23
|
-
// We need to track backtick nesting to handle `...` + `...`;
|
|
24
|
-
let depth = 0;
|
|
25
|
-
let endIdx = -1;
|
|
26
|
-
for (let i = 0; i < rest.length; i++) {
|
|
27
|
-
if (rest[i] === '`') {
|
|
28
|
-
depth = depth === 0 ? 1 : 0;
|
|
29
|
-
}
|
|
30
|
-
if (depth === 0 && rest[i] === ';') {
|
|
31
|
-
endIdx = i;
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if (endIdx === -1)
|
|
36
|
-
return '';
|
|
37
|
-
const raw = rest.slice(0, endIdx);
|
|
38
|
-
// Split on backtick concatenation (`...` + `...`) and rejoin
|
|
39
|
-
// This handles the </scr` + `ipt> pattern used to avoid parser issues
|
|
40
|
-
const parts = raw.split(/`\s*\+\s*\n?\s*`/);
|
|
41
|
-
return parts.map((p) => p.replace(/^\s*`|`\s*$/g, '')).join('');
|
|
42
|
-
}
|
|
43
|
-
function extractTitle(content, dirName) {
|
|
44
|
-
const titleMatch = content.match(/<title>([^<]+)<\/title>/);
|
|
45
|
-
if (titleMatch?.[1]) {
|
|
46
|
-
return titleMatch[1].replace(/\s*[-|].*$/, '').trim();
|
|
47
|
-
}
|
|
48
|
-
return dirName
|
|
49
|
-
.split('-')
|
|
50
|
-
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
51
|
-
.join(' ');
|
|
52
|
-
}
|
|
53
|
-
function extractDescription(content) {
|
|
54
|
-
const descMatch = content.match(/<p\s+class="text-text-secondary[^"]*"[^>]*>\s*([\s\S]*?)\s*<\/p>/);
|
|
55
|
-
if (descMatch?.[1]) {
|
|
56
|
-
return descMatch[1].replace(/<[^>]+>/g, '').trim();
|
|
57
|
-
}
|
|
58
|
-
return '';
|
|
59
|
-
}
|
|
60
|
-
export async function loadRecipes() {
|
|
61
|
-
if (cachedRecipes)
|
|
62
|
-
return cachedRecipes;
|
|
63
|
-
const recipeDir = getRecipeDir();
|
|
64
|
-
const entries = [];
|
|
65
|
-
let dirs;
|
|
66
|
-
try {
|
|
67
|
-
dirs = await readdir(recipeDir);
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
cachedRecipes = [];
|
|
71
|
-
return [];
|
|
72
|
-
}
|
|
73
|
-
for (const dirName of dirs) {
|
|
74
|
-
const dirPath = resolve(recipeDir, dirName);
|
|
75
|
-
const dirStat = await stat(dirPath).catch(() => null);
|
|
76
|
-
if (!dirStat?.isDirectory())
|
|
77
|
-
continue;
|
|
78
|
-
const pagePath = resolve(dirPath, '+page.svelte');
|
|
79
|
-
let content;
|
|
80
|
-
try {
|
|
81
|
-
content = await readFile(pagePath, 'utf-8');
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
entries.push({
|
|
87
|
-
id: dirName,
|
|
88
|
-
title: extractTitle(content, dirName),
|
|
89
|
-
description: extractDescription(content),
|
|
90
|
-
components: extractArray(content, 'usedComponents'),
|
|
91
|
-
code: extractRecipeCode(content),
|
|
92
|
-
features: extractArray(content, 'features')
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
cachedRecipes = entries;
|
|
96
|
-
return entries;
|
|
97
|
-
}
|
|
98
|
-
export async function getRecipeById(id) {
|
|
99
|
-
const recipes = await loadRecipes();
|
|
100
|
-
return recipes.find((r) => r.id === id) ?? null;
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=recipe-loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recipe-loader.js","sourceRoot":"","sources":["../../src/data/recipe-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface TemplateSections {
|
|
2
|
-
'api-grammar': string;
|
|
3
|
-
tokens: string;
|
|
4
|
-
customization: string;
|
|
5
|
-
}
|
|
6
|
-
export declare function loadTemplateSections(): Promise<TemplateSections>;
|
|
7
|
-
export declare function getCachedSections(): TemplateSections | null;
|
|
8
|
-
//# sourceMappingURL=template-loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"template-loader.d.ts","sourceRoot":"","sources":["../../src/data/template-loader.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAmBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CActE;AAED,wBAAgB,iBAAiB,IAAI,gBAAgB,GAAG,IAAI,CAE3D"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import { getTemplatePath } from '../utils/paths.js';
|
|
3
|
-
let cachedSections = null;
|
|
4
|
-
function extractSection(lines, startHeading, endMarker) {
|
|
5
|
-
const startIdx = lines.findIndex((l) => l.trim().startsWith(startHeading));
|
|
6
|
-
if (startIdx === -1)
|
|
7
|
-
return '';
|
|
8
|
-
let endIdx = lines.length;
|
|
9
|
-
for (let i = startIdx + 1; i < lines.length; i++) {
|
|
10
|
-
if (lines[i]?.trim() === endMarker) {
|
|
11
|
-
endIdx = i;
|
|
12
|
-
break;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return lines.slice(startIdx, endIdx).join('\n').trim();
|
|
16
|
-
}
|
|
17
|
-
export async function loadTemplateSections() {
|
|
18
|
-
if (cachedSections)
|
|
19
|
-
return cachedSections;
|
|
20
|
-
const templatePath = getTemplatePath();
|
|
21
|
-
const raw = await readFile(templatePath, 'utf-8');
|
|
22
|
-
const lines = raw.split('\n');
|
|
23
|
-
cachedSections = {
|
|
24
|
-
'api-grammar': extractSection(lines, '## Shared API Grammar', '---'),
|
|
25
|
-
tokens: extractSection(lines, '## Design Token System', '---'),
|
|
26
|
-
customization: extractSection(lines, '## Customization', '---')
|
|
27
|
-
};
|
|
28
|
-
return cachedSections;
|
|
29
|
-
}
|
|
30
|
-
export function getCachedSections() {
|
|
31
|
-
return cachedSections;
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=template-loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"template-loader.js","sourceRoot":"","sources":["../../src/data/template-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQpD,IAAI,cAAc,GAA4B,IAAI,CAAC;AAEnD,SAAS,cAAc,CAAC,KAAe,EAAE,YAAoB,EAAE,SAAiB;IAC9E,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3E,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAE/B,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,GAAG,CAAC,CAAC;YACX,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAE1C,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE9B,cAAc,GAAG;QACf,aAAa,EAAE,cAAc,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,CAAC;QACpE,MAAM,EAAE,cAAc,CAAC,KAAK,EAAE,wBAAwB,EAAE,KAAK,CAAC;QAC9D,aAAa,EAAE,cAAc,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,CAAC;KAChE,CAAC;IAEF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createServer } from './server.js';
|
|
3
|
-
import { startStdioTransport } from './transports/stdio.js';
|
|
4
|
-
import { startHttpTransport } from './transports/http.js';
|
|
5
|
-
import { loadCatalog } from './data/catalog-loader.js';
|
|
6
|
-
import { loadTemplateSections } from './data/template-loader.js';
|
|
7
|
-
import { loadRecipes } from './data/recipe-loader.js';
|
|
8
|
-
function parseArgs(args) {
|
|
9
|
-
const result = {
|
|
10
|
-
transport: 'stdio',
|
|
11
|
-
port: 3001
|
|
12
|
-
};
|
|
13
|
-
for (let i = 0; i < args.length; i++) {
|
|
14
|
-
const arg = args[i];
|
|
15
|
-
const next = args[i + 1];
|
|
16
|
-
if (arg === '--transport' && next) {
|
|
17
|
-
if (next === 'stdio' || next === 'http') {
|
|
18
|
-
result.transport = next;
|
|
19
|
-
}
|
|
20
|
-
i++;
|
|
21
|
-
}
|
|
22
|
-
else if (arg === '--port' && next) {
|
|
23
|
-
result.port = parseInt(next, 10);
|
|
24
|
-
i++;
|
|
25
|
-
}
|
|
26
|
-
else if (arg === '--data-dir' && next) {
|
|
27
|
-
result.dataDir = next;
|
|
28
|
-
i++;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return result;
|
|
32
|
-
}
|
|
33
|
-
async function main() {
|
|
34
|
-
const args = parseArgs(process.argv.slice(2));
|
|
35
|
-
if (args.dataDir) {
|
|
36
|
-
process.env.DATA_DIR = args.dataDir;
|
|
37
|
-
}
|
|
38
|
-
// Pre-load cached data
|
|
39
|
-
try {
|
|
40
|
-
await Promise.all([loadCatalog(), loadTemplateSections(), loadRecipes()]);
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
console.error('Warning: Failed to pre-load some data:', err);
|
|
44
|
-
}
|
|
45
|
-
if (args.transport === 'http') {
|
|
46
|
-
await startHttpTransport(args.port);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
const server = createServer();
|
|
50
|
-
await startStdioTransport(server);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
main().catch((err) => {
|
|
54
|
-
console.error('Fatal error:', err);
|
|
55
|
-
process.exit(1);
|
|
56
|
-
});
|
|
57
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAQtD,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,MAAM,GAAY;QACtB,SAAS,EAAE,OAAO;QAClB,IAAI,EAAE,IAAI;KACX,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzB,IAAI,GAAG,KAAK,aAAa,IAAI,IAAI,EAAE,CAAC;YAClC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;YAC1B,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjC,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,IAAI,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,oBAAoB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/resources/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkB/D"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { loadCatalog } from '../data/catalog-loader.js';
|
|
2
|
-
import { formatCompactCatalog } from '../utils/format-catalog.js';
|
|
3
|
-
export function registerCatalogResource(server) {
|
|
4
|
-
server.resource('catalog', 'urbicon://catalog', async (uri) => {
|
|
5
|
-
const catalog = await loadCatalog();
|
|
6
|
-
const md = formatCompactCatalog(catalog.components, {
|
|
7
|
-
recipes: catalog.recipes
|
|
8
|
-
});
|
|
9
|
-
return {
|
|
10
|
-
contents: [
|
|
11
|
-
{
|
|
12
|
-
uri: uri.href,
|
|
13
|
-
mimeType: 'text/markdown',
|
|
14
|
-
text: md
|
|
15
|
-
}
|
|
16
|
-
]
|
|
17
|
-
};
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=catalog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/resources/catalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;QAEpC,MAAM,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,UAAU,EAAE;YAClD,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,EAAE;iBACT;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/resources/component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4BjE"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { loadComponentLlmTxt } from '../data/component-loader.js';
|
|
2
|
-
export function registerComponentResource(server) {
|
|
3
|
-
server.resource('component', 'urbicon://component/{name}', async (uri, _extra) => {
|
|
4
|
-
// Extract component name from URI path: urbicon://component/{name}
|
|
5
|
-
const name = uri.pathname.split('/').pop() || '';
|
|
6
|
-
const content = await loadComponentLlmTxt(name);
|
|
7
|
-
if (!content) {
|
|
8
|
-
return {
|
|
9
|
-
contents: [
|
|
10
|
-
{
|
|
11
|
-
uri: uri.href,
|
|
12
|
-
mimeType: 'text/plain',
|
|
13
|
-
text: `Component "${name}" not found. Use the catalog resource to see available components.`
|
|
14
|
-
}
|
|
15
|
-
]
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
return {
|
|
19
|
-
contents: [
|
|
20
|
-
{
|
|
21
|
-
uri: uri.href,
|
|
22
|
-
mimeType: 'text/markdown',
|
|
23
|
-
text: content
|
|
24
|
-
}
|
|
25
|
-
]
|
|
26
|
-
};
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/resources/component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC/E,mEAAmE;QACnE,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,QAAQ,EAAE,YAAY;wBACtB,IAAI,EAAE,cAAc,IAAI,oEAAoE;qBAC7F;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,OAAO;iBACd;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guides.d.ts","sourceRoot":"","sources":["../../src/resources/guides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiB9D"}
|
package/dist/resources/guides.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { loadTemplateSections } from '../data/template-loader.js';
|
|
2
|
-
const GUIDE_RESOURCES = [
|
|
3
|
-
{
|
|
4
|
-
id: 'api-grammar',
|
|
5
|
-
name: 'API Grammar Guide',
|
|
6
|
-
key: 'api-grammar'
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
id: 'tokens',
|
|
10
|
-
name: 'Design Tokens Guide',
|
|
11
|
-
key: 'tokens'
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
id: 'customization',
|
|
15
|
-
name: 'Customization Guide',
|
|
16
|
-
key: 'customization'
|
|
17
|
-
}
|
|
18
|
-
];
|
|
19
|
-
export function registerGuideResources(server) {
|
|
20
|
-
for (const guide of GUIDE_RESOURCES) {
|
|
21
|
-
server.resource(`guide-${guide.id}`, `urbicon://guide/${guide.id}`, async (uri) => {
|
|
22
|
-
const sections = await loadTemplateSections();
|
|
23
|
-
const content = sections[guide.key];
|
|
24
|
-
return {
|
|
25
|
-
contents: [
|
|
26
|
-
{
|
|
27
|
-
uri: uri.href,
|
|
28
|
-
mimeType: 'text/markdown',
|
|
29
|
-
text: content || `Guide section "${guide.id}" not found.`
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
|
-
};
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=guides.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guides.js","sourceRoot":"","sources":["../../src/resources/guides.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGlE,MAAM,eAAe,GAAgE;IACnF;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,mBAAmB;QACzB,GAAG,EAAE,aAAa;KACnB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,qBAAqB;QAC3B,GAAG,EAAE,QAAQ;KACd;IACD;QACE,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,qBAAqB;QAC3B,GAAG,EAAE,eAAe;KACrB;CACF,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAChF,MAAM,QAAQ,GAAG,MAAM,oBAAoB,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEpC,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,QAAQ,EAAE,eAAe;wBACzB,IAAI,EAAE,OAAO,IAAI,kBAAkB,KAAK,CAAC,EAAE,cAAc;qBAC1D;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
package/dist/server.d.ts
DELETED
package/dist/server.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,wBAAgB,YAAY,IAAI,SAAS,CAiBxC"}
|
package/dist/server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,iCAAiC,EAAE,MAAM,mCAAmC,CAAC;AAEtF,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;IAEH,YAAY;IACZ,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,QAAQ;IACR,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"find-components.d.ts","sourceRoot":"","sources":["../../src/tools/find-components.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuBlE"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { loadCatalog } from '../data/catalog-loader.js';
|
|
3
|
-
import { formatCompactCatalog } from '../utils/format-catalog.js';
|
|
4
|
-
export function registerFindComponentsTool(server) {
|
|
5
|
-
server.tool('find_components', 'Browse the full Urbicon UI component catalog grouped by category (Actions, Forms, Layout, Feedback, Navigation, Display, Data). Optionally filter by tag. For detailed API docs on a specific component, read the resource `urbicon://component/{name}`.', {
|
|
6
|
-
tags: z
|
|
7
|
-
.array(z.string())
|
|
8
|
-
.optional()
|
|
9
|
-
.describe('Filter by category: form, layout, feedback, navigation, action, display, data')
|
|
10
|
-
}, async ({ tags }) => {
|
|
11
|
-
const catalog = await loadCatalog();
|
|
12
|
-
const md = formatCompactCatalog(catalog.components, {
|
|
13
|
-
recipes: catalog.recipes,
|
|
14
|
-
tags
|
|
15
|
-
});
|
|
16
|
-
return {
|
|
17
|
-
content: [{ type: 'text', text: md }]
|
|
18
|
-
};
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=find-components.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"find-components.js","sourceRoot":"","sources":["../../src/tools/find-components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,0PAA0P,EAC1P;QACE,IAAI,EAAE,CAAC;aACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CAAC,+EAA+E,CAAC;KAC7F,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;QAEpC,MAAM,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,UAAU,EAAE;YAClD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI;SACL,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;SAC/C,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-recipe.d.ts","sourceRoot":"","sources":["../../src/tools/get-recipe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqD7D"}
|
package/dist/tools/get-recipe.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { getRecipeById, loadRecipes } from '../data/recipe-loader.js';
|
|
3
|
-
export function registerGetRecipeTool(server) {
|
|
4
|
-
server.tool('get_recipe', 'Get a complete, production-ready Svelte 5 code recipe.', {
|
|
5
|
-
scenario: z
|
|
6
|
-
.string()
|
|
7
|
-
.describe('Recipe id: login, settings, dashboard, pricing, profile-card, data-table, command-palette')
|
|
8
|
-
}, async ({ scenario }) => {
|
|
9
|
-
const recipe = await getRecipeById(scenario);
|
|
10
|
-
if (!recipe) {
|
|
11
|
-
const allRecipes = await loadRecipes();
|
|
12
|
-
const available = allRecipes.map((r) => r.id).join(', ');
|
|
13
|
-
return {
|
|
14
|
-
content: [
|
|
15
|
-
{
|
|
16
|
-
type: 'text',
|
|
17
|
-
text: `Recipe "${scenario}" not found. Available recipes: ${available}`
|
|
18
|
-
}
|
|
19
|
-
]
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
let md = `# Recipe: ${recipe.title}\n\n`;
|
|
23
|
-
if (recipe.description)
|
|
24
|
-
md += `${recipe.description}\n\n`;
|
|
25
|
-
if (recipe.components.length > 0) {
|
|
26
|
-
md += `**Components used:** ${recipe.components.join(', ')}\n\n`;
|
|
27
|
-
}
|
|
28
|
-
if (recipe.features.length > 0) {
|
|
29
|
-
md += '**Features:**\n';
|
|
30
|
-
for (const f of recipe.features) {
|
|
31
|
-
md += `- ${f}\n`;
|
|
32
|
-
}
|
|
33
|
-
md += '\n';
|
|
34
|
-
}
|
|
35
|
-
if (recipe.code) {
|
|
36
|
-
md += '```svelte\n' + recipe.code + '\n```\n';
|
|
37
|
-
}
|
|
38
|
-
return {
|
|
39
|
-
content: [
|
|
40
|
-
{
|
|
41
|
-
type: 'text',
|
|
42
|
-
text: md
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
};
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=get-recipe.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-recipe.js","sourceRoot":"","sources":["../../src/tools/get-recipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,wDAAwD,EACxD;QACE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CACP,2FAA2F,CAC5F;KACJ,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,MAAM,WAAW,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,WAAW,QAAQ,mCAAmC,SAAS,EAAE;qBACxE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,EAAE,GAAG,aAAa,MAAM,CAAC,KAAK,MAAM,CAAC;QACzC,IAAI,MAAM,CAAC,WAAW;YAAE,EAAE,IAAI,GAAG,MAAM,CAAC,WAAW,MAAM,CAAC;QAC1D,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,EAAE,IAAI,wBAAwB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,EAAE,IAAI,iBAAiB,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAChC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC;YACnB,CAAC;YACD,EAAE,IAAI,IAAI,CAAC;QACb,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,EAAE,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;QAChD,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,EAAE;iBACT;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"suggest-implementation.d.ts","sourceRoot":"","sources":["../../src/tools/suggest-implementation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0DzE,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiIzE"}
|