@koda-sl/baker-cli 0.95.1 → 0.96.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
@@ -12,10 +12,10 @@ import {
12
12
  } from "./chunk-RCPMJKI7.js";
13
13
 
14
14
  // src/cli.ts
15
- import { defineCommand as defineCommand144, runMain } from "citty";
15
+ import { defineCommand as defineCommand148, runMain } from "citty";
16
16
 
17
17
  // src/commands/actions/index.ts
18
- import { defineCommand as defineCommand13 } from "citty";
18
+ import { defineCommand as defineCommand17 } from "citty";
19
19
 
20
20
  // src/commands/actions/claim.ts
21
21
  import { defineCommand } from "citty";
@@ -465,6 +465,13 @@ function generateTempId() {
465
465
  function isTempId(id) {
466
466
  return id.startsWith("temp_");
467
467
  }
468
+ function parseTagList(value) {
469
+ if (typeof value !== "string") {
470
+ return void 0;
471
+ }
472
+ const tags = value.split(",").map((t) => t.trim()).filter((t) => t.length > 0);
473
+ return [...new Set(tags)];
474
+ }
468
475
  var SCHEDULE_SIGNALS = [
469
476
  /\brecurr(?:ing|ence)\b/i,
470
477
  /\bcadence\b/i,
@@ -563,7 +570,7 @@ var completeCommand = defineCommand2({
563
570
  import { defineCommand as defineCommand3 } from "citty";
564
571
  registerSchema({
565
572
  command: "actions.create",
566
- description: "Stage creation of a new action (applies when the chat is published). Returns a tempId you can use to link in the same draft. After creating, check if this action blocks or is blocked by other actions and wire dependencies with `baker actions link`.",
573
+ description: "Stage creation of a new action (applies when the chat is published). Returns a tempId you can use to link in the same draft. Tag the action with --tags (strongly encouraged \u2014 run `baker actions tags list` for the taxonomy). After creating, check if this action blocks or is blocked by other actions and wire dependencies with `baker actions link`.",
567
574
  args: {
568
575
  name: { type: "string", description: "Action name (short, action-verb, \u22646 words)", required: true },
569
576
  description: {
@@ -571,6 +578,11 @@ registerSchema({
571
578
  description: "Context-complete description: what / why / where / done-when",
572
579
  required: false
573
580
  },
581
+ tags: {
582
+ type: "string",
583
+ description: "Comma-separated tag slugs (e.g. google-ads,audit-finding). Must be known \u2014 see `baker actions tags list`.",
584
+ required: false
585
+ },
574
586
  "temp-id": { type: "string", description: "Custom tempId (auto-generated if omitted)", required: false }
575
587
  }
576
588
  });
@@ -582,6 +594,7 @@ var createCommand = defineCommand3({
582
594
  args: {
583
595
  name: { type: "string", description: "Action name", required: false },
584
596
  description: { type: "string", description: "Description", required: false, default: "" },
597
+ tags: { type: "string", description: "Comma-separated tag slugs (see `baker actions tags list`)", required: false },
585
598
  "temp-id": { type: "string", description: "Optional custom tempId", required: false }
586
599
  },
587
600
  run: async ({ args }) => {
@@ -592,11 +605,13 @@ var createCommand = defineCommand3({
592
605
  }
593
606
  const chatId = requireChatId();
594
607
  const tempId = args["temp-id"] || generateTempId();
608
+ const tags = parseTagList(args.tags);
595
609
  const response = await apiPost("/api/actions/create", {
596
610
  chatId,
597
611
  tempId,
598
612
  name,
599
- description: args.description ?? ""
613
+ description: args.description ?? "",
614
+ ...tags ? { tags } : {}
600
615
  });
601
616
  const hints = [];
602
617
  if (looksScheduled(name, args.description ?? "")) {
@@ -608,6 +623,11 @@ var createCommand = defineCommand3({
608
623
  if (!args.description) {
609
624
  hints.push("Add description: baker actions update <tempId> --description '...' (what/why/where/done-when)");
610
625
  }
626
+ if (!tags || tags.length === 0) {
627
+ hints.push(
628
+ "Tag this action so it's filterable in the backlog: re-run with --tags <slug,...> (run `baker actions tags list` for the taxonomy, or `baker actions update <tempId> --tags <slug,...>`)."
629
+ );
630
+ }
611
631
  writeJson({ ...response, hints });
612
632
  } catch (err) {
613
633
  failApi(err);
@@ -972,8 +992,132 @@ var statusCommand = defineCommand10({
972
992
  }
973
993
  });
974
994
 
975
- // src/commands/actions/unlink.ts
995
+ // src/commands/actions/tags/index.ts
996
+ import { defineCommand as defineCommand14 } from "citty";
997
+
998
+ // src/commands/actions/tags/create.ts
976
999
  import { defineCommand as defineCommand11 } from "citty";
1000
+ registerSchema({
1001
+ command: "actions.tags.create",
1002
+ description: "Create a company custom action tag, minting a new slug usable with --tags. The name is slugified (lowercased, spaces\u2192hyphens). Use when no existing tag fits the work.",
1003
+ args: {
1004
+ slug: { type: "string", description: "Tag name/slug (e.g. pmax, retargeting)", required: true },
1005
+ description: { type: "string", description: "What this tag means", required: false }
1006
+ }
1007
+ });
1008
+ var tagsCreateCommand = defineCommand11({
1009
+ meta: {
1010
+ name: "create",
1011
+ description: 'Create a custom action tag. Example: baker actions tags create --slug pmax --description "Performance Max work"'
1012
+ },
1013
+ args: {
1014
+ slug: { type: "string", description: "Tag name/slug", required: false },
1015
+ description: { type: "string", description: "Description", required: false }
1016
+ },
1017
+ run: async ({ args }) => {
1018
+ try {
1019
+ const slug = args.slug;
1020
+ if (!slug || slug.trim().length === 0) {
1021
+ failValidation("--slug is required.");
1022
+ }
1023
+ const response = await apiPost("/api/actions/tags/create", {
1024
+ name: slug,
1025
+ description: args.description
1026
+ });
1027
+ writeOk(response.data);
1028
+ } catch (err) {
1029
+ failApi(err);
1030
+ }
1031
+ }
1032
+ });
1033
+
1034
+ // src/commands/actions/tags/delete.ts
1035
+ import { defineCommand as defineCommand12 } from "citty";
1036
+ registerSchema({
1037
+ command: "actions.tags.delete",
1038
+ description: "Delete a company custom action tag by slug. Built-in default tags cannot be deleted. Existing actions keep the slug (it just stops appearing in the taxonomy).",
1039
+ args: {
1040
+ slug: { type: "string", description: "Custom tag slug to delete", required: true }
1041
+ }
1042
+ });
1043
+ var tagsDeleteCommand = defineCommand12({
1044
+ meta: {
1045
+ name: "delete",
1046
+ description: "Delete a custom action tag. Example: baker actions tags delete --slug pmax"
1047
+ },
1048
+ args: {
1049
+ slug: { type: "string", description: "Custom tag slug", required: false }
1050
+ },
1051
+ run: async ({ args }) => {
1052
+ try {
1053
+ const slug = args.slug;
1054
+ if (!slug || slug.trim().length === 0) {
1055
+ failValidation("--slug is required.");
1056
+ }
1057
+ await apiPost("/api/actions/tags/delete", { name: slug });
1058
+ writeOk();
1059
+ } catch (err) {
1060
+ failApi(err);
1061
+ }
1062
+ }
1063
+ });
1064
+
1065
+ // src/commands/actions/tags/list.ts
1066
+ import { defineCommand as defineCommand13 } from "citty";
1067
+ registerSchema({
1068
+ command: "actions.tags.list",
1069
+ description: "List the available action tag taxonomy (built-in defaults + this company's custom tags). Tags are strict \u2014 only these names are accepted by --tags. Run before tagging.",
1070
+ args: { output: { type: "string", description: "Output format: md|json", required: false, default: "md" } }
1071
+ });
1072
+ var tagsListCommand = defineCommand13({
1073
+ meta: {
1074
+ name: "list",
1075
+ description: "List available action tag names (defaults + company custom tags). Use before --tags. Example: baker actions tags list"
1076
+ },
1077
+ args: { output: { type: "string", description: "Output format: md|json", required: false, default: "md" } },
1078
+ run: async ({ args }) => {
1079
+ try {
1080
+ const { markdown } = await apiGet("/api/actions/tags");
1081
+ if (args.output === "json") {
1082
+ writeJson({ ok: true, data: { markdown } });
1083
+ return;
1084
+ }
1085
+ process.stdout.write(`${markdown.trimEnd()}
1086
+ `);
1087
+ } catch (err) {
1088
+ const code = err instanceof ApiError ? err.code : "INTERNAL_ERROR";
1089
+ const message = err instanceof ApiError ? err.message : "Unexpected error";
1090
+ if (args.output === "json") {
1091
+ writeJson({ ok: false, error: { code, message } });
1092
+ } else {
1093
+ process.stderr.write(`Error: ${message}
1094
+ `);
1095
+ }
1096
+ process.exit(1);
1097
+ }
1098
+ }
1099
+ });
1100
+
1101
+ // src/commands/actions/tags/index.ts
1102
+ var tagsCommand = defineCommand14({
1103
+ meta: {
1104
+ name: "tags",
1105
+ description: `Manage the action tag taxonomy (built-in defaults + company custom tags). Tags are strict \u2014 only listed names work with --tags on create/update.
1106
+
1107
+ Examples:
1108
+ baker actions tags list # available tags (defaults + custom)
1109
+ baker actions tags create --slug pmax --description "\u2026" # mint a custom tag
1110
+ baker actions tags delete --slug pmax # remove a custom tag`
1111
+ },
1112
+ subCommands: {
1113
+ list: tagsListCommand,
1114
+ create: tagsCreateCommand,
1115
+ delete: tagsDeleteCommand
1116
+ }
1117
+ });
1118
+
1119
+ // src/commands/actions/unlink.ts
1120
+ import { defineCommand as defineCommand15 } from "citty";
977
1121
  registerSchema({
978
1122
  command: "actions.unlink",
979
1123
  description: "Stage removal of a 'blocker -> blocked' dependency. The blocked action must be claimed by current chat.",
@@ -982,7 +1126,7 @@ registerSchema({
982
1126
  blocked: { type: "string", description: "Blocked action ID (must be claimed by current chat)", required: true }
983
1127
  }
984
1128
  });
985
- var unlinkCommand = defineCommand11({
1129
+ var unlinkCommand = defineCommand15({
986
1130
  meta: {
987
1131
  name: "unlink",
988
1132
  description: "Stage removal of a dependency. Example: baker actions unlink --blocker <id> --blocked <id>"
@@ -1014,17 +1158,22 @@ var unlinkCommand = defineCommand11({
1014
1158
  });
1015
1159
 
1016
1160
  // src/commands/actions/update.ts
1017
- import { defineCommand as defineCommand12 } from "citty";
1161
+ import { defineCommand as defineCommand16 } from "citty";
1018
1162
  registerSchema({
1019
1163
  command: "actions.update",
1020
- description: "Stage an update on a claimed action (name and/or description). Applies on publish.",
1164
+ description: "Stage an update on a claimed action (name, description, and/or tags). Applies on publish. --tags REPLACES the tag set; pass --tags '' to clear all tags. Tags must be known \u2014 see `baker actions tags list`.",
1021
1165
  args: {
1022
1166
  id: { type: "string", description: "Action ID (must be claimed by current chat)", required: true },
1023
1167
  name: { type: "string", description: "New name", required: false },
1024
- description: { type: "string", description: "New description", required: false }
1168
+ description: { type: "string", description: "New description", required: false },
1169
+ tags: {
1170
+ type: "string",
1171
+ description: "Comma-separated tag slugs \u2014 REPLACES existing tags ('' clears)",
1172
+ required: false
1173
+ }
1025
1174
  }
1026
1175
  });
1027
- var updateCommand = defineCommand12({
1176
+ var updateCommand = defineCommand16({
1028
1177
  meta: {
1029
1178
  name: "update",
1030
1179
  description: 'Stage an update on a claimed action. Example: baker actions update <id> --name "New name"'
@@ -1033,7 +1182,8 @@ var updateCommand = defineCommand12({
1033
1182
  id: { type: "positional", description: "Action ID", required: false },
1034
1183
  "action-id": { type: "string", description: "Action ID", required: false },
1035
1184
  name: { type: "string", description: "New name", required: false },
1036
- description: { type: "string", description: "New description", required: false }
1185
+ description: { type: "string", description: "New description", required: false },
1186
+ tags: { type: "string", description: "Comma-separated tag slugs \u2014 REPLACES existing ('' clears)", required: false }
1037
1187
  },
1038
1188
  run: async ({ args }) => {
1039
1189
  try {
@@ -1042,15 +1192,17 @@ var updateCommand = defineCommand12({
1042
1192
  failValidation("Action ID is required.");
1043
1193
  }
1044
1194
  validateConvexId(id);
1045
- if (args.name === void 0 && args.description === void 0) {
1046
- failValidation("Provide at least one of --name, --description.");
1195
+ const tags = parseTagList(args.tags);
1196
+ if (args.name === void 0 && args.description === void 0 && tags === void 0) {
1197
+ failValidation("Provide at least one of --name, --description, --tags.");
1047
1198
  }
1048
1199
  const chatId = requireChatId();
1049
1200
  await apiPost("/api/actions/update", {
1050
1201
  chatId,
1051
1202
  actionId: id,
1052
1203
  name: args.name,
1053
- description: args.description
1204
+ description: args.description,
1205
+ ...tags !== void 0 ? { tags } : {}
1054
1206
  });
1055
1207
  writeOk();
1056
1208
  } catch (err) {
@@ -1060,7 +1212,7 @@ var updateCommand = defineCommand12({
1060
1212
  });
1061
1213
 
1062
1214
  // src/commands/actions/index.ts
1063
- var actionsCommand = defineCommand13({
1215
+ var actionsCommand = defineCommand17({
1064
1216
  meta: {
1065
1217
  name: "actions",
1066
1218
  description: `Manage action items for the current chat. Subcommands: list, draft, get, status, claim, release, create, update, complete, discard, link, unlink.
@@ -1075,8 +1227,9 @@ Examples:
1075
1227
  baker actions draft remove temp_hero # drop a staged create (cascades its complete/link ops)
1076
1228
  baker actions draft clear # drop everything staged in this chat
1077
1229
  baker actions status temp_hero jx123 # batch resolve real IDs and temp_* refs
1230
+ baker actions tags list # available tags (defaults + company custom)
1078
1231
  baker actions claim <id>
1079
- baker actions create --name "Build hero" --description "..."
1232
+ baker actions create --name "Build hero" --tags landing,creative --description "..."
1080
1233
  baker actions complete <id>
1081
1234
  baker actions discard <id> --reason "obsolete"`
1082
1235
  },
@@ -1092,18 +1245,19 @@ Examples:
1092
1245
  complete: completeCommand,
1093
1246
  discard: discardCommand,
1094
1247
  link: linkCommand,
1095
- unlink: unlinkCommand
1248
+ unlink: unlinkCommand,
1249
+ tags: tagsCommand
1096
1250
  }
1097
1251
  });
1098
1252
 
1099
1253
  // src/commands/ads/index.ts
1100
- import { defineCommand as defineCommand73 } from "citty";
1254
+ import { defineCommand as defineCommand77 } from "citty";
1101
1255
 
1102
1256
  // src/commands/ads/google/index.ts
1103
- import { defineCommand as defineCommand24 } from "citty";
1257
+ import { defineCommand as defineCommand28 } from "citty";
1104
1258
 
1105
1259
  // src/commands/ads/google/accounts.ts
1106
- import { defineCommand as defineCommand14 } from "citty";
1260
+ import { defineCommand as defineCommand18 } from "citty";
1107
1261
 
1108
1262
  // src/commands/ads/cache.ts
1109
1263
  import { createHash } from "crypto";
@@ -1379,7 +1533,7 @@ function handleAccountsError(err) {
1379
1533
  writeAdsJson({ ok: false, error: { code: "NETWORK_ERROR", message: "Unexpected error" } });
1380
1534
  process.exit(1);
1381
1535
  }
1382
- var accountsCommand = defineCommand14({
1536
+ var accountsCommand = defineCommand18({
1383
1537
  meta: {
1384
1538
  name: "accounts",
1385
1539
  description: `List accessible Google Ads accounts. Returns customer IDs needed for all other commands.
@@ -1419,7 +1573,7 @@ Examples:
1419
1573
  });
1420
1574
 
1421
1575
  // src/commands/ads/google/changes.ts
1422
- import { defineCommand as defineCommand15 } from "citty";
1576
+ import { defineCommand as defineCommand19 } from "citty";
1423
1577
 
1424
1578
  // src/commands/ads/field-descriptions.ts
1425
1579
  var FIELD_DESCRIPTIONS = {
@@ -1971,7 +2125,7 @@ registerSchema({
1971
2125
  output: { type: "string", description: "Format: json|csv|jsonl|md", required: false, default: "json" }
1972
2126
  }
1973
2127
  });
1974
- var changesCommand = defineCommand15({
2128
+ var changesCommand = defineCommand19({
1975
2129
  meta: {
1976
2130
  name: "changes",
1977
2131
  description: `Get recent changes in a Google Ads account with performance data.
@@ -2022,7 +2176,7 @@ Examples:
2022
2176
  });
2023
2177
 
2024
2178
  // src/commands/ads/google/currency.ts
2025
- import { defineCommand as defineCommand16 } from "citty";
2179
+ import { defineCommand as defineCommand20 } from "citty";
2026
2180
  registerSchema({
2027
2181
  command: "ads.google.currency",
2028
2182
  description: "Get the currency code for a Google Ads account. Returns currency_code, customer_id, account_name, and access_type. Call this before interpreting cost_micros values.",
@@ -2034,7 +2188,7 @@ registerSchema({
2034
2188
  }
2035
2189
  }
2036
2190
  });
2037
- var currencyCommand = defineCommand16({
2191
+ var currencyCommand = defineCommand20({
2038
2192
  meta: {
2039
2193
  name: "currency",
2040
2194
  description: `Get account currency code. Use this to interpret metrics.cost_micros values.
@@ -2083,10 +2237,10 @@ Examples:
2083
2237
  });
2084
2238
 
2085
2239
  // src/commands/ads/google/keywords/index.ts
2086
- import { defineCommand as defineCommand21 } from "citty";
2240
+ import { defineCommand as defineCommand25 } from "citty";
2087
2241
 
2088
2242
  // src/commands/ads/google/keywords/discover.ts
2089
- import { defineCommand as defineCommand17 } from "citty";
2243
+ import { defineCommand as defineCommand21 } from "citty";
2090
2244
 
2091
2245
  // src/geo-context.ts
2092
2246
  var GOOGLE_ADS_LOCATIONS = [
@@ -2361,7 +2515,7 @@ function handleKeywordError(err) {
2361
2515
  writeAdsJson({ ok: false, error: { code: "NETWORK_ERROR", message: "Unexpected error" } });
2362
2516
  process.exit(1);
2363
2517
  }
2364
- var discoverCommand = defineCommand17({
2518
+ var discoverCommand = defineCommand21({
2365
2519
  meta: {
2366
2520
  name: "discover",
2367
2521
  description: `Discover new keyword ideas from seed keywords or competitor URLs.
@@ -2423,7 +2577,7 @@ Examples:
2423
2577
  });
2424
2578
 
2425
2579
  // src/commands/ads/google/keywords/languages.ts
2426
- import { defineCommand as defineCommand18 } from "citty";
2580
+ import { defineCommand as defineCommand22 } from "citty";
2427
2581
  registerSchema({
2428
2582
  command: "ads.google.keywords.languages",
2429
2583
  description: "List all supported language IDs for --language flag in Google Ads keyword commands.",
@@ -2433,7 +2587,7 @@ var FIELDS = {
2433
2587
  id: "Language ID to pass as --language",
2434
2588
  name: "Language name"
2435
2589
  };
2436
- var languagesCommand = defineCommand18({
2590
+ var languagesCommand = defineCommand22({
2437
2591
  meta: {
2438
2592
  name: "languages",
2439
2593
  description: "List all supported language IDs for --language flag."
@@ -2444,7 +2598,7 @@ var languagesCommand = defineCommand18({
2444
2598
  });
2445
2599
 
2446
2600
  // src/commands/ads/google/keywords/locations.ts
2447
- import { defineCommand as defineCommand19 } from "citty";
2601
+ import { defineCommand as defineCommand23 } from "citty";
2448
2602
  registerSchema({
2449
2603
  command: "ads.google.keywords.locations",
2450
2604
  description: "List all supported geo target IDs for --location flag in Google Ads keyword commands.",
@@ -2454,7 +2608,7 @@ var FIELDS2 = {
2454
2608
  id: "Geo target ID to pass as --location",
2455
2609
  name: "Country/region name"
2456
2610
  };
2457
- var locationsCommand = defineCommand19({
2611
+ var locationsCommand = defineCommand23({
2458
2612
  meta: {
2459
2613
  name: "locations",
2460
2614
  description: "List all supported geo target IDs for --location flag."
@@ -2465,7 +2619,7 @@ var locationsCommand = defineCommand19({
2465
2619
  });
2466
2620
 
2467
2621
  // src/commands/ads/google/keywords/metrics.ts
2468
- import { defineCommand as defineCommand20 } from "citty";
2622
+ import { defineCommand as defineCommand24 } from "citty";
2469
2623
  registerSchema({
2470
2624
  command: "ads.google.keywords.metrics",
2471
2625
  description: "Get historical metrics for specific keywords. Returns { historical_metrics: [...] } with snake_case fields matching the Google Ads API. IMPORTANT: If --location and --language are omitted, defaults to United States (2840) and English (1000). The response includes a query_context object showing which location/language were used.",
@@ -2489,7 +2643,7 @@ registerSchema({
2489
2643
  output: { type: "string", description: "Format: json|csv|jsonl|md", required: false, default: "json" }
2490
2644
  }
2491
2645
  });
2492
- var metricsCommand = defineCommand20({
2646
+ var metricsCommand = defineCommand24({
2493
2647
  meta: {
2494
2648
  name: "metrics",
2495
2649
  description: `Get historical search metrics for specific keywords.
@@ -2576,7 +2730,7 @@ Examples:
2576
2730
  });
2577
2731
 
2578
2732
  // src/commands/ads/google/keywords/index.ts
2579
- var keywordsCommand = defineCommand21({
2733
+ var keywordsCommand = defineCommand25({
2580
2734
  meta: {
2581
2735
  name: "keywords",
2582
2736
  description: `Keyword research tools. Subcommands: discover, metrics, locations, languages.
@@ -2596,8 +2750,8 @@ Examples:
2596
2750
  });
2597
2751
 
2598
2752
  // src/commands/ads/google/library/index.ts
2599
- import { defineCommand as defineCommand22 } from "citty";
2600
- var listAdvertisers = defineCommand22({
2753
+ import { defineCommand as defineCommand26 } from "citty";
2754
+ var listAdvertisers = defineCommand26({
2601
2755
  meta: {
2602
2756
  name: "list-advertisers",
2603
2757
  description: "List tracked Google advertisers and their accounts"
@@ -2614,7 +2768,7 @@ var listAdvertisers = defineCommand22({
2614
2768
  }
2615
2769
  }
2616
2770
  });
2617
- var syncStatus = defineCommand22({
2771
+ var syncStatus = defineCommand26({
2618
2772
  meta: {
2619
2773
  name: "sync-status",
2620
2774
  description: "Check the sync status and ad counts of a Google account"
@@ -2634,7 +2788,7 @@ var syncStatus = defineCommand22({
2634
2788
  writeAdsJson({ ok: true, data });
2635
2789
  }
2636
2790
  });
2637
- var searchAds = defineCommand22({
2791
+ var searchAds = defineCommand26({
2638
2792
  meta: {
2639
2793
  name: "search-ads",
2640
2794
  description: "Search and filter Google ads for an account"
@@ -2691,7 +2845,7 @@ var searchAds = defineCommand22({
2691
2845
  }
2692
2846
  }
2693
2847
  });
2694
- var searchAdvertiser = defineCommand22({
2848
+ var searchAdvertiser = defineCommand26({
2695
2849
  meta: {
2696
2850
  name: "search-advertiser",
2697
2851
  description: "Search for an advertiser on the Google Ads Transparency Center"
@@ -2726,7 +2880,7 @@ var searchAdvertiser = defineCommand22({
2726
2880
  function sleep(ms) {
2727
2881
  return new Promise((resolve5) => setTimeout(resolve5, ms));
2728
2882
  }
2729
- var track = defineCommand22({
2883
+ var track = defineCommand26({
2730
2884
  meta: {
2731
2885
  name: "track",
2732
2886
  description: "Track a new Google advertiser (from search results). Waits for initial sync to complete before returning."
@@ -2784,7 +2938,7 @@ var track = defineCommand22({
2784
2938
  process.exit(1);
2785
2939
  }
2786
2940
  });
2787
- var sync = defineCommand22({
2941
+ var sync = defineCommand26({
2788
2942
  meta: {
2789
2943
  name: "sync",
2790
2944
  description: "Trigger an immediate sync for a Google account. Waits for completion before returning."
@@ -2828,7 +2982,7 @@ var sync = defineCommand22({
2828
2982
  process.exit(1);
2829
2983
  }
2830
2984
  });
2831
- var searchCompetitors = defineCommand22({
2985
+ var searchCompetitors = defineCommand26({
2832
2986
  meta: {
2833
2987
  name: "search-competitors",
2834
2988
  description: "Search for competitors running Google ads for a keyword (DataForSEO)"
@@ -2860,7 +3014,7 @@ var searchCompetitors = defineCommand22({
2860
3014
  }
2861
3015
  }
2862
3016
  });
2863
- var library = defineCommand22({
3017
+ var library = defineCommand26({
2864
3018
  meta: {
2865
3019
  name: "library",
2866
3020
  description: "Manage and search the Google Ads Library"
@@ -2879,7 +3033,7 @@ var library = defineCommand22({
2879
3033
  // src/commands/ads/google/query.ts
2880
3034
  import { appendFileSync, existsSync as existsSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "fs";
2881
3035
  import { resolve } from "path";
2882
- import { defineCommand as defineCommand23 } from "citty";
3036
+ import { defineCommand as defineCommand27 } from "citty";
2883
3037
 
2884
3038
  // src/commands/ads/google/preflight.ts
2885
3039
  function buildCommand2(query, customerId) {
@@ -3335,7 +3489,7 @@ function handleQueryError(err, finalQuery, customerId) {
3335
3489
  });
3336
3490
  process.exit(1);
3337
3491
  }
3338
- var queryCommand = defineCommand23({
3492
+ var queryCommand = defineCommand27({
3339
3493
  meta: {
3340
3494
  name: "query",
3341
3495
  description: `Run GAQL queries against Google Ads. Supports raw GAQL, presets, pagination, file export, and caching.
@@ -3393,7 +3547,7 @@ Examples:
3393
3547
  });
3394
3548
 
3395
3549
  // src/commands/ads/google/index.ts
3396
- var googleCommand = defineCommand24({
3550
+ var googleCommand = defineCommand28({
3397
3551
  meta: {
3398
3552
  name: "google",
3399
3553
  description: `Google Ads commands. Query campaigns, keywords, search terms, and more via GAQL.
@@ -3421,7 +3575,7 @@ Examples:
3421
3575
  });
3422
3576
 
3423
3577
  // src/commands/ads/linkedin/index.ts
3424
- import { defineCommand as defineCommand42 } from "citty";
3578
+ import { defineCommand as defineCommand46 } from "citty";
3425
3579
 
3426
3580
  // src/commands/ads/linkedin/schemas.ts
3427
3581
  registerSchema({
@@ -3721,7 +3875,7 @@ registerSchema({
3721
3875
  });
3722
3876
 
3723
3877
  // src/commands/ads/linkedin/account.ts
3724
- import { defineCommand as defineCommand25 } from "citty";
3878
+ import { defineCommand as defineCommand29 } from "citty";
3725
3879
 
3726
3880
  // src/commands/ads/linkedin/shared.ts
3727
3881
  var DAY_MS = 864e5;
@@ -3824,7 +3978,7 @@ function resolveStatusFilter(args) {
3824
3978
  }
3825
3979
 
3826
3980
  // src/commands/ads/linkedin/account.ts
3827
- var accountCommand = defineCommand25({
3981
+ var accountCommand = defineCommand29({
3828
3982
  meta: {
3829
3983
  name: "account",
3830
3984
  description: `Single LinkedIn ad account detail (currency, status, type).
@@ -3858,9 +4012,9 @@ Examples:
3858
4012
  });
3859
4013
 
3860
4014
  // src/commands/ads/linkedin/accounts.ts
3861
- import { defineCommand as defineCommand26 } from "citty";
4015
+ import { defineCommand as defineCommand30 } from "citty";
3862
4016
  var ACCOUNTS_TTL_MS = 60 * 60 * 1e3;
3863
- var accountsCommand2 = defineCommand26({
4017
+ var accountsCommand2 = defineCommand30({
3864
4018
  meta: {
3865
4019
  name: "accounts",
3866
4020
  description: `List LinkedIn ad accounts in this company's connected scope.
@@ -3908,7 +4062,7 @@ Examples:
3908
4062
  });
3909
4063
 
3910
4064
  // src/commands/ads/linkedin/analytics.ts
3911
- import { defineCommand as defineCommand27 } from "citty";
4065
+ import { defineCommand as defineCommand31 } from "citty";
3912
4066
 
3913
4067
  // src/commands/ads/linkedin/presets.ts
3914
4068
  var INTENTS = {
@@ -4180,7 +4334,7 @@ function numberOf(v) {
4180
4334
  }
4181
4335
  return 0;
4182
4336
  }
4183
- var analyticsCommand = defineCommand27({
4337
+ var analyticsCommand = defineCommand31({
4184
4338
  meta: {
4185
4339
  name: "analytics",
4186
4340
  description: `Performance reporting \u2014 the workhorse for AI agents.
@@ -4308,7 +4462,7 @@ Examples \u2014 common AI questions:
4308
4462
 
4309
4463
  // src/commands/ads/linkedin/audience-size.ts
4310
4464
  import { readFileSync as readFileSync3 } from "fs";
4311
- import { defineCommand as defineCommand28 } from "citty";
4465
+ import { defineCommand as defineCommand32 } from "citty";
4312
4466
  function loadTargeting(args) {
4313
4467
  const inline = args.targeting;
4314
4468
  if (inline) {
@@ -4330,7 +4484,7 @@ function loadTargeting(args) {
4330
4484
  }
4331
4485
  handleLinkedinError(new Error("Pass --targeting-file <path> or --targeting '{...JSON...}'"));
4332
4486
  }
4333
- var audienceSizeCommand = defineCommand28({
4487
+ var audienceSizeCommand = defineCommand32({
4334
4488
  meta: {
4335
4489
  name: "audience-size",
4336
4490
  description: `Estimate audience size for a targeting payload \u2014 pre-launch sanity check.
@@ -4375,7 +4529,7 @@ Examples:
4375
4529
  });
4376
4530
 
4377
4531
  // src/commands/ads/linkedin/audit.ts
4378
- import { defineCommand as defineCommand29 } from "citty";
4532
+ import { defineCommand as defineCommand33 } from "citty";
4379
4533
  var SEVERITY_RANK = {
4380
4534
  critical: 0,
4381
4535
  high: 1,
@@ -4434,7 +4588,7 @@ function noteOf(f) {
4434
4588
  const fix = f.fix?.explanation ?? "";
4435
4589
  return [fix, ev].filter(Boolean).join(" \u2014 ");
4436
4590
  }
4437
- var auditCommand = defineCommand29({
4591
+ var auditCommand = defineCommand33({
4438
4592
  meta: {
4439
4593
  name: "audit",
4440
4594
  description: `Run a LinkedIn Ads playbook audit \u2014 30+ checks across Settings, Tracking,
@@ -4501,7 +4655,7 @@ Examples:
4501
4655
 
4502
4656
  // src/commands/ads/linkedin/bid-pricing.ts
4503
4657
  import { readFileSync as readFileSync4 } from "fs";
4504
- import { defineCommand as defineCommand30 } from "citty";
4658
+ import { defineCommand as defineCommand34 } from "citty";
4505
4659
  function loadTargeting2(args) {
4506
4660
  const inline = args.targeting;
4507
4661
  if (inline) {
@@ -4523,7 +4677,7 @@ function loadTargeting2(args) {
4523
4677
  }
4524
4678
  handleLinkedinError(new Error("Pass --targeting-file <path> or --targeting '{...JSON...}'"));
4525
4679
  }
4526
- var bidPricingCommand = defineCommand30({
4680
+ var bidPricingCommand = defineCommand34({
4527
4681
  meta: {
4528
4682
  name: "bid-pricing",
4529
4683
  description: `Get LinkedIn's suggested bid range for a targeting + objective + cost type.
@@ -4573,8 +4727,8 @@ Examples:
4573
4727
  });
4574
4728
 
4575
4729
  // src/commands/ads/linkedin/campaign-groups.ts
4576
- import { defineCommand as defineCommand31 } from "citty";
4577
- var campaignGroupsCommand = defineCommand31({
4730
+ import { defineCommand as defineCommand35 } from "citty";
4731
+ var campaignGroupsCommand = defineCommand35({
4578
4732
  meta: {
4579
4733
  name: "campaign-groups",
4580
4734
  description: `List LinkedIn campaign groups.
@@ -4617,8 +4771,8 @@ Examples:
4617
4771
  });
4618
4772
 
4619
4773
  // src/commands/ads/linkedin/campaigns.ts
4620
- import { defineCommand as defineCommand32 } from "citty";
4621
- var campaignsCommand = defineCommand32({
4774
+ import { defineCommand as defineCommand36 } from "citty";
4775
+ var campaignsCommand = defineCommand36({
4622
4776
  meta: {
4623
4777
  name: "campaigns",
4624
4778
  description: `List LinkedIn campaigns.
@@ -4667,8 +4821,8 @@ Examples:
4667
4821
  });
4668
4822
 
4669
4823
  // src/commands/ads/linkedin/conversation.ts
4670
- import { defineCommand as defineCommand33 } from "citty";
4671
- var conversationCommand = defineCommand33({
4824
+ import { defineCommand as defineCommand37 } from "citty";
4825
+ var conversationCommand = defineCommand37({
4672
4826
  meta: {
4673
4827
  name: "conversation",
4674
4828
  description: `Per-button click rates inside Sponsored Messaging / Conversation Ads.
@@ -4731,7 +4885,7 @@ Examples:
4731
4885
  });
4732
4886
 
4733
4887
  // src/commands/ads/linkedin/conversions.ts
4734
- import { defineCommand as defineCommand34 } from "citty";
4888
+ import { defineCommand as defineCommand38 } from "citty";
4735
4889
  var DAY_MS2 = 864e5;
4736
4890
  function healthOf(rules) {
4737
4891
  const enabled = rules.filter((r) => r.enabled !== false);
@@ -4757,7 +4911,7 @@ function healthOf(rules) {
4757
4911
  wrongLeadDedup: wrongDedup
4758
4912
  };
4759
4913
  }
4760
- var listCmd = defineCommand34({
4914
+ var listCmd = defineCommand38({
4761
4915
  meta: {
4762
4916
  name: "list",
4763
4917
  description: `List conversion rules on the account.`
@@ -4785,7 +4939,7 @@ var listCmd = defineCommand34({
4785
4939
  }
4786
4940
  }
4787
4941
  });
4788
- var healthCmd = defineCommand34({
4942
+ var healthCmd = defineCommand38({
4789
4943
  meta: {
4790
4944
  name: "health",
4791
4945
  description: `5-point Insight Tag / CAPI health check (playbook \xA707).
@@ -4815,7 +4969,7 @@ Surfaces:
4815
4969
  }
4816
4970
  }
4817
4971
  });
4818
- var conversionsCommand = defineCommand34({
4972
+ var conversionsCommand = defineCommand38({
4819
4973
  meta: {
4820
4974
  name: "conversions",
4821
4975
  description: `Conversion rules \u2014 Insight Tag and Conversions API.
@@ -4831,8 +4985,8 @@ Subcommands:
4831
4985
  });
4832
4986
 
4833
4987
  // src/commands/ads/linkedin/creatives.ts
4834
- import { defineCommand as defineCommand35 } from "citty";
4835
- var creativesCommand = defineCommand35({
4988
+ import { defineCommand as defineCommand39 } from "citty";
4989
+ var creativesCommand = defineCommand39({
4836
4990
  meta: {
4837
4991
  name: "creatives",
4838
4992
  description: `List LinkedIn creatives (ads).
@@ -4881,7 +5035,7 @@ Examples:
4881
5035
  });
4882
5036
 
4883
5037
  // src/commands/ads/linkedin/demographics.ts
4884
- import { defineCommand as defineCommand36 } from "citty";
5038
+ import { defineCommand as defineCommand40 } from "citty";
4885
5039
  var DEFAULT_PIVOTS = ["job-title", "company", "industry", "seniority", "job-function", "company-size"];
4886
5040
  function numberOf2(v) {
4887
5041
  if (typeof v === "number") return Number.isFinite(v) ? v : 0;
@@ -4894,7 +5048,7 @@ function numberOf2(v) {
4894
5048
  function topByImpressions(rows, limit) {
4895
5049
  return [...rows].sort((a, b) => numberOf2(b.impressions) - numberOf2(a.impressions)).slice(0, limit);
4896
5050
  }
4897
- var demographicsCommand = defineCommand36({
5051
+ var demographicsCommand = defineCommand40({
4898
5052
  meta: {
4899
5053
  name: "demographics",
4900
5054
  description: `Sweep all firmographic pivots in one command \u2014 LinkedIn's superpower.
@@ -4991,8 +5145,8 @@ function resolveRange(args) {
4991
5145
  }
4992
5146
 
4993
5147
  // src/commands/ads/linkedin/facets.ts
4994
- import { defineCommand as defineCommand37 } from "citty";
4995
- var listCmd2 = defineCommand37({
5148
+ import { defineCommand as defineCommand41 } from "citty";
5149
+ var listCmd2 = defineCommand41({
4996
5150
  meta: {
4997
5151
  name: "list",
4998
5152
  description: `List every targeting facet LinkedIn supports.
@@ -5020,7 +5174,7 @@ seniorities, titles, employers, growthRate, companyCategory, skills, etc.).`
5020
5174
  }
5021
5175
  }
5022
5176
  });
5023
- var valuesCmd = defineCommand37({
5177
+ var valuesCmd = defineCommand41({
5024
5178
  meta: {
5025
5179
  name: "values",
5026
5180
  description: `Look up entity values for a single facet \u2014 full list or typeahead search.
@@ -5061,7 +5215,7 @@ or the full URN (urn:li:adTargetingFacet:industries).`
5061
5215
  }
5062
5216
  }
5063
5217
  });
5064
- var facetsCommand = defineCommand37({
5218
+ var facetsCommand = defineCommand41({
5065
5219
  meta: {
5066
5220
  name: "facets",
5067
5221
  description: `LinkedIn targeting facets and entity lookup.
@@ -5079,7 +5233,7 @@ Subcommands:
5079
5233
 
5080
5234
  // src/commands/ads/linkedin/forecast.ts
5081
5235
  import { readFileSync as readFileSync5 } from "fs";
5082
- import { defineCommand as defineCommand38 } from "citty";
5236
+ import { defineCommand as defineCommand42 } from "citty";
5083
5237
  function loadTargeting3(args) {
5084
5238
  const inline = args.targeting;
5085
5239
  if (inline) {
@@ -5109,7 +5263,7 @@ function parseMoney(raw) {
5109
5263
  }
5110
5264
  return { amount: m[1] ?? "0", currencyCode: m[2] ?? "USD" };
5111
5265
  }
5112
- var forecastCommand = defineCommand38({
5266
+ var forecastCommand = defineCommand42({
5113
5267
  meta: {
5114
5268
  name: "forecast",
5115
5269
  description: `Forecast reach + impressions + clicks + spend for a hypothetical campaign.
@@ -5156,9 +5310,9 @@ Examples:
5156
5310
  });
5157
5311
 
5158
5312
  // src/commands/ads/linkedin/leads.ts
5159
- import { defineCommand as defineCommand39 } from "citty";
5313
+ import { defineCommand as defineCommand43 } from "citty";
5160
5314
  var DAY_MS3 = 864e5;
5161
- var leadsCommand = defineCommand39({
5315
+ var leadsCommand = defineCommand43({
5162
5316
  meta: {
5163
5317
  name: "leads",
5164
5318
  description: `List Lead Gen Form responses (playbook \xA707).
@@ -5218,7 +5372,7 @@ Examples:
5218
5372
  });
5219
5373
 
5220
5374
  // src/commands/ads/linkedin/resolve.ts
5221
- import { defineCommand as defineCommand40 } from "citty";
5375
+ import { defineCommand as defineCommand44 } from "citty";
5222
5376
  function toOrgUrn(raw) {
5223
5377
  const trimmed = raw.trim();
5224
5378
  if (trimmed.length === 0) {
@@ -5229,7 +5383,7 @@ function toOrgUrn(raw) {
5229
5383
  }
5230
5384
  return /^\d+$/.test(trimmed) ? `urn:li:organization:${trimmed}` : null;
5231
5385
  }
5232
- var resolveCommand = defineCommand40({
5386
+ var resolveCommand = defineCommand44({
5233
5387
  meta: {
5234
5388
  name: "resolve",
5235
5389
  description: `Resolve organization URNs to company names.
@@ -5271,8 +5425,8 @@ couldn't be resolved \u2014 typically an org outside LinkedIn's targetable set.`
5271
5425
  });
5272
5426
 
5273
5427
  // src/commands/ads/linkedin/top-companies.ts
5274
- import { defineCommand as defineCommand41 } from "citty";
5275
- var topCompaniesCommand = defineCommand41({
5428
+ import { defineCommand as defineCommand45 } from "citty";
5429
+ var topCompaniesCommand = defineCommand45({
5276
5430
  meta: {
5277
5431
  name: "top-companies",
5278
5432
  description: `Top companies whose employees saw / clicked / converted on a campaign.
@@ -5343,7 +5497,7 @@ Examples:
5343
5497
  });
5344
5498
 
5345
5499
  // src/commands/ads/linkedin/index.ts
5346
- var linkedinCommand = defineCommand42({
5500
+ var linkedinCommand = defineCommand46({
5347
5501
  meta: {
5348
5502
  name: "linkedin",
5349
5503
  description: `LinkedIn Marketing API \u2014 AI-first command surface for B2B ad insights.
@@ -5395,10 +5549,10 @@ Account ID format:
5395
5549
  });
5396
5550
 
5397
5551
  // src/commands/ads/meta/index.ts
5398
- import { defineCommand as defineCommand55 } from "citty";
5552
+ import { defineCommand as defineCommand59 } from "citty";
5399
5553
 
5400
5554
  // src/commands/ads/meta/account.ts
5401
- import { defineCommand as defineCommand43 } from "citty";
5555
+ import { defineCommand as defineCommand47 } from "citty";
5402
5556
 
5403
5557
  // src/commands/ads/meta/shared.ts
5404
5558
  var DAY_MS4 = 864e5;
@@ -5477,7 +5631,7 @@ function resolveEffectiveStatus(args) {
5477
5631
  }
5478
5632
 
5479
5633
  // src/commands/ads/meta/account.ts
5480
- var accountCommand2 = defineCommand43({
5634
+ var accountCommand2 = defineCommand47({
5481
5635
  meta: {
5482
5636
  name: "account",
5483
5637
  description: `Show single Meta ad account detail (currency, timezone, balance, business).
@@ -5504,8 +5658,8 @@ Examples:
5504
5658
  });
5505
5659
 
5506
5660
  // src/commands/ads/meta/accounts.ts
5507
- import { defineCommand as defineCommand44 } from "citty";
5508
- var accountsCommand3 = defineCommand44({
5661
+ import { defineCommand as defineCommand48 } from "citty";
5662
+ var accountsCommand3 = defineCommand48({
5509
5663
  meta: {
5510
5664
  name: "accounts",
5511
5665
  description: `List Meta ad accounts in this company's connected scope.
@@ -5553,8 +5707,8 @@ Examples:
5553
5707
  });
5554
5708
 
5555
5709
  // src/commands/ads/meta/activities.ts
5556
- import { defineCommand as defineCommand45 } from "citty";
5557
- var activitiesCommand = defineCommand45({
5710
+ import { defineCommand as defineCommand49 } from "citty";
5711
+ var activitiesCommand = defineCommand49({
5558
5712
  meta: {
5559
5713
  name: "activities",
5560
5714
  description: `Audit log of recent ad-account changes (created, paused, edited). Default lookback 7 days,
@@ -5591,8 +5745,8 @@ Examples:
5591
5745
  });
5592
5746
 
5593
5747
  // src/commands/ads/meta/ads.ts
5594
- import { defineCommand as defineCommand46 } from "citty";
5595
- var adsListCommand = defineCommand46({
5748
+ import { defineCommand as defineCommand50 } from "citty";
5749
+ var adsListCommand = defineCommand50({
5596
5750
  meta: {
5597
5751
  name: "ads",
5598
5752
  description: `List ads in a Meta ad account. Defaults to ACTIVE only \u2014 pass --all-statuses to widen.
@@ -5640,8 +5794,8 @@ Examples:
5640
5794
  });
5641
5795
 
5642
5796
  // src/commands/ads/meta/adsets.ts
5643
- import { defineCommand as defineCommand47 } from "citty";
5644
- var adsetsCommand = defineCommand47({
5797
+ import { defineCommand as defineCommand51 } from "citty";
5798
+ var adsetsCommand = defineCommand51({
5645
5799
  meta: {
5646
5800
  name: "adsets",
5647
5801
  description: `List ad sets in a Meta ad account, optionally scoped to one campaign. Defaults to ACTIVE only.
@@ -5683,8 +5837,8 @@ Examples:
5683
5837
  });
5684
5838
 
5685
5839
  // src/commands/ads/meta/audiences.ts
5686
- import { defineCommand as defineCommand48 } from "citty";
5687
- var audiencesCommand = defineCommand48({
5840
+ import { defineCommand as defineCommand52 } from "citty";
5841
+ var audiencesCommand = defineCommand52({
5688
5842
  meta: {
5689
5843
  name: "audiences",
5690
5844
  description: `List custom audiences for a Meta ad account. Includes lookalikes, website-pixel audiences,
@@ -5719,8 +5873,8 @@ Examples:
5719
5873
  });
5720
5874
 
5721
5875
  // src/commands/ads/meta/businesses.ts
5722
- import { defineCommand as defineCommand49 } from "citty";
5723
- var businessesCommand = defineCommand49({
5876
+ import { defineCommand as defineCommand53 } from "citty";
5877
+ var businessesCommand = defineCommand53({
5724
5878
  meta: {
5725
5879
  name: "businesses",
5726
5880
  description: `List Meta Business Manager accounts the connected user has access to. Required for ad-studies and product-catalogs commands.
@@ -5750,8 +5904,8 @@ Examples:
5750
5904
  });
5751
5905
 
5752
5906
  // src/commands/ads/meta/campaigns.ts
5753
- import { defineCommand as defineCommand50 } from "citty";
5754
- var campaignsCommand2 = defineCommand50({
5907
+ import { defineCommand as defineCommand54 } from "citty";
5908
+ var campaignsCommand2 = defineCommand54({
5755
5909
  meta: {
5756
5910
  name: "campaigns",
5757
5911
  description: `List campaigns for a Meta ad account. Defaults to ACTIVE only \u2014 pass --all-statuses to widen.
@@ -5795,8 +5949,8 @@ Examples:
5795
5949
  });
5796
5950
 
5797
5951
  // src/commands/ads/meta/creatives.ts
5798
- import { defineCommand as defineCommand51 } from "citty";
5799
- var creativesCommand2 = defineCommand51({
5952
+ import { defineCommand as defineCommand55 } from "citty";
5953
+ var creativesCommand2 = defineCommand55({
5800
5954
  meta: {
5801
5955
  name: "creatives",
5802
5956
  description: `List ad creatives in an account, or fetch a single creative by ID.
@@ -5840,7 +5994,7 @@ Examples:
5840
5994
  });
5841
5995
 
5842
5996
  // src/commands/ads/meta/insights.ts
5843
- import { defineCommand as defineCommand52 } from "citty";
5997
+ import { defineCommand as defineCommand56 } from "citty";
5844
5998
 
5845
5999
  // src/commands/ads/meta/presets.ts
5846
6000
  var INSIGHTS_INTENTS = {
@@ -6045,7 +6199,7 @@ function sortRowsBySpendDesc(rows) {
6045
6199
  return sb - sa;
6046
6200
  });
6047
6201
  }
6048
- var insightsCommand = defineCommand52({
6202
+ var insightsCommand = defineCommand56({
6049
6203
  meta: {
6050
6204
  name: "insights",
6051
6205
  description: `Performance reporting \u2014 the main Meta tool for AI agents.
@@ -6146,8 +6300,8 @@ Async is automatic for heavy queries; pass --async to force it, or --no-async to
6146
6300
  });
6147
6301
 
6148
6302
  // src/commands/ads/meta/pixels.ts
6149
- import { defineCommand as defineCommand53 } from "citty";
6150
- var pixelsCommand = defineCommand53({
6303
+ import { defineCommand as defineCommand57 } from "citty";
6304
+ var pixelsCommand = defineCommand57({
6151
6305
  meta: {
6152
6306
  name: "pixels",
6153
6307
  description: `List Meta Pixels for an ad account, or fetch firing stats for one pixel.
@@ -6218,7 +6372,7 @@ function emit(data, args) {
6218
6372
 
6219
6373
  // src/commands/ads/meta/preview.ts
6220
6374
  import { writeFileSync as writeFileSync3 } from "fs";
6221
- import { defineCommand as defineCommand54 } from "citty";
6375
+ import { defineCommand as defineCommand58 } from "citty";
6222
6376
  var VALID_AD_FORMATS = [
6223
6377
  "DESKTOP_FEED_STANDARD",
6224
6378
  "MOBILE_FEED_STANDARD",
@@ -6252,7 +6406,7 @@ var VALID_AD_FORMATS = [
6252
6406
  "MARKETPLACE_MOBILE",
6253
6407
  "BIZ_DISCO_FEED_MOBILE"
6254
6408
  ];
6255
- var previewCommand = defineCommand54({
6409
+ var previewCommand = defineCommand58({
6256
6410
  meta: {
6257
6411
  name: "preview",
6258
6412
  description: `Generate a Meta-hosted preview iframe for a creative or ad. Returns iframe HTML which you
@@ -6299,7 +6453,7 @@ Examples:
6299
6453
  });
6300
6454
 
6301
6455
  // src/commands/ads/meta/index.ts
6302
- var metaCommand = defineCommand55({
6456
+ var metaCommand = defineCommand59({
6303
6457
  meta: {
6304
6458
  name: "meta",
6305
6459
  description: `Meta Marketing API \u2014 AI-first command surface (Facebook + Instagram ads).
@@ -6351,10 +6505,10 @@ Audit & review:
6351
6505
  });
6352
6506
 
6353
6507
  // src/commands/ads/x/index.ts
6354
- import { defineCommand as defineCommand72 } from "citty";
6508
+ import { defineCommand as defineCommand76 } from "citty";
6355
6509
 
6356
6510
  // src/commands/ads/x/accounts.ts
6357
- import { defineCommand as defineCommand56 } from "citty";
6511
+ import { defineCommand as defineCommand60 } from "citty";
6358
6512
  registerSchema({
6359
6513
  command: "ads.x.accounts",
6360
6514
  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.",
@@ -6382,7 +6536,7 @@ function handleAccountsError2(err) {
6382
6536
  writeAdsJson({ ok: false, error: { code: "NETWORK_ERROR", message: "Unexpected error" } });
6383
6537
  process.exit(1);
6384
6538
  }
6385
- var accountsCommand4 = defineCommand56({
6539
+ var accountsCommand4 = defineCommand60({
6386
6540
  meta: {
6387
6541
  name: "accounts",
6388
6542
  description: `List accessible X Ads accounts. Returns account IDs needed for all other commands.
@@ -6422,7 +6576,7 @@ Examples:
6422
6576
  });
6423
6577
 
6424
6578
  // src/commands/ads/x/active-entities.ts
6425
- import { defineCommand as defineCommand57 } from "citty";
6579
+ import { defineCommand as defineCommand61 } from "citty";
6426
6580
 
6427
6581
  // src/commands/ads/x/error-parser.ts
6428
6582
  function mapXErrorCode(message) {
@@ -6573,7 +6727,7 @@ function parseCsv(v) {
6573
6727
  const parts = v.split(",").map((s) => s.trim()).filter(Boolean);
6574
6728
  return parts.length > 0 ? parts : void 0;
6575
6729
  }
6576
- var activeEntitiesCommand = defineCommand57({
6730
+ var activeEntitiesCommand = defineCommand61({
6577
6731
  meta: {
6578
6732
  name: "active-entities",
6579
6733
  description: `List entities with metric activity in a time range.
@@ -6631,7 +6785,7 @@ Examples:
6631
6785
  });
6632
6786
 
6633
6787
  // src/commands/ads/x/audiences.ts
6634
- import { defineCommand as defineCommand58 } from "citty";
6788
+ import { defineCommand as defineCommand62 } from "citty";
6635
6789
  registerSchema({
6636
6790
  command: "ads.x.audiences",
6637
6791
  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.",
@@ -6640,7 +6794,7 @@ registerSchema({
6640
6794
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
6641
6795
  }
6642
6796
  });
6643
- var audiencesCommand2 = defineCommand58({
6797
+ var audiencesCommand2 = defineCommand62({
6644
6798
  meta: {
6645
6799
  name: "audiences",
6646
6800
  description: `List X Ads custom audiences.
@@ -6689,7 +6843,7 @@ Examples:
6689
6843
  });
6690
6844
 
6691
6845
  // src/commands/ads/x/campaigns.ts
6692
- import { defineCommand as defineCommand59 } from "citty";
6846
+ import { defineCommand as defineCommand63 } from "citty";
6693
6847
 
6694
6848
  // src/commands/ads/x/run-list.ts
6695
6849
  function buildCleanParams(opts) {
@@ -6752,7 +6906,7 @@ registerSchema({
6752
6906
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
6753
6907
  }
6754
6908
  });
6755
- var campaignsCommand3 = defineCommand59({
6909
+ var campaignsCommand3 = defineCommand63({
6756
6910
  meta: {
6757
6911
  name: "campaigns",
6758
6912
  description: `List X Ads campaigns. Returns budget, schedule, funding instrument, status.
@@ -6794,7 +6948,7 @@ Examples:
6794
6948
  });
6795
6949
 
6796
6950
  // src/commands/ads/x/cards.ts
6797
- import { defineCommand as defineCommand60 } from "citty";
6951
+ import { defineCommand as defineCommand64 } from "citty";
6798
6952
  registerSchema({
6799
6953
  command: "ads.x.cards",
6800
6954
  description: "List website cards, video cards, and carousels for an X Ads account.",
@@ -6803,7 +6957,7 @@ registerSchema({
6803
6957
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
6804
6958
  }
6805
6959
  });
6806
- var cardsCommand = defineCommand60({
6960
+ var cardsCommand = defineCommand64({
6807
6961
  meta: {
6808
6962
  name: "cards",
6809
6963
  description: `List X Ads cards (rich creatives).
@@ -6852,7 +7006,7 @@ Examples:
6852
7006
  });
6853
7007
 
6854
7008
  // src/commands/ads/x/funding.ts
6855
- import { defineCommand as defineCommand61 } from "citty";
7009
+ import { defineCommand as defineCommand65 } from "citty";
6856
7010
  registerSchema({
6857
7011
  command: "ads.x.funding",
6858
7012
  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.",
@@ -6861,7 +7015,7 @@ registerSchema({
6861
7015
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
6862
7016
  }
6863
7017
  });
6864
- var fundingCommand = defineCommand61({
7018
+ var fundingCommand = defineCommand65({
6865
7019
  meta: {
6866
7020
  name: "funding",
6867
7021
  description: `List funding instruments for an X Ads account.
@@ -6910,7 +7064,7 @@ Examples:
6910
7064
  });
6911
7065
 
6912
7066
  // src/commands/ads/x/line-items.ts
6913
- import { defineCommand as defineCommand62 } from "citty";
7067
+ import { defineCommand as defineCommand66 } from "citty";
6914
7068
  registerSchema({
6915
7069
  command: "ads.x.lineItems",
6916
7070
  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).",
@@ -6922,7 +7076,7 @@ registerSchema({
6922
7076
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
6923
7077
  }
6924
7078
  });
6925
- var lineItemsCommand = defineCommand62({
7079
+ var lineItemsCommand = defineCommand66({
6926
7080
  meta: {
6927
7081
  name: "line-items",
6928
7082
  description: `List X Ads line items (ad groups).
@@ -6963,7 +7117,7 @@ Examples:
6963
7117
  });
6964
7118
 
6965
7119
  // src/commands/ads/x/media.ts
6966
- import { defineCommand as defineCommand63 } from "citty";
7120
+ import { defineCommand as defineCommand67 } from "citty";
6967
7121
  registerSchema({
6968
7122
  command: "ads.x.media",
6969
7123
  description: "List media assets in the X Ads media library (images, GIFs, videos). Filter by media-type (IMAGE, GIF, VIDEO).",
@@ -6973,7 +7127,7 @@ registerSchema({
6973
7127
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
6974
7128
  }
6975
7129
  });
6976
- var mediaCommand = defineCommand63({
7130
+ var mediaCommand = defineCommand67({
6977
7131
  meta: {
6978
7132
  name: "media",
6979
7133
  description: `List media assets in the X Ads media library.
@@ -7025,7 +7179,7 @@ Examples:
7025
7179
  });
7026
7180
 
7027
7181
  // src/commands/ads/x/promoted-tweets.ts
7028
- import { defineCommand as defineCommand64 } from "citty";
7182
+ import { defineCommand as defineCommand68 } from "citty";
7029
7183
  registerSchema({
7030
7184
  command: "ads.x.promotedTweets",
7031
7185
  description: "List promoted tweets for an X Ads account. Returns id, line_item_id, tweet_id, approval_status. Filter by line-item-ids (CSV).",
@@ -7036,7 +7190,7 @@ registerSchema({
7036
7190
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
7037
7191
  }
7038
7192
  });
7039
- var promotedTweetsCommand = defineCommand64({
7193
+ var promotedTweetsCommand = defineCommand68({
7040
7194
  meta: {
7041
7195
  name: "promoted-tweets",
7042
7196
  description: `List X Ads promoted tweets.
@@ -7090,11 +7244,11 @@ Examples:
7090
7244
  });
7091
7245
 
7092
7246
  // src/commands/ads/x/stats/index.ts
7093
- import { defineCommand as defineCommand69 } from "citty";
7247
+ import { defineCommand as defineCommand73 } from "citty";
7094
7248
 
7095
7249
  // src/commands/ads/x/stats/job.ts
7096
7250
  import { gunzipSync } from "zlib";
7097
- import { defineCommand as defineCommand65 } from "citty";
7251
+ import { defineCommand as defineCommand69 } from "citty";
7098
7252
  var POLL_INTERVAL_MS2 = 1e4;
7099
7253
  var DEADLINE_MS = 12 * 60 * 1e3;
7100
7254
  var RESULT_CACHE_TTL_MS = 6 * 60 * 60 * 1e3;
@@ -7164,7 +7318,7 @@ async function pollUntilDone(accountId, jobId) {
7164
7318
  function buildCacheKey(body) {
7165
7319
  return `stats-job:${JSON.stringify(body)}`;
7166
7320
  }
7167
- var statsJobCommand = defineCommand65({
7321
+ var statsJobCommand = defineCommand69({
7168
7322
  meta: {
7169
7323
  name: "job",
7170
7324
  description: `Async X Ads stats job, sync from the CLI's perspective. Creates \u2192 polls \u2192 downloads \u2192 returns.
@@ -7269,7 +7423,7 @@ For fine-grained control (don't wait, poll yourself), use:
7269
7423
  });
7270
7424
 
7271
7425
  // src/commands/ads/x/stats/job-create.ts
7272
- import { defineCommand as defineCommand66 } from "citty";
7426
+ import { defineCommand as defineCommand70 } from "citty";
7273
7427
  registerSchema({
7274
7428
  command: "ads.x.statsJobCreate",
7275
7429
  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.",
@@ -7292,7 +7446,7 @@ function parseCsv3(v) {
7292
7446
  const parts = v.split(",").map((s) => s.trim()).filter(Boolean);
7293
7447
  return parts.length > 0 ? parts : void 0;
7294
7448
  }
7295
- var statsJobCreateCommand = defineCommand66({
7449
+ var statsJobCreateCommand = defineCommand70({
7296
7450
  meta: {
7297
7451
  name: "job-create",
7298
7452
  description: `Create an async X Ads stats job (up to 90 days, supports segmentation).
@@ -7355,7 +7509,7 @@ Examples:
7355
7509
  });
7356
7510
 
7357
7511
  // src/commands/ads/x/stats/job-status.ts
7358
- import { defineCommand as defineCommand67 } from "citty";
7512
+ import { defineCommand as defineCommand71 } from "citty";
7359
7513
  registerSchema({
7360
7514
  command: "ads.x.statsJobStatus",
7361
7515
  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).",
@@ -7365,7 +7519,7 @@ registerSchema({
7365
7519
  "job-ids": { type: "string", description: "CSV of job IDs", required: false }
7366
7520
  }
7367
7521
  });
7368
- var statsJobStatusCommand = defineCommand67({
7522
+ var statsJobStatusCommand = defineCommand71({
7369
7523
  meta: {
7370
7524
  name: "job-status",
7371
7525
  description: `Poll the status of an async X Ads stats job.
@@ -7406,7 +7560,7 @@ Examples:
7406
7560
  });
7407
7561
 
7408
7562
  // src/commands/ads/x/stats/sync.ts
7409
- import { defineCommand as defineCommand68 } from "citty";
7563
+ import { defineCommand as defineCommand72 } from "citty";
7410
7564
 
7411
7565
  // src/commands/ads/x/presets.ts
7412
7566
  var X_STATS_PRESETS = [
@@ -7565,7 +7719,7 @@ async function runSync(args, q) {
7565
7719
  process.exit(1);
7566
7720
  }
7567
7721
  }
7568
- var statsSyncCommand = defineCommand68({
7722
+ var statsSyncCommand = defineCommand72({
7569
7723
  meta: {
7570
7724
  name: "sync",
7571
7725
  description: `Synchronous X Ads analytics (max 7-day window).
@@ -7608,7 +7762,7 @@ Examples:
7608
7762
  });
7609
7763
 
7610
7764
  // src/commands/ads/x/stats/index.ts
7611
- var statsCommand = defineCommand69({
7765
+ var statsCommand = defineCommand73({
7612
7766
  meta: {
7613
7767
  name: "stats",
7614
7768
  description: `X Ads analytics. Sync (\u22647 days, no segmentation) or async jobs (\u226490 days, segmentable).
@@ -7636,7 +7790,7 @@ Examples:
7636
7790
  });
7637
7791
 
7638
7792
  // src/commands/ads/x/targeting-constants.ts
7639
- import { defineCommand as defineCommand70 } from "citty";
7793
+ import { defineCommand as defineCommand74 } from "citty";
7640
7794
  var ALLOWED_CONSTANTS = [
7641
7795
  "locations",
7642
7796
  "interests",
@@ -7664,7 +7818,7 @@ registerSchema({
7664
7818
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
7665
7819
  }
7666
7820
  });
7667
- var targetingConstantsCommand = defineCommand70({
7821
+ var targetingConstantsCommand = defineCommand74({
7668
7822
  meta: {
7669
7823
  name: "targeting-constants",
7670
7824
  description: `Lookup X Ads targeting constants.
@@ -7714,7 +7868,7 @@ Examples:
7714
7868
  });
7715
7869
 
7716
7870
  // src/commands/ads/x/targeting-criteria.ts
7717
- import { defineCommand as defineCommand71 } from "citty";
7871
+ import { defineCommand as defineCommand75 } from "citty";
7718
7872
  registerSchema({
7719
7873
  command: "ads.x.targetingCriteria",
7720
7874
  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.",
@@ -7724,7 +7878,7 @@ registerSchema({
7724
7878
  "no-cache": { type: "boolean", description: "Skip cache", required: false }
7725
7879
  }
7726
7880
  });
7727
- var targetingCriteriaCommand = defineCommand71({
7881
+ var targetingCriteriaCommand = defineCommand75({
7728
7882
  meta: {
7729
7883
  name: "targeting-criteria",
7730
7884
  description: `List targeting criteria attached to line items.
@@ -7775,7 +7929,7 @@ Examples:
7775
7929
  });
7776
7930
 
7777
7931
  // src/commands/ads/x/index.ts
7778
- var xCommand = defineCommand72({
7932
+ var xCommand = defineCommand76({
7779
7933
  meta: {
7780
7934
  name: "x",
7781
7935
  description: `X (Twitter) Ads commands. Read campaigns, line items, promoted tweets, creatives, audiences, and analytics.
@@ -7813,7 +7967,7 @@ The CLI auto-detects --account-id when exactly one X Ads account is connected, o
7813
7967
  });
7814
7968
 
7815
7969
  // src/commands/ads/index.ts
7816
- var adsCommand = defineCommand73({
7970
+ var adsCommand = defineCommand77({
7817
7971
  meta: {
7818
7972
  name: "ads",
7819
7973
  description: `Ad platform commands. Each platform exposes its own native command surface \u2014 no forced parity.
@@ -7843,11 +7997,11 @@ Examples:
7843
7997
  });
7844
7998
 
7845
7999
  // src/commands/canvas/index.ts
7846
- import { defineCommand as defineCommand80 } from "citty";
8000
+ import { defineCommand as defineCommand84 } from "citty";
7847
8001
 
7848
8002
  // src/commands/canvas/catalog.ts
7849
- import { defineCommand as defineCommand74 } from "citty";
7850
- var catalogCommand = defineCommand74({
8003
+ import { defineCommand as defineCommand78 } from "citty";
8004
+ var catalogCommand = defineCommand78({
7851
8005
  meta: {
7852
8006
  name: "catalog",
7853
8007
  description: "Print the agent-facing node catalog (JSON Schema). Includes every registered node grouped by category."
@@ -7864,9 +8018,9 @@ import { execFile } from "child_process";
7864
8018
  import { readdir, readFile, stat } from "fs/promises";
7865
8019
  import path from "path";
7866
8020
  import { promisify } from "util";
7867
- import { defineCommand as defineCommand75 } from "citty";
8021
+ import { defineCommand as defineCommand79 } from "citty";
7868
8022
  var execFileAsync = promisify(execFile);
7869
- var inspectCommand = defineCommand75({
8023
+ var inspectCommand = defineCommand79({
7870
8024
  meta: {
7871
8025
  name: "inspect",
7872
8026
  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."
@@ -7975,7 +8129,7 @@ async function probeDuration(filePath) {
7975
8129
  // src/commands/canvas/run.ts
7976
8130
  import { readFile as readFile2 } from "fs/promises";
7977
8131
  import path2 from "path";
7978
- import { defineCommand as defineCommand76 } from "citty";
8132
+ import { defineCommand as defineCommand80 } from "citty";
7979
8133
 
7980
8134
  // src/commands/canvas/placeholders.ts
7981
8135
  function unsuppliedPlaceholderAssets(canvas) {
@@ -7994,7 +8148,7 @@ function unsuppliedPlaceholderAssets(canvas) {
7994
8148
  }
7995
8149
 
7996
8150
  // src/commands/canvas/run.ts
7997
- var runCommand = defineCommand76({
8151
+ var runCommand = defineCommand80({
7998
8152
  meta: { name: "run", description: "Validate and execute a canvas JSON file." },
7999
8153
  args: {
8000
8154
  file: { type: "positional", required: true, description: "Path to canvas JSON" },
@@ -8079,7 +8233,7 @@ var runCommand = defineCommand76({
8079
8233
  // src/commands/canvas/scaffold-static-ad.ts
8080
8234
  import { readFile as readFile3, writeFile } from "fs/promises";
8081
8235
  import path3 from "path";
8082
- import { defineCommand as defineCommand77 } from "citty";
8236
+ import { defineCommand as defineCommand81 } from "citty";
8083
8237
 
8084
8238
  // src/engine/scaffold/staticAd.ts
8085
8239
  import { z as z2 } from "zod";
@@ -8398,7 +8552,7 @@ async function runVisionPasses(canvas) {
8398
8552
  return fail("read_outputs", e instanceof Error ? e.message : String(e));
8399
8553
  }
8400
8554
  }
8401
- var scaffoldStaticAdCommand = defineCommand77({
8555
+ var scaffoldStaticAdCommand = defineCommand81({
8402
8556
  meta: {
8403
8557
  name: "scaffold-static-ad",
8404
8558
  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. Edit prompt.json and drop the real assets, then `baker canvas run` it."
@@ -8492,7 +8646,7 @@ var scaffoldStaticAdCommand = defineCommand77({
8492
8646
  // src/commands/canvas/scaffold-video.ts
8493
8647
  import { cp, mkdir, readFile as readFile5, writeFile as writeFile2 } from "fs/promises";
8494
8648
  import path5 from "path";
8495
- import { defineCommand as defineCommand78 } from "citty";
8649
+ import { defineCommand as defineCommand82 } from "citty";
8496
8650
 
8497
8651
  // src/engine/nodes/local/lib/sceneDetect.ts
8498
8652
  import { execFile as execFile2 } from "child_process";
@@ -11143,7 +11297,7 @@ async function runAnalysisPasses(deconstructCanvas, selectModel) {
11143
11297
  return fail2("deconstruct", e instanceof Error ? e.message : String(e));
11144
11298
  }
11145
11299
  }
11146
- var scaffoldVideoCommand = defineCommand78({
11300
+ var scaffoldVideoCommand = defineCommand82({
11147
11301
  meta: {
11148
11302
  name: "scaffold-video",
11149
11303
  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 prompt.json as the editable 'prompt') 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 prompt.json, drop the real source images, then `baker canvas run`."
@@ -11287,8 +11441,8 @@ var scaffoldVideoCommand = defineCommand78({
11287
11441
  // src/commands/canvas/validate.ts
11288
11442
  import { readFile as readFile6 } from "fs/promises";
11289
11443
  import path6 from "path";
11290
- import { defineCommand as defineCommand79 } from "citty";
11291
- var validateCommand = defineCommand79({
11444
+ import { defineCommand as defineCommand83 } from "citty";
11445
+ var validateCommand = defineCommand83({
11292
11446
  meta: {
11293
11447
  name: "validate",
11294
11448
  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)."
@@ -11330,7 +11484,7 @@ var validateCommand = defineCommand79({
11330
11484
  });
11331
11485
 
11332
11486
  // src/commands/canvas/index.ts
11333
- var canvasCommand = defineCommand80({
11487
+ var canvasCommand = defineCommand84({
11334
11488
  meta: {
11335
11489
  name: "canvas",
11336
11490
  description: `Run Baker creative canvas JSON files locally. Local nodes execute in-process; remote nodes POST to the Convex backend gateway.
@@ -11356,10 +11510,10 @@ Subcommands:
11356
11510
  });
11357
11511
 
11358
11512
  // src/commands/ga4/index.ts
11359
- import { defineCommand as defineCommand84 } from "citty";
11513
+ import { defineCommand as defineCommand88 } from "citty";
11360
11514
 
11361
11515
  // src/commands/ga4/audit.ts
11362
- import { defineCommand as defineCommand81 } from "citty";
11516
+ import { defineCommand as defineCommand85 } from "citty";
11363
11517
 
11364
11518
  // src/commands/ga4/resolve.ts
11365
11519
  async function fetchProperties(useCache = true) {
@@ -11422,7 +11576,7 @@ registerSchema({
11422
11576
  "no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
11423
11577
  }
11424
11578
  });
11425
- var auditCommand2 = defineCommand81({
11579
+ var auditCommand2 = defineCommand85({
11426
11580
  meta: {
11427
11581
  name: "audit",
11428
11582
  description: `Run all GA4 admin health checks. Returns property config with playbook warnings.
@@ -11474,7 +11628,7 @@ Examples:
11474
11628
  });
11475
11629
 
11476
11630
  // src/commands/ga4/properties.ts
11477
- import { defineCommand as defineCommand82 } from "citty";
11631
+ import { defineCommand as defineCommand86 } from "citty";
11478
11632
  registerSchema({
11479
11633
  command: "ga4.properties",
11480
11634
  description: "List all accessible GA4 properties. Returns property IDs needed for query and audit commands. Run this first to find property IDs.",
@@ -11482,7 +11636,7 @@ registerSchema({
11482
11636
  "no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
11483
11637
  }
11484
11638
  });
11485
- var propertiesCommand = defineCommand82({
11639
+ var propertiesCommand = defineCommand86({
11486
11640
  meta: {
11487
11641
  name: "properties",
11488
11642
  description: `List accessible GA4 properties.
@@ -11532,7 +11686,7 @@ Examples:
11532
11686
  // src/commands/ga4/query.ts
11533
11687
  import { appendFileSync as appendFileSync2, existsSync as existsSync4, readFileSync as readFileSync6, writeFileSync as writeFileSync4 } from "fs";
11534
11688
  import { resolve as resolve2 } from "path";
11535
- import { defineCommand as defineCommand83 } from "citty";
11689
+ import { defineCommand as defineCommand87 } from "citty";
11536
11690
 
11537
11691
  // src/commands/ga4/presets.ts
11538
11692
  var GA4_PRESETS = [
@@ -11664,7 +11818,7 @@ function handleError(err) {
11664
11818
  });
11665
11819
  process.exit(1);
11666
11820
  }
11667
- var queryCommand2 = defineCommand83({
11821
+ var queryCommand2 = defineCommand87({
11668
11822
  meta: {
11669
11823
  name: "query",
11670
11824
  description: `Run GA4 Data API reports. Preset-first with free-form escape hatch.
@@ -11735,7 +11889,7 @@ Free-form (escape hatch):
11735
11889
  });
11736
11890
 
11737
11891
  // src/commands/ga4/index.ts
11738
- var ga4Command = defineCommand84({
11892
+ var ga4Command = defineCommand88({
11739
11893
  meta: {
11740
11894
  name: "ga4",
11741
11895
  description: `Google Analytics 4 commands. Audit property config, run playbook-aligned reports.
@@ -11758,12 +11912,12 @@ Examples:
11758
11912
  });
11759
11913
 
11760
11914
  // src/commands/gsc/index.ts
11761
- import { defineCommand as defineCommand88 } from "citty";
11915
+ import { defineCommand as defineCommand92 } from "citty";
11762
11916
 
11763
11917
  // src/commands/gsc/query.ts
11764
11918
  import { appendFileSync as appendFileSync3, existsSync as existsSync5, readFileSync as readFileSync7, writeFileSync as writeFileSync5 } from "fs";
11765
11919
  import { resolve as resolve3 } from "path";
11766
- import { defineCommand as defineCommand85 } from "citty";
11920
+ import { defineCommand as defineCommand89 } from "citty";
11767
11921
 
11768
11922
  // src/commands/gsc/presets.ts
11769
11923
  var GSC_PRESETS = [
@@ -11951,7 +12105,7 @@ function handleError2(err) {
11951
12105
  });
11952
12106
  process.exit(1);
11953
12107
  }
11954
- var queryCommand3 = defineCommand85({
12108
+ var queryCommand3 = defineCommand89({
11955
12109
  meta: {
11956
12110
  name: "query",
11957
12111
  description: `Run GSC Search Analytics queries. Preset-first with free-form escape hatch.
@@ -12029,7 +12183,7 @@ Free-form (escape hatch):
12029
12183
  });
12030
12184
 
12031
12185
  // src/commands/gsc/sitemaps.ts
12032
- import { defineCommand as defineCommand86 } from "citty";
12186
+ import { defineCommand as defineCommand90 } from "citty";
12033
12187
  registerSchema({
12034
12188
  command: "gsc.sitemaps",
12035
12189
  description: "List sitemaps for a Search Console site. Check sitemap health and errors.",
@@ -12038,7 +12192,7 @@ registerSchema({
12038
12192
  "no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
12039
12193
  }
12040
12194
  });
12041
- var sitemapsCommand = defineCommand86({
12195
+ var sitemapsCommand = defineCommand90({
12042
12196
  meta: {
12043
12197
  name: "sitemaps",
12044
12198
  description: `List sitemaps for a site. Check health and errors.
@@ -12088,7 +12242,7 @@ Examples:
12088
12242
  });
12089
12243
 
12090
12244
  // src/commands/gsc/sites.ts
12091
- import { defineCommand as defineCommand87 } from "citty";
12245
+ import { defineCommand as defineCommand91 } from "citty";
12092
12246
  registerSchema({
12093
12247
  command: "gsc.sites",
12094
12248
  description: "List all verified Google Search Console sites. Returns site URLs needed for query and sitemaps commands.",
@@ -12096,7 +12250,7 @@ registerSchema({
12096
12250
  "no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
12097
12251
  }
12098
12252
  });
12099
- var sitesCommand = defineCommand87({
12253
+ var sitesCommand = defineCommand91({
12100
12254
  meta: {
12101
12255
  name: "sites",
12102
12256
  description: `List verified Search Console sites.
@@ -12144,7 +12298,7 @@ Examples:
12144
12298
  });
12145
12299
 
12146
12300
  // src/commands/gsc/index.ts
12147
- var gscCommand = defineCommand88({
12301
+ var gscCommand = defineCommand92({
12148
12302
  meta: {
12149
12303
  name: "gsc",
12150
12304
  description: `Google Search Console commands. PPC-SEO arbitrage, brand halo analysis, negative keyword discovery.
@@ -12167,10 +12321,10 @@ Examples:
12167
12321
  });
12168
12322
 
12169
12323
  // src/commands/images/index.ts
12170
- import { defineCommand as defineCommand112 } from "citty";
12324
+ import { defineCommand as defineCommand116 } from "citty";
12171
12325
 
12172
12326
  // src/commands/images/crop.ts
12173
- import { defineCommand as defineCommand89 } from "citty";
12327
+ import { defineCommand as defineCommand93 } from "citty";
12174
12328
 
12175
12329
  // src/lib/image/crop-sprite.ts
12176
12330
  import sharp from "sharp";
@@ -12295,7 +12449,7 @@ function emitError2(err) {
12295
12449
  }
12296
12450
  process.exit(1);
12297
12451
  }
12298
- var cropCommand = defineCommand89({
12452
+ var cropCommand = defineCommand93({
12299
12453
  meta: {
12300
12454
  name: "crop",
12301
12455
  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"
@@ -12331,7 +12485,7 @@ var cropCommand = defineCommand89({
12331
12485
  });
12332
12486
 
12333
12487
  // src/commands/images/delete.ts
12334
- import { defineCommand as defineCommand90 } from "citty";
12488
+ import { defineCommand as defineCommand94 } from "citty";
12335
12489
  registerSchema({
12336
12490
  command: "images.delete",
12337
12491
  description: "Delete an image by ID",
@@ -12345,7 +12499,7 @@ registerSchema({
12345
12499
  }
12346
12500
  }
12347
12501
  });
12348
- var deleteCommand = defineCommand90({
12502
+ var deleteCommand = defineCommand94({
12349
12503
  meta: {
12350
12504
  name: "delete",
12351
12505
  description: "Delete an image by ID. Use --dry-run to preview. Example: baker images delete j571abc123 --dry-run"
@@ -12386,7 +12540,7 @@ var deleteCommand = defineCommand90({
12386
12540
  });
12387
12541
 
12388
12542
  // src/commands/images/dimensions.ts
12389
- import { defineCommand as defineCommand91 } from "citty";
12543
+ import { defineCommand as defineCommand95 } from "citty";
12390
12544
 
12391
12545
  // src/lib/image/dimensions.ts
12392
12546
  import { imageSize } from "image-size";
@@ -12409,7 +12563,7 @@ registerSchema({
12409
12563
  target: { type: "string", description: "Local file path or remote http(s) URL", required: true }
12410
12564
  }
12411
12565
  });
12412
- var dimensionsCommand = defineCommand91({
12566
+ var dimensionsCommand = defineCommand95({
12413
12567
  meta: {
12414
12568
  name: "dimensions",
12415
12569
  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"
@@ -12453,7 +12607,7 @@ var dimensionsCommand = defineCommand91({
12453
12607
  });
12454
12608
 
12455
12609
  // src/commands/images/extract.ts
12456
- import { defineCommand as defineCommand92 } from "citty";
12610
+ import { defineCommand as defineCommand96 } from "citty";
12457
12611
  registerSchema({
12458
12612
  command: "images.extract",
12459
12613
  description: "Extract images from a URL via Firecrawl (formats: images).",
@@ -12469,7 +12623,7 @@ registerSchema({
12469
12623
  }
12470
12624
  }
12471
12625
  });
12472
- var extractCommand = defineCommand92({
12626
+ var extractCommand = defineCommand96({
12473
12627
  meta: {
12474
12628
  name: "extract",
12475
12629
  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"
@@ -12507,7 +12661,7 @@ var extractCommand = defineCommand92({
12507
12661
  });
12508
12662
 
12509
12663
  // src/commands/images/find.ts
12510
- import { defineCommand as defineCommand93 } from "citty";
12664
+ import { defineCommand as defineCommand97 } from "citty";
12511
12665
  registerSchema({
12512
12666
  command: "images.find",
12513
12667
  description: "Fanout image search: library first, then opted-in external providers.",
@@ -12539,7 +12693,7 @@ registerSchema({
12539
12693
  }
12540
12694
  }
12541
12695
  });
12542
- var findCommand = defineCommand93({
12696
+ var findCommand = defineCommand97({
12543
12697
  meta: {
12544
12698
  name: "find",
12545
12699
  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"
@@ -12586,7 +12740,7 @@ var findCommand = defineCommand93({
12586
12740
 
12587
12741
  // src/commands/images/generate.ts
12588
12742
  import { readFile as readFile8 } from "fs/promises";
12589
- import { defineCommand as defineCommand94 } from "citty";
12743
+ import { defineCommand as defineCommand98 } from "citty";
12590
12744
  import sharp2 from "sharp";
12591
12745
  var GENERATE_TIMEOUT_MS = 18e4;
12592
12746
  var REFERENCE_MAX_EDGE = 1536;
@@ -12682,7 +12836,7 @@ async function resolveReferences(spec) {
12682
12836
  }
12683
12837
  return out;
12684
12838
  }
12685
- var generateCommand = defineCommand94({
12839
+ var generateCommand = defineCommand98({
12686
12840
  meta: {
12687
12841
  name: "generate",
12688
12842
  description: "Generate an image with AI and store it in the library (cost-tracked per request via OpenRouter usage). Models mirror the canvas: openai/gpt-5.4-image-2 (default \u2014 photoreal, cleanest text, best for ad/landing reproduction), google/gemini-3-pro-image-preview (Nano Banana Pro), google/gemini-3.5-flash & google/gemini-3.1-flash-image-preview (fast, extreme aspect ratios), 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 google/gemini-3-pro-image-preview --image-size 2K\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]]'"
@@ -12734,7 +12888,7 @@ var generateCommand = defineCommand94({
12734
12888
  });
12735
12889
 
12736
12890
  // src/commands/images/get.ts
12737
- import { defineCommand as defineCommand95 } from "citty";
12891
+ import { defineCommand as defineCommand99 } from "citty";
12738
12892
  registerSchema({
12739
12893
  command: "images.get",
12740
12894
  description: "Get a single image by ID",
@@ -12742,7 +12896,7 @@ registerSchema({
12742
12896
  id: { type: "string", description: "Image ID", required: true }
12743
12897
  }
12744
12898
  });
12745
- var getCommand2 = defineCommand95({
12899
+ var getCommand2 = defineCommand99({
12746
12900
  meta: { name: "get", description: "Get a single image by ID. Example: baker images get j571abc123" },
12747
12901
  args: {
12748
12902
  id: { type: "positional", description: "Image ID", required: false },
@@ -12778,7 +12932,7 @@ var getCommand2 = defineCommand95({
12778
12932
  });
12779
12933
 
12780
12934
  // src/commands/images/gif.ts
12781
- import { defineCommand as defineCommand96 } from "citty";
12935
+ import { defineCommand as defineCommand100 } from "citty";
12782
12936
  registerSchema({
12783
12937
  command: "images.gif",
12784
12938
  description: "Search Giphy for GIFs / reaction memes (paid social creative).",
@@ -12810,7 +12964,7 @@ registerSchema({
12810
12964
  }
12811
12965
  }
12812
12966
  });
12813
- var gifCommand = defineCommand96({
12967
+ var gifCommand = defineCommand100({
12814
12968
  meta: {
12815
12969
  name: "gif",
12816
12970
  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"
@@ -12857,7 +13011,7 @@ var gifCommand = defineCommand96({
12857
13011
  });
12858
13012
 
12859
13013
  // src/commands/images/google.ts
12860
- import { defineCommand as defineCommand97 } from "citty";
13014
+ import { defineCommand as defineCommand101 } from "citty";
12861
13015
  registerSchema({
12862
13016
  command: "images.google",
12863
13017
  description: "Google Images search via the official Custom Search JSON API. Unverified source \u2014 inspect before placing.",
@@ -12893,7 +13047,7 @@ registerSchema({
12893
13047
  }
12894
13048
  }
12895
13049
  });
12896
- var googleCommand2 = defineCommand97({
13050
+ var googleCommand2 = defineCommand101({
12897
13051
  meta: {
12898
13052
  name: "google",
12899
13053
  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"
@@ -12941,7 +13095,7 @@ var googleCommand2 = defineCommand97({
12941
13095
  });
12942
13096
 
12943
13097
  // src/commands/images/icon.ts
12944
- import { defineCommand as defineCommand98 } from "citty";
13098
+ import { defineCommand as defineCommand102 } from "citty";
12945
13099
  registerSchema({
12946
13100
  command: "images.icon",
12947
13101
  description: "Icon lookup via Iconify (200+ icon sets, free CDN).",
@@ -12967,7 +13121,7 @@ registerSchema({
12967
13121
  }
12968
13122
  }
12969
13123
  });
12970
- var iconCommand = defineCommand98({
13124
+ var iconCommand = defineCommand102({
12971
13125
  meta: {
12972
13126
  name: "icon",
12973
13127
  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'"
@@ -13007,7 +13161,7 @@ var iconCommand = defineCommand98({
13007
13161
  });
13008
13162
 
13009
13163
  // src/commands/images/ingest.ts
13010
- import { defineCommand as defineCommand99 } from "citty";
13164
+ import { defineCommand as defineCommand103 } from "citty";
13011
13165
  registerSchema({
13012
13166
  command: "images.ingest",
13013
13167
  description: "Ingest a remote image URL into the library (full describe + embed).",
@@ -13019,7 +13173,7 @@ registerSchema({
13019
13173
  context: { type: "string", description: "Description context hint", required: false }
13020
13174
  }
13021
13175
  });
13022
- var ingestCommand = defineCommand99({
13176
+ var ingestCommand = defineCommand103({
13023
13177
  meta: {
13024
13178
  name: "ingest",
13025
13179
  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"
@@ -13061,7 +13215,7 @@ var ingestCommand = defineCommand99({
13061
13215
  });
13062
13216
 
13063
13217
  // src/commands/images/library.ts
13064
- import { defineCommand as defineCommand100 } from "citty";
13218
+ import { defineCommand as defineCommand104 } from "citty";
13065
13219
  registerSchema({
13066
13220
  command: "images.library",
13067
13221
  description: "Search the company image library. Returns only ready images.",
@@ -13087,7 +13241,7 @@ registerSchema({
13087
13241
  }
13088
13242
  }
13089
13243
  });
13090
- var libraryCommand = defineCommand100({
13244
+ var libraryCommand = defineCommand104({
13091
13245
  meta: {
13092
13246
  name: "library",
13093
13247
  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"
@@ -13144,7 +13298,7 @@ var libraryCommand = defineCommand100({
13144
13298
  });
13145
13299
 
13146
13300
  // src/commands/images/logo.ts
13147
- import { defineCommand as defineCommand101 } from "citty";
13301
+ import { defineCommand as defineCommand105 } from "citty";
13148
13302
  registerSchema({
13149
13303
  command: "images.logo",
13150
13304
  description: "Brand logo lookup via Brandfetch CDN (fallback/404). Auto-ingests by default.",
@@ -13169,7 +13323,7 @@ registerSchema({
13169
13323
  }
13170
13324
  }
13171
13325
  });
13172
- var logoCommand = defineCommand101({
13326
+ var logoCommand = defineCommand105({
13173
13327
  meta: {
13174
13328
  name: "logo",
13175
13329
  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"
@@ -13207,7 +13361,7 @@ var logoCommand = defineCommand101({
13207
13361
  });
13208
13362
 
13209
13363
  // src/commands/images/normalize.ts
13210
- import { defineCommand as defineCommand102 } from "citty";
13364
+ import { defineCommand as defineCommand106 } from "citty";
13211
13365
 
13212
13366
  // src/lib/image/color-changer.ts
13213
13367
  import quantize from "quantize";
@@ -13939,7 +14093,7 @@ function coerceRawArgs(args) {
13939
14093
  "dry-run": bool(args["dry-run"])
13940
14094
  };
13941
14095
  }
13942
- var normalizeCommand = defineCommand102({
14096
+ var normalizeCommand = defineCommand106({
13943
14097
  meta: {
13944
14098
  name: "normalize",
13945
14099
  description: `Normalize logos / images: declarative recolor + bg removal + trim + resize. Operates on local files; writes in-place by default.
@@ -13994,7 +14148,7 @@ Examples:
13994
14148
  });
13995
14149
 
13996
14150
  // src/commands/images/pinterest.ts
13997
- import { defineCommand as defineCommand103 } from "citty";
14151
+ import { defineCommand as defineCommand107 } from "citty";
13998
14152
  registerSchema({
13999
14153
  command: "images.pinterest",
14000
14154
  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.",
@@ -14014,7 +14168,7 @@ registerSchema({
14014
14168
  }
14015
14169
  }
14016
14170
  });
14017
- var pinterestCommand = defineCommand103({
14171
+ var pinterestCommand = defineCommand107({
14018
14172
  meta: {
14019
14173
  name: "pinterest",
14020
14174
  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'"
@@ -14054,7 +14208,7 @@ var pinterestCommand = defineCommand103({
14054
14208
  });
14055
14209
 
14056
14210
  // src/commands/images/screenshot.ts
14057
- import { defineCommand as defineCommand104 } from "citty";
14211
+ import { defineCommand as defineCommand108 } from "citty";
14058
14212
  registerSchema({
14059
14213
  command: "images.screenshot",
14060
14214
  description: "Capture a website screenshot via ScreenshotOne. Auto-ingests on success.",
@@ -14070,7 +14224,7 @@ registerSchema({
14070
14224
  }
14071
14225
  }
14072
14226
  });
14073
- var screenshotCommand = defineCommand104({
14227
+ var screenshotCommand = defineCommand108({
14074
14228
  meta: {
14075
14229
  name: "screenshot",
14076
14230
  description: "Screenshot a URL via ScreenshotOne. $0.009/capture. Auto-ingests to library.\n\nExample: baker images screenshot https://stripe.com --full-page"
@@ -14120,7 +14274,7 @@ var screenshotCommand = defineCommand104({
14120
14274
  });
14121
14275
 
14122
14276
  // src/commands/images/search.ts
14123
- import { defineCommand as defineCommand105 } from "citty";
14277
+ import { defineCommand as defineCommand109 } from "citty";
14124
14278
  registerSchema({
14125
14279
  command: "images.search",
14126
14280
  description: "Search images by text query. Only returns ready images.",
@@ -14136,7 +14290,7 @@ registerSchema({
14136
14290
  tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
14137
14291
  }
14138
14292
  });
14139
- var searchCommand = defineCommand105({
14293
+ var searchCommand = defineCommand109({
14140
14294
  meta: {
14141
14295
  name: "search",
14142
14296
  description: "Semantic search images by text query. Uses hybrid BM25 + vector + reranking. Example: baker images search 'hero banner' --aspect-ratio 16:9 --tags logo"
@@ -14196,7 +14350,7 @@ var searchCommand = defineCommand105({
14196
14350
  });
14197
14351
 
14198
14352
  // src/commands/images/sticker.ts
14199
- import { defineCommand as defineCommand106 } from "citty";
14353
+ import { defineCommand as defineCommand110 } from "citty";
14200
14354
  registerSchema({
14201
14355
  command: "images.sticker",
14202
14356
  description: "Search Giphy stickers \u2014 transparent-background overlays for ad creative.",
@@ -14228,7 +14382,7 @@ registerSchema({
14228
14382
  }
14229
14383
  }
14230
14384
  });
14231
- var stickerCommand = defineCommand106({
14385
+ var stickerCommand = defineCommand110({
14232
14386
  meta: {
14233
14387
  name: "sticker",
14234
14388
  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"
@@ -14275,7 +14429,7 @@ var stickerCommand = defineCommand106({
14275
14429
  });
14276
14430
 
14277
14431
  // src/commands/images/stock.ts
14278
- import { defineCommand as defineCommand107 } from "citty";
14432
+ import { defineCommand as defineCommand111 } from "citty";
14279
14433
  registerSchema({
14280
14434
  command: "images.stock",
14281
14435
  description: "Stock photo, vector illustration, icon-set, and PSD search via Magnific (Freepik's developer API).",
@@ -14333,7 +14487,7 @@ registerSchema({
14333
14487
  }
14334
14488
  }
14335
14489
  });
14336
- var stockCommand = defineCommand107({
14490
+ var stockCommand = defineCommand111({
14337
14491
  meta: {
14338
14492
  name: "stock",
14339
14493
  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"
@@ -14389,7 +14543,7 @@ var stockCommand = defineCommand107({
14389
14543
  });
14390
14544
 
14391
14545
  // src/lib/tags-command.ts
14392
- import { defineCommand as defineCommand108 } from "citty";
14546
+ import { defineCommand as defineCommand112 } from "citty";
14393
14547
  function makeTagsCommand(command, label, endpoint) {
14394
14548
  registerSchema({
14395
14549
  command: `${command}.tags`,
@@ -14398,7 +14552,7 @@ function makeTagsCommand(command, label, endpoint) {
14398
14552
  output: { type: "string", description: "Output format: md|json", required: false, default: "md" }
14399
14553
  }
14400
14554
  });
14401
- return defineCommand108({
14555
+ return defineCommand112({
14402
14556
  meta: {
14403
14557
  name: "tags",
14404
14558
  description: `List the available ${label} tag names (defaults + company custom tags). Use before filtering with --tags. Example: baker ${command} tags`
@@ -14431,12 +14585,12 @@ function makeTagsCommand(command, label, endpoint) {
14431
14585
  }
14432
14586
 
14433
14587
  // src/commands/images/tags.ts
14434
- var tagsCommand = makeTagsCommand("images", "image", "/api/images/tags");
14588
+ var tagsCommand2 = makeTagsCommand("images", "image", "/api/images/tags");
14435
14589
 
14436
14590
  // src/commands/images/upload.ts
14437
14591
  import { readFile as readFile9 } from "fs/promises";
14438
14592
  import { extname as extname2 } from "path";
14439
- import { defineCommand as defineCommand109 } from "citty";
14593
+ import { defineCommand as defineCommand113 } from "citty";
14440
14594
  var MIME_MAP = {
14441
14595
  ".png": "image/png",
14442
14596
  ".jpg": "image/jpeg",
@@ -14491,7 +14645,7 @@ function detectContentType(filePath) {
14491
14645
  }
14492
14646
  return mime;
14493
14647
  }
14494
- var uploadCommand = defineCommand109({
14648
+ var uploadCommand = defineCommand113({
14495
14649
  meta: {
14496
14650
  name: "upload",
14497
14651
  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'"
@@ -14584,7 +14738,7 @@ async function uploadLocal(target, args) {
14584
14738
  }
14585
14739
 
14586
14740
  // src/commands/images/upscale.ts
14587
- import { defineCommand as defineCommand110 } from "citty";
14741
+ import { defineCommand as defineCommand114 } from "citty";
14588
14742
  registerSchema({
14589
14743
  command: "images.upscale",
14590
14744
  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).",
@@ -14599,7 +14753,7 @@ registerSchema({
14599
14753
  }
14600
14754
  });
14601
14755
  var POLL_INTERVAL_MS3 = 1500;
14602
- var upscaleCommand = defineCommand110({
14756
+ var upscaleCommand = defineCommand114({
14603
14757
  meta: {
14604
14758
  name: "upscale",
14605
14759
  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"
@@ -14654,7 +14808,7 @@ var upscaleCommand = defineCommand110({
14654
14808
  });
14655
14809
 
14656
14810
  // src/commands/images/use.ts
14657
- import { defineCommand as defineCommand111 } from "citty";
14811
+ import { defineCommand as defineCommand115 } from "citty";
14658
14812
  registerSchema({
14659
14813
  command: "images.use",
14660
14814
  description: "Ingest a URL and wait for the library record to be ready.",
@@ -14670,7 +14824,7 @@ registerSchema({
14670
14824
  }
14671
14825
  });
14672
14826
  var POLL_INTERVAL_MS4 = 1500;
14673
- var useCommand = defineCommand111({
14827
+ var useCommand = defineCommand115({
14674
14828
  meta: {
14675
14829
  name: "use",
14676
14830
  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"
@@ -14716,7 +14870,7 @@ var useCommand = defineCommand111({
14716
14870
  });
14717
14871
 
14718
14872
  // src/commands/images/index.ts
14719
- var imagesCommand = defineCommand112({
14873
+ var imagesCommand = defineCommand116({
14720
14874
  meta: {
14721
14875
  name: "images",
14722
14876
  description: `Find, source, and normalize images. Subcommands route by provider so cost + license are explicit.
@@ -14781,15 +14935,15 @@ Paid transforms (run on the Convex backend, cost-tracked):
14781
14935
  crop: cropCommand,
14782
14936
  dimensions: dimensionsCommand,
14783
14937
  upscale: upscaleCommand,
14784
- tags: tagsCommand
14938
+ tags: tagsCommand2
14785
14939
  }
14786
14940
  });
14787
14941
 
14788
14942
  // src/commands/research/index.ts
14789
- import { defineCommand as defineCommand123 } from "citty";
14943
+ import { defineCommand as defineCommand127 } from "citty";
14790
14944
 
14791
14945
  // src/commands/research/advertisers.ts
14792
- import { defineCommand as defineCommand113 } from "citty";
14946
+ import { defineCommand as defineCommand117 } from "citty";
14793
14947
 
14794
14948
  // src/commands/research/output.ts
14795
14949
  var RESEARCH_DATA_NOTE = "Estimates based on third-party SERP data \u2014 not exact figures. Use for directional insights, not precise measurement.";
@@ -14902,7 +15056,7 @@ var FIELDS3 = {
14902
15056
  etv: "Estimated traffic value (USD)",
14903
15057
  visibility: "SERP visibility score (0-1)"
14904
15058
  };
14905
- var advertisersCommand = defineCommand113({
15059
+ var advertisersCommand = defineCommand117({
14906
15060
  meta: {
14907
15061
  name: "advertisers",
14908
15062
  description: `Find domains competing for a keyword in Google SERPs.
@@ -14949,7 +15103,7 @@ Examples:
14949
15103
  });
14950
15104
 
14951
15105
  // src/commands/research/autocomplete.ts
14952
- import { defineCommand as defineCommand114 } from "citty";
15106
+ import { defineCommand as defineCommand118 } from "citty";
14953
15107
  registerSchema({
14954
15108
  command: "research.autocomplete",
14955
15109
  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).",
@@ -14972,7 +15126,7 @@ registerSchema({
14972
15126
  var FIELDS4 = {
14973
15127
  suggestion: "Autocomplete suggestion from Google"
14974
15128
  };
14975
- var autocompleteCommand = defineCommand114({
15129
+ var autocompleteCommand = defineCommand118({
14976
15130
  meta: {
14977
15131
  name: "autocomplete",
14978
15132
  description: `Get Google Autocomplete suggestions for keyword expansion.
@@ -15018,7 +15172,7 @@ Examples:
15018
15172
  });
15019
15173
 
15020
15174
  // src/commands/research/countries.ts
15021
- import { defineCommand as defineCommand115 } from "citty";
15175
+ import { defineCommand as defineCommand119 } from "citty";
15022
15176
  registerSchema({
15023
15177
  command: "research.countries",
15024
15178
  description: "List all supported country codes for --location flag in research commands.",
@@ -15075,7 +15229,7 @@ var FIELDS5 = {
15075
15229
  code: "Country code to pass as --location",
15076
15230
  name: "Country name"
15077
15231
  };
15078
- var countriesCommand = defineCommand115({
15232
+ var countriesCommand = defineCommand119({
15079
15233
  meta: {
15080
15234
  name: "countries",
15081
15235
  description: "List all supported country codes for --location flag."
@@ -15086,7 +15240,7 @@ var countriesCommand = defineCommand115({
15086
15240
  });
15087
15241
 
15088
15242
  // src/commands/research/intent.ts
15089
- import { defineCommand as defineCommand116 } from "citty";
15243
+ import { defineCommand as defineCommand120 } from "citty";
15090
15244
  registerSchema({
15091
15245
  command: "research.intent",
15092
15246
  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.",
@@ -15109,7 +15263,7 @@ var FIELDS6 = {
15109
15263
  intent: "Primary Google Search intent: informational, navigational, commercial, transactional",
15110
15264
  probability: "Confidence score 0.0-1.0"
15111
15265
  };
15112
- var intentCommand = defineCommand116({
15266
+ var intentCommand = defineCommand120({
15113
15267
  meta: {
15114
15268
  name: "intent",
15115
15269
  description: `Classify Google Search intent for keywords. Returns intent type and confidence.
@@ -15157,7 +15311,7 @@ Examples:
15157
15311
  });
15158
15312
 
15159
15313
  // src/commands/research/keyword-gap.ts
15160
- import { defineCommand as defineCommand117 } from "citty";
15314
+ import { defineCommand as defineCommand121 } from "citty";
15161
15315
  registerSchema({
15162
15316
  command: "research.keyword-gap",
15163
15317
  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.",
@@ -15186,7 +15340,7 @@ var FIELDS7 = {
15186
15340
  cpc: "Cost per click USD",
15187
15341
  their_position: "Competitor's ranking position"
15188
15342
  };
15189
- var keywordGapCommand = defineCommand117({
15343
+ var keywordGapCommand = defineCommand121({
15190
15344
  meta: {
15191
15345
  name: "keyword-gap",
15192
15346
  description: `Find keywords a competitor has that you don't. Supports pagination via --offset.
@@ -15260,7 +15414,7 @@ Examples:
15260
15414
  });
15261
15415
 
15262
15416
  // src/commands/research/keywords-for-site.ts
15263
- import { defineCommand as defineCommand118 } from "citty";
15417
+ import { defineCommand as defineCommand122 } from "citty";
15264
15418
  registerSchema({
15265
15419
  command: "research.keywords-for-site",
15266
15420
  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.",
@@ -15293,7 +15447,7 @@ var FIELDS8 = {
15293
15447
  competition: "LOW, MEDIUM, or HIGH",
15294
15448
  competition_index: "Competition score 0-100"
15295
15449
  };
15296
- var keywordsForSiteCommand = defineCommand118({
15450
+ var keywordsForSiteCommand = defineCommand122({
15297
15451
  meta: {
15298
15452
  name: "keywords-for-site",
15299
15453
  description: `Get keywords a competitor targets in Google. Use --type to filter paid/organic.
@@ -15346,7 +15500,7 @@ Examples:
15346
15500
  });
15347
15501
 
15348
15502
  // src/commands/research/languages.ts
15349
- import { defineCommand as defineCommand119 } from "citty";
15503
+ import { defineCommand as defineCommand123 } from "citty";
15350
15504
  registerSchema({
15351
15505
  command: "research.languages",
15352
15506
  description: "List all supported language codes for --language flag in research commands.",
@@ -15376,7 +15530,7 @@ var FIELDS9 = {
15376
15530
  code: "Language code to pass as --language",
15377
15531
  name: "Language name (also accepted by --language)"
15378
15532
  };
15379
- var languagesCommand2 = defineCommand119({
15533
+ var languagesCommand2 = defineCommand123({
15380
15534
  meta: {
15381
15535
  name: "languages",
15382
15536
  description: "List all supported language codes for --language flag."
@@ -15387,7 +15541,7 @@ var languagesCommand2 = defineCommand119({
15387
15541
  });
15388
15542
 
15389
15543
  // src/commands/research/lighthouse.ts
15390
- import { defineCommand as defineCommand120 } from "citty";
15544
+ import { defineCommand as defineCommand124 } from "citty";
15391
15545
  registerSchema({
15392
15546
  command: "research.lighthouse",
15393
15547
  description: "Landing page performance audit. Returns metrics that affect Google Ads Quality Score and CPC.",
@@ -15406,7 +15560,7 @@ var FIELDS10 = {
15406
15560
  speed_index_ms: "Speed Index in ms (good: < 3400)",
15407
15561
  interactive_ms: "Time to Interactive in ms (good: < 3800)"
15408
15562
  };
15409
- var lighthouseCommand = defineCommand120({
15563
+ var lighthouseCommand = defineCommand124({
15410
15564
  meta: {
15411
15565
  name: "lighthouse",
15412
15566
  description: `Landing page performance audit. Metrics affecting Google Ads Quality Score.
@@ -15444,7 +15598,7 @@ Examples:
15444
15598
  });
15445
15599
 
15446
15600
  // src/commands/research/relevant-pages.ts
15447
- import { defineCommand as defineCommand121 } from "citty";
15601
+ import { defineCommand as defineCommand125 } from "citty";
15448
15602
  registerSchema({
15449
15603
  command: "research.relevant-pages",
15450
15604
  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).",
@@ -15470,7 +15624,7 @@ var FIELDS11 = {
15470
15624
  keywords: "Total organic keywords the page ranks for",
15471
15625
  top_10: "Keywords in positions 1-10"
15472
15626
  };
15473
- var relevantPagesCommand = defineCommand121({
15627
+ var relevantPagesCommand = defineCommand125({
15474
15628
  meta: {
15475
15629
  name: "relevant-pages",
15476
15630
  description: `Get the top pages of a competitor domain with traffic data.
@@ -15516,7 +15670,7 @@ Examples:
15516
15670
  });
15517
15671
 
15518
15672
  // src/commands/research/web.ts
15519
- import { defineCommand as defineCommand122 } from "citty";
15673
+ import { defineCommand as defineCommand126 } from "citty";
15520
15674
  registerSchema({
15521
15675
  command: "research.web",
15522
15676
  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).",
@@ -15567,7 +15721,7 @@ async function runDeepResearch(question) {
15567
15721
  }
15568
15722
  throw new Error("Deep research timed out");
15569
15723
  }
15570
- var webCommand = defineCommand122({
15724
+ var webCommand = defineCommand126({
15571
15725
  meta: {
15572
15726
  name: "web",
15573
15727
  description: `Search the web with AI to answer any open-ended marketing question. Uses live internet data via Google Search.
@@ -15627,7 +15781,7 @@ Examples:
15627
15781
  });
15628
15782
 
15629
15783
  // src/commands/research/index.ts
15630
- var researchCommand = defineCommand123({
15784
+ var researchCommand = defineCommand127({
15631
15785
  meta: {
15632
15786
  name: "research",
15633
15787
  description: `Competitive intelligence and AI-powered research commands.
@@ -15667,10 +15821,10 @@ Examples:
15667
15821
  });
15668
15822
 
15669
15823
  // src/commands/scheduled-actions/index.ts
15670
- import { defineCommand as defineCommand130 } from "citty";
15824
+ import { defineCommand as defineCommand134 } from "citty";
15671
15825
 
15672
15826
  // src/commands/scheduled-actions/create.ts
15673
- import { defineCommand as defineCommand124 } from "citty";
15827
+ import { defineCommand as defineCommand128 } from "citty";
15674
15828
 
15675
15829
  // src/commands/scheduled-actions/shared.ts
15676
15830
  var TEMP_SCHEDULED_ACTION_PREFIX = "temp_sched_";
@@ -15775,7 +15929,7 @@ registerSchema({
15775
15929
  prompt: { type: "string", description: "Additional prompt instructions for the spawned agent", required: false }
15776
15930
  }
15777
15931
  });
15778
- var createCommand2 = defineCommand124({
15932
+ var createCommand2 = defineCommand128({
15779
15933
  meta: {
15780
15934
  name: "create",
15781
15935
  description: 'Stage a scheduled action. Example: baker scheduled-actions create --name "Weekly report" --description "..." --cron "0 9 * * MON"'
@@ -15823,7 +15977,7 @@ var createCommand2 = defineCommand124({
15823
15977
  });
15824
15978
 
15825
15979
  // src/commands/scheduled-actions/delete.ts
15826
- import { defineCommand as defineCommand125 } from "citty";
15980
+ import { defineCommand as defineCommand129 } from "citty";
15827
15981
  registerSchema({
15828
15982
  command: "scheduled-actions.delete",
15829
15983
  description: "Stage deletion of a published scheduled action or cancellation of a temp_sched_* draft creation.",
@@ -15831,7 +15985,7 @@ registerSchema({
15831
15985
  id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
15832
15986
  }
15833
15987
  });
15834
- var deleteCommand2 = defineCommand125({
15988
+ var deleteCommand2 = defineCommand129({
15835
15989
  meta: {
15836
15990
  name: "delete",
15837
15991
  description: "Stage scheduled action deletion. Example: baker scheduled-actions delete <id-or-temp_sched_id>"
@@ -15860,7 +16014,7 @@ var deleteCommand2 = defineCommand125({
15860
16014
  });
15861
16015
 
15862
16016
  // src/commands/scheduled-actions/get.ts
15863
- import { defineCommand as defineCommand126 } from "citty";
16017
+ import { defineCommand as defineCommand130 } from "citty";
15864
16018
  registerSchema({
15865
16019
  command: "scheduled-actions.get",
15866
16020
  description: "Get a published scheduled action or a temp_sched_* draft-created scheduled action.",
@@ -15868,7 +16022,7 @@ registerSchema({
15868
16022
  id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
15869
16023
  }
15870
16024
  });
15871
- var getCommand3 = defineCommand126({
16025
+ var getCommand3 = defineCommand130({
15872
16026
  meta: {
15873
16027
  name: "get",
15874
16028
  description: "Get a scheduled action. Example: baker scheduled-actions get <id-or-temp_sched_id>"
@@ -15905,13 +16059,13 @@ var getCommand3 = defineCommand126({
15905
16059
  });
15906
16060
 
15907
16061
  // src/commands/scheduled-actions/list.ts
15908
- import { defineCommand as defineCommand127 } from "citty";
16062
+ import { defineCommand as defineCommand131 } from "citty";
15909
16063
  registerSchema({
15910
16064
  command: "scheduled-actions.list",
15911
16065
  description: "List published scheduled actions. Includes draft state when BAKER_CHAT_ID is set.",
15912
16066
  args: {}
15913
16067
  });
15914
- var listCommand3 = defineCommand127({
16068
+ var listCommand3 = defineCommand131({
15915
16069
  meta: {
15916
16070
  name: "list",
15917
16071
  description: "List scheduled actions. Includes staged draft ops when BAKER_CHAT_ID is set."
@@ -15932,7 +16086,7 @@ var listCommand3 = defineCommand127({
15932
16086
  });
15933
16087
 
15934
16088
  // src/commands/scheduled-actions/trigger.ts
15935
- import { defineCommand as defineCommand128 } from "citty";
16089
+ import { defineCommand as defineCommand132 } from "citty";
15936
16090
  registerSchema({
15937
16091
  command: "scheduled-actions.trigger",
15938
16092
  description: "Immediately trigger a published scheduled action. Does not require BAKER_CHAT_ID and rejects temp_sched_* IDs.",
@@ -15940,7 +16094,7 @@ registerSchema({
15940
16094
  id: { type: "string", description: "Published scheduled action ID", required: true }
15941
16095
  }
15942
16096
  });
15943
- var triggerCommand = defineCommand128({
16097
+ var triggerCommand = defineCommand132({
15944
16098
  meta: {
15945
16099
  name: "trigger",
15946
16100
  description: "Immediately trigger a published scheduled action. Example: baker scheduled-actions trigger <id>"
@@ -15977,7 +16131,7 @@ var triggerCommand = defineCommand128({
15977
16131
  });
15978
16132
 
15979
16133
  // src/commands/scheduled-actions/update.ts
15980
- import { defineCommand as defineCommand129 } from "citty";
16134
+ import { defineCommand as defineCommand133 } from "citty";
15981
16135
  registerSchema({
15982
16136
  command: "scheduled-actions.update",
15983
16137
  description: "Stage an update to a published scheduled action or temp_sched_* draft-created scheduled action.",
@@ -16002,7 +16156,7 @@ registerSchema({
16002
16156
  prompt: { type: "string", description: "Replacement additional spawned-agent instructions", required: false }
16003
16157
  }
16004
16158
  });
16005
- var updateCommand2 = defineCommand129({
16159
+ var updateCommand2 = defineCommand133({
16006
16160
  meta: {
16007
16161
  name: "update",
16008
16162
  description: "Stage a scheduled action update. Example: baker scheduled-actions update <id> --enabled false"
@@ -16072,7 +16226,7 @@ var updateCommand2 = defineCommand129({
16072
16226
  });
16073
16227
 
16074
16228
  // src/commands/scheduled-actions/index.ts
16075
- var scheduledActionsCommand = defineCommand130({
16229
+ var scheduledActionsCommand = defineCommand134({
16076
16230
  meta: {
16077
16231
  name: "scheduled-actions",
16078
16232
  description: `Manage Scheduled Actions. Subcommands: list, get, create, update, delete, trigger.
@@ -16098,8 +16252,8 @@ Examples:
16098
16252
  });
16099
16253
 
16100
16254
  // src/commands/schema.ts
16101
- import { defineCommand as defineCommand131 } from "citty";
16102
- var schemaCommand = defineCommand131({
16255
+ import { defineCommand as defineCommand135 } from "citty";
16256
+ var schemaCommand = defineCommand135({
16103
16257
  meta: {
16104
16258
  name: "schema",
16105
16259
  description: "Inspect command argument schemas (for AI agent introspection). Lists all commands if no argument given. Example: baker schema images.search"
@@ -16135,10 +16289,10 @@ var schemaCommand = defineCommand131({
16135
16289
  });
16136
16290
 
16137
16291
  // src/commands/testimonials/index.ts
16138
- import { defineCommand as defineCommand135 } from "citty";
16292
+ import { defineCommand as defineCommand139 } from "citty";
16139
16293
 
16140
16294
  // src/commands/testimonials/get.ts
16141
- import { defineCommand as defineCommand132 } from "citty";
16295
+ import { defineCommand as defineCommand136 } from "citty";
16142
16296
  registerSchema({
16143
16297
  command: "testimonials.get",
16144
16298
  description: "Get a single testimonial by ID",
@@ -16146,7 +16300,7 @@ registerSchema({
16146
16300
  id: { type: "string", description: "Testimonial ID", required: true }
16147
16301
  }
16148
16302
  });
16149
- var getCommand4 = defineCommand132({
16303
+ var getCommand4 = defineCommand136({
16150
16304
  meta: { name: "get", description: "Get a single testimonial by ID. Example: baker testimonials get j571abc123" },
16151
16305
  args: {
16152
16306
  id: { type: "positional", description: "Testimonial ID", required: false },
@@ -16183,7 +16337,7 @@ var getCommand4 = defineCommand132({
16183
16337
  });
16184
16338
 
16185
16339
  // src/commands/testimonials/list.ts
16186
- import { defineCommand as defineCommand133 } from "citty";
16340
+ import { defineCommand as defineCommand137 } from "citty";
16187
16341
  registerSchema({
16188
16342
  command: "testimonials.list",
16189
16343
  description: "List testimonials with optional filters.",
@@ -16213,7 +16367,7 @@ registerSchema({
16213
16367
  limit: { type: "number", description: "Max results (default 50)", required: false, default: 50 }
16214
16368
  }
16215
16369
  });
16216
- var listCommand4 = defineCommand133({
16370
+ var listCommand4 = defineCommand137({
16217
16371
  meta: {
16218
16372
  name: "list",
16219
16373
  description: "List testimonials with optional filters. Example: baker testimonials list --source google --sentiment positive"
@@ -16262,7 +16416,7 @@ var listCommand4 = defineCommand133({
16262
16416
  });
16263
16417
 
16264
16418
  // src/commands/testimonials/search.ts
16265
- import { defineCommand as defineCommand134 } from "citty";
16419
+ import { defineCommand as defineCommand138 } from "citty";
16266
16420
  registerSchema({
16267
16421
  command: "testimonials.search",
16268
16422
  description: "Search testimonials by text query. Uses hybrid BM25 + vector + reranking.",
@@ -16293,7 +16447,7 @@ registerSchema({
16293
16447
  tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
16294
16448
  }
16295
16449
  });
16296
- var searchCommand2 = defineCommand134({
16450
+ var searchCommand2 = defineCommand138({
16297
16451
  meta: {
16298
16452
  name: "search",
16299
16453
  description: "Semantic search testimonials by text query. Uses hybrid BM25 + vector + reranking. Example: baker testimonials search 'great service' --rating-min 4"
@@ -16364,10 +16518,10 @@ var searchCommand2 = defineCommand134({
16364
16518
  });
16365
16519
 
16366
16520
  // src/commands/testimonials/tags.ts
16367
- var tagsCommand2 = makeTagsCommand("testimonials", "testimonial", "/api/testimonials/tags");
16521
+ var tagsCommand3 = makeTagsCommand("testimonials", "testimonial", "/api/testimonials/tags");
16368
16522
 
16369
16523
  // src/commands/testimonials/index.ts
16370
- var testimonialsCommand = defineCommand135({
16524
+ var testimonialsCommand = defineCommand139({
16371
16525
  meta: {
16372
16526
  name: "testimonials",
16373
16527
  description: `Find and browse testimonials in Baker. Subcommands: search, get, list, tags.
@@ -16383,15 +16537,15 @@ Examples:
16383
16537
  get: getCommand4,
16384
16538
  search: searchCommand2,
16385
16539
  list: listCommand4,
16386
- tags: tagsCommand2
16540
+ tags: tagsCommand3
16387
16541
  }
16388
16542
  });
16389
16543
 
16390
16544
  // src/commands/videos/index.ts
16391
- import { defineCommand as defineCommand140 } from "citty";
16545
+ import { defineCommand as defineCommand144 } from "citty";
16392
16546
 
16393
16547
  // src/commands/videos/delete.ts
16394
- import { defineCommand as defineCommand136 } from "citty";
16548
+ import { defineCommand as defineCommand140 } from "citty";
16395
16549
  registerSchema({
16396
16550
  command: "videos.delete",
16397
16551
  description: "Delete a video by ID",
@@ -16405,7 +16559,7 @@ registerSchema({
16405
16559
  }
16406
16560
  }
16407
16561
  });
16408
- var deleteCommand3 = defineCommand136({
16562
+ var deleteCommand3 = defineCommand140({
16409
16563
  meta: {
16410
16564
  name: "delete",
16411
16565
  description: "Delete a video by ID. Use --dry-run to preview. Example: baker videos delete j571abc123 --dry-run"
@@ -16446,7 +16600,7 @@ var deleteCommand3 = defineCommand136({
16446
16600
  });
16447
16601
 
16448
16602
  // src/commands/videos/get.ts
16449
- import { defineCommand as defineCommand137 } from "citty";
16603
+ import { defineCommand as defineCommand141 } from "citty";
16450
16604
  registerSchema({
16451
16605
  command: "videos.get",
16452
16606
  description: "Get a single video by ID",
@@ -16454,7 +16608,7 @@ registerSchema({
16454
16608
  id: { type: "string", description: "Video ID", required: true }
16455
16609
  }
16456
16610
  });
16457
- var getCommand5 = defineCommand137({
16611
+ var getCommand5 = defineCommand141({
16458
16612
  meta: { name: "get", description: "Get a single video by ID. Example: baker videos get j571abc123" },
16459
16613
  args: {
16460
16614
  id: { type: "positional", description: "Video ID", required: false },
@@ -16491,7 +16645,7 @@ var getCommand5 = defineCommand137({
16491
16645
  });
16492
16646
 
16493
16647
  // src/commands/videos/search.ts
16494
- import { defineCommand as defineCommand138 } from "citty";
16648
+ import { defineCommand as defineCommand142 } from "citty";
16495
16649
  registerSchema({
16496
16650
  command: "videos.search",
16497
16651
  description: "Search videos by text query. Only returns ready videos.",
@@ -16501,7 +16655,7 @@ registerSchema({
16501
16655
  tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
16502
16656
  }
16503
16657
  });
16504
- var searchCommand3 = defineCommand138({
16658
+ var searchCommand3 = defineCommand142({
16505
16659
  meta: {
16506
16660
  name: "search",
16507
16661
  description: "Semantic search videos by text query. Uses hybrid BM25 + vector + reranking. Example: baker videos search 'product demo' --tags tutorial"
@@ -16548,12 +16702,12 @@ var searchCommand3 = defineCommand138({
16548
16702
  });
16549
16703
 
16550
16704
  // src/commands/videos/tags.ts
16551
- var tagsCommand3 = makeTagsCommand("videos", "video", "/api/videos/tags");
16705
+ var tagsCommand4 = makeTagsCommand("videos", "video", "/api/videos/tags");
16552
16706
 
16553
16707
  // src/commands/videos/upload.ts
16554
16708
  import { readFile as readFile10, stat as stat3 } from "fs/promises";
16555
16709
  import { extname as extname3 } from "path";
16556
- import { defineCommand as defineCommand139 } from "citty";
16710
+ import { defineCommand as defineCommand143 } from "citty";
16557
16711
  var MIME_MAP2 = {
16558
16712
  ".mp4": "video/mp4",
16559
16713
  ".mov": "video/quicktime",
@@ -16587,7 +16741,7 @@ function detectContentType2(filePath) {
16587
16741
  }
16588
16742
  return mime;
16589
16743
  }
16590
- var uploadCommand2 = defineCommand139({
16744
+ var uploadCommand2 = defineCommand143({
16591
16745
  meta: {
16592
16746
  name: "upload",
16593
16747
  description: "Upload a video file to Baker via Mux direct upload. Auto-detects content type. Example: baker videos upload ./demo.mp4"
@@ -16641,7 +16795,7 @@ var uploadCommand2 = defineCommand139({
16641
16795
  });
16642
16796
 
16643
16797
  // src/commands/videos/index.ts
16644
- var videosCommand = defineCommand140({
16798
+ var videosCommand = defineCommand144({
16645
16799
  meta: {
16646
16800
  name: "videos",
16647
16801
  description: `Find and manage videos in Baker. Subcommands: search, get, upload, delete, tags.
@@ -16659,15 +16813,15 @@ Examples:
16659
16813
  search: searchCommand3,
16660
16814
  upload: uploadCommand2,
16661
16815
  delete: deleteCommand3,
16662
- tags: tagsCommand3
16816
+ tags: tagsCommand4
16663
16817
  }
16664
16818
  });
16665
16819
 
16666
16820
  // src/commands/winning-ads/index.ts
16667
- import { defineCommand as defineCommand143 } from "citty";
16821
+ import { defineCommand as defineCommand147 } from "citty";
16668
16822
 
16669
16823
  // src/commands/winning-ads/advertisers.ts
16670
- import { defineCommand as defineCommand141 } from "citty";
16824
+ import { defineCommand as defineCommand145 } from "citty";
16671
16825
  registerSchema({
16672
16826
  command: "winning-ads.advertisers",
16673
16827
  description: "Resolve a brand name to advertiser_id(s) in the ad-dna corpus \u2014 to find your OWN advertiser (to --exclude-advertiser) or a competitor (to --advertiser-id).",
@@ -16680,7 +16834,7 @@ registerSchema({
16680
16834
  function identity(record) {
16681
16835
  return record;
16682
16836
  }
16683
- var advertisersCommand2 = defineCommand141({
16837
+ var advertisersCommand2 = defineCommand145({
16684
16838
  meta: {
16685
16839
  name: "advertisers",
16686
16840
  description: 'Resolve a brand name to advertiser_id(s). Use it to find your own advertiser for --exclude-advertiser, or a competitor for --advertiser-id. Example: baker winning-ads advertisers "Deel" --output md'
@@ -16731,7 +16885,7 @@ var advertisersCommand2 = defineCommand141({
16731
16885
  });
16732
16886
 
16733
16887
  // src/commands/winning-ads/search.ts
16734
- import { defineCommand as defineCommand142 } from "citty";
16888
+ import { defineCommand as defineCommand146 } from "citty";
16735
16889
  registerSchema({
16736
16890
  command: "winning-ads.search",
16737
16891
  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.",
@@ -16839,7 +16993,7 @@ function buildSearchBody(args) {
16839
16993
  }
16840
16994
  return body;
16841
16995
  }
16842
- var searchCommand4 = defineCommand142({
16996
+ var searchCommand4 = defineCommand146({
16843
16997
  meta: {
16844
16998
  name: "search",
16845
16999
  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"
@@ -16951,7 +17105,7 @@ var searchCommand4 = defineCommand142({
16951
17105
  });
16952
17106
 
16953
17107
  // src/commands/winning-ads/index.ts
16954
- var winningAdsCommand = defineCommand143({
17108
+ var winningAdsCommand = defineCommand147({
16955
17109
  meta: {
16956
17110
  name: "winning-ads",
16957
17111
  description: `Search the ad-dna corpus of scored "winning" ads for reference creatives to reproduce. Proxied through the Baker backend (BAKER_API_KEY) \u2014 no separate token needed.
@@ -16991,7 +17145,7 @@ function getCliVersion() {
16991
17145
  }
16992
17146
 
16993
17147
  // src/cli.ts
16994
- var main = defineCommand144({
17148
+ var main = defineCommand148({
16995
17149
  meta: {
16996
17150
  name: "baker",
16997
17151
  version: getCliVersion(),