@viyv/agent-ui-mcp 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/dist/api-client.d.ts +1 -0
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +12 -0
- package/dist/api-client.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +126 -2
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
- package/src/api-client.ts +13 -0
- package/src/server.ts +191 -2
package/.turbo/turbo-build.log
CHANGED
package/dist/api-client.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare class ApiClient {
|
|
|
9
9
|
get<T = unknown>(path: string): Promise<T>;
|
|
10
10
|
post<T = unknown>(path: string, body?: unknown): Promise<T>;
|
|
11
11
|
put<T = unknown>(path: string, body: unknown): Promise<T>;
|
|
12
|
+
patch<T = unknown>(path: string, body: unknown): Promise<T>;
|
|
12
13
|
delete(path: string): Promise<void>;
|
|
13
14
|
}
|
|
14
15
|
//# sourceMappingURL=api-client.d.ts.map
|
package/dist/api-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,SAAS;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,EAAE,gBAAgB;IAU/B,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAY1C,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAa3D,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAazD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUzC"}
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,SAAS;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,EAAE,gBAAgB;IAU/B,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAY1C,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAa3D,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAazD,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAa3D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUzC"}
|
package/dist/api-client.js
CHANGED
|
@@ -45,6 +45,18 @@ export class ApiClient {
|
|
|
45
45
|
}
|
|
46
46
|
return response.json();
|
|
47
47
|
}
|
|
48
|
+
async patch(path, body) {
|
|
49
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
50
|
+
method: 'PATCH',
|
|
51
|
+
headers: this.headers,
|
|
52
|
+
body: JSON.stringify(body),
|
|
53
|
+
});
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
const text = await response.text();
|
|
56
|
+
throw new Error(`API PATCH ${path} failed: ${response.status} - ${text}`);
|
|
57
|
+
}
|
|
58
|
+
return response.json();
|
|
59
|
+
}
|
|
48
60
|
async delete(path) {
|
|
49
61
|
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
50
62
|
method: 'DELETE',
|
package/dist/api-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAChC,yGAAyG;IACzG,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAChC,yGAAyG;IACzG,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAsZxF"}
|
package/dist/server.js
CHANGED
|
@@ -28,7 +28,7 @@ export function createMcpServer(client, options) {
|
|
|
28
28
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
29
29
|
});
|
|
30
30
|
// ── Page management tools ──
|
|
31
|
-
server.tool('list_pages', 'List all saved pages.', {}, async () => {
|
|
31
|
+
server.tool('list_pages', 'List all saved PageSpec pages with metadata.', {}, async () => {
|
|
32
32
|
const pages = await client.get('/pages');
|
|
33
33
|
if (baseUrl && Array.isArray(pages)) {
|
|
34
34
|
for (const page of pages) {
|
|
@@ -39,7 +39,7 @@ export function createMcpServer(client, options) {
|
|
|
39
39
|
}
|
|
40
40
|
return { content: [{ type: 'text', text: JSON.stringify(pages, null, 2) }] };
|
|
41
41
|
});
|
|
42
|
-
server.tool('get_page', '
|
|
42
|
+
server.tool('get_page', 'Retrieve the full PageSpec JSON definition of a saved page.', { pageId: z.string().describe('The page ID to retrieve') }, async ({ pageId }) => {
|
|
43
43
|
const spec = await client.get(`/pages/${pageId}`);
|
|
44
44
|
const urlLine = baseUrl ? `\nURL: ${pageUrl(pageId)}` : '';
|
|
45
45
|
return {
|
|
@@ -138,6 +138,130 @@ export function createMcpServer(client, options) {
|
|
|
138
138
|
content: [{ type: 'text', text: 'Validation PASSED' }],
|
|
139
139
|
};
|
|
140
140
|
});
|
|
141
|
+
// ── Page partial read/write tools ──
|
|
142
|
+
server.tool('outline_page', 'Get a structural outline of a page without full element details. Shows the element tree hierarchy with component types, truncated at a configurable depth. Use this before get_page to understand page structure and decide which elements to read or modify.', {
|
|
143
|
+
pageId: z.string().describe('The page ID'),
|
|
144
|
+
depth: z
|
|
145
|
+
.number()
|
|
146
|
+
.optional()
|
|
147
|
+
.describe('Tree depth limit (default: 3). Elements beyond this depth show childCount instead of expanding.'),
|
|
148
|
+
}, async ({ pageId, depth }) => {
|
|
149
|
+
const query = depth != null ? `?depth=${depth}` : '';
|
|
150
|
+
const outline = await client.get(`/pages/${pageId}/outline${query}`);
|
|
151
|
+
return { content: [{ type: 'text', text: JSON.stringify(outline, null, 2) }] };
|
|
152
|
+
});
|
|
153
|
+
server.tool('read_elements', 'Read specific elements from a page by their IDs. Returns full element definitions (type, props, children, visible) for only the requested elements. Use after outline_page to inspect specific parts of a page without loading the entire spec.', {
|
|
154
|
+
pageId: z.string().describe('The page ID'),
|
|
155
|
+
elementIds: z.array(z.string()).describe('Array of element IDs to read'),
|
|
156
|
+
subtree: z
|
|
157
|
+
.boolean()
|
|
158
|
+
.optional()
|
|
159
|
+
.describe('If true, also return all descendant elements of the requested IDs (recursive)'),
|
|
160
|
+
}, async ({ pageId, elementIds, subtree }) => {
|
|
161
|
+
let query = `?ids=${elementIds.map(encodeURIComponent).join(',')}`;
|
|
162
|
+
if (subtree)
|
|
163
|
+
query += '&subtree=true';
|
|
164
|
+
const elements = await client.get(`/pages/${pageId}/elements${query}`);
|
|
165
|
+
return { content: [{ type: 'text', text: JSON.stringify(elements, null, 2) }] };
|
|
166
|
+
});
|
|
167
|
+
server.tool('patch_page', 'Apply JSON Patch (RFC 6902) operations to modify specific parts of a page without rewriting the entire spec. Supports add, remove, replace, move, copy, and test operations. The patched result is validated before saving. Use for fine-grained changes like updating a single prop value.', {
|
|
168
|
+
pageId: z.string().describe('The page ID to patch'),
|
|
169
|
+
operations: z
|
|
170
|
+
.array(z.object({
|
|
171
|
+
op: z.enum(['add', 'remove', 'replace', 'move', 'copy', 'test']),
|
|
172
|
+
path: z
|
|
173
|
+
.string()
|
|
174
|
+
.describe('JSON Pointer path (e.g. "/elements/header/props/title", "/hooks/data/params/url")'),
|
|
175
|
+
value: z
|
|
176
|
+
.unknown()
|
|
177
|
+
.optional()
|
|
178
|
+
.describe('Value for add/replace/test operations'),
|
|
179
|
+
from: z
|
|
180
|
+
.string()
|
|
181
|
+
.optional()
|
|
182
|
+
.describe('Source path for move/copy operations'),
|
|
183
|
+
}))
|
|
184
|
+
.describe('Array of JSON Patch operations'),
|
|
185
|
+
}, async ({ pageId, operations }) => {
|
|
186
|
+
const result = await client.patch(`/pages/${pageId}`, operations);
|
|
187
|
+
return {
|
|
188
|
+
content: [
|
|
189
|
+
{
|
|
190
|
+
type: 'text',
|
|
191
|
+
text: `Page patched!\n\nPage ID: ${result.id}\nUpdated at: ${result.updatedAt}\nOperations applied: ${operations.length}\nURL: ${pageUrl(result.id)}`,
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
};
|
|
195
|
+
});
|
|
196
|
+
server.tool('update_elements', 'Add or update specific elements in a page. Merges the provided elements into the existing elements map. Simpler than patch_page for the common case of adding/modifying elements. To delete elements, use patch_page with "remove" operations instead.', {
|
|
197
|
+
pageId: z.string().describe('The page ID'),
|
|
198
|
+
elements: z
|
|
199
|
+
.record(z.unknown())
|
|
200
|
+
.describe('Map of element ID to element definition ({ type, props, children?, visible? }). Existing elements with matching IDs are replaced; new IDs are added.'),
|
|
201
|
+
}, async ({ pageId, elements }) => {
|
|
202
|
+
const result = await client.post(`/pages/${pageId}/elements`, elements);
|
|
203
|
+
return {
|
|
204
|
+
content: [
|
|
205
|
+
{
|
|
206
|
+
type: 'text',
|
|
207
|
+
text: `Elements updated!\n\nPage ID: ${result.id}\nUpdated at: ${result.updatedAt}\nElements: ${result.updatedElements.join(', ')}\nURL: ${pageUrl(result.id)}`,
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
};
|
|
211
|
+
});
|
|
212
|
+
// ── Feedback tools ──
|
|
213
|
+
server.tool('feedback_list', 'List PageSpec design feedback threads for a page. Returns threads with element IDs, comments, and status from human reviewers.', {
|
|
214
|
+
pageId: z.string().describe('PageSpec page ID to list design feedback for'),
|
|
215
|
+
status: z
|
|
216
|
+
.enum(['open', 'resolved'])
|
|
217
|
+
.optional()
|
|
218
|
+
.describe('Filter by status (omit for all)'),
|
|
219
|
+
}, async ({ pageId, status }) => {
|
|
220
|
+
let query = `?pageId=${encodeURIComponent(pageId)}`;
|
|
221
|
+
if (status)
|
|
222
|
+
query += `&status=${encodeURIComponent(status)}`;
|
|
223
|
+
const threads = await client.get(`/feedback${query}`);
|
|
224
|
+
return {
|
|
225
|
+
content: [{ type: 'text', text: JSON.stringify(threads, null, 2) }],
|
|
226
|
+
};
|
|
227
|
+
});
|
|
228
|
+
server.tool('feedback_reply', 'Reply to a PageSpec design feedback thread. Use to ask clarifying questions or provide status updates.', {
|
|
229
|
+
threadId: z.string().describe('PageSpec design feedback thread ID to reply to'),
|
|
230
|
+
body: z.string().describe('The reply comment text'),
|
|
231
|
+
}, async ({ threadId, body }) => {
|
|
232
|
+
const comment = await client.post(`/feedback/${encodeURIComponent(threadId)}/comments`, {
|
|
233
|
+
author: { name: 'AI Assistant', type: 'ai' },
|
|
234
|
+
body,
|
|
235
|
+
});
|
|
236
|
+
return {
|
|
237
|
+
content: [
|
|
238
|
+
{
|
|
239
|
+
type: 'text',
|
|
240
|
+
text: `Reply added.\n${JSON.stringify(comment, null, 2)}`,
|
|
241
|
+
},
|
|
242
|
+
],
|
|
243
|
+
};
|
|
244
|
+
});
|
|
245
|
+
server.tool('feedback_resolve', 'Resolve a PageSpec design feedback thread after addressing it. Include a comment explaining what was changed.', {
|
|
246
|
+
threadId: z.string().describe('PageSpec design feedback thread ID to resolve'),
|
|
247
|
+
body: z
|
|
248
|
+
.string()
|
|
249
|
+
.optional()
|
|
250
|
+
.describe('Resolution comment explaining what was changed'),
|
|
251
|
+
}, async ({ threadId, body }) => {
|
|
252
|
+
const thread = await client.post(`/feedback/${encodeURIComponent(threadId)}/resolve`, {
|
|
253
|
+
author: { name: 'AI Assistant', type: 'ai' },
|
|
254
|
+
body,
|
|
255
|
+
});
|
|
256
|
+
return {
|
|
257
|
+
content: [
|
|
258
|
+
{
|
|
259
|
+
type: 'text',
|
|
260
|
+
text: `Thread resolved.\n${JSON.stringify(thread, null, 2)}`,
|
|
261
|
+
},
|
|
262
|
+
],
|
|
263
|
+
};
|
|
264
|
+
});
|
|
141
265
|
return server;
|
|
142
266
|
}
|
|
143
267
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viyv/agent-ui-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"clean": "rm -rf dist"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@viyv/agent-ui-schema": "
|
|
24
|
+
"@viyv/agent-ui-schema": "workspace:*",
|
|
25
25
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
26
26
|
"zod": "^3.24.0"
|
|
27
27
|
},
|
package/src/api-client.ts
CHANGED
|
@@ -55,6 +55,19 @@ export class ApiClient {
|
|
|
55
55
|
return response.json() as Promise<T>;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
async patch<T = unknown>(path: string, body: unknown): Promise<T> {
|
|
59
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
60
|
+
method: 'PATCH',
|
|
61
|
+
headers: this.headers,
|
|
62
|
+
body: JSON.stringify(body),
|
|
63
|
+
});
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
const text = await response.text();
|
|
66
|
+
throw new Error(`API PATCH ${path} failed: ${response.status} - ${text}`);
|
|
67
|
+
}
|
|
68
|
+
return response.json() as Promise<T>;
|
|
69
|
+
}
|
|
70
|
+
|
|
58
71
|
async delete(path: string): Promise<void> {
|
|
59
72
|
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
60
73
|
method: 'DELETE',
|
package/src/server.ts
CHANGED
|
@@ -59,7 +59,7 @@ export function createMcpServer(client: ApiClient, options?: McpServerOptions):
|
|
|
59
59
|
|
|
60
60
|
// ── Page management tools ──
|
|
61
61
|
|
|
62
|
-
server.tool('list_pages', 'List all saved pages.', {}, async () => {
|
|
62
|
+
server.tool('list_pages', 'List all saved PageSpec pages with metadata.', {}, async () => {
|
|
63
63
|
const pages = await client.get<Array<Record<string, unknown>>>('/pages');
|
|
64
64
|
if (baseUrl && Array.isArray(pages)) {
|
|
65
65
|
for (const page of pages) {
|
|
@@ -73,7 +73,7 @@ export function createMcpServer(client: ApiClient, options?: McpServerOptions):
|
|
|
73
73
|
|
|
74
74
|
server.tool(
|
|
75
75
|
'get_page',
|
|
76
|
-
'
|
|
76
|
+
'Retrieve the full PageSpec JSON definition of a saved page.',
|
|
77
77
|
{ pageId: z.string().describe('The page ID to retrieve') },
|
|
78
78
|
async ({ pageId }) => {
|
|
79
79
|
const spec = await client.get(`/pages/${pageId}`);
|
|
@@ -224,5 +224,194 @@ export function createMcpServer(client: ApiClient, options?: McpServerOptions):
|
|
|
224
224
|
},
|
|
225
225
|
);
|
|
226
226
|
|
|
227
|
+
// ── Page partial read/write tools ──
|
|
228
|
+
|
|
229
|
+
server.tool(
|
|
230
|
+
'outline_page',
|
|
231
|
+
'Get a structural outline of a page without full element details. Shows the element tree hierarchy with component types, truncated at a configurable depth. Use this before get_page to understand page structure and decide which elements to read or modify.',
|
|
232
|
+
{
|
|
233
|
+
pageId: z.string().describe('The page ID'),
|
|
234
|
+
depth: z
|
|
235
|
+
.number()
|
|
236
|
+
.optional()
|
|
237
|
+
.describe(
|
|
238
|
+
'Tree depth limit (default: 3). Elements beyond this depth show childCount instead of expanding.',
|
|
239
|
+
),
|
|
240
|
+
},
|
|
241
|
+
async ({ pageId, depth }) => {
|
|
242
|
+
const query = depth != null ? `?depth=${depth}` : '';
|
|
243
|
+
const outline = await client.get(`/pages/${pageId}/outline${query}`);
|
|
244
|
+
return { content: [{ type: 'text', text: JSON.stringify(outline, null, 2) }] };
|
|
245
|
+
},
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
server.tool(
|
|
249
|
+
'read_elements',
|
|
250
|
+
'Read specific elements from a page by their IDs. Returns full element definitions (type, props, children, visible) for only the requested elements. Use after outline_page to inspect specific parts of a page without loading the entire spec.',
|
|
251
|
+
{
|
|
252
|
+
pageId: z.string().describe('The page ID'),
|
|
253
|
+
elementIds: z.array(z.string()).describe('Array of element IDs to read'),
|
|
254
|
+
subtree: z
|
|
255
|
+
.boolean()
|
|
256
|
+
.optional()
|
|
257
|
+
.describe(
|
|
258
|
+
'If true, also return all descendant elements of the requested IDs (recursive)',
|
|
259
|
+
),
|
|
260
|
+
},
|
|
261
|
+
async ({ pageId, elementIds, subtree }) => {
|
|
262
|
+
let query = `?ids=${elementIds.map(encodeURIComponent).join(',')}`;
|
|
263
|
+
if (subtree) query += '&subtree=true';
|
|
264
|
+
const elements = await client.get(`/pages/${pageId}/elements${query}`);
|
|
265
|
+
return { content: [{ type: 'text', text: JSON.stringify(elements, null, 2) }] };
|
|
266
|
+
},
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
server.tool(
|
|
270
|
+
'patch_page',
|
|
271
|
+
'Apply JSON Patch (RFC 6902) operations to modify specific parts of a page without rewriting the entire spec. Supports add, remove, replace, move, copy, and test operations. The patched result is validated before saving. Use for fine-grained changes like updating a single prop value.',
|
|
272
|
+
{
|
|
273
|
+
pageId: z.string().describe('The page ID to patch'),
|
|
274
|
+
operations: z
|
|
275
|
+
.array(
|
|
276
|
+
z.object({
|
|
277
|
+
op: z.enum(['add', 'remove', 'replace', 'move', 'copy', 'test']),
|
|
278
|
+
path: z
|
|
279
|
+
.string()
|
|
280
|
+
.describe(
|
|
281
|
+
'JSON Pointer path (e.g. "/elements/header/props/title", "/hooks/data/params/url")',
|
|
282
|
+
),
|
|
283
|
+
value: z
|
|
284
|
+
.unknown()
|
|
285
|
+
.optional()
|
|
286
|
+
.describe('Value for add/replace/test operations'),
|
|
287
|
+
from: z
|
|
288
|
+
.string()
|
|
289
|
+
.optional()
|
|
290
|
+
.describe('Source path for move/copy operations'),
|
|
291
|
+
}),
|
|
292
|
+
)
|
|
293
|
+
.describe('Array of JSON Patch operations'),
|
|
294
|
+
},
|
|
295
|
+
async ({ pageId, operations }) => {
|
|
296
|
+
const result = await client.patch<{ id: string; updatedAt: string }>(
|
|
297
|
+
`/pages/${pageId}`,
|
|
298
|
+
operations,
|
|
299
|
+
);
|
|
300
|
+
return {
|
|
301
|
+
content: [
|
|
302
|
+
{
|
|
303
|
+
type: 'text',
|
|
304
|
+
text: `Page patched!\n\nPage ID: ${result.id}\nUpdated at: ${result.updatedAt}\nOperations applied: ${operations.length}\nURL: ${pageUrl(result.id)}`,
|
|
305
|
+
},
|
|
306
|
+
],
|
|
307
|
+
};
|
|
308
|
+
},
|
|
309
|
+
);
|
|
310
|
+
|
|
311
|
+
server.tool(
|
|
312
|
+
'update_elements',
|
|
313
|
+
'Add or update specific elements in a page. Merges the provided elements into the existing elements map. Simpler than patch_page for the common case of adding/modifying elements. To delete elements, use patch_page with "remove" operations instead.',
|
|
314
|
+
{
|
|
315
|
+
pageId: z.string().describe('The page ID'),
|
|
316
|
+
elements: z
|
|
317
|
+
.record(z.unknown())
|
|
318
|
+
.describe(
|
|
319
|
+
'Map of element ID to element definition ({ type, props, children?, visible? }). Existing elements with matching IDs are replaced; new IDs are added.',
|
|
320
|
+
),
|
|
321
|
+
},
|
|
322
|
+
async ({ pageId, elements }) => {
|
|
323
|
+
const result = await client.post<{
|
|
324
|
+
id: string;
|
|
325
|
+
updatedAt: string;
|
|
326
|
+
updatedElements: string[];
|
|
327
|
+
}>(`/pages/${pageId}/elements`, elements);
|
|
328
|
+
return {
|
|
329
|
+
content: [
|
|
330
|
+
{
|
|
331
|
+
type: 'text',
|
|
332
|
+
text: `Elements updated!\n\nPage ID: ${result.id}\nUpdated at: ${result.updatedAt}\nElements: ${result.updatedElements.join(', ')}\nURL: ${pageUrl(result.id)}`,
|
|
333
|
+
},
|
|
334
|
+
],
|
|
335
|
+
};
|
|
336
|
+
},
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
// ── Feedback tools ──
|
|
340
|
+
|
|
341
|
+
server.tool(
|
|
342
|
+
'feedback_list',
|
|
343
|
+
'List PageSpec design feedback threads for a page. Returns threads with element IDs, comments, and status from human reviewers.',
|
|
344
|
+
{
|
|
345
|
+
pageId: z.string().describe('PageSpec page ID to list design feedback for'),
|
|
346
|
+
status: z
|
|
347
|
+
.enum(['open', 'resolved'])
|
|
348
|
+
.optional()
|
|
349
|
+
.describe('Filter by status (omit for all)'),
|
|
350
|
+
},
|
|
351
|
+
async ({ pageId, status }) => {
|
|
352
|
+
let query = `?pageId=${encodeURIComponent(pageId)}`;
|
|
353
|
+
if (status) query += `&status=${encodeURIComponent(status)}`;
|
|
354
|
+
const threads = await client.get(`/feedback${query}`);
|
|
355
|
+
return {
|
|
356
|
+
content: [{ type: 'text', text: JSON.stringify(threads, null, 2) }],
|
|
357
|
+
};
|
|
358
|
+
},
|
|
359
|
+
);
|
|
360
|
+
|
|
361
|
+
server.tool(
|
|
362
|
+
'feedback_reply',
|
|
363
|
+
'Reply to a PageSpec design feedback thread. Use to ask clarifying questions or provide status updates.',
|
|
364
|
+
{
|
|
365
|
+
threadId: z.string().describe('PageSpec design feedback thread ID to reply to'),
|
|
366
|
+
body: z.string().describe('The reply comment text'),
|
|
367
|
+
},
|
|
368
|
+
async ({ threadId, body }) => {
|
|
369
|
+
const comment = await client.post(
|
|
370
|
+
`/feedback/${encodeURIComponent(threadId)}/comments`,
|
|
371
|
+
{
|
|
372
|
+
author: { name: 'AI Assistant', type: 'ai' },
|
|
373
|
+
body,
|
|
374
|
+
},
|
|
375
|
+
);
|
|
376
|
+
return {
|
|
377
|
+
content: [
|
|
378
|
+
{
|
|
379
|
+
type: 'text',
|
|
380
|
+
text: `Reply added.\n${JSON.stringify(comment, null, 2)}`,
|
|
381
|
+
},
|
|
382
|
+
],
|
|
383
|
+
};
|
|
384
|
+
},
|
|
385
|
+
);
|
|
386
|
+
|
|
387
|
+
server.tool(
|
|
388
|
+
'feedback_resolve',
|
|
389
|
+
'Resolve a PageSpec design feedback thread after addressing it. Include a comment explaining what was changed.',
|
|
390
|
+
{
|
|
391
|
+
threadId: z.string().describe('PageSpec design feedback thread ID to resolve'),
|
|
392
|
+
body: z
|
|
393
|
+
.string()
|
|
394
|
+
.optional()
|
|
395
|
+
.describe('Resolution comment explaining what was changed'),
|
|
396
|
+
},
|
|
397
|
+
async ({ threadId, body }) => {
|
|
398
|
+
const thread = await client.post(
|
|
399
|
+
`/feedback/${encodeURIComponent(threadId)}/resolve`,
|
|
400
|
+
{
|
|
401
|
+
author: { name: 'AI Assistant', type: 'ai' },
|
|
402
|
+
body,
|
|
403
|
+
},
|
|
404
|
+
);
|
|
405
|
+
return {
|
|
406
|
+
content: [
|
|
407
|
+
{
|
|
408
|
+
type: 'text',
|
|
409
|
+
text: `Thread resolved.\n${JSON.stringify(thread, null, 2)}`,
|
|
410
|
+
},
|
|
411
|
+
],
|
|
412
|
+
};
|
|
413
|
+
},
|
|
414
|
+
);
|
|
415
|
+
|
|
227
416
|
return server;
|
|
228
417
|
}
|