@vielzeug/codex 1.0.2
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 -0
- package/data/.cache.json +33 -0
- package/data/llms-full.txt +43590 -0
- package/data/llms.txt +117 -0
- package/data/vielzeug-data.json +14554 -0
- package/dist/__tests__/server.test.js +346 -0
- package/dist/__tests__/server.test.js.map +1 -0
- package/dist/__tests__/unit.test.js +502 -0
- package/dist/__tests__/unit.test.js.map +1 -0
- package/dist/_log.js +5 -0
- package/dist/_log.js.map +1 -0
- package/dist/cli.js +94 -0
- package/dist/cli.js.map +1 -0
- package/dist/data.js +91 -0
- package/dist/data.js.map +1 -0
- package/dist/errors.js +26 -0
- package/dist/errors.js.map +1 -0
- package/dist/frontmatter.js +72 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/generator.js +176 -0
- package/dist/generator.js.map +1 -0
- package/dist/http.js +108 -0
- package/dist/http.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/llms.js +162 -0
- package/dist/llms.js.map +1 -0
- package/dist/port.js +12 -0
- package/dist/port.js.map +1 -0
- package/dist/resources.js +4 -0
- package/dist/resources.js.map +1 -0
- package/dist/search.js +125 -0
- package/dist/search.js.map +1 -0
- package/dist/server.js +13 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/index.js +62 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/packages.js +196 -0
- package/dist/tools/packages.js.map +1 -0
- package/dist/tools/refine.js +329 -0
- package/dist/tools/refine.js.map +1 -0
- package/dist/tools/schema.js +37 -0
- package/dist/tools/schema.js.map +1 -0
- package/dist/tools/shared.js +27 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools.js +1040 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
|
+
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
|
|
3
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { dirname, resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { afterEach, beforeAll, describe, expect, it } from 'vitest';
|
|
7
|
+
import { loadData } from '../data.js';
|
|
8
|
+
import { createServer } from '../server.js';
|
|
9
|
+
import { SCHEMA_VERSION } from '../types.js';
|
|
10
|
+
let data;
|
|
11
|
+
const activeClients = [];
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const dataFile = resolve(__dirname, '../../data/vielzeug-data.json');
|
|
14
|
+
beforeAll(async () => {
|
|
15
|
+
// Regenerate if missing or if loadData throws (e.g. schema version mismatch from stale file)
|
|
16
|
+
const needsRegen = !existsSync(dataFile) ||
|
|
17
|
+
(() => {
|
|
18
|
+
try {
|
|
19
|
+
loadData();
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
})();
|
|
26
|
+
if (needsRegen) {
|
|
27
|
+
// Import the generator function directly — faster than spawning a subprocess
|
|
28
|
+
const { generateBundledData } = await import("../../scripts/generator.js");
|
|
29
|
+
const { data: generated } = generateBundledData({ incremental: false });
|
|
30
|
+
mkdirSync(dirname(dataFile), { recursive: true });
|
|
31
|
+
writeFileSync(dataFile, `${JSON.stringify(generated, null, 2)}\n`, 'utf8');
|
|
32
|
+
}
|
|
33
|
+
data = loadData();
|
|
34
|
+
});
|
|
35
|
+
afterEach(async () => {
|
|
36
|
+
const clients = activeClients.splice(0);
|
|
37
|
+
for (const client of clients) {
|
|
38
|
+
await client.close();
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
async function createTestPair() {
|
|
42
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
43
|
+
const server = createServer(data);
|
|
44
|
+
await server.connect(serverTransport);
|
|
45
|
+
const client = new Client({ name: 'test-client', version: '1.0.0' });
|
|
46
|
+
await client.connect(clientTransport);
|
|
47
|
+
activeClients.push(client);
|
|
48
|
+
return { client, server };
|
|
49
|
+
}
|
|
50
|
+
function readText(result) {
|
|
51
|
+
return result.content[0]?.text ?? '';
|
|
52
|
+
}
|
|
53
|
+
describe('vielzeug MCP server', () => {
|
|
54
|
+
it('registers seven tools', async () => {
|
|
55
|
+
const { client } = await createTestPair();
|
|
56
|
+
const { tools } = await client.listTools();
|
|
57
|
+
const names = tools.map((t) => t.name).sort();
|
|
58
|
+
expect(names).toEqual([
|
|
59
|
+
'get-component',
|
|
60
|
+
'get-docs',
|
|
61
|
+
'get-package',
|
|
62
|
+
'get-source',
|
|
63
|
+
'list-components',
|
|
64
|
+
'list-packages',
|
|
65
|
+
'search-packages',
|
|
66
|
+
]);
|
|
67
|
+
});
|
|
68
|
+
it('get-docs page enum only includes doc pages, not source', async () => {
|
|
69
|
+
const { client } = await createTestPair();
|
|
70
|
+
const { tools } = await client.listTools();
|
|
71
|
+
const tool = tools.find((t) => t.name === 'get-docs');
|
|
72
|
+
expect(tool).toBeDefined();
|
|
73
|
+
const schema = tool?.inputSchema;
|
|
74
|
+
expect(schema.properties['page'].enum).toEqual(['index', 'api', 'usage', 'examples']);
|
|
75
|
+
expect(schema.properties['page'].enum).not.toContain('source');
|
|
76
|
+
expect(schema.required).toContain('packageSlug');
|
|
77
|
+
});
|
|
78
|
+
it('list-packages returns all packages without internal docs payload', async () => {
|
|
79
|
+
const { client } = await createTestPair();
|
|
80
|
+
const result = (await client.callTool({ arguments: {}, name: 'list-packages' }));
|
|
81
|
+
const parsed = JSON.parse(readText(result));
|
|
82
|
+
expect(Array.isArray(parsed)).toBe(true);
|
|
83
|
+
expect(parsed.length).toBeGreaterThan(0);
|
|
84
|
+
expect(parsed[0]).toHaveProperty('name');
|
|
85
|
+
expect(parsed[0]).toHaveProperty('availableDocPages');
|
|
86
|
+
expect(parsed[0]).toHaveProperty('hasSource');
|
|
87
|
+
expect(parsed[0]).not.toHaveProperty('docs');
|
|
88
|
+
expect(parsed[0]).not.toHaveProperty('apiSource');
|
|
89
|
+
});
|
|
90
|
+
it('get-package returns a single PackageMeta object', async () => {
|
|
91
|
+
const { client } = await createTestPair();
|
|
92
|
+
const result = (await client.callTool({
|
|
93
|
+
arguments: { packageSlug: 'spell' },
|
|
94
|
+
name: 'get-package',
|
|
95
|
+
}));
|
|
96
|
+
const parsed = JSON.parse(readText(result));
|
|
97
|
+
expect(result.isError).not.toBe(true);
|
|
98
|
+
expect(parsed['slug']).toBe('spell');
|
|
99
|
+
expect(parsed).toHaveProperty('hasSource');
|
|
100
|
+
expect(parsed).not.toHaveProperty('docs');
|
|
101
|
+
});
|
|
102
|
+
it('get-package with unknown slug returns an error', async () => {
|
|
103
|
+
const { client } = await createTestPair();
|
|
104
|
+
const result = (await client.callTool({
|
|
105
|
+
arguments: { packageSlug: 'does-not-exist' },
|
|
106
|
+
name: 'get-package',
|
|
107
|
+
}));
|
|
108
|
+
expect(result.isError).toBe(true);
|
|
109
|
+
});
|
|
110
|
+
it('get-docs reads a doc page', async () => {
|
|
111
|
+
const { client } = await createTestPair();
|
|
112
|
+
const result = (await client.callTool({
|
|
113
|
+
arguments: { packageSlug: 'spell', page: 'api' },
|
|
114
|
+
name: 'get-docs',
|
|
115
|
+
}));
|
|
116
|
+
expect(result.isError).not.toBe(true);
|
|
117
|
+
expect(readText(result).length).toBeGreaterThan(0);
|
|
118
|
+
});
|
|
119
|
+
it('get-source returns the src/index.ts content', async () => {
|
|
120
|
+
const { client } = await createTestPair();
|
|
121
|
+
const result = (await client.callTool({
|
|
122
|
+
arguments: { packageSlug: 'spell' },
|
|
123
|
+
name: 'get-source',
|
|
124
|
+
}));
|
|
125
|
+
expect(result.isError).not.toBe(true);
|
|
126
|
+
expect(readText(result)).toContain('export');
|
|
127
|
+
});
|
|
128
|
+
it('get-docs rejects source as a page value', async () => {
|
|
129
|
+
const { client } = await createTestPair();
|
|
130
|
+
const result = (await client.callTool({
|
|
131
|
+
arguments: { packageSlug: 'spell', page: 'source' },
|
|
132
|
+
name: 'get-docs',
|
|
133
|
+
}));
|
|
134
|
+
expect(result.isError).toBe(true);
|
|
135
|
+
});
|
|
136
|
+
it('get-source returns isError for a package with no source', async () => {
|
|
137
|
+
// codex has no apiSource bundled (it's the MCP server itself, not a browser-accessible lib)
|
|
138
|
+
const { client } = await createTestPair();
|
|
139
|
+
const pkgMetas = JSON.parse(readText((await client.callTool({ arguments: {}, name: 'list-packages' }))));
|
|
140
|
+
const noSourceSlug = pkgMetas.find((p) => !p.hasSource)?.slug;
|
|
141
|
+
if (!noSourceSlug)
|
|
142
|
+
return; // all packages have source — skip
|
|
143
|
+
const result = (await client.callTool({
|
|
144
|
+
arguments: { packageSlug: noSourceSlug },
|
|
145
|
+
name: 'get-source',
|
|
146
|
+
}));
|
|
147
|
+
expect(result.isError).toBe(true);
|
|
148
|
+
expect(readText(result)).toContain('no src/index.ts source');
|
|
149
|
+
});
|
|
150
|
+
it('search-packages results include a name field on each hit', async () => {
|
|
151
|
+
const { client } = await createTestPair();
|
|
152
|
+
const result = (await client.callTool({
|
|
153
|
+
arguments: { query: 'signal' },
|
|
154
|
+
name: 'search-packages',
|
|
155
|
+
}));
|
|
156
|
+
expect(result.isError).not.toBe(true);
|
|
157
|
+
const hits = JSON.parse(readText(result));
|
|
158
|
+
expect(hits.length).toBeGreaterThan(0);
|
|
159
|
+
expect(typeof hits[0]?.['name']).toBe('string');
|
|
160
|
+
expect((hits[0]?.['name']).length).toBeGreaterThan(0);
|
|
161
|
+
});
|
|
162
|
+
it('search-packages returns source in matchedIn when query matches apiSource', async () => {
|
|
163
|
+
const { client } = await createTestPair();
|
|
164
|
+
// 'createServer' is only in codex apiSource — a reliable source-only match
|
|
165
|
+
const result = (await client.callTool({
|
|
166
|
+
arguments: { query: 'createServer' },
|
|
167
|
+
name: 'search-packages',
|
|
168
|
+
}));
|
|
169
|
+
expect(result.isError).not.toBe(true);
|
|
170
|
+
const hits = JSON.parse(readText(result));
|
|
171
|
+
const codexHit = hits.find((h) => h.slug === 'codex');
|
|
172
|
+
// codex may or may not have apiSource in the snapshot — test defensively
|
|
173
|
+
if (codexHit) {
|
|
174
|
+
expect(codexHit.matchedIn).toContain('source');
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
it('search-packages returns empty array for no matches', async () => {
|
|
178
|
+
const { client } = await createTestPair();
|
|
179
|
+
const result = (await client.callTool({
|
|
180
|
+
arguments: { query: 'zzz_no_match_xyz_' },
|
|
181
|
+
name: 'search-packages',
|
|
182
|
+
}));
|
|
183
|
+
expect(result.isError).not.toBe(true);
|
|
184
|
+
expect(JSON.parse(readText(result))).toEqual([]);
|
|
185
|
+
});
|
|
186
|
+
it('search-packages results have matchedIn as an array and a numeric score', async () => {
|
|
187
|
+
const { client } = await createTestPair();
|
|
188
|
+
const result = (await client.callTool({
|
|
189
|
+
arguments: { query: 'signal' },
|
|
190
|
+
name: 'search-packages',
|
|
191
|
+
}));
|
|
192
|
+
expect(result.isError).not.toBe(true);
|
|
193
|
+
const hits = JSON.parse(readText(result));
|
|
194
|
+
expect(hits.length).toBeGreaterThan(0);
|
|
195
|
+
expect(Array.isArray(hits[0]?.['matchedIn'])).toBe(true);
|
|
196
|
+
expect(typeof hits[0]?.['score']).toBe('number');
|
|
197
|
+
expect(hits[0]?.['score']).toBeGreaterThan(0);
|
|
198
|
+
});
|
|
199
|
+
it('search-packages scores name matches higher than description matches', async () => {
|
|
200
|
+
// ripple matches by name — should score higher than a package that only matches in description
|
|
201
|
+
const { client } = await createTestPair();
|
|
202
|
+
const result = (await client.callTool({
|
|
203
|
+
arguments: { query: 'ripple' },
|
|
204
|
+
name: 'search-packages',
|
|
205
|
+
}));
|
|
206
|
+
expect(result.isError).not.toBe(true);
|
|
207
|
+
const hits = JSON.parse(readText(result));
|
|
208
|
+
const rippleHit = hits.find((h) => h.slug === 'ripple');
|
|
209
|
+
if (rippleHit) {
|
|
210
|
+
// name match weight (3.9) is highest in metadata tier
|
|
211
|
+
expect(rippleHit.score).toBeGreaterThanOrEqual(3.9);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
it('list-components and get-component work when sigil metadata is available', async () => {
|
|
215
|
+
const { client } = await createTestPair();
|
|
216
|
+
const listResult = (await client.callTool({ arguments: {}, name: 'list-components' }));
|
|
217
|
+
if (listResult.isError) {
|
|
218
|
+
expect(readText(listResult)).toContain('Sigil component metadata is unavailable');
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const tags = JSON.parse(readText(listResult));
|
|
222
|
+
expect(Array.isArray(tags)).toBe(true);
|
|
223
|
+
expect(tags.length).toBeGreaterThan(0);
|
|
224
|
+
const firstTag = tags[0]?.tagName;
|
|
225
|
+
expect(typeof firstTag).toBe('string');
|
|
226
|
+
const componentResult = (await client.callTool({
|
|
227
|
+
arguments: { tagName: firstTag },
|
|
228
|
+
name: 'get-component',
|
|
229
|
+
}));
|
|
230
|
+
expect(componentResult.isError).not.toBe(true);
|
|
231
|
+
expect(readText(componentResult)).toContain(firstTag);
|
|
232
|
+
});
|
|
233
|
+
it('get-docs defaults to index page when page is omitted', async () => {
|
|
234
|
+
const { client } = await createTestPair();
|
|
235
|
+
const withPage = (await client.callTool({
|
|
236
|
+
arguments: { packageSlug: 'spell', page: 'index' },
|
|
237
|
+
name: 'get-docs',
|
|
238
|
+
}));
|
|
239
|
+
const withoutPage = (await client.callTool({
|
|
240
|
+
arguments: { packageSlug: 'spell' },
|
|
241
|
+
name: 'get-docs',
|
|
242
|
+
}));
|
|
243
|
+
expect(withPage.isError).not.toBe(true);
|
|
244
|
+
expect(withoutPage.isError).not.toBe(true);
|
|
245
|
+
expect(readText(withoutPage)).toBe(readText(withPage));
|
|
246
|
+
});
|
|
247
|
+
it('get-docs error lists available pages when requested page is missing', async () => {
|
|
248
|
+
const { client } = await createTestPair();
|
|
249
|
+
const result = (await client.callTool({
|
|
250
|
+
// 'source' is not a valid page enum value — triggers the enum-validation error
|
|
251
|
+
arguments: { packageSlug: 'spell', page: 'source' },
|
|
252
|
+
name: 'get-docs',
|
|
253
|
+
}));
|
|
254
|
+
expect(result.isError).toBe(true);
|
|
255
|
+
expect(readText(result)).toMatch(/index|api|usage|examples/);
|
|
256
|
+
});
|
|
257
|
+
it('unknown tool returns MethodNotFound error', async () => {
|
|
258
|
+
const { client } = await createTestPair();
|
|
259
|
+
await expect(client.callTool({ arguments: {}, name: 'no-such-tool' })).rejects.toThrow();
|
|
260
|
+
});
|
|
261
|
+
it('get-docs returns error when page enum is valid but package lacks that page', async () => {
|
|
262
|
+
// Use a synthetic data fixture with only index page — guarantees the missing-page path always runs
|
|
263
|
+
const syntheticData = {
|
|
264
|
+
packages: [
|
|
265
|
+
{
|
|
266
|
+
apiSource: null,
|
|
267
|
+
availableDocPages: ['index'],
|
|
268
|
+
category: '',
|
|
269
|
+
components: [],
|
|
270
|
+
description: 'test',
|
|
271
|
+
docs: { index: '# Test' },
|
|
272
|
+
exports: [],
|
|
273
|
+
keywords: [],
|
|
274
|
+
name: '@vielzeug/synthetic',
|
|
275
|
+
related: [],
|
|
276
|
+
slug: 'synthetic',
|
|
277
|
+
version: '1.0.0',
|
|
278
|
+
},
|
|
279
|
+
],
|
|
280
|
+
schemaVersion: SCHEMA_VERSION,
|
|
281
|
+
version: '0.0.0',
|
|
282
|
+
};
|
|
283
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
284
|
+
const srv = createServer(syntheticData);
|
|
285
|
+
await srv.connect(serverTransport);
|
|
286
|
+
const client = new Client({ name: 'test-missing-page', version: '1.0.0' });
|
|
287
|
+
await client.connect(clientTransport);
|
|
288
|
+
activeClients.push(client);
|
|
289
|
+
const result = (await client.callTool({
|
|
290
|
+
arguments: { packageSlug: 'synthetic', page: 'examples' },
|
|
291
|
+
name: 'get-docs',
|
|
292
|
+
}));
|
|
293
|
+
expect(result.isError).toBe(true);
|
|
294
|
+
expect(readText(result)).toMatch(/Available/);
|
|
295
|
+
});
|
|
296
|
+
it('list-components returns error when Sigil CEM is absent', async () => {
|
|
297
|
+
const dataWithNoSigil = {
|
|
298
|
+
...data,
|
|
299
|
+
packages: data.packages.map((p) => (p.slug === 'sigil' ? { ...p, components: [] } : p)),
|
|
300
|
+
};
|
|
301
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
302
|
+
const srv = createServer(dataWithNoSigil);
|
|
303
|
+
await srv.connect(serverTransport);
|
|
304
|
+
const client = new Client({ name: 'test-no-sigil-list', version: '1.0.0' });
|
|
305
|
+
await client.connect(clientTransport);
|
|
306
|
+
activeClients.push(client);
|
|
307
|
+
const result = (await client.callTool({ arguments: {}, name: 'list-components' }));
|
|
308
|
+
expect(result.isError).toBe(true);
|
|
309
|
+
expect(readText(result)).toContain('unavailable');
|
|
310
|
+
});
|
|
311
|
+
it('get-component returns error when Sigil CEM is absent', async () => {
|
|
312
|
+
// components: [] causes ToolContext.components to be null (tools.ts checks length > 0)
|
|
313
|
+
const dataWithNoSigil = {
|
|
314
|
+
...data,
|
|
315
|
+
packages: data.packages.map((p) => (p.slug === 'sigil' ? { ...p, components: [] } : p)),
|
|
316
|
+
};
|
|
317
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
318
|
+
const srv = createServer(dataWithNoSigil);
|
|
319
|
+
await srv.connect(serverTransport);
|
|
320
|
+
const client = new Client({ name: 'test-no-sigil', version: '1.0.0' });
|
|
321
|
+
await client.connect(clientTransport);
|
|
322
|
+
activeClients.push(client);
|
|
323
|
+
const result = (await client.callTool({
|
|
324
|
+
arguments: { tagName: 'sg-button' },
|
|
325
|
+
name: 'get-component',
|
|
326
|
+
}));
|
|
327
|
+
expect(result.isError).toBe(true);
|
|
328
|
+
expect(readText(result)).toContain('unavailable');
|
|
329
|
+
});
|
|
330
|
+
it('search-packages returns error when query exceeds 500 chars', async () => {
|
|
331
|
+
const { client } = await createTestPair();
|
|
332
|
+
const longQuery = 'a'.repeat(501);
|
|
333
|
+
const result = (await client.callTool({
|
|
334
|
+
arguments: { query: longQuery },
|
|
335
|
+
name: 'search-packages',
|
|
336
|
+
}));
|
|
337
|
+
expect(result.isError).toBe(true);
|
|
338
|
+
expect(readText(result)).toContain('500');
|
|
339
|
+
});
|
|
340
|
+
it('get-package requires packageSlug', async () => {
|
|
341
|
+
const { client } = await createTestPair();
|
|
342
|
+
const result = (await client.callTool({ arguments: {}, name: 'get-package' }));
|
|
343
|
+
expect(result.isError).toBe(true);
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
//# sourceMappingURL=server.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.test.js","sourceRoot":"","sources":["../../src/__tests__/server.test.ts"],"names":[],"mappings":"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"}
|