@makitt.io/mds-mcp-server 0.1.3 → 0.2.1
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 +151 -34
- 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 +41955 -4439
- package/dist/data/playbook/ai-fill.md +61 -48
- package/dist/data/playbook/anti-patterns.md +112 -110
- package/dist/data/playbook/array-input.md +94 -49
- package/dist/data/playbook/async-states.md +71 -61
- package/dist/data/playbook/data-grid.md +118 -101
- package/dist/data/playbook/feedback.md +103 -84
- package/dist/data/playbook/form.md +164 -134
- package/dist/data/playbook/overlay.md +97 -88
- package/dist/data/playbook/page-layout.md +95 -76
- package/dist/data/playbook/responsive-tokens.md +77 -58
- 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 +31 -338
- 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 +21 -16
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAgBH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAuBvD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIvD"}
|
package/dist/index.js
CHANGED
|
@@ -1,350 +1,43 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @makitt/mds-mcp-server — MCP server for
|
|
3
|
+
* @makitt/mds-mcp-server — MCP server for MDS.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* Fabrication 0 의 최종 layer — 사용자가 mds 의 props / 안티패턴 / 사용 약속을 정확히 lookup.
|
|
7
|
-
*
|
|
8
|
-
* Tools:
|
|
9
|
-
* - mds_components_list — 모든 컴포넌트 list (layer 필터)
|
|
10
|
-
* - mds_components_get — 특정 컴포넌트의 full spec (props/types/description)
|
|
11
|
-
* - mds_components_search — text search (name / description / prop)
|
|
12
|
-
* - mds_playbook_list — 모든 Playbook area list
|
|
13
|
-
* - mds_playbook_get — 특정 Playbook 의 content (form / feedback / data-grid 등)
|
|
14
|
-
* - mds_playbook_search — Playbook 의 decision matrix / 안티패턴 검색
|
|
15
|
-
*
|
|
16
|
-
* Transport: stdio (Claude Code / Cursor 호환)
|
|
17
|
-
*
|
|
18
|
-
* Setup:
|
|
19
|
-
* 1. Build: `pnpm build`
|
|
20
|
-
* 2. Claude Code MCP config: ~/.claude/claude_desktop_config.json
|
|
21
|
-
* {
|
|
22
|
-
* "mcpServers": {
|
|
23
|
-
* "mds": { "command": "node", "args": ["/path/to/mds-mcp-server/dist/index.js"] }
|
|
24
|
-
* }
|
|
25
|
-
* }
|
|
5
|
+
* Transport: stdio (Claude Code / Cursor compatible)
|
|
26
6
|
*/
|
|
27
|
-
import {
|
|
28
|
-
import { dirname, resolve } from 'node:path';
|
|
7
|
+
import { realpathSync } from 'node:fs';
|
|
29
8
|
import { fileURLToPath } from 'node:url';
|
|
30
9
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
31
10
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
32
|
-
import { CallToolRequestSchema, ListToolsRequestSchema
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return
|
|
49
|
-
}
|
|
50
|
-
function resolvePlaybookDir() {
|
|
51
|
-
if (process.env.MDS_PLAYBOOK_DIR)
|
|
52
|
-
return process.env.MDS_PLAYBOOK_DIR;
|
|
53
|
-
const embedded = resolve(__dirname, 'data', 'playbook');
|
|
54
|
-
if (existsSync(embedded))
|
|
55
|
-
return embedded;
|
|
56
|
-
return resolve(__dirname, '..', '..', 'mds', 'docs', 'playbook');
|
|
11
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
12
|
+
import { SERVER_VERSION } from './loaders.js';
|
|
13
|
+
import { callMdsTool, listMdsTools } from './tools.js';
|
|
14
|
+
const moduleFilePath = fileURLToPath(import.meta.url);
|
|
15
|
+
export { callMdsTool, listMdsTools } from './tools.js';
|
|
16
|
+
function createMdsMcpServer() {
|
|
17
|
+
const server = new Server({
|
|
18
|
+
name: 'mds-mcp-server',
|
|
19
|
+
version: SERVER_VERSION,
|
|
20
|
+
}, {
|
|
21
|
+
capabilities: {
|
|
22
|
+
tools: {},
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
server.setRequestHandler(ListToolsRequestSchema, () => ({ tools: listMdsTools() }));
|
|
26
|
+
server.setRequestHandler(CallToolRequestSchema, (request) => callMdsTool(request.params.name, request.params.arguments));
|
|
27
|
+
return server;
|
|
57
28
|
}
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
try {
|
|
63
|
-
const pkgPath = resolve(__dirname, '..', 'package.json');
|
|
64
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
65
|
-
return pkg.version ?? '0.0.0';
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
return '0.0.0';
|
|
69
|
-
}
|
|
29
|
+
export async function startMdsMcpServer() {
|
|
30
|
+
const server = createMdsMcpServer();
|
|
31
|
+
const transport = new StdioServerTransport();
|
|
32
|
+
await server.connect(transport);
|
|
70
33
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (cachedCatalog)
|
|
77
|
-
return cachedCatalog;
|
|
78
|
-
if (!existsSync(CATALOG_PATH)) {
|
|
79
|
-
throw new Error(`Catalog not found at ${CATALOG_PATH}. Run \`pnpm build:catalog\` in @makitt/mds first.`);
|
|
80
|
-
}
|
|
81
|
-
cachedCatalog = JSON.parse(readFileSync(CATALOG_PATH, 'utf-8'));
|
|
82
|
-
return cachedCatalog;
|
|
34
|
+
function isMainModule() {
|
|
35
|
+
const entrypoint = process.argv[1];
|
|
36
|
+
if (!entrypoint)
|
|
37
|
+
return false;
|
|
38
|
+
return realpathSync(entrypoint) === realpathSync(moduleFilePath);
|
|
83
39
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return cachedPlaybooks;
|
|
87
|
-
cachedPlaybooks = {};
|
|
88
|
-
if (!existsSync(PLAYBOOK_DIR)) {
|
|
89
|
-
throw new Error(`Playbook dir not found at ${PLAYBOOK_DIR}. Expected packages/mds/docs/playbook/`);
|
|
90
|
-
}
|
|
91
|
-
for (const file of readdirSync(PLAYBOOK_DIR)) {
|
|
92
|
-
if (file.endsWith('.md')) {
|
|
93
|
-
const area = file.replace(/\.md$/, '');
|
|
94
|
-
cachedPlaybooks[area] = readFileSync(resolve(PLAYBOOK_DIR, file), 'utf-8');
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return cachedPlaybooks;
|
|
40
|
+
if (isMainModule()) {
|
|
41
|
+
await startMdsMcpServer();
|
|
98
42
|
}
|
|
99
|
-
// ─── Server setup ────────────────────────────────────────────────────
|
|
100
|
-
const server = new Server({
|
|
101
|
-
name: 'mds-mcp-server',
|
|
102
|
-
version: SERVER_VERSION,
|
|
103
|
-
}, {
|
|
104
|
-
capabilities: {
|
|
105
|
-
tools: {},
|
|
106
|
-
},
|
|
107
|
-
});
|
|
108
|
-
// ─── Dynamic schema enum 의 source ───────────────────────────────────
|
|
109
|
-
// 새 layer / playbook 추가 시 src/index.ts 의 enum 을 수동 갱신할 필요 없음 — file system + catalog 에서 자동 추출.
|
|
110
|
-
const LAYERS_FROM_CATALOG = (() => {
|
|
111
|
-
try {
|
|
112
|
-
return loadCatalog().layers;
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
// dev fallback (catalog 가 아직 build 안 됐을 때) — published package 는 항상 catalog 동봉
|
|
116
|
-
return ['primitives', 'compounds', 'overlays', 'data', 'patterns', 'shells', 'foundations'];
|
|
117
|
-
}
|
|
118
|
-
})();
|
|
119
|
-
const PLAYBOOK_AREAS_FROM_FS = (() => {
|
|
120
|
-
try {
|
|
121
|
-
return Object.keys(loadPlaybooks()).sort();
|
|
122
|
-
}
|
|
123
|
-
catch {
|
|
124
|
-
return [];
|
|
125
|
-
}
|
|
126
|
-
})();
|
|
127
|
-
// ─── Tool list ───────────────────────────────────────────────────────
|
|
128
|
-
server.setRequestHandler(ListToolsRequestSchema, () => ({
|
|
129
|
-
tools: [
|
|
130
|
-
{
|
|
131
|
-
name: 'mds_components_list',
|
|
132
|
-
description: `List all mds components. Optionally filter by layer (${LAYERS_FROM_CATALOG.join(' / ')}).`,
|
|
133
|
-
inputSchema: {
|
|
134
|
-
type: 'object',
|
|
135
|
-
properties: {
|
|
136
|
-
layer: {
|
|
137
|
-
type: 'string',
|
|
138
|
-
description: 'Optional layer filter',
|
|
139
|
-
enum: LAYERS_FROM_CATALOG,
|
|
140
|
-
},
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
name: 'mds_components_get',
|
|
146
|
-
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.',
|
|
147
|
-
inputSchema: {
|
|
148
|
-
type: 'object',
|
|
149
|
-
properties: {
|
|
150
|
-
name: {
|
|
151
|
-
type: 'string',
|
|
152
|
-
description: 'Component name (PascalCase). Sub-components use dot notation (e.g., "Field.Root", "Modal.Body", "Drawer.Footer").',
|
|
153
|
-
},
|
|
154
|
-
},
|
|
155
|
-
required: ['name'],
|
|
156
|
-
},
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
name: 'mds_components_search',
|
|
160
|
-
description: 'Text search across all components — matches component name, description, and prop names.',
|
|
161
|
-
inputSchema: {
|
|
162
|
-
type: 'object',
|
|
163
|
-
properties: {
|
|
164
|
-
query: { type: 'string', description: 'Search query (case-insensitive)' },
|
|
165
|
-
limit: { type: 'number', description: 'Max results (default 20)' },
|
|
166
|
-
},
|
|
167
|
-
required: ['query'],
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
name: 'mds_playbook_list',
|
|
172
|
-
description: `List all available Playbook areas — ${PLAYBOOK_AREAS_FROM_FS.join(' / ')}.`,
|
|
173
|
-
inputSchema: { type: 'object', properties: {} },
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
name: 'mds_playbook_get',
|
|
177
|
-
description: 'Get the full content of a Playbook area (decision matrix + anti-patterns + mobile variants + TBD). Use this BEFORE making design decisions (which Modal vs Drawer? Toast vs Banner? page-form vs modal-form?).',
|
|
178
|
-
inputSchema: {
|
|
179
|
-
type: 'object',
|
|
180
|
-
properties: {
|
|
181
|
-
area: {
|
|
182
|
-
type: 'string',
|
|
183
|
-
description: 'Playbook area name',
|
|
184
|
-
enum: PLAYBOOK_AREAS_FROM_FS,
|
|
185
|
-
},
|
|
186
|
-
},
|
|
187
|
-
required: ['area'],
|
|
188
|
-
},
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
name: 'mds_playbook_search',
|
|
192
|
-
description: 'Search across all Playbooks — matches decision matrix entries, anti-patterns, and cross-cutting axes.',
|
|
193
|
-
inputSchema: {
|
|
194
|
-
type: 'object',
|
|
195
|
-
properties: {
|
|
196
|
-
query: { type: 'string', description: 'Search query (case-insensitive)' },
|
|
197
|
-
limit: { type: 'number', description: 'Max matched lines (default 30)' },
|
|
198
|
-
},
|
|
199
|
-
required: ['query'],
|
|
200
|
-
},
|
|
201
|
-
},
|
|
202
|
-
],
|
|
203
|
-
}));
|
|
204
|
-
// ─── Tool handlers ──────────────────────────────────────────────────
|
|
205
|
-
server.setRequestHandler(CallToolRequestSchema, (request) => {
|
|
206
|
-
const { name, arguments: args } = request.params;
|
|
207
|
-
try {
|
|
208
|
-
if (name === 'mds_components_list') {
|
|
209
|
-
const catalog = loadCatalog();
|
|
210
|
-
const layer = args?.layer ?? undefined;
|
|
211
|
-
const components = Object.values(catalog.components)
|
|
212
|
-
.filter((c) => !layer || c.layer === layer)
|
|
213
|
-
.map((c) => ({ name: c.name, layer: c.layer, category: c.category, description: c.description }));
|
|
214
|
-
return {
|
|
215
|
-
content: [
|
|
216
|
-
{
|
|
217
|
-
type: 'text',
|
|
218
|
-
text: JSON.stringify({ total: components.length, layer: layer ?? 'all', components }, null, 2),
|
|
219
|
-
},
|
|
220
|
-
],
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
if (name === 'mds_components_get') {
|
|
224
|
-
const catalog = loadCatalog();
|
|
225
|
-
const componentName = args?.name;
|
|
226
|
-
const component = catalog.components[componentName];
|
|
227
|
-
if (!component) {
|
|
228
|
-
const suggestions = Object.keys(catalog.components)
|
|
229
|
-
.filter((n) => n.toLowerCase().includes(componentName.toLowerCase()))
|
|
230
|
-
.slice(0, 5);
|
|
231
|
-
return {
|
|
232
|
-
content: [
|
|
233
|
-
{
|
|
234
|
-
type: 'text',
|
|
235
|
-
text: `Component "${componentName}" not found in catalog. Did you mean:\n${suggestions.map((s) => ` - ${s}`).join('\n')}\n\nUse mds_components_list or mds_components_search.`,
|
|
236
|
-
},
|
|
237
|
-
],
|
|
238
|
-
isError: true,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
return {
|
|
242
|
-
content: [{ type: 'text', text: JSON.stringify(component, null, 2) }],
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
if (name === 'mds_components_search') {
|
|
246
|
-
const catalog = loadCatalog();
|
|
247
|
-
const query = (args?.query ?? '').toLowerCase();
|
|
248
|
-
const limit = args?.limit ?? 20;
|
|
249
|
-
const matches = Object.values(catalog.components)
|
|
250
|
-
.filter((c) => {
|
|
251
|
-
if (c.name.toLowerCase().includes(query))
|
|
252
|
-
return true;
|
|
253
|
-
if (c.description?.toLowerCase().includes(query))
|
|
254
|
-
return true;
|
|
255
|
-
return c.props.some((p) => p.name.toLowerCase().includes(query) ||
|
|
256
|
-
p.description?.toLowerCase().includes(query));
|
|
257
|
-
})
|
|
258
|
-
.slice(0, limit)
|
|
259
|
-
.map((c) => ({
|
|
260
|
-
name: c.name,
|
|
261
|
-
layer: c.layer,
|
|
262
|
-
description: c.description?.slice(0, 200),
|
|
263
|
-
matchedProps: c.props
|
|
264
|
-
.filter((p) => p.name.toLowerCase().includes(query) ||
|
|
265
|
-
p.description?.toLowerCase().includes(query))
|
|
266
|
-
.slice(0, 3)
|
|
267
|
-
.map((p) => p.name),
|
|
268
|
-
}));
|
|
269
|
-
return {
|
|
270
|
-
content: [
|
|
271
|
-
{
|
|
272
|
-
type: 'text',
|
|
273
|
-
text: JSON.stringify({ total: matches.length, query, matches }, null, 2),
|
|
274
|
-
},
|
|
275
|
-
],
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
if (name === 'mds_playbook_list') {
|
|
279
|
-
const playbooks = loadPlaybooks();
|
|
280
|
-
return {
|
|
281
|
-
content: [
|
|
282
|
-
{
|
|
283
|
-
type: 'text',
|
|
284
|
-
text: JSON.stringify({ areas: Object.keys(playbooks).sort(), count: Object.keys(playbooks).length }, null, 2),
|
|
285
|
-
},
|
|
286
|
-
],
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
if (name === 'mds_playbook_get') {
|
|
290
|
-
const playbooks = loadPlaybooks();
|
|
291
|
-
const area = args?.area;
|
|
292
|
-
const content = playbooks[area];
|
|
293
|
-
if (!content) {
|
|
294
|
-
return {
|
|
295
|
-
content: [
|
|
296
|
-
{
|
|
297
|
-
type: 'text',
|
|
298
|
-
text: `Playbook area "${area}" not found. Available: ${Object.keys(playbooks).join(', ')}`,
|
|
299
|
-
},
|
|
300
|
-
],
|
|
301
|
-
isError: true,
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
return { content: [{ type: 'text', text: content }] };
|
|
305
|
-
}
|
|
306
|
-
if (name === 'mds_playbook_search') {
|
|
307
|
-
const playbooks = loadPlaybooks();
|
|
308
|
-
const query = (args?.query ?? '').toLowerCase();
|
|
309
|
-
const limit = args?.limit ?? 30;
|
|
310
|
-
const matches = [];
|
|
311
|
-
for (const [area, content] of Object.entries(playbooks)) {
|
|
312
|
-
const lines = content.split('\n');
|
|
313
|
-
for (let i = 0; i < lines.length; i++) {
|
|
314
|
-
const line = lines[i];
|
|
315
|
-
if (line.toLowerCase().includes(query)) {
|
|
316
|
-
matches.push({ area, line: i + 1, text: line.trim() });
|
|
317
|
-
if (matches.length >= limit)
|
|
318
|
-
break;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
if (matches.length >= limit)
|
|
322
|
-
break;
|
|
323
|
-
}
|
|
324
|
-
return {
|
|
325
|
-
content: [
|
|
326
|
-
{
|
|
327
|
-
type: 'text',
|
|
328
|
-
text: JSON.stringify({ total: matches.length, query, matches }, null, 2),
|
|
329
|
-
},
|
|
330
|
-
],
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
return {
|
|
334
|
-
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
335
|
-
isError: true,
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
catch (err) {
|
|
339
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
340
|
-
return {
|
|
341
|
-
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
342
|
-
isError: true,
|
|
343
|
-
};
|
|
344
|
-
}
|
|
345
|
-
});
|
|
346
|
-
// ─── Start ───────────────────────────────────────────────────────────
|
|
347
|
-
const transport = new StdioServerTransport();
|
|
348
|
-
await server.connect(transport);
|
|
349
|
-
// MCP server 는 stdio 통해 통신 — 시작 후 process 살아있음 (transport 자동 lifecycle).
|
|
350
43
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAEnG,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIvD,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvD,SAAS,kBAAkB;IACzB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,cAAc;KACxB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE,CAC1D,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,SAA0B,CAAC,CAC5E,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,YAAY,CAAC,cAAc,CAAC,CAAC;AACnE,CAAC;AAED,IAAI,YAAY,EAAE,EAAE,CAAC;IACnB,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Catalog, MarkdownDoc, MetadataValue } from './types.js';
|
|
2
|
+
export declare function resolveServerVersion(): string;
|
|
3
|
+
export declare const SERVER_VERSION: string;
|
|
4
|
+
export declare function loadCatalog(): Catalog;
|
|
5
|
+
export declare function loadPlaybooks(): Record<string, string>;
|
|
6
|
+
export declare function parseFrontmatter(content: string): Record<string, MetadataValue>;
|
|
7
|
+
export declare function loadRecipes(): Record<string, MarkdownDoc>;
|
|
8
|
+
//# sourceMappingURL=loaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaders.d.ts","sourceRoot":"","sources":["../src/loaders.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA6BtE,wBAAgB,oBAAoB,IAAI,MAAM,CAQ7C;AAED,eAAO,MAAM,cAAc,QAAyB,CAAC;AAMrD,wBAAgB,WAAW,IAAI,OAAO,CASrC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAetD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAwB/E;AAMD,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAmBzD"}
|
package/dist/loaders.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
function resolveCatalogPath() {
|
|
6
|
+
if (process.env.MDS_CATALOG_PATH)
|
|
7
|
+
return process.env.MDS_CATALOG_PATH;
|
|
8
|
+
const embedded = resolve(moduleDir, 'data', 'catalog.json');
|
|
9
|
+
if (existsSync(embedded))
|
|
10
|
+
return embedded;
|
|
11
|
+
return resolve(moduleDir, '..', '..', 'mds', 'dist', 'catalog.json');
|
|
12
|
+
}
|
|
13
|
+
function resolvePlaybookDir() {
|
|
14
|
+
if (process.env.MDS_PLAYBOOK_DIR)
|
|
15
|
+
return process.env.MDS_PLAYBOOK_DIR;
|
|
16
|
+
const embedded = resolve(moduleDir, 'data', 'playbook');
|
|
17
|
+
if (existsSync(embedded))
|
|
18
|
+
return embedded;
|
|
19
|
+
return resolve(moduleDir, '..', '..', 'mds', 'docs', 'playbook');
|
|
20
|
+
}
|
|
21
|
+
function resolveRecipeDir() {
|
|
22
|
+
if (process.env.MDS_RECIPE_DIR)
|
|
23
|
+
return process.env.MDS_RECIPE_DIR;
|
|
24
|
+
const embedded = resolve(moduleDir, 'data', 'recipes');
|
|
25
|
+
if (existsSync(embedded))
|
|
26
|
+
return embedded;
|
|
27
|
+
return resolve(moduleDir, '..', '..', 'mds', 'docs', 'recipes');
|
|
28
|
+
}
|
|
29
|
+
const CATALOG_PATH = resolveCatalogPath();
|
|
30
|
+
const PLAYBOOK_DIR = resolvePlaybookDir();
|
|
31
|
+
const RECIPE_DIR = resolveRecipeDir();
|
|
32
|
+
export function resolveServerVersion() {
|
|
33
|
+
try {
|
|
34
|
+
const pkgPath = resolve(moduleDir, '..', 'package.json');
|
|
35
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
36
|
+
return pkg.version ?? '0.0.0';
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return '0.0.0';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export const SERVER_VERSION = resolveServerVersion();
|
|
43
|
+
let cachedCatalog = null;
|
|
44
|
+
let cachedPlaybooks = null;
|
|
45
|
+
let cachedRecipes = null;
|
|
46
|
+
export function loadCatalog() {
|
|
47
|
+
if (cachedCatalog)
|
|
48
|
+
return cachedCatalog;
|
|
49
|
+
if (!existsSync(CATALOG_PATH)) {
|
|
50
|
+
throw new Error(`Catalog not found at ${CATALOG_PATH}. Run \`pnpm build:catalog\` in @makitt/mds first.`);
|
|
51
|
+
}
|
|
52
|
+
cachedCatalog = JSON.parse(readFileSync(CATALOG_PATH, 'utf-8'));
|
|
53
|
+
return cachedCatalog;
|
|
54
|
+
}
|
|
55
|
+
export function loadPlaybooks() {
|
|
56
|
+
if (cachedPlaybooks)
|
|
57
|
+
return cachedPlaybooks;
|
|
58
|
+
cachedPlaybooks = {};
|
|
59
|
+
if (!existsSync(PLAYBOOK_DIR)) {
|
|
60
|
+
throw new Error(`Playbook dir not found at ${PLAYBOOK_DIR}. Expected packages/mds/docs/playbook/`);
|
|
61
|
+
}
|
|
62
|
+
for (const file of readdirSync(PLAYBOOK_DIR)) {
|
|
63
|
+
if (file.endsWith('.md')) {
|
|
64
|
+
const area = file.replace(/\.md$/, '');
|
|
65
|
+
cachedPlaybooks[area] = readFileSync(resolve(PLAYBOOK_DIR, file), 'utf-8');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return cachedPlaybooks;
|
|
69
|
+
}
|
|
70
|
+
export function parseFrontmatter(content) {
|
|
71
|
+
if (!content.startsWith('---\n'))
|
|
72
|
+
return {};
|
|
73
|
+
const end = content.indexOf('\n---', 4);
|
|
74
|
+
if (end === -1)
|
|
75
|
+
return {};
|
|
76
|
+
const metadata = {};
|
|
77
|
+
let currentKey;
|
|
78
|
+
for (const line of content.slice(4, end).split('\n')) {
|
|
79
|
+
const item = line.match(/^\s*-\s+(.+)$/);
|
|
80
|
+
if (item && currentKey) {
|
|
81
|
+
const existing = metadata[currentKey];
|
|
82
|
+
metadata[currentKey] = [...(Array.isArray(existing) ? existing : []), item[1].trim()];
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const field = line.match(/^([A-Za-z0-9_-]+):\s*(.*)$/);
|
|
86
|
+
if (!field)
|
|
87
|
+
continue;
|
|
88
|
+
const key = field[1];
|
|
89
|
+
const value = field[2].trim();
|
|
90
|
+
metadata[key] = value ? value : [];
|
|
91
|
+
currentKey = value ? undefined : key;
|
|
92
|
+
}
|
|
93
|
+
return metadata;
|
|
94
|
+
}
|
|
95
|
+
function titleFromMarkdown(content, fallback) {
|
|
96
|
+
return content.match(/^#\s+(.+)$/m)?.[1]?.trim() ?? fallback;
|
|
97
|
+
}
|
|
98
|
+
export function loadRecipes() {
|
|
99
|
+
if (cachedRecipes)
|
|
100
|
+
return cachedRecipes;
|
|
101
|
+
cachedRecipes = {};
|
|
102
|
+
if (!existsSync(RECIPE_DIR)) {
|
|
103
|
+
throw new Error(`Recipe dir not found at ${RECIPE_DIR}. Expected packages/mds/docs/recipes/`);
|
|
104
|
+
}
|
|
105
|
+
for (const file of readdirSync(RECIPE_DIR)) {
|
|
106
|
+
if (!file.endsWith('.md'))
|
|
107
|
+
continue;
|
|
108
|
+
const id = file.replace(/\.md$/, '');
|
|
109
|
+
const content = readFileSync(resolve(RECIPE_DIR, file), 'utf-8');
|
|
110
|
+
const metadata = parseFrontmatter(content);
|
|
111
|
+
cachedRecipes[id] = {
|
|
112
|
+
id,
|
|
113
|
+
title: typeof metadata.title === 'string' ? metadata.title : titleFromMarkdown(content, id),
|
|
114
|
+
metadata,
|
|
115
|
+
content,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
return cachedRecipes;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=loaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaders.js","sourceRoot":"","sources":["../src/loaders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MarkdownDoc } from './types.js';
|
|
2
|
+
export declare function metadataArray(doc: MarkdownDoc, key: string): string[];
|
|
3
|
+
export declare function recipeSearchHaystack(recipe: MarkdownDoc): string;
|
|
4
|
+
export declare function recipeMatchesQuery(recipe: MarkdownDoc, queryTokens: string[]): boolean;
|
|
5
|
+
export declare function summarizeRecipe(recipe: MarkdownDoc): Record<string, unknown>;
|
|
6
|
+
export declare function selectCodegenRecipes(task: string, requestedRecipe?: string): MarkdownDoc[];
|
|
7
|
+
export declare function scoreRecipeForTask(recipe: MarkdownDoc, queryTokens: string[]): number;
|
|
8
|
+
export declare function collectRecipeMatches(recipes: Record<string, MarkdownDoc>, query: string, limit: number): Array<{
|
|
9
|
+
id: string;
|
|
10
|
+
line: number;
|
|
11
|
+
text: string;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=recipes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAUhE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAItF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ5E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAc1F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAcrF;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAYnD"}
|
package/dist/recipes.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { loadRecipes } from './loaders.js';
|
|
2
|
+
import { normalizeText, tokenize } from './text.js';
|
|
3
|
+
export function metadataArray(doc, key) {
|
|
4
|
+
const value = doc.metadata[key];
|
|
5
|
+
if (Array.isArray(value))
|
|
6
|
+
return value;
|
|
7
|
+
return typeof value === 'string' && value ? [value] : [];
|
|
8
|
+
}
|
|
9
|
+
export function recipeSearchHaystack(recipe) {
|
|
10
|
+
const parts = [
|
|
11
|
+
recipe.id,
|
|
12
|
+
recipe.title,
|
|
13
|
+
recipe.content,
|
|
14
|
+
...metadataArray(recipe, 'components'),
|
|
15
|
+
...metadataArray(recipe, 'playbooks'),
|
|
16
|
+
...metadataArray(recipe, 'status'),
|
|
17
|
+
];
|
|
18
|
+
return normalizeText(parts.join(' '));
|
|
19
|
+
}
|
|
20
|
+
export function recipeMatchesQuery(recipe, queryTokens) {
|
|
21
|
+
if (queryTokens.length === 0)
|
|
22
|
+
return true;
|
|
23
|
+
const haystack = recipeSearchHaystack(recipe);
|
|
24
|
+
return queryTokens.every((token) => haystack.includes(token));
|
|
25
|
+
}
|
|
26
|
+
export function summarizeRecipe(recipe) {
|
|
27
|
+
return {
|
|
28
|
+
id: recipe.id,
|
|
29
|
+
title: recipe.title,
|
|
30
|
+
status: recipe.metadata.status ?? 'implemented',
|
|
31
|
+
components: metadataArray(recipe, 'components'),
|
|
32
|
+
playbooks: metadataArray(recipe, 'playbooks'),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function selectCodegenRecipes(task, requestedRecipe) {
|
|
36
|
+
const recipes = loadRecipes();
|
|
37
|
+
if (requestedRecipe && recipes[requestedRecipe])
|
|
38
|
+
return [recipes[requestedRecipe]];
|
|
39
|
+
const queryTokens = tokenize(task);
|
|
40
|
+
return Object.values(recipes)
|
|
41
|
+
.map((recipe) => ({
|
|
42
|
+
recipe,
|
|
43
|
+
score: scoreRecipeForTask(recipe, queryTokens),
|
|
44
|
+
}))
|
|
45
|
+
.filter(({ score }) => score > 0)
|
|
46
|
+
.sort((a, b) => b.score - a.score || a.recipe.id.localeCompare(b.recipe.id))
|
|
47
|
+
.slice(0, 3)
|
|
48
|
+
.map(({ recipe }) => recipe);
|
|
49
|
+
}
|
|
50
|
+
export function scoreRecipeForTask(recipe, queryTokens) {
|
|
51
|
+
if (queryTokens.length === 0)
|
|
52
|
+
return 1;
|
|
53
|
+
const haystack = recipeSearchHaystack(recipe);
|
|
54
|
+
const title = normalizeText(recipe.title);
|
|
55
|
+
const id = normalizeText(recipe.id);
|
|
56
|
+
let score = 0;
|
|
57
|
+
for (const token of queryTokens) {
|
|
58
|
+
if (id.includes(token))
|
|
59
|
+
score += 5;
|
|
60
|
+
else if (title.includes(token))
|
|
61
|
+
score += 4;
|
|
62
|
+
else if (haystack.includes(token))
|
|
63
|
+
score += 1;
|
|
64
|
+
}
|
|
65
|
+
return score;
|
|
66
|
+
}
|
|
67
|
+
export function collectRecipeMatches(recipes, query, limit) {
|
|
68
|
+
const matches = [];
|
|
69
|
+
for (const recipe of Object.values(recipes)) {
|
|
70
|
+
const lines = recipe.content.split('\n');
|
|
71
|
+
for (let index = 0; index < lines.length; index++) {
|
|
72
|
+
const line = lines[index];
|
|
73
|
+
if (!line.toLowerCase().includes(query))
|
|
74
|
+
continue;
|
|
75
|
+
matches.push({ id: recipe.id, line: index + 1, text: line.trim() });
|
|
76
|
+
if (matches.length >= limit)
|
|
77
|
+
return matches;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return matches;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=recipes.js.map
|