@wootsup/yt-builder-mcp 1.1.7 → 1.3.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 +14 -10
- package/bin/yt-builder-mcp.js +55 -40
- package/dist/auth.d.ts +18 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +18 -0
- package/dist/auth.js.map +1 -1
- package/dist/catalog/build-catalog.d.ts +63 -0
- package/dist/catalog/build-catalog.d.ts.map +1 -0
- package/dist/catalog/build-catalog.js +166 -0
- package/dist/catalog/build-catalog.js.map +1 -0
- package/dist/cli/invocation-decision.d.ts +57 -0
- package/dist/cli/invocation-decision.d.ts.map +1 -0
- package/dist/cli/invocation-decision.js +86 -0
- package/dist/cli/invocation-decision.js.map +1 -0
- package/dist/client.d.ts +28 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +40 -1
- package/dist/client.js.map +1 -1
- package/dist/clients/claude-code.d.ts.map +1 -1
- package/dist/clients/claude-code.js +3 -1
- package/dist/clients/claude-code.js.map +1 -1
- package/dist/clients/claude-desktop.d.ts.map +1 -1
- package/dist/clients/claude-desktop.js +3 -1
- package/dist/clients/claude-desktop.js.map +1 -1
- package/dist/clients/cline.d.ts.map +1 -1
- package/dist/clients/cline.js +3 -1
- package/dist/clients/cline.js.map +1 -1
- package/dist/clients/codex-cli.d.ts +1 -1
- package/dist/clients/codex-cli.d.ts.map +1 -1
- package/dist/clients/codex-cli.js +98 -0
- package/dist/clients/codex-cli.js.map +1 -1
- package/dist/clients/continue.d.ts.map +1 -1
- package/dist/clients/continue.js +70 -1
- package/dist/clients/continue.js.map +1 -1
- package/dist/clients/cursor.d.ts.map +1 -1
- package/dist/clients/cursor.js +3 -1
- package/dist/clients/cursor.js.map +1 -1
- package/dist/clients/gemini-cli.d.ts.map +1 -1
- package/dist/clients/gemini-cli.js +3 -1
- package/dist/clients/gemini-cli.js.map +1 -1
- package/dist/clients/index.d.ts +104 -0
- package/dist/clients/index.d.ts.map +1 -1
- package/dist/clients/index.js +141 -0
- package/dist/clients/index.js.map +1 -1
- package/dist/clients/roo-code.d.ts.map +1 -1
- package/dist/clients/roo-code.js +3 -1
- package/dist/clients/roo-code.js.map +1 -1
- package/dist/clients/zed.d.ts.map +1 -1
- package/dist/clients/zed.js +3 -1
- package/dist/clients/zed.js.map +1 -1
- package/dist/gateway/advanced-read-tool.d.ts +37 -0
- package/dist/gateway/advanced-read-tool.d.ts.map +1 -0
- package/dist/gateway/advanced-read-tool.js +156 -0
- package/dist/gateway/advanced-read-tool.js.map +1 -0
- package/dist/gateway/advanced-tool/domains.d.ts +18 -3
- package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/domains.js +28 -9
- package/dist/gateway/advanced-tool/domains.js.map +1 -1
- package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/register.js +43 -11
- package/dist/gateway/advanced-tool/register.js.map +1 -1
- package/dist/gateway/essentials.d.ts +14 -4
- package/dist/gateway/essentials.d.ts.map +1 -1
- package/dist/gateway/essentials.js +55 -5
- package/dist/gateway/essentials.js.map +1 -1
- package/dist/gateway/test-support.d.ts +3 -3
- package/dist/gateway/test-support.js +3 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/install-skill.js +1 -1
- package/dist/proxy/bridge.d.ts +36 -0
- package/dist/proxy/bridge.d.ts.map +1 -0
- package/dist/proxy/bridge.js +129 -0
- package/dist/proxy/bridge.js.map +1 -0
- package/dist/proxy/mode.d.ts +10 -0
- package/dist/proxy/mode.d.ts.map +1 -0
- package/dist/proxy/mode.js +20 -0
- package/dist/proxy/mode.js.map +1 -0
- package/dist/server.d.ts +6 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +14 -4
- package/dist/server.js.map +1 -1
- package/dist/setup-cli.d.ts +41 -0
- package/dist/setup-cli.d.ts.map +1 -1
- package/dist/setup-cli.js +163 -1
- package/dist/setup-cli.js.map +1 -1
- package/dist/setup-prompts.d.ts +23 -0
- package/dist/setup-prompts.d.ts.map +1 -1
- package/dist/setup-prompts.js +76 -1
- package/dist/setup-prompts.js.map +1 -1
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +7 -0
- package/dist/setup-wizard.js.map +1 -1
- package/dist/sites/bootstrap.d.ts +41 -0
- package/dist/sites/bootstrap.d.ts.map +1 -0
- package/dist/sites/bootstrap.js +58 -0
- package/dist/sites/bootstrap.js.map +1 -0
- package/dist/sites/client-pool.d.ts +33 -0
- package/dist/sites/client-pool.d.ts.map +1 -1
- package/dist/sites/client-pool.js +69 -1
- package/dist/sites/client-pool.js.map +1 -1
- package/dist/sites/registry.d.ts +30 -0
- package/dist/sites/registry.d.ts.map +1 -1
- package/dist/sites/registry.js.map +1 -1
- package/dist/sites/store.d.ts +8 -1
- package/dist/sites/store.d.ts.map +1 -1
- package/dist/sites/store.js +17 -2
- package/dist/sites/store.js.map +1 -1
- package/dist/sites/tools/index.d.ts.map +1 -1
- package/dist/sites/tools/index.js +9 -1
- package/dist/sites/tools/index.js.map +1 -1
- package/dist/sites/tools/use-site.d.ts +47 -0
- package/dist/sites/tools/use-site.d.ts.map +1 -0
- package/dist/sites/tools/use-site.js +203 -0
- package/dist/sites/tools/use-site.js.map +1 -0
- package/dist/tools/bind-guidance.d.ts +80 -0
- package/dist/tools/bind-guidance.d.ts.map +1 -0
- package/dist/tools/bind-guidance.js +95 -0
- package/dist/tools/bind-guidance.js.map +1 -0
- package/dist/tools/elements/builders.d.ts.map +1 -1
- package/dist/tools/elements/builders.js +75 -18
- package/dist/tools/elements/builders.js.map +1 -1
- package/dist/tools/elements/handlers-write.d.ts +20 -3
- package/dist/tools/elements/handlers-write.d.ts.map +1 -1
- package/dist/tools/elements/handlers-write.js +372 -10
- package/dist/tools/elements/handlers-write.js.map +1 -1
- package/dist/tools/elements/handlers.d.ts +6 -1
- package/dist/tools/elements/handlers.d.ts.map +1 -1
- package/dist/tools/elements/handlers.js +77 -10
- package/dist/tools/elements/handlers.js.map +1 -1
- package/dist/tools/elements/layout-hierarchy-rules.d.ts +62 -0
- package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +1 -0
- package/dist/tools/elements/layout-hierarchy-rules.js +154 -0
- package/dist/tools/elements/layout-hierarchy-rules.js.map +1 -0
- package/dist/tools/format/elements-format.d.ts +35 -0
- package/dist/tools/format/elements-format.d.ts.map +1 -1
- package/dist/tools/format/elements-format.js +134 -12
- package/dist/tools/format/elements-format.js.map +1 -1
- package/dist/tools/format/inspection-format.d.ts +29 -0
- package/dist/tools/format/inspection-format.d.ts.map +1 -1
- package/dist/tools/format/inspection-format.js +99 -22
- package/dist/tools/format/inspection-format.js.map +1 -1
- package/dist/tools/format/pages-format.d.ts.map +1 -1
- package/dist/tools/format/pages-format.js +7 -0
- package/dist/tools/format/pages-format.js.map +1 -1
- package/dist/tools/format/sources-format.d.ts +8 -0
- package/dist/tools/format/sources-format.d.ts.map +1 -1
- package/dist/tools/format/sources-format.js +10 -0
- package/dist/tools/format/sources-format.js.map +1 -1
- package/dist/tools/health.d.ts.map +1 -1
- package/dist/tools/health.js +24 -0
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspection.d.ts +24 -0
- package/dist/tools/inspection.d.ts.map +1 -1
- package/dist/tools/inspection.js +297 -5
- package/dist/tools/inspection.js.map +1 -1
- package/dist/tools/layout-flatten.d.ts +11 -8
- package/dist/tools/layout-flatten.d.ts.map +1 -1
- package/dist/tools/layout-flatten.js +17 -6
- package/dist/tools/layout-flatten.js.map +1 -1
- package/dist/tools/multi-items/builders.d.ts.map +1 -1
- package/dist/tools/multi-items/builders.js +18 -3
- package/dist/tools/multi-items/builders.js.map +1 -1
- package/dist/tools/multi-items/clean-implode-handler.d.ts.map +1 -1
- package/dist/tools/multi-items/clean-implode-handler.js +2 -2
- package/dist/tools/multi-items/clean-implode-handler.js.map +1 -1
- package/dist/tools/multi-items/format/inspection-format.d.ts +41 -0
- package/dist/tools/multi-items/format/inspection-format.d.ts.map +1 -0
- package/dist/tools/multi-items/format/inspection-format.js +64 -0
- package/dist/tools/multi-items/format/inspection-format.js.map +1 -0
- package/dist/tools/multi-items/inspect-handler.d.ts +50 -2
- package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -1
- package/dist/tools/multi-items/inspect-handler.js +237 -10
- package/dist/tools/multi-items/inspect-handler.js.map +1 -1
- package/dist/tools/multi-items/inspection-cache.d.ts +85 -0
- package/dist/tools/multi-items/inspection-cache.d.ts.map +1 -0
- package/dist/tools/multi-items/inspection-cache.js +126 -0
- package/dist/tools/multi-items/inspection-cache.js.map +1 -0
- package/dist/tools/pages/builders.d.ts +31 -2
- package/dist/tools/pages/builders.d.ts.map +1 -1
- package/dist/tools/pages/builders.js +173 -17
- package/dist/tools/pages/builders.js.map +1 -1
- package/dist/tools/pages/handlers-read.d.ts +6 -2
- package/dist/tools/pages/handlers-read.d.ts.map +1 -1
- package/dist/tools/pages/handlers-read.js +228 -26
- package/dist/tools/pages/handlers-read.js.map +1 -1
- package/dist/tools/pages/handlers-write.d.ts +143 -7
- package/dist/tools/pages/handlers-write.d.ts.map +1 -1
- package/dist/tools/pages/handlers-write.js +215 -11
- package/dist/tools/pages/handlers-write.js.map +1 -1
- package/dist/tools/pages/index.d.ts +1 -1
- package/dist/tools/pages/index.d.ts.map +1 -1
- package/dist/tools/pages/index.js +1 -1
- package/dist/tools/pages/index.js.map +1 -1
- package/dist/tools/pages/schemas.d.ts +166 -0
- package/dist/tools/pages/schemas.d.ts.map +1 -1
- package/dist/tools/pages/schemas.js +347 -0
- package/dist/tools/pages/schemas.js.map +1 -1
- package/dist/tools/shared-schemas.d.ts.map +1 -1
- package/dist/tools/shared-schemas.js +26 -11
- package/dist/tools/shared-schemas.js.map +1 -1
- package/dist/tools/sources/builders.d.ts.map +1 -1
- package/dist/tools/sources/builders.js +64 -6
- package/dist/tools/sources/builders.js.map +1 -1
- package/dist/tools/sources/handlers-bind.d.ts +13 -1
- package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
- package/dist/tools/sources/handlers-bind.js +219 -5
- package/dist/tools/sources/handlers-bind.js.map +1 -1
- package/dist/tools/sources/handlers.d.ts +3 -0
- package/dist/tools/sources/handlers.d.ts.map +1 -1
- package/dist/tools/sources/handlers.js +45 -8
- package/dist/tools/sources/handlers.js.map +1 -1
- package/dist/tools/sparse-fields.d.ts +23 -0
- package/dist/tools/sparse-fields.d.ts.map +1 -1
- package/dist/tools/sparse-fields.js +29 -0
- package/dist/tools/sparse-fields.js.map +1 -1
- package/dist/tools/sublayout/builders.d.ts +23 -0
- package/dist/tools/sublayout/builders.d.ts.map +1 -0
- package/dist/tools/sublayout/builders.js +54 -0
- package/dist/tools/sublayout/builders.js.map +1 -0
- package/dist/tools/sublayout/index.d.ts +13 -0
- package/dist/tools/sublayout/index.d.ts.map +1 -0
- package/dist/tools/sublayout/index.js +13 -0
- package/dist/tools/sublayout/index.js.map +1 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +95 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +1 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.js +181 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.js.map +1 -0
- package/dist/tools/tool-builder/results.d.ts +31 -0
- package/dist/tools/tool-builder/results.d.ts.map +1 -1
- package/dist/tools/tool-builder/results.js +95 -4
- package/dist/tools/tool-builder/results.js.map +1 -1
- package/dist/uninstall-skill.d.ts +52 -0
- package/dist/uninstall-skill.d.ts.map +1 -0
- package/dist/uninstall-skill.js +146 -0
- package/dist/uninstall-skill.js.map +1 -0
- package/dist/uninstall.d.ts +73 -0
- package/dist/uninstall.d.ts.map +1 -0
- package/dist/uninstall.js +82 -0
- package/dist/uninstall.js.map +1 -0
- package/icon.png +0 -0
- package/manifest.json +10 -10
- package/package.json +7 -3
- package/skills/yt-builder-mcp/SKILL.md +157 -88
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Page-tool WRITE handlers — `page_save`, `page_publish
|
|
3
|
-
* the 3-phase progress contract
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* boundary, not the
|
|
2
|
+
* Page-tool WRITE handlers — `page_save`, `page_publish`, `pages_create`,
|
|
3
|
+
* `pages_delete`. All implement the 3-phase progress contract
|
|
4
|
+
* (PHASE_SEND → PHASE_SERVER → PHASE_CONFIRM). PHASE_SERVER is emitted
|
|
5
|
+
* BEFORE the await so the synthetic intermediate fires even when the
|
|
6
|
+
* REST call ultimately errors — the dispatch IS the boundary, not the
|
|
7
|
+
* response.
|
|
7
8
|
*
|
|
8
9
|
* Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1).
|
|
10
|
+
* Extended with pages_create / pages_delete (v1.2 — C2 + C3).
|
|
9
11
|
*
|
|
10
12
|
* @license MIT
|
|
11
13
|
*/
|
|
14
|
+
import { encodeTemplateId } from '../../client.js';
|
|
12
15
|
import { PHASE_CONFIRM, PHASE_SEND, PHASE_SERVER } from '../progress-phases.js';
|
|
13
|
-
import { createProgressReporter, errorResult, jsonResult, } from '../tool-builder.js';
|
|
16
|
+
import { createProgressReporter, errorResult, jsonResult, structuredResult, } from '../tool-builder.js';
|
|
14
17
|
// ─── page_save ──────────────────────────────────────────────────────
|
|
15
|
-
export async function handlePageSave(client, { template_id, etag }, extra) {
|
|
18
|
+
export async function handlePageSave(client, { template_id, etag, layout }, extra) {
|
|
16
19
|
const progress = extra ? createProgressReporter(extra) : null;
|
|
17
20
|
await progress?.report(0, 3, PHASE_SEND);
|
|
18
21
|
await progress?.report(1, 3, PHASE_SERVER);
|
|
19
22
|
try {
|
|
20
|
-
|
|
23
|
+
// F85: forward `layout` only when supplied so the historical save
|
|
24
|
+
// body (`{}`) is byte-unchanged for the re-run-transforms path.
|
|
25
|
+
const data = await client.post(`/pages/${encodeTemplateId(template_id)}/save`, layout !== undefined ? { body: { layout }, etag } : { etag });
|
|
21
26
|
await progress?.report(2, 3, PHASE_CONFIRM);
|
|
22
27
|
return jsonResult(data);
|
|
23
28
|
}
|
|
@@ -26,19 +31,46 @@ export async function handlePageSave(client, { template_id, etag }, extra) {
|
|
|
26
31
|
error: e,
|
|
27
32
|
context: { template_id, etag },
|
|
28
33
|
hint: 'On 412 (precondition failed) refresh via yootheme_builder_get_etag ' +
|
|
29
|
-
'and retry — someone else edited the page.'
|
|
34
|
+
'and retry — someone else edited the page. On 422 the supplied ' +
|
|
35
|
+
'`layout` failed validation (unknown element type or bad structure) — ' +
|
|
36
|
+
'the error `path` + `element_type` pinpoint the offending node.',
|
|
30
37
|
});
|
|
31
38
|
}
|
|
32
39
|
}
|
|
33
40
|
// ─── page_publish ───────────────────────────────────────────────────
|
|
41
|
+
/**
|
|
42
|
+
* F202 (P1): when the publish/dynamize response carries a `cms_warning` (the
|
|
43
|
+
* YT-layout is published but the backing CMS object — WP post / Joomla article
|
|
44
|
+
* — is NOT publicly visible: draft/future status, future publish_up, or no
|
|
45
|
+
* route), append it as a SALIENT trailing text block. The JSON leg already
|
|
46
|
+
* carries `cms_visibility` + `cms_warning`; the extra block makes the warning
|
|
47
|
+
* survive a long, context-rotted session where the agent skips parsing the
|
|
48
|
+
* payload and declares success on a page that 404s anonymously.
|
|
49
|
+
*
|
|
50
|
+
* No-op (returns the result unchanged) when there is no `cms_warning` — the
|
|
51
|
+
* publicly-visible happy path keeps its single-leg shape.
|
|
52
|
+
*/
|
|
53
|
+
function withCmsWarningText(result, data) {
|
|
54
|
+
if (typeof data !== 'object' || data === null) {
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
const warning = data.cms_warning;
|
|
58
|
+
if (typeof warning !== 'string' || warning === '') {
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
...result,
|
|
63
|
+
content: [...result.content, { type: 'text', text: warning }],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
34
66
|
export async function handlePagePublish(client, { template_id, etag }, extra) {
|
|
35
67
|
const progress = extra ? createProgressReporter(extra) : null;
|
|
36
68
|
await progress?.report(0, 3, PHASE_SEND);
|
|
37
69
|
await progress?.report(1, 3, PHASE_SERVER);
|
|
38
70
|
try {
|
|
39
|
-
const data = await client.post(`/pages/${
|
|
71
|
+
const data = await client.post(`/pages/${encodeTemplateId(template_id)}/publish`, { etag });
|
|
40
72
|
await progress?.report(2, 3, PHASE_CONFIRM);
|
|
41
|
-
return jsonResult(data);
|
|
73
|
+
return withCmsWarningText(jsonResult(data), data);
|
|
42
74
|
}
|
|
43
75
|
catch (e) {
|
|
44
76
|
return errorResult({
|
|
@@ -49,4 +81,176 @@ export async function handlePagePublish(client, { template_id, etag }, extra) {
|
|
|
49
81
|
});
|
|
50
82
|
}
|
|
51
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* F12 (2026-06-09): collapse the friendly `published` boolean into the
|
|
86
|
+
* canonical `status` the PHP host understands.
|
|
87
|
+
*
|
|
88
|
+
* Precedence: an EXPLICIT `status` always wins — `published` is the
|
|
89
|
+
* ergonomic shortcut, not an override. So:
|
|
90
|
+
* - status given → use it verbatim (published ignored).
|
|
91
|
+
* - status absent + true → 'publish' (WP post_status=publish, Joomla state=1).
|
|
92
|
+
* - status absent + false/∅ → undefined (server applies its draft default).
|
|
93
|
+
*
|
|
94
|
+
* Returning `undefined` (rather than an explicit `'draft'`) for the
|
|
95
|
+
* default case preserves the existing wire shape — the server's Q6
|
|
96
|
+
* default-to-draft logic stays authoritative and the body byte-shape is
|
|
97
|
+
* unchanged for legacy callers that never sent `published`.
|
|
98
|
+
*/
|
|
99
|
+
export function resolveCreateStatus(status, published) {
|
|
100
|
+
if (status !== undefined)
|
|
101
|
+
return status;
|
|
102
|
+
if (published === true)
|
|
103
|
+
return 'publish';
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* `pages_create` — POST `/pages` with the provided body. On
|
|
108
|
+
* `dry_run:true`, the REST handler runs validation Layers 1+2+4
|
|
109
|
+
* without persisting and returns a dry-run report. On non-dry-run
|
|
110
|
+
* success, the REST handler returns 201 with the wire shape of
|
|
111
|
+
* `PAGES_CREATE_OUTPUT_SCHEMA`.
|
|
112
|
+
*/
|
|
113
|
+
export async function handlePagesCreate(client, input, extra) {
|
|
114
|
+
const progress = extra ? createProgressReporter(extra) : null;
|
|
115
|
+
await progress?.report(0, 3, PHASE_SEND);
|
|
116
|
+
await progress?.report(1, 3, PHASE_SERVER);
|
|
117
|
+
// F12: translate the `published` shortcut into the host-native
|
|
118
|
+
// `status` and DROP `published` from the wire body (the REST host has
|
|
119
|
+
// no such field). `status` is omitted entirely when neither an
|
|
120
|
+
// explicit status nor published:true was given, so the server's
|
|
121
|
+
// draft-default stays authoritative and the body shape is unchanged
|
|
122
|
+
// for legacy callers.
|
|
123
|
+
const { published: _published, status: _status, ...rest } = input;
|
|
124
|
+
const resolvedStatus = resolveCreateStatus(input.status, input.published);
|
|
125
|
+
const body = resolvedStatus !== undefined ? { ...rest, status: resolvedStatus } : rest;
|
|
126
|
+
try {
|
|
127
|
+
const data = await client.post('/pages', { body });
|
|
128
|
+
await progress?.report(2, 3, PHASE_CONFIRM);
|
|
129
|
+
return jsonResult(data);
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
return errorResult({
|
|
133
|
+
error: e,
|
|
134
|
+
context: {
|
|
135
|
+
title: input.title,
|
|
136
|
+
slug: input.slug,
|
|
137
|
+
dry_run: input.dry_run ?? false,
|
|
138
|
+
},
|
|
139
|
+
hint: 'Common issues: missing title (400), unknown element type in layout ' +
|
|
140
|
+
'(422), Builder pre-check failed (422 dry-run or wet), post_type/content_type ' +
|
|
141
|
+
'other than page/article (403). For dry-run: re-submit without dry_run:true ' +
|
|
142
|
+
'to actually create. ' +
|
|
143
|
+
// F95 (2026-06-10): a `body_parse_failed` 400 means the AI host
|
|
144
|
+
// TRUNCATED the arguments JSON in transit (a known failure mode
|
|
145
|
+
// for large inline `layout` payloads ~10KB+). Do NOT retry the
|
|
146
|
+
// same giant all-in-one create — create the page with a
|
|
147
|
+
// small/empty layout first, then build it up element-by-element.
|
|
148
|
+
'On a `body_parse_failed` 400 the tool-call arguments were truncated in ' +
|
|
149
|
+
'transit (large inline `layout`): create the page with an empty/small ' +
|
|
150
|
+
'layout, then add elements one at a time via element_add / ' +
|
|
151
|
+
'element_bind_source instead of one giant inline `layout`.',
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* The recency reminder appended to every successful dynamize (research:
|
|
157
|
+
* checklist echo — keeps the "verify visually" step salient even in a
|
|
158
|
+
* long, context-rotted session). One line, by design (F98 rank-3:
|
|
159
|
+
* attention-dilution on a longer echo).
|
|
160
|
+
*/
|
|
161
|
+
const DYNAMIZE_SUCCESS_REMINDER = 'Verify one row visually against the original at the customer viewport before declaring success.';
|
|
162
|
+
/**
|
|
163
|
+
* `page_dynamize` — POST `/pages/dynamize`. THE one-call canonical path to
|
|
164
|
+
* dynamize an existing designed section: the server copies the reference
|
|
165
|
+
* subtree byte-identically and swaps only the mapped queries + leaf
|
|
166
|
+
* field-names (the recipe of `dynamize-existing-layout.md` as CODE), then
|
|
167
|
+
* creates the page through the same hardened create path. The 201 carries
|
|
168
|
+
* a `summary` self-check ({queries_swapped, leaves_remapped, leaves_kept,
|
|
169
|
+
* leaves_removed, unmatched_map_keys, kept_unresolvable}). A non-empty
|
|
170
|
+
* `unmatched_map_keys` means the agent mapped a field the reference subtree
|
|
171
|
+
* never bound; a non-zero `kept_unresolvable.count` means a sub-query panel
|
|
172
|
+
* had no flow field (its leaves render empty) — extend leaf_map with the
|
|
173
|
+
* qualified "<subquery>.<leaf>" keys and retry.
|
|
174
|
+
*/
|
|
175
|
+
export async function handlePageDynamize(client, input, extra) {
|
|
176
|
+
const progress = extra ? createProgressReporter(extra) : null;
|
|
177
|
+
await progress?.report(0, 3, PHASE_SEND);
|
|
178
|
+
await progress?.report(1, 3, PHASE_SERVER);
|
|
179
|
+
try {
|
|
180
|
+
const data = await client.post('/pages/dynamize', { body: input, etag: input.etag });
|
|
181
|
+
await progress?.report(2, 3, PHASE_CONFIRM);
|
|
182
|
+
// Append the one-line recency reminder as a trailing text block so
|
|
183
|
+
// the JSON leg stays byte-pure (parsers read content[0]) while the
|
|
184
|
+
// human + model see the verify-visually nudge.
|
|
185
|
+
const base = jsonResult(data);
|
|
186
|
+
const withReminder = {
|
|
187
|
+
...base,
|
|
188
|
+
content: [...base.content, { type: 'text', text: DYNAMIZE_SUCCESS_REMINDER }],
|
|
189
|
+
};
|
|
190
|
+
// F202: when a dynamize PUBLISHED to a draft/scheduled/unrouted CMS
|
|
191
|
+
// object, surface the cms_warning as a salient trailing block too.
|
|
192
|
+
return withCmsWarningText(withReminder, data);
|
|
193
|
+
}
|
|
194
|
+
catch (e) {
|
|
195
|
+
return errorResult({
|
|
196
|
+
error: e,
|
|
197
|
+
context: {
|
|
198
|
+
template_id: input.template_id,
|
|
199
|
+
section_name: input.section_name,
|
|
200
|
+
element_path: input.element_path,
|
|
201
|
+
list_source_name: input.list_source_name,
|
|
202
|
+
},
|
|
203
|
+
hint: 'On 404 section_not_found the error data lists `available_named_sections` — ' +
|
|
204
|
+
'pick one and retry. Provide EXACTLY ONE of section_name / element_path. ' +
|
|
205
|
+
'On 422 the dynamized layout failed validation (the `path` + `element_type` ' +
|
|
206
|
+
'pinpoint the node). On 412 refresh via yootheme_builder_get_etag and retry. ' +
|
|
207
|
+
'Check the response `summary.unmatched_map_keys` — a non-empty list means a ' +
|
|
208
|
+
'leaf_map key did not match any leaf in the reference subtree (typo, or wrong ' +
|
|
209
|
+
'reference section). Check `summary.kept_unresolvable` — a non-zero count means a ' +
|
|
210
|
+
'sub-query panel had no flow field; add the qualified "<subquery>.<leaf>" keys to ' +
|
|
211
|
+
'leaf_map and retry.',
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* `pages_delete` — DELETE `/pages/{post_id}` with confirm + force in the
|
|
217
|
+
* body. `force:false` (default) trashes via `wp_delete_post(false)`
|
|
218
|
+
* (recoverable via wp-admin). `force:true` hard-deletes the post
|
|
219
|
+
* (irrecoverable). The REST handler returns 200 with the wire shape of
|
|
220
|
+
* `PAGES_DELETE_OUTPUT_SCHEMA` on success.
|
|
221
|
+
*/
|
|
222
|
+
export async function handlePagesDelete(client, input, extra) {
|
|
223
|
+
const progress = extra ? createProgressReporter(extra) : null;
|
|
224
|
+
await progress?.report(0, 3, PHASE_SEND);
|
|
225
|
+
await progress?.report(1, 3, PHASE_SERVER);
|
|
226
|
+
try {
|
|
227
|
+
const data = await client.delete(`/pages/${encodeURIComponent(String(input.post_id))}`, {
|
|
228
|
+
body: {
|
|
229
|
+
confirm: input.confirm,
|
|
230
|
+
force: input.force ?? false,
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
await progress?.report(2, 3, PHASE_CONFIRM);
|
|
234
|
+
// Task #38 (2026-05-29): pages_delete declares
|
|
235
|
+
// `outputSchema: PAGES_DELETE_OUTPUT_SCHEMA` in builders.ts. The
|
|
236
|
+
// host therefore validates `structuredContent` and rejects with
|
|
237
|
+
// `-32602 Output validation error` when it is missing. Use
|
|
238
|
+
// `structuredResult` (mirrors handlePagesList et al.) so the
|
|
239
|
+
// text leg stays LLM-readable AND the structured leg validates.
|
|
240
|
+
const toolkitResult = jsonResult(data);
|
|
241
|
+
return structuredResult({ content: toolkitResult.content }, data);
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
return errorResult({
|
|
245
|
+
error: e,
|
|
246
|
+
context: {
|
|
247
|
+
post_id: input.post_id,
|
|
248
|
+
force: input.force ?? false,
|
|
249
|
+
},
|
|
250
|
+
hint: 'Common issues: missing confirm:true (400), unknown post id (404), ' +
|
|
251
|
+
'post_type other than "page" (403). For permanent delete pass ' +
|
|
252
|
+
'force:true; default is trash (recoverable via wp-admin).',
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
52
256
|
//# sourceMappingURL=handlers-write.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers-write.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-write.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"handlers-write.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,5 +13,5 @@
|
|
|
13
13
|
* @license MIT
|
|
14
14
|
*/
|
|
15
15
|
export { buildPagesTools } from './builders.js';
|
|
16
|
-
export { ETAG_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
|
|
16
|
+
export { ETAG_OUTPUT_SCHEMA, PAGE_DYNAMIZE_INPUT, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
|
|
17
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
|
|
@@ -13,5 +13,5 @@
|
|
|
13
13
|
* @license MIT
|
|
14
14
|
*/
|
|
15
15
|
export { buildPagesTools } from './builders.js';
|
|
16
|
-
export { ETAG_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
|
|
16
|
+
export { ETAG_OUTPUT_SCHEMA, PAGE_DYNAMIZE_INPUT, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
|
|
17
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
|
|
@@ -14,6 +14,7 @@ export declare const PAGES_LIST_OUTPUT_SCHEMA: z.ZodObject<{
|
|
|
14
14
|
projected_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
15
15
|
available_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
16
16
|
unknown_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
|
+
projection_warning: z.ZodOptional<z.ZodString>;
|
|
17
18
|
}, z.core.$strip>;
|
|
18
19
|
export declare const SCHEMA_OUTPUT_SCHEMA: z.ZodObject<{
|
|
19
20
|
items: z.ZodArray<z.ZodObject<{
|
|
@@ -42,4 +43,169 @@ export declare const TEMPLATE_SUMMARY_OUTPUT_SCHEMA: z.ZodObject<{
|
|
|
42
43
|
}, z.core.$strip>>;
|
|
43
44
|
etag: z.ZodString;
|
|
44
45
|
}, z.core.$strip>;
|
|
46
|
+
/**
|
|
47
|
+
* Input shape for `yootheme_builder_pages_create`.
|
|
48
|
+
*
|
|
49
|
+
* Mirrors the args of `POST /pages` (Phase B).
|
|
50
|
+
*
|
|
51
|
+
* Design pins:
|
|
52
|
+
* - `post_type` is intentionally NOT exposed. Layer 9 defensive guard
|
|
53
|
+
* on the REST side rejects it server-side; surfacing it at the MCP
|
|
54
|
+
* boundary would invite a footgun where an agent tries to set it
|
|
55
|
+
* and fails confusingly.
|
|
56
|
+
* - `status` defaults to `draft` on the server (Q6 design — no public
|
|
57
|
+
* empty page).
|
|
58
|
+
* - `dry_run` triggers validation Layers 1+2+4 without persisting.
|
|
59
|
+
*/
|
|
60
|
+
export declare const PAGES_CREATE_INPUT: {
|
|
61
|
+
title: z.ZodString;
|
|
62
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
63
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
64
|
+
publish: "publish";
|
|
65
|
+
draft: "draft";
|
|
66
|
+
pending: "pending";
|
|
67
|
+
private: "private";
|
|
68
|
+
future: "future";
|
|
69
|
+
}>>;
|
|
70
|
+
published: z.ZodDefault<z.ZodBoolean>;
|
|
71
|
+
menu_item: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
|
|
72
|
+
layout: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
73
|
+
dry_run: z.ZodOptional<z.ZodBoolean>;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Wire shape for `yootheme_builder_pages_create` on success (non-dry-run).
|
|
77
|
+
*
|
|
78
|
+
* Mirrors the REST 201 response shape.
|
|
79
|
+
*
|
|
80
|
+
* Design pins:
|
|
81
|
+
* - `frontend_url` is nullable: REST returns null for fresh drafts
|
|
82
|
+
* before publish.
|
|
83
|
+
* - `template_id` is a plain string. The "page:{post_id}" prefix is
|
|
84
|
+
* enforced server-side; adding a `.startsWith()` here would buy no
|
|
85
|
+
* MCP-client value while adding Zod complexity.
|
|
86
|
+
* - `warnings` is a lean string array (e.g. "slug_collision_resolved"
|
|
87
|
+
* when WP auto-appends `-2`). The REST surface may expand this to
|
|
88
|
+
* richer objects in v1.3; strings keep the v1.2 surface minimal.
|
|
89
|
+
*/
|
|
90
|
+
export declare const PAGES_CREATE_OUTPUT_SCHEMA: z.ZodObject<{
|
|
91
|
+
page_id: z.ZodOptional<z.ZodNumber>;
|
|
92
|
+
article_id: z.ZodOptional<z.ZodNumber>;
|
|
93
|
+
title: z.ZodString;
|
|
94
|
+
slug: z.ZodString;
|
|
95
|
+
status: z.ZodString;
|
|
96
|
+
frontend_url: z.ZodNullable<z.ZodString>;
|
|
97
|
+
builder_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
98
|
+
template_id: z.ZodString;
|
|
99
|
+
etag: z.ZodString;
|
|
100
|
+
warnings: z.ZodArray<z.ZodString>;
|
|
101
|
+
}, z.core.$strip>;
|
|
102
|
+
/**
|
|
103
|
+
* Wire shape for `yootheme_builder_pages_create` when `dry_run:true`.
|
|
104
|
+
*
|
|
105
|
+
* Design pin: NO `etag` field. The B6 fix-cycle decision was that
|
|
106
|
+
* surfacing a "live" ETag with a dry-run response invites a stale-
|
|
107
|
+
* If-Match footgun (caller pins the ETag, then non-dry-run mutates,
|
|
108
|
+
* stale ETag rejected with 412). Dry-run is validation-only.
|
|
109
|
+
*
|
|
110
|
+
* `template_id_pattern` is a literal — the actual `template_id` cannot
|
|
111
|
+
* be materialised before WP allocates the post_id.
|
|
112
|
+
*/
|
|
113
|
+
export declare const PAGES_CREATE_DRY_RUN_OUTPUT_SCHEMA: z.ZodObject<{
|
|
114
|
+
dry_run: z.ZodLiteral<true>;
|
|
115
|
+
would_create: z.ZodObject<{
|
|
116
|
+
title: z.ZodString;
|
|
117
|
+
slug: z.ZodString;
|
|
118
|
+
status: z.ZodString;
|
|
119
|
+
template_id_pattern: z.ZodEnum<{
|
|
120
|
+
"page:{post_id}": "page:{post_id}";
|
|
121
|
+
"article:{article_id}": "article:{article_id}";
|
|
122
|
+
}>;
|
|
123
|
+
}, z.core.$strip>;
|
|
124
|
+
validation_report: z.ZodObject<{
|
|
125
|
+
layer_1_structural: z.ZodLiteral<"passed">;
|
|
126
|
+
layer_2_element_types: z.ZodLiteral<"passed">;
|
|
127
|
+
layer_4_renderer: z.ZodLiteral<"passed">;
|
|
128
|
+
}, z.core.$strip>;
|
|
129
|
+
}, z.core.$strip>;
|
|
130
|
+
/**
|
|
131
|
+
* Input shape for `yootheme_builder_pages_delete`.
|
|
132
|
+
*
|
|
133
|
+
* Mirrors the args of `DELETE /pages/{post_id}` (Phase B).
|
|
134
|
+
*
|
|
135
|
+
* Design pin: `confirm` is `z.literal(true)`. This is the Zod-side
|
|
136
|
+
* enforcement of the confirm gate — the MCP boundary rejects requests
|
|
137
|
+
* without `confirm:true` before they ever hit the REST layer.
|
|
138
|
+
*
|
|
139
|
+
* `force` defaults to false server-side → wp_delete_post(trash). When
|
|
140
|
+
* true → hard delete (irrecoverable).
|
|
141
|
+
*/
|
|
142
|
+
export declare const PAGES_DELETE_INPUT: {
|
|
143
|
+
post_id: z.ZodNumber;
|
|
144
|
+
confirm: z.ZodLiteral<true>;
|
|
145
|
+
force: z.ZodOptional<z.ZodBoolean>;
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Input shape for `yootheme_builder_page_dynamize`. Wraps
|
|
149
|
+
* `POST /pages/dynamize`. Narrowest-schema rule: `template_id` +
|
|
150
|
+
* `list_source_name` + `page.title` are required non-empty; `page` carries
|
|
151
|
+
* the create-machinery passthrough; the reference selector is `section_name`
|
|
152
|
+
* OR `element_path` (exactly-one is enforced server-side so a miss can list
|
|
153
|
+
* the available named sections as remediation).
|
|
154
|
+
*/
|
|
155
|
+
export declare const PAGE_DYNAMIZE_INPUT: {
|
|
156
|
+
template_id: z.ZodString;
|
|
157
|
+
section_name: z.ZodOptional<z.ZodString>;
|
|
158
|
+
element_path: z.ZodOptional<z.ZodString>;
|
|
159
|
+
list_source_name: z.ZodOptional<z.ZodString>;
|
|
160
|
+
source_map: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
161
|
+
match: z.ZodString;
|
|
162
|
+
source_name: z.ZodString;
|
|
163
|
+
leaf_map: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
164
|
+
name: z.ZodString;
|
|
165
|
+
filters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
166
|
+
}, z.core.$strict>]>>>;
|
|
167
|
+
}, z.core.$strict>>>;
|
|
168
|
+
leaf_map: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
169
|
+
name: z.ZodString;
|
|
170
|
+
filters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
171
|
+
}, z.core.$strict>]>>>;
|
|
172
|
+
conditions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
173
|
+
name: z.ZodString;
|
|
174
|
+
filters: z.ZodObject<{
|
|
175
|
+
condition: z.ZodEnum<{
|
|
176
|
+
"!": "!";
|
|
177
|
+
"!!": "!!";
|
|
178
|
+
}>;
|
|
179
|
+
}, z.core.$strip>;
|
|
180
|
+
}, z.core.$strict>>>;
|
|
181
|
+
remove_leaves: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
182
|
+
page: z.ZodObject<{
|
|
183
|
+
title: z.ZodString;
|
|
184
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
185
|
+
published: z.ZodOptional<z.ZodBoolean>;
|
|
186
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
187
|
+
publish: "publish";
|
|
188
|
+
draft: "draft";
|
|
189
|
+
pending: "pending";
|
|
190
|
+
private: "private";
|
|
191
|
+
future: "future";
|
|
192
|
+
}>>;
|
|
193
|
+
menu_item: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
|
|
194
|
+
}, z.core.$strip>;
|
|
195
|
+
etag: z.ZodOptional<z.ZodString>;
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* Wire shape for `yootheme_builder_pages_delete` on success.
|
|
199
|
+
*
|
|
200
|
+
* `deleted` is `z.literal(true)` — the success-response invariant. A
|
|
201
|
+
* failed delete surfaces as `isError:true` with a structured-error
|
|
202
|
+
* envelope, not as `deleted:false`.
|
|
203
|
+
*/
|
|
204
|
+
export declare const PAGES_DELETE_OUTPUT_SCHEMA: z.ZodObject<{
|
|
205
|
+
deleted: z.ZodLiteral<true>;
|
|
206
|
+
page_id: z.ZodOptional<z.ZodNumber>;
|
|
207
|
+
article_id: z.ZodOptional<z.ZodNumber>;
|
|
208
|
+
force_deleted: z.ZodBoolean;
|
|
209
|
+
etag: z.ZodString;
|
|
210
|
+
}, z.core.$strip>;
|
|
45
211
|
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB;;;;;;;;iBAwCnC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAiB/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAWH,eAAO,MAAM,8BAA8B;;;;;;;;;;;iBAazC,CAAC;AAWH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;CAiE9B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;iBA2BlC,CAAC;AAEN;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;iBAe7C,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB;;;;CAoB9B,CAAC;AAmCF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqI/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;;;;;;iBAYlC,CAAC"}
|