@wootsup/yt-builder-mcp 1.1.7 → 1.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/README.md +7 -7
- 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/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/essentials.d.ts +4 -4
- package/dist/gateway/essentials.d.ts.map +1 -1
- package/dist/gateway/essentials.js +19 -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 +9 -1
- package/dist/index.js.map +1 -1
- package/dist/install-skill.js +1 -1
- package/dist/server.d.ts +3 -3
- package/dist/server.js +3 -3
- 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/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 +51 -1
- package/dist/sites/client-pool.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 +183 -0
- package/dist/sites/tools/use-site.js.map +1 -0
- package/dist/tools/elements/builders.d.ts.map +1 -1
- package/dist/tools/elements/builders.js +16 -7
- package/dist/tools/elements/builders.js.map +1 -1
- package/dist/tools/elements/handlers-write.d.ts +1 -1
- package/dist/tools/elements/handlers-write.d.ts.map +1 -1
- package/dist/tools/elements/handlers-write.js +202 -9
- package/dist/tools/elements/handlers-write.js.map +1 -1
- package/dist/tools/elements/handlers.d.ts.map +1 -1
- package/dist/tools/elements/handlers.js +3 -3
- package/dist/tools/elements/handlers.js.map +1 -1
- package/dist/tools/format/elements-format.d.ts.map +1 -1
- package/dist/tools/format/elements-format.js +10 -11
- package/dist/tools/format/elements-format.js.map +1 -1
- package/dist/tools/format/inspection-format.d.ts +11 -0
- package/dist/tools/format/inspection-format.d.ts.map +1 -1
- package/dist/tools/format/inspection-format.js +77 -21
- package/dist/tools/format/inspection-format.js.map +1 -1
- package/dist/tools/inspection.d.ts.map +1 -1
- package/dist/tools/inspection.js +194 -1
- package/dist/tools/inspection.js.map +1 -1
- package/dist/tools/multi-items/builders.d.ts.map +1 -1
- package/dist/tools/multi-items/builders.js +7 -1
- 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 +37 -2
- package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -1
- package/dist/tools/multi-items/inspect-handler.js +93 -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 +102 -9
- package/dist/tools/pages/builders.js.map +1 -1
- package/dist/tools/pages/handlers-read.d.ts +1 -1
- package/dist/tools/pages/handlers-read.d.ts.map +1 -1
- package/dist/tools/pages/handlers-read.js +78 -21
- package/dist/tools/pages/handlers-read.js.map +1 -1
- package/dist/tools/pages/handlers-write.d.ts +48 -6
- package/dist/tools/pages/handlers-write.d.ts.map +1 -1
- package/dist/tools/pages/handlers-write.js +83 -8
- package/dist/tools/pages/handlers-write.js.map +1 -1
- package/dist/tools/pages/schemas.d.ts +112 -0
- package/dist/tools/pages/schemas.d.ts.map +1 -1
- package/dist/tools/pages/schemas.js +150 -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 +15 -2
- package/dist/tools/shared-schemas.js.map +1 -1
- package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
- package/dist/tools/sources/handlers-bind.js +56 -4
- package/dist/tools/sources/handlers-bind.js.map +1 -1
- package/dist/tools/sources/handlers.d.ts.map +1 -1
- package/dist/tools/sources/handlers.js +2 -2
- package/dist/tools/sources/handlers.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 +4 -2
- package/skills/yt-builder-mcp/SKILL.md +30 -26
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3 — `yootheme_builder_use_site` L1 tool.
|
|
3
|
+
*
|
|
4
|
+
* Runtime active-site SWITCH. The multi-site analogue of api-mapper's
|
|
5
|
+
* `apimapper_use_profile`: it changes which configured site subsequent
|
|
6
|
+
* tool calls target by default, then (unless `probe: false`) verifies
|
|
7
|
+
* the new site is reachable.
|
|
8
|
+
*
|
|
9
|
+
* Why a tool (and not just the `site_id` param on every call):
|
|
10
|
+
* - Maria-the-Claude-Desktop-user works in long conversations against
|
|
11
|
+
* ONE client site at a time. Re-passing `site_id` on every call is
|
|
12
|
+
* error-prone. `sites_list` + `use_site` mirror the
|
|
13
|
+
* `list_profiles` + `use_profile` flow she already knows from
|
|
14
|
+
* api-mapper: discover, switch once, then work.
|
|
15
|
+
*
|
|
16
|
+
* How it reuses the existing engine (NO new multi-site machinery):
|
|
17
|
+
* - The {@link SiteRegistry} stays immutable; the switch moves the
|
|
18
|
+
* {@link ClientPool}'s in-memory active-site override
|
|
19
|
+
* (`setActiveSite`). `resolve(undefined)` consults that override
|
|
20
|
+
* before the registry default. Unknown id → `UnknownSiteError`,
|
|
21
|
+
* surfaced as a structured `code: 'unknown_site'` error via the
|
|
22
|
+
* shared `resolveSiteOrError` helper (so the wording matches every
|
|
23
|
+
* other site-bound tool). The pointer never moves on a bad switch.
|
|
24
|
+
* - The reachability check reuses {@link probeSite} (/health + /etag),
|
|
25
|
+
* the SAME probe `sites_test` and the CLI run.
|
|
26
|
+
*
|
|
27
|
+
* Soft-vs-hard contract (mirrors `apimapper_use_profile`):
|
|
28
|
+
* - An UNKNOWN site is a HARD error (pointer unchanged).
|
|
29
|
+
* - A reachable-but-degraded site (probe red) is a SOFT warning: the
|
|
30
|
+
* activation still succeeds and the pointer moves, because the user
|
|
31
|
+
* explicitly asked to switch — the probe is diagnostic, not a gate.
|
|
32
|
+
* `probe: false` skips the network round-trip entirely (offline
|
|
33
|
+
* activation).
|
|
34
|
+
*
|
|
35
|
+
* @license MIT
|
|
36
|
+
*/
|
|
37
|
+
import { detailResult } from '@getimo/mcp-toolkit';
|
|
38
|
+
import { z } from 'zod';
|
|
39
|
+
import { defineTool, mutating, structuredResult, withSiteMeta, } from '../../tools/tool-builder.js';
|
|
40
|
+
import { resolveSiteOrError } from '../../tools/pool-resolve-helper.js';
|
|
41
|
+
import { probeSite } from '../probe.js';
|
|
42
|
+
const USE_SITE_OUTPUT_SCHEMA = z.object({
|
|
43
|
+
activated: z.boolean(),
|
|
44
|
+
active_site_id: z.string(),
|
|
45
|
+
site_url: z.string(),
|
|
46
|
+
platform: z.enum(['wordpress', 'joomla']),
|
|
47
|
+
probe: z
|
|
48
|
+
.object({
|
|
49
|
+
plugin_reachable: z.boolean(),
|
|
50
|
+
bearer_valid: z.boolean(),
|
|
51
|
+
etag_received: z.boolean(),
|
|
52
|
+
summary: z.string(),
|
|
53
|
+
plugin_error: z.string().optional(),
|
|
54
|
+
bearer_error: z.string().optional(),
|
|
55
|
+
})
|
|
56
|
+
.optional(),
|
|
57
|
+
note: z.string().optional(),
|
|
58
|
+
warnings: z.array(z.string()).optional(),
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* Build the Phase 3 `yootheme_builder_use_site` tool.
|
|
62
|
+
*
|
|
63
|
+
* Signature accepts the {@link ClientPool} directly — the switch lives
|
|
64
|
+
* on the pool (`setActiveSite`), and `resolveSiteOrError(pool, site_id)`
|
|
65
|
+
* validates the id + yields the `{client, site}` bundle for the probe.
|
|
66
|
+
*/
|
|
67
|
+
export function buildUseSiteTool(pool) {
|
|
68
|
+
return defineTool({
|
|
69
|
+
name: 'yootheme_builder_use_site',
|
|
70
|
+
description: 'Switch the ACTIVE site for this multi-site session. After this call, ' +
|
|
71
|
+
'every tool that omits `site_id` targets the site you picked here (until ' +
|
|
72
|
+
'you switch again or restart). Runs a /health + /etag probe by default; ' +
|
|
73
|
+
'pass `probe: false` to switch offline. A degraded site is a soft warning ' +
|
|
74
|
+
'(the switch still happens). `site_id` is REQUIRED. Keywords: switch site, ' +
|
|
75
|
+
'change site, set active site, select installation, use profile, activate ' +
|
|
76
|
+
'site, target site. Use yootheme_builder_sites_list first to find IDs.',
|
|
77
|
+
inputSchema: {
|
|
78
|
+
site_id: z
|
|
79
|
+
.string()
|
|
80
|
+
.min(1)
|
|
81
|
+
.max(64)
|
|
82
|
+
.regex(/^[a-zA-Z0-9_-]+$/, 'site_id uses letters/digits/dash/underscore only')
|
|
83
|
+
.describe('Site to make active (REQUIRED, e.g. "wp-acme"). ' +
|
|
84
|
+
'Use yootheme_builder_sites_list to discover valid IDs.'),
|
|
85
|
+
probe: z
|
|
86
|
+
.boolean()
|
|
87
|
+
.default(true)
|
|
88
|
+
.describe('Run the /health + /etag reachability probe after switching ' +
|
|
89
|
+
'(default true). Set false for offline activation when the ' +
|
|
90
|
+
'site is unreachable but you still want to target it.'),
|
|
91
|
+
},
|
|
92
|
+
outputSchema: USE_SITE_OUTPUT_SCHEMA,
|
|
93
|
+
annotations: mutating('Sites — Switch active'),
|
|
94
|
+
handler: async ({ site_id, probe = true }) => {
|
|
95
|
+
// 1. Validate the id through the shared resolver. Unknown /
|
|
96
|
+
// no-default errors come back as structured ToolResults
|
|
97
|
+
// (HARD error). The pointer has NOT moved yet, so a bad id
|
|
98
|
+
// leaves the session on its previous active site.
|
|
99
|
+
const r = await resolveSiteOrError(pool, site_id);
|
|
100
|
+
if (!r.ok)
|
|
101
|
+
return r.error;
|
|
102
|
+
const { client, site } = r;
|
|
103
|
+
// 2. Move the in-memory override. `setActiveSite` re-checks
|
|
104
|
+
// the id exists (defense-in-depth) and throws
|
|
105
|
+
// UnknownSiteError otherwise — but step 1 already
|
|
106
|
+
// guaranteed it, so this is a no-throw in practice.
|
|
107
|
+
pool.setActiveSite(site.id);
|
|
108
|
+
// 3. Offline path — skip the probe entirely.
|
|
109
|
+
if (!probe) {
|
|
110
|
+
const payload = {
|
|
111
|
+
activated: true,
|
|
112
|
+
active_site_id: site.id,
|
|
113
|
+
site_url: site.url,
|
|
114
|
+
platform: site.platform.kind,
|
|
115
|
+
note: 'Reachability probe skipped (probe=false). The active site ' +
|
|
116
|
+
'is now set but its plugin reachability was not verified.',
|
|
117
|
+
};
|
|
118
|
+
const detail = detailResult(buildUseSiteDetail(payload));
|
|
119
|
+
return withSiteMeta(structuredResult(detail, payload), site);
|
|
120
|
+
}
|
|
121
|
+
// 4. Probe the newly-active site. A failing probe is a SOFT
|
|
122
|
+
// warning — the switch already happened in step 2.
|
|
123
|
+
const probeResult = await probeSite(client);
|
|
124
|
+
const warnings = [];
|
|
125
|
+
if (!(probeResult.plugin_reachable && probeResult.bearer_valid)) {
|
|
126
|
+
warnings.push(`Switched to "${site.id}" but the reachability probe was not fully ` +
|
|
127
|
+
`green: ${probeResult.summary} The active site still points here — ` +
|
|
128
|
+
'run yootheme_builder_sites_test for a detailed diagnosis.');
|
|
129
|
+
}
|
|
130
|
+
const payload = {
|
|
131
|
+
activated: true,
|
|
132
|
+
active_site_id: site.id,
|
|
133
|
+
site_url: site.url,
|
|
134
|
+
platform: site.platform.kind,
|
|
135
|
+
probe: {
|
|
136
|
+
plugin_reachable: probeResult.plugin_reachable,
|
|
137
|
+
bearer_valid: probeResult.bearer_valid,
|
|
138
|
+
etag_received: probeResult.etag_received,
|
|
139
|
+
summary: probeResult.summary,
|
|
140
|
+
...(probeResult.plugin_error !== undefined
|
|
141
|
+
? { plugin_error: probeResult.plugin_error }
|
|
142
|
+
: {}),
|
|
143
|
+
...(probeResult.bearer_error !== undefined
|
|
144
|
+
? { bearer_error: probeResult.bearer_error }
|
|
145
|
+
: {}),
|
|
146
|
+
},
|
|
147
|
+
...(warnings.length > 0 ? { warnings } : {}),
|
|
148
|
+
};
|
|
149
|
+
const detail = detailResult(buildUseSiteDetail(payload));
|
|
150
|
+
return withSiteMeta(structuredResult(detail, payload), site);
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Render a detail-card body for the switch result. Group 1 = the active
|
|
156
|
+
* site, Group 2 = the probe outcome (omitted when probe was skipped).
|
|
157
|
+
*/
|
|
158
|
+
function buildUseSiteDetail(payload) {
|
|
159
|
+
const activeEntries = [
|
|
160
|
+
{ key: 'active_site_id', label: 'Active site', value: payload.active_site_id, format: 'badge' },
|
|
161
|
+
{ key: 'site_url', label: 'Site URL', value: payload.site_url },
|
|
162
|
+
{ key: 'platform', label: 'Platform', value: payload.platform, format: 'badge' },
|
|
163
|
+
];
|
|
164
|
+
const groups = [{ label: 'Active site', entries: activeEntries }];
|
|
165
|
+
if (payload.probe !== undefined) {
|
|
166
|
+
groups.push({
|
|
167
|
+
label: 'Probe',
|
|
168
|
+
entries: [
|
|
169
|
+
{ key: 'plugin_reachable', label: 'Plugin reachable', value: payload.probe.plugin_reachable, format: 'boolean' },
|
|
170
|
+
{ key: 'bearer_valid', label: 'Bearer valid', value: payload.probe.bearer_valid, format: 'boolean' },
|
|
171
|
+
{ key: 'summary', label: 'Summary', value: payload.probe.summary },
|
|
172
|
+
],
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
else if (payload.note !== undefined) {
|
|
176
|
+
groups.push({
|
|
177
|
+
label: 'Probe',
|
|
178
|
+
entries: [{ key: 'note', label: 'Note', value: payload.note }],
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
return { title: 'YT Builder MCP — Switch Active Site', groups };
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=use-site.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-site.js","sourceRoot":"","sources":["../../../src/sites/tools/use-site.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../../src/tools/elements/builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI7D,OAAO,EAOH,KAAK,iBAAiB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGH,KAAK,mBAAmB,EAQ3B,MAAM,eAAe,CAAC;AAEvB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,SAAS,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../../src/tools/elements/builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI7D,OAAO,EAOH,KAAK,iBAAiB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGH,KAAK,mBAAmB,EAQ3B,MAAM,eAAe,CAAC;AAEvB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,SAAS,iBAAiB,EAAE,CA8N9B"}
|
|
@@ -176,20 +176,29 @@ export function buildElementsTools(pool, deps) {
|
|
|
176
176
|
}),
|
|
177
177
|
defineTool({
|
|
178
178
|
name: 'yootheme_builder_element_delete',
|
|
179
|
-
description: 'PERMANENTLY delete an element
|
|
180
|
-
'
|
|
181
|
-
'
|
|
179
|
+
description: 'PERMANENTLY delete an element + children. Cannot be undone. Pass `confirm: ' +
|
|
180
|
+
'true` (boolean) AND a fresh ETag. If `preview:true` returns despite confirm, ' +
|
|
181
|
+
'check `details.received_confirm` — strings/numbers accepted, but boolean is ' +
|
|
182
|
+
'canonical. Operates on the default site unless site_id is provided.',
|
|
182
183
|
inputSchema: {
|
|
183
184
|
site_id: SITE_ID_SCHEMA,
|
|
184
185
|
template_id: TEMPLATE_ID,
|
|
185
186
|
element_path: ELEMENT_PATH,
|
|
186
187
|
etag: ETAG,
|
|
188
|
+
// Wave-6 R4: accept boolean OR the string literals "true"/"false"
|
|
189
|
+
// and numeric 0/1 — the handler's `isConfirmedTrue` coerces all
|
|
190
|
+
// four into the canonical boolean. Cold-AI #4 reported a confirm
|
|
191
|
+
// gate that kept firing despite passing the value; the safety net
|
|
192
|
+
// prevents future schema-string mismatches from re-creating that
|
|
193
|
+
// class of bug.
|
|
187
194
|
confirm: z
|
|
188
|
-
.boolean()
|
|
195
|
+
.union([z.boolean(), z.literal('true'), z.literal('false'), z.literal(0), z.literal(1)])
|
|
189
196
|
.optional()
|
|
190
|
-
.describe('Must be true to execute.
|
|
191
|
-
'
|
|
192
|
-
'
|
|
197
|
+
.describe('Must be `true` (boolean literal) to execute. Strings "true"/"false" ' +
|
|
198
|
+
'and numeric 1/0 are also accepted as a safety net but `true` is ' +
|
|
199
|
+
'canonical. On supporting hosts the agent is prompted via MCP ' +
|
|
200
|
+
'elicitation when omitted; otherwise the call returns a preview ' +
|
|
201
|
+
'and the agent must retry with `confirm: true`.'),
|
|
193
202
|
},
|
|
194
203
|
annotations: destructive('Delete Element'),
|
|
195
204
|
handler: async ({ site_id, ...rest }, extra) => withSiteRetry(pool, site_id, async (client, site) => withSiteMeta(await handleElementDelete(makeDeps(client), rest, extra), site)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../src/tools/elements/builders.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../src/tools/elements/builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,6 @@ export declare function handleElementDelete({ client, elicitation }: ElementsHan
|
|
|
44
44
|
template_id: string;
|
|
45
45
|
element_path: string;
|
|
46
46
|
etag: string;
|
|
47
|
-
confirm?: boolean;
|
|
47
|
+
confirm?: boolean | 'true' | 'false' | 0 | 1;
|
|
48
48
|
}, extra?: HandlerExtra): Promise<ToolResult>;
|
|
49
49
|
//# sourceMappingURL=handlers-write.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers-write.d.ts","sourceRoot":"","sources":["../../../src/tools/elements/handlers-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAKH,KAAK,YAAY,EACjB,KAAK,UAAU,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"handlers-write.d.ts","sourceRoot":"","sources":["../../../src/tools/elements/handlers-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAKH,KAAK,YAAY,EACjB,KAAK,UAAU,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAkKzD,wBAAsB,gBAAgB,CAClC,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAC/B,KAAK,EAAE;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CAChB,EACD,KAAK,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CA0BrB;AAID,wBAAsB,2BAA2B,CAC7C,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAC/B,KAAK,EAAE;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB,EACD,KAAK,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CAkCrB;AAID,wBAAsB,iBAAiB,CACnC,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAC/B,KAAK,EAAE;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CAChB,EACD,KAAK,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CAqBrB;AAID,wBAAsB,kBAAkB,CACpC,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAC/B,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAClE,KAAK,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAkED,wBAAsB,mBAAmB,CACrC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,mBAAmB,EAC5C,KAAK,EAAE;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;CAChD,EACD,KAAK,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CA4BrB"}
|
|
@@ -12,16 +12,162 @@
|
|
|
12
12
|
* @license MIT
|
|
13
13
|
*/
|
|
14
14
|
import { elicitConfirmation } from '@getimo/mcp-toolkit';
|
|
15
|
-
import { encodeElementPath } from '../../client.js';
|
|
15
|
+
import { encodeElementPath, encodeTemplateId } from '../../client.js';
|
|
16
16
|
import { PHASE_CONFIRM, PHASE_SEND } from '../progress-phases.js';
|
|
17
17
|
import { confirmGuard, createProgressReporter, errorResult, jsonResult, } from '../tool-builder.js';
|
|
18
|
+
// ─── Wave-7 (2026-05-29): props validation ──────────────────────────
|
|
19
|
+
//
|
|
20
|
+
// Cold-AI #5 hand-authored `props.source` / `props.source_extended` via
|
|
21
|
+
// element_update_settings({props:{source}}). YT-Pro's render-side then
|
|
22
|
+
// silently ignored the binding because `source` is not a leaf prop — it
|
|
23
|
+
// lives as a SIBLING of `props` on the element node. The agent had no
|
|
24
|
+
// signal that the call was a no-op until visual verification failed.
|
|
25
|
+
//
|
|
26
|
+
// These keys MUST go through yootheme_builder_element_bind_source (which
|
|
27
|
+
// writes them at the correct nesting level). Reject hand-authored attempts
|
|
28
|
+
// up-front so the agent gets a structured error instead of a silent broken
|
|
29
|
+
// render.
|
|
30
|
+
const RESERVED_BINDING_KEYS = new Set([
|
|
31
|
+
'source',
|
|
32
|
+
'source_extended',
|
|
33
|
+
// YT-Pro UI-only placeholders that customers paste from
|
|
34
|
+
// Inspect/Copy in the visual builder. They never resolve outside the
|
|
35
|
+
// builder runtime so they're useless inside a stored layout.
|
|
36
|
+
'source_node',
|
|
37
|
+
]);
|
|
38
|
+
// Wave-7 (2026-05-29): common cold-AI prop-key typos. The PHP backend
|
|
39
|
+
// silently drops unknown props, so a typo like `title` on a headline (real
|
|
40
|
+
// key is `content`) renders an empty headline. We surface a fix suggestion
|
|
41
|
+
// up-front for the small fixed set of high-frequency mistakes.
|
|
42
|
+
//
|
|
43
|
+
// Format: typo → { element_type → canonical_key }
|
|
44
|
+
// element_type === '*' applies to any element where the typo is known to be
|
|
45
|
+
// a typo on every type that has it.
|
|
46
|
+
const COMMON_PROP_TYPOS = {
|
|
47
|
+
title: {
|
|
48
|
+
headline: 'content',
|
|
49
|
+
subtitle: 'content',
|
|
50
|
+
text: 'content',
|
|
51
|
+
quote: 'content',
|
|
52
|
+
button_item: 'content',
|
|
53
|
+
// Wave-9 F9 (cold-AI #8): `button` accepts `content` at runtime
|
|
54
|
+
// even though the UI-tab fieldset omits it (see
|
|
55
|
+
// Inspector::knownAcceptedButHiddenFields). `title` is the most
|
|
56
|
+
// common cold-AI typo for the button label.
|
|
57
|
+
button: 'content',
|
|
58
|
+
},
|
|
59
|
+
text: {
|
|
60
|
+
headline: 'content',
|
|
61
|
+
text: 'content',
|
|
62
|
+
quote: 'content',
|
|
63
|
+
// Wave-9 F9: same rationale as `title` above — agents reading
|
|
64
|
+
// documentation often type `text` for the button label.
|
|
65
|
+
button: 'content',
|
|
66
|
+
},
|
|
67
|
+
label: {
|
|
68
|
+
button_item: 'content',
|
|
69
|
+
// Wave-9 F9: `label` is a common cold-AI alias for button text.
|
|
70
|
+
button: 'content',
|
|
71
|
+
},
|
|
72
|
+
url: {
|
|
73
|
+
button_item: 'link',
|
|
74
|
+
// Wave-9 F9 (cold-AI #8): `button` accepts `link` at runtime.
|
|
75
|
+
button: 'link',
|
|
76
|
+
},
|
|
77
|
+
href: {
|
|
78
|
+
// Wave-9 F9: HTML-native authors reach for `href` first.
|
|
79
|
+
button_item: 'link',
|
|
80
|
+
button: 'link',
|
|
81
|
+
},
|
|
82
|
+
button_text: {
|
|
83
|
+
button_item: 'content',
|
|
84
|
+
button: 'content',
|
|
85
|
+
},
|
|
86
|
+
button_link: {
|
|
87
|
+
button_item: 'link',
|
|
88
|
+
button: 'link',
|
|
89
|
+
},
|
|
90
|
+
style: {
|
|
91
|
+
button_item: 'button_style',
|
|
92
|
+
},
|
|
93
|
+
size: {
|
|
94
|
+
button_item: 'button_size',
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
function detectPropTypos(props, elementType) {
|
|
98
|
+
if (props === undefined || props === null)
|
|
99
|
+
return [];
|
|
100
|
+
const findings = [];
|
|
101
|
+
for (const key of Object.keys(props)) {
|
|
102
|
+
const map = COMMON_PROP_TYPOS[key];
|
|
103
|
+
if (map === undefined)
|
|
104
|
+
continue;
|
|
105
|
+
const suggested = map[elementType];
|
|
106
|
+
if (suggested !== undefined) {
|
|
107
|
+
findings.push({ typo: key, suggested });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return findings;
|
|
111
|
+
}
|
|
112
|
+
function rejectOnPropTypos(props, elementType) {
|
|
113
|
+
const findings = detectPropTypos(props, elementType);
|
|
114
|
+
if (findings.length === 0)
|
|
115
|
+
return null;
|
|
116
|
+
const summary = findings
|
|
117
|
+
.map((f) => `\`${f.typo}\` → did you mean \`${f.suggested}\`?`)
|
|
118
|
+
.join('; ');
|
|
119
|
+
return errorResult({
|
|
120
|
+
error: new Error(`Unknown prop(s) for element type \`${elementType}\`: ${summary}. ` +
|
|
121
|
+
'YT-Pro silently drops unknown props server-side, so the element would render empty. ' +
|
|
122
|
+
'Call yootheme_builder_element_type_get_schema to see the canonical prop keys.'),
|
|
123
|
+
context: {
|
|
124
|
+
element_type: elementType,
|
|
125
|
+
findings,
|
|
126
|
+
},
|
|
127
|
+
hint: 'Re-try with the suggested canonical key, or fetch the schema first: ' +
|
|
128
|
+
`yootheme_builder_element_type_get_schema({ element_type: "${elementType}" }).`,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function validatePropsForReservedKeys(props, elementType) {
|
|
132
|
+
if (props === undefined || props === null)
|
|
133
|
+
return null;
|
|
134
|
+
const offending = [];
|
|
135
|
+
for (const key of Object.keys(props)) {
|
|
136
|
+
if (RESERVED_BINDING_KEYS.has(key)) {
|
|
137
|
+
offending.push(key);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (offending.length === 0)
|
|
141
|
+
return null;
|
|
142
|
+
return errorResult({
|
|
143
|
+
error: new Error(`Reserved binding key(s) ${offending
|
|
144
|
+
.map((k) => `\`${k}\``)
|
|
145
|
+
.join(', ')} are NOT valid props for element type \`${elementType}\`. ` +
|
|
146
|
+
`Source binding lives as a SIBLING of \`props\` on the element node, ` +
|
|
147
|
+
`NOT nested inside props. Use \`yootheme_builder_element_bind_source\` ` +
|
|
148
|
+
`to set the source — it writes the binding at the correct nesting level. ` +
|
|
149
|
+
`For per-prop leaf bindings (headline.content, etc.) use \`element_bind_source\` ` +
|
|
150
|
+
`with the prop name in its \`props\` argument.`),
|
|
151
|
+
context: { element_type: elementType, offending_keys: offending },
|
|
152
|
+
hint: 'Run yootheme_builder_element_type_get_schema to see the binding contract ' +
|
|
153
|
+
'(do_not section lists this anti-pattern). Then call element_bind_source.',
|
|
154
|
+
});
|
|
155
|
+
}
|
|
18
156
|
// ─── element_add ─────────────────────────────────────────────────────
|
|
19
157
|
export async function handleElementAdd({ client }, input, extra) {
|
|
20
158
|
const { template_id, etag, ...body } = input;
|
|
159
|
+
// Wave-7: guard against hand-authored source/source_extended in props.
|
|
160
|
+
const propsRejection = validatePropsForReservedKeys(input.props, input.element_type);
|
|
161
|
+
if (propsRejection !== null)
|
|
162
|
+
return propsRejection;
|
|
163
|
+
// Wave-7: guard against common prop-key typos (title→content etc.).
|
|
164
|
+
const typoRejection = rejectOnPropTypos(input.props, input.element_type);
|
|
165
|
+
if (typoRejection !== null)
|
|
166
|
+
return typoRejection;
|
|
21
167
|
const progress = extra ? createProgressReporter(extra) : null;
|
|
22
168
|
await progress?.report(0, 2, PHASE_SEND);
|
|
23
169
|
try {
|
|
24
|
-
const data = await client.post(`/pages/${
|
|
170
|
+
const data = await client.post(`/pages/${encodeTemplateId(template_id)}/elements`, { body, etag });
|
|
25
171
|
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
26
172
|
return jsonResult(data);
|
|
27
173
|
}
|
|
@@ -37,6 +183,12 @@ export async function handleElementAdd({ client }, input, extra) {
|
|
|
37
183
|
// ─── element_update_settings ─────────────────────────────────────────
|
|
38
184
|
export async function handleElementUpdateSettings({ client }, input, extra) {
|
|
39
185
|
const { template_id, element_path, props, merge, etag } = input;
|
|
186
|
+
// Wave-7: guard against hand-authored source/source_extended in props.
|
|
187
|
+
// element_path is the only identity we have at this layer; the agent gets
|
|
188
|
+
// a clear message anyway because the offending key is named explicitly.
|
|
189
|
+
const propsRejection = validatePropsForReservedKeys(props, `<at ${element_path}>`);
|
|
190
|
+
if (propsRejection !== null)
|
|
191
|
+
return propsRejection;
|
|
40
192
|
const encoded = encodeElementPath(element_path);
|
|
41
193
|
const progress = extra ? createProgressReporter(extra) : null;
|
|
42
194
|
await progress?.report(0, 2, PHASE_SEND);
|
|
@@ -48,7 +200,7 @@ export async function handleElementUpdateSettings({ client }, input, extra) {
|
|
|
48
200
|
if (merge === true) {
|
|
49
201
|
body.merge = true;
|
|
50
202
|
}
|
|
51
|
-
const data = await client.put(`/pages/${
|
|
203
|
+
const data = await client.put(`/pages/${encodeTemplateId(template_id)}/elements/${encoded}/settings`, { body, etag });
|
|
52
204
|
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
53
205
|
return jsonResult(data);
|
|
54
206
|
}
|
|
@@ -69,7 +221,7 @@ export async function handleElementMove({ client }, input, extra) {
|
|
|
69
221
|
const progress = extra ? createProgressReporter(extra) : null;
|
|
70
222
|
await progress?.report(0, 2, PHASE_SEND);
|
|
71
223
|
try {
|
|
72
|
-
const data = await client.post(`/pages/${
|
|
224
|
+
const data = await client.post(`/pages/${encodeTemplateId(template_id)}/elements/${encoded}/move`, { body: { to_parent_path, to_index }, etag });
|
|
73
225
|
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
74
226
|
return jsonResult(data);
|
|
75
227
|
}
|
|
@@ -89,7 +241,7 @@ export async function handleElementClone({ client }, input, extra) {
|
|
|
89
241
|
const progress = extra ? createProgressReporter(extra) : null;
|
|
90
242
|
await progress?.report(0, 2, PHASE_SEND);
|
|
91
243
|
try {
|
|
92
|
-
const data = await client.post(`/pages/${
|
|
244
|
+
const data = await client.post(`/pages/${encodeTemplateId(template_id)}/elements/${encoded}/clone`, { etag });
|
|
93
245
|
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
94
246
|
return jsonResult(data);
|
|
95
247
|
}
|
|
@@ -105,13 +257,50 @@ export async function handleElementClone({ client }, input, extra) {
|
|
|
105
257
|
//
|
|
106
258
|
// Wave G.4.1 — destructive confirm via MCP elicitation. Progress
|
|
107
259
|
// reports (Wave G.5) only start AFTER the confirm gate clears.
|
|
260
|
+
// Wave-6 R4 (2026-05-29): Defensive truthiness for the confirm gate.
|
|
261
|
+
// Cold-AI #4 reported the gate kept firing despite `confirm:true`. The Zod
|
|
262
|
+
// schema already coerces only strict booleans (anything non-boolean is
|
|
263
|
+
// rejected upstream as invalid_arguments), but we widen the in-handler
|
|
264
|
+
// check to accept the literal string `"true"` / numeric `1` as a safety net
|
|
265
|
+
// in case a future wrapper round-trips the arg through JSON re-encoding.
|
|
266
|
+
function isConfirmedTrue(v) {
|
|
267
|
+
if (v === true)
|
|
268
|
+
return true;
|
|
269
|
+
if (typeof v === 'string' && v.toLowerCase() === 'true')
|
|
270
|
+
return true;
|
|
271
|
+
if (typeof v === 'number' && v === 1)
|
|
272
|
+
return true;
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
function isConfirmedFalse(v) {
|
|
276
|
+
if (v === false)
|
|
277
|
+
return true;
|
|
278
|
+
if (typeof v === 'string' && v.toLowerCase() === 'false')
|
|
279
|
+
return true;
|
|
280
|
+
if (typeof v === 'number' && v === 0)
|
|
281
|
+
return true;
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
108
284
|
async function resolveDeleteConfirm(elicitation, template_id, element_path, confirm) {
|
|
109
|
-
|
|
285
|
+
// Wave-6 R4: explicit truthy check — confirm:true (any form) bypasses
|
|
286
|
+
// the elicitation/preview path immediately.
|
|
287
|
+
if (isConfirmedTrue(confirm))
|
|
110
288
|
return null;
|
|
111
|
-
if (confirm
|
|
289
|
+
if (isConfirmedFalse(confirm) || !elicitation) {
|
|
112
290
|
return confirmGuard({
|
|
113
291
|
operation: 'delete element',
|
|
114
|
-
details: {
|
|
292
|
+
details: {
|
|
293
|
+
template_id,
|
|
294
|
+
element_path,
|
|
295
|
+
// R4: echo back what was received so the agent can compare.
|
|
296
|
+
// Wave-7 (2026-05-29): force-encode undefined to null so the
|
|
297
|
+
// key survives JSON.stringify in the agent-facing payload.
|
|
298
|
+
// Without this the agent saw NO received_confirm field at all
|
|
299
|
+
// (key dropped by serializer) and could not diff sent vs
|
|
300
|
+
// received — looked like the value was accepted.
|
|
301
|
+
received_confirm: confirm === undefined ? null : confirm,
|
|
302
|
+
expected: 'confirm: true (boolean)',
|
|
303
|
+
},
|
|
115
304
|
});
|
|
116
305
|
}
|
|
117
306
|
const accepted = await elicitConfirmation(elicitation, `Permanently delete element at "${element_path}" in template ` +
|
|
@@ -132,7 +321,11 @@ export async function handleElementDelete({ client, elicitation }, input, extra)
|
|
|
132
321
|
const progress = extra ? createProgressReporter(extra) : null;
|
|
133
322
|
await progress?.report(0, 2, PHASE_SEND);
|
|
134
323
|
try {
|
|
135
|
-
|
|
324
|
+
// Wave-12 / Cold-AI #5 F13 (restored Wave-13 post-merge): forward
|
|
325
|
+
// `{confirm:true}` as JSON body so the PHP confirm-guard accepts the
|
|
326
|
+
// delete. Without it the guard returns `requires_confirm:true` and
|
|
327
|
+
// the caller loops forever.
|
|
328
|
+
const data = await client.delete(`/pages/${encodeTemplateId(template_id)}/elements/${encoded}`, { etag, body: { confirm: true } });
|
|
136
329
|
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
137
330
|
return jsonResult(data);
|
|
138
331
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers-write.js","sourceRoot":"","sources":["../../../src/tools/elements/handlers-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"handlers-write.js","sourceRoot":"","sources":["../../../src/tools/elements/handlers-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/elements/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/elements/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEvF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAalE,OAAO,EAGH,KAAK,UAAU,EAClB,MAAM,oBAAoB,CAAC;AAI5B,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;iBA6DrC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;iBAOpC,CAAC;AAIH,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACnD;AAsDD,wBAAsB,iBAAiB,CACnC,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAC/B,EACI,WAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,KAAK,EACL,MAAM,GACT,EAAE;IACC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,GACF,OAAO,CAAC,UAAU,CAAC,CAgIrB;AAID,wBAAsB,gBAAgB,CAClC,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAC/B,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC7E,OAAO,CAAC,UAAU,CAAC,CA8CrB;AAGD,OAAO,EACH,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,2BAA2B,GAC9B,MAAM,qBAAqB,CAAC"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { detailResult, tableResult } from '@getimo/mcp-toolkit';
|
|
19
19
|
import { z } from 'zod';
|
|
20
|
-
import { encodeElementPath } from '../../client.js';
|
|
20
|
+
import { encodeElementPath, encodeTemplateId } from '../../client.js';
|
|
21
21
|
import { RestError } from '../../errors.js';
|
|
22
22
|
import { ELEMENTS_COMPACT_COLUMNS, ELEMENTS_TABLE_COLUMNS, buildElementDetail, mapElementRow, } from '../format/elements-format.js';
|
|
23
23
|
import { DEFAULT_FIELDS_ELEMENT_LIST, projectFields, projectionFeedback, projectedFieldsEcho, } from '../sparse-fields.js';
|
|
@@ -166,7 +166,7 @@ export async function handleElementList({ client }, { template_id, fields, root_
|
|
|
166
166
|
if (typeof cursor === 'string' && cursor !== '')
|
|
167
167
|
qs.set('cursor', cursor);
|
|
168
168
|
const query = qs.toString();
|
|
169
|
-
const data = await client.get(`/pages/${
|
|
169
|
+
const data = await client.get(`/pages/${encodeTemplateId(template_id)}/elements${query !== '' ? `?${query}` : ''}`);
|
|
170
170
|
// Paginated envelope uses `items`; flat shape uses `elements`.
|
|
171
171
|
const rawSource = Array.isArray(data.items)
|
|
172
172
|
? data.items
|
|
@@ -250,7 +250,7 @@ export async function handleElementList({ client }, { template_id, fields, root_
|
|
|
250
250
|
export async function handleElementGet({ client }, { template_id, element_path }) {
|
|
251
251
|
const encoded = encodeElementPath(element_path);
|
|
252
252
|
try {
|
|
253
|
-
const data = await client.get(`/pages/${
|
|
253
|
+
const data = await client.get(`/pages/${encodeTemplateId(template_id)}/elements/${encoded}`);
|
|
254
254
|
const elementType = typeof data.element_type === 'string'
|
|
255
255
|
? data.element_type
|
|
256
256
|
: typeof data.type === 'string'
|