@kywi-software/mcp 0.1.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 (119) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +77 -0
  3. package/dist/__tests__/auto-detect.test.d.ts +2 -0
  4. package/dist/__tests__/auto-detect.test.d.ts.map +1 -0
  5. package/dist/__tests__/auto-detect.test.js +134 -0
  6. package/dist/__tests__/auto-detect.test.js.map +1 -0
  7. package/dist/__tests__/config.test.d.ts +2 -0
  8. package/dist/__tests__/config.test.d.ts.map +1 -0
  9. package/dist/__tests__/config.test.js +72 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/developer-mutation.test.d.ts +2 -0
  12. package/dist/__tests__/developer-mutation.test.d.ts.map +1 -0
  13. package/dist/__tests__/developer-mutation.test.js +511 -0
  14. package/dist/__tests__/developer-mutation.test.js.map +1 -0
  15. package/dist/__tests__/developer-read-only.test.d.ts +2 -0
  16. package/dist/__tests__/developer-read-only.test.d.ts.map +1 -0
  17. package/dist/__tests__/developer-read-only.test.js +192 -0
  18. package/dist/__tests__/developer-read-only.test.js.map +1 -0
  19. package/dist/__tests__/site-content-tools.test.d.ts +2 -0
  20. package/dist/__tests__/site-content-tools.test.d.ts.map +1 -0
  21. package/dist/__tests__/site-content-tools.test.js +446 -0
  22. package/dist/__tests__/site-content-tools.test.js.map +1 -0
  23. package/dist/__tests__/site-layout-tools.test.d.ts +2 -0
  24. package/dist/__tests__/site-layout-tools.test.d.ts.map +1 -0
  25. package/dist/__tests__/site-layout-tools.test.js +316 -0
  26. package/dist/__tests__/site-layout-tools.test.js.map +1 -0
  27. package/dist/__tests__/site-other-tools.test.d.ts +2 -0
  28. package/dist/__tests__/site-other-tools.test.d.ts.map +1 -0
  29. package/dist/__tests__/site-other-tools.test.js +318 -0
  30. package/dist/__tests__/site-other-tools.test.js.map +1 -0
  31. package/dist/config.d.ts +31 -0
  32. package/dist/config.d.ts.map +1 -0
  33. package/dist/config.js +4 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/developer/auto-detect.d.ts +17 -0
  36. package/dist/developer/auto-detect.d.ts.map +1 -0
  37. package/dist/developer/auto-detect.js +54 -0
  38. package/dist/developer/auto-detect.js.map +1 -0
  39. package/dist/developer/cli.d.ts +3 -0
  40. package/dist/developer/cli.d.ts.map +1 -0
  41. package/dist/developer/cli.js +14 -0
  42. package/dist/developer/cli.js.map +1 -0
  43. package/dist/developer/index.d.ts +4 -0
  44. package/dist/developer/index.d.ts.map +1 -0
  45. package/dist/developer/index.js +9 -0
  46. package/dist/developer/index.js.map +1 -0
  47. package/dist/developer/server.d.ts +4 -0
  48. package/dist/developer/server.d.ts.map +1 -0
  49. package/dist/developer/server.js +29 -0
  50. package/dist/developer/server.js.map +1 -0
  51. package/dist/developer/tools/api-keys.d.ts +48 -0
  52. package/dist/developer/tools/api-keys.d.ts.map +1 -0
  53. package/dist/developer/tools/api-keys.js +51 -0
  54. package/dist/developer/tools/api-keys.js.map +1 -0
  55. package/dist/developer/tools/config-mutation.d.ts +139 -0
  56. package/dist/developer/tools/config-mutation.d.ts.map +1 -0
  57. package/dist/developer/tools/config-mutation.js +277 -0
  58. package/dist/developer/tools/config-mutation.js.map +1 -0
  59. package/dist/developer/tools/content-type-tools.d.ts +32 -0
  60. package/dist/developer/tools/content-type-tools.d.ts.map +1 -0
  61. package/dist/developer/tools/content-type-tools.js +92 -0
  62. package/dist/developer/tools/content-type-tools.js.map +1 -0
  63. package/dist/developer/tools/read-only.d.ts +86 -0
  64. package/dist/developer/tools/read-only.d.ts.map +1 -0
  65. package/dist/developer/tools/read-only.js +235 -0
  66. package/dist/developer/tools/read-only.js.map +1 -0
  67. package/dist/developer/tools/scaffolding.d.ts +67 -0
  68. package/dist/developer/tools/scaffolding.d.ts.map +1 -0
  69. package/dist/developer/tools/scaffolding.js +207 -0
  70. package/dist/developer/tools/scaffolding.js.map +1 -0
  71. package/dist/index.d.ts +7 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +6 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/shared.d.ts +15 -0
  76. package/dist/shared.d.ts.map +1 -0
  77. package/dist/shared.js +7 -0
  78. package/dist/shared.js.map +1 -0
  79. package/dist/site/cli.d.ts +3 -0
  80. package/dist/site/cli.d.ts.map +1 -0
  81. package/dist/site/cli.js +12 -0
  82. package/dist/site/cli.js.map +1 -0
  83. package/dist/site/index.d.ts +4 -0
  84. package/dist/site/index.d.ts.map +1 -0
  85. package/dist/site/index.js +9 -0
  86. package/dist/site/index.js.map +1 -0
  87. package/dist/site/server.d.ts +10 -0
  88. package/dist/site/server.d.ts.map +1 -0
  89. package/dist/site/server.js +73 -0
  90. package/dist/site/server.js.map +1 -0
  91. package/dist/site/tools/content.d.ts +250 -0
  92. package/dist/site/tools/content.d.ts.map +1 -0
  93. package/dist/site/tools/content.js +329 -0
  94. package/dist/site/tools/content.js.map +1 -0
  95. package/dist/site/tools/feeds.d.ts +62 -0
  96. package/dist/site/tools/feeds.d.ts.map +1 -0
  97. package/dist/site/tools/feeds.js +97 -0
  98. package/dist/site/tools/feeds.js.map +1 -0
  99. package/dist/site/tools/layout.d.ts +163 -0
  100. package/dist/site/tools/layout.d.ts.map +1 -0
  101. package/dist/site/tools/layout.js +226 -0
  102. package/dist/site/tools/layout.js.map +1 -0
  103. package/dist/site/tools/media.d.ts +38 -0
  104. package/dist/site/tools/media.d.ts.map +1 -0
  105. package/dist/site/tools/media.js +52 -0
  106. package/dist/site/tools/media.js.map +1 -0
  107. package/dist/site/tools/search.d.ts +40 -0
  108. package/dist/site/tools/search.d.ts.map +1 -0
  109. package/dist/site/tools/search.js +60 -0
  110. package/dist/site/tools/search.js.map +1 -0
  111. package/dist/site/tools/users.d.ts +60 -0
  112. package/dist/site/tools/users.d.ts.map +1 -0
  113. package/dist/site/tools/users.js +71 -0
  114. package/dist/site/tools/users.js.map +1 -0
  115. package/dist/site/tools/webhooks.d.ts +34 -0
  116. package/dist/site/tools/webhooks.d.ts.map +1 -0
  117. package/dist/site/tools/webhooks.js +44 -0
  118. package/dist/site/tools/webhooks.js.map +1 -0
  119. package/package.json +61 -0
@@ -0,0 +1,318 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-other-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/site-other-tools.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface McpSiteConfig {
2
+ enabled: boolean;
3
+ baseUrl: string;
4
+ apiKey: string;
5
+ }
6
+ export interface McpDeveloperContentTypeField {
7
+ name: string;
8
+ type: string;
9
+ label: string;
10
+ required?: boolean;
11
+ }
12
+ export interface McpDeveloperContentType {
13
+ name: string;
14
+ label: string;
15
+ fields: McpDeveloperContentTypeField[];
16
+ }
17
+ export interface McpDeveloperConfig {
18
+ enabled: boolean;
19
+ configPath?: string | undefined;
20
+ baseUrl?: string | undefined;
21
+ apiKey?: string | undefined;
22
+ mode: 'filesystem' | 'api' | 'auto';
23
+ /** Content types to generate update_<typeName> tools for (requires baseUrl) */
24
+ contentTypes?: McpDeveloperContentType[] | undefined;
25
+ }
26
+ export interface McpConfig {
27
+ site?: McpSiteConfig;
28
+ developer?: McpDeveloperConfig;
29
+ }
30
+ export declare function defineMcpConfig(config: McpConfig): McpConfig;
31
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,4BAA4B,EAAE,CAAA;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,IAAI,EAAE,YAAY,GAAG,KAAK,GAAG,MAAM,CAAA;IACnC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,uBAAuB,EAAE,GAAG,SAAS,CAAA;CACrD;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAC/B;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAE5D"}
package/dist/config.js ADDED
@@ -0,0 +1,4 @@
1
+ export function defineMcpConfig(config) {
2
+ return config;
3
+ }
4
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAkCA,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { McpDeveloperConfig } from '../config.js';
2
+ export type DetectedMode = 'filesystem' | 'api';
3
+ export interface SplitMode {
4
+ /** Mode to use for config mutations (content types, themes, modules, plugins) */
5
+ configMode: DetectedMode;
6
+ /** Mode to use for data operations (content CRUD, scaffolding, seeding) */
7
+ dataMode: DetectedMode;
8
+ }
9
+ export declare function detectMode(config: McpDeveloperConfig): DetectedMode;
10
+ /**
11
+ * When both filesystem and API are available, config mutations use filesystem
12
+ * and data operations use API. This enables the best of both worlds:
13
+ * - Config mutations directly modify the local kywi.config.ts file
14
+ * - Data operations use the API for real-time content management
15
+ */
16
+ export declare function detectSplitMode(config: McpDeveloperConfig): SplitMode;
17
+ //# sourceMappingURL=auto-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-detect.d.ts","sourceRoot":"","sources":["../../src/developer/auto-detect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEtD,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,KAAK,CAAA;AAE/C,MAAM,WAAW,SAAS;IACxB,iFAAiF;IACjF,UAAU,EAAE,YAAY,CAAA;IACxB,2EAA2E;IAC3E,QAAQ,EAAE,YAAY,CAAA;CACvB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAkBnE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAmCrE"}
@@ -0,0 +1,54 @@
1
+ import { accessSync, constants } from 'node:fs';
2
+ export function detectMode(config) {
3
+ if (config.mode !== 'auto')
4
+ return config.mode;
5
+ if (config.configPath) {
6
+ try {
7
+ accessSync(config.configPath, constants.W_OK);
8
+ return 'filesystem';
9
+ }
10
+ catch {
11
+ // Not writable
12
+ }
13
+ }
14
+ if (config.baseUrl && config.apiKey)
15
+ return 'api';
16
+ throw new Error('Cannot detect MCP mode: no writable config file or API credentials. ' +
17
+ 'Set configPath to a writable kywi.config.ts or provide baseUrl + apiKey.');
18
+ }
19
+ /**
20
+ * When both filesystem and API are available, config mutations use filesystem
21
+ * and data operations use API. This enables the best of both worlds:
22
+ * - Config mutations directly modify the local kywi.config.ts file
23
+ * - Data operations use the API for real-time content management
24
+ */
25
+ export function detectSplitMode(config) {
26
+ if (config.mode !== 'auto') {
27
+ const mode = config.mode;
28
+ return { configMode: mode, dataMode: mode };
29
+ }
30
+ let hasFilesystem = false;
31
+ if (config.configPath) {
32
+ try {
33
+ accessSync(config.configPath, constants.W_OK);
34
+ hasFilesystem = true;
35
+ }
36
+ catch {
37
+ // Not writable
38
+ }
39
+ }
40
+ const hasApi = !!(config.baseUrl && config.apiKey);
41
+ if (hasFilesystem && hasApi) {
42
+ // Split mode: config mutations via filesystem, data operations via API
43
+ return { configMode: 'filesystem', dataMode: 'api' };
44
+ }
45
+ if (hasFilesystem) {
46
+ return { configMode: 'filesystem', dataMode: 'filesystem' };
47
+ }
48
+ if (hasApi) {
49
+ return { configMode: 'api', dataMode: 'api' };
50
+ }
51
+ throw new Error('Cannot detect MCP mode: no writable config file or API credentials. ' +
52
+ 'Set configPath to a writable kywi.config.ts or provide baseUrl + apiKey.');
53
+ }
54
+ //# sourceMappingURL=auto-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-detect.js","sourceRoot":"","sources":["../../src/developer/auto-detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAY/C,MAAM,UAAU,UAAU,CAAC,MAA0B;IACnD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC,IAAoB,CAAA;IAE9D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;YAC7C,OAAO,YAAY,CAAA;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEjD,MAAM,IAAI,KAAK,CACb,sEAAsE;QACtE,0EAA0E,CAC3E,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAA0B;IACxD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAoB,CAAA;QACxC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC7C,CAAC;IAED,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;YAC7C,aAAa,GAAG,IAAI,CAAA;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;IAElD,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;QAC5B,uEAAuE;QACvE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IACtD,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAA;IAC7D,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAC/C,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sEAAsE;QACtE,0EAA0E,CAC3E,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/developer/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { createDeveloperMcpServer } from './server.js';
4
+ const config = {
5
+ enabled: true,
6
+ configPath: process.env.KYWI_CONFIG_PATH,
7
+ baseUrl: process.env.KYWI_API_URL,
8
+ apiKey: process.env.KYWI_MCP_DEV_KEY,
9
+ mode: (process.env.KYWI_MCP_MODE ?? 'auto'),
10
+ };
11
+ const server = createDeveloperMcpServer(config);
12
+ const transport = new StdioServerTransport();
13
+ await server.connect(transport);
14
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/developer/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAEtD,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;IACxC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IACjC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;IACpC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM,CAAkC;CAC7E,CAAA;AAED,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAA;AAC/C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;AAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { createDeveloperMcpServer } from './server.js';
2
+ import type { McpDeveloperConfig } from '../config.js';
3
+ export declare function startDeveloperMcp(config: McpDeveloperConfig): Promise<void>;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/developer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAItD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEtD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjF"}
@@ -0,0 +1,9 @@
1
+ export { createDeveloperMcpServer } from './server.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { createDeveloperMcpServer } from './server.js';
4
+ export async function startDeveloperMcp(config) {
5
+ const server = createDeveloperMcpServer(config);
6
+ const transport = new StdioServerTransport();
7
+ await server.connect(transport);
8
+ }
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/developer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAGtD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAA0B;IAChE,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { McpDeveloperConfig } from '../config.js';
3
+ export declare function createDeveloperMcpServer(config: McpDeveloperConfig): McpServer;
4
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/developer/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAQtD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CA6B9E"}
@@ -0,0 +1,29 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { createKywiSdk, KywiHttpClient } from '@kywi-software/sdk';
3
+ import { detectMode } from './auto-detect.js';
4
+ import { registerReadOnlyTools } from './tools/read-only.js';
5
+ import { registerConfigMutationTools } from './tools/config-mutation.js';
6
+ import { registerScaffoldingTools } from './tools/scaffolding.js';
7
+ import { registerApiKeyTools } from './tools/api-keys.js';
8
+ import { registerContentTypeTools } from './tools/content-type-tools.js';
9
+ export function createDeveloperMcpServer(config) {
10
+ const server = new McpServer({ name: '@kywi-software/mcp/developer', version: '0.1.0' }, { capabilities: { tools: {} } });
11
+ const mode = detectMode(config);
12
+ const http = config.baseUrl ? new KywiHttpClient({ baseUrl: config.baseUrl, apiKey: config.apiKey }) : undefined;
13
+ registerReadOnlyTools(server, { mode, configPath: config.configPath, http });
14
+ if (mode === 'filesystem' && config.configPath) {
15
+ registerConfigMutationTools(server, { configPath: config.configPath });
16
+ }
17
+ if (config.baseUrl) {
18
+ const sdk = createKywiSdk({ baseUrl: config.baseUrl, apiKey: config.apiKey });
19
+ registerScaffoldingTools(server, sdk);
20
+ if (config.contentTypes && config.contentTypes.length > 0) {
21
+ registerContentTypeTools(server, sdk, config.contentTypes);
22
+ }
23
+ }
24
+ if (mode === 'api' && http) {
25
+ registerApiKeyTools(server, http);
26
+ }
27
+ return server;
28
+ }
29
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/developer/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAExE,MAAM,UAAU,wBAAwB,CAAC,MAA0B;IACjE,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,OAAO,EAAE,EAC1D,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAA;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEhH,qBAAqB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;IAE5E,IAAI,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/C,2BAA2B,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;IACxE,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC7E,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAErC,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,EAAE,CAAC;QAC3B,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { KywiHttpClient } from '@kywi-software/sdk';
3
+ export declare function handleCreateApiKey(http: KywiHttpClient, args: {
4
+ name: string;
5
+ scopes: string[];
6
+ }): Promise<{
7
+ content: [{
8
+ type: "text";
9
+ text: string;
10
+ }];
11
+ isError?: undefined;
12
+ } | {
13
+ content: [{
14
+ type: "text";
15
+ text: string;
16
+ }];
17
+ isError: true;
18
+ }>;
19
+ export declare function handleListApiKeys(http: KywiHttpClient): Promise<{
20
+ content: [{
21
+ type: "text";
22
+ text: string;
23
+ }];
24
+ isError?: undefined;
25
+ } | {
26
+ content: [{
27
+ type: "text";
28
+ text: string;
29
+ }];
30
+ isError: true;
31
+ }>;
32
+ export declare function handleRevokeApiKey(http: KywiHttpClient, args: {
33
+ id: string;
34
+ }): Promise<{
35
+ content: [{
36
+ type: "text";
37
+ text: string;
38
+ }];
39
+ isError?: undefined;
40
+ } | {
41
+ content: [{
42
+ type: "text";
43
+ text: string;
44
+ }];
45
+ isError: true;
46
+ }>;
47
+ export declare function registerApiKeyTools(server: McpServer, http: KywiHttpClient): void;
48
+ //# sourceMappingURL=api-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../src/developer/tools/api-keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAKxD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE;;;;;;;;;;;;GAQzC;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,cAAc;;;;;;;;;;;;GAO3D;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAQrB;AAID,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAoBjF"}