@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.
Files changed (2) hide show
  1. package/dist/cmo-mcp.mjs +39 -17
  2. 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.20",
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 refuseCreditOverride(what, text3) {
39255
- if (text3 && /maggie-credit/i.test(text3))
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. A "designed / developed / powered by \u2026" credit from a
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
- refuseCreditOverride("css", typeof a3.css === "string" ? a3.css : null);
44596
- refuseCreditOverride("css_append", typeof a3.css_append === "string" ? a3.css_append : null);
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) => styleSet(siteOf(ctx), {
45164
- colors: a3.colors,
45165
- fonts: a3.fonts,
45166
- layout: a3.layout,
45167
- padding: a3.padding,
45168
- css: typeof a3.css === "string" ? a3.css : void 0,
45169
- css_append: typeof a3.css_append === "string" ? a3.css_append : void 0
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.20",
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",