@cmo-so/cli 0.7.1 → 0.7.2
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.mjs +70 -2
- package/package.json +1 -1
package/dist/cmo.mjs
CHANGED
|
@@ -8089,6 +8089,18 @@ function domainApi(api2, domain) {
|
|
|
8089
8089
|
body: JSON.stringify(r)
|
|
8090
8090
|
}
|
|
8091
8091
|
),
|
|
8092
|
+
/** Competitors Maggie found with Google Search, waiting for the user to add or dismiss (docs/25). */
|
|
8093
|
+
competitorSuggestions: () => api2.request(
|
|
8094
|
+
`${base}/competitors/suggestions`
|
|
8095
|
+
),
|
|
8096
|
+
/** Put a suggestion in the business profile's competitors. */
|
|
8097
|
+
addCompetitorSuggestion: (id) => post(
|
|
8098
|
+
`${base}/competitors/suggestions/${encodeURIComponent(id)}/add`
|
|
8099
|
+
),
|
|
8100
|
+
/** Not a competitor: never suggested or read for ideas again. */
|
|
8101
|
+
dismissCompetitorSuggestion: (id) => post(`${base}/competitors/suggestions/${encodeURIComponent(id)}/dismiss`),
|
|
8102
|
+
/** Look for new competitors now (once a day; subscribed websites only, else 402). */
|
|
8103
|
+
refreshCompetitorSuggestions: () => post(`${base}/competitors/suggestions/refresh`),
|
|
8092
8104
|
/** The last time posts delivered by API pull were found in the website's sitemap (gives them their address). */
|
|
8093
8105
|
sitemapMatch: () => api2.request(`${base}/rewrites/sitemap-match`),
|
|
8094
8106
|
/** Read the sitemap (found on its own when blank) and match API-pull posts to their live address. */
|
|
@@ -9644,6 +9656,60 @@ var brandTools = [
|
|
|
9644
9656
|
return { competitors: out.competitors?.map((x) => x.name) };
|
|
9645
9657
|
}
|
|
9646
9658
|
}),
|
|
9659
|
+
tool({
|
|
9660
|
+
name: "competitor_suggestions_list",
|
|
9661
|
+
description: "Competitors Maggie found on the web (each website checked) that the user hasn't added to the profile or dismissed yet: name, website, one line, and how many ideas came from their site. Their sitemaps are already used for blog ideas while they wait.",
|
|
9662
|
+
parameters: none,
|
|
9663
|
+
group: "brand",
|
|
9664
|
+
need: { resource: "overview", level: "read" },
|
|
9665
|
+
risk: "R0",
|
|
9666
|
+
run: async (ctx) => {
|
|
9667
|
+
const out = await ws(ctx).competitorSuggestions();
|
|
9668
|
+
return {
|
|
9669
|
+
searched_at: out.searched_at,
|
|
9670
|
+
suggestions: out.items.map(({ id, name, website, description: description2, ideas_found }) => ({
|
|
9671
|
+
id,
|
|
9672
|
+
name,
|
|
9673
|
+
website,
|
|
9674
|
+
description: description2,
|
|
9675
|
+
ideas_found
|
|
9676
|
+
}))
|
|
9677
|
+
};
|
|
9678
|
+
}
|
|
9679
|
+
}),
|
|
9680
|
+
tool({
|
|
9681
|
+
name: "competitor_suggestion_add",
|
|
9682
|
+
description: "Add one of Maggie's competitor suggestions (id from competitor_suggestions_list) to the business profile.",
|
|
9683
|
+
parameters: { type: "object", properties: { id: { type: "string" } }, required: ["id"] },
|
|
9684
|
+
group: "brand",
|
|
9685
|
+
need: write2,
|
|
9686
|
+
risk: "W1",
|
|
9687
|
+
run: async (ctx, { id }) => {
|
|
9688
|
+
const out = await ws(ctx).addCompetitorSuggestion(id);
|
|
9689
|
+
return { competitors: out.competitors.map((c) => c.name) };
|
|
9690
|
+
}
|
|
9691
|
+
}),
|
|
9692
|
+
tool({
|
|
9693
|
+
name: "competitor_suggestion_dismiss",
|
|
9694
|
+
description: "Not a competitor after all: the suggestion is never made again and its site is no longer read for ideas.",
|
|
9695
|
+
parameters: { type: "object", properties: { id: { type: "string" } }, required: ["id"] },
|
|
9696
|
+
group: "brand",
|
|
9697
|
+
need: write2,
|
|
9698
|
+
risk: "W1",
|
|
9699
|
+
run: async (ctx, { id }) => ws(ctx).dismissCompetitorSuggestion(id)
|
|
9700
|
+
}),
|
|
9701
|
+
tool({
|
|
9702
|
+
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.",
|
|
9704
|
+
parameters: none,
|
|
9705
|
+
group: "brand",
|
|
9706
|
+
need: write2,
|
|
9707
|
+
risk: "W1",
|
|
9708
|
+
run: async (ctx) => {
|
|
9709
|
+
const out = await ws(ctx).refreshCompetitorSuggestions();
|
|
9710
|
+
return { found: out.found, suggestions: out.items.map(({ id, name, website }) => ({ id, name, website })) };
|
|
9711
|
+
}
|
|
9712
|
+
}),
|
|
9647
9713
|
tool({
|
|
9648
9714
|
name: "brand_research_update",
|
|
9649
9715
|
description: "Change the profile's market notes: market_research (text), additional_information (anything else Maggie should know) or the SWOT list (each {name: Strengths|Weaknesses|Opportunities|Threats, description}). A list replaces the whole list.",
|
|
@@ -15376,7 +15442,7 @@ var program = new Command();
|
|
|
15376
15442
|
// package.json
|
|
15377
15443
|
var package_default = {
|
|
15378
15444
|
name: "@cmo-so/cli",
|
|
15379
|
-
version: "0.7.
|
|
15445
|
+
version: "0.7.2",
|
|
15380
15446
|
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.",
|
|
15381
15447
|
type: "module",
|
|
15382
15448
|
license: "MIT",
|
|
@@ -25607,12 +25673,14 @@ var OPEN_WORLD = /* @__PURE__ */ new Set([
|
|
|
25607
25673
|
"social_video_add",
|
|
25608
25674
|
"seo_audit_run",
|
|
25609
25675
|
"ai_visibility_prompt_check",
|
|
25610
|
-
"idea_add"
|
|
25676
|
+
"idea_add",
|
|
25677
|
+
"competitor_suggestions_find"
|
|
25611
25678
|
]);
|
|
25612
25679
|
var OVERWRITES = /* @__PURE__ */ new Set([
|
|
25613
25680
|
"ai_visibility_keywords_set",
|
|
25614
25681
|
"brand_research_update",
|
|
25615
25682
|
"brand_update",
|
|
25683
|
+
"competitor_suggestion_dismiss",
|
|
25616
25684
|
"draft_rewrite",
|
|
25617
25685
|
"draft_rewrite_save",
|
|
25618
25686
|
"draft_update",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cmo-so/cli",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
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",
|