@cmssy/mcp-server 0.55.0 → 0.56.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/README.md CHANGED
@@ -79,13 +79,13 @@ already returned a compact ack and don't take `response`.
79
79
 
80
80
  ### Read Tools
81
81
 
82
- | Tool | Description |
83
- | -------------------- | ------------------------------------------------------ |
84
- | `list_pages` | Page tree with hierarchy (optional `search` filter) |
85
- | `get_page` | Full page with blocks and i18n content (by slug or id) |
86
- | `get_site_config` | Languages, navigation, site name |
87
- | `get_workspace_info` | Workspace name, plan, limits |
88
- | `list_media` | Media library listing |
82
+ | Tool | Description |
83
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
84
+ | `list_pages` | Page tree with hierarchy (optional `search` filter) |
85
+ | `get_page` | Full page with blocks, i18n content and region settings (own `regionSettings` + resolved `resolvedRegions` with inheritance source) by slug or id |
86
+ | `get_site_config` | Languages, navigation, site name |
87
+ | `get_workspace_info` | Workspace name, plan, limits |
88
+ | `list_media` | Media library listing |
89
89
 
90
90
  ### Write Tools
91
91
 
@@ -101,13 +101,34 @@ already returned a compact ack and don't take `response`.
101
101
 
102
102
  ### Block Helper Tools
103
103
 
104
- | Tool | Description |
105
- | ------------------------ | --------------------------------------------------------------- |
106
- | `add_block_to_page` | Insert a block at position (auto-generates UUID + translations) |
107
- | `update_block_content` | Merge content into an existing block |
108
- | `patch_block_content` | Surgical HTML patch (insert/replace around unique markers) |
109
- | `remove_block_from_page` | Remove a block by ID |
110
- | `update_page_layout` | Update layout blocks and overrides |
104
+ | Tool | Description |
105
+ | ------------------------ | ------------------------------------------------------------------------------ |
106
+ | `add_block_to_page` | Insert a block at position (auto-generates UUID + translations) |
107
+ | `update_block_content` | Merge content into an existing block |
108
+ | `patch_block_content` | Surgical HTML patch (insert/replace around unique markers) |
109
+ | `remove_block_from_page` | Remove a block by ID |
110
+ | `update_page_layout` | Update layout blocks and overrides |
111
+ | `update_region_settings` | Set one layout region's settings (manifest-validated; other regions untouched) |
112
+
113
+ #### `update_region_settings`
114
+
115
+ Region (layout position) settings are declared by the workspace's layout
116
+ manifest and validated against it on write. The tool reads the page's current
117
+ `layoutPositionSettings`, replaces only the named region and writes the whole
118
+ list back, so sibling regions keep their values (entries for regions the
119
+ manifest no longer declares, and keys a region's schema no longer has, are
120
+ dropped on the way - the same pruning the admin editor does). The backend's own
121
+ `BAD_USER_INPUT` message is returned verbatim for an unknown region, an unknown
122
+ key, or a non-empty `values` on a region that declares no settings (such a
123
+ region accepts `values: {}` only); `blockWarnings` are surfaced when present.
124
+
125
+ ```jsonc
126
+ { "pageId": "...", "region": "sidebar", "values": { "width": "wide" } }
127
+ ```
128
+
129
+ Child pages inherit a region's settings unless they set their own -
130
+ `get_page` shows the effective value per region in `resolvedRegions`
131
+ (`settingsAreInherited`, `settingsSourcePageId`).
111
132
 
112
133
  #### `patch_block_content`
113
134
 
@@ -36,6 +36,15 @@ const PAYLOADS = [
36
36
  size: 1024,
37
37
  },
38
38
  ],
39
+ [
40
+ "UpdateLayoutPositionSettingsInput",
41
+ "UpdateLayoutPositionSettingsInput",
42
+ {
43
+ pageId: "p1",
44
+ expectedVersion: 7,
45
+ settings: [{ position: "sidebar", values: { width: "wide" } }],
46
+ },
47
+ ],
39
48
  ];
40
49
  describe("MCP variable payloads satisfy the backend SDL", () => {
41
50
  it.each(PAYLOADS)("%s is complete", (_name, typeName, payload) => {
@@ -1 +1 @@
1
- {"version":3,"file":"operations.validate.test.js","sourceRoot":"","sources":["../../src/__tests__/operations.validate.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,EACL,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAE5C,oEAAoE;AACpE,gFAAgF;AAChF,iFAAiF;AACjF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5E,MAAM,QAAQ,GAAG,IAAI,CACnB,SAAS,EACT,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,gBAAgB,CAClD,CAAC;AACF,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAC5D,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAC/D,CAAC;AAEF,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAC3E,kBAAkB;AAClB,MAAM,QAAQ,GAAqD;IACjE;QACE,kBAAkB;QAClB,kBAAkB;QAClB;YACE,QAAQ,EAAE,uBAAuB;YACjC,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,IAAI;SACX;KACF;CACF,CAAC;AAEF,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,oCAAoC,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;YACtD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"operations.validate.test.js","sourceRoot":"","sources":["../../src/__tests__/operations.validate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=region-settings.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region-settings.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/region-settings.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,343 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { createMcpWorkspaceOps } from "../ai-tools-ops.js";
3
+ import { createServer } from "../server.js";
4
+ import { PAGE_RESOLVED_LAYOUTS_QUERY } from "../queries.js";
5
+ import { mergeRegionSettings, parseLayoutRegions, pruneRegionSettings, updateRegionSettings, } from "../region-settings.js";
6
+ function clientRecording(respond) {
7
+ const sent = [];
8
+ const query = vi.fn(async (document, variables) => {
9
+ const vars = (variables ?? {});
10
+ sent.push({ document, variables: vars });
11
+ return respond(document, vars);
12
+ });
13
+ return { client: { query }, sent };
14
+ }
15
+ const manifestRegions = [
16
+ { id: "header", settings: { variant: { type: "select" } } },
17
+ { id: "sidebar", settings: { width: { type: "select" } } },
18
+ { id: "footer" },
19
+ ];
20
+ const existing = [
21
+ { position: "header", values: { variant: "dark" } },
22
+ { position: "sidebar", values: { width: "narrow" } },
23
+ ];
24
+ const serverEcho = (vars) => ({
25
+ page: {
26
+ updateLayoutPositionSettings: {
27
+ id: "p1",
28
+ version: 8,
29
+ blockWarnings: null,
30
+ hasUnpublishedLayoutChanges: true,
31
+ updatedAt: "2026-08-30T10:00:00.000Z",
32
+ layoutPositionSettings: vars.input.settings,
33
+ },
34
+ },
35
+ });
36
+ function pageReadThenWrite(write = serverEcho, stored = existing, regions = manifestRegions) {
37
+ return clientRecording((document, vars) => {
38
+ if (document.includes("mutation UpdateLayoutPositionSettings"))
39
+ return write(vars);
40
+ if (document.includes("query PageRegionSettings"))
41
+ return {
42
+ page: { get: { id: "p1", version: 7, layoutPositionSettings: stored } },
43
+ };
44
+ if (document.includes("query LayoutRegions"))
45
+ return { blockManifest: { get: { regions } } };
46
+ throw new Error(`unexpected document: ${document.slice(0, 40)}`);
47
+ });
48
+ }
49
+ function writeInput(sent) {
50
+ const write = sent.find((s) => s.document.includes("mutation"));
51
+ return write?.variables.input;
52
+ }
53
+ describe("mergeRegionSettings", () => {
54
+ it("replaces only the named region and keeps the others", () => {
55
+ expect(mergeRegionSettings(existing, "sidebar", { width: "wide" })).toEqual([
56
+ { position: "header", values: { variant: "dark" } },
57
+ { position: "sidebar", values: { width: "wide" } },
58
+ ]);
59
+ });
60
+ it("appends a region the page had no settings for", () => {
61
+ expect(mergeRegionSettings(existing, "footer", { columns: 3 })).toEqual([
62
+ ...existing,
63
+ { position: "footer", values: { columns: 3 } },
64
+ ]);
65
+ });
66
+ });
67
+ describe("pruneRegionSettings", () => {
68
+ it("drops regions the manifest no longer declares", () => {
69
+ expect(pruneRegionSettings(manifestRegions, [
70
+ ...existing,
71
+ { position: "promo", values: { text: "old" } },
72
+ ])).toEqual(existing);
73
+ });
74
+ it("drops keys a region's schema no longer has", () => {
75
+ expect(pruneRegionSettings(manifestRegions, [
76
+ { position: "sidebar", values: { width: "wide", colour: "red" } },
77
+ ])).toEqual([{ position: "sidebar", values: { width: "wide" } }]);
78
+ });
79
+ it("resets a region without a schema to empty values", () => {
80
+ expect(pruneRegionSettings(manifestRegions, [
81
+ { position: "footer", values: { columns: 3 } },
82
+ ])).toEqual([{ position: "footer", values: {} }]);
83
+ });
84
+ });
85
+ describe("parseLayoutRegions", () => {
86
+ it("keeps only entries with a string id and an object schema", () => {
87
+ expect(parseLayoutRegions([
88
+ { id: "sidebar", settings: { width: {} } },
89
+ { id: "header", settings: "nope" },
90
+ { id: 3 },
91
+ "header",
92
+ ])).toEqual([{ id: "sidebar", settings: { width: {} } }, { id: "header" }]);
93
+ });
94
+ it("falls back to header/footer when the manifest declares none", () => {
95
+ expect(parseLayoutRegions(null)).toEqual([
96
+ { id: "header" },
97
+ { id: "footer" },
98
+ ]);
99
+ expect(parseLayoutRegions([])).toEqual([
100
+ { id: "header" },
101
+ { id: "footer" },
102
+ ]);
103
+ });
104
+ });
105
+ describe("update_region_settings (CMS-1710)", () => {
106
+ it("reads the page, then the manifest, then writes the full merged list with the version it read", async () => {
107
+ const { client, sent } = pageReadThenWrite();
108
+ const result = await updateRegionSettings(client, {
109
+ pageId: "p1",
110
+ region: "sidebar",
111
+ values: { width: "wide" },
112
+ });
113
+ expect(sent.map((s) => /(query|mutation) (\w+)/.exec(s.document)?.[2])).toEqual([
114
+ "PageRegionSettings",
115
+ "LayoutRegions",
116
+ "UpdateLayoutPositionSettings",
117
+ ]);
118
+ expect(sent[0].variables).toEqual({ pageId: "p1" });
119
+ expect(sent[2].variables).toStrictEqual({
120
+ input: {
121
+ pageId: "p1",
122
+ expectedVersion: 7,
123
+ settings: [
124
+ { position: "header", values: { variant: "dark" } },
125
+ { position: "sidebar", values: { width: "wide" } },
126
+ ],
127
+ },
128
+ });
129
+ expect(result).toStrictEqual({
130
+ id: "p1",
131
+ version: 8,
132
+ region: "sidebar",
133
+ regionSettings: [
134
+ { position: "header", values: { variant: "dark" } },
135
+ { position: "sidebar", values: { width: "wide" } },
136
+ ],
137
+ hasUnpublishedLayoutChanges: true,
138
+ updatedAt: "2026-08-30T10:00:00.000Z",
139
+ });
140
+ });
141
+ it("returns the server's stored list, not the payload it sent", async () => {
142
+ const stored = [
143
+ { position: "header", values: { variant: "dark" } },
144
+ { position: "sidebar", values: { width: "wide", normalised: true } },
145
+ ];
146
+ const { client } = pageReadThenWrite(() => ({
147
+ page: {
148
+ updateLayoutPositionSettings: {
149
+ id: "p1",
150
+ version: 9,
151
+ blockWarnings: null,
152
+ hasUnpublishedLayoutChanges: true,
153
+ updatedAt: null,
154
+ layoutPositionSettings: stored,
155
+ },
156
+ },
157
+ }));
158
+ const result = await updateRegionSettings(client, {
159
+ pageId: "p1",
160
+ region: "sidebar",
161
+ values: { width: "wide" },
162
+ });
163
+ expect(result.regionSettings).toBe(stored);
164
+ expect(result.version).toBe(9);
165
+ });
166
+ it("drops a stored entry for a region the manifest no longer declares", async () => {
167
+ const { client, sent } = pageReadThenWrite(serverEcho, [
168
+ ...existing,
169
+ { position: "promo", values: { text: "old" } },
170
+ ]);
171
+ await updateRegionSettings(client, {
172
+ pageId: "p1",
173
+ region: "sidebar",
174
+ values: { width: "wide" },
175
+ });
176
+ expect(writeInput(sent).settings.map((s) => s.position)).toEqual([
177
+ "header",
178
+ "sidebar",
179
+ ]);
180
+ });
181
+ it("drops a stored key the region's schema no longer has, but sends the caller's values untouched", async () => {
182
+ const { client, sent } = pageReadThenWrite(serverEcho, [
183
+ { position: "header", values: { variant: "dark", gone: 1 } },
184
+ ]);
185
+ await updateRegionSettings(client, {
186
+ pageId: "p1",
187
+ region: "sidebar",
188
+ values: { colour: "red" },
189
+ });
190
+ expect(writeInput(sent).settings).toEqual([
191
+ { position: "header", values: { variant: "dark" } },
192
+ { position: "sidebar", values: { colour: "red" } },
193
+ ]);
194
+ });
195
+ it("prunes against header/footer when the manifest declares no regions", async () => {
196
+ const { client, sent } = pageReadThenWrite(serverEcho, [
197
+ { position: "header", values: {} },
198
+ { position: "sidebar", values: { width: "narrow" } },
199
+ ], null);
200
+ await updateRegionSettings(client, {
201
+ pageId: "p1",
202
+ region: "footer",
203
+ values: {},
204
+ });
205
+ expect(writeInput(sent).settings).toEqual([
206
+ { position: "header", values: {} },
207
+ { position: "footer", values: {} },
208
+ ]);
209
+ });
210
+ it("prefers the caller's expectedVersion over the one it read", async () => {
211
+ const { client, sent } = pageReadThenWrite();
212
+ await updateRegionSettings(client, {
213
+ pageId: "p1",
214
+ region: "sidebar",
215
+ values: {},
216
+ expectedVersion: 3,
217
+ });
218
+ expect(writeInput(sent).expectedVersion).toBe(3);
219
+ });
220
+ it("surfaces blockWarnings from the write", async () => {
221
+ const { client } = pageReadThenWrite((vars) => ({
222
+ page: {
223
+ updateLayoutPositionSettings: {
224
+ ...serverEcho(vars).page.updateLayoutPositionSettings,
225
+ blockWarnings: ["sidebar.width: expected one of narrow|wide"],
226
+ },
227
+ },
228
+ }));
229
+ const result = await updateRegionSettings(client, {
230
+ pageId: "p1",
231
+ region: "sidebar",
232
+ values: { width: "huge" },
233
+ });
234
+ expect(result.blockWarnings).toEqual([
235
+ "sidebar.width: expected one of narrow|wide",
236
+ ]);
237
+ });
238
+ it("passes the backend's BAD_USER_INPUT message through verbatim", async () => {
239
+ const message = 'Layout region "sidebar": unknown setting(s) colour - declared: width';
240
+ const { client } = pageReadThenWrite(() => {
241
+ throw new Error(message);
242
+ });
243
+ await expect(updateRegionSettings(client, {
244
+ pageId: "p1",
245
+ region: "sidebar",
246
+ values: { colour: "red" },
247
+ })).rejects.toThrow(message);
248
+ });
249
+ it("refuses to write when the page does not exist", async () => {
250
+ const { client, sent } = clientRecording(() => ({ page: { get: null } }));
251
+ await expect(updateRegionSettings(client, {
252
+ pageId: "missing",
253
+ region: "sidebar",
254
+ values: {},
255
+ })).rejects.toThrow("Page not found");
256
+ expect(sent).toHaveLength(1);
257
+ });
258
+ it("is bound through the shared binder, so values given as a JSON string are accepted", async () => {
259
+ const { client, sent } = pageReadThenWrite();
260
+ const server = createServer(client);
261
+ const tool = server._registeredTools.update_region_settings;
262
+ const parsed = tool.inputSchema.parse({
263
+ pageId: "p1",
264
+ region: "sidebar",
265
+ values: '{"width":"wide"}',
266
+ });
267
+ const out = await tool.handler(parsed, {});
268
+ expect(out.isError).toBeUndefined();
269
+ expect(writeInput(sent).settings).toContainEqual({
270
+ position: "sidebar",
271
+ values: { width: "wide" },
272
+ });
273
+ expect(JSON.parse(out.content[0].text)).toMatchObject({
274
+ region: "sidebar",
275
+ });
276
+ });
277
+ });
278
+ describe("get_page region settings (CMS-1710)", () => {
279
+ const resolved = [
280
+ {
281
+ position: "sidebar",
282
+ isInherited: true,
283
+ sourcePageId: "docs",
284
+ settings: { width: "narrow" },
285
+ settingsAreInherited: true,
286
+ settingsSourcePageId: "docs",
287
+ },
288
+ ];
289
+ function pageClient() {
290
+ return clientRecording((document, vars) => {
291
+ if (document.includes("query PageResolvedLayouts")) {
292
+ if (vars.pageId !== "p1")
293
+ throw new Error("NOT_FOUND");
294
+ return { page: { resolvedLayouts: resolved } };
295
+ }
296
+ if (vars.pageId === "missing")
297
+ return { page: { get: null } };
298
+ return {
299
+ page: {
300
+ get: {
301
+ id: "p1",
302
+ name: "Page",
303
+ slug: "/page",
304
+ layoutPositionSettings: [
305
+ { position: "header", values: { variant: "dark" } },
306
+ ],
307
+ },
308
+ },
309
+ };
310
+ });
311
+ }
312
+ it("returns the page's own region settings and the resolved (inherited) ones", async () => {
313
+ const { client, sent } = pageClient();
314
+ const ops = createMcpWorkspaceOps(client);
315
+ const page = (await ops.pages.get("p1"));
316
+ expect(sent[0].document).toContain("layoutPositionSettings { position values }");
317
+ expect(page.regionSettings).toEqual([
318
+ { position: "header", values: { variant: "dark" } },
319
+ ]);
320
+ expect(page.resolvedRegions).toEqual(resolved);
321
+ });
322
+ it("resolves a slug to the page id before asking for resolved layouts", async () => {
323
+ const { client, sent } = pageClient();
324
+ const ops = createMcpWorkspaceOps(client);
325
+ const page = (await ops.pages.get("page"));
326
+ expect(sent[1].document).toContain("query PageResolvedLayouts");
327
+ expect(sent[1].variables).toEqual({ pageId: "p1" });
328
+ expect(page.resolvedRegions).toEqual(resolved);
329
+ });
330
+ it("returns null for a missing page without asking for resolved layouts", async () => {
331
+ const { client, sent } = pageClient();
332
+ const ops = createMcpWorkspaceOps(client);
333
+ expect(await ops.pages.get("missing")).toBeNull();
334
+ expect(sent).toHaveLength(1);
335
+ });
336
+ it("selects the settings inheritance fields on resolved layouts", () => {
337
+ expect(PAGE_RESOLVED_LAYOUTS_QUERY).toContain("settingsAreInherited");
338
+ expect(PAGE_RESOLVED_LAYOUTS_QUERY).toContain("settingsSourcePageId");
339
+ expect(PAGE_RESOLVED_LAYOUTS_QUERY).toContain("isInherited");
340
+ expect(PAGE_RESOLVED_LAYOUTS_QUERY).toContain("sourcePageId");
341
+ });
342
+ });
343
+ //# sourceMappingURL=region-settings.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region-settings.test.js","sourceRoot":"","sources":["../../src/__tests__/region-settings.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-tools-ops.d.ts","sourceRoot":"","sources":["../src/ai-tools-ops.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,iBAAiB,CAAC;AA+FzB,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,iBAAiB,EAC1D,MAAM,EAAE,CAAC,EAAE,GACV,CAAC,EAAE,CAaL;AA2ID;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,eAAe,EAAE,MAAM,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAqGD,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,aAAa,EAAE,CAqC5E;AAqCD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,CAw2DvE"}
1
+ {"version":3,"file":"ai-tools-ops.d.ts","sourceRoot":"","sources":["../src/ai-tools-ops.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOvD,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,iBAAiB,CAAC;AAgGzB,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,iBAAiB,EAC1D,MAAM,EAAE,CAAC,EAAE,GACV,CAAC,EAAE,CAaL;AAsJD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,eAAe,EAAE,MAAM,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAqGD,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,aAAa,EAAE,CAqC5E;AAqCD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,CA22DvE"}
@@ -1,6 +1,6 @@
1
1
  import { putObject } from "./put-object.js";
2
2
  import { mediaTypeFromMime, resolveUploadSource } from "./media-upload.js";
3
- import { MODEL_DEFINITION_BY_ID_QUERY, MODEL_DEFINITIONS_BY_SLUG_INDEX_QUERY, MODEL_DEFINITIONS_QUERY, MODEL_RECORDS_QUERY, MEDIA_ASSETS_QUERY, AUTHORIZE_MEDIA_UPLOAD_MUTATION, REGISTER_MEDIA_UPLOAD_MUTATION, UPDATE_MEDIA_MUTATION, MEDIA_FOLDERS_QUERY, CREATE_MEDIA_FOLDER_MUTATION, UPDATE_MEDIA_FOLDER_MUTATION, DELETE_MEDIA_FOLDER_MUTATION, MEMBERS_QUERY, ROLES_QUERY, FORMS_QUERY, ORDERS_QUERY, DISCOUNTS_QUERY, CREATE_MODEL_RECORD_MUTATION, CREATE_DISCOUNT_MUTATION, SAVE_PAGE_MUTATION, CREATE_FORM_MUTATION, CREATE_MODEL_DEFINITION_MUTATION, UPDATE_MODEL_DEFINITION_MUTATION, MODEL_RECORD_BY_ID_QUERY, UPDATE_MODEL_RECORD_MUTATION, UPDATE_MODEL_RECORD_STATUS_MUTATION, DELETE_MODEL_DEFINITION_MUTATION, DELETE_MODEL_RECORD_MUTATION, IMPORT_MODEL_RECORDS_MUTATION, PAGES_QUERY, PAGE_BY_ID_QUERY, PAGE_VERSION_QUERY, PAGE_TYPES_QUERY, CREATE_PAGE_TYPE_MUTATION, PAGE_TYPE_QUERY, UPDATE_PAGE_TYPE_MUTATION, DELETE_PAGE_TYPE_MUTATION, UPDATE_PAGE_SETTINGS_MUTATION, UPDATE_PAGE_LAYOUT_MUTATION, DEV_DRAFT_QUERY, SAVE_DEV_DRAFT_MUTATION, PROMOTE_DEV_DRAFT_MUTATION, PUBLISH_PAGE_CONTENT_MUTATION, PUBLISH_PAGE_LAYOUT_MUTATION, TOGGLE_PUBLISH_MUTATION, REVERT_CONTENT_TO_PUBLISHED_MUTATION, REVERT_LAYOUT_TO_PUBLISHED_MUTATION, REMOVE_PAGE_MUTATION, PATCH_BLOCK_CONTENT_MUTATION, SITE_CONFIG_QUERY, SITE_DEFAULT_LANGUAGE_QUERY, BLOCK_MANIFEST_QUERY, CURRENT_WORKSPACE_QUERY, FORM_BY_ID_QUERY, UPDATE_FORM_MUTATION, DELETE_FORM_MUTATION, FORM_SUBMISSIONS_QUERY, FORM_SUBMISSION_BY_ID_QUERY, UPDATE_FORM_SUBMISSION_STATUS_MUTATION, DELETE_FORM_SUBMISSION_MUTATION, ORDER_BY_ID_QUERY, ORDER_PIPELINE_QUERY, CREATE_MANUAL_ORDER_MUTATION, EDIT_ORDER_MUTATION, UPDATE_ORDER_DETAILS_MUTATION, MARK_ORDER_PAID_MUTATION, RECORD_ORDER_PAYMENT_MUTATION, REFUND_ORDER_MUTATION, CANCEL_ORDER_MUTATION, TRANSITION_ORDER_FULFILLMENT_MUTATION, SET_ORDER_PIPELINE_STAGE_MUTATION, RECORD_ORDER_INVOICE_MUTATION, DISCOUNT_BY_ID_QUERY, UPDATE_DISCOUNT_MUTATION, SET_DISCOUNT_ENABLED_MUTATION, WEBHOOK_ENDPOINTS_QUERY, WEBHOOK_DELIVERIES_QUERY, WEBHOOK_EVENT_TYPES_QUERY, CREATE_WEBHOOK_ENDPOINT_MUTATION, UPDATE_WEBHOOK_ENDPOINT_MUTATION, ROTATE_WEBHOOK_SECRET_MUTATION, DELETE_WEBHOOK_ENDPOINT_MUTATION, ADMIN_CARTS_QUERY, PRODUCT_CATALOG_QUERY, BULK_UPDATE_PRODUCT_RECORDS_MUTATION, BULK_DELETE_PRODUCT_RECORDS_MUTATION, SET_PRODUCT_TIERS_MUTATION, UPDATE_CART_CONFIG_MUTATION, CLEAR_CART_CONFIG_MUTATION, } from "./queries.js";
3
+ import { MODEL_DEFINITION_BY_ID_QUERY, MODEL_DEFINITIONS_BY_SLUG_INDEX_QUERY, MODEL_DEFINITIONS_QUERY, MODEL_RECORDS_QUERY, MEDIA_ASSETS_QUERY, AUTHORIZE_MEDIA_UPLOAD_MUTATION, REGISTER_MEDIA_UPLOAD_MUTATION, UPDATE_MEDIA_MUTATION, MEDIA_FOLDERS_QUERY, CREATE_MEDIA_FOLDER_MUTATION, UPDATE_MEDIA_FOLDER_MUTATION, DELETE_MEDIA_FOLDER_MUTATION, MEMBERS_QUERY, ROLES_QUERY, FORMS_QUERY, ORDERS_QUERY, DISCOUNTS_QUERY, CREATE_MODEL_RECORD_MUTATION, CREATE_DISCOUNT_MUTATION, SAVE_PAGE_MUTATION, CREATE_FORM_MUTATION, CREATE_MODEL_DEFINITION_MUTATION, UPDATE_MODEL_DEFINITION_MUTATION, MODEL_RECORD_BY_ID_QUERY, UPDATE_MODEL_RECORD_MUTATION, UPDATE_MODEL_RECORD_STATUS_MUTATION, DELETE_MODEL_DEFINITION_MUTATION, DELETE_MODEL_RECORD_MUTATION, IMPORT_MODEL_RECORDS_MUTATION, PAGES_QUERY, PAGE_BY_ID_QUERY, PAGE_RESOLVED_LAYOUTS_QUERY, PAGE_VERSION_QUERY, PAGE_TYPES_QUERY, CREATE_PAGE_TYPE_MUTATION, PAGE_TYPE_QUERY, UPDATE_PAGE_TYPE_MUTATION, DELETE_PAGE_TYPE_MUTATION, UPDATE_PAGE_SETTINGS_MUTATION, UPDATE_PAGE_LAYOUT_MUTATION, DEV_DRAFT_QUERY, SAVE_DEV_DRAFT_MUTATION, PROMOTE_DEV_DRAFT_MUTATION, PUBLISH_PAGE_CONTENT_MUTATION, PUBLISH_PAGE_LAYOUT_MUTATION, TOGGLE_PUBLISH_MUTATION, REVERT_CONTENT_TO_PUBLISHED_MUTATION, REVERT_LAYOUT_TO_PUBLISHED_MUTATION, REMOVE_PAGE_MUTATION, PATCH_BLOCK_CONTENT_MUTATION, SITE_CONFIG_QUERY, SITE_DEFAULT_LANGUAGE_QUERY, BLOCK_MANIFEST_QUERY, CURRENT_WORKSPACE_QUERY, FORM_BY_ID_QUERY, UPDATE_FORM_MUTATION, DELETE_FORM_MUTATION, FORM_SUBMISSIONS_QUERY, FORM_SUBMISSION_BY_ID_QUERY, UPDATE_FORM_SUBMISSION_STATUS_MUTATION, DELETE_FORM_SUBMISSION_MUTATION, ORDER_BY_ID_QUERY, ORDER_PIPELINE_QUERY, CREATE_MANUAL_ORDER_MUTATION, EDIT_ORDER_MUTATION, UPDATE_ORDER_DETAILS_MUTATION, MARK_ORDER_PAID_MUTATION, RECORD_ORDER_PAYMENT_MUTATION, REFUND_ORDER_MUTATION, CANCEL_ORDER_MUTATION, TRANSITION_ORDER_FULFILLMENT_MUTATION, SET_ORDER_PIPELINE_STAGE_MUTATION, RECORD_ORDER_INVOICE_MUTATION, DISCOUNT_BY_ID_QUERY, UPDATE_DISCOUNT_MUTATION, SET_DISCOUNT_ENABLED_MUTATION, WEBHOOK_ENDPOINTS_QUERY, WEBHOOK_DELIVERIES_QUERY, WEBHOOK_EVENT_TYPES_QUERY, CREATE_WEBHOOK_ENDPOINT_MUTATION, UPDATE_WEBHOOK_ENDPOINT_MUTATION, ROTATE_WEBHOOK_SECRET_MUTATION, DELETE_WEBHOOK_ENDPOINT_MUTATION, ADMIN_CARTS_QUERY, PRODUCT_CATALOG_QUERY, BULK_UPDATE_PRODUCT_RECORDS_MUTATION, BULK_DELETE_PRODUCT_RECORDS_MUTATION, SET_PRODUCT_TIERS_MUTATION, UPDATE_CART_CONFIG_MUTATION, CLEAR_CART_CONFIG_MUTATION, } from "./queries.js";
4
4
  const OBJECT_ID_RE = /^[a-f0-9]{24}$/i;
5
5
  export function toPropertyFields(fields) {
6
6
  return fields.map((field) => ({
@@ -87,6 +87,10 @@ async function loadPage(client, pageId) {
87
87
  const data = await client.query(PAGE_BY_ID_QUERY, { pageId });
88
88
  return data.page.get;
89
89
  }
90
+ async function loadResolvedRegions(client, pageId) {
91
+ const data = await client.query(PAGE_RESOLVED_LAYOUTS_QUERY, { pageId });
92
+ return data.page.resolvedLayouts;
93
+ }
90
94
  // Lightweight read for version-only guards - skips the full blocks/layout
91
95
  // payload PAGE_BY_ID_QUERY pulls in.
92
96
  async function loadPageVersion(client, pageId) {
@@ -459,7 +463,8 @@ export function createMcpWorkspaceOps(client) {
459
463
  const page = await loadPage(client, idOrSlug);
460
464
  if (!page)
461
465
  return null;
462
- return {
466
+ const regions = await loadResolvedRegions(client, page.id);
467
+ const detail = {
463
468
  id: page.id,
464
469
  name: page.name,
465
470
  slug: page.slug,
@@ -473,9 +478,12 @@ export function createMcpWorkspaceOps(client) {
473
478
  seoTitle: page.seoTitle ?? null,
474
479
  seoDescription: page.seoDescription ?? null,
475
480
  seoKeywords: page.seoKeywords ?? null,
481
+ regionSettings: page.layoutPositionSettings ?? [],
482
+ resolvedRegions: regions,
476
483
  createdAt: page.createdAt ?? null,
477
484
  updatedAt: page.updatedAt ?? null,
478
485
  };
486
+ return detail;
479
487
  },
480
488
  list: async (search) => {
481
489
  const res = await client.query(PAGES_QUERY, search ? { search } : {});