@cmo-so/cli 0.7.2 → 0.7.3

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.mjs +51 -3
  2. package/package.json +1 -1
package/dist/cmo.mjs CHANGED
@@ -7353,6 +7353,14 @@ function createApi({ baseUrl, session: session2, fetch: fetchImpl = globalThis.f
7353
7353
  apps: () => request("/v1/me/apps"),
7354
7354
  revokeApp: (grantId) => request(`/v1/me/apps/${encodeURIComponent(grantId)}`, { method: "DELETE" }),
7355
7355
  invoices: () => request("/v1/me/invoices"),
7356
+ /**
7357
+ * Take a website off your own list (archives your claim; reversible on ai.cmo.so). Nothing changes for
7358
+ * anyone else; a team member also leaves the team.
7359
+ */
7360
+ removeWebsite: (domain) => request(
7361
+ `/v1/me/websites/${encodeURIComponent(domain)}/remove`,
7362
+ { method: "POST" }
7363
+ ),
7356
7364
  /** Delete the account (only from the person's own sign-in). Websites stay, unclaimed; plans stop renewing. */
7357
7365
  delete: () => request("/v1/me/delete", {
7358
7366
  method: "POST",
@@ -7640,6 +7648,11 @@ function domainApi(api2, domain) {
7640
7648
  wordpressPlugin: () => api2.request(`${base}/wordpress-plugin`),
7641
7649
  // Writes (need autopilot write on the domain).
7642
7650
  addIdea: (input) => post(`${base}/ideas`, input),
7651
+ /**
7652
+ * Up to 100 ideas exactly as given (no AI, no generation used): they wait in the pool, not the plan, and count
7653
+ * toward the 100 waiting ideas a person may add. Duplicates (title or page) are skipped and listed.
7654
+ */
7655
+ addIdeas: (ideas2) => post(`${base}/ideas/bulk`, { ideas: ideas2 }),
7643
7656
  /** Ideas built on up to 10 photos (base64 JPEG). The server keeps no copy. */
7644
7657
  ideasFromPhotos: (photos, count, brief2 = "") => post(`${base}/ideas/from-photos`, { photos, count, brief: brief2 }),
7645
7658
  generateIdeas: (count, brief2 = "") => post(`${base}/ideas/generate`, { count, brief: brief2 }),
@@ -9294,6 +9307,41 @@ var blogTools = [
9294
9307
  return ws(ctx).addIdea(url ? { url } : { text: text3 });
9295
9308
  }
9296
9309
  }),
9310
+ tool({
9311
+ name: "ideas_add_list",
9312
+ description: "Add up to 100 ideas exactly as given (a researched list): title, description, primary keyword, up to 5 more keywords, a benchmark URL (read as research, never linked), priority 1-10 and optionally one of the website's topics. No AI rewrites them and no generation is used; they wait in the idea pool, not the plan. Duplicates are skipped and listed; at most 100 of a person's own ideas can wait at once.",
9313
+ parameters: {
9314
+ type: "object",
9315
+ properties: {
9316
+ ideas: {
9317
+ type: "array",
9318
+ items: {
9319
+ type: "object",
9320
+ properties: {
9321
+ title: { type: "string" },
9322
+ description: { type: "string" },
9323
+ keyword: { type: "string", description: "The primary keyword" },
9324
+ keywords: { type: "array", items: { type: "string" } },
9325
+ url: { type: "string", description: "A benchmark page" },
9326
+ priority: { type: "integer", minimum: 1, maximum: 10 },
9327
+ topic: { type: "string", description: "One of topics_list, if it fits" }
9328
+ },
9329
+ required: ["title"]
9330
+ }
9331
+ }
9332
+ },
9333
+ required: ["ideas"]
9334
+ },
9335
+ group: "blog",
9336
+ need: write,
9337
+ risk: "W1",
9338
+ run: async (ctx, { ideas: ideas2 }) => {
9339
+ if (!ideas2?.length) throw new Error("Give at least one idea.");
9340
+ if (ideas2.length > 100) throw new Error("Up to 100 ideas at a time.");
9341
+ const out = await ws(ctx).addIdeas(ideas2);
9342
+ return { added: out.added, skipped: out.skipped, room_left: out.room_left };
9343
+ }
9344
+ }),
9297
9345
  tool({
9298
9346
  name: "ideas_generate",
9299
9347
  description: "Let Maggie come up with new ideas (1\u201310) with AI, optionally about a theme.",
@@ -9365,7 +9413,7 @@ var blogTools = [
9365
9413
  }),
9366
9414
  tool({
9367
9415
  name: "idea_plan",
9368
- description: "Add a waiting idea to the end of the plan (the plan holds at most 10).",
9416
+ description: "Add a waiting idea to the end of the plan (the plan holds up to 100).",
9369
9417
  parameters: {
9370
9418
  type: "object",
9371
9419
  properties: {
@@ -9700,7 +9748,7 @@ var brandTools = [
9700
9748
  }),
9701
9749
  tool({
9702
9750
  name: "competitor_suggestions_find",
9703
- description: "Look for new competitors on the web now (once a day per website, subscribed websites only; Maggie also looks on her own about monthly). New ones come back as suggestions; nothing is added to the profile.",
9751
+ description: "Look for new competitors on the web now (once a day per website, subscribed websites only; Maggie also looks on her own once the website and its known competitors have no new pages left). New ones come back as suggestions; nothing is added to the profile.",
9704
9752
  parameters: none,
9705
9753
  group: "brand",
9706
9754
  need: write2,
@@ -15442,7 +15490,7 @@ var program = new Command();
15442
15490
  // package.json
15443
15491
  var package_default = {
15444
15492
  name: "@cmo-so/cli",
15445
- version: "0.7.2",
15493
+ version: "0.7.3",
15446
15494
  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.",
15447
15495
  type: "module",
15448
15496
  license: "MIT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cmo-so/cli",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "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.",
5
5
  "type": "module",
6
6
  "license": "MIT",