@koda-sl/baker-cli 0.160.0 → 0.161.0

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/cli.js CHANGED
@@ -77,7 +77,7 @@ import {
77
77
  } from "./chunk-RK67WL4O.js";
78
78
 
79
79
  // src/cli.ts
80
- import { defineCommand as defineCommand186, runMain } from "citty";
80
+ import { defineCommand as defineCommand187, runMain } from "citty";
81
81
 
82
82
  // src/commands/actions/index.ts
83
83
  import { defineCommand as defineCommand18 } from "citty";
@@ -4258,7 +4258,7 @@ Full guide: __tooling__/docs/tools/baker/actions.md`
4258
4258
  });
4259
4259
 
4260
4260
  // src/commands/ads/index.ts
4261
- import { defineCommand as defineCommand85 } from "citty";
4261
+ import { defineCommand as defineCommand86 } from "citty";
4262
4262
 
4263
4263
  // src/commands/ads/google/index.ts
4264
4264
  import { defineCommand as defineCommand31 } from "citty";
@@ -4798,7 +4798,7 @@ var adTextAssetSchema = z13.object({
4798
4798
  text: z13.string().min(1),
4799
4799
  pinnedField: z13.enum(PINNED_FIELDS).optional()
4800
4800
  });
4801
- var responsiveSearchAdSchema = z13.object({
4801
+ var responsiveSearchAdSchema = z13.strictObject({
4802
4802
  format: z13.literal("responsiveSearch"),
4803
4803
  headlines: z13.array(
4804
4804
  adTextAssetSchema.refine(
@@ -4816,7 +4816,7 @@ var responsiveSearchAdSchema = z13.object({
4816
4816
  path2: z13.string().max(GOOGLE_ADS_LIMITS.responsiveSearchAd.pathMax).optional(),
4817
4817
  finalUrls: z13.array(httpsUrlSchema2).min(1)
4818
4818
  });
4819
- var responsiveDisplayAdSchema = z13.object({
4819
+ var responsiveDisplayAdSchema = z13.strictObject({
4820
4820
  format: z13.literal("responsiveDisplay"),
4821
4821
  headlines: z13.array(z13.object({ text: z13.string().min(1).max(GOOGLE_ADS_LIMITS.responsiveDisplayAd.headlineTextMax) })).min(1).max(5),
4822
4822
  longHeadline: z13.object({ text: z13.string().min(1).max(GOOGLE_ADS_LIMITS.responsiveDisplayAd.longHeadlineTextMax) }),
@@ -4830,7 +4830,7 @@ var responsiveDisplayAdSchema = z13.object({
4830
4830
  logoImageAssets: z13.array(refSchema).optional(),
4831
4831
  finalUrls: z13.array(httpsUrlSchema2).min(1)
4832
4832
  });
4833
- var callAdSchema = z13.object({
4833
+ var callAdSchema = z13.strictObject({
4834
4834
  format: z13.literal("call"),
4835
4835
  countryCode: z13.string().length(2),
4836
4836
  phoneNumber: z13.string().min(3),
@@ -4841,22 +4841,26 @@ var callAdSchema = z13.object({
4841
4841
  businessName: z13.string().min(1).max(25),
4842
4842
  finalUrls: z13.array(httpsUrlSchema2).min(1)
4843
4843
  });
4844
- var appAdSchema = z13.object({
4844
+ var appAdSchema = z13.strictObject({
4845
4845
  format: z13.literal("app"),
4846
4846
  headlines: z13.array(z13.object({ text: z13.string().min(1).max(30) })).min(1),
4847
4847
  descriptions: z13.array(z13.object({ text: z13.string().min(1).max(90) })).min(1),
4848
4848
  // An App campaign ad carries its images on its own content (`AppAdInfo.images`), not as
4849
4849
  // campaign-level asset links — same shape as a responsive display ad's marketing images.
4850
- images: z13.array(refSchema).optional()
4850
+ images: z13.array(refSchema).optional(),
4851
+ // `AppAdInfo.youtube_videos` — an App ad's videos live on its content too. Without this field
4852
+ // there is no way to express "keep these videos on the ad", so a content update that only
4853
+ // restated headlines silently left the ad's videos to whatever the mask happened to omit.
4854
+ youtubeVideos: z13.array(refSchema).optional()
4851
4855
  });
4852
- var videoAdSchema = z13.object({
4856
+ var videoAdSchema = z13.strictObject({
4853
4857
  format: z13.literal("video"),
4854
4858
  // A raw YouTube id is not a publishable Google Ads reference — the video must be staged as
4855
4859
  // its own `google.asset.create` (type: youtubeVideo) first, then referenced here by asset ref.
4856
4860
  videoAssets: z13.array(refSchema).min(1),
4857
4861
  finalUrls: z13.array(httpsUrlSchema2).min(1)
4858
4862
  });
4859
- var demandGenAdSchema = z13.object({
4863
+ var demandGenAdSchema = z13.strictObject({
4860
4864
  format: z13.literal("demandGen"),
4861
4865
  headlines: z13.array(z13.object({ text: z13.string().min(1).max(40) })).min(1).max(5),
4862
4866
  descriptions: z13.array(z13.object({ text: z13.string().min(1).max(90) })).min(1).max(5),
@@ -8839,6 +8843,10 @@ function appContentFromFlags(args, base) {
8839
8843
  if (images) {
8840
8844
  content.images = images;
8841
8845
  }
8846
+ const videos = listFlag(args["video-assets"]);
8847
+ if (videos) {
8848
+ content.youtubeVideos = videos;
8849
+ }
8842
8850
  return content;
8843
8851
  }
8844
8852
  function adContentFromFlags(args, format, fileContent) {
@@ -8881,7 +8889,7 @@ var adContentArgs = {
8881
8889
  "logo-images": { type: "string", description: "Comma-separated logo image asset refs (responsiveDisplay)" },
8882
8890
  "video-assets": {
8883
8891
  type: "string",
8884
- description: `Comma-separated video asset refs (video format) \u2014 stage the YouTube video as an asset first (assets create --file '{"type":"youtubeVideo",\u2026}')`
8892
+ description: `Comma-separated video asset refs (video/app formats) \u2014 stage the YouTube video as an asset first (assets create --file '{"type":"youtubeVideo",\u2026}')`
8885
8893
  },
8886
8894
  "image-assets": { type: "string", description: "Comma-separated image asset refs (demandGen/app)" },
8887
8895
  "square-image-assets": { type: "string", description: "Comma-separated square image asset refs (demandGen)" },
@@ -13078,7 +13086,7 @@ Full guide: __tooling__/docs/tools/baker/ads-linkedin.md`
13078
13086
  });
13079
13087
 
13080
13088
  // src/commands/ads/meta/index.ts
13081
- import { defineCommand as defineCommand67 } from "citty";
13089
+ import { defineCommand as defineCommand68 } from "citty";
13082
13090
 
13083
13091
  // src/commands/ads/meta/account.ts
13084
13092
  import { defineCommand as defineCommand52 } from "citty";
@@ -15364,9 +15372,40 @@ var metaMediaCommand = defineCommand64({
15364
15372
  subCommands: { upload: mediaUploadCommand }
15365
15373
  });
15366
15374
 
15367
- // src/commands/ads/meta/pixels.ts
15375
+ // src/commands/ads/meta/pages.ts
15368
15376
  import { defineCommand as defineCommand65 } from "citty";
15369
- var pixelsCommand = defineCommand65({
15377
+ var pagesCommand = defineCommand65({
15378
+ meta: {
15379
+ name: "pages",
15380
+ description: `List the Facebook Pages the connected user manages. Every Meta ad publishes from a Page, so use this to find the Page id an ad should run from instead of asking the user for it. The 'tasks' field shows what the user can do on each Page (ADVERTISE means it can back ads).
15381
+
15382
+ Examples:
15383
+ baker ads meta pages`
15384
+ },
15385
+ args: {
15386
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
15387
+ output: { type: "string", description: "Output format", default: "json" }
15388
+ },
15389
+ run: async ({ args }) => {
15390
+ try {
15391
+ const params = {};
15392
+ if (args["skip-cache"]) params["skip-cache"] = "true";
15393
+ const data = await apiGet("/api/ads/meta/pages", params);
15394
+ const fmt = csvOrJson(args);
15395
+ if (fmt !== "json") {
15396
+ writeAdsOutput(data, fmt);
15397
+ return;
15398
+ }
15399
+ writeAdsJson({ ok: true, data });
15400
+ } catch (err) {
15401
+ handleMetaError(err);
15402
+ }
15403
+ }
15404
+ });
15405
+
15406
+ // src/commands/ads/meta/pixels.ts
15407
+ import { defineCommand as defineCommand66 } from "citty";
15408
+ var pixelsCommand = defineCommand66({
15370
15409
  meta: {
15371
15410
  name: "pixels",
15372
15411
  description: `List Meta Pixels for an ad account, or fetch firing stats for one pixel.
@@ -15437,7 +15476,7 @@ function emit(data, args) {
15437
15476
 
15438
15477
  // src/commands/ads/meta/preview.ts
15439
15478
  import { writeFileSync as writeFileSync2 } from "fs";
15440
- import { defineCommand as defineCommand66 } from "citty";
15479
+ import { defineCommand as defineCommand67 } from "citty";
15441
15480
  var VALID_AD_FORMATS = [
15442
15481
  "DESKTOP_FEED_STANDARD",
15443
15482
  "MOBILE_FEED_STANDARD",
@@ -15471,7 +15510,7 @@ var VALID_AD_FORMATS = [
15471
15510
  "MARKETPLACE_MOBILE",
15472
15511
  "BIZ_DISCO_FEED_MOBILE"
15473
15512
  ];
15474
- var previewCommand = defineCommand66({
15513
+ var previewCommand = defineCommand67({
15475
15514
  meta: {
15476
15515
  name: "preview",
15477
15516
  description: `Generate a Meta-hosted preview iframe for a creative or ad. Returns iframe HTML which you
@@ -15518,7 +15557,7 @@ Examples:
15518
15557
  });
15519
15558
 
15520
15559
  // src/commands/ads/meta/index.ts
15521
- var metaCommand = defineCommand67({
15560
+ var metaCommand = defineCommand68({
15522
15561
  meta: {
15523
15562
  name: "meta",
15524
15563
  description: `Meta Marketing API \u2014 AI-first command surface (Facebook + Instagram ads).
@@ -15527,6 +15566,7 @@ Discovery:
15527
15566
  baker ads meta accounts \u2014 accounts in this company's connected scope
15528
15567
  baker ads meta accounts --include-all \u2014 every account the token can see
15529
15568
  baker ads meta businesses \u2014 Business Manager IDs
15569
+ baker ads meta pages \u2014 Facebook Pages the user manages (an ad's identity)
15530
15570
 
15531
15571
  Snapshot a running account (default = ACTIVE only):
15532
15572
  baker ads meta campaigns --account-id act_123
@@ -15558,6 +15598,7 @@ Full guide: __tooling__/docs/tools/baker/ads-meta.md`
15558
15598
  accounts: accountsCommand3,
15559
15599
  account: accountCommand2,
15560
15600
  businesses: businessesCommand,
15601
+ pages: pagesCommand,
15561
15602
  campaigns: campaignsCommand3,
15562
15603
  adsets: adsetsCommand,
15563
15604
  ads: adsListCommand,
@@ -15573,10 +15614,10 @@ Full guide: __tooling__/docs/tools/baker/ads-meta.md`
15573
15614
  });
15574
15615
 
15575
15616
  // src/commands/ads/x/index.ts
15576
- import { defineCommand as defineCommand84 } from "citty";
15617
+ import { defineCommand as defineCommand85 } from "citty";
15577
15618
 
15578
15619
  // src/commands/ads/x/accounts.ts
15579
- import { defineCommand as defineCommand68 } from "citty";
15620
+ import { defineCommand as defineCommand69 } from "citty";
15580
15621
  registerSchema({
15581
15622
  command: "ads.x.accounts",
15582
15623
  description: "List all accessible X Ads accounts. Returns accounts with id (base36), name, approval_status, timezone, currency. Run this first to find account IDs for other commands.",
@@ -15605,7 +15646,7 @@ function handleAccountsError2(err) {
15605
15646
  writeAdsJson({ ok: false, error: { code: "NETWORK_ERROR", message: "Unexpected error" } });
15606
15647
  process.exit(1);
15607
15648
  }
15608
- var accountsCommand4 = defineCommand68({
15649
+ var accountsCommand4 = defineCommand69({
15609
15650
  meta: {
15610
15651
  name: "accounts",
15611
15652
  description: `List accessible X Ads accounts. Returns account IDs needed for all other commands.
@@ -15645,7 +15686,7 @@ Examples:
15645
15686
  });
15646
15687
 
15647
15688
  // src/commands/ads/x/active-entities.ts
15648
- import { defineCommand as defineCommand69 } from "citty";
15689
+ import { defineCommand as defineCommand70 } from "citty";
15649
15690
 
15650
15691
  // src/commands/ads/x/error-parser.ts
15651
15692
  function mapXErrorCode(message) {
@@ -15796,7 +15837,7 @@ function parseCsv(v) {
15796
15837
  const parts = v.split(",").map((s) => s.trim()).filter(Boolean);
15797
15838
  return parts.length > 0 ? parts : void 0;
15798
15839
  }
15799
- var activeEntitiesCommand = defineCommand69({
15840
+ var activeEntitiesCommand = defineCommand70({
15800
15841
  meta: {
15801
15842
  name: "active-entities",
15802
15843
  description: `List entities with metric activity in a time range.
@@ -15854,7 +15895,7 @@ Examples:
15854
15895
  });
15855
15896
 
15856
15897
  // src/commands/ads/x/audiences.ts
15857
- import { defineCommand as defineCommand70 } from "citty";
15898
+ import { defineCommand as defineCommand71 } from "citty";
15858
15899
  registerSchema({
15859
15900
  command: "ads.x.audiences",
15860
15901
  description: "List custom audiences for an X Ads account. Returns id, name, audience_size, audience_type, targetable status. Audiences need 100+ active users in the past 90 days to be targetable.",
@@ -15864,7 +15905,7 @@ registerSchema({
15864
15905
  output: { type: "string", description: "Format: json|csv|md", required: false, default: "json" }
15865
15906
  }
15866
15907
  });
15867
- var audiencesCommand4 = defineCommand70({
15908
+ var audiencesCommand4 = defineCommand71({
15868
15909
  meta: {
15869
15910
  name: "audiences",
15870
15911
  description: `List X Ads custom audiences.
@@ -15913,7 +15954,7 @@ Examples:
15913
15954
  });
15914
15955
 
15915
15956
  // src/commands/ads/x/campaigns.ts
15916
- import { defineCommand as defineCommand71 } from "citty";
15957
+ import { defineCommand as defineCommand72 } from "citty";
15917
15958
 
15918
15959
  // src/commands/ads/x/run-list.ts
15919
15960
  function buildCleanParams(opts) {
@@ -15977,7 +16018,7 @@ registerSchema({
15977
16018
  output: { type: "string", description: "Format: json|csv|md", required: false, default: "json" }
15978
16019
  }
15979
16020
  });
15980
- var campaignsCommand4 = defineCommand71({
16021
+ var campaignsCommand4 = defineCommand72({
15981
16022
  meta: {
15982
16023
  name: "campaigns",
15983
16024
  description: `List X Ads campaigns. Returns budget, schedule, funding instrument, status.
@@ -16019,7 +16060,7 @@ Examples:
16019
16060
  });
16020
16061
 
16021
16062
  // src/commands/ads/x/cards.ts
16022
- import { defineCommand as defineCommand72 } from "citty";
16063
+ import { defineCommand as defineCommand73 } from "citty";
16023
16064
  registerSchema({
16024
16065
  command: "ads.x.cards",
16025
16066
  description: "List website cards, video cards, and carousels for an X Ads account.",
@@ -16029,7 +16070,7 @@ registerSchema({
16029
16070
  output: { type: "string", description: "Format: json|csv|md", required: false, default: "json" }
16030
16071
  }
16031
16072
  });
16032
- var cardsCommand = defineCommand72({
16073
+ var cardsCommand = defineCommand73({
16033
16074
  meta: {
16034
16075
  name: "cards",
16035
16076
  description: `List X Ads cards (rich creatives).
@@ -16078,7 +16119,7 @@ Examples:
16078
16119
  });
16079
16120
 
16080
16121
  // src/commands/ads/x/funding.ts
16081
- import { defineCommand as defineCommand73 } from "citty";
16122
+ import { defineCommand as defineCommand74 } from "citty";
16082
16123
  registerSchema({
16083
16124
  command: "ads.x.funding",
16084
16125
  description: "List funding instruments for an X Ads account. Returns id, type, currency, credit_limit_local_micro, funded_amount_local_micro, status. Falls back to BAKER_X_ADS_ACCOUNT_ID env var.",
@@ -16088,7 +16129,7 @@ registerSchema({
16088
16129
  output: { type: "string", description: "Format: json|csv|md", required: false, default: "json" }
16089
16130
  }
16090
16131
  });
16091
- var fundingCommand = defineCommand73({
16132
+ var fundingCommand = defineCommand74({
16092
16133
  meta: {
16093
16134
  name: "funding",
16094
16135
  description: `List funding instruments for an X Ads account.
@@ -16137,7 +16178,7 @@ Examples:
16137
16178
  });
16138
16179
 
16139
16180
  // src/commands/ads/x/line-items.ts
16140
- import { defineCommand as defineCommand74 } from "citty";
16181
+ import { defineCommand as defineCommand75 } from "citty";
16141
16182
  registerSchema({
16142
16183
  command: "ads.x.lineItems",
16143
16184
  description: "List line items (ad groups) for an X Ads account. Returns bid, product_type, objective, placements, schedule. Filter by campaign-ids or line-item-ids (CSV).",
@@ -16149,7 +16190,7 @@ registerSchema({
16149
16190
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
16150
16191
  }
16151
16192
  });
16152
- var lineItemsCommand = defineCommand74({
16193
+ var lineItemsCommand = defineCommand75({
16153
16194
  meta: {
16154
16195
  name: "line-items",
16155
16196
  description: `List X Ads line items (ad groups).
@@ -16190,7 +16231,7 @@ Examples:
16190
16231
  });
16191
16232
 
16192
16233
  // src/commands/ads/x/media.ts
16193
- import { defineCommand as defineCommand75 } from "citty";
16234
+ import { defineCommand as defineCommand76 } from "citty";
16194
16235
  registerSchema({
16195
16236
  command: "ads.x.media",
16196
16237
  description: "List media assets in the X Ads media library (images, GIFs, videos). Filter by media-type (IMAGE, GIF, VIDEO).",
@@ -16201,7 +16242,7 @@ registerSchema({
16201
16242
  output: { type: "string", description: "Format: json|csv|md", required: false, default: "json" }
16202
16243
  }
16203
16244
  });
16204
- var mediaCommand = defineCommand75({
16245
+ var mediaCommand = defineCommand76({
16205
16246
  meta: {
16206
16247
  name: "media",
16207
16248
  description: `List media assets in the X Ads media library.
@@ -16253,7 +16294,7 @@ Examples:
16253
16294
  });
16254
16295
 
16255
16296
  // src/commands/ads/x/promoted-tweets.ts
16256
- import { defineCommand as defineCommand76 } from "citty";
16297
+ import { defineCommand as defineCommand77 } from "citty";
16257
16298
  registerSchema({
16258
16299
  command: "ads.x.promotedTweets",
16259
16300
  description: "List promoted tweets for an X Ads account. Returns id, line_item_id, tweet_id, approval_status. Filter by line-item-ids (CSV).",
@@ -16264,7 +16305,7 @@ registerSchema({
16264
16305
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
16265
16306
  }
16266
16307
  });
16267
- var promotedTweetsCommand = defineCommand76({
16308
+ var promotedTweetsCommand = defineCommand77({
16268
16309
  meta: {
16269
16310
  name: "promoted-tweets",
16270
16311
  description: `List X Ads promoted tweets.
@@ -16318,11 +16359,11 @@ Examples:
16318
16359
  });
16319
16360
 
16320
16361
  // src/commands/ads/x/stats/index.ts
16321
- import { defineCommand as defineCommand81 } from "citty";
16362
+ import { defineCommand as defineCommand82 } from "citty";
16322
16363
 
16323
16364
  // src/commands/ads/x/stats/job.ts
16324
16365
  import { gunzipSync } from "zlib";
16325
- import { defineCommand as defineCommand77 } from "citty";
16366
+ import { defineCommand as defineCommand78 } from "citty";
16326
16367
  var POLL_INTERVAL_MS2 = 1e4;
16327
16368
  var DEADLINE_MS = 12 * 60 * 1e3;
16328
16369
  var RESULT_CACHE_TTL_MS = 6 * 60 * 60 * 1e3;
@@ -16392,7 +16433,7 @@ async function pollUntilDone(accountId, jobId) {
16392
16433
  function buildCacheKey(body) {
16393
16434
  return `stats-job:${JSON.stringify(body)}`;
16394
16435
  }
16395
- var statsJobCommand = defineCommand77({
16436
+ var statsJobCommand = defineCommand78({
16396
16437
  meta: {
16397
16438
  name: "job",
16398
16439
  description: `Async X Ads stats job, sync from the CLI's perspective. Creates \u2192 polls \u2192 downloads \u2192 returns.
@@ -16497,7 +16538,7 @@ For fine-grained control (don't wait, poll yourself), use:
16497
16538
  });
16498
16539
 
16499
16540
  // src/commands/ads/x/stats/job-create.ts
16500
- import { defineCommand as defineCommand78 } from "citty";
16541
+ import { defineCommand as defineCommand79 } from "citty";
16501
16542
  registerSchema({
16502
16543
  command: "ads.x.statsJobCreate",
16503
16544
  description: "Create an asynchronous X Ads stats job (range up to 90 days non-segmented, 45 days segmented). Returns a job id; poll with `stats job-status`. Times must be ISO 8601 hour-aligned.",
@@ -16520,7 +16561,7 @@ function parseCsv3(v) {
16520
16561
  const parts = v.split(",").map((s) => s.trim()).filter(Boolean);
16521
16562
  return parts.length > 0 ? parts : void 0;
16522
16563
  }
16523
- var statsJobCreateCommand = defineCommand78({
16564
+ var statsJobCreateCommand = defineCommand79({
16524
16565
  meta: {
16525
16566
  name: "job-create",
16526
16567
  description: `Create an async X Ads stats job (up to 90 days, supports segmentation).
@@ -16583,7 +16624,7 @@ Examples:
16583
16624
  });
16584
16625
 
16585
16626
  // src/commands/ads/x/stats/job-status.ts
16586
- import { defineCommand as defineCommand79 } from "citty";
16627
+ import { defineCommand as defineCommand80 } from "citty";
16587
16628
  registerSchema({
16588
16629
  command: "ads.x.statsJobStatus",
16589
16630
  description: "Check the status of one or more X Ads stats jobs. Returns status (PROCESSING|SUCCESS|FAILED) and a downloadable url when SUCCESS. Pass --job-id or --job-ids (CSV).",
@@ -16593,7 +16634,7 @@ registerSchema({
16593
16634
  "job-ids": { type: "string", description: "CSV of job IDs", required: false }
16594
16635
  }
16595
16636
  });
16596
- var statsJobStatusCommand = defineCommand79({
16637
+ var statsJobStatusCommand = defineCommand80({
16597
16638
  meta: {
16598
16639
  name: "job-status",
16599
16640
  description: `Poll the status of an async X Ads stats job.
@@ -16634,7 +16675,7 @@ Examples:
16634
16675
  });
16635
16676
 
16636
16677
  // src/commands/ads/x/stats/sync.ts
16637
- import { defineCommand as defineCommand80 } from "citty";
16678
+ import { defineCommand as defineCommand81 } from "citty";
16638
16679
 
16639
16680
  // src/commands/ads/x/presets.ts
16640
16681
  var X_STATS_PRESETS = [
@@ -16793,7 +16834,7 @@ async function runSync(args, q) {
16793
16834
  process.exit(1);
16794
16835
  }
16795
16836
  }
16796
- var statsSyncCommand = defineCommand80({
16837
+ var statsSyncCommand = defineCommand81({
16797
16838
  meta: {
16798
16839
  name: "sync",
16799
16840
  description: `Synchronous X Ads analytics (max 7-day window).
@@ -16836,7 +16877,7 @@ Examples:
16836
16877
  });
16837
16878
 
16838
16879
  // src/commands/ads/x/stats/index.ts
16839
- var statsCommand = defineCommand81({
16880
+ var statsCommand = defineCommand82({
16840
16881
  meta: {
16841
16882
  name: "stats",
16842
16883
  description: `X Ads analytics. Sync (\u22647 days, no segmentation) or async jobs (\u226490 days, segmentable).
@@ -16864,7 +16905,7 @@ Examples:
16864
16905
  });
16865
16906
 
16866
16907
  // src/commands/ads/x/targeting-constants.ts
16867
- import { defineCommand as defineCommand82 } from "citty";
16908
+ import { defineCommand as defineCommand83 } from "citty";
16868
16909
  var ALLOWED_CONSTANTS = [
16869
16910
  "locations",
16870
16911
  "interests",
@@ -16892,7 +16933,7 @@ registerSchema({
16892
16933
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
16893
16934
  }
16894
16935
  });
16895
- var targetingConstantsCommand = defineCommand82({
16936
+ var targetingConstantsCommand = defineCommand83({
16896
16937
  meta: {
16897
16938
  name: "targeting-constants",
16898
16939
  description: `Lookup X Ads targeting constants.
@@ -16942,7 +16983,7 @@ Examples:
16942
16983
  });
16943
16984
 
16944
16985
  // src/commands/ads/x/targeting-criteria.ts
16945
- import { defineCommand as defineCommand83 } from "citty";
16986
+ import { defineCommand as defineCommand84 } from "citty";
16946
16987
  registerSchema({
16947
16988
  command: "ads.x.targetingCriteria",
16948
16989
  description: "List targeting criteria attached to line items in an X Ads account. Returns targeting_type, targeting_value, name, operator_type per criterion. Filter by line-item-ids.",
@@ -16952,7 +16993,7 @@ registerSchema({
16952
16993
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
16953
16994
  }
16954
16995
  });
16955
- var targetingCriteriaCommand = defineCommand83({
16996
+ var targetingCriteriaCommand = defineCommand84({
16956
16997
  meta: {
16957
16998
  name: "targeting-criteria",
16958
16999
  description: `List targeting criteria attached to line items.
@@ -17003,7 +17044,7 @@ Examples:
17003
17044
  });
17004
17045
 
17005
17046
  // src/commands/ads/x/index.ts
17006
- var xCommand = defineCommand84({
17047
+ var xCommand = defineCommand85({
17007
17048
  meta: {
17008
17049
  name: "x",
17009
17050
  description: `X (Twitter) Ads commands. Read campaigns, line items, promoted tweets, creatives, audiences, and analytics.
@@ -17042,7 +17083,7 @@ Full guide: __tooling__/docs/tools/baker/ads-x.md`
17042
17083
  });
17043
17084
 
17044
17085
  // src/commands/ads/index.ts
17045
- var adsCommand2 = defineCommand85({
17086
+ var adsCommand2 = defineCommand86({
17046
17087
  meta: {
17047
17088
  name: "ads",
17048
17089
  description: `Ad platform commands. Each platform exposes its own native command surface \u2014 no forced parity.
@@ -17073,12 +17114,12 @@ Full guides: __tooling__/docs/tools/baker/ads-<platform>.md (google|meta|linkedi
17073
17114
  });
17074
17115
 
17075
17116
  // src/commands/brand/index.ts
17076
- import { defineCommand as defineCommand87 } from "citty";
17117
+ import { defineCommand as defineCommand88 } from "citty";
17077
17118
 
17078
17119
  // src/commands/brand/fonts.ts
17079
17120
  import { mkdir, readFile, writeFile } from "fs/promises";
17080
17121
  import path from "path";
17081
- import { defineCommand as defineCommand86 } from "citty";
17122
+ import { defineCommand as defineCommand87 } from "citty";
17082
17123
 
17083
17124
  // src/engine/brand/fonts.ts
17084
17125
  var GOOGLE_CSS2 = "https://fonts.googleapis.com/css2";
@@ -17250,7 +17291,7 @@ async function readGlobalCss() {
17250
17291
  return "";
17251
17292
  }
17252
17293
  }
17253
- var fontsCheckCommand = defineCommand86({
17294
+ var fontsCheckCommand = defineCommand87({
17254
17295
  meta: {
17255
17296
  name: "check",
17256
17297
  description: "Verify the brand's fonts really exist. For every family/weight src/styles/global.css requests from Google Fonts, ask Google what it actually serves and report anything missing \u2014 a weight nobody serves renders as a synthesized fallback and looks off-brand everywhere."
@@ -17294,7 +17335,7 @@ var fontsCheckCommand = defineCommand86({
17294
17335
  });
17295
17336
  }
17296
17337
  });
17297
- var fontsFetchCommand = defineCommand86({
17338
+ var fontsFetchCommand = defineCommand87({
17298
17339
  meta: {
17299
17340
  name: "fetch",
17300
17341
  description: "Download a Google font into src/brand/fonts/ and print the @font-face block to paste above @theme in src/styles/global.css. Use when a brand font should be self-hosted rather than requested from Google on every page load."
@@ -17376,7 +17417,7 @@ var fontsFetchCommand = defineCommand86({
17376
17417
  });
17377
17418
  }
17378
17419
  });
17379
- var fontsCommand = defineCommand86({
17420
+ var fontsCommand = defineCommand87({
17380
17421
  meta: {
17381
17422
  name: "fonts",
17382
17423
  description: `Verify and self-host the brand's typefaces.
@@ -17394,7 +17435,7 @@ Subcommands:
17394
17435
  });
17395
17436
 
17396
17437
  // src/commands/brand/index.ts
17397
- var brandCommand = defineCommand87({
17438
+ var brandCommand = defineCommand88({
17398
17439
  meta: {
17399
17440
  name: "brand",
17400
17441
  description: `Brand asset verification for src/brand/.
@@ -17410,11 +17451,11 @@ Subcommands:
17410
17451
  });
17411
17452
 
17412
17453
  // src/commands/canvas/index.ts
17413
- import { defineCommand as defineCommand98 } from "citty";
17454
+ import { defineCommand as defineCommand99 } from "citty";
17414
17455
 
17415
17456
  // src/commands/canvas/catalog.ts
17416
- import { defineCommand as defineCommand88 } from "citty";
17417
- var catalogCommand = defineCommand88({
17457
+ import { defineCommand as defineCommand89 } from "citty";
17458
+ var catalogCommand = defineCommand89({
17418
17459
  meta: {
17419
17460
  name: "catalog",
17420
17461
  description: "Print the agent-facing node catalog (JSON Schema). Includes every registered node grouped by category."
@@ -17429,7 +17470,7 @@ var catalogCommand = defineCommand88({
17429
17470
  // src/commands/canvas/critique.ts
17430
17471
  import { readFile as readFile2 } from "fs/promises";
17431
17472
  import path2 from "path";
17432
- import { defineCommand as defineCommand89 } from "citty";
17473
+ import { defineCommand as defineCommand90 } from "citty";
17433
17474
 
17434
17475
  // src/engine/scaffold/lib/critique.ts
17435
17476
  var VIBE_CUE = /\b(light|lighting|golden|moody|warm|cool|tone|grade|contrast|shadow|glow|rim|backlit|neon|soft)\b/i;
@@ -17549,7 +17590,7 @@ function critiqueCanvas(canvas) {
17549
17590
  }
17550
17591
 
17551
17592
  // src/commands/canvas/critique.ts
17552
- var critiqueCommand = defineCommand89({
17593
+ var critiqueCommand = defineCommand90({
17553
17594
  meta: {
17554
17595
  name: "critique",
17555
17596
  description: "Pre-spend creative critic (ADVISORY \u2014 never blocks). Scores a scaffolded creative BEFORE the billed render, so weak spots get fixed for free. A VIDEO creative is scored on hook strength, sound-off first-frame legibility, retention risk, and mechanism clarity; a STATIC ad on baked-text legibility risk, identity grounding, brand-type fidelity, and mechanism clarity. Ground a video hook against `baker winning-ads hooks` for a proven pattern."
@@ -17591,9 +17632,9 @@ import { execFile } from "child_process";
17591
17632
  import { readdir, readFile as readFile3, stat } from "fs/promises";
17592
17633
  import path3 from "path";
17593
17634
  import { promisify } from "util";
17594
- import { defineCommand as defineCommand90 } from "citty";
17635
+ import { defineCommand as defineCommand91 } from "citty";
17595
17636
  var execFileAsync = promisify(execFile);
17596
- var inspectCommand = defineCommand90({
17637
+ var inspectCommand = defineCommand91({
17597
17638
  meta: {
17598
17639
  name: "inspect",
17599
17640
  description: "Dump a one-page summary of a canvas run: per-node duration + cache status, list of output files in the run dir, and optionally three thumbnail frames per video output. Pass either a run_id (resolved against --outputs-dir) or an absolute run directory."
@@ -17701,12 +17742,12 @@ async function probeDuration(filePath) {
17701
17742
 
17702
17743
  // src/commands/canvas/rerun.ts
17703
17744
  import path14 from "path";
17704
- import { defineCommand as defineCommand92 } from "citty";
17745
+ import { defineCommand as defineCommand93 } from "citty";
17705
17746
 
17706
17747
  // src/commands/canvas/run.ts
17707
17748
  import { readFile as readFile10 } from "fs/promises";
17708
17749
  import path13 from "path";
17709
- import { defineCommand as defineCommand91 } from "citty";
17750
+ import { defineCommand as defineCommand92 } from "citty";
17710
17751
 
17711
17752
  // src/commands/canvas/placeholders.ts
17712
17753
  function unsuppliedPlaceholderAssets(canvas) {
@@ -21834,7 +21875,7 @@ async function restoreRunSnapshot(manifest, targetDir, opts = {}) {
21834
21875
  }
21835
21876
 
21836
21877
  // src/commands/canvas/run.ts
21837
- var runCommand = defineCommand91({
21878
+ var runCommand = defineCommand92({
21838
21879
  meta: { name: "run", description: "Validate and execute a canvas JSON file." },
21839
21880
  args: {
21840
21881
  file: { type: "positional", required: true, description: "Path to canvas JSON" },
@@ -22204,7 +22245,7 @@ async function postInitialRunRecord(client, payload) {
22204
22245
 
22205
22246
  // src/commands/canvas/rerun.ts
22206
22247
  var SLUG_PATTERN = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
22207
- var rerunCommand = defineCommand92({
22248
+ var rerunCommand = defineCommand93({
22208
22249
  meta: {
22209
22250
  name: "rerun",
22210
22251
  description: "Re-run a creative's latest recorded canvas. Restores its definition files from run history first, so it works in a fresh workspace that never had the source chat's files \u2014 an interrupted run resumes (in-flight jobs re-attach), a completed one re-renders from the cache."
@@ -22301,7 +22342,7 @@ async function fetchManifest(url) {
22301
22342
  // src/commands/canvas/scaffold-static-ad.ts
22302
22343
  import { access, mkdir as mkdir6, readFile as readFile12, writeFile as writeFile7 } from "fs/promises";
22303
22344
  import path18 from "path";
22304
- import { defineCommand as defineCommand94 } from "citty";
22345
+ import { defineCommand as defineCommand95 } from "citty";
22305
22346
 
22306
22347
  // src/engine/scaffold/staticAd.ts
22307
22348
  import { z as z19 } from "zod";
@@ -22647,7 +22688,7 @@ function isValidScaffoldSlug(slug) {
22647
22688
  // src/commands/canvas/sync-definition.ts
22648
22689
  import { readdir as readdir5, readFile as readFile11, stat as stat3 } from "fs/promises";
22649
22690
  import path17 from "path";
22650
- import { defineCommand as defineCommand93 } from "citty";
22691
+ import { defineCommand as defineCommand94 } from "citty";
22651
22692
 
22652
22693
  // src/commands/canvas/definition-graph.ts
22653
22694
  var MAX_NODES = 300;
@@ -22760,7 +22801,7 @@ async function resolveCanvasPath(inputPath) {
22760
22801
  const chosen = (slug ? canvases.find((name) => name === `${slug}.canvas.json`) : void 0) ?? canvases[0];
22761
22802
  return chosen ? path17.join(dir, chosen) : null;
22762
22803
  }
22763
- var syncDefinitionCommand = defineCommand93({
22804
+ var syncDefinitionCommand = defineCommand94({
22764
22805
  meta: {
22765
22806
  name: "sync-definition",
22766
22807
  description: "Push a creative's current node-graph + input thumbnails to the dashboard without rendering. Runs automatically when you edit a creative's canvas.json or prompt.json."
@@ -22988,7 +23029,7 @@ async function runVisionPasses(canvas) {
22988
23029
  return fail3("read_outputs", e instanceof Error ? e.message : String(e));
22989
23030
  }
22990
23031
  }
22991
- var scaffoldStaticAdCommand = defineCommand94({
23032
+ var scaffoldStaticAdCommand = defineCommand95({
22992
23033
  meta: {
22993
23034
  name: "scaffold-static-ad",
22994
23035
  description: "Turn a source/inspiration image into a runnable static-ad canvas. Runs billed passes \u2014 image_describe (the blueprint, baked to prompt.json as the editable 'prompt'), an AI selection of the image's MAIN identity elements, and a structured global-layout pass (the column/row grid with per-region bounds and text sizes) \u2014 then scaffolds a canvas that wires one [TODO] ingest slot per element (logo/product/subject/badge + brand font) into image_generate. By default it also fans the hero out to the platform's placement ratios (via image_aspect_adapt \u2014 the hero ratio is free, the rest are billed AI recompositions); pass --placements none for a single base ad, or a preset to pick the set. Edit prompt.json and drop the real assets, then `baker canvas run` it."
@@ -23177,7 +23218,7 @@ var scaffoldStaticAdCommand = defineCommand94({
23177
23218
  import { access as access2, cp, mkdir as mkdir7, readFile as readFile15, rm as rm6, writeFile as writeFile8 } from "fs/promises";
23178
23219
  import { tmpdir as tmpdir2 } from "os";
23179
23220
  import path21 from "path";
23180
- import { defineCommand as defineCommand95 } from "citty";
23221
+ import { defineCommand as defineCommand96 } from "citty";
23181
23222
 
23182
23223
  // src/engine/scaffold/lib/model-router.ts
23183
23224
  var SEEDANCE = "bytedance/seedance-2.0";
@@ -23635,7 +23676,7 @@ async function runAnalysisPasses(deconstructCanvas, selectModel) {
23635
23676
  return fail4("deconstruct", e instanceof Error ? e.message : String(e));
23636
23677
  }
23637
23678
  }
23638
- var scaffoldVideoCommand = defineCommand95({
23679
+ var scaffoldVideoCommand = defineCommand96({
23639
23680
  meta: {
23640
23681
  name: "scaffold-video",
23641
23682
  description: "Turn a reference video into a runnable reproduction canvas in one command. Runs billed passes \u2014 video_deconstruct (the full scene-by-scene blueprint + transcript, baked to a split, editable blueprint: a global prompt.json plus one small scenes/sNN.json per scene) and an AI selection of the video's RECURRING identity elements (person/animal/product/logo) \u2014 then scaffolds a pipeline where every scene boundary is a static-ad-grade frame (the blueprint as target_blueprint, a reference legend, the real frame as anchor) and each recurring element gets ONE shared [TODO] ingest slot wired into every frame it appears in. The clips feed Seedance an ultra-detailed motion brief (action, camera, dialogue, transcript). Edit a scene's scenes/sNN.json (or prompt.json for global cast/palette/brand), drop the real source images, then `baker canvas run`."
@@ -23945,7 +23986,7 @@ var scaffoldVideoCommand = defineCommand95({
23945
23986
  // src/commands/canvas/set-prompt.ts
23946
23987
  import { readFile as readFile16, writeFile as writeFile9 } from "fs/promises";
23947
23988
  import path22 from "path";
23948
- import { defineCommand as defineCommand96 } from "citty";
23989
+ import { defineCommand as defineCommand97 } from "citty";
23949
23990
  function setNodePrompt(canvas, nodeId, text) {
23950
23991
  const nodes = canvas?.nodes;
23951
23992
  if (!Array.isArray(nodes)) throw new Error("canvas has no nodes array");
@@ -23960,7 +24001,7 @@ function setNodePrompt(canvas, nodeId, text) {
23960
24001
  newNodes[idx] = newNode;
23961
24002
  return { ...canvas, nodes: newNodes };
23962
24003
  }
23963
- var setPromptCommand = defineCommand96({
24004
+ var setPromptCommand = defineCommand97({
23964
24005
  meta: {
23965
24006
  name: "set-prompt",
23966
24007
  description: "Safely set a node's params.prompt (a frame description, motion prompt, etc.) without hand-editing the JSON. Prefer --text-file for multi-line/accented copy \u2014 it preserves UTF-8 exactly, unlike shell-quoted jq."
@@ -24020,8 +24061,8 @@ var setPromptCommand = defineCommand96({
24020
24061
  // src/commands/canvas/validate.ts
24021
24062
  import { readFile as readFile17 } from "fs/promises";
24022
24063
  import path23 from "path";
24023
- import { defineCommand as defineCommand97 } from "citty";
24024
- var validateCommand = defineCommand97({
24064
+ import { defineCommand as defineCommand98 } from "citty";
24065
+ var validateCommand = defineCommand98({
24025
24066
  meta: {
24026
24067
  name: "validate",
24027
24068
  description: "Validate a canvas JSON file (no execution). Includes a per-node cost preview and runs each node's deep validators (composition meta checks for hyperframe_render/_snapshot)."
@@ -24091,7 +24132,7 @@ var validateCommand = defineCommand97({
24091
24132
  });
24092
24133
 
24093
24134
  // src/commands/canvas/index.ts
24094
- var canvasCommand = defineCommand98({
24135
+ var canvasCommand = defineCommand99({
24095
24136
  meta: {
24096
24137
  name: "canvas",
24097
24138
  description: `Run Baker creative canvas JSON files locally. Local nodes execute in-process; remote nodes POST to the Convex backend gateway.
@@ -24125,7 +24166,7 @@ Full guide: __tooling__/docs/tools/baker/canvas.md`
24125
24166
  });
24126
24167
 
24127
24168
  // src/commands/chats/index.ts
24128
- import { defineCommand as defineCommand99 } from "citty";
24169
+ import { defineCommand as defineCommand100 } from "citty";
24129
24170
  var STATUS_GROUPS = ["active", "archived", "all"];
24130
24171
  var REPO_SURFACES = ["knowledge", "company", "brand", "landings", "flows", "creatives"];
24131
24172
  function parseBoundedInt(raw, name, min, max) {
@@ -24147,7 +24188,7 @@ registerSchema({
24147
24188
  full: { type: "boolean", description: "Include each Session's full change list", required: false, default: false }
24148
24189
  }
24149
24190
  });
24150
- var listCommand10 = defineCommand99({
24191
+ var listCommand10 = defineCommand100({
24151
24192
  meta: { name: "list", description: "List other Sessions on this account, newest first." },
24152
24193
  args: {
24153
24194
  status: { type: "string", description: "Filter: active|archived|all (default: all)", required: false },
@@ -24202,7 +24243,7 @@ registerSchema({
24202
24243
  }
24203
24244
  }
24204
24245
  });
24205
- var viewCommand = defineCommand99({
24246
+ var viewCommand = defineCommand100({
24206
24247
  meta: {
24207
24248
  name: "view",
24208
24249
  description: "Inspect one Session's full effects \u2014 git content + actions/tags/ads, kickoff, commits."
@@ -24246,7 +24287,7 @@ registerSchema({
24246
24287
  }
24247
24288
  }
24248
24289
  });
24249
- var transcriptCommand = defineCommand99({
24290
+ var transcriptCommand = defineCommand100({
24250
24291
  meta: { name: "transcript", description: "Read another Session's conversation." },
24251
24292
  args: {
24252
24293
  id: { type: "positional", description: "The Session id", required: true },
@@ -24298,7 +24339,7 @@ registerSchema({
24298
24339
  }
24299
24340
  }
24300
24341
  });
24301
- var diffCommand = defineCommand99({
24342
+ var diffCommand = defineCommand100({
24302
24343
  meta: { name: "diff", description: "See a published Session's real file-level changes." },
24303
24344
  args: {
24304
24345
  id: { type: "positional", description: "The Session id", required: true },
@@ -24342,7 +24383,7 @@ var diffCommand = defineCommand99({
24342
24383
  }
24343
24384
  }
24344
24385
  });
24345
- var chatsCommand = defineCommand99({
24386
+ var chatsCommand = defineCommand100({
24346
24387
  meta: {
24347
24388
  name: "chats",
24348
24389
  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.
@@ -24357,10 +24398,10 @@ Full guide: __tooling__/docs/tools/baker/chats.md`
24357
24398
  });
24358
24399
 
24359
24400
  // src/commands/creatives/index.ts
24360
- import { defineCommand as defineCommand101 } from "citty";
24401
+ import { defineCommand as defineCommand102 } from "citty";
24361
24402
 
24362
24403
  // src/commands/creatives/publish.ts
24363
- import { defineCommand as defineCommand100 } from "citty";
24404
+ import { defineCommand as defineCommand101 } from "citty";
24364
24405
 
24365
24406
  // src/commands/images/api.ts
24366
24407
  import { readFile as readFile18 } from "fs/promises";
@@ -24504,7 +24545,7 @@ async function publishCreative(args, deps = defaultImageApiDeps) {
24504
24545
  chatId: chatIdFromEnv()
24505
24546
  });
24506
24547
  }
24507
- var publishCommand = defineCommand100({
24548
+ var publishCommand = defineCommand101({
24508
24549
  meta: {
24509
24550
  name: "publish",
24510
24551
  description: "Publish a final static creative image to Baker Creatives and print the creative reference JSON."
@@ -24562,7 +24603,7 @@ var publishCommand = defineCommand100({
24562
24603
  });
24563
24604
 
24564
24605
  // src/commands/creatives/index.ts
24565
- var creativesCommand3 = defineCommand101({
24606
+ var creativesCommand3 = defineCommand102({
24566
24607
  meta: {
24567
24608
  name: "creatives",
24568
24609
  description: `Publish static ad creatives as first-class Baker outputs.
@@ -24579,7 +24620,7 @@ Full guide: __tooling__/docs/tools/baker/creatives.md`
24579
24620
  });
24580
24621
 
24581
24622
  // src/commands/flows/index.ts
24582
- import { defineCommand as defineCommand102 } from "citty";
24623
+ import { defineCommand as defineCommand103 } from "citty";
24583
24624
 
24584
24625
  // src/commands/flows/shared.ts
24585
24626
  import { existsSync as existsSync4, readdirSync as readdirSync2, readFileSync as readFileSync9 } from "fs";
@@ -24734,7 +24775,7 @@ function displayName(slug) {
24734
24775
  const name = tree.displayName;
24735
24776
  return typeof name === "string" && name.trim() ? name.trim() : slug;
24736
24777
  }
24737
- var listCommand11 = defineCommand102({
24778
+ var listCommand11 = defineCommand103({
24738
24779
  meta: {
24739
24780
  name: "list",
24740
24781
  description: "List Forms in this workspace with the count of confidential fields still needing setup. Example: baker flows list"
@@ -24748,7 +24789,7 @@ var listCommand11 = defineCommand102({
24748
24789
  writeJson({ ok: true, data: { flows } });
24749
24790
  }
24750
24791
  });
24751
- var showCommand2 = defineCommand102({
24792
+ var showCommand2 = defineCommand103({
24752
24793
  meta: {
24753
24794
  name: "show",
24754
24795
  description: "Show a Form's confidential fields and their configuration status (never secret values). Example: baker flows show contact"
@@ -24769,7 +24810,7 @@ var showCommand2 = defineCommand102({
24769
24810
  writeJson({ ok: true, data: response });
24770
24811
  }
24771
24812
  });
24772
- var flowsCommand = defineCommand102({
24813
+ var flowsCommand = defineCommand103({
24773
24814
  meta: {
24774
24815
  name: "flows",
24775
24816
  description: `Read this workspace's Forms (flows) and the configuration status of their confidential fields \u2014 connection secrets, OAuth connections, and third-party field definitions (HubSpot, Calendly, HighLevel, SavvyCal).
@@ -24793,10 +24834,10 @@ Full guide: __tooling__/docs/tools/baker/flows.md`
24793
24834
  });
24794
24835
 
24795
24836
  // src/commands/ga4/index.ts
24796
- import { defineCommand as defineCommand106 } from "citty";
24837
+ import { defineCommand as defineCommand107 } from "citty";
24797
24838
 
24798
24839
  // src/commands/ga4/audit.ts
24799
- import { defineCommand as defineCommand103 } from "citty";
24840
+ import { defineCommand as defineCommand104 } from "citty";
24800
24841
 
24801
24842
  // src/commands/ga4/resolve.ts
24802
24843
  async function fetchProperties(useCache = true) {
@@ -24862,7 +24903,7 @@ registerSchema({
24862
24903
  "no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
24863
24904
  }
24864
24905
  });
24865
- var auditCommand2 = defineCommand103({
24906
+ var auditCommand2 = defineCommand104({
24866
24907
  meta: {
24867
24908
  name: "audit",
24868
24909
  description: `Run all GA4 admin health checks. Returns property config with playbook warnings.
@@ -24917,7 +24958,7 @@ Examples:
24917
24958
  });
24918
24959
 
24919
24960
  // src/commands/ga4/properties.ts
24920
- import { defineCommand as defineCommand104 } from "citty";
24961
+ import { defineCommand as defineCommand105 } from "citty";
24921
24962
  registerSchema({
24922
24963
  command: "ga4.properties",
24923
24964
  description: "List all accessible GA4 properties. Returns property IDs needed for query and audit commands. Run this first to find property IDs.",
@@ -24925,7 +24966,7 @@ registerSchema({
24925
24966
  "no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
24926
24967
  }
24927
24968
  });
24928
- var propertiesCommand = defineCommand104({
24969
+ var propertiesCommand = defineCommand105({
24929
24970
  meta: {
24930
24971
  name: "properties",
24931
24972
  description: `List accessible GA4 properties.
@@ -24975,7 +25016,7 @@ Examples:
24975
25016
  // src/commands/ga4/query.ts
24976
25017
  import { appendFileSync as appendFileSync2, existsSync as existsSync5, readFileSync as readFileSync10, writeFileSync as writeFileSync3 } from "fs";
24977
25018
  import { resolve as resolve2 } from "path";
24978
- import { defineCommand as defineCommand105 } from "citty";
25019
+ import { defineCommand as defineCommand106 } from "citty";
24979
25020
 
24980
25021
  // src/commands/ga4/presets.ts
24981
25022
  var GA4_PRESETS = [
@@ -25110,7 +25151,7 @@ function handleError(err) {
25110
25151
  });
25111
25152
  process.exit(1);
25112
25153
  }
25113
- var queryCommand2 = defineCommand105({
25154
+ var queryCommand2 = defineCommand106({
25114
25155
  meta: {
25115
25156
  name: "query",
25116
25157
  description: `Run GA4 Data API reports. Preset-first with free-form escape hatch.
@@ -25181,7 +25222,7 @@ Free-form (escape hatch):
25181
25222
  });
25182
25223
 
25183
25224
  // src/commands/ga4/index.ts
25184
- var ga4Command = defineCommand106({
25225
+ var ga4Command = defineCommand107({
25185
25226
  meta: {
25186
25227
  name: "ga4",
25187
25228
  description: `Google Analytics 4 commands. Audit property config, run playbook-aligned reports.
@@ -25205,12 +25246,12 @@ Full guide: __tooling__/docs/tools/baker/ga4.md`
25205
25246
  });
25206
25247
 
25207
25248
  // src/commands/gsc/index.ts
25208
- import { defineCommand as defineCommand110 } from "citty";
25249
+ import { defineCommand as defineCommand111 } from "citty";
25209
25250
 
25210
25251
  // src/commands/gsc/query.ts
25211
25252
  import { appendFileSync as appendFileSync3, existsSync as existsSync6, readFileSync as readFileSync11, writeFileSync as writeFileSync4 } from "fs";
25212
25253
  import { resolve as resolve3 } from "path";
25213
- import { defineCommand as defineCommand107 } from "citty";
25254
+ import { defineCommand as defineCommand108 } from "citty";
25214
25255
 
25215
25256
  // src/commands/gsc/presets.ts
25216
25257
  var GSC_PRESETS = [
@@ -25404,7 +25445,7 @@ function handleError2(err) {
25404
25445
  });
25405
25446
  process.exit(1);
25406
25447
  }
25407
- var queryCommand3 = defineCommand107({
25448
+ var queryCommand3 = defineCommand108({
25408
25449
  meta: {
25409
25450
  name: "query",
25410
25451
  description: `Run GSC Search Analytics queries. Preset-first with free-form escape hatch.
@@ -25482,7 +25523,7 @@ Free-form (escape hatch):
25482
25523
  });
25483
25524
 
25484
25525
  // src/commands/gsc/sitemaps.ts
25485
- import { defineCommand as defineCommand108 } from "citty";
25526
+ import { defineCommand as defineCommand109 } from "citty";
25486
25527
  registerSchema({
25487
25528
  command: "gsc.sitemaps",
25488
25529
  description: "List sitemaps for a Search Console site. Check sitemap health and errors.",
@@ -25491,7 +25532,7 @@ registerSchema({
25491
25532
  "no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
25492
25533
  }
25493
25534
  });
25494
- var sitemapsCommand = defineCommand108({
25535
+ var sitemapsCommand = defineCommand109({
25495
25536
  meta: {
25496
25537
  name: "sitemaps",
25497
25538
  description: `List sitemaps for a site. Check health and errors.
@@ -25544,7 +25585,7 @@ Examples:
25544
25585
  });
25545
25586
 
25546
25587
  // src/commands/gsc/sites.ts
25547
- import { defineCommand as defineCommand109 } from "citty";
25588
+ import { defineCommand as defineCommand110 } from "citty";
25548
25589
  registerSchema({
25549
25590
  command: "gsc.sites",
25550
25591
  description: "List all verified Google Search Console sites. Returns site URLs needed for query and sitemaps commands.",
@@ -25552,7 +25593,7 @@ registerSchema({
25552
25593
  "no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
25553
25594
  }
25554
25595
  });
25555
- var sitesCommand = defineCommand109({
25596
+ var sitesCommand = defineCommand110({
25556
25597
  meta: {
25557
25598
  name: "sites",
25558
25599
  description: `List verified Search Console sites.
@@ -25600,7 +25641,7 @@ Examples:
25600
25641
  });
25601
25642
 
25602
25643
  // src/commands/gsc/index.ts
25603
- var gscCommand = defineCommand110({
25644
+ var gscCommand = defineCommand111({
25604
25645
  meta: {
25605
25646
  name: "gsc",
25606
25647
  description: `Google Search Console commands. PPC-SEO arbitrage, brand halo analysis, negative keyword discovery.
@@ -25624,7 +25665,7 @@ Full guide: __tooling__/docs/tools/baker/gsc.md`
25624
25665
  });
25625
25666
 
25626
25667
  // src/commands/history/index.ts
25627
- import { defineCommand as defineCommand111 } from "citty";
25668
+ import { defineCommand as defineCommand112 } from "citty";
25628
25669
  registerSchema({
25629
25670
  command: "history.list",
25630
25671
  description: "Start here: unified account history (audit log) \u2014 everything that changed on this account, newest first: publishes, chat lifecycle, backlog actions, team changes, setup links, tags, schedules, ad-platform writes, followed advertisers, media, creatives, reports, domains, and integrations. Use it to see what happened recently before planning work. Compact by default; add --full for raw metadata per entry.",
@@ -25679,7 +25720,7 @@ function parseBoundedInt2(raw, name, min, max) {
25679
25720
  }
25680
25721
  return value;
25681
25722
  }
25682
- var listCommand12 = defineCommand111({
25723
+ var listCommand12 = defineCommand112({
25683
25724
  meta: {
25684
25725
  name: "list",
25685
25726
  description: "List recent account changes (unified audit log), newest first."
@@ -25725,7 +25766,7 @@ var listCommand12 = defineCommand111({
25725
25766
  }
25726
25767
  }
25727
25768
  });
25728
- var historyCommand = defineCommand111({
25769
+ var historyCommand = defineCommand112({
25729
25770
  meta: {
25730
25771
  name: "history",
25731
25772
  description: `Unified account history (audit log): what changed, who did it, and when.
@@ -25735,7 +25776,7 @@ Full guide: __tooling__/docs/tools/baker/history.md`
25735
25776
  });
25736
25777
 
25737
25778
  // src/commands/hubspot/index.ts
25738
- import { defineCommand as defineCommand112 } from "citty";
25779
+ import { defineCommand as defineCommand113 } from "citty";
25739
25780
  var EMBED_TYPES = ["legacy", "v4", "unknown"];
25740
25781
  function failNotConnected(err) {
25741
25782
  if (err instanceof ApiError && err.code === "NOT_FOUND" && err.message.includes("No HubSpot account is connected")) {
@@ -25817,7 +25858,7 @@ registerSchema({
25817
25858
  }
25818
25859
  }
25819
25860
  });
25820
- var formsListCommand = defineCommand112({
25861
+ var formsListCommand = defineCommand113({
25821
25862
  meta: {
25822
25863
  name: "list",
25823
25864
  description: "List HubSpot forms with embed type and post-submit action. Example: baker hubspot forms list --redirecting-only"
@@ -25862,7 +25903,7 @@ var formsListCommand = defineCommand112({
25862
25903
  }
25863
25904
  }
25864
25905
  });
25865
- var formsViewCommand = defineCommand112({
25906
+ var formsViewCommand = defineCommand113({
25866
25907
  meta: {
25867
25908
  name: "view",
25868
25909
  description: "Show one HubSpot form's fields and configuration. Example: baker hubspot forms view 1a2b3c"
@@ -25914,7 +25955,7 @@ var formsViewCommand = defineCommand112({
25914
25955
  }
25915
25956
  }
25916
25957
  });
25917
- var meetingsListCommand = defineCommand112({
25958
+ var meetingsListCommand = defineCommand113({
25918
25959
  meta: {
25919
25960
  name: "list",
25920
25961
  description: "List HubSpot meeting links (calendars). Example: baker hubspot meetings list"
@@ -25956,7 +25997,7 @@ var meetingsListCommand = defineCommand112({
25956
25997
  }
25957
25998
  }
25958
25999
  });
25959
- var meetingsViewCommand = defineCommand112({
26000
+ var meetingsViewCommand = defineCommand113({
25960
26001
  meta: {
25961
26002
  name: "view",
25962
26003
  description: "Show one HubSpot meeting link's booking fields. Example: baker hubspot meetings view discovery-call"
@@ -26000,15 +26041,15 @@ var meetingsViewCommand = defineCommand112({
26000
26041
  }
26001
26042
  }
26002
26043
  });
26003
- var formsCommand = defineCommand112({
26044
+ var formsCommand = defineCommand113({
26004
26045
  meta: { name: "forms", description: "HubSpot forms on the connected account." },
26005
26046
  subCommands: { list: formsListCommand, view: formsViewCommand }
26006
26047
  });
26007
- var meetingsCommand = defineCommand112({
26048
+ var meetingsCommand = defineCommand113({
26008
26049
  meta: { name: "meetings", description: "HubSpot meeting links (calendars) on the connected account." },
26009
26050
  subCommands: { list: meetingsListCommand, view: meetingsViewCommand }
26010
26051
  });
26011
- var hubspotCommand = defineCommand112({
26052
+ var hubspotCommand = defineCommand113({
26012
26053
  meta: {
26013
26054
  name: "hubspot",
26014
26055
  description: `Read the connected HubSpot account \u2014 forms and meeting links (calendars) \u2014 and get the blob to wire one into a Form step yourself.
@@ -26029,10 +26070,10 @@ Full guide: __tooling__/docs/tools/baker/hubspot.md`
26029
26070
  });
26030
26071
 
26031
26072
  // src/commands/images/index.ts
26032
- import { defineCommand as defineCommand136 } from "citty";
26073
+ import { defineCommand as defineCommand137 } from "citty";
26033
26074
 
26034
26075
  // src/commands/images/crop.ts
26035
- import { defineCommand as defineCommand113 } from "citty";
26076
+ import { defineCommand as defineCommand114 } from "citty";
26036
26077
 
26037
26078
  // src/lib/image/crop-sprite.ts
26038
26079
  import sharp from "sharp";
@@ -26157,7 +26198,7 @@ function emitError2(err) {
26157
26198
  }
26158
26199
  process.exit(1);
26159
26200
  }
26160
- var cropCommand = defineCommand113({
26201
+ var cropCommand = defineCommand114({
26161
26202
  meta: {
26162
26203
  name: "crop",
26163
26204
  description: "Crop a rectangular region from an image.\n\nExample: baker images crop sprite.png --x 0 --y 0 --width 64 --height 64 --output icon.png"
@@ -26193,7 +26234,7 @@ var cropCommand = defineCommand113({
26193
26234
  });
26194
26235
 
26195
26236
  // src/commands/images/delete.ts
26196
- import { defineCommand as defineCommand114 } from "citty";
26237
+ import { defineCommand as defineCommand115 } from "citty";
26197
26238
  registerSchema({
26198
26239
  command: "images.delete",
26199
26240
  description: "Delete an image by ID",
@@ -26207,7 +26248,7 @@ registerSchema({
26207
26248
  }
26208
26249
  }
26209
26250
  });
26210
- var deleteCommand = defineCommand114({
26251
+ var deleteCommand = defineCommand115({
26211
26252
  meta: {
26212
26253
  name: "delete",
26213
26254
  description: "Delete an image by ID. Use --dry-run to preview. Example: baker images delete j571abc123 --dry-run"
@@ -26248,7 +26289,7 @@ var deleteCommand = defineCommand114({
26248
26289
  });
26249
26290
 
26250
26291
  // src/commands/images/dimensions.ts
26251
- import { defineCommand as defineCommand115 } from "citty";
26292
+ import { defineCommand as defineCommand116 } from "citty";
26252
26293
 
26253
26294
  // src/lib/image/dimensions.ts
26254
26295
  import { imageSize } from "image-size";
@@ -26271,7 +26312,7 @@ registerSchema({
26271
26312
  target: { type: "string", description: "Local file path or remote http(s) URL", required: true }
26272
26313
  }
26273
26314
  });
26274
- var dimensionsCommand = defineCommand115({
26315
+ var dimensionsCommand = defineCommand116({
26275
26316
  meta: {
26276
26317
  name: "dimensions",
26277
26318
  description: "Read image dimensions without decoding the full file.\n\nExample: baker images dimensions ./logo.png\nExample: baker images dimensions https://acme.com/hero.png"
@@ -26315,7 +26356,7 @@ var dimensionsCommand = defineCommand115({
26315
26356
  });
26316
26357
 
26317
26358
  // src/commands/images/extract.ts
26318
- import { defineCommand as defineCommand116 } from "citty";
26359
+ import { defineCommand as defineCommand117 } from "citty";
26319
26360
  registerSchema({
26320
26361
  command: "images.extract",
26321
26362
  description: "Extract images from a URL via Firecrawl (formats: images).",
@@ -26331,7 +26372,7 @@ registerSchema({
26331
26372
  }
26332
26373
  }
26333
26374
  });
26334
- var extractCommand = defineCommand116({
26375
+ var extractCommand = defineCommand117({
26335
26376
  meta: {
26336
26377
  name: "extract",
26337
26378
  description: "Pull every image from a single URL via Firecrawl. ~$0.001/scrape. Cap auto-ingest at 20.\n\nExample: baker images extract https://stripe.com --auto-ingest 5"
@@ -26369,7 +26410,7 @@ var extractCommand = defineCommand116({
26369
26410
  });
26370
26411
 
26371
26412
  // src/commands/images/find.ts
26372
- import { defineCommand as defineCommand117 } from "citty";
26413
+ import { defineCommand as defineCommand118 } from "citty";
26373
26414
  registerSchema({
26374
26415
  command: "images.find",
26375
26416
  description: "Fanout image search: library first, then opted-in external providers.",
@@ -26401,7 +26442,7 @@ registerSchema({
26401
26442
  }
26402
26443
  }
26403
26444
  });
26404
- var findCommand = defineCommand117({
26445
+ var findCommand = defineCommand118({
26405
26446
  meta: {
26406
26447
  name: "find",
26407
26448
  description: "Library-first fanout image search. Opt in to providers with --sources. `--fallback` short-circuits to externals only when library is thin. With --auto-ingest, ingested external hits return Baker-owned URLs.\n\nExample: baker images find 'office' --sources library,magnific --limit 20"
@@ -26450,7 +26491,7 @@ var findCommand = defineCommand117({
26450
26491
 
26451
26492
  // src/commands/images/generate.ts
26452
26493
  import { readFile as readFile20 } from "fs/promises";
26453
- import { defineCommand as defineCommand118 } from "citty";
26494
+ import { defineCommand as defineCommand119 } from "citty";
26454
26495
  import sharp2 from "sharp";
26455
26496
  var GENERATE_TIMEOUT_MS = 18e4;
26456
26497
  var REFERENCE_MAX_EDGE = 1536;
@@ -26553,7 +26594,7 @@ async function resolveReferences(spec) {
26553
26594
  }
26554
26595
  return out;
26555
26596
  }
26556
- var generateCommand = defineCommand118({
26597
+ var generateCommand = defineCommand119({
26557
26598
  meta: {
26558
26599
  name: "generate",
26559
26600
  description: "Generate an image with AI and store it in the library (cost-tracked per request via OpenRouter usage). Models mirror the canvas: google/gemini-3.1-flash-image-preview (Nano Banana flash \u2014 default, fast, extreme aspect ratios), google/gemini-3-pro-image-preview (Nano Banana Pro \u2014 highest fidelity), openai/gpt-image-2 (photoreal, cleanest in-image text, best for ad/landing reproduction \u2014 no --image-size, and no 4:5 / 5:4), recraft/recraft-v4.1-pro-vector (vector/SVG-style with palette control). The result is auto-ingested (describe + embed), so the next `baker images library` query finds it. Pass --reference with image URLs and/or local file paths (Pinterest, stock, brand assets, sandbox files) to ground generation in reality.\n\nExamples:\n baker images generate 'a friendly golden retriever sitting in a bright modern living room' --aspect-ratio 16:9\n baker images generate 'hero shot of a matte black water bottle on marble' --model openai/gpt-image-2 --aspect-ratio 3:2\n baker images generate 'lifestyle photo matching this mood' --reference 'https://\u2026/ref1.jpg,https://\u2026/ref2.jpg'\n baker images generate 'put this product on a marble countertop, soft daylight' --reference './src/brand/logos/product.png,./refs/kitchen-mood.jpg'\n baker images generate 'flat geometric mascot, brand palette' --model recraft/recraft-v4.1-pro-vector --rgb-colors '[[10,10,10],[255,80,0]]'"
@@ -26605,7 +26646,7 @@ var generateCommand = defineCommand118({
26605
26646
  });
26606
26647
 
26607
26648
  // src/commands/images/get.ts
26608
- import { defineCommand as defineCommand119 } from "citty";
26649
+ import { defineCommand as defineCommand120 } from "citty";
26609
26650
  registerSchema({
26610
26651
  command: "images.get",
26611
26652
  description: "Get a single image by ID",
@@ -26613,7 +26654,7 @@ registerSchema({
26613
26654
  id: { type: "string", description: "Image ID", required: true }
26614
26655
  }
26615
26656
  });
26616
- var getCommand2 = defineCommand119({
26657
+ var getCommand2 = defineCommand120({
26617
26658
  meta: { name: "get", description: "Get a single image by ID. Example: baker images get j571abc123" },
26618
26659
  args: {
26619
26660
  id: { type: "positional", description: "Image ID", required: false },
@@ -26649,7 +26690,7 @@ var getCommand2 = defineCommand119({
26649
26690
  });
26650
26691
 
26651
26692
  // src/commands/images/gif.ts
26652
- import { defineCommand as defineCommand120 } from "citty";
26693
+ import { defineCommand as defineCommand121 } from "citty";
26653
26694
  registerSchema({
26654
26695
  command: "images.gif",
26655
26696
  description: "Search Giphy for GIFs / reaction memes (paid social creative).",
@@ -26681,7 +26722,7 @@ registerSchema({
26681
26722
  }
26682
26723
  }
26683
26724
  });
26684
- var gifCommand = defineCommand120({
26725
+ var gifCommand = defineCommand121({
26685
26726
  meta: {
26686
26727
  name: "gif",
26687
26728
  description: "Search Giphy for GIFs / reaction memes \u2014 built for paid-social creative (Meta, TikTok, LinkedIn, X). Free API. Each hit carries WebP + GIF + MP4 URLs in providerMeta so you can pick the right format per platform.\n\nExample: baker images gif 'this is fine' --limit 10\nExample: baker images gif 'office reaction' --rating pg --auto-ingest 2\nExample: baker images gif --trending --limit 25"
@@ -26728,7 +26769,7 @@ var gifCommand = defineCommand120({
26728
26769
  });
26729
26770
 
26730
26771
  // src/commands/images/google.ts
26731
- import { defineCommand as defineCommand121 } from "citty";
26772
+ import { defineCommand as defineCommand122 } from "citty";
26732
26773
 
26733
26774
  // src/commands/images/searchHints.ts
26734
26775
  var FALLBACK = {
@@ -26792,7 +26833,7 @@ registerSchema({
26792
26833
  }
26793
26834
  }
26794
26835
  });
26795
- var googleCommand2 = defineCommand121({
26836
+ var googleCommand2 = defineCommand122({
26796
26837
  meta: {
26797
26838
  name: "google",
26798
26839
  description: "Google Images via the official Custom Search JSON API ($0.005/query, free 100/day). \u26A0 Source unverified \u2014 watermarks, low-res, mislabeled results are common. Use as last resort. With --auto-ingest, ingested hits return Baker-owned URLs.\n\nExample: baker images google 'industrial workshop' --type photo --size large --limit 20"
@@ -26848,7 +26889,7 @@ var googleCommand2 = defineCommand121({
26848
26889
  });
26849
26890
 
26850
26891
  // src/commands/images/icon.ts
26851
- import { defineCommand as defineCommand122 } from "citty";
26892
+ import { defineCommand as defineCommand123 } from "citty";
26852
26893
  registerSchema({
26853
26894
  command: "images.icon",
26854
26895
  description: "Icon lookup via Iconify (200+ icon sets, free CDN).",
@@ -26874,7 +26915,7 @@ registerSchema({
26874
26915
  }
26875
26916
  }
26876
26917
  });
26877
- var iconCommand = defineCommand122({
26918
+ var iconCommand = defineCommand123({
26878
26919
  meta: {
26879
26920
  name: "icon",
26880
26921
  description: "Icon via Iconify (simple-icons, logos, lucide, devicon, heroicons, tabler, phosphor, material-symbols, \u2026). Free CDN, no API key.\n\nExample: baker images icon react --set devicon\nExample: baker images icon lucide:check --color '#0a0a0a'"
@@ -26914,7 +26955,7 @@ var iconCommand = defineCommand122({
26914
26955
  });
26915
26956
 
26916
26957
  // src/commands/images/ingest.ts
26917
- import { defineCommand as defineCommand123 } from "citty";
26958
+ import { defineCommand as defineCommand124 } from "citty";
26918
26959
  registerSchema({
26919
26960
  command: "images.ingest",
26920
26961
  description: "Ingest a remote image URL into the library (full describe + embed).",
@@ -26926,7 +26967,7 @@ registerSchema({
26926
26967
  context: { type: "string", description: "Description context hint", required: false }
26927
26968
  }
26928
26969
  });
26929
- var ingestCommand = defineCommand123({
26970
+ var ingestCommand = defineCommand124({
26930
26971
  meta: {
26931
26972
  name: "ingest",
26932
26973
  description: "Download a remote URL and store it in the library. Hash-deduped on bytes + externalId.\n\nExample: baker images ingest https://img.freepik.com/free-photo/xyz.jpg --source magnific --external-id 12345"
@@ -26968,7 +27009,7 @@ var ingestCommand = defineCommand123({
26968
27009
  });
26969
27010
 
26970
27011
  // src/commands/images/library.ts
26971
- import { defineCommand as defineCommand124 } from "citty";
27012
+ import { defineCommand as defineCommand125 } from "citty";
26972
27013
  registerSchema({
26973
27014
  command: "images.library",
26974
27015
  description: "Search the company image library. Returns only ready images.",
@@ -26994,7 +27035,7 @@ registerSchema({
26994
27035
  }
26995
27036
  }
26996
27037
  });
26997
- var libraryCommand = defineCommand124({
27038
+ var libraryCommand = defineCommand125({
26998
27039
  meta: {
26999
27040
  name: "library",
27000
27041
  description: "Search the company image library (hybrid BM25 + vector + Cohere rerank). Use this BEFORE any external provider.\n\nExample: baker images library 'hero banner' --aspect-ratio 16:9 --source magnific"
@@ -27051,7 +27092,7 @@ var libraryCommand = defineCommand124({
27051
27092
  });
27052
27093
 
27053
27094
  // src/commands/images/logo.ts
27054
- import { defineCommand as defineCommand125 } from "citty";
27095
+ import { defineCommand as defineCommand126 } from "citty";
27055
27096
  registerSchema({
27056
27097
  command: "images.logo",
27057
27098
  description: "Brand logo lookup via Brandfetch CDN (fallback/404). Auto-ingests by default.",
@@ -27076,7 +27117,7 @@ registerSchema({
27076
27117
  }
27077
27118
  }
27078
27119
  });
27079
- var logoCommand = defineCommand125({
27120
+ var logoCommand = defineCommand126({
27080
27121
  meta: {
27081
27122
  name: "logo",
27082
27123
  description: "Brand logo via Brandfetch CDN. Returns up to 5 variants (icon, light/dark logo, light/dark symbol). Auto-ingests the first variant.\n\nExample: baker images logo stripe.com --variant logo"
@@ -27114,7 +27155,7 @@ var logoCommand = defineCommand125({
27114
27155
  });
27115
27156
 
27116
27157
  // src/commands/images/normalize.ts
27117
- import { defineCommand as defineCommand126 } from "citty";
27158
+ import { defineCommand as defineCommand127 } from "citty";
27118
27159
 
27119
27160
  // src/lib/image/color-changer.ts
27120
27161
  import quantize from "quantize";
@@ -27846,7 +27887,7 @@ function coerceRawArgs(args) {
27846
27887
  "dry-run": bool(args["dry-run"])
27847
27888
  };
27848
27889
  }
27849
- var normalizeCommand = defineCommand126({
27890
+ var normalizeCommand = defineCommand127({
27850
27891
  meta: {
27851
27892
  name: "normalize",
27852
27893
  description: `Normalize logos / images: declarative recolor + bg removal + trim + resize. Operates on local files; writes in-place by default.
@@ -27901,7 +27942,7 @@ Examples:
27901
27942
  });
27902
27943
 
27903
27944
  // src/commands/images/pinterest.ts
27904
- import { defineCommand as defineCommand127 } from "citty";
27945
+ import { defineCommand as defineCommand128 } from "citty";
27905
27946
  registerSchema({
27906
27947
  command: "images.pinterest",
27907
27948
  description: "Pinterest image search via ScrapeCreators. Reference-grade real-world photography, product styling, interiors, fashion, food, and aesthetic mood boards. Inspect before placing \u2014 Pinterest is unverified, trademark-bearing web content.",
@@ -27921,7 +27962,7 @@ registerSchema({
27921
27962
  }
27922
27963
  }
27923
27964
  });
27924
- var pinterestCommand = defineCommand127({
27965
+ var pinterestCommand = defineCommand128({
27925
27966
  meta: {
27926
27967
  name: "pinterest",
27927
27968
  description: "Pinterest image search via ScrapeCreators ($0.00188/request). Best for photo-realistic reference imagery \u2014 lifestyle, interiors, fashion, food, product styling, and mood boards to brief AI generation against. \u26A0 Unverified, trademark-bearing web content \u2014 inspect and respect rights before placing on a customer page. Browse first; auto-ingest only the pins you commit to.\n\nExamples:\n baker images pinterest 'scandinavian living room'\n baker images pinterest 'minimalist skincare product photography' --limit 20\n baker images pinterest 'cozy coffee shop interior' --auto-ingest 2 --context 'Mood reference for hero photography'"
@@ -27961,7 +28002,7 @@ var pinterestCommand = defineCommand127({
27961
28002
  });
27962
28003
 
27963
28004
  // src/commands/images/screenshot.ts
27964
- import { defineCommand as defineCommand128 } from "citty";
28005
+ import { defineCommand as defineCommand129 } from "citty";
27965
28006
  registerSchema({
27966
28007
  command: "images.screenshot",
27967
28008
  description: "Capture a website screenshot via ScreenshotOne. Auto-ingests on success.",
@@ -27977,7 +28018,7 @@ registerSchema({
27977
28018
  }
27978
28019
  }
27979
28020
  });
27980
- var screenshotCommand = defineCommand128({
28021
+ var screenshotCommand = defineCommand129({
27981
28022
  meta: {
27982
28023
  name: "screenshot",
27983
28024
  description: "Screenshot a URL via ScreenshotOne. $0.009/capture. Auto-ingests to library.\n\nExample: baker images screenshot https://stripe.com --full-page"
@@ -28040,7 +28081,7 @@ var screenshotCommand = defineCommand128({
28040
28081
  });
28041
28082
 
28042
28083
  // src/commands/images/search.ts
28043
- import { defineCommand as defineCommand129 } from "citty";
28084
+ import { defineCommand as defineCommand130 } from "citty";
28044
28085
  registerSchema({
28045
28086
  command: "images.search",
28046
28087
  description: "Search images by text query. Only returns ready images.",
@@ -28056,7 +28097,7 @@ registerSchema({
28056
28097
  tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
28057
28098
  }
28058
28099
  });
28059
- var searchCommand = defineCommand129({
28100
+ var searchCommand = defineCommand130({
28060
28101
  meta: {
28061
28102
  name: "search",
28062
28103
  description: "Semantic search images by text query. Uses hybrid BM25 + vector + reranking. Example: baker images search 'hero banner' --aspect-ratio 16:9 --tags logo"
@@ -28116,7 +28157,7 @@ var searchCommand = defineCommand129({
28116
28157
  });
28117
28158
 
28118
28159
  // src/commands/images/sticker.ts
28119
- import { defineCommand as defineCommand130 } from "citty";
28160
+ import { defineCommand as defineCommand131 } from "citty";
28120
28161
  registerSchema({
28121
28162
  command: "images.sticker",
28122
28163
  description: "Search Giphy stickers \u2014 transparent-background overlays for ad creative.",
@@ -28148,7 +28189,7 @@ registerSchema({
28148
28189
  }
28149
28190
  }
28150
28191
  });
28151
- var stickerCommand = defineCommand130({
28192
+ var stickerCommand = defineCommand131({
28152
28193
  meta: {
28153
28194
  name: "sticker",
28154
28195
  description: "Search Giphy's sticker corpus \u2014 transparent-background WebPs / GIFs ideal for overlaying on ad creative (Meta, TikTok, Stories). Same Giphy free API as `baker images gif`; results carry WebP + GIF + MP4 URLs in providerMeta.\n\nExample: baker images sticker 'thumbs up' --limit 10\nExample: baker images sticker celebration --rating g --auto-ingest 3\nExample: baker images sticker --trending --limit 25"
@@ -28195,7 +28236,7 @@ var stickerCommand = defineCommand130({
28195
28236
  });
28196
28237
 
28197
28238
  // src/commands/images/stock.ts
28198
- import { defineCommand as defineCommand131 } from "citty";
28239
+ import { defineCommand as defineCommand132 } from "citty";
28199
28240
  var STOCK_ERROR_FIX = {
28200
28241
  action: "use_different_resource",
28201
28242
  explanation: "Switch provider instead of retrying stock search. Stock search is one of several image sources. Run `baker images find <query> --sources library,pinterest,google` (`--sources` is required \u2014 `find` alone searches the library only) or `baker images generate` to make the asset. Never sleep-and-retry this command \u2014 the CLI already backs off on rate limits. If no image can be sourced, continue the rest of the task with a placeholder rather than aborting it."
@@ -28272,7 +28313,7 @@ function buildStockRequest(query, args) {
28272
28313
  if (args.context) body.descriptionContext = args.context;
28273
28314
  return body;
28274
28315
  }
28275
- var stockCommand = defineCommand131({
28316
+ var stockCommand = defineCommand132({
28276
28317
  meta: {
28277
28318
  name: "stock",
28278
28319
  description: "Stock search via Magnific \u2014 Freepik's developer API (~250M assets: photos, vectors, illustrations, icons, PSDs). $0.002/req. With --auto-ingest, ingested hits return Baker-owned URLs.\n\nExamples:\n baker images stock 'minimalist office'\n baker images stock 'flat office workers' --type vector\n baker images stock 'hero photo of a kitchen' --type photo --orientation landscape --ai exclude\n baker images stock 'brand pattern' --color '#0a0a0a' --license freemium --auto-ingest 2"
@@ -28328,7 +28369,7 @@ var stockCommand = defineCommand131({
28328
28369
  });
28329
28370
 
28330
28371
  // src/lib/tags-command.ts
28331
- import { defineCommand as defineCommand132 } from "citty";
28372
+ import { defineCommand as defineCommand133 } from "citty";
28332
28373
  function makeTagsCommand(command, label, endpoint) {
28333
28374
  registerSchema({
28334
28375
  command: `${command}.tags`,
@@ -28337,7 +28378,7 @@ function makeTagsCommand(command, label, endpoint) {
28337
28378
  output: { type: "string", description: "Output format: md|json", required: false, default: "md" }
28338
28379
  }
28339
28380
  });
28340
- return defineCommand132({
28381
+ return defineCommand133({
28341
28382
  meta: {
28342
28383
  name: "tags",
28343
28384
  description: `List the available ${label} tag names (defaults + company custom tags). Use before filtering with --tags. Example: baker ${command} tags`
@@ -28373,7 +28414,7 @@ function makeTagsCommand(command, label, endpoint) {
28373
28414
  var tagsCommand2 = makeTagsCommand("images", "image", "/api/images/tags");
28374
28415
 
28375
28416
  // src/commands/images/upload.ts
28376
- import { defineCommand as defineCommand133 } from "citty";
28417
+ import { defineCommand as defineCommand134 } from "citty";
28377
28418
  registerSchema({
28378
28419
  command: "images.upload",
28379
28420
  description: "Upload an image to the library \u2014 local file path or remote http(s) URL.",
@@ -28411,7 +28452,7 @@ registerSchema({
28411
28452
  function isRemoteUrl2(value) {
28412
28453
  return /^https?:\/\//i.test(value);
28413
28454
  }
28414
- var uploadCommand = defineCommand133({
28455
+ var uploadCommand = defineCommand134({
28415
28456
  meta: {
28416
28457
  name: "upload",
28417
28458
  description: "Upload an image to the library \u2014 accepts a local file path OR a remote http(s) URL.\n\nLocal: reads bytes, sends to /api/images/upload, content-type auto-detected from extension.\nRemote: dispatches to /api/images/ingest with hash-dedup on bytes + externalId.\n\nExamples:\n baker images upload ./logo.png --source uploaded\n baker images upload ./cert.png --context 'ISO 27001 badge \u2014 enterprise tier'\n baker images upload https://acme.com/hero.png --source firecrawl --context 'Acme competitor pricing hero'"
@@ -28504,7 +28545,7 @@ async function uploadLocal(target, args) {
28504
28545
  }
28505
28546
 
28506
28547
  // src/commands/images/upscale.ts
28507
- import { defineCommand as defineCommand134 } from "citty";
28548
+ import { defineCommand as defineCommand135 } from "citty";
28508
28549
  registerSchema({
28509
28550
  command: "images.upscale",
28510
28551
  description: "Upscale a library image via the backend (Replicate, cost-tracked). Waits for completion by default. The image must be status 'ready' and raster (not SVG/AVIF).",
@@ -28519,7 +28560,7 @@ registerSchema({
28519
28560
  }
28520
28561
  });
28521
28562
  var POLL_INTERVAL_MS3 = 1500;
28522
- var upscaleCommand = defineCommand134({
28563
+ var upscaleCommand = defineCommand135({
28523
28564
  meta: {
28524
28565
  name: "upscale",
28525
28566
  description: "Upscale a library image via the Convex backend (Replicate, cost-tracked at $0.05/image). Waits for completion by default.\n\nExample: baker images upscale j571abc123def\nExample: baker images upscale j571abc123def --max-wait 0 # fire-and-forget"
@@ -28574,7 +28615,7 @@ var upscaleCommand = defineCommand134({
28574
28615
  });
28575
28616
 
28576
28617
  // src/commands/images/use.ts
28577
- import { defineCommand as defineCommand135 } from "citty";
28618
+ import { defineCommand as defineCommand136 } from "citty";
28578
28619
  registerSchema({
28579
28620
  command: "images.use",
28580
28621
  description: "Ingest a URL and wait for the library record to be ready.",
@@ -28590,7 +28631,7 @@ registerSchema({
28590
28631
  }
28591
28632
  });
28592
28633
  var POLL_INTERVAL_MS4 = 1500;
28593
- var useCommand = defineCommand135({
28634
+ var useCommand = defineCommand136({
28594
28635
  meta: {
28595
28636
  name: "use",
28596
28637
  description: "Sugar over `ingest`: download \u2192 store \u2192 wait until describe + embed complete \u2192 return ready library record.\n\nExample: baker images use https://cdn.example.com/hero.png --source uploaded"
@@ -28636,7 +28677,7 @@ var useCommand = defineCommand135({
28636
28677
  });
28637
28678
 
28638
28679
  // src/commands/images/index.ts
28639
- var imagesCommand = defineCommand136({
28680
+ var imagesCommand = defineCommand137({
28640
28681
  meta: {
28641
28682
  name: "images",
28642
28683
  description: `Find, source, and normalize images. Subcommands route by provider so cost + license are explicit.
@@ -28707,12 +28748,12 @@ Full guide: __tooling__/docs/tools/baker/images.md`
28707
28748
  });
28708
28749
 
28709
28750
  // src/commands/landing/index.ts
28710
- import { defineCommand as defineCommand138 } from "citty";
28751
+ import { defineCommand as defineCommand139 } from "citty";
28711
28752
 
28712
28753
  // src/commands/landing/critique.ts
28713
28754
  import { readdir as readdir8, stat as stat6 } from "fs/promises";
28714
28755
  import path27 from "path";
28715
- import { defineCommand as defineCommand137 } from "citty";
28756
+ import { defineCommand as defineCommand138 } from "citty";
28716
28757
 
28717
28758
  // src/engine/landing/lib/brand-tokens.ts
28718
28759
  import { readFile as readFile21 } from "fs/promises";
@@ -29970,7 +30011,7 @@ function fail5(code, message, fix) {
29970
30011
  );
29971
30012
  process.exit(2);
29972
30013
  }
29973
- var critiqueCommand2 = defineCommand137({
30014
+ var critiqueCommand2 = defineCommand138({
29974
30015
  meta: {
29975
30016
  name: "critique",
29976
30017
  description: "Start here: `baker landing critique <slug>` after building or editing a landing. Deterministic design-quality critic (ADVISORY \u2014 findings never fail it). Flags the known AI design tells (gradient text, overused fonts, side-tab borders, cream palettes, buzzword copy, broken images) tiered block/warn/advisory, respecting the client's BRAND.md as the allowlist. Also records the critique that publishing requires \u2014 run it before finishing a landing."
@@ -30079,7 +30120,7 @@ async function isDir(p) {
30079
30120
  }
30080
30121
 
30081
30122
  // src/commands/landing/index.ts
30082
- var landingCommand = defineCommand138({
30123
+ var landingCommand = defineCommand139({
30083
30124
  meta: {
30084
30125
  name: "landing",
30085
30126
  description: `Design-quality tools for landing pages (src/pages/<slug>/).
@@ -30095,7 +30136,7 @@ Subcommands:
30095
30136
  });
30096
30137
 
30097
30138
  // src/commands/mcp/index.ts
30098
- import { defineCommand as defineCommand139 } from "citty";
30139
+ import { defineCommand as defineCommand140 } from "citty";
30099
30140
  var SCOPES = ["user", "user_org", "company", "org"];
30100
30141
  function parseScope(raw) {
30101
30142
  const scope = raw === void 0 ? "company" : String(raw);
@@ -30148,7 +30189,7 @@ registerSchema({
30148
30189
  description: "List every third-party tool this chat can reach: managed integrations (Attio, Slack, Gmail, Google Sheets, \u2026) plus custom MCP servers. Start here when the user mentions an external tool.",
30149
30190
  args: {}
30150
30191
  });
30151
- var connectedCommand = defineCommand139({
30192
+ var connectedCommand = defineCommand140({
30152
30193
  meta: {
30153
30194
  name: "connected",
30154
30195
  description: `List all connected third-party tools \u2014 managed integrations plus custom MCP servers.
@@ -30201,7 +30242,7 @@ registerSchema({
30201
30242
  description: "List the custom MCP servers this company's chats see (org + company + your own user scope).",
30202
30243
  args: {}
30203
30244
  });
30204
- var listCommand13 = defineCommand139({
30245
+ var listCommand13 = defineCommand140({
30205
30246
  meta: { name: "list", description: "List custom MCP servers visible to this company's chats." },
30206
30247
  run: async () => {
30207
30248
  try {
@@ -30238,7 +30279,7 @@ registerSchema({
30238
30279
  header: { type: "string", description: 'Auth header "Key: Value" (repeatable)', required: false }
30239
30280
  }
30240
30281
  });
30241
- var addCommand = defineCommand139({
30282
+ var addCommand = defineCommand140({
30242
30283
  meta: {
30243
30284
  name: "add",
30244
30285
  description: `Register a custom MCP server. Tools appear as mcp__<name>__* on the NEXT message.
@@ -30290,7 +30331,7 @@ registerSchema({
30290
30331
  description: "Remove a company custom MCP server by name.",
30291
30332
  args: { name: { type: "string", description: "Server name to remove", required: true } }
30292
30333
  });
30293
- var removeCommand4 = defineCommand139({
30334
+ var removeCommand4 = defineCommand140({
30294
30335
  meta: {
30295
30336
  name: "remove",
30296
30337
  description: `Remove a company custom MCP server by name.
@@ -30312,7 +30353,7 @@ Example:
30312
30353
  }
30313
30354
  }
30314
30355
  });
30315
- var mcpCommand = defineCommand139({
30356
+ var mcpCommand = defineCommand140({
30316
30357
  meta: {
30317
30358
  name: "mcp",
30318
30359
  description: `Third-party tools for this company \u2014 see what's connected, register custom HTTPS MCP endpoints.
@@ -30338,10 +30379,10 @@ Full guide: __tooling__/docs/tools/baker/mcp.md`
30338
30379
  });
30339
30380
 
30340
30381
  // src/commands/research/index.ts
30341
- import { defineCommand as defineCommand150 } from "citty";
30382
+ import { defineCommand as defineCommand151 } from "citty";
30342
30383
 
30343
30384
  // src/commands/research/advertisers.ts
30344
- import { defineCommand as defineCommand140 } from "citty";
30385
+ import { defineCommand as defineCommand141 } from "citty";
30345
30386
 
30346
30387
  // src/commands/research/output.ts
30347
30388
  var RESEARCH_DATA_NOTE = "Estimates based on third-party SERP data \u2014 not exact figures. Use for directional insights, not precise measurement.";
@@ -30454,7 +30495,7 @@ var FIELDS3 = {
30454
30495
  etv: "Estimated traffic value (USD)",
30455
30496
  visibility: "SERP visibility score (0-1)"
30456
30497
  };
30457
- var advertisersCommand = defineCommand140({
30498
+ var advertisersCommand = defineCommand141({
30458
30499
  meta: {
30459
30500
  name: "advertisers",
30460
30501
  description: `Find domains competing for a keyword in Google SERPs.
@@ -30501,7 +30542,7 @@ Examples:
30501
30542
  });
30502
30543
 
30503
30544
  // src/commands/research/autocomplete.ts
30504
- import { defineCommand as defineCommand141 } from "citty";
30545
+ import { defineCommand as defineCommand142 } from "citty";
30505
30546
  registerSchema({
30506
30547
  command: "research.autocomplete",
30507
30548
  description: "Get Google Autocomplete suggestions for a seed keyword. Useful for keyword expansion and discovering what people actually search for. IMPORTANT: If --location and --language are omitted, defaults to United States (us) and English (en).",
@@ -30524,7 +30565,7 @@ registerSchema({
30524
30565
  var FIELDS4 = {
30525
30566
  suggestion: "Autocomplete suggestion from Google"
30526
30567
  };
30527
- var autocompleteCommand = defineCommand141({
30568
+ var autocompleteCommand = defineCommand142({
30528
30569
  meta: {
30529
30570
  name: "autocomplete",
30530
30571
  description: `Get Google Autocomplete suggestions for keyword expansion.
@@ -30570,7 +30611,7 @@ Examples:
30570
30611
  });
30571
30612
 
30572
30613
  // src/commands/research/countries.ts
30573
- import { defineCommand as defineCommand142 } from "citty";
30614
+ import { defineCommand as defineCommand143 } from "citty";
30574
30615
  registerSchema({
30575
30616
  command: "research.countries",
30576
30617
  description: "List all supported country codes for --location flag in research commands.",
@@ -30627,7 +30668,7 @@ var FIELDS5 = {
30627
30668
  code: "Country code to pass as --location",
30628
30669
  name: "Country name"
30629
30670
  };
30630
- var countriesCommand = defineCommand142({
30671
+ var countriesCommand = defineCommand143({
30631
30672
  meta: {
30632
30673
  name: "countries",
30633
30674
  description: "List all supported country codes for --location flag."
@@ -30638,7 +30679,7 @@ var countriesCommand = defineCommand142({
30638
30679
  });
30639
30680
 
30640
30681
  // src/commands/research/intent.ts
30641
- import { defineCommand as defineCommand143 } from "citty";
30682
+ import { defineCommand as defineCommand144 } from "citty";
30642
30683
  registerSchema({
30643
30684
  command: "research.intent",
30644
30685
  description: "Classify Google Search intent for keywords. Determines if someone searching is looking to buy, research, or navigate. IMPORTANT: If --language is omitted, defaults to English (en). The response includes a query_context object showing which language was used.",
@@ -30661,7 +30702,7 @@ var FIELDS6 = {
30661
30702
  intent: "Primary Google Search intent: informational, navigational, commercial, transactional",
30662
30703
  probability: "Confidence score 0.0-1.0"
30663
30704
  };
30664
- var intentCommand = defineCommand143({
30705
+ var intentCommand = defineCommand144({
30665
30706
  meta: {
30666
30707
  name: "intent",
30667
30708
  description: `Classify Google Search intent for keywords. Returns intent type and confidence.
@@ -30709,7 +30750,7 @@ Examples:
30709
30750
  });
30710
30751
 
30711
30752
  // src/commands/research/keyword-gap.ts
30712
- import { defineCommand as defineCommand144 } from "citty";
30753
+ import { defineCommand as defineCommand145 } from "citty";
30713
30754
  registerSchema({
30714
30755
  command: "research.keyword-gap",
30715
30756
  description: "Find keywords a competitor ranks for (organic or paid) that you don't. Discovers expansion opportunities. IMPORTANT: If --location and --language are omitted, defaults to United States (us) and English (en). The response includes a query_context object showing which location/language were used.",
@@ -30738,7 +30779,7 @@ var FIELDS7 = {
30738
30779
  cpc: "Cost per click USD",
30739
30780
  their_position: "Competitor's ranking position"
30740
30781
  };
30741
- var keywordGapCommand = defineCommand144({
30782
+ var keywordGapCommand = defineCommand145({
30742
30783
  meta: {
30743
30784
  name: "keyword-gap",
30744
30785
  description: `Find keywords a competitor has that you don't. Supports pagination via --offset.
@@ -30812,7 +30853,7 @@ Examples:
30812
30853
  });
30813
30854
 
30814
30855
  // src/commands/research/keywords-for-site.ts
30815
- import { defineCommand as defineCommand145 } from "citty";
30856
+ import { defineCommand as defineCommand146 } from "citty";
30816
30857
  registerSchema({
30817
30858
  command: "research.keywords-for-site",
30818
30859
  description: "Get keywords a competitor targets in Google. Use --type paid to see only paid keywords, --type organic for organic only. IMPORTANT: If --location and --language are omitted, defaults to United States (us) and English (en). The response includes a query_context object showing which location/language were used.",
@@ -30845,7 +30886,7 @@ var FIELDS8 = {
30845
30886
  competition: "LOW, MEDIUM, or HIGH",
30846
30887
  competition_index: "Competition score 0-100"
30847
30888
  };
30848
- var keywordsForSiteCommand = defineCommand145({
30889
+ var keywordsForSiteCommand = defineCommand146({
30849
30890
  meta: {
30850
30891
  name: "keywords-for-site",
30851
30892
  description: `Get keywords a competitor targets in Google. Use --type to filter paid/organic.
@@ -30898,7 +30939,7 @@ Examples:
30898
30939
  });
30899
30940
 
30900
30941
  // src/commands/research/languages.ts
30901
- import { defineCommand as defineCommand146 } from "citty";
30942
+ import { defineCommand as defineCommand147 } from "citty";
30902
30943
  registerSchema({
30903
30944
  command: "research.languages",
30904
30945
  description: "List all supported language codes for --language flag in research commands.",
@@ -30928,7 +30969,7 @@ var FIELDS9 = {
30928
30969
  code: "Language code to pass as --language",
30929
30970
  name: "Language name (also accepted by --language)"
30930
30971
  };
30931
- var languagesCommand2 = defineCommand146({
30972
+ var languagesCommand2 = defineCommand147({
30932
30973
  meta: {
30933
30974
  name: "languages",
30934
30975
  description: "List all supported language codes for --language flag."
@@ -30939,7 +30980,7 @@ var languagesCommand2 = defineCommand146({
30939
30980
  });
30940
30981
 
30941
30982
  // src/commands/research/lighthouse.ts
30942
- import { defineCommand as defineCommand147 } from "citty";
30983
+ import { defineCommand as defineCommand148 } from "citty";
30943
30984
  registerSchema({
30944
30985
  command: "research.lighthouse",
30945
30986
  description: "Landing page performance audit. Returns metrics that affect Google Ads Quality Score and CPC.",
@@ -30958,7 +30999,7 @@ var FIELDS10 = {
30958
30999
  speed_index_ms: "Speed Index in ms (good: < 3400)",
30959
31000
  interactive_ms: "Time to Interactive in ms (good: < 3800)"
30960
31001
  };
30961
- var lighthouseCommand = defineCommand147({
31002
+ var lighthouseCommand = defineCommand148({
30962
31003
  meta: {
30963
31004
  name: "lighthouse",
30964
31005
  description: `Landing page performance audit. Metrics affecting Google Ads Quality Score.
@@ -30996,7 +31037,7 @@ Examples:
30996
31037
  });
30997
31038
 
30998
31039
  // src/commands/research/relevant-pages.ts
30999
- import { defineCommand as defineCommand148 } from "citty";
31040
+ import { defineCommand as defineCommand149 } from "citty";
31000
31041
  registerSchema({
31001
31042
  command: "research.relevant-pages",
31002
31043
  description: "Get the top pages of a competitor domain with organic traffic and ranking data. Shows which pages drive the most traffic. IMPORTANT: If --location and --language are omitted, defaults to United States (us) and English (en).",
@@ -31022,7 +31063,7 @@ var FIELDS11 = {
31022
31063
  keywords: "Total organic keywords the page ranks for",
31023
31064
  top_10: "Keywords in positions 1-10"
31024
31065
  };
31025
- var relevantPagesCommand = defineCommand148({
31066
+ var relevantPagesCommand = defineCommand149({
31026
31067
  meta: {
31027
31068
  name: "relevant-pages",
31028
31069
  description: `Get the top pages of a competitor domain with traffic data.
@@ -31068,7 +31109,7 @@ Examples:
31068
31109
  });
31069
31110
 
31070
31111
  // src/commands/research/web.ts
31071
- import { defineCommand as defineCommand149 } from "citty";
31112
+ import { defineCommand as defineCommand150 } from "citty";
31072
31113
  registerSchema({
31073
31114
  command: "research.web",
31074
31115
  description: "Search the web with AI to answer marketing questions \u2014 competitors, ICP, pricing, pain points, market trends. Three depth levels: medium (quick, default), high (thorough), xhigh (exhaustive deep research).",
@@ -31119,7 +31160,7 @@ async function runDeepResearch(question) {
31119
31160
  }
31120
31161
  throw new Error("Deep research timed out");
31121
31162
  }
31122
- var webCommand = defineCommand149({
31163
+ var webCommand = defineCommand150({
31123
31164
  meta: {
31124
31165
  name: "web",
31125
31166
  description: `Search the web with AI to answer any open-ended marketing question. Uses live internet data via Google Search.
@@ -31179,7 +31220,7 @@ Examples:
31179
31220
  });
31180
31221
 
31181
31222
  // src/commands/research/index.ts
31182
- var researchCommand = defineCommand150({
31223
+ var researchCommand = defineCommand151({
31183
31224
  meta: {
31184
31225
  name: "research",
31185
31226
  description: `Competitive intelligence and AI-powered research commands.
@@ -31220,10 +31261,10 @@ Full guide: __tooling__/docs/tools/baker/research.md`
31220
31261
  });
31221
31262
 
31222
31263
  // src/commands/scheduled-actions/index.ts
31223
- import { defineCommand as defineCommand157 } from "citty";
31264
+ import { defineCommand as defineCommand158 } from "citty";
31224
31265
 
31225
31266
  // src/commands/scheduled-actions/create.ts
31226
- import { defineCommand as defineCommand151 } from "citty";
31267
+ import { defineCommand as defineCommand152 } from "citty";
31227
31268
 
31228
31269
  // src/commands/scheduled-actions/shared.ts
31229
31270
  var TEMP_SCHEDULED_ACTION_PREFIX = "temp_sched_";
@@ -31338,7 +31379,7 @@ registerSchema({
31338
31379
  prompt: { type: "string", description: "Additional prompt instructions for the spawned agent", required: false }
31339
31380
  }
31340
31381
  });
31341
- var createCommand2 = defineCommand151({
31382
+ var createCommand2 = defineCommand152({
31342
31383
  meta: {
31343
31384
  name: "create",
31344
31385
  description: 'Stage a scheduled action. Example: baker scheduled-actions create --name "Weekly report" --description "..." --cron "0 9 * * MON"'
@@ -31387,7 +31428,7 @@ var createCommand2 = defineCommand151({
31387
31428
  });
31388
31429
 
31389
31430
  // src/commands/scheduled-actions/delete.ts
31390
- import { defineCommand as defineCommand152 } from "citty";
31431
+ import { defineCommand as defineCommand153 } from "citty";
31391
31432
  registerSchema({
31392
31433
  command: "scheduled-actions.delete",
31393
31434
  description: "Stage deletion of a published scheduled action or cancellation of a temp_sched_* draft creation.",
@@ -31395,7 +31436,7 @@ registerSchema({
31395
31436
  id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
31396
31437
  }
31397
31438
  });
31398
- var deleteCommand2 = defineCommand152({
31439
+ var deleteCommand2 = defineCommand153({
31399
31440
  meta: {
31400
31441
  name: "delete",
31401
31442
  description: "Stage scheduled action deletion. Example: baker scheduled-actions delete <id-or-temp_sched_id>"
@@ -31424,7 +31465,7 @@ var deleteCommand2 = defineCommand152({
31424
31465
  });
31425
31466
 
31426
31467
  // src/commands/scheduled-actions/get.ts
31427
- import { defineCommand as defineCommand153 } from "citty";
31468
+ import { defineCommand as defineCommand154 } from "citty";
31428
31469
  registerSchema({
31429
31470
  command: "scheduled-actions.get",
31430
31471
  description: "Get a published scheduled action or a temp_sched_* draft-created scheduled action.",
@@ -31432,7 +31473,7 @@ registerSchema({
31432
31473
  id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
31433
31474
  }
31434
31475
  });
31435
- var getCommand3 = defineCommand153({
31476
+ var getCommand3 = defineCommand154({
31436
31477
  meta: {
31437
31478
  name: "get",
31438
31479
  description: "Get a scheduled action. Example: baker scheduled-actions get <id-or-temp_sched_id>"
@@ -31469,13 +31510,13 @@ var getCommand3 = defineCommand153({
31469
31510
  });
31470
31511
 
31471
31512
  // src/commands/scheduled-actions/list.ts
31472
- import { defineCommand as defineCommand154 } from "citty";
31513
+ import { defineCommand as defineCommand155 } from "citty";
31473
31514
  registerSchema({
31474
31515
  command: "scheduled-actions.list",
31475
31516
  description: "List published scheduled actions. Includes draft state when BAKER_CHAT_ID is set.",
31476
31517
  args: {}
31477
31518
  });
31478
- var listCommand14 = defineCommand154({
31519
+ var listCommand14 = defineCommand155({
31479
31520
  meta: {
31480
31521
  name: "list",
31481
31522
  description: "List scheduled actions. Includes staged draft ops when BAKER_CHAT_ID is set."
@@ -31496,7 +31537,7 @@ var listCommand14 = defineCommand154({
31496
31537
  });
31497
31538
 
31498
31539
  // src/commands/scheduled-actions/trigger.ts
31499
- import { defineCommand as defineCommand155 } from "citty";
31540
+ import { defineCommand as defineCommand156 } from "citty";
31500
31541
  registerSchema({
31501
31542
  command: "scheduled-actions.trigger",
31502
31543
  description: "Immediately trigger a published scheduled action. Does not require BAKER_CHAT_ID and rejects temp_sched_* IDs.",
@@ -31504,7 +31545,7 @@ registerSchema({
31504
31545
  id: { type: "string", description: "Published scheduled action ID", required: true }
31505
31546
  }
31506
31547
  });
31507
- var triggerCommand = defineCommand155({
31548
+ var triggerCommand = defineCommand156({
31508
31549
  meta: {
31509
31550
  name: "trigger",
31510
31551
  description: "Immediately trigger a published scheduled action. Example: baker scheduled-actions trigger <id>"
@@ -31541,7 +31582,7 @@ var triggerCommand = defineCommand155({
31541
31582
  });
31542
31583
 
31543
31584
  // src/commands/scheduled-actions/update.ts
31544
- import { defineCommand as defineCommand156 } from "citty";
31585
+ import { defineCommand as defineCommand157 } from "citty";
31545
31586
  registerSchema({
31546
31587
  command: "scheduled-actions.update",
31547
31588
  description: "Stage an update to a published scheduled action or temp_sched_* draft-created scheduled action.",
@@ -31566,7 +31607,7 @@ registerSchema({
31566
31607
  prompt: { type: "string", description: "Replacement additional spawned-agent instructions", required: false }
31567
31608
  }
31568
31609
  });
31569
- var updateCommand2 = defineCommand156({
31610
+ var updateCommand2 = defineCommand157({
31570
31611
  meta: {
31571
31612
  name: "update",
31572
31613
  description: "Stage a scheduled action update. Example: baker scheduled-actions update <id> --enabled false"
@@ -31637,7 +31678,7 @@ var updateCommand2 = defineCommand156({
31637
31678
  });
31638
31679
 
31639
31680
  // src/commands/scheduled-actions/index.ts
31640
- var scheduledActionsCommand = defineCommand157({
31681
+ var scheduledActionsCommand = defineCommand158({
31641
31682
  meta: {
31642
31683
  name: "scheduled-actions",
31643
31684
  description: `Manage Scheduled Actions. Subcommands: list, get, create, update, delete, trigger.
@@ -31664,14 +31705,14 @@ Full guide: __tooling__/docs/tools/baker/scheduled-actions.md`
31664
31705
  });
31665
31706
 
31666
31707
  // src/commands/schema.ts
31667
- import { defineCommand as defineCommand158 } from "citty";
31708
+ import { defineCommand as defineCommand159 } from "citty";
31668
31709
  function narrowToFamily(commandName, available) {
31669
31710
  const segments = commandName.split(".");
31670
31711
  const prefix = segments[0] === "ads" && segments[1] ? `ads.${segments[1]}.` : `${segments[0]}.`;
31671
31712
  const siblings = available.filter((name) => name.startsWith(prefix));
31672
31713
  return siblings.length > 0 ? siblings : available;
31673
31714
  }
31674
- var schemaCommand = defineCommand158({
31715
+ var schemaCommand = defineCommand159({
31675
31716
  meta: {
31676
31717
  name: "schema",
31677
31718
  description: "Inspect command argument schemas (for AI agent introspection). Lists all commands if no argument given. Example: baker schema images.search"
@@ -31715,10 +31756,10 @@ var schemaCommand = defineCommand158({
31715
31756
  });
31716
31757
 
31717
31758
  // src/commands/tag-manager/index.ts
31718
- import { defineCommand as defineCommand162 } from "citty";
31759
+ import { defineCommand as defineCommand163 } from "citty";
31719
31760
 
31720
31761
  // src/commands/tag-manager/draft.ts
31721
- import { defineCommand as defineCommand159 } from "citty";
31762
+ import { defineCommand as defineCommand160 } from "citty";
31722
31763
 
31723
31764
  // src/commands/tag-manager/shared.ts
31724
31765
  import { readFileSync as readFileSync12 } from "fs";
@@ -31774,7 +31815,7 @@ function handleError3(err) {
31774
31815
  process.exit(1);
31775
31816
  }
31776
31817
  var STAGE_HINTS = [
31777
- "Staged only \u2014 nothing has changed in Tag Manager yet. These apply when the chat completes, in dependency order, and close as a Tag Manager version. Whether that version goes live is a per-company setting, so never promise the user their tracking is live; say the changes are ready and will apply when you finish."
31818
+ "Staged only \u2014 nothing has changed in Tag Manager yet. These apply when the chat completes, in dependency order, and close as a Tag Manager version that is then published, so they do go live on the user's site. Say the changes are ready and go live when they publish \u2014 not that they are live already."
31778
31819
  ];
31779
31820
  async function stageOp3(op) {
31780
31821
  const chatId = requireChatId();
@@ -31840,13 +31881,13 @@ registerSchema({
31840
31881
  json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable list", required: false }
31841
31882
  }
31842
31883
  });
31843
- var draftCommand3 = defineCommand159({
31884
+ var draftCommand3 = defineCommand160({
31844
31885
  meta: {
31845
31886
  name: "draft",
31846
31887
  description: "List, show, amend, remove, or clear staged Tag Manager changes for this chat"
31847
31888
  },
31848
31889
  subCommands: {
31849
- list: defineCommand159({
31890
+ list: defineCommand160({
31850
31891
  meta: {
31851
31892
  name: "list",
31852
31893
  description: "Review everything staged on this chat (--json for the raw envelope)"
@@ -31856,7 +31897,7 @@ var draftCommand3 = defineCommand159({
31856
31897
  await draftList(args.json === true);
31857
31898
  }
31858
31899
  }),
31859
- show: defineCommand159({
31900
+ show: defineCommand160({
31860
31901
  meta: {
31861
31902
  name: "show",
31862
31903
  description: "Print the full staged payload for one change \u2014 the receipt to verify it looks right before publish (never truncated)."
@@ -31868,7 +31909,7 @@ var draftCommand3 = defineCommand159({
31868
31909
  });
31869
31910
  }
31870
31911
  }),
31871
- amend: defineCommand159({
31912
+ amend: defineCommand160({
31872
31913
  meta: {
31873
31914
  name: "amend",
31874
31915
  description: "Update a staged change in place \u2014 merges a JSON patch into its payload (objects deep-merge, null deletes a key, arrays/scalars replace) and re-validates. Use this instead of remove + re-create."
@@ -31885,7 +31926,7 @@ var draftCommand3 = defineCommand159({
31885
31926
  });
31886
31927
  }
31887
31928
  }),
31888
- remove: defineCommand159({
31929
+ remove: defineCommand160({
31889
31930
  meta: { name: "remove", description: "Remove one staged change (cascades to anything depending on it)" },
31890
31931
  args: { ref: { type: "positional", description: "Staged ref (gtm_temp_*) or target", required: false } },
31891
31932
  run: async ({ args }) => {
@@ -31894,7 +31935,7 @@ var draftCommand3 = defineCommand159({
31894
31935
  });
31895
31936
  }
31896
31937
  }),
31897
- clear: defineCommand159({
31938
+ clear: defineCommand160({
31898
31939
  meta: { name: "clear", description: "Discard all Tag Manager changes staged on this chat" },
31899
31940
  run: async () => {
31900
31941
  await draftAction2("/api/tag-manager/draft/clear", {});
@@ -31904,7 +31945,7 @@ var draftCommand3 = defineCommand159({
31904
31945
  });
31905
31946
 
31906
31947
  // src/commands/tag-manager/read.ts
31907
- import { defineCommand as defineCommand160 } from "citty";
31948
+ import { defineCommand as defineCommand161 } from "citty";
31908
31949
  registerSchema({
31909
31950
  command: "tagManager.containers",
31910
31951
  description: "List the Google Tag Manager containers this company's connection can reach. The connected container is flagged. Start here to confirm which container you are managing.",
@@ -31924,7 +31965,7 @@ registerSchema({
31924
31965
  full: { type: "boolean", description: "Include the raw Tag Manager object for each entity", required: false }
31925
31966
  }
31926
31967
  });
31927
- var containersCommand = defineCommand160({
31968
+ var containersCommand = defineCommand161({
31928
31969
  meta: {
31929
31970
  name: "containers",
31930
31971
  description: `List Tag Manager containers reachable by this company's connection.
@@ -31941,7 +31982,7 @@ Start here:
31941
31982
  }
31942
31983
  }
31943
31984
  });
31944
- var readCommand = defineCommand160({
31985
+ var readCommand = defineCommand161({
31945
31986
  meta: {
31946
31987
  name: "read",
31947
31988
  description: `Read the current contents of the Tag Manager container \u2014 always do this before staging changes.
@@ -31981,7 +32022,7 @@ Examples:
31981
32022
  });
31982
32023
 
31983
32024
  // src/commands/tag-manager/write-commands.ts
31984
- import { defineCommand as defineCommand161 } from "citty";
32025
+ import { defineCommand as defineCommand162 } from "citty";
31985
32026
  var ENTITIES = [
31986
32027
  {
31987
32028
  entity: "tag",
@@ -32033,10 +32074,10 @@ for (const { entity, noun, createHint } of ENTITIES) {
32033
32074
  });
32034
32075
  }
32035
32076
  function entityCommand(entity, noun, example) {
32036
- return defineCommand161({
32077
+ return defineCommand162({
32037
32078
  meta: { name: entity, description: `Stage ${noun} changes on this chat's Tag Manager draft` },
32038
32079
  subCommands: {
32039
- create: defineCommand161({
32080
+ create: defineCommand162({
32040
32081
  meta: {
32041
32082
  name: "create",
32042
32083
  description: `Stage a new ${noun}
@@ -32058,7 +32099,7 @@ Examples:
32058
32099
  });
32059
32100
  }
32060
32101
  }),
32061
- update: defineCommand161({
32102
+ update: defineCommand162({
32062
32103
  meta: {
32063
32104
  name: "update",
32064
32105
  description: `Stage an update to an existing ${noun} (pass its id or path)`
@@ -32078,7 +32119,7 @@ Examples:
32078
32119
  });
32079
32120
  }
32080
32121
  }),
32081
- delete: defineCommand161({
32122
+ delete: defineCommand162({
32082
32123
  meta: { name: "delete", description: `Stage the deletion of a ${noun} (pass its id or path)` },
32083
32124
  args: {
32084
32125
  id: { type: "positional", description: `${noun} id or path`, required: false },
@@ -32118,7 +32159,7 @@ function builtinTypes(args) {
32118
32159
  }
32119
32160
  return raw.split(",").map((entry) => entry.trim());
32120
32161
  }
32121
- var builtinCommand = defineCommand161({
32162
+ var builtinCommand = defineCommand162({
32122
32163
  meta: {
32123
32164
  name: "builtin",
32124
32165
  description: `Enable or disable built-in variables
@@ -32128,7 +32169,7 @@ Examples:
32128
32169
  baker tag-manager builtin disable --types formId`
32129
32170
  },
32130
32171
  subCommands: {
32131
- enable: defineCommand161({
32172
+ enable: defineCommand162({
32132
32173
  meta: { name: "enable", description: "Stage enabling built-in variables" },
32133
32174
  args: {
32134
32175
  types: { type: "string", description: "Comma-separated types", required: false },
@@ -32142,7 +32183,7 @@ Examples:
32142
32183
  });
32143
32184
  }
32144
32185
  }),
32145
- disable: defineCommand161({
32186
+ disable: defineCommand162({
32146
32187
  meta: { name: "disable", description: "Stage disabling built-in variables" },
32147
32188
  args: {
32148
32189
  types: { type: "string", description: "Comma-separated types", required: false },
@@ -32160,7 +32201,7 @@ Examples:
32160
32201
  });
32161
32202
 
32162
32203
  // src/commands/tag-manager/index.ts
32163
- var tagManagerCommand = defineCommand162({
32204
+ var tagManagerCommand = defineCommand163({
32164
32205
  meta: {
32165
32206
  name: "tag-manager",
32166
32207
  description: `Read and change what lives inside the client's Google Tag Manager container \u2014 tags, triggers, variables, folders and built-in variables.
@@ -32194,7 +32235,7 @@ Full guide: __tooling__/docs/tools/baker/tag-manager.md`
32194
32235
  });
32195
32236
 
32196
32237
  // src/commands/tags/index.ts
32197
- import { defineCommand as defineCommand163 } from "citty";
32238
+ import { defineCommand as defineCommand164 } from "citty";
32198
32239
 
32199
32240
  // src/commands/tags/shared.ts
32200
32241
  function failApi3(err) {
@@ -32263,7 +32304,7 @@ async function listTags(json) {
32263
32304
  var listArgs9 = {
32264
32305
  json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable list" }
32265
32306
  };
32266
- var listCommand15 = defineCommand163({
32307
+ var listCommand15 = defineCommand164({
32267
32308
  meta: {
32268
32309
  name: "list",
32269
32310
  description: "Effective tags for this chat (production + staged), with each tag's full readable config (secrets excluded) \u2014 reuse a stored value to pre-fill a change rather than asking the user. Refs printed here are what flow side-effect tagIds should use. Example: baker tags list"
@@ -32282,7 +32323,7 @@ async function listDraft3() {
32282
32323
  failApi3(err);
32283
32324
  }
32284
32325
  }
32285
- var draftCommand4 = defineCommand163({
32326
+ var draftCommand4 = defineCommand164({
32286
32327
  meta: {
32287
32328
  name: "draft",
32288
32329
  description: "Review the tag changes staged in this chat (read-only). Staged changes were approved via request_tag_input and apply when the chat is published; to amend or drop one, propose a follow-up change through the same tool (a delete on a tag_temp_* ref drops the staged create)."
@@ -32291,7 +32332,7 @@ var draftCommand4 = defineCommand163({
32291
32332
  await listDraft3();
32292
32333
  }
32293
32334
  });
32294
- var tagsCommand3 = defineCommand163({
32335
+ var tagsCommand3 = defineCommand164({
32295
32336
  meta: {
32296
32337
  name: "tags",
32297
32338
  description: `Read the client's marketing/analytics tags (Meta pixel, GA4, Google Ads, GTM, Clarity, Hotjar, \u2026) \u2014 production tags plus the changes staged in this chat.
@@ -32320,10 +32361,10 @@ Full guide: __tooling__/docs/tools/baker/tags.md`
32320
32361
  });
32321
32362
 
32322
32363
  // src/commands/testimonials/index.ts
32323
- import { defineCommand as defineCommand167 } from "citty";
32364
+ import { defineCommand as defineCommand168 } from "citty";
32324
32365
 
32325
32366
  // src/commands/testimonials/get.ts
32326
- import { defineCommand as defineCommand164 } from "citty";
32367
+ import { defineCommand as defineCommand165 } from "citty";
32327
32368
  registerSchema({
32328
32369
  command: "testimonials.get",
32329
32370
  description: "Get a single testimonial by ID",
@@ -32331,7 +32372,7 @@ registerSchema({
32331
32372
  id: { type: "string", description: "Testimonial ID", required: true }
32332
32373
  }
32333
32374
  });
32334
- var getCommand4 = defineCommand164({
32375
+ var getCommand4 = defineCommand165({
32335
32376
  meta: { name: "get", description: "Get a single testimonial by ID. Example: baker testimonials get j571abc123" },
32336
32377
  args: {
32337
32378
  id: { type: "positional", description: "Testimonial ID", required: false },
@@ -32368,7 +32409,7 @@ var getCommand4 = defineCommand164({
32368
32409
  });
32369
32410
 
32370
32411
  // src/commands/testimonials/list.ts
32371
- import { defineCommand as defineCommand165 } from "citty";
32412
+ import { defineCommand as defineCommand166 } from "citty";
32372
32413
  registerSchema({
32373
32414
  command: "testimonials.list",
32374
32415
  description: "List testimonials with optional filters.",
@@ -32398,7 +32439,7 @@ registerSchema({
32398
32439
  limit: { type: "number", description: "Max results (default 50)", required: false, default: 50 }
32399
32440
  }
32400
32441
  });
32401
- var listCommand16 = defineCommand165({
32442
+ var listCommand16 = defineCommand166({
32402
32443
  meta: {
32403
32444
  name: "list",
32404
32445
  description: "List testimonials with optional filters. Example: baker testimonials list --source google --sentiment positive"
@@ -32447,7 +32488,7 @@ var listCommand16 = defineCommand165({
32447
32488
  });
32448
32489
 
32449
32490
  // src/commands/testimonials/search.ts
32450
- import { defineCommand as defineCommand166 } from "citty";
32491
+ import { defineCommand as defineCommand167 } from "citty";
32451
32492
  function languageBiasHint(results, requestedLanguage) {
32452
32493
  if (requestedLanguage) {
32453
32494
  return null;
@@ -32525,7 +32566,7 @@ function buildSearchRequest(query, args) {
32525
32566
  }
32526
32567
  return body;
32527
32568
  }
32528
- var searchCommand2 = defineCommand166({
32569
+ var searchCommand2 = defineCommand167({
32529
32570
  meta: {
32530
32571
  name: "search",
32531
32572
  description: "Semantic search testimonials by text query. Uses hybrid BM25 + vector + reranking. Example: baker testimonials search 'great service' --rating-min 4"
@@ -32581,7 +32622,7 @@ var searchCommand2 = defineCommand166({
32581
32622
  var tagsCommand4 = makeTagsCommand("testimonials", "testimonial", "/api/testimonials/tags");
32582
32623
 
32583
32624
  // src/commands/testimonials/index.ts
32584
- var testimonialsCommand = defineCommand167({
32625
+ var testimonialsCommand = defineCommand168({
32585
32626
  meta: {
32586
32627
  name: "testimonials",
32587
32628
  description: `Find and browse testimonials in Baker. Subcommands: search, get, list, tags.
@@ -32603,10 +32644,10 @@ Full guide: __tooling__/docs/tools/baker/testimonials.md`
32603
32644
  });
32604
32645
 
32605
32646
  // src/commands/videos/index.ts
32606
- import { defineCommand as defineCommand172 } from "citty";
32647
+ import { defineCommand as defineCommand173 } from "citty";
32607
32648
 
32608
32649
  // src/commands/videos/delete.ts
32609
- import { defineCommand as defineCommand168 } from "citty";
32650
+ import { defineCommand as defineCommand169 } from "citty";
32610
32651
  registerSchema({
32611
32652
  command: "videos.delete",
32612
32653
  description: "Delete a video by ID",
@@ -32620,7 +32661,7 @@ registerSchema({
32620
32661
  }
32621
32662
  }
32622
32663
  });
32623
- var deleteCommand3 = defineCommand168({
32664
+ var deleteCommand3 = defineCommand169({
32624
32665
  meta: {
32625
32666
  name: "delete",
32626
32667
  description: "Delete a video by ID. Use --dry-run to preview. Example: baker videos delete j571abc123 --dry-run"
@@ -32661,7 +32702,7 @@ var deleteCommand3 = defineCommand168({
32661
32702
  });
32662
32703
 
32663
32704
  // src/commands/videos/get.ts
32664
- import { defineCommand as defineCommand169 } from "citty";
32705
+ import { defineCommand as defineCommand170 } from "citty";
32665
32706
  registerSchema({
32666
32707
  command: "videos.get",
32667
32708
  description: "Get a single video by ID",
@@ -32669,7 +32710,7 @@ registerSchema({
32669
32710
  id: { type: "string", description: "Video ID", required: true }
32670
32711
  }
32671
32712
  });
32672
- var getCommand5 = defineCommand169({
32713
+ var getCommand5 = defineCommand170({
32673
32714
  meta: { name: "get", description: "Get a single video by ID. Example: baker videos get j571abc123" },
32674
32715
  args: {
32675
32716
  id: { type: "positional", description: "Video ID", required: false },
@@ -32706,7 +32747,7 @@ var getCommand5 = defineCommand169({
32706
32747
  });
32707
32748
 
32708
32749
  // src/commands/videos/search.ts
32709
- import { defineCommand as defineCommand170 } from "citty";
32750
+ import { defineCommand as defineCommand171 } from "citty";
32710
32751
  registerSchema({
32711
32752
  command: "videos.search",
32712
32753
  description: "Search videos by text query. Only returns ready videos.",
@@ -32716,7 +32757,7 @@ registerSchema({
32716
32757
  tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
32717
32758
  }
32718
32759
  });
32719
- var searchCommand3 = defineCommand170({
32760
+ var searchCommand3 = defineCommand171({
32720
32761
  meta: {
32721
32762
  name: "search",
32722
32763
  description: "Semantic search videos by text query. Uses hybrid BM25 + vector + reranking. Example: baker videos search 'product demo' --tags tutorial"
@@ -32768,7 +32809,7 @@ var tagsCommand5 = makeTagsCommand("videos", "video", "/api/videos/tags");
32768
32809
  // src/commands/videos/upload.ts
32769
32810
  import { readFile as readFile23, stat as stat7 } from "fs/promises";
32770
32811
  import { extname as extname3 } from "path";
32771
- import { defineCommand as defineCommand171 } from "citty";
32812
+ import { defineCommand as defineCommand172 } from "citty";
32772
32813
  var MIME_MAP = {
32773
32814
  ".mp4": "video/mp4",
32774
32815
  ".mov": "video/quicktime",
@@ -32802,7 +32843,7 @@ function detectContentType(filePath) {
32802
32843
  }
32803
32844
  return mime;
32804
32845
  }
32805
- var uploadCommand2 = defineCommand171({
32846
+ var uploadCommand2 = defineCommand172({
32806
32847
  meta: {
32807
32848
  name: "upload",
32808
32849
  description: "Upload a video file to Baker via Mux direct upload. Auto-detects content type. Example: baker videos upload ./demo.mp4"
@@ -32856,7 +32897,7 @@ var uploadCommand2 = defineCommand171({
32856
32897
  });
32857
32898
 
32858
32899
  // src/commands/videos/index.ts
32859
- var videosCommand = defineCommand172({
32900
+ var videosCommand = defineCommand173({
32860
32901
  meta: {
32861
32902
  name: "videos",
32862
32903
  description: `Find and manage videos in Baker. Subcommands: search, get, upload, delete, tags.
@@ -32880,10 +32921,10 @@ Full guide: __tooling__/docs/tools/baker/videos.md`
32880
32921
  });
32881
32922
 
32882
32923
  // src/commands/winning-ads/index.ts
32883
- import { defineCommand as defineCommand185 } from "citty";
32924
+ import { defineCommand as defineCommand186 } from "citty";
32884
32925
 
32885
32926
  // src/commands/winning-ads/advertisers.ts
32886
- import { defineCommand as defineCommand173 } from "citty";
32927
+ import { defineCommand as defineCommand174 } from "citty";
32887
32928
 
32888
32929
  // src/commands/winning-ads/shared.ts
32889
32930
  function splitList(value) {
@@ -32936,7 +32977,7 @@ function advertiserNormalizer(record, full) {
32936
32977
  last_synced_at: record.last_synced_at ?? null
32937
32978
  };
32938
32979
  }
32939
- var advertisersCommand2 = defineCommand173({
32980
+ var advertisersCommand2 = defineCommand174({
32940
32981
  meta: {
32941
32982
  name: "advertisers",
32942
32983
  description: 'List corpus advertisers by name or domain. Find your own advertiser for --exclude-advertiser, or a competitor for --advertiser-id / winners. Example: baker winning-ads advertisers "Deel" --output md'
@@ -32994,7 +33035,7 @@ var advertisersCommand2 = defineCommand173({
32994
33035
  });
32995
33036
 
32996
33037
  // src/commands/winning-ads/brief.ts
32997
- import { defineCommand as defineCommand174 } from "citty";
33038
+ import { defineCommand as defineCommand175 } from "citty";
32998
33039
  registerSchema({
32999
33040
  command: "winning-ads.brief",
33000
33041
  description: "Generate a creative brief grounded in strategically-similar winning ads. Optionally describe the target creative with --dna (JSON) and steer with --notes.",
@@ -33040,7 +33081,7 @@ function parseDna(raw) {
33040
33081
  }
33041
33082
  return parsed;
33042
33083
  }
33043
- var briefCommand = defineCommand174({
33084
+ var briefCommand = defineCommand175({
33044
33085
  meta: {
33045
33086
  name: "brief",
33046
33087
  description: `Generate a creative brief from winning references. Example: baker winning-ads brief --dna '{"angle":"cost savings"}' --notes "B2B, LinkedIn video" --k 8`
@@ -33076,7 +33117,7 @@ var briefCommand = defineCommand174({
33076
33117
  });
33077
33118
 
33078
33119
  // src/commands/winning-ads/content.ts
33079
- import { defineCommand as defineCommand175 } from "citty";
33120
+ import { defineCommand as defineCommand176 } from "citty";
33080
33121
  registerSchema({
33081
33122
  command: "winning-ads.content",
33082
33123
  description: "Read what's INSIDE one winning ad: the spoken transcript, the on-screen text, and the ad copy. Use this after `search`/`winners`/`feed` return a shortlist \u2014 pass an ad_id to understand a reference before reproducing it. Add --full for speech, pacing, and soundtrack detail. Video ads carry the transcript/on-screen text; static ads carry only the copy.",
@@ -33089,7 +33130,7 @@ registerSchema({
33089
33130
  }
33090
33131
  }
33091
33132
  });
33092
- var contentCommand = defineCommand175({
33133
+ var contentCommand = defineCommand176({
33093
33134
  meta: {
33094
33135
  name: "content",
33095
33136
  description: "Read the transcript + on-screen text + copy of one winning ad. Example: baker winning-ads content adg_123 --platform meta --full --output md"
@@ -33138,7 +33179,7 @@ var contentCommand = defineCommand175({
33138
33179
  });
33139
33180
 
33140
33181
  // src/commands/winning-ads/feed.ts
33141
- import { defineCommand as defineCommand176 } from "citty";
33182
+ import { defineCommand as defineCommand177 } from "citty";
33142
33183
  function buildFeedParams(input) {
33143
33184
  const params = {};
33144
33185
  const advertiser = splitList(input.advertiser);
@@ -33190,7 +33231,7 @@ registerSchema({
33190
33231
  format: { type: "string", description: "Comma-separated formats to include (e.g. static,video)", required: false }
33191
33232
  }
33192
33233
  });
33193
- var feedCommand = defineCommand176({
33234
+ var feedCommand = defineCommand177({
33194
33235
  meta: {
33195
33236
  name: "feed",
33196
33237
  description: "Winners across every brand you follow (browse, then trim per advertiser). Example: baker winning-ads feed --per-advertiser 5 --output md"
@@ -33275,7 +33316,7 @@ var feedCommand = defineCommand176({
33275
33316
  });
33276
33317
 
33277
33318
  // src/commands/winning-ads/follow.ts
33278
- import { defineCommand as defineCommand177 } from "citty";
33319
+ import { defineCommand as defineCommand178 } from "citty";
33279
33320
  var PLATFORMS = ["meta", "linkedin"];
33280
33321
  registerSchema({
33281
33322
  command: "winning-ads.follow",
@@ -33290,7 +33331,7 @@ registerSchema({
33290
33331
  label: { type: "string", description: "Optional display label (defaults to the resolved name)", required: false }
33291
33332
  }
33292
33333
  });
33293
- var followCommand = defineCommand177({
33334
+ var followCommand = defineCommand178({
33294
33335
  meta: {
33295
33336
  name: "follow",
33296
33337
  description: 'Follow a brand to track ALL its ads \u2014 every platform and country. --platform is how we read your input, not a limit. A domain tracks both Meta + LinkedIn. Example: baker winning-ads follow "deel.com" --platform meta'
@@ -33337,7 +33378,7 @@ var followCommand = defineCommand177({
33337
33378
  });
33338
33379
 
33339
33380
  // src/commands/winning-ads/follow-competitors.ts
33340
- import { defineCommand as defineCommand178 } from "citty";
33381
+ import { defineCommand as defineCommand179 } from "citty";
33341
33382
  var PLATFORMS2 = ["meta", "linkedin"];
33342
33383
  var BATCH_TIMEOUT_MS = 3e5;
33343
33384
  function buildFollowBatchBody(input) {
@@ -33370,7 +33411,7 @@ registerSchema({
33370
33411
  }
33371
33412
  }
33372
33413
  });
33373
- var followCompetitorsCommand = defineCommand178({
33414
+ var followCompetitorsCommand = defineCommand179({
33374
33415
  meta: {
33375
33416
  name: "follow-competitors",
33376
33417
  description: 'Follow many brands at once by domain \u2014 add every competitor in one call. Example: baker winning-ads follow-competitors "deel.com,notion.so,hubspot.com"'
@@ -33445,7 +33486,7 @@ var followCompetitorsCommand = defineCommand178({
33445
33486
  });
33446
33487
 
33447
33488
  // src/commands/winning-ads/following.ts
33448
- import { defineCommand as defineCommand179 } from "citty";
33489
+ import { defineCommand as defineCommand180 } from "citty";
33449
33490
  registerSchema({
33450
33491
  command: "winning-ads.following",
33451
33492
  description: "List the brands you follow in your ad-dna library, with each one's status (ready vs still adding) and cached ad counts.",
@@ -33478,7 +33519,7 @@ function followingNormalizer(record, full) {
33478
33519
  platforms: Array.isArray(record.platforms) ? record.platforms : []
33479
33520
  };
33480
33521
  }
33481
- var followingCommand = defineCommand179({
33522
+ var followingCommand = defineCommand180({
33482
33523
  meta: {
33483
33524
  name: "following",
33484
33525
  description: "List brands you follow, with status (ready / adding\u2026) and cached counts. Example: baker winning-ads following --output md"
@@ -33513,7 +33554,7 @@ var followingCommand = defineCommand179({
33513
33554
  });
33514
33555
 
33515
33556
  // src/commands/winning-ads/patterns.ts
33516
- import { defineCommand as defineCommand180 } from "citty";
33557
+ import { defineCommand as defineCommand181 } from "citty";
33517
33558
  registerSchema({
33518
33559
  command: "winning-ads.patterns",
33519
33560
  description: "Mine what separates two cohorts of ads: pass a comma-list of winning ad ids (--winners) and a comma-list of weaker ad ids (--duds). Returns the discriminating DNA fields.",
@@ -33552,7 +33593,7 @@ function discriminatorRow(record) {
33552
33593
  top_values_duds: Array.isArray(record.top_values_b) ? record.top_values_b.join(", ") : ""
33553
33594
  };
33554
33595
  }
33555
- var patternsCommand = defineCommand180({
33596
+ var patternsCommand = defineCommand181({
33556
33597
  meta: {
33557
33598
  name: "patterns",
33558
33599
  description: "Discover what separates winning ads from weak ones. Example: baker winning-ads patterns --winners a_1,a_2,a_3 --duds a_9,a_8 --output md"
@@ -33608,7 +33649,7 @@ var patternsCommand = defineCommand180({
33608
33649
  });
33609
33650
 
33610
33651
  // src/commands/winning-ads/search.ts
33611
- import { defineCommand as defineCommand181 } from "citty";
33652
+ import { defineCommand as defineCommand182 } from "citty";
33612
33653
  registerSchema({
33613
33654
  command: "winning-ads.search",
33614
33655
  description: "Search the ad-dna corpus of scored winning ads. Returns a lean shortlist (advertiser, summary, scores, media_url) to pick a reference to reproduce.",
@@ -33716,7 +33757,7 @@ function buildSearchBody(args) {
33716
33757
  }
33717
33758
  return body;
33718
33759
  }
33719
- var searchCommand4 = defineCommand181({
33760
+ var searchCommand4 = defineCommand182({
33720
33761
  meta: {
33721
33762
  name: "search",
33722
33763
  description: "Search winning reference ads. Example: baker winning-ads search 'B2B SaaS before/after AI automation' --platform meta --format static --winner-category winner --exclude-advertiser adv_123 --output md"
@@ -33831,7 +33872,7 @@ var searchCommand4 = defineCommand181({
33831
33872
  });
33832
33873
 
33833
33874
  // src/commands/winning-ads/seeds.ts
33834
- import { defineCommand as defineCommand182 } from "citty";
33875
+ import { defineCommand as defineCommand183 } from "citty";
33835
33876
  function leanRow(r) {
33836
33877
  return {
33837
33878
  key: r.key,
@@ -33859,7 +33900,7 @@ function makeSeedCommand(opts) {
33859
33900
  limit: { type: "number", description: "Max keys 1-100 (default 20)", required: false, default: 20 }
33860
33901
  }
33861
33902
  });
33862
- return defineCommand182({
33903
+ return defineCommand183({
33863
33904
  meta: { name: opts.name, description: opts.description },
33864
33905
  args: {
33865
33906
  platform: { type: "string", description: "Single platform to segment on", required: false },
@@ -33908,7 +33949,7 @@ var formatsCommand = makeSeedCommand({
33908
33949
  });
33909
33950
 
33910
33951
  // src/commands/winning-ads/unfollow.ts
33911
- import { defineCommand as defineCommand183 } from "citty";
33952
+ import { defineCommand as defineCommand184 } from "citty";
33912
33953
  registerSchema({
33913
33954
  command: "winning-ads.unfollow",
33914
33955
  description: "Stop following a brand \u2014 removes it from your ad-dna library by advertiser id.",
@@ -33916,7 +33957,7 @@ registerSchema({
33916
33957
  advertiser: { type: "string", description: "Advertiser id to unfollow", required: true }
33917
33958
  }
33918
33959
  });
33919
- var unfollowCommand = defineCommand183({
33960
+ var unfollowCommand = defineCommand184({
33920
33961
  meta: {
33921
33962
  name: "unfollow",
33922
33963
  description: "Stop following a brand by advertiser id. Example: baker winning-ads unfollow adv_123"
@@ -33937,7 +33978,7 @@ var unfollowCommand = defineCommand183({
33937
33978
  });
33938
33979
 
33939
33980
  // src/commands/winning-ads/winners.ts
33940
- import { defineCommand as defineCommand184 } from "citty";
33981
+ import { defineCommand as defineCommand185 } from "citty";
33941
33982
  registerSchema({
33942
33983
  command: "winning-ads.winners",
33943
33984
  description: "Top winning ads for one advertiser id (from `advertisers` or `following`). Returns lean winner cards; add --full for DNA + longevity.",
@@ -33947,7 +33988,7 @@ registerSchema({
33947
33988
  platform: { type: "string", description: "Filter to a single platform: meta|linkedin", required: false }
33948
33989
  }
33949
33990
  });
33950
- var winnersCommand = defineCommand184({
33991
+ var winnersCommand = defineCommand185({
33951
33992
  meta: {
33952
33993
  name: "winners",
33953
33994
  description: "Top winning ads for a specific advertiser id. Example: baker winning-ads winners adv_123 --top 15 --output md"
@@ -33997,7 +34038,7 @@ var winnersCommand = defineCommand184({
33997
34038
  });
33998
34039
 
33999
34040
  // src/commands/winning-ads/index.ts
34000
- var winningAdsCommand = defineCommand185({
34041
+ var winningAdsCommand = defineCommand186({
34001
34042
  meta: {
34002
34043
  name: "winning-ads",
34003
34044
  description: `Search the ad-dna corpus of scored "winning" ads for reference creatives to reproduce, and manage the brands your library tracks. Proxied through the Baker backend (BAKER_API_KEY) \u2014 no separate token needed.
@@ -34069,7 +34110,7 @@ function getCliVersion() {
34069
34110
  }
34070
34111
 
34071
34112
  // src/cli.ts
34072
- var main = defineCommand186({
34113
+ var main = defineCommand187({
34073
34114
  meta: {
34074
34115
  name: "baker",
34075
34116
  version: getCliVersion(),