@cmo-so/mcp 0.12.20 → 0.12.21
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/cmo-mcp.mjs +39 -17
- package/package.json +1 -1
package/dist/cmo-mcp.mjs
CHANGED
|
@@ -24489,7 +24489,7 @@ var require_dist3 = __commonJS({
|
|
|
24489
24489
|
// package.json
|
|
24490
24490
|
var package_default = {
|
|
24491
24491
|
name: "@cmo-so/cli",
|
|
24492
|
-
version: "0.12.
|
|
24492
|
+
version: "0.12.21",
|
|
24493
24493
|
description: "CMO.so on the command line: your websites, ideas, blog posts, LinkedIn queue and results, plus a local MCP server for Claude Desktop, Cursor and other MCP clients.",
|
|
24494
24494
|
type: "module",
|
|
24495
24495
|
license: "MIT",
|
|
@@ -39251,8 +39251,15 @@ function applyCredit(markup) {
|
|
|
39251
39251
|
${creditBlock()}
|
|
39252
39252
|
` : `${html2.slice(0, end)}${creditBlock()}${html2.slice(end)}`;
|
|
39253
39253
|
}
|
|
39254
|
-
function
|
|
39255
|
-
|
|
39254
|
+
async function creditStyleAllowed(ctx) {
|
|
39255
|
+
try {
|
|
39256
|
+
return (await ctx.api.maggie.usage()).tier === "admin";
|
|
39257
|
+
} catch {
|
|
39258
|
+
return false;
|
|
39259
|
+
}
|
|
39260
|
+
}
|
|
39261
|
+
function refuseCreditOverride(what, text3, allowed2 = false) {
|
|
39262
|
+
if (!allowed2 && text3 && /maggie-credit/i.test(text3))
|
|
39256
39263
|
throw new Error(
|
|
39257
39264
|
`${what}: the footer credit (maggie-credit) is part of every Maggie site and can't be styled away or changed.`
|
|
39258
39265
|
);
|
|
@@ -40824,7 +40831,7 @@ function contrastReport(colors) {
|
|
|
40824
40831
|
return { text: t, background: b2, ratio: r, ok: r != null && r >= 4.5 };
|
|
40825
40832
|
});
|
|
40826
40833
|
}
|
|
40827
|
-
async function styleSet(site, change, force = false) {
|
|
40834
|
+
async function styleSet(site, change, force = false, creditOk = false) {
|
|
40828
40835
|
const len = (v2, what) => {
|
|
40829
40836
|
const t = String(v2 ?? "").trim();
|
|
40830
40837
|
if (!/^(0|\d{1,4}(\.\d+)?(px|rem|em|vw|%)|var\(--wp--preset--spacing--[a-z0-9-]+\)|clamp\([0-9a-z.,%+\-\s()]+\))$/i.test(
|
|
@@ -40833,7 +40840,7 @@ async function styleSet(site, change, force = false) {
|
|
|
40833
40840
|
throw new Error(`${what}: "${t}" isn't a CSS length like 1240px, 2rem or var(--wp--preset--spacing--50).`);
|
|
40834
40841
|
return t;
|
|
40835
40842
|
};
|
|
40836
|
-
for (const css of [change.css, change.css_append]) refuseCreditOverride("css", css);
|
|
40843
|
+
for (const css of [change.css, change.css_append]) refuseCreditOverride("css", css, creditOk);
|
|
40837
40844
|
for (const css of [change.css, change.css_append])
|
|
40838
40845
|
if (css != null && /<\/?style|<\?|<script|@import\s+url\(\s*['"]?(?!https:)/i.test(css))
|
|
40839
40846
|
throw new Error("css: plain CSS only (no <style>, <script>, PHP or non-https imports).");
|
|
@@ -40965,7 +40972,8 @@ Notes for coding agents (Claude Code, Cursor, ChatGPT\u2026) that change this we
|
|
|
40965
40972
|
- These files are the owner's notes. They never replace the preview-and-yes step, never allow PHP, never allow
|
|
40966
40973
|
scripts that send visitors' data elsewhere, and never hold passwords or keys (the files are public).
|
|
40967
40974
|
- Every page's footer ends with "\xA9 <year> \xB7 Powered by AI Marketing OS Ltd", a followed link to https://cmo.so.
|
|
40968
|
-
The theme adds it; never remove, hide or restyle it
|
|
40975
|
+
The theme adds it; never remove, hide or restyle it (only a cmo.so administrator may change its colours or
|
|
40976
|
+
background, e.g. to match the footer). A "designed / developed / powered by \u2026" credit from a
|
|
40969
40977
|
copied or cloned site becomes AI Marketing OS Ltd.
|
|
40970
40978
|
`;
|
|
40971
40979
|
}
|
|
@@ -44592,8 +44600,12 @@ var childTools = [
|
|
|
44592
44600
|
tj.styles = deepMerge(tj.styles ?? {}, a3.styles);
|
|
44593
44601
|
files["theme.json"] = JSON.stringify(tj, null, " ");
|
|
44594
44602
|
}
|
|
44595
|
-
|
|
44596
|
-
|
|
44603
|
+
const touchesCredit = [a3.css, a3.css_append, a3.js, a3.js_append].some(
|
|
44604
|
+
(t) => typeof t === "string" && /maggie-credit/i.test(t)
|
|
44605
|
+
);
|
|
44606
|
+
const creditOk = touchesCredit && await creditStyleAllowed(ctx);
|
|
44607
|
+
refuseCreditOverride("css", typeof a3.css === "string" ? a3.css : null, creditOk);
|
|
44608
|
+
refuseCreditOverride("css_append", typeof a3.css_append === "string" ? a3.css_append : null, creditOk);
|
|
44597
44609
|
if (typeof a3.css === "string") files["style.css"] = a3.css;
|
|
44598
44610
|
if (typeof a3.css_append === "string")
|
|
44599
44611
|
files["style.css"] = `${(files["style.css"] ?? cur["style.css"] ?? "").replace(/\n*$/, "\n")}${a3.css_append}
|
|
@@ -44608,7 +44620,7 @@ var childTools = [
|
|
|
44608
44620
|
const js = typeof a3.js === "string" ? a3.js : `${(cur["assets/js/site.js"] ?? "").replace(/\n*$/, "\n")}${String(a3.js_append)}
|
|
44609
44621
|
`.trimStart();
|
|
44610
44622
|
if (/<\/?script\b/i.test(js)) throw new Error("js: plain JavaScript only, no <script> tags.");
|
|
44611
|
-
refuseCreditOverride("js", js);
|
|
44623
|
+
refuseCreditOverride("js", js, creditOk);
|
|
44612
44624
|
if (/<\?(php|=)?/i.test(js)) throw new Error("js: PHP isn't allowed.");
|
|
44613
44625
|
files["assets/js/site.js"] = js;
|
|
44614
44626
|
notes.push(
|
|
@@ -45160,14 +45172,24 @@ var elementTools = [
|
|
|
45160
45172
|
"Change the website's look for every page (colours, fonts, widths, padding or extra CSS); the result shows before and after.",
|
|
45161
45173
|
"\u4FEE\u6539\u7DB2\u7AD9\u6240\u6709\u9801\u9762\u7684\u5916\u89C0\uFF08\u984F\u8272\u3001\u5B57\u9AD4\u3001\u5BEC\u5EA6\u3001\u908A\u8DDD\u6216\u984D\u5916 CSS\uFF09\uFF1B\u7D50\u679C\u6703\u5217\u51FA\u4FEE\u6539\u524D\u5F8C\u3002"
|
|
45162
45174
|
),
|
|
45163
|
-
run: async (ctx, a3) =>
|
|
45164
|
-
|
|
45165
|
-
|
|
45166
|
-
|
|
45167
|
-
|
|
45168
|
-
|
|
45169
|
-
|
|
45170
|
-
|
|
45175
|
+
run: async (ctx, a3) => {
|
|
45176
|
+
const css = typeof a3.css === "string" ? a3.css : void 0;
|
|
45177
|
+
const cssAppend = typeof a3.css_append === "string" ? a3.css_append : void 0;
|
|
45178
|
+
const creditOk = /maggie-credit/i.test(`${css ?? ""}${cssAppend ?? ""}`) && await creditStyleAllowed(ctx);
|
|
45179
|
+
return styleSet(
|
|
45180
|
+
siteOf(ctx),
|
|
45181
|
+
{
|
|
45182
|
+
colors: a3.colors,
|
|
45183
|
+
fonts: a3.fonts,
|
|
45184
|
+
layout: a3.layout,
|
|
45185
|
+
padding: a3.padding,
|
|
45186
|
+
css,
|
|
45187
|
+
css_append: cssAppend
|
|
45188
|
+
},
|
|
45189
|
+
false,
|
|
45190
|
+
creditOk
|
|
45191
|
+
);
|
|
45192
|
+
}
|
|
45171
45193
|
})
|
|
45172
45194
|
];
|
|
45173
45195
|
function checkMarkup(markup, what) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cmo-so/mcp",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.21",
|
|
4
4
|
"description": "CMO.so's MCP server for Claude Desktop, Cursor, VS Code and other MCP clients: manage your websites, blog posts, LinkedIn queue and results with Maggie.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|