@bettercms-ai/mcp 0.76.5 → 0.76.6
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/dist/index.js
CHANGED
|
@@ -2981,7 +2981,7 @@ var NEW_TOOL_TEXT = {
|
|
|
2981
2981
|
generate_image: "Generate an image with AI and add it to the Media Library (5 AI credits; free with the workspace's own Together key). `width`/`height` are 256-1440 in multiples of 16 (default 1024x768). Returns the new asset (id, url, altText): use the url as an 'image' field value. Always set `altText`.",
|
|
2982
2982
|
refresh_search_index: "Tell search engines and site search about published changes; costs nothing. action 'indexnow' submits `urls` (this site's own, up to 1000) to IndexNow, or every change since the last submission when omitted. action 'reindex' rebuilds the project's site-search index. 503 means the index is unreachable: try again later.",
|
|
2983
2983
|
import_redirects: "Bulk-create redirects for a migration, from `rows` or from `text` in `format` (our CSV export, a Netlify `_redirects` file, or a vercel.json). Call it with `dryRun: true` FIRST: nothing is written and each row comes back `would-create`, `existing` or `skipped` with a reason. Rows get create_redirect's rules. Max 5000.",
|
|
2984
|
-
editor_setup: "Make the live build editable
|
|
2984
|
+
editor_setup: "Make the live build editable: derives pages, collections, forms, bindings and components from the live release (skill bindings). Run it after an import or a rebuild, before the conversion brief. Idempotent: `ready` when it already ran for the live sha, else it starts (`running`; poll with `check: true`). `state`: never or stale (run it), running, ready, failed. 409 = nothing is live yet: deploy first. Then get_next_steps.",
|
|
2985
2985
|
transform_image: "Edit an existing Media Library image with an instruction (e.g. 'remove the background', 'make it dusk'); the result is saved as a NEW asset and the original is kept (5 AI credits). Returns the new asset (id, url, altText).",
|
|
2986
2986
|
write_alt_text: "Alt text for a Media Library image (mediaId) or an https image URL (url), written from its pixels (1 AI credit). A suggestion: save it with update_media."
|
|
2987
2987
|
};
|
|
@@ -3012,6 +3012,7 @@ var PARAM_TEXT = {
|
|
|
3012
3012
|
editorSetupForce: "re-run a setup already ready for the live build",
|
|
3013
3013
|
editorSetupCheck: "true = only report the state; starts nothing",
|
|
3014
3014
|
editorSetupExempt: "instead of running: record setup-gate exceptions [{ route, check, reason, note }]; reason null removes one. Reasons: get_next_steps `receipt.gate`",
|
|
3015
|
+
editorSetupDeclare: "instead of running: record binding decisions [{op, id, ...}], max 100, a result each; with `check: true` a dry run. Ops: skill bindings",
|
|
3015
3016
|
pageBlockJson: "an ARRAY REPLACES the page's block composition (a `component` block per section). An OBJECT edits ONE section of the stored page instead: `insertSection` adds a component (its id, or a builtin:* id: copied into the project once) at index `at`, or `before` / `after` a section's block id (none = last), with its `style` and `overrides`; `sectionStyle` sets a section's block style (a key replaces the stored one, null unsets it). `section` in the answer names the block (skill publishing)",
|
|
3016
3017
|
pageDynamic: "a dynamic (collection template) page only",
|
|
3017
3018
|
previewPath: "its route pattern, e.g. /blog/{slug}; null clears",
|
|
@@ -5510,11 +5511,13 @@ ${d.outline}` : "Proposed Content structure.", d);
|
|
|
5510
5511
|
z.object({
|
|
5511
5512
|
force: z.boolean().optional().describe(PARAM_TEXT.editorSetupForce),
|
|
5512
5513
|
check: z.boolean().optional().describe(PARAM_TEXT.editorSetupCheck),
|
|
5513
|
-
exempt: z.array(z.record(z.string(), z.unknown())).optional().describe(PARAM_TEXT.editorSetupExempt)
|
|
5514
|
+
exempt: z.array(z.record(z.string(), z.unknown())).optional().describe(PARAM_TEXT.editorSetupExempt),
|
|
5515
|
+
declare: z.array(z.record(z.string(), z.unknown())).optional().describe(PARAM_TEXT.editorSetupDeclare)
|
|
5514
5516
|
}).shape,
|
|
5515
5517
|
// The route answers `{ state, … }` with no `data` envelope, so the whole body is the result.
|
|
5516
5518
|
// `exempt` records setup-gate exceptions instead of running anything (the gate's one write).
|
|
5517
|
-
|
|
5519
|
+
// `declare` records binding decisions; with `check: true` it is a dry run (the body's `dryRun`).
|
|
5520
|
+
async (c, a) => a.exempt ? ok("Setup gate exceptions.", await c.fetchJSON(c.url(`/management/projects/setup-gate/exceptions`), { method: "POST", body: JSON.stringify({ exempt: a.exempt }) })) : a.declare ? ok("Binding decisions.", await c.fetchJSON(c.url(`/management/projects/binding-decisions`), { method: "POST", body: JSON.stringify({ declare: a.declare, ...a.check === true ? { dryRun: true } : {} }) })) : ok("Editor setup.", await c.fetchJSON(c.url(`/management/projects/editor-setup`), a.check === true ? { method: "GET" } : { method: "POST", body: JSON.stringify({ force: a.force }) }))
|
|
5518
5521
|
),
|
|
5519
5522
|
// ── Deploy to the user's own host (parity with remote /mcp) ──
|
|
5520
5523
|
// A person connects Vercel or Netlify in the dashboard; nothing here touches OAuth or a host
|
|
@@ -6528,8 +6531,8 @@ DERIVED by \`editor_setup\`, where the componentize lane in \xA710 reuses every
|
|
|
6528
6531
|
(bettercms://kit/entry/{id}). The import's entry
|
|
6529
6532
|
is only a SUGGESTION: check its htmlSignals and
|
|
6530
6533
|
pitfalls, confirm or replace it (update_component
|
|
6531
|
-
kitEntry rebuilds the derived ui
|
|
6532
|
-
no-kit-match only with a note
|
|
6534
|
+
kitEntry rebuilds the derived ui and carries its
|
|
6535
|
+
rules; a gate.kit drift row lists rules still missing); exempt with no-kit-match or kit-drift-accepted only with a note
|
|
6533
6536
|
Repeated visual region on a page? -> a COMPONENT with sectionType (a Section)
|
|
6534
6537
|
...and it comes in more than one look? -> siblings sharing that sectionType = VARIANTS
|
|
6535
6538
|
A stack of mixed, reorderable content? -> kind:'block' models + a \`modular\` field
|
|
@@ -8487,7 +8490,7 @@ function buildServer(deps) {
|
|
|
8487
8490
|
// 🔴 The plain-language ask, routed — the stdio twin of the hosted connector's line
|
|
8488
8491
|
// (src/routes/mcp/index.ts MCP_INSTRUCTIONS). "Make my site editable" has one recipe and
|
|
8489
8492
|
// one definition of done; without this an agent converts the page it landed on and stops.
|
|
8490
|
-
instructions: TOOL_LOADING_INSTRUCTION + " " + RECEIPT_FIRST_INSTRUCTION + " When the user asks to make a site or all of its pages editable,
|
|
8493
|
+
instructions: TOOL_LOADING_INSTRUCTION + " " + RECEIPT_FIRST_INSTRUCTION + " When the user asks to make a site or all of its pages editable and they were DERIVED at import: editor_setup, then get_next_steps until `receipt.gate.complete`. To convert its source or bind its fields: this is playbook \xA713. Read `bettercms://playbook/schema` \xA713, call get_binding_report and get_conversion_brief { complete: true }, convert EVERY route the brief lists, and finish only when get_binding_report shows coverage.pending empty on every route \u2014 not when the first page works. On a workspace-wide connection pass projectId on every call; never ask the user to re-scope the connection. " + LAYOUT_CHROME_INSTRUCTION + " " + CTA_BUTTON_INSTRUCTION + " When the user asks to componentize the whole site, to turn every section into a component, or to build a component library from the site: this is playbook \xA712. Read `bettercms://playbook/schema` \xA712, start with get_site_composition, and use the batch tools \u2014 componentize_sections, compose_pages, update_layout with `commands`, publish_components \u2014 rather than one call per component. Finish with get_site_composition and tell the user what the platform does not model (cookie banners, modals, breadcrumbs, pagination) and which components still need the owner's approval in the dashboard before they can be published. " + // The default after authoring (the structure standard): organise what you made. Same
|
|
8491
8494
|
// sentence as the hosted connector's MCP_INSTRUCTIONS.
|
|
8492
8495
|
STRUCTURE_DEFAULT_INSTRUCTION + " " + SKILLS_ROUTING_INSTRUCTION + " " + DOCK_UI_ROUTING_INSTRUCTION + " " + PUBLISH_HOLD_INSTRUCTION
|
|
8493
8496
|
}
|