@koda-sl/baker-cli 0.140.1 → 0.140.2-dev.253d2418a
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/README.md +2 -0
- package/dist/{chunk-TAGQCU36.js → chunk-TXNOPO6P.js} +4 -4
- package/dist/chunk-TXNOPO6P.js.map +1 -0
- package/dist/cli.js +199 -30
- package/dist/cli.js.map +1 -1
- package/dist/engine/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-TAGQCU36.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
toModelSafeImage,
|
|
35
35
|
ulid,
|
|
36
36
|
validateCanvasDeep
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-TXNOPO6P.js";
|
|
38
38
|
import {
|
|
39
39
|
csvOrJson,
|
|
40
40
|
daysAgoIso,
|
|
@@ -3711,7 +3711,8 @@ Examples:
|
|
|
3711
3711
|
baker actions claim <id>
|
|
3712
3712
|
baker actions create --name "Build hero" --tags landing,creative --description "..."
|
|
3713
3713
|
baker actions complete <id>
|
|
3714
|
-
baker actions discard <id> --reason "obsolete"
|
|
3714
|
+
baker actions discard <id> --reason "obsolete"
|
|
3715
|
+
Full guide: __tooling__/docs/tools/baker/actions.md`
|
|
3715
3716
|
},
|
|
3716
3717
|
subCommands: {
|
|
3717
3718
|
list: listCommand2,
|
|
@@ -7684,7 +7685,8 @@ Staged writes (never touch Google until the chat is published):
|
|
|
7684
7685
|
baker ads google budgets create --customer-id 1234567890 --name "Search" --amount 50
|
|
7685
7686
|
baker ads google campaigns create --customer-id 1234567890 --name "Brand" --channel-type SEARCH --budget-ref g_temp_\u2026 --bidding-strategy MANUAL_CPC
|
|
7686
7687
|
baker ads google keyword-lists create --customer-id 1234567890 --name "Brand exclusions"
|
|
7687
|
-
baker ads google draft list \u2014 review staged Google Ads changes
|
|
7688
|
+
baker ads google draft list \u2014 review staged Google Ads changes
|
|
7689
|
+
Full guide: __tooling__/docs/tools/baker/ads-google.md`
|
|
7688
7690
|
},
|
|
7689
7691
|
subCommands: {
|
|
7690
7692
|
accounts: accountsCommand,
|
|
@@ -11144,7 +11146,8 @@ published; if the company's LinkedIn-write flag is off the publish is simulated)
|
|
|
11144
11146
|
|
|
11145
11147
|
Account ID format:
|
|
11146
11148
|
--account-id accepts numeric (503001492) or URN (urn:li:sponsoredAccount:503001492).
|
|
11147
|
-
Set BAKER_LINKEDIN_AD_ACCOUNT_ID env to skip --account-id on every call
|
|
11149
|
+
Set BAKER_LINKEDIN_AD_ACCOUNT_ID env to skip --account-id on every call.
|
|
11150
|
+
Full guide: __tooling__/docs/tools/baker/ads-linkedin.md`
|
|
11148
11151
|
},
|
|
11149
11152
|
subCommands: {
|
|
11150
11153
|
accounts: accountsCommand2,
|
|
@@ -11345,11 +11348,13 @@ var SPECIAL_AD_CATEGORIES = [
|
|
|
11345
11348
|
"NONE",
|
|
11346
11349
|
"HOUSING",
|
|
11347
11350
|
"EMPLOYMENT",
|
|
11351
|
+
/** Deprecated by Meta on 2025-01-14 — replaced by FINANCIAL_PRODUCTS_SERVICES. Still accepted as input and mapped on the wire. */
|
|
11348
11352
|
"CREDIT",
|
|
11349
11353
|
"ISSUES_ELECTIONS_POLITICS",
|
|
11350
11354
|
"FINANCIAL_PRODUCTS_SERVICES",
|
|
11351
11355
|
"ONLINE_GAMBLING_AND_GAMING"
|
|
11352
11356
|
];
|
|
11357
|
+
var SPECIAL_CATEGORIES_REQUIRING_COUNTRY = ["ISSUES_ELECTIONS_POLITICS"];
|
|
11353
11358
|
var BUYING_TYPES = ["AUCTION", "RESERVED"];
|
|
11354
11359
|
var BID_STRATEGIES = [
|
|
11355
11360
|
"LOWEST_COST_WITHOUT_CAP",
|
|
@@ -11358,6 +11363,10 @@ var BID_STRATEGIES = [
|
|
|
11358
11363
|
"LOWEST_COST_WITH_MIN_ROAS"
|
|
11359
11364
|
];
|
|
11360
11365
|
var BID_STRATEGIES_REQUIRING_AMOUNT = ["LOWEST_COST_WITH_BID_CAP", "COST_CAP"];
|
|
11366
|
+
var BID_STRATEGIES_FORBIDDING_AMOUNT = [
|
|
11367
|
+
"LOWEST_COST_WITHOUT_CAP",
|
|
11368
|
+
"LOWEST_COST_WITH_MIN_ROAS"
|
|
11369
|
+
];
|
|
11361
11370
|
var BILLING_EVENTS = [
|
|
11362
11371
|
"APP_INSTALLS",
|
|
11363
11372
|
"CLICKS",
|
|
@@ -11397,6 +11406,9 @@ var OPTIMIZATION_GOALS_REQUIRING_PAGE = [
|
|
|
11397
11406
|
"QUALITY_LEAD",
|
|
11398
11407
|
"PAGE_LIKES"
|
|
11399
11408
|
];
|
|
11409
|
+
var OPTIMIZATION_GOALS_REQUIRING_PIXEL = ["OFFSITE_CONVERSIONS"];
|
|
11410
|
+
var OPTIMIZATION_GOALS_REQUIRING_CONVERSION_SOURCE = ["VALUE"];
|
|
11411
|
+
var OPTIMIZATION_GOALS_REQUIRING_APP = ["APP_INSTALLS"];
|
|
11400
11412
|
var DESTINATION_TYPES = [
|
|
11401
11413
|
"WEBSITE",
|
|
11402
11414
|
"APP",
|
|
@@ -11426,6 +11438,8 @@ var CUSTOM_EVENT_TYPES = [
|
|
|
11426
11438
|
"OTHER"
|
|
11427
11439
|
];
|
|
11428
11440
|
var ATTRIBUTION_EVENT_TYPES = ["CLICK_THROUGH", "VIEW_THROUGH", "ENGAGED_VIDEO_VIEW"];
|
|
11441
|
+
var ADVANTAGE_AUDIENCE_OPEN_AGE_MAX = 65;
|
|
11442
|
+
var ADVANTAGE_AUDIENCE_MAX_HARD_AGE_MIN = 25;
|
|
11429
11443
|
var CTA_TYPES2 = [
|
|
11430
11444
|
"LEARN_MORE",
|
|
11431
11445
|
"SHOP_NOW",
|
|
@@ -11523,6 +11537,44 @@ var metaTargetingSchema = z14.object({
|
|
|
11523
11537
|
device_platforms: z14.array(z14.string()).optional(),
|
|
11524
11538
|
targeting_automation: z14.object({ advantage_audience: z14.union([z14.literal(0), z14.literal(1)]) }).partial().optional()
|
|
11525
11539
|
}).catchall(z14.unknown());
|
|
11540
|
+
var GEO_INCLUSION_KEYS = [
|
|
11541
|
+
"countries",
|
|
11542
|
+
"country_groups",
|
|
11543
|
+
"regions",
|
|
11544
|
+
"cities",
|
|
11545
|
+
"zips",
|
|
11546
|
+
"geo_markets",
|
|
11547
|
+
"places",
|
|
11548
|
+
"custom_locations",
|
|
11549
|
+
"electoral_districts",
|
|
11550
|
+
"subcities",
|
|
11551
|
+
"neighborhoods"
|
|
11552
|
+
];
|
|
11553
|
+
function targetingHasGeo(t) {
|
|
11554
|
+
const geo = t?.geo_locations;
|
|
11555
|
+
return Boolean(
|
|
11556
|
+
geo && GEO_INCLUSION_KEYS.some((key) => Array.isArray(geo[key]) && geo[key].length > 0)
|
|
11557
|
+
);
|
|
11558
|
+
}
|
|
11559
|
+
function targetingHasGeoOrAudience(t) {
|
|
11560
|
+
if (!t) {
|
|
11561
|
+
return false;
|
|
11562
|
+
}
|
|
11563
|
+
return targetingHasGeo(t) || Boolean(t.custom_audiences?.length);
|
|
11564
|
+
}
|
|
11565
|
+
function advantageAudienceSetting(t) {
|
|
11566
|
+
const value = t.targeting_automation?.advantage_audience;
|
|
11567
|
+
return value === 0 || value === 1 ? value : void 0;
|
|
11568
|
+
}
|
|
11569
|
+
function targetingHardLimitsDemographics(t) {
|
|
11570
|
+
if (!t) {
|
|
11571
|
+
return false;
|
|
11572
|
+
}
|
|
11573
|
+
const narrowsAgeMax = typeof t.age_max === "number" && t.age_max < ADVANTAGE_AUDIENCE_OPEN_AGE_MAX;
|
|
11574
|
+
const narrowsAgeMin = typeof t.age_min === "number" && t.age_min > ADVANTAGE_AUDIENCE_MAX_HARD_AGE_MIN;
|
|
11575
|
+
const narrowsGender = Array.isArray(t.genders) && t.genders.length === 1;
|
|
11576
|
+
return narrowsAgeMax || narrowsAgeMin || narrowsGender;
|
|
11577
|
+
}
|
|
11526
11578
|
var specialAdCategoriesSchema = z14.array(z14.enum(SPECIAL_AD_CATEGORIES)).default(["NONE"]);
|
|
11527
11579
|
var campaignCreateSchema3 = z14.object({
|
|
11528
11580
|
name: z14.string().min(1).max(META_LIMITS.campaign.nameMax),
|
|
@@ -11546,6 +11598,14 @@ var campaignCreateSchema3 = z14.object({
|
|
|
11546
11598
|
if (p.stop_time && p.start_time && p.stop_time <= p.start_time) {
|
|
11547
11599
|
ctx.addIssue({ code: "custom", path: ["stop_time"], message: "stop_time must be after start_time" });
|
|
11548
11600
|
}
|
|
11601
|
+
const needsCountry = p.special_ad_categories.some((c) => SPECIAL_CATEGORIES_REQUIRING_COUNTRY.includes(c));
|
|
11602
|
+
if (needsCountry && !p.special_ad_category_country?.length) {
|
|
11603
|
+
ctx.addIssue({
|
|
11604
|
+
code: "custom",
|
|
11605
|
+
path: ["special_ad_category_country"],
|
|
11606
|
+
message: "ISSUES_ELECTIONS_POLITICS campaigns need special_ad_category_country \u2014 pass the 2-letter country code(s) the ads run in"
|
|
11607
|
+
});
|
|
11608
|
+
}
|
|
11549
11609
|
});
|
|
11550
11610
|
var campaignUpdateSchema3 = z14.object({
|
|
11551
11611
|
name: z14.string().min(1).max(META_LIMITS.campaign.nameMax).optional(),
|
|
@@ -11597,8 +11657,41 @@ var adSetFields = {
|
|
|
11597
11657
|
attribution_spec: attributionSpecSchema.optional(),
|
|
11598
11658
|
start_time: z14.number().int().positive().optional(),
|
|
11599
11659
|
end_time: z14.number().int().positive().optional(),
|
|
11600
|
-
targeting: metaTargetingSchema
|
|
11660
|
+
targeting: metaTargetingSchema,
|
|
11661
|
+
/** EU Digital Services Act: who benefits from / pays for the ad. Auto-filled from the account for EU geo when omitted. */
|
|
11662
|
+
dsa_beneficiary: z14.string().min(1).max(100).optional(),
|
|
11663
|
+
dsa_payor: z14.string().min(1).max(100).optional()
|
|
11601
11664
|
};
|
|
11665
|
+
function validateBidStrategy(p, ctx) {
|
|
11666
|
+
const strategy = p.bid_strategy;
|
|
11667
|
+
if (!strategy) {
|
|
11668
|
+
return;
|
|
11669
|
+
}
|
|
11670
|
+
if (BID_STRATEGIES_REQUIRING_AMOUNT.includes(strategy) && !p.bidAmount) {
|
|
11671
|
+
ctx.addIssue({ code: "custom", path: ["bidAmount"], message: `${strategy} requires a bidAmount` });
|
|
11672
|
+
}
|
|
11673
|
+
if (BID_STRATEGIES_FORBIDDING_AMOUNT.includes(strategy) && p.bidAmount) {
|
|
11674
|
+
ctx.addIssue({
|
|
11675
|
+
code: "custom",
|
|
11676
|
+
path: ["bidAmount"],
|
|
11677
|
+
message: `${strategy} must not set a bidAmount \u2014 Meta rejects one (it bids automatically)`
|
|
11678
|
+
});
|
|
11679
|
+
}
|
|
11680
|
+
if (strategy === "COST_CAP" && p.billing_event && p.billing_event !== "IMPRESSIONS") {
|
|
11681
|
+
ctx.addIssue({
|
|
11682
|
+
code: "custom",
|
|
11683
|
+
path: ["billing_event"],
|
|
11684
|
+
message: "COST_CAP requires billing_event IMPRESSIONS"
|
|
11685
|
+
});
|
|
11686
|
+
}
|
|
11687
|
+
if (strategy === "LOWEST_COST_WITH_MIN_ROAS" && p.optimization_goal && p.optimization_goal !== "VALUE") {
|
|
11688
|
+
ctx.addIssue({
|
|
11689
|
+
code: "custom",
|
|
11690
|
+
path: ["bid_strategy"],
|
|
11691
|
+
message: "LOWEST_COST_WITH_MIN_ROAS requires optimization_goal VALUE"
|
|
11692
|
+
});
|
|
11693
|
+
}
|
|
11694
|
+
}
|
|
11602
11695
|
function validateAdSetBudgetAndBid(p, ctx) {
|
|
11603
11696
|
if (p.dailyBudget && p.lifetimeBudget) {
|
|
11604
11697
|
ctx.addIssue({ code: "custom", path: ["dailyBudget"], message: "set only one of dailyBudget or lifetimeBudget" });
|
|
@@ -11607,25 +11700,74 @@ function validateAdSetBudgetAndBid(p, ctx) {
|
|
|
11607
11700
|
if (p.lifetimeBudget && !p.end_time) {
|
|
11608
11701
|
ctx.addIssue({ code: "custom", path: ["end_time"], message: "lifetimeBudget ad sets need an end_time" });
|
|
11609
11702
|
}
|
|
11610
|
-
|
|
11611
|
-
ctx.addIssue({ code: "custom", path: ["bidAmount"], message: `${p.bid_strategy} requires a bidAmount` });
|
|
11612
|
-
}
|
|
11703
|
+
validateBidStrategy(p, ctx);
|
|
11613
11704
|
if (p.end_time && p.start_time && p.end_time <= p.start_time) {
|
|
11614
11705
|
ctx.addIssue({ code: "custom", path: ["end_time"], message: "end_time must be after start_time" });
|
|
11615
11706
|
}
|
|
11616
11707
|
}
|
|
11617
11708
|
function validateAdSetPromotedObject(p, ctx) {
|
|
11618
|
-
|
|
11709
|
+
const goal = p.optimization_goal;
|
|
11710
|
+
if (!goal) {
|
|
11711
|
+
return;
|
|
11712
|
+
}
|
|
11713
|
+
const po = p.promoted_object;
|
|
11714
|
+
if (OPTIMIZATION_GOALS_REQUIRING_PAGE.includes(goal) && !po?.page_id) {
|
|
11619
11715
|
ctx.addIssue({
|
|
11620
11716
|
code: "custom",
|
|
11621
11717
|
path: ["promoted_object", "page_id"],
|
|
11622
|
-
message: `optimization_goal ${
|
|
11718
|
+
message: `optimization_goal ${goal} needs promoted_object.page_id \u2014 pass --page-id with the Facebook Page the leads/likes belong to`
|
|
11719
|
+
});
|
|
11720
|
+
}
|
|
11721
|
+
if (OPTIMIZATION_GOALS_REQUIRING_PIXEL.includes(goal) && !po?.pixel_id) {
|
|
11722
|
+
ctx.addIssue({
|
|
11723
|
+
code: "custom",
|
|
11724
|
+
path: ["promoted_object", "pixel_id"],
|
|
11725
|
+
message: `optimization_goal ${goal} needs promoted_object.pixel_id \u2014 pass --pixel-id with the conversion pixel`
|
|
11726
|
+
});
|
|
11727
|
+
}
|
|
11728
|
+
if (OPTIMIZATION_GOALS_REQUIRING_CONVERSION_SOURCE.includes(goal) && !po?.pixel_id && !po?.application_id) {
|
|
11729
|
+
ctx.addIssue({
|
|
11730
|
+
code: "custom",
|
|
11731
|
+
path: ["promoted_object", "pixel_id"],
|
|
11732
|
+
message: `optimization_goal ${goal} needs a conversion source \u2014 pass promoted_object.pixel_id (web value optimization) or promoted_object.application_id (app value optimization)`
|
|
11733
|
+
});
|
|
11734
|
+
}
|
|
11735
|
+
if ((OPTIMIZATION_GOALS_REQUIRING_PIXEL.includes(goal) || OPTIMIZATION_GOALS_REQUIRING_CONVERSION_SOURCE.includes(goal)) && !po?.custom_event_type) {
|
|
11736
|
+
ctx.addIssue({
|
|
11737
|
+
code: "custom",
|
|
11738
|
+
path: ["promoted_object", "custom_event_type"],
|
|
11739
|
+
message: `optimization_goal ${goal} needs promoted_object.custom_event_type \u2014 pass --custom-event-type (e.g. PURCHASE, LEAD)`
|
|
11740
|
+
});
|
|
11741
|
+
}
|
|
11742
|
+
if (OPTIMIZATION_GOALS_REQUIRING_APP.includes(goal) && !po?.application_id) {
|
|
11743
|
+
ctx.addIssue({
|
|
11744
|
+
code: "custom",
|
|
11745
|
+
path: ["promoted_object", "application_id"],
|
|
11746
|
+
message: `optimization_goal ${goal} needs promoted_object.application_id`
|
|
11747
|
+
});
|
|
11748
|
+
}
|
|
11749
|
+
}
|
|
11750
|
+
function validateAdvantageAudience(p, ctx) {
|
|
11751
|
+
const t = p.targeting;
|
|
11752
|
+
if (t && targetingHardLimitsDemographics(t) && advantageAudienceSetting(t) === 1) {
|
|
11753
|
+
ctx.addIssue({
|
|
11754
|
+
code: "custom",
|
|
11755
|
+
path: ["targeting", "targeting_automation", "advantage_audience"],
|
|
11756
|
+
message: "Advantage+ Audience (advantage_audience: 1) treats age and gender as suggestions, so a hard age/gender limit is rejected \u2014 set advantage_audience: 0 to enforce the limit, or drop the age_max/age_min/gender restriction"
|
|
11623
11757
|
});
|
|
11624
11758
|
}
|
|
11625
11759
|
}
|
|
11626
11760
|
var adSetCreateSchema = z14.object(adSetFields).superRefine((p, ctx) => {
|
|
11627
11761
|
validateAdSetBudgetAndBid(p, ctx);
|
|
11628
11762
|
validateAdSetPromotedObject(p, ctx);
|
|
11763
|
+
validateAdvantageAudience(p, ctx);
|
|
11764
|
+
if (!targetingHasGeoOrAudience(p.targeting)) {
|
|
11765
|
+
ctx.addIssue({
|
|
11766
|
+
code: "custom",
|
|
11767
|
+
path: ["targeting", "geo_locations"],
|
|
11768
|
+
message: 'targeting needs a location \u2014 set targeting.geo_locations (e.g. countries: ["US"]) or include a custom audience; Meta rejects an ad set with no geo'
|
|
11769
|
+
});
|
|
11770
|
+
}
|
|
11629
11771
|
});
|
|
11630
11772
|
var adSetUpdateSchema = z14.object({
|
|
11631
11773
|
name: adSetFields.name.optional(),
|
|
@@ -11640,7 +11782,9 @@ var adSetUpdateSchema = z14.object({
|
|
|
11640
11782
|
attribution_spec: attributionSpecSchema.optional(),
|
|
11641
11783
|
start_time: z14.number().int().positive().optional(),
|
|
11642
11784
|
end_time: z14.number().int().positive().optional(),
|
|
11643
|
-
targeting: metaTargetingSchema.optional()
|
|
11785
|
+
targeting: metaTargetingSchema.optional(),
|
|
11786
|
+
dsa_beneficiary: z14.string().min(1).max(100).optional(),
|
|
11787
|
+
dsa_payor: z14.string().min(1).max(100).optional()
|
|
11644
11788
|
}).superRefine((p, ctx) => {
|
|
11645
11789
|
if (!Object.values(p).some((val) => val !== void 0)) {
|
|
11646
11790
|
ctx.addIssue({ code: "custom", message: "update needs at least one field" });
|
|
@@ -11649,6 +11793,7 @@ var adSetUpdateSchema = z14.object({
|
|
|
11649
11793
|
if (p.optimization_goal) {
|
|
11650
11794
|
validateAdSetPromotedObject(p, ctx);
|
|
11651
11795
|
}
|
|
11796
|
+
validateAdvantageAudience(p, ctx);
|
|
11652
11797
|
});
|
|
11653
11798
|
var messageSchema = z14.string().min(1).max(META_LIMITS.creative.messageHardMax);
|
|
11654
11799
|
var headlineSchema2 = z14.string().min(1).max(META_LIMITS.creative.headlineMax);
|
|
@@ -13427,7 +13572,8 @@ Performance (the workhorse):
|
|
|
13427
13572
|
|
|
13428
13573
|
Audit & review:
|
|
13429
13574
|
baker ads meta activities --account-id act_123 --days 14
|
|
13430
|
-
baker ads meta preview --creative-id 9988 --ad-format MOBILE_FEED_STANDARD --out-file /tmp/p.html
|
|
13575
|
+
baker ads meta preview --creative-id 9988 --ad-format MOBILE_FEED_STANDARD --out-file /tmp/p.html
|
|
13576
|
+
Full guide: __tooling__/docs/tools/baker/ads-meta.md`
|
|
13431
13577
|
},
|
|
13432
13578
|
subCommands: {
|
|
13433
13579
|
accounts: accountsCommand3,
|
|
@@ -14891,7 +15037,8 @@ Examples:
|
|
|
14891
15037
|
--start-time 2026-04-01T00:00:00Z --end-time 2026-05-01T00:00:00Z \\
|
|
14892
15038
|
--metric-groups ENGAGEMENT,BILLING --segmentation-type LOCATIONS
|
|
14893
15039
|
|
|
14894
|
-
The CLI auto-detects --account-id when exactly one X Ads account is connected, or via BAKER_X_ADS_ACCOUNT_ID
|
|
15040
|
+
The CLI auto-detects --account-id when exactly one X Ads account is connected, or via BAKER_X_ADS_ACCOUNT_ID.
|
|
15041
|
+
Full guide: __tooling__/docs/tools/baker/ads-x.md`
|
|
14895
15042
|
},
|
|
14896
15043
|
subCommands: {
|
|
14897
15044
|
accounts: accountsCommand4,
|
|
@@ -14929,7 +15076,8 @@ Examples:
|
|
|
14929
15076
|
baker ads meta insights --object act_123 --level ad --date-preset last_7d --fields impressions,spend,ctr
|
|
14930
15077
|
baker ads linkedin accounts
|
|
14931
15078
|
baker ads x accounts
|
|
14932
|
-
baker ads x stats sync --preset campaign-engagement-7d --entity-ids abc,def
|
|
15079
|
+
baker ads x stats sync --preset campaign-engagement-7d --entity-ids abc,def
|
|
15080
|
+
Full guides: __tooling__/docs/tools/baker/ads-<platform>.md (google|meta|linkedin|x)`
|
|
14933
15081
|
},
|
|
14934
15082
|
subCommands: {
|
|
14935
15083
|
google: googleCommand,
|
|
@@ -21626,7 +21774,8 @@ Subcommands:
|
|
|
21626
21774
|
baker canvas catalog \u2014 print the agent-facing node + composition catalog (JSON Schema)
|
|
21627
21775
|
baker canvas inspect <run_id> \u2014 one-page summary of a completed run
|
|
21628
21776
|
baker canvas scaffold-video <video> \u2014 turn a reference video into a runnable reproduction canvas (deconstruct + recurring-element detection)
|
|
21629
|
-
baker canvas scaffold-static-ad <image> \u2014 turn a source image into a runnable static-ad canvas (describe + element detection)
|
|
21777
|
+
baker canvas scaffold-static-ad <image> \u2014 turn a source image into a runnable static-ad canvas (describe + element detection)
|
|
21778
|
+
Full guide: __tooling__/docs/tools/baker/canvas.md`
|
|
21630
21779
|
},
|
|
21631
21780
|
subCommands: {
|
|
21632
21781
|
run: runCommand,
|
|
@@ -21863,7 +22012,8 @@ var diffCommand = defineCommand96({
|
|
|
21863
22012
|
var chatsCommand = defineCommand96({
|
|
21864
22013
|
meta: {
|
|
21865
22014
|
name: "chats",
|
|
21866
|
-
description:
|
|
22015
|
+
description: `Inspect other Sessions on this account (read-only): list them, view what they produced, read their conversation, and see their real file changes \u2014 so you can reuse past work for a new goal.
|
|
22016
|
+
Full guide: __tooling__/docs/tools/baker/chats.md`
|
|
21867
22017
|
},
|
|
21868
22018
|
subCommands: {
|
|
21869
22019
|
list: listCommand5,
|
|
@@ -22087,7 +22237,8 @@ var creativesCommand3 = defineCommand98({
|
|
|
22087
22237
|
Static creative handoff:
|
|
22088
22238
|
baker creatives publish ./canvas/run/final.png --title "Spring Offer Static Ad"
|
|
22089
22239
|
|
|
22090
|
-
Publishing uploads the image to the Company image library, applies the official creative tag, and returns an image reference for chat previews
|
|
22240
|
+
Publishing uploads the image to the Company image library, applies the official creative tag, and returns an image reference for chat previews.
|
|
22241
|
+
Full guide: __tooling__/docs/tools/baker/creatives.md`
|
|
22091
22242
|
},
|
|
22092
22243
|
subCommands: {
|
|
22093
22244
|
publish: publishCommand
|
|
@@ -22295,7 +22446,8 @@ This command is READ-ONLY and never reveals secret values. Author a Form's struc
|
|
|
22295
22446
|
Examples:
|
|
22296
22447
|
baker flows list # every Form + how many confidential fields still need setup
|
|
22297
22448
|
baker flows show contact # one Form's confidential fields and their status
|
|
22298
|
-
baker flows show contact --full
|
|
22449
|
+
baker flows show contact --full
|
|
22450
|
+
Full guide: __tooling__/docs/tools/baker/flows.md`
|
|
22299
22451
|
},
|
|
22300
22452
|
subCommands: {
|
|
22301
22453
|
list: listCommand6,
|
|
@@ -22704,7 +22856,8 @@ Examples:
|
|
|
22704
22856
|
baker ga4 audit \u2014 full property health check
|
|
22705
22857
|
baker ga4 query --preset tracking-health \u2014 compare GA4 vs GAds data
|
|
22706
22858
|
baker ga4 query --preset lp-performance --days 14 \u2014 landing page UX audit
|
|
22707
|
-
baker ga4 query --dimensions "date" --metrics "sessions" --days 7 \u2014 free-form query
|
|
22859
|
+
baker ga4 query --dimensions "date" --metrics "sessions" --days 7 \u2014 free-form query
|
|
22860
|
+
Full guide: __tooling__/docs/tools/baker/ga4.md`
|
|
22708
22861
|
},
|
|
22709
22862
|
subCommands: {
|
|
22710
22863
|
properties: propertiesCommand,
|
|
@@ -23113,7 +23266,8 @@ Examples:
|
|
|
23113
23266
|
baker gsc query --preset cannibalization \u2014 find PPC-SEO overlap
|
|
23114
23267
|
baker gsc query --preset brand-halo --brand "Acme" --days 90 \u2014 brand search trends
|
|
23115
23268
|
baker gsc query --dimensions "query,page" --days 28 \u2014 free-form query
|
|
23116
|
-
baker gsc sitemaps \u2014 check sitemap health
|
|
23269
|
+
baker gsc sitemaps \u2014 check sitemap health
|
|
23270
|
+
Full guide: __tooling__/docs/tools/baker/gsc.md`
|
|
23117
23271
|
},
|
|
23118
23272
|
subCommands: {
|
|
23119
23273
|
sites: sitesCommand,
|
|
@@ -23227,7 +23381,8 @@ var listCommand7 = defineCommand108({
|
|
|
23227
23381
|
var historyCommand = defineCommand108({
|
|
23228
23382
|
meta: {
|
|
23229
23383
|
name: "history",
|
|
23230
|
-
description:
|
|
23384
|
+
description: `Unified account history (audit log): what changed, who did it, and when.
|
|
23385
|
+
Full guide: __tooling__/docs/tools/baker/history.md`
|
|
23231
23386
|
},
|
|
23232
23387
|
subCommands: { list: listCommand7 }
|
|
23233
23388
|
});
|
|
@@ -25825,7 +25980,8 @@ Taxonomy:
|
|
|
25825
25980
|
baker images tags List available image tag names (defaults + company custom tags)
|
|
25826
25981
|
|
|
25827
25982
|
Paid transforms (run on the Convex backend, cost-tracked):
|
|
25828
|
-
baker images upscale <imageId> Real-ESRGAN super-resolution ($0.05/image, waits for completion)
|
|
25983
|
+
baker images upscale <imageId> Real-ESRGAN super-resolution ($0.05/image, waits for completion)
|
|
25984
|
+
Full guide: __tooling__/docs/tools/baker/images.md`
|
|
25829
25985
|
},
|
|
25830
25986
|
subCommands: {
|
|
25831
25987
|
get: getCommand2,
|
|
@@ -25996,7 +26152,8 @@ Start here:
|
|
|
25996
26152
|
Examples:
|
|
25997
26153
|
baker mcp add --name weather --url https://mcp.example.com/mcp
|
|
25998
26154
|
baker mcp add --name acme --url https://acme.dev/mcp --header "Authorization: Bearer sk-\u2026"
|
|
25999
|
-
baker mcp remove --name weather
|
|
26155
|
+
baker mcp remove --name weather
|
|
26156
|
+
Full guide: __tooling__/docs/tools/baker/mcp.md`
|
|
26000
26157
|
},
|
|
26001
26158
|
subCommands: {
|
|
26002
26159
|
list: listCommand8,
|
|
@@ -26870,7 +27027,8 @@ Examples:
|
|
|
26870
27027
|
baker research advertisers "running shoes"
|
|
26871
27028
|
baker research intent "buy running shoes,best running shoes 2026"
|
|
26872
27029
|
baker research keywords-for-site "competitor.com"
|
|
26873
|
-
baker research keyword-gap "them.com" "us.com"
|
|
27030
|
+
baker research keyword-gap "them.com" "us.com"
|
|
27031
|
+
Full guide: __tooling__/docs/tools/baker/research.md`
|
|
26874
27032
|
},
|
|
26875
27033
|
subCommands: {
|
|
26876
27034
|
web: webCommand,
|
|
@@ -27317,7 +27475,8 @@ Examples:
|
|
|
27317
27475
|
baker scheduled-actions create --name "Weekly report" --description "Prepare weekly report" --cron "0 9 * * MON"
|
|
27318
27476
|
baker scheduled-actions update <id-or-temp_sched_id> --enabled false
|
|
27319
27477
|
baker scheduled-actions delete <id-or-temp_sched_id>
|
|
27320
|
-
baker scheduled-actions trigger <id
|
|
27478
|
+
baker scheduled-actions trigger <id>
|
|
27479
|
+
Full guide: __tooling__/docs/tools/baker/scheduled-actions.md`
|
|
27321
27480
|
},
|
|
27322
27481
|
subCommands: {
|
|
27323
27482
|
list: listCommand9,
|
|
@@ -27353,11 +27512,17 @@ var schemaCommand = defineCommand152({
|
|
|
27353
27512
|
const schema = getSchema(commandName);
|
|
27354
27513
|
if (!schema) {
|
|
27355
27514
|
const available = listSchemas();
|
|
27515
|
+
const segments = commandName.split(".");
|
|
27516
|
+
const family = segments[0] === "ads" && segments[1] ? `ads-${segments[1]}` : segments[0];
|
|
27356
27517
|
writeJson({
|
|
27357
27518
|
ok: false,
|
|
27358
27519
|
error: {
|
|
27359
27520
|
code: "NOT_FOUND",
|
|
27360
|
-
message: `Schema "${commandName}" not found. Available: ${available.join(", ")}
|
|
27521
|
+
message: `Schema "${commandName}" not found. Available: ${available.join(", ")}`,
|
|
27522
|
+
fix: {
|
|
27523
|
+
action: `Run the command with --help for exact args, and read __tooling__/docs/tools/baker/${family}.md`,
|
|
27524
|
+
explanation: "Not every command registers a schema; --help and the family doc are the ground truth for those."
|
|
27525
|
+
}
|
|
27361
27526
|
}
|
|
27362
27527
|
});
|
|
27363
27528
|
process.exit(1);
|
|
@@ -27474,7 +27639,8 @@ Refs: \`baker tags list\` prints each tag's ref \u2014 a real tag id, or tag_tem
|
|
|
27474
27639
|
|
|
27475
27640
|
Examples:
|
|
27476
27641
|
baker tags list # production + staged, full readable config + secret status
|
|
27477
|
-
baker tags draft # review the staged changes awaiting publish
|
|
27642
|
+
baker tags draft # review the staged changes awaiting publish
|
|
27643
|
+
Full guide: __tooling__/docs/tools/baker/tags.md`
|
|
27478
27644
|
},
|
|
27479
27645
|
subCommands: {
|
|
27480
27646
|
list: listCommand10,
|
|
@@ -27757,7 +27923,8 @@ Examples:
|
|
|
27757
27923
|
baker testimonials search "value for money" --rating-min 4
|
|
27758
27924
|
baker testimonials get <testimonial-id>
|
|
27759
27925
|
baker testimonials list --source google --sentiment positive
|
|
27760
|
-
baker testimonials tags
|
|
27926
|
+
baker testimonials tags
|
|
27927
|
+
Full guide: __tooling__/docs/tools/baker/testimonials.md`
|
|
27761
27928
|
},
|
|
27762
27929
|
subCommands: {
|
|
27763
27930
|
get: getCommand4,
|
|
@@ -28032,7 +28199,8 @@ Examples:
|
|
|
28032
28199
|
baker videos get <video-id>
|
|
28033
28200
|
baker videos upload ./demo.mp4
|
|
28034
28201
|
baker videos delete <video-id> --dry-run
|
|
28035
|
-
baker videos tags
|
|
28202
|
+
baker videos tags
|
|
28203
|
+
Full guide: __tooling__/docs/tools/baker/videos.md`
|
|
28036
28204
|
},
|
|
28037
28205
|
subCommands: {
|
|
28038
28206
|
get: getCommand5,
|
|
@@ -29131,7 +29299,8 @@ Examples:
|
|
|
29131
29299
|
baker winning-ads winners adv_123 --top 15 --output md
|
|
29132
29300
|
baker winning-ads hooks --platform meta --awareness problem_aware --industry saas --output md
|
|
29133
29301
|
baker winning-ads search "fintech onboarding" --hook-archetype callout --winner-category winner --output md
|
|
29134
|
-
baker winning-ads patterns --winners a_1,a_2 --duds a_9,a_8 --output md
|
|
29302
|
+
baker winning-ads patterns --winners a_1,a_2 --duds a_9,a_8 --output md
|
|
29303
|
+
Full guide: __tooling__/docs/tools/baker/winning-ads.md`
|
|
29135
29304
|
},
|
|
29136
29305
|
subCommands: {
|
|
29137
29306
|
search: searchCommand4,
|