@makitt.io/mds-mcp-server 0.1.2 → 0.2.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/README.md +142 -41
- package/dist/catalog.d.ts +16 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +383 -0
- package/dist/catalog.js.map +1 -0
- package/dist/data/catalog.json +42535 -5019
- package/dist/data/playbook/ai-fill.md +62 -49
- package/dist/data/playbook/anti-patterns.md +112 -110
- package/dist/data/playbook/array-input.md +95 -50
- package/dist/data/playbook/async-states.md +71 -61
- package/dist/data/playbook/data-grid.md +177 -80
- package/dist/data/playbook/feedback.md +107 -88
- package/dist/data/playbook/form.md +164 -134
- package/dist/data/playbook/overlay.md +98 -89
- package/dist/data/playbook/page-layout.md +96 -77
- package/dist/data/playbook/responsive-tokens.md +78 -59
- package/dist/data/recipes/admin-list-page.md +86 -0
- package/dist/data/recipes/async-state-section.md +60 -0
- package/dist/data/recipes/dashboard-overview.md +65 -0
- package/dist/data/recipes/detail-drawer.md +69 -0
- package/dist/data/recipes/modal-form.md +67 -0
- package/dist/data/recipes/settings-form-page.md +79 -0
- package/dist/index.d.ts +4 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -339
- package/dist/index.js.map +1 -1
- package/dist/loaders.d.ts +8 -0
- package/dist/loaders.d.ts.map +1 -0
- package/dist/loaders.js +120 -0
- package/dist/loaders.js.map +1 -0
- package/dist/recipes.d.ts +13 -0
- package/dist/recipes.d.ts.map +1 -0
- package/dist/recipes.js +82 -0
- package/dist/recipes.js.map +1 -0
- package/dist/responses.d.ts +8 -0
- package/dist/responses.d.ts.map +1 -0
- package/dist/responses.js +25 -0
- package/dist/responses.js.map +1 -0
- package/dist/text.d.ts +4 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +20 -0
- package/dist/text.js.map +1 -0
- package/dist/tool-definitions.d.ts +3 -0
- package/dist/tool-definitions.d.ts.map +1 -0
- package/dist/tool-definitions.js +199 -0
- package/dist/tool-definitions.js.map +1 -0
- package/dist/tools.d.ts +4 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +233 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +107 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +20 -16
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type CatalogSymbolKind, type ToolArguments, type ToolResponse } from './types.js';
|
|
2
|
+
export declare function textResponse(text: string, isError?: boolean): ToolResponse;
|
|
3
|
+
export declare function jsonResponse(value: unknown): ToolResponse;
|
|
4
|
+
export declare function stringArg(args: ToolArguments, key: string): string | undefined;
|
|
5
|
+
export declare function numberArg(args: ToolArguments, key: string, fallback: number): number;
|
|
6
|
+
export declare function booleanArg(args: ToolArguments, key: string): boolean;
|
|
7
|
+
export declare function kindArg(args: ToolArguments): CatalogSymbolKind | undefined;
|
|
8
|
+
//# sourceMappingURL=responses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,YAAY,CAExE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAEzD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAK1E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SYMBOL_KIND_VALUES, } from './types.js';
|
|
2
|
+
export function textResponse(text, isError = false) {
|
|
3
|
+
return { content: [{ type: 'text', text }], ...(isError ? { isError } : {}) };
|
|
4
|
+
}
|
|
5
|
+
export function jsonResponse(value) {
|
|
6
|
+
return textResponse(JSON.stringify(value, null, 2));
|
|
7
|
+
}
|
|
8
|
+
export function stringArg(args, key) {
|
|
9
|
+
const value = args?.[key];
|
|
10
|
+
return typeof value === 'string' ? value : undefined;
|
|
11
|
+
}
|
|
12
|
+
export function numberArg(args, key, fallback) {
|
|
13
|
+
const value = args?.[key];
|
|
14
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
|
|
15
|
+
}
|
|
16
|
+
export function booleanArg(args, key) {
|
|
17
|
+
return Boolean(args?.[key]);
|
|
18
|
+
}
|
|
19
|
+
export function kindArg(args) {
|
|
20
|
+
const value = stringArg(args, 'kind');
|
|
21
|
+
return SYMBOL_KIND_VALUES.includes(value)
|
|
22
|
+
? value
|
|
23
|
+
: undefined;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=responses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responses.js","sourceRoot":"","sources":["../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,GAGnB,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAO,GAAG,KAAK;IACxD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAmB,EAAE,GAAW;IACxD,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAmB,EAAE,GAAW,EAAE,QAAgB;IAC1E,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAmB,EAAE,GAAW;IACzD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAmB;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,KAA0B,CAAC;QAC5D,CAAC,CAAE,KAA2B;QAC9B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
|
package/dist/text.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASnD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKhD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAExE"}
|
package/dist/text.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function normalizeText(value) {
|
|
2
|
+
return value
|
|
3
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
4
|
+
.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
|
|
5
|
+
.replace(/[._/-]+/g, ' ')
|
|
6
|
+
.replace(/[_]+$/g, '')
|
|
7
|
+
.toLowerCase()
|
|
8
|
+
.replace(/\s+/g, ' ')
|
|
9
|
+
.trim();
|
|
10
|
+
}
|
|
11
|
+
export function tokenize(value) {
|
|
12
|
+
return normalizeText(value)
|
|
13
|
+
.split(' ')
|
|
14
|
+
.map((item) => item.trim())
|
|
15
|
+
.filter(Boolean);
|
|
16
|
+
}
|
|
17
|
+
export function uniqueStrings(items) {
|
|
18
|
+
return Array.from(new Set(items.filter((item) => Boolean(item)))).sort();
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=text.js.map
|
package/dist/text.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;SACxC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,aAAa,CAAC,KAAK,CAAC;SACxB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAgC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-definitions.d.ts","sourceRoot":"","sources":["../src/tool-definitions.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AA0BrE,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAsL5C,CAAC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { loadCatalog, loadPlaybooks, loadRecipes } from './loaders.js';
|
|
2
|
+
import { SYMBOL_KIND_VALUES } from './types.js';
|
|
3
|
+
const LAYERS_FROM_CATALOG = (() => {
|
|
4
|
+
try {
|
|
5
|
+
return loadCatalog().layers;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return ['primitives', 'compounds', 'overlays', 'data', 'patterns', 'shells', 'foundations'];
|
|
9
|
+
}
|
|
10
|
+
})();
|
|
11
|
+
const PLAYBOOK_AREAS_FROM_FS = (() => {
|
|
12
|
+
try {
|
|
13
|
+
return Object.keys(loadPlaybooks()).sort();
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
})();
|
|
19
|
+
const RECIPE_IDS_FROM_FS = (() => {
|
|
20
|
+
try {
|
|
21
|
+
return Object.keys(loadRecipes()).sort();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
})();
|
|
27
|
+
export const TOOL_DEFINITIONS = [
|
|
28
|
+
{
|
|
29
|
+
name: 'mds_components_list',
|
|
30
|
+
description: `List public mds JSX components/compound parts. Defaults to compact output and hides types/helpers/internal symbols. Optionally filter by layer (${LAYERS_FROM_CATALOG.join(' / ')}).`,
|
|
31
|
+
inputSchema: {
|
|
32
|
+
type: 'object',
|
|
33
|
+
properties: {
|
|
34
|
+
layer: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: 'Optional layer filter',
|
|
37
|
+
enum: LAYERS_FROM_CATALOG,
|
|
38
|
+
},
|
|
39
|
+
kind: {
|
|
40
|
+
type: 'string',
|
|
41
|
+
description: 'Optional symbol kind filter',
|
|
42
|
+
enum: SYMBOL_KIND_VALUES,
|
|
43
|
+
},
|
|
44
|
+
query: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
description: 'Optional normalized search filter applied before pagination',
|
|
47
|
+
},
|
|
48
|
+
limit: {
|
|
49
|
+
type: 'number',
|
|
50
|
+
description: 'Max results. Default 80.',
|
|
51
|
+
},
|
|
52
|
+
offset: {
|
|
53
|
+
type: 'number',
|
|
54
|
+
description: 'Pagination offset. Default 0.',
|
|
55
|
+
},
|
|
56
|
+
includeDescriptions: {
|
|
57
|
+
type: 'boolean',
|
|
58
|
+
description: 'Include descriptions in list rows. Default false.',
|
|
59
|
+
},
|
|
60
|
+
includeInternal: {
|
|
61
|
+
type: 'boolean',
|
|
62
|
+
description: 'Include non-public helpers/types/internal symbols. Default false.',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'mds_codegen_plan',
|
|
69
|
+
description: 'Start here for AI codegen. Given a page/feature task, return the likely MDS recipe, playbooks, component contracts to query, and guardrails. This remains MDS-only and excludes platform/app rules.',
|
|
70
|
+
inputSchema: {
|
|
71
|
+
type: 'object',
|
|
72
|
+
properties: {
|
|
73
|
+
task: {
|
|
74
|
+
type: 'string',
|
|
75
|
+
description: 'Short page/feature intent, e.g. "orders admin list page" or "coupon modal form".',
|
|
76
|
+
},
|
|
77
|
+
recipe: {
|
|
78
|
+
type: 'string',
|
|
79
|
+
description: 'Optional known recipe id to force as the primary recipe.',
|
|
80
|
+
enum: RECIPE_IDS_FROM_FS,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
required: ['task'],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'mds_components_get',
|
|
88
|
+
description: 'Get the full spec of a specific mds component (props, types, JSDoc, stories, hasTests). Use this BEFORE writing code with mds components to avoid fabrication.',
|
|
89
|
+
inputSchema: {
|
|
90
|
+
type: 'object',
|
|
91
|
+
properties: {
|
|
92
|
+
name: {
|
|
93
|
+
type: 'string',
|
|
94
|
+
description: 'Component name (PascalCase). Sub-components use dot notation (e.g., "Field.Root", "Modal.Body", "Drawer.Footer").',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
required: ['name'],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'mds_components_search',
|
|
102
|
+
description: 'Text search across MDS symbols — normalized aliases, dot names, prop names, enum values, descriptions, types, and stories.',
|
|
103
|
+
inputSchema: {
|
|
104
|
+
type: 'object',
|
|
105
|
+
properties: {
|
|
106
|
+
query: { type: 'string', description: 'Search query (case-insensitive)' },
|
|
107
|
+
limit: { type: 'number', description: 'Max results (default 20)' },
|
|
108
|
+
},
|
|
109
|
+
required: ['query'],
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'mds_component_examples_get',
|
|
114
|
+
description: 'Get usage examples and Storybook story URLs/source for a component. Use this when generating UI code or when a browser agent needs a visual reference.',
|
|
115
|
+
inputSchema: {
|
|
116
|
+
type: 'object',
|
|
117
|
+
properties: {
|
|
118
|
+
name: {
|
|
119
|
+
type: 'string',
|
|
120
|
+
description: 'Component name or alias, e.g. Button, Field.Error, Field Error.',
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
required: ['name'],
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'mds_playbook_list',
|
|
128
|
+
description: `List all available Playbook areas — ${PLAYBOOK_AREAS_FROM_FS.join(' / ')}.`,
|
|
129
|
+
inputSchema: { type: 'object', properties: {} },
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'mds_playbook_get',
|
|
133
|
+
description: 'Get the full content of a Playbook area (decision matrix + anti-patterns + mobile variants + TBD). Use this BEFORE making design decisions. Treat TBD/planned sections as non-implemented until mds_components_get confirms the prop/component exists.',
|
|
134
|
+
inputSchema: {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
area: {
|
|
138
|
+
type: 'string',
|
|
139
|
+
description: 'Playbook area name',
|
|
140
|
+
enum: PLAYBOOK_AREAS_FROM_FS,
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
required: ['area'],
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'mds_playbook_search',
|
|
148
|
+
description: 'Search across all Playbooks — matches decision matrix entries, anti-patterns, and cross-cutting axes.',
|
|
149
|
+
inputSchema: {
|
|
150
|
+
type: 'object',
|
|
151
|
+
properties: {
|
|
152
|
+
query: { type: 'string', description: 'Search query (case-insensitive)' },
|
|
153
|
+
limit: { type: 'number', description: 'Max matched lines (default 30)' },
|
|
154
|
+
},
|
|
155
|
+
required: ['query'],
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'mds_recipes_list',
|
|
160
|
+
description: 'List MDS-only composition recipes for assembling pages and UI flows. These intentionally exclude app/platform rules.',
|
|
161
|
+
inputSchema: {
|
|
162
|
+
type: 'object',
|
|
163
|
+
properties: {
|
|
164
|
+
query: {
|
|
165
|
+
type: 'string',
|
|
166
|
+
description: 'Optional normalized search filter applied to id/title/components/content.',
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'mds_recipes_get',
|
|
173
|
+
description: 'Get a specific MDS-only composition recipe. Use this before assembling a page/feature from MDS components; then confirm referenced components with mds_components_get.',
|
|
174
|
+
inputSchema: {
|
|
175
|
+
type: 'object',
|
|
176
|
+
properties: {
|
|
177
|
+
id: {
|
|
178
|
+
type: 'string',
|
|
179
|
+
description: 'Recipe id',
|
|
180
|
+
enum: RECIPE_IDS_FROM_FS,
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
required: ['id'],
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: 'mds_recipes_search',
|
|
188
|
+
description: 'Search across MDS-only recipes by component, page pattern, state, or composition term.',
|
|
189
|
+
inputSchema: {
|
|
190
|
+
type: 'object',
|
|
191
|
+
properties: {
|
|
192
|
+
query: { type: 'string', description: 'Search query (case-insensitive)' },
|
|
193
|
+
limit: { type: 'number', description: 'Max matched lines (default 30)' },
|
|
194
|
+
},
|
|
195
|
+
required: ['query'],
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
];
|
|
199
|
+
//# sourceMappingURL=tool-definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-definitions.js","sourceRoot":"","sources":["../src/tool-definitions.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAe,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA0P3F,wBAAgB,YAAY,IAAI,cAAc,EAAE,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,YAAY,CAQ3E"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { buildComponentContract, buildCompoundOverview, componentMatchesQuery, componentSuggestions, findComponent, findCompoundNamespace, findExactComponent, isDefaultListable, scoreComponent, summarizeComponent, summarizeSearchMatch, } from './catalog.js';
|
|
2
|
+
import { loadCatalog, loadPlaybooks, loadRecipes } from './loaders.js';
|
|
3
|
+
import { collectRecipeMatches, metadataArray, recipeMatchesQuery, selectCodegenRecipes, summarizeRecipe, } from './recipes.js';
|
|
4
|
+
import { booleanArg, jsonResponse, kindArg, numberArg, stringArg, textResponse, } from './responses.js';
|
|
5
|
+
import { normalizeText, tokenize, uniqueStrings } from './text.js';
|
|
6
|
+
import { TOOL_DEFINITIONS } from './tool-definitions.js';
|
|
7
|
+
function componentNotFoundResponse(catalog, name) {
|
|
8
|
+
const suggestions = componentSuggestions(catalog, name);
|
|
9
|
+
const list = suggestions.map((suggestion) => ` - ${suggestion}`).join('\n');
|
|
10
|
+
return textResponse(`Component "${name}" not found in catalog. Did you mean:\n${list}\n\nUse mds_components_list or mds_components_search.`, true);
|
|
11
|
+
}
|
|
12
|
+
function handleCodegenPlan(args) {
|
|
13
|
+
const task = (stringArg(args, 'task') ?? '').trim();
|
|
14
|
+
const requestedRecipe = stringArg(args, 'recipe');
|
|
15
|
+
const recipes = selectCodegenRecipes(task, requestedRecipe);
|
|
16
|
+
const playbooks = uniqueStrings(recipes.flatMap((recipe) => metadataArray(recipe, 'playbooks')));
|
|
17
|
+
const components = uniqueStrings(recipes.flatMap((recipe) => metadataArray(recipe, 'components')));
|
|
18
|
+
const primaryRecipe = recipes[0];
|
|
19
|
+
return jsonResponse({
|
|
20
|
+
task,
|
|
21
|
+
primaryRecipe: primaryRecipe ? summarizeRecipe(primaryRecipe) : undefined,
|
|
22
|
+
matchedRecipes: recipes.map(summarizeRecipe),
|
|
23
|
+
nextToolCalls: [
|
|
24
|
+
...(primaryRecipe
|
|
25
|
+
? [
|
|
26
|
+
{
|
|
27
|
+
tool: 'mds_recipes_get',
|
|
28
|
+
args: { id: primaryRecipe.id },
|
|
29
|
+
reason: 'Read the full MDS-only composition contract before writing code.',
|
|
30
|
+
},
|
|
31
|
+
]
|
|
32
|
+
: []),
|
|
33
|
+
...playbooks.map((area) => ({
|
|
34
|
+
tool: 'mds_playbook_get',
|
|
35
|
+
args: { area },
|
|
36
|
+
reason: 'Confirm decision rules, anti-patterns, and responsive variants.',
|
|
37
|
+
})),
|
|
38
|
+
...components.slice(0, 8).map((name) => ({
|
|
39
|
+
tool: 'mds_components_get',
|
|
40
|
+
args: { name },
|
|
41
|
+
reason: 'Confirm exact imports, props, literal values, stories, and examples.',
|
|
42
|
+
})),
|
|
43
|
+
],
|
|
44
|
+
guardrails: [
|
|
45
|
+
'This plan is MDS-only. Do not infer app routing, data fetching, permission, query-key, persistence, or platform rules from it.',
|
|
46
|
+
'Confirm every rendered component with mds_components_get before codegen.',
|
|
47
|
+
'Use mds_component_examples_get and Storybook iframe URLs for visual confirmation.',
|
|
48
|
+
'Generated UI must be verified in desktop and mobile viewports.',
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function handleComponentsList(args) {
|
|
53
|
+
const catalog = loadCatalog();
|
|
54
|
+
const layer = stringArg(args, 'layer');
|
|
55
|
+
const kind = kindArg(args);
|
|
56
|
+
const query = (stringArg(args, 'query') ?? '').trim();
|
|
57
|
+
const limit = Math.max(1, Math.min(numberArg(args, 'limit', 80), 300));
|
|
58
|
+
const offset = Math.max(0, numberArg(args, 'offset', 0));
|
|
59
|
+
const includeDescriptions = booleanArg(args, 'includeDescriptions');
|
|
60
|
+
const includeInternal = booleanArg(args, 'includeInternal');
|
|
61
|
+
const queryTokens = tokenize(query);
|
|
62
|
+
const components = Object.values(catalog.components)
|
|
63
|
+
.filter((component) => includeInternal || isDefaultListable(component))
|
|
64
|
+
.filter((component) => !layer || component.layer === layer)
|
|
65
|
+
.filter((component) => !kind || (component.kind ?? 'component') === kind)
|
|
66
|
+
.filter((component) => componentMatchesQuery(component, queryTokens))
|
|
67
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
68
|
+
const page = components.slice(offset, offset + limit);
|
|
69
|
+
return jsonResponse({
|
|
70
|
+
total: components.length,
|
|
71
|
+
returned: page.length,
|
|
72
|
+
offset,
|
|
73
|
+
limit,
|
|
74
|
+
filters: {
|
|
75
|
+
layer: layer ?? 'all',
|
|
76
|
+
kind: kind ?? 'public-components',
|
|
77
|
+
query: query || undefined,
|
|
78
|
+
includeInternal,
|
|
79
|
+
},
|
|
80
|
+
components: page.map((component) => summarizeComponent(component, includeDescriptions)),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function handleComponentsGet(args) {
|
|
84
|
+
const catalog = loadCatalog();
|
|
85
|
+
const componentName = stringArg(args, 'name') ?? '';
|
|
86
|
+
const exactComponent = findExactComponent(catalog, componentName);
|
|
87
|
+
if (exactComponent)
|
|
88
|
+
return jsonResponse(buildComponentContract(catalog, exactComponent));
|
|
89
|
+
const namespace = findCompoundNamespace(catalog, componentName);
|
|
90
|
+
if (namespace)
|
|
91
|
+
return jsonResponse(buildCompoundOverview(catalog, namespace));
|
|
92
|
+
const component = findComponent(catalog, componentName);
|
|
93
|
+
if (component)
|
|
94
|
+
return jsonResponse(buildComponentContract(catalog, component));
|
|
95
|
+
return componentNotFoundResponse(catalog, componentName);
|
|
96
|
+
}
|
|
97
|
+
function handleComponentsSearch(args) {
|
|
98
|
+
const catalog = loadCatalog();
|
|
99
|
+
const query = (stringArg(args, 'query') ?? '').trim();
|
|
100
|
+
const queryTokens = tokenize(query);
|
|
101
|
+
const limit = numberArg(args, 'limit', 20);
|
|
102
|
+
const matches = Object.values(catalog.components)
|
|
103
|
+
.filter((component) => isDefaultListable(component))
|
|
104
|
+
.filter((component) => componentMatchesQuery(component, queryTokens))
|
|
105
|
+
.sort((a, b) => scoreComponent(b, query) - scoreComponent(a, query))
|
|
106
|
+
.slice(0, limit)
|
|
107
|
+
.map((component) => summarizeSearchMatch(component, queryTokens));
|
|
108
|
+
return jsonResponse({ total: matches.length, query: normalizeText(query), matches });
|
|
109
|
+
}
|
|
110
|
+
function handleComponentExamplesGet(args) {
|
|
111
|
+
const catalog = loadCatalog();
|
|
112
|
+
const componentName = stringArg(args, 'name') ?? '';
|
|
113
|
+
const component = findComponent(catalog, componentName);
|
|
114
|
+
if (!component)
|
|
115
|
+
return componentNotFoundResponse(catalog, componentName);
|
|
116
|
+
return jsonResponse({
|
|
117
|
+
name: component.name,
|
|
118
|
+
import: component.import,
|
|
119
|
+
storybook: {
|
|
120
|
+
baseUrl: catalog.storybook?.baseUrl,
|
|
121
|
+
env: catalog.storybook?.env,
|
|
122
|
+
stories: component.storybook ?? [],
|
|
123
|
+
},
|
|
124
|
+
examples: component.examples ?? [],
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
function handlePlaybookList() {
|
|
128
|
+
const playbooks = loadPlaybooks();
|
|
129
|
+
const areas = Object.keys(playbooks).sort();
|
|
130
|
+
return jsonResponse({ areas, count: areas.length });
|
|
131
|
+
}
|
|
132
|
+
function handlePlaybookGet(args) {
|
|
133
|
+
const playbooks = loadPlaybooks();
|
|
134
|
+
const area = stringArg(args, 'area') ?? '';
|
|
135
|
+
const content = playbooks[area];
|
|
136
|
+
if (!content) {
|
|
137
|
+
return textResponse(`Playbook area "${area}" not found. Available: ${Object.keys(playbooks).join(', ')}`, true);
|
|
138
|
+
}
|
|
139
|
+
const guardrail = content.includes('TBD')
|
|
140
|
+
? '> Agent guardrail: sections or lines marked TBD/planned are roadmap notes, not usable API. Before using any prop or component mentioned here, confirm it exists in `mds_components_get`.\n\n'
|
|
141
|
+
: '';
|
|
142
|
+
return textResponse(`${guardrail}${content}`);
|
|
143
|
+
}
|
|
144
|
+
function collectPlaybookMatches(playbooks, query, limit) {
|
|
145
|
+
const matches = [];
|
|
146
|
+
for (const [area, content] of Object.entries(playbooks)) {
|
|
147
|
+
const lines = content.split('\n');
|
|
148
|
+
for (let index = 0; index < lines.length; index++) {
|
|
149
|
+
const line = lines[index];
|
|
150
|
+
if (!line.toLowerCase().includes(query))
|
|
151
|
+
continue;
|
|
152
|
+
matches.push({ area, line: index + 1, text: line.trim() });
|
|
153
|
+
if (matches.length >= limit)
|
|
154
|
+
return matches;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return matches;
|
|
158
|
+
}
|
|
159
|
+
function handlePlaybookSearch(args) {
|
|
160
|
+
const playbooks = loadPlaybooks();
|
|
161
|
+
const query = (stringArg(args, 'query') ?? '').toLowerCase();
|
|
162
|
+
const limit = numberArg(args, 'limit', 30);
|
|
163
|
+
const matches = collectPlaybookMatches(playbooks, query, limit);
|
|
164
|
+
return jsonResponse({ total: matches.length, query, matches });
|
|
165
|
+
}
|
|
166
|
+
function handleRecipesList(args) {
|
|
167
|
+
const recipes = loadRecipes();
|
|
168
|
+
const query = (stringArg(args, 'query') ?? '').trim();
|
|
169
|
+
const queryTokens = tokenize(query);
|
|
170
|
+
const rows = Object.values(recipes)
|
|
171
|
+
.filter((recipe) => recipeMatchesQuery(recipe, queryTokens))
|
|
172
|
+
.sort((a, b) => a.id.localeCompare(b.id))
|
|
173
|
+
.map(summarizeRecipe);
|
|
174
|
+
return jsonResponse({ count: rows.length, query: query || undefined, recipes: rows });
|
|
175
|
+
}
|
|
176
|
+
function recipeFollowUpCalls(recipe) {
|
|
177
|
+
const components = metadataArray(recipe, 'components');
|
|
178
|
+
const playbooks = metadataArray(recipe, 'playbooks');
|
|
179
|
+
return [
|
|
180
|
+
...playbooks.map((area) => `- \`mds_playbook_get("${area}")\``),
|
|
181
|
+
...components.slice(0, 10).map((name) => `- \`mds_components_get("${name}")\``),
|
|
182
|
+
].join('\n');
|
|
183
|
+
}
|
|
184
|
+
function handleRecipesGet(args) {
|
|
185
|
+
const recipes = loadRecipes();
|
|
186
|
+
const id = stringArg(args, 'id') ?? '';
|
|
187
|
+
const recipe = recipes[id];
|
|
188
|
+
if (!recipe) {
|
|
189
|
+
return textResponse(`Recipe "${id}" not found. Available: ${Object.keys(recipes).sort().join(', ')}`, true);
|
|
190
|
+
}
|
|
191
|
+
return textResponse([
|
|
192
|
+
'> Agent guardrail: this is an MDS-only UI composition contract. It does not define app routing, data fetching, permission, persistence, or file-structure rules. Confirm referenced components with mds_components_get before writing code.',
|
|
193
|
+
'',
|
|
194
|
+
'## Agent workflow',
|
|
195
|
+
recipeFollowUpCalls(recipe) || '- No referenced follow-up calls found.',
|
|
196
|
+
'',
|
|
197
|
+
recipe.content,
|
|
198
|
+
].join('\n'));
|
|
199
|
+
}
|
|
200
|
+
function handleRecipesSearch(args) {
|
|
201
|
+
const recipes = loadRecipes();
|
|
202
|
+
const query = (stringArg(args, 'query') ?? '').toLowerCase();
|
|
203
|
+
const limit = numberArg(args, 'limit', 30);
|
|
204
|
+
const matches = collectRecipeMatches(recipes, query, limit);
|
|
205
|
+
return jsonResponse({ total: matches.length, query, matches });
|
|
206
|
+
}
|
|
207
|
+
const TOOL_HANDLERS = {
|
|
208
|
+
mds_codegen_plan: handleCodegenPlan,
|
|
209
|
+
mds_component_examples_get: handleComponentExamplesGet,
|
|
210
|
+
mds_components_get: handleComponentsGet,
|
|
211
|
+
mds_components_list: handleComponentsList,
|
|
212
|
+
mds_components_search: handleComponentsSearch,
|
|
213
|
+
mds_playbook_get: handlePlaybookGet,
|
|
214
|
+
mds_playbook_list: handlePlaybookList,
|
|
215
|
+
mds_playbook_search: handlePlaybookSearch,
|
|
216
|
+
mds_recipes_get: handleRecipesGet,
|
|
217
|
+
mds_recipes_list: handleRecipesList,
|
|
218
|
+
mds_recipes_search: handleRecipesSearch,
|
|
219
|
+
};
|
|
220
|
+
export function listMdsTools() {
|
|
221
|
+
return TOOL_DEFINITIONS;
|
|
222
|
+
}
|
|
223
|
+
export function callMdsTool(name, args) {
|
|
224
|
+
try {
|
|
225
|
+
const handler = TOOL_HANDLERS[name];
|
|
226
|
+
return handler ? handler(args) : textResponse(`Unknown tool: ${name}`, true);
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
230
|
+
return textResponse(`Error: ${message}`, true);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|