@kywi-software/mcp 0.13.0 → 0.15.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.
Files changed (40) hide show
  1. package/AGENT-PATTERNS.md +153 -17
  2. package/dist/site/tools/components.d.ts.map +1 -1
  3. package/dist/site/tools/components.js +5 -3
  4. package/dist/site/tools/components.js.map +1 -1
  5. package/dist/site/tools/layout.d.ts.map +1 -1
  6. package/dist/site/tools/layout.js +33 -3
  7. package/dist/site/tools/layout.js.map +1 -1
  8. package/dist/site/tools/menus.d.ts +13 -0
  9. package/dist/site/tools/menus.d.ts.map +1 -1
  10. package/dist/site/tools/menus.js +18 -2
  11. package/dist/site/tools/menus.js.map +1 -1
  12. package/package.json +4 -4
  13. package/dist/__tests__/auto-detect.test.d.ts +0 -2
  14. package/dist/__tests__/auto-detect.test.d.ts.map +0 -1
  15. package/dist/__tests__/auto-detect.test.js +0 -134
  16. package/dist/__tests__/auto-detect.test.js.map +0 -1
  17. package/dist/__tests__/config.test.d.ts +0 -2
  18. package/dist/__tests__/config.test.d.ts.map +0 -1
  19. package/dist/__tests__/config.test.js +0 -72
  20. package/dist/__tests__/config.test.js.map +0 -1
  21. package/dist/__tests__/developer-mutation.test.d.ts +0 -2
  22. package/dist/__tests__/developer-mutation.test.d.ts.map +0 -1
  23. package/dist/__tests__/developer-mutation.test.js +0 -511
  24. package/dist/__tests__/developer-mutation.test.js.map +0 -1
  25. package/dist/__tests__/developer-read-only.test.d.ts +0 -2
  26. package/dist/__tests__/developer-read-only.test.d.ts.map +0 -1
  27. package/dist/__tests__/developer-read-only.test.js +0 -192
  28. package/dist/__tests__/developer-read-only.test.js.map +0 -1
  29. package/dist/__tests__/site-content-tools.test.d.ts +0 -2
  30. package/dist/__tests__/site-content-tools.test.d.ts.map +0 -1
  31. package/dist/__tests__/site-content-tools.test.js +0 -446
  32. package/dist/__tests__/site-content-tools.test.js.map +0 -1
  33. package/dist/__tests__/site-layout-tools.test.d.ts +0 -2
  34. package/dist/__tests__/site-layout-tools.test.d.ts.map +0 -1
  35. package/dist/__tests__/site-layout-tools.test.js +0 -316
  36. package/dist/__tests__/site-layout-tools.test.js.map +0 -1
  37. package/dist/__tests__/site-other-tools.test.d.ts +0 -2
  38. package/dist/__tests__/site-other-tools.test.d.ts.map +0 -1
  39. package/dist/__tests__/site-other-tools.test.js +0 -318
  40. package/dist/__tests__/site-other-tools.test.js.map +0 -1
@@ -1,318 +0,0 @@
1
- import { describe, it, expect, vi } from 'vitest';
2
- import { handleExecuteFeed, handleCreateFeed, handleUpdateFeed, handleListFeeds, } from '../site/tools/feeds.js';
3
- import { handleSearchContent, handleGetNav, handleGetBreadcrumbs, pruneTree, } from '../site/tools/search.js';
4
- import { handleUploadMedia, handleListMedia, handleDeleteMedia, } from '../site/tools/media.js';
5
- import { handleListUsers, handleCreateUser, handleGetSiteConfig, handleUpdateSiteConfig, } from '../site/tools/users.js';
6
- const mockFeedDef = {
7
- id: 'feed-1',
8
- siteId: 'site-1',
9
- name: 'My Feed',
10
- slug: 'my-feed',
11
- query: { contentType: 'post' },
12
- cacheTtl: null,
13
- createdAt: '2024-01-01T00:00:00Z',
14
- updatedAt: '2024-01-01T00:00:00Z',
15
- };
16
- const mockUser = {
17
- id: 'user-1',
18
- email: 'test@example.com',
19
- role: 'editor',
20
- isActive: true,
21
- };
22
- const mockMediaItem = {
23
- id: 'media-1',
24
- filename: 'photo.jpg',
25
- originalFilename: 'photo.jpg',
26
- mimeType: 'image/jpeg',
27
- fileSize: 12345,
28
- storageKey: 'uploads/photo.jpg',
29
- createdAt: '2024-01-01T00:00:00Z',
30
- };
31
- function createMockSdk() {
32
- return {
33
- content: {
34
- getBySlug: vi.fn(),
35
- getById: vi.fn(),
36
- getChildren: vi.fn(),
37
- list: vi.fn(),
38
- create: vi.fn(),
39
- update: vi.fn(),
40
- delete: vi.fn(),
41
- publish: vi.fn(),
42
- unpublish: vi.fn(),
43
- },
44
- nav: {
45
- getTree: vi.fn().mockResolvedValue([
46
- {
47
- id: 'n1', title: 'Home', href: '/', slug: 'home', depth: 0,
48
- hasChildren: true, isActive: false, isAncestor: false,
49
- children: [
50
- {
51
- id: 'n2', title: 'About', href: '/about', slug: 'about', depth: 1,
52
- hasChildren: true, isActive: false, isAncestor: false,
53
- children: [
54
- {
55
- id: 'n3', title: 'Team', href: '/about/team', slug: 'team', depth: 2,
56
- hasChildren: false, isActive: false, isAncestor: false, children: [],
57
- },
58
- ],
59
- },
60
- ],
61
- },
62
- ]),
63
- getBreadcrumbs: vi.fn().mockResolvedValue([
64
- { id: 'n1', title: 'Home', href: '/', slug: 'home' },
65
- { id: 'n2', title: 'About', href: '/about', slug: 'about' },
66
- ]),
67
- getChildren: vi.fn(),
68
- },
69
- site: {
70
- getConfig: vi.fn().mockResolvedValue({ siteName: 'My Site', theme: 'default' }),
71
- list: vi.fn(),
72
- updateSettings: vi.fn().mockResolvedValue({ theme: 'dark', timezone: 'UTC' }),
73
- },
74
- user: {
75
- getCurrent: vi.fn(),
76
- getById: vi.fn(),
77
- list: vi.fn().mockResolvedValue({ users: [mockUser], total: 1 }),
78
- create: vi.fn().mockResolvedValue(mockUser),
79
- },
80
- feeds: {
81
- query: vi.fn().mockResolvedValue({ items: [{ id: '1' }], total: 1, page: 1, pageSize: 10, totalPages: 1 }),
82
- get: vi.fn().mockResolvedValue({ items: [{ id: '2' }], total: 1, page: 1, pageSize: 10, totalPages: 1 }),
83
- list: vi.fn().mockResolvedValue([mockFeedDef]),
84
- create: vi.fn().mockResolvedValue(mockFeedDef),
85
- update: vi.fn().mockResolvedValue({ ...mockFeedDef, name: 'Updated Feed' }),
86
- delete: vi.fn().mockResolvedValue(undefined),
87
- },
88
- media: {
89
- upload: vi.fn().mockResolvedValue(mockMediaItem),
90
- list: vi.fn().mockResolvedValue({
91
- data: [mockMediaItem],
92
- meta: { total: 1, page: 1, pageSize: 20, totalPages: 1 },
93
- }),
94
- getById: vi.fn().mockResolvedValue(mockMediaItem),
95
- delete: vi.fn().mockResolvedValue(undefined),
96
- },
97
- auth: {
98
- login: vi.fn(),
99
- register: vi.fn(),
100
- refresh: vi.fn(),
101
- forgotPassword: vi.fn(),
102
- resetPassword: vi.fn(),
103
- logout: vi.fn(),
104
- },
105
- };
106
- }
107
- // ─── Feed tools ─────────────────────────────────────────────────────────────
108
- describe('Feed tools', () => {
109
- it('execute_feed by slug calls sdk.feeds.get', async () => {
110
- const sdk = createMockSdk();
111
- const result = await handleExecuteFeed(sdk, { slug: 'latest-posts' });
112
- expect(sdk.feeds.get).toHaveBeenCalledWith('latest-posts');
113
- const data = JSON.parse(result.content[0].text);
114
- expect(data.items).toHaveLength(1);
115
- expect(data.items[0].id).toBe('2');
116
- });
117
- it('execute_feed by query calls sdk.feeds.query', async () => {
118
- const sdk = createMockSdk();
119
- const result = await handleExecuteFeed(sdk, {
120
- query: { contentType: 'post', search: 'hello', limit: 5 },
121
- });
122
- expect(sdk.feeds.query).toHaveBeenCalledWith({
123
- contentType: 'post', search: 'hello', limit: 5,
124
- });
125
- const data = JSON.parse(result.content[0].text);
126
- expect(data.items).toHaveLength(1);
127
- });
128
- it('execute_feed returns error when neither slug nor query', async () => {
129
- const sdk = createMockSdk();
130
- const result = await handleExecuteFeed(sdk, {});
131
- expect(result).toHaveProperty('isError', true);
132
- });
133
- it('create_feed calls sdk.feeds.create and returns feed definition', async () => {
134
- const sdk = createMockSdk();
135
- const result = await handleCreateFeed(sdk, { name: 'My Feed', slug: 'my-feed', query: { contentType: 'post' } });
136
- expect(sdk.feeds.create).toHaveBeenCalledWith(expect.objectContaining({ name: 'My Feed', slug: 'my-feed' }));
137
- const data = JSON.parse(result.content[0].text);
138
- expect(data.id).toBe('feed-1');
139
- expect(data.slug).toBe('my-feed');
140
- });
141
- it('update_feed calls sdk.feeds.update and returns updated feed', async () => {
142
- const sdk = createMockSdk();
143
- const result = await handleUpdateFeed(sdk, { slug: 'my-feed', query: { contentType: 'page' } });
144
- expect(sdk.feeds.update).toHaveBeenCalledWith('my-feed', expect.objectContaining({ query: { contentType: 'page' } }));
145
- const data = JSON.parse(result.content[0].text);
146
- expect(data.name).toBe('Updated Feed');
147
- });
148
- it('list_feeds calls sdk.feeds.list and returns feed list', async () => {
149
- const sdk = createMockSdk();
150
- const result = await handleListFeeds(sdk, { siteId: 'site-1' });
151
- expect(sdk.feeds.list).toHaveBeenCalledWith({ siteId: 'site-1' });
152
- const data = JSON.parse(result.content[0].text);
153
- expect(data.feeds).toHaveLength(1);
154
- expect(data.feeds[0].id).toBe('feed-1');
155
- expect(data.total).toBe(1);
156
- });
157
- });
158
- // ─── Search / Nav tools ─────────────────────────────────────────────────────
159
- describe('Search tools', () => {
160
- it('search_content queries feeds with search param', async () => {
161
- const sdk = createMockSdk();
162
- const result = await handleSearchContent(sdk, { q: 'hello', type: 'post', siteId: 'site-1' });
163
- expect(sdk.feeds.query).toHaveBeenCalledWith({
164
- contentType: 'post',
165
- search: 'hello',
166
- siteId: 'site-1',
167
- });
168
- const data = JSON.parse(result.content[0].text);
169
- expect(data.items).toBeDefined();
170
- });
171
- it('search_content defaults type to page', async () => {
172
- const sdk = createMockSdk();
173
- await handleSearchContent(sdk, { q: 'test' });
174
- expect(sdk.feeds.query).toHaveBeenCalledWith(expect.objectContaining({ contentType: 'page' }));
175
- });
176
- it('get_nav returns full tree', async () => {
177
- const sdk = createMockSdk();
178
- const result = await handleGetNav(sdk, {});
179
- expect(sdk.nav.getTree).toHaveBeenCalled();
180
- const data = JSON.parse(result.content[0].text);
181
- expect(data).toHaveLength(1);
182
- expect(data[0].children).toHaveLength(1);
183
- });
184
- it('get_nav prunes tree by depth', async () => {
185
- const sdk = createMockSdk();
186
- const result = await handleGetNav(sdk, { depth: 1 });
187
- const data = JSON.parse(result.content[0].text);
188
- expect(data).toHaveLength(1);
189
- expect(data[0].children).toHaveLength(0); // depth=1 means only root level items
190
- });
191
- it('get_breadcrumbs returns crumbs', async () => {
192
- const sdk = createMockSdk();
193
- const result = await handleGetBreadcrumbs(sdk, { nodeId: 'n2' });
194
- expect(sdk.nav.getBreadcrumbs).toHaveBeenCalledWith('n2');
195
- const data = JSON.parse(result.content[0].text);
196
- expect(data).toHaveLength(2);
197
- expect(data[0].title).toBe('Home');
198
- expect(data[1].title).toBe('About');
199
- });
200
- });
201
- describe('pruneTree helper', () => {
202
- it('returns empty array when depth is 0', () => {
203
- const tree = [{ id: '1', children: [{ id: '2', children: [] }] }];
204
- expect(pruneTree(tree, 0)).toEqual([]);
205
- });
206
- it('returns top level only at depth 1', () => {
207
- const tree = [{ id: '1', children: [{ id: '2', children: [] }] }];
208
- const result = pruneTree(tree, 1);
209
- expect(result).toHaveLength(1);
210
- expect(result[0].children).toEqual([]);
211
- });
212
- it('returns two levels at depth 2', () => {
213
- const tree = [
214
- {
215
- id: '1',
216
- children: [
217
- { id: '2', children: [{ id: '3', children: [] }] },
218
- ],
219
- },
220
- ];
221
- const result = pruneTree(tree, 2);
222
- expect(result[0].children).toHaveLength(1);
223
- expect(result[0].children[0].children).toEqual([]);
224
- });
225
- });
226
- // ─── Media tools ────────────────────────────────────────────────────────────
227
- describe('Media tools', () => {
228
- it('upload_media calls sdk.media.upload and returns media item', async () => {
229
- const sdk = createMockSdk();
230
- const result = await handleUploadMedia(sdk, {
231
- filename: 'photo.jpg', mimeType: 'image/jpeg', data: 'aGVsbG8=',
232
- });
233
- expect(sdk.media.upload).toHaveBeenCalledWith(expect.any(Buffer), 'photo.jpg', expect.objectContaining({}));
234
- const data = JSON.parse(result.content[0].text);
235
- expect(data.id).toBe('media-1');
236
- expect(data.filename).toBe('photo.jpg');
237
- expect(data.mimeType).toBe('image/jpeg');
238
- });
239
- it('list_media calls sdk.media.list and returns paginated results', async () => {
240
- const sdk = createMockSdk();
241
- const result = await handleListMedia(sdk, { siteId: 'site-1', limit: 20, page: 1 });
242
- expect(sdk.media.list).toHaveBeenCalledWith({ page: 1, limit: 20, mimeType: undefined });
243
- const data = JSON.parse(result.content[0].text);
244
- expect(data.items).toHaveLength(1);
245
- expect(data.items[0].id).toBe('media-1');
246
- expect(data.total).toBe(1);
247
- });
248
- it('delete_media calls sdk.media.delete and returns confirmation', async () => {
249
- const sdk = createMockSdk();
250
- const result = await handleDeleteMedia(sdk, { id: 'media-1' });
251
- expect(sdk.media.delete).toHaveBeenCalledWith('media-1');
252
- const data = JSON.parse(result.content[0].text);
253
- expect(data.deleted).toBe(true);
254
- expect(data.id).toBe('media-1');
255
- });
256
- });
257
- // ─── User / Site tools ──────────────────────────────────────────────────────
258
- describe('User and site tools', () => {
259
- it('list_users calls sdk.user.list and returns user list', async () => {
260
- const sdk = createMockSdk();
261
- const result = await handleListUsers(sdk, { siteId: 'site-1', role: 'admin' });
262
- expect(sdk.user.list).toHaveBeenCalledWith({ siteId: 'site-1', role: 'admin', limit: undefined, page: undefined });
263
- const data = JSON.parse(result.content[0].text);
264
- expect(data.users).toHaveLength(1);
265
- expect(data.users[0].email).toBe('test@example.com');
266
- expect(data.total).toBe(1);
267
- });
268
- it('create_user calls sdk.user.create and returns user', async () => {
269
- const sdk = createMockSdk();
270
- const result = await handleCreateUser(sdk, {
271
- email: 'test@example.com', name: 'Test User', role: 'editor', siteId: 'site-1',
272
- });
273
- expect(sdk.user.create).toHaveBeenCalledWith(expect.objectContaining({
274
- email: 'test@example.com',
275
- name: 'Test User',
276
- role: 'editor',
277
- siteId: 'site-1',
278
- }));
279
- const data = JSON.parse(result.content[0].text);
280
- expect(data.id).toBe('user-1');
281
- expect(data.email).toBe('test@example.com');
282
- });
283
- it('get_site_config returns config from sdk', async () => {
284
- const sdk = createMockSdk();
285
- const result = await handleGetSiteConfig(sdk, { siteId: 'site-1' });
286
- expect(sdk.site.getConfig).toHaveBeenCalledWith('site-1');
287
- const data = JSON.parse(result.content[0].text);
288
- expect(data.siteName).toBe('My Site');
289
- expect(data.theme).toBe('default');
290
- });
291
- it('get_site_config returns error when not found', async () => {
292
- const sdk = createMockSdk();
293
- vi.mocked(sdk.site.getConfig).mockResolvedValue(null);
294
- const result = await handleGetSiteConfig(sdk, { siteId: 'bad' });
295
- expect(result).toHaveProperty('isError', true);
296
- expect(result.content[0].text).toContain('not found');
297
- });
298
- it('update_site_config persists settings via the SDK and returns the updated set', async () => {
299
- const sdk = createMockSdk();
300
- const result = await handleUpdateSiteConfig(sdk, {
301
- siteId: 'site-1', settings: { theme: 'dark' },
302
- });
303
- expect(sdk.site.updateSettings).toHaveBeenCalledWith('site-1', { theme: 'dark' });
304
- const data = JSON.parse(result.content[0].text);
305
- expect(data.updated).toBe(true);
306
- expect(data.siteId).toBe('site-1');
307
- // Reflects the API's returned settings, not the raw input.
308
- expect(data.settings).toEqual({ theme: 'dark', timezone: 'UTC' });
309
- });
310
- it('update_site_config returns an error result when the SDK throws', async () => {
311
- const sdk = createMockSdk();
312
- vi.mocked(sdk.site.updateSettings).mockRejectedValue(new Error('Forbidden'));
313
- const result = await handleUpdateSiteConfig(sdk, { siteId: 'site-1', settings: { theme: 'dark' } });
314
- expect(result).toHaveProperty('isError', true);
315
- expect(result.content[0].text).toContain('Forbidden');
316
- });
317
- });
318
- //# sourceMappingURL=site-other-tools.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"site-other-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/site-other-tools.test.ts"],"names":[],"mappings":"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"}