@koda-sl/baker-cli 0.111.0-dev.b43dfb4db → 0.111.0-dev.cddbc8759

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,7 +12,7 @@ import {
12
12
  } from "./chunk-26K7V346.js";
13
13
 
14
14
  // src/cli.ts
15
- import { defineCommand as defineCommand157, runMain } from "citty";
15
+ import { defineCommand as defineCommand156, runMain } from "citty";
16
16
 
17
17
  // src/commands/actions/index.ts
18
18
  import { defineCommand as defineCommand18 } from "citty";
@@ -31,7 +31,6 @@ function getEnv() {
31
31
  BAKER_API_KEY: z.string().startsWith("bk_", "API key must start with 'bk_'"),
32
32
  BAKER_API_URL: z.url("BAKER_API_URL must be a valid URL"),
33
33
  BAKER_CHAT_ID: z.string().optional(),
34
- BAKER_ACTING_USER_ID: z.string().optional(),
35
34
  BAKER_GOOGLE_ADS_CUSTOMER_ID: z.string().regex(/^\d{10}$/).optional(),
36
35
  BAKER_GA4_PROPERTY_ID: z.string().optional(),
37
36
  BAKER_GSC_SITE_URL: z.string().optional(),
@@ -4553,8 +4552,7 @@ function requireCustomerId(args) {
4553
4552
  return raw;
4554
4553
  }
4555
4554
  function requireTarget(args, entity) {
4556
- const positional = Array.isArray(args._) ? args._[0] : void 0;
4557
- const target = args.id ?? args.target ?? positional;
4555
+ const target = args.id ?? args.target ?? args._?.[0];
4558
4556
  if (typeof target !== "string" || target.length === 0) {
4559
4557
  failWriteValidation(`pass the ${entity} resource name or id as the positional argument`);
4560
4558
  }
@@ -12650,7 +12648,7 @@ function roleForType(type) {
12650
12648
  return "the showcased product; keep this exact product identity. Ignore any caption text printed on this reference.";
12651
12649
  case "person":
12652
12650
  case "animal":
12653
- return "the emotional hero \u2014 the face/muzzle/eyes the viewer locks onto and exactly where AI artifacts (malformed mouths, teeth, foam, extra fingers) betray a fake. It MUST be grounded in this real reference, never invented from prose. Keep this identity AND the expression the blueprint specifies. Ignore any caption text printed on this reference.";
12651
+ return "the hero subject; keep this identity AND the expression the blueprint specifies. Ignore any caption text printed on this reference.";
12654
12652
  default:
12655
12653
  return "an identity-bearing element; reproduce it faithfully from this reference. Ignore any caption text printed on it.";
12656
12654
  }
@@ -12658,9 +12656,7 @@ function roleForType(type) {
12658
12656
  function todoPath(el, label) {
12659
12657
  const desc = el.description ? ` \u2014 ${el.description}` : "";
12660
12658
  const expr = el.expression ? `, with a ${el.expression} expression` : "";
12661
- const t = el.type.toLowerCase();
12662
- const lock = t === "person" || t === "animal" ? " \u2014 REQUIRED: this is the emotional hero; ground it in a real reference (image-library / video-library / Pinterest), do not delete this slot and free-generate" : "";
12663
- return `[TODO: drop a real image for ${label} (${el.type})${desc}${expr}${lock}]`;
12659
+ return `[TODO: drop a real image for ${label} (${el.type})${desc}${expr}]`;
12664
12660
  }
12665
12661
  function aspectRatio(blueprint, opts) {
12666
12662
  const requested = opts.aspectRatio ?? blueprint.meta?.estimated_aspect_ratio;
@@ -12775,7 +12771,7 @@ function resolveModel(kind, preferred) {
12775
12771
  const ids = Object.keys(MODEL_REGISTRY[kind]);
12776
12772
  return ids.includes(preferred) ? preferred : ids[0] ?? preferred;
12777
12773
  }
12778
- var DESCRIBE_FOCUS = `the GLOBAL LAYOUT GEOMETRY above all \u2014 the column/row grid, each region's approximate bounds as a percentage of frame width and height, any panel SPLITS and their proportions (e.g. a left column split into a ~60% top photo and a ~20% bottom price box), what occupies every region, and for EVERY text block its string verbatim, relative size (x_large | large | medium | small), weight, case, color, and alignment \u2014 including small bottom-corner fine print. Also: the EXPRESSION and emotion of every person/animal (capture exaggerated or AI-edited faces), the ad_intent (what feeling it engineers and how), per-color brand_ownership (which colors are the advertiser's brand vs borrowed-functional like a red comparison column), logos by brand, and all visible text verbatim. CRITICAL \u2014 name the WINNING MECHANISM(S): the special sauce, the specific thing that makes THIS ad a candidate winner rather than a generic ad. A great ad is rarely great by accident, and the mechanism is invisible unless named, so a faithful rewrite quietly discards it. It may be VERBAL (a rhyme, pun, alliteration, rhythm/meter, repetition, antithesis, double meaning), VISUAL (an unexpected crop or scale, a visual gag or pun, a striking juxtaposition, a pattern interrupt, an exaggerated/AI-edited expression, a before/after or comparison, bold negative space, a surprising focal point), or STRUCTURAL (an unusual hook, order, or reveal). Record each as a \`winning_mechanisms\` array of { kind: verbal|visual|structural, device, why_it_works } (e.g. { kind: verbal, device: "rhyme \u2014 'today' / 'go away'", why_it_works: "memorable, playful, reframes cost as relief" }) so a rewrite can rebuild the SAUCE for our brand instead of adapting only the surface and losing what made it convert`;
12774
+ var DESCRIBE_FOCUS = "the GLOBAL LAYOUT GEOMETRY above all \u2014 the column/row grid, each region's approximate bounds as a percentage of frame width and height, any panel SPLITS and their proportions (e.g. a left column split into a ~60% top photo and a ~20% bottom price box), what occupies every region, and for EVERY text block its string verbatim, relative size (x_large | large | medium | small), weight, case, color, and alignment \u2014 including small bottom-corner fine print. Also: the EXPRESSION and emotion of every person/animal (capture exaggerated or AI-edited faces), the ad_intent (what feeling it engineers and how), per-color brand_ownership (which colors are the advertiser's brand vs borrowed-functional like a red comparison column), logos by brand, and all visible text verbatim";
12779
12775
  var LAYOUT_SYSTEM = "You convert an advertisement's JSON blueprint into a precise, structured LAYOUT MAP of the frame \u2014 the spatial grid a designer would rebuild it from. Be exhaustive and quantitative: every region, its bounds as a percentage of the frame, and every text block with its relative size. Output ONLY a JSON object, no prose.";
12780
12776
  var LAYOUT_PROMPT = `AD BLUEPRINT (from image_describe):
12781
12777
  {{blueprint}}
@@ -12797,20 +12793,7 @@ Return a JSON object describing the GLOBAL LAYOUT of the frame precisely enough
12797
12793
 
12798
12794
  Use the blueprint's positions, sizes, text_content, and colors. Estimate the percentages and split proportions as accurately as you can (e.g. a column split 60/20 with a 20% gap). Cover EVERY visible element \u2014 photos, text boxes, badges, background shapes, and small corner text \u2014 top-to-bottom, left-to-right. Output ONLY the JSON object.`;
12799
12795
  var SELECT_SYSTEM = 'You identify the MAIN, identity-critical visual elements of an advertisement from its JSON blueprint \u2014 the things a faithful reproduction must supply as REAL reference images instead of letting a model invent them. Output ONLY a JSON object of the form { "elements": [ ... ] }, no prose.';
12800
- var SELECT_PROMPT = `AD BLUEPRINT (from image_describe):
12801
- {{blueprint}}
12802
-
12803
- From this blueprint, list ONLY the elements that are prominent, important, and identity-bearing \u2014 the ones a reproduction must ground in a real asset:
12804
- - the brand logo/wordmark (from brands_logos with function_in_image = advertiser_brand) -> type "logo"
12805
- - trust/rating/certification/app-store/review badges (brands_logos with function_in_image = trust_badge | review_platform | certification_or_seal | app_store_badge | payment_method) -> type "badge"
12806
- - a showcased/hero product or package (a foreground entry in subjects that the ad is selling) -> type "product"
12807
- - a foreground person (from people) \u2014 keep it when its identity matters OR it is the emotional/hero focal point of the ad, even a generic one with no brand identity -> type "person"
12808
- - a foreground animal/character (from subjects) \u2014 keep it when it carries a specific expression OR it is the emotional/hero focal point, even a generic one -> type "animal"
12809
- (For both: a free-generated face, muzzle, hands, or teeth reads as AI and grows artifacts \u2014 malformed mouths, extra fingers, foam \u2014 so the emotional hero needs the STRONGEST real grounding, not the weakest; "it's just a generic dog/person" is never a reason to drop it.)
12810
-
12811
- DROP background extras, decorative props, generic scenery, and anything small or incidental. Keep at most ~6. If there are none, return an empty list.
12812
-
12813
- For each kept element return: { "type": one of logo|product|person|animal|badge, "label": a short UPPER_SNAKE_CASE name (e.g. LOGO, PRODUCT, HERO_DOG, TRUSTPILOT), "description": a concrete reusable description to source/shoot the real asset (include the exact expression for a living subject, and its castable attributes \u2014 breed/species for an animal, apparent age band, apparent origin/ethnicity, and wardrobe/setting for a person \u2014 so it can be recast to fit OUR audience/market), "expression": the facial expression for a living subject or null, "reason": why it is identity-critical, "locator": the blueprint entry this element came from as { "collection": one of "subjects" | "people" | "brands_logos", "index": its 0-based position in that array } (people -> people; logos/badges -> brands_logos; products/animals/objects -> subjects). Output ONLY the JSON object.`;
12796
+ var SELECT_PROMPT = 'AD BLUEPRINT (from image_describe):\n{{blueprint}}\n\nFrom this blueprint, list ONLY the elements that are prominent, important, and identity-bearing \u2014 the ones a reproduction must ground in a real asset:\n- the brand logo/wordmark (from brands_logos with function_in_image = advertiser_brand) -> type "logo"\n- trust/rating/certification/app-store/review badges (brands_logos with function_in_image = trust_badge | review_platform | certification_or_seal | app_store_badge | payment_method) -> type "badge"\n- a showcased/hero product or package (a foreground entry in subjects that the ad is selling) -> type "product"\n- a foreground person whose identity matters (from people) -> type "person"\n- a foreground animal/character with a specific expression (from subjects) -> type "animal"\n\nDROP background extras, decorative props, generic scenery, and anything small or incidental. Keep at most ~6. If there are none, return an empty list.\n\nFor each kept element return: { "type": one of logo|product|person|animal|badge, "label": a short UPPER_SNAKE_CASE name (e.g. LOGO, PRODUCT, HERO_DOG, TRUSTPILOT), "description": a concrete reusable description to source/shoot the real asset (include the exact expression for a living subject), "expression": the facial expression for a living subject or null, "reason": why it is identity-critical, "locator": the blueprint entry this element came from as { "collection": one of "subjects" | "people" | "brands_logos", "index": its 0-based position in that array } (people -> people; logos/badges -> brands_logos; products/animals/objects -> subjects). Output ONLY the JSON object.';
12814
12797
  async function loadAssetText(ref, label) {
12815
12798
  const r = ref;
12816
12799
  if (typeof r?.path === "string") return readFile3(r.path, "utf8");
@@ -19743,162 +19726,11 @@ Paid transforms (run on the Convex backend, cost-tracked):
19743
19726
  }
19744
19727
  });
19745
19728
 
19746
- // src/commands/mcp/index.ts
19747
- import { defineCommand as defineCommand125 } from "citty";
19748
- var SCOPES = ["user", "company", "org"];
19749
- function parseScope(raw) {
19750
- const scope = raw === void 0 ? "company" : String(raw);
19751
- if (!SCOPES.includes(scope)) {
19752
- throw new ApiError("VALIDATION_ERROR", `Invalid --scope "${scope}". Use user | company | org.`);
19753
- }
19754
- return scope;
19755
- }
19756
- function actingUserId() {
19757
- return getEnv().BAKER_ACTING_USER_ID;
19758
- }
19759
- function parseHeaders(raw) {
19760
- const list = raw === void 0 ? [] : Array.isArray(raw) ? raw : [raw];
19761
- const headers = {};
19762
- for (const entry of list) {
19763
- const text = String(entry);
19764
- const sep = text.indexOf(":") >= 0 && (text.indexOf(":") < text.indexOf("=") || text.indexOf("=") < 0) ? ":" : "=";
19765
- const at = text.indexOf(sep);
19766
- if (at <= 0) {
19767
- throw new ApiError("VALIDATION_ERROR", `Invalid header "${text}". Use "Key: Value".`);
19768
- }
19769
- headers[text.slice(0, at).trim()] = text.slice(at + 1).trim();
19770
- }
19771
- return Object.keys(headers).length > 0 ? headers : void 0;
19772
- }
19773
- function fail3(err) {
19774
- if (err instanceof ApiError) {
19775
- writeJson({ ok: false, error: { code: err.code, message: err.message } });
19776
- process.exit(1);
19777
- }
19778
- writeJson({ ok: false, error: { code: "NETWORK_ERROR", message: "Unexpected error" } });
19779
- process.exit(1);
19780
- }
19781
- registerSchema({
19782
- command: "mcp.list",
19783
- description: "List the custom MCP servers this company's chats see (org + company + your own user scope).",
19784
- args: {}
19785
- });
19786
- var listCommand4 = defineCommand125({
19787
- meta: { name: "list", description: "List custom MCP servers visible to this company's chats." },
19788
- run: async () => {
19789
- try {
19790
- const user = actingUserId();
19791
- const data = await apiGet(
19792
- "/api/mcp/custom",
19793
- user ? { actingUserId: user } : void 0
19794
- );
19795
- writeJson({ ok: true, data: data.servers });
19796
- } catch (err) {
19797
- fail3(err);
19798
- }
19799
- }
19800
- });
19801
- registerSchema({
19802
- command: "mcp.add",
19803
- description: "Register a custom MCP server. Tools appear as mcp__<name>__* on the next message. URL must be HTTPS. Scope: company (default, all chats) | org (org admin key) | user (only the current sender).",
19804
- args: {
19805
- name: { type: "string", description: "Server name \u2192 tools appear as mcp__<name>__*", required: true },
19806
- url: { type: "string", description: "HTTPS MCP endpoint", required: true },
19807
- scope: { type: "string", description: "user | company | org (default company)", required: false },
19808
- header: { type: "string", description: 'Auth header "Key: Value" (repeatable)', required: false }
19809
- }
19810
- });
19811
- var addCommand = defineCommand125({
19812
- meta: {
19813
- name: "add",
19814
- description: `Register a custom MCP server. Tools appear as mcp__<name>__* on the NEXT message.
19815
-
19816
- Scope: company (default \u2014 every chat in the company) | org (all companies in the org; needs an admin key) | user (only the current message sender).
19817
-
19818
- Examples:
19819
- baker mcp add --name weather --url https://mcp.example.com/mcp
19820
- baker mcp add --name acme --url https://acme.dev/mcp --header "Authorization: Bearer sk-\u2026"
19821
- baker mcp add --name mine --url https://my.dev/mcp --scope user`
19822
- },
19823
- args: {
19824
- name: { type: "string", description: "Server name (mcp__<name>__*)", required: true },
19825
- url: { type: "string", description: "HTTPS MCP endpoint", required: true },
19826
- scope: { type: "string", description: "user | company | org (default company)", required: false },
19827
- header: { type: "string", description: 'Auth header "Key: Value" (repeatable)', required: false }
19828
- },
19829
- run: async ({ args }) => {
19830
- try {
19831
- const scope = parseScope(args.scope);
19832
- const user = actingUserId();
19833
- const headers = parseHeaders(args.header);
19834
- const data = await apiPost("/api/mcp/custom", {
19835
- name: args.name,
19836
- url: args.url,
19837
- scope,
19838
- ...user ? { actingUserId: user } : {},
19839
- ...headers ? { headers } : {}
19840
- });
19841
- writeJson({ ok: true, data });
19842
- } catch (err) {
19843
- fail3(err);
19844
- }
19845
- }
19846
- });
19847
- registerSchema({
19848
- command: "mcp.remove",
19849
- description: "Remove a company custom MCP server by name.",
19850
- args: { name: { type: "string", description: "Server name to remove", required: true } }
19851
- });
19852
- var removeCommand3 = defineCommand125({
19853
- meta: {
19854
- name: "remove",
19855
- description: `Remove a company custom MCP server by name.
19856
-
19857
- Example:
19858
- baker mcp remove --name weather`
19859
- },
19860
- args: { name: { type: "string", description: "Server name to remove", required: true } },
19861
- run: async ({ args }) => {
19862
- try {
19863
- const user = actingUserId();
19864
- const data = await apiPost("/api/mcp/custom/remove", {
19865
- name: args.name,
19866
- ...user ? { actingUserId: user } : {}
19867
- });
19868
- writeJson({ ok: true, data });
19869
- } catch (err) {
19870
- fail3(err);
19871
- }
19872
- }
19873
- });
19874
- var mcpCommand = defineCommand125({
19875
- meta: {
19876
- name: "mcp",
19877
- description: `Custom MCP servers for this company \u2014 point the agent at any HTTPS MCP endpoint.
19878
-
19879
- Tools from a registered server appear as mcp__<name>__* on the next message.
19880
- Managed here are **company-scoped** servers; user- and org-scoped servers are managed in the dashboard.
19881
-
19882
- Start here:
19883
- baker mcp list
19884
-
19885
- Examples:
19886
- baker mcp add --name weather --url https://mcp.example.com/mcp
19887
- baker mcp add --name acme --url https://acme.dev/mcp --header "Authorization: Bearer sk-\u2026"
19888
- baker mcp remove --name weather`
19889
- },
19890
- subCommands: {
19891
- list: listCommand4,
19892
- add: addCommand,
19893
- remove: removeCommand3
19894
- }
19895
- });
19896
-
19897
19729
  // src/commands/research/index.ts
19898
- import { defineCommand as defineCommand136 } from "citty";
19730
+ import { defineCommand as defineCommand135 } from "citty";
19899
19731
 
19900
19732
  // src/commands/research/advertisers.ts
19901
- import { defineCommand as defineCommand126 } from "citty";
19733
+ import { defineCommand as defineCommand125 } from "citty";
19902
19734
 
19903
19735
  // src/commands/research/output.ts
19904
19736
  var RESEARCH_DATA_NOTE = "Estimates based on third-party SERP data \u2014 not exact figures. Use for directional insights, not precise measurement.";
@@ -20011,7 +19843,7 @@ var FIELDS3 = {
20011
19843
  etv: "Estimated traffic value (USD)",
20012
19844
  visibility: "SERP visibility score (0-1)"
20013
19845
  };
20014
- var advertisersCommand = defineCommand126({
19846
+ var advertisersCommand = defineCommand125({
20015
19847
  meta: {
20016
19848
  name: "advertisers",
20017
19849
  description: `Find domains competing for a keyword in Google SERPs.
@@ -20058,7 +19890,7 @@ Examples:
20058
19890
  });
20059
19891
 
20060
19892
  // src/commands/research/autocomplete.ts
20061
- import { defineCommand as defineCommand127 } from "citty";
19893
+ import { defineCommand as defineCommand126 } from "citty";
20062
19894
  registerSchema({
20063
19895
  command: "research.autocomplete",
20064
19896
  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).",
@@ -20081,7 +19913,7 @@ registerSchema({
20081
19913
  var FIELDS4 = {
20082
19914
  suggestion: "Autocomplete suggestion from Google"
20083
19915
  };
20084
- var autocompleteCommand = defineCommand127({
19916
+ var autocompleteCommand = defineCommand126({
20085
19917
  meta: {
20086
19918
  name: "autocomplete",
20087
19919
  description: `Get Google Autocomplete suggestions for keyword expansion.
@@ -20127,7 +19959,7 @@ Examples:
20127
19959
  });
20128
19960
 
20129
19961
  // src/commands/research/countries.ts
20130
- import { defineCommand as defineCommand128 } from "citty";
19962
+ import { defineCommand as defineCommand127 } from "citty";
20131
19963
  registerSchema({
20132
19964
  command: "research.countries",
20133
19965
  description: "List all supported country codes for --location flag in research commands.",
@@ -20184,7 +20016,7 @@ var FIELDS5 = {
20184
20016
  code: "Country code to pass as --location",
20185
20017
  name: "Country name"
20186
20018
  };
20187
- var countriesCommand = defineCommand128({
20019
+ var countriesCommand = defineCommand127({
20188
20020
  meta: {
20189
20021
  name: "countries",
20190
20022
  description: "List all supported country codes for --location flag."
@@ -20195,7 +20027,7 @@ var countriesCommand = defineCommand128({
20195
20027
  });
20196
20028
 
20197
20029
  // src/commands/research/intent.ts
20198
- import { defineCommand as defineCommand129 } from "citty";
20030
+ import { defineCommand as defineCommand128 } from "citty";
20199
20031
  registerSchema({
20200
20032
  command: "research.intent",
20201
20033
  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.",
@@ -20218,7 +20050,7 @@ var FIELDS6 = {
20218
20050
  intent: "Primary Google Search intent: informational, navigational, commercial, transactional",
20219
20051
  probability: "Confidence score 0.0-1.0"
20220
20052
  };
20221
- var intentCommand = defineCommand129({
20053
+ var intentCommand = defineCommand128({
20222
20054
  meta: {
20223
20055
  name: "intent",
20224
20056
  description: `Classify Google Search intent for keywords. Returns intent type and confidence.
@@ -20266,7 +20098,7 @@ Examples:
20266
20098
  });
20267
20099
 
20268
20100
  // src/commands/research/keyword-gap.ts
20269
- import { defineCommand as defineCommand130 } from "citty";
20101
+ import { defineCommand as defineCommand129 } from "citty";
20270
20102
  registerSchema({
20271
20103
  command: "research.keyword-gap",
20272
20104
  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.",
@@ -20295,7 +20127,7 @@ var FIELDS7 = {
20295
20127
  cpc: "Cost per click USD",
20296
20128
  their_position: "Competitor's ranking position"
20297
20129
  };
20298
- var keywordGapCommand = defineCommand130({
20130
+ var keywordGapCommand = defineCommand129({
20299
20131
  meta: {
20300
20132
  name: "keyword-gap",
20301
20133
  description: `Find keywords a competitor has that you don't. Supports pagination via --offset.
@@ -20369,7 +20201,7 @@ Examples:
20369
20201
  });
20370
20202
 
20371
20203
  // src/commands/research/keywords-for-site.ts
20372
- import { defineCommand as defineCommand131 } from "citty";
20204
+ import { defineCommand as defineCommand130 } from "citty";
20373
20205
  registerSchema({
20374
20206
  command: "research.keywords-for-site",
20375
20207
  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.",
@@ -20402,7 +20234,7 @@ var FIELDS8 = {
20402
20234
  competition: "LOW, MEDIUM, or HIGH",
20403
20235
  competition_index: "Competition score 0-100"
20404
20236
  };
20405
- var keywordsForSiteCommand = defineCommand131({
20237
+ var keywordsForSiteCommand = defineCommand130({
20406
20238
  meta: {
20407
20239
  name: "keywords-for-site",
20408
20240
  description: `Get keywords a competitor targets in Google. Use --type to filter paid/organic.
@@ -20455,7 +20287,7 @@ Examples:
20455
20287
  });
20456
20288
 
20457
20289
  // src/commands/research/languages.ts
20458
- import { defineCommand as defineCommand132 } from "citty";
20290
+ import { defineCommand as defineCommand131 } from "citty";
20459
20291
  registerSchema({
20460
20292
  command: "research.languages",
20461
20293
  description: "List all supported language codes for --language flag in research commands.",
@@ -20485,7 +20317,7 @@ var FIELDS9 = {
20485
20317
  code: "Language code to pass as --language",
20486
20318
  name: "Language name (also accepted by --language)"
20487
20319
  };
20488
- var languagesCommand2 = defineCommand132({
20320
+ var languagesCommand2 = defineCommand131({
20489
20321
  meta: {
20490
20322
  name: "languages",
20491
20323
  description: "List all supported language codes for --language flag."
@@ -20496,7 +20328,7 @@ var languagesCommand2 = defineCommand132({
20496
20328
  });
20497
20329
 
20498
20330
  // src/commands/research/lighthouse.ts
20499
- import { defineCommand as defineCommand133 } from "citty";
20331
+ import { defineCommand as defineCommand132 } from "citty";
20500
20332
  registerSchema({
20501
20333
  command: "research.lighthouse",
20502
20334
  description: "Landing page performance audit. Returns metrics that affect Google Ads Quality Score and CPC.",
@@ -20515,7 +20347,7 @@ var FIELDS10 = {
20515
20347
  speed_index_ms: "Speed Index in ms (good: < 3400)",
20516
20348
  interactive_ms: "Time to Interactive in ms (good: < 3800)"
20517
20349
  };
20518
- var lighthouseCommand = defineCommand133({
20350
+ var lighthouseCommand = defineCommand132({
20519
20351
  meta: {
20520
20352
  name: "lighthouse",
20521
20353
  description: `Landing page performance audit. Metrics affecting Google Ads Quality Score.
@@ -20553,7 +20385,7 @@ Examples:
20553
20385
  });
20554
20386
 
20555
20387
  // src/commands/research/relevant-pages.ts
20556
- import { defineCommand as defineCommand134 } from "citty";
20388
+ import { defineCommand as defineCommand133 } from "citty";
20557
20389
  registerSchema({
20558
20390
  command: "research.relevant-pages",
20559
20391
  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).",
@@ -20579,7 +20411,7 @@ var FIELDS11 = {
20579
20411
  keywords: "Total organic keywords the page ranks for",
20580
20412
  top_10: "Keywords in positions 1-10"
20581
20413
  };
20582
- var relevantPagesCommand = defineCommand134({
20414
+ var relevantPagesCommand = defineCommand133({
20583
20415
  meta: {
20584
20416
  name: "relevant-pages",
20585
20417
  description: `Get the top pages of a competitor domain with traffic data.
@@ -20625,7 +20457,7 @@ Examples:
20625
20457
  });
20626
20458
 
20627
20459
  // src/commands/research/web.ts
20628
- import { defineCommand as defineCommand135 } from "citty";
20460
+ import { defineCommand as defineCommand134 } from "citty";
20629
20461
  registerSchema({
20630
20462
  command: "research.web",
20631
20463
  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).",
@@ -20676,7 +20508,7 @@ async function runDeepResearch(question) {
20676
20508
  }
20677
20509
  throw new Error("Deep research timed out");
20678
20510
  }
20679
- var webCommand = defineCommand135({
20511
+ var webCommand = defineCommand134({
20680
20512
  meta: {
20681
20513
  name: "web",
20682
20514
  description: `Search the web with AI to answer any open-ended marketing question. Uses live internet data via Google Search.
@@ -20736,7 +20568,7 @@ Examples:
20736
20568
  });
20737
20569
 
20738
20570
  // src/commands/research/index.ts
20739
- var researchCommand = defineCommand136({
20571
+ var researchCommand = defineCommand135({
20740
20572
  meta: {
20741
20573
  name: "research",
20742
20574
  description: `Competitive intelligence and AI-powered research commands.
@@ -20776,10 +20608,10 @@ Examples:
20776
20608
  });
20777
20609
 
20778
20610
  // src/commands/scheduled-actions/index.ts
20779
- import { defineCommand as defineCommand143 } from "citty";
20611
+ import { defineCommand as defineCommand142 } from "citty";
20780
20612
 
20781
20613
  // src/commands/scheduled-actions/create.ts
20782
- import { defineCommand as defineCommand137 } from "citty";
20614
+ import { defineCommand as defineCommand136 } from "citty";
20783
20615
 
20784
20616
  // src/commands/scheduled-actions/shared.ts
20785
20617
  var TEMP_SCHEDULED_ACTION_PREFIX = "temp_sched_";
@@ -20894,7 +20726,7 @@ registerSchema({
20894
20726
  prompt: { type: "string", description: "Additional prompt instructions for the spawned agent", required: false }
20895
20727
  }
20896
20728
  });
20897
- var createCommand2 = defineCommand137({
20729
+ var createCommand2 = defineCommand136({
20898
20730
  meta: {
20899
20731
  name: "create",
20900
20732
  description: 'Stage a scheduled action. Example: baker scheduled-actions create --name "Weekly report" --description "..." --cron "0 9 * * MON"'
@@ -20943,7 +20775,7 @@ var createCommand2 = defineCommand137({
20943
20775
  });
20944
20776
 
20945
20777
  // src/commands/scheduled-actions/delete.ts
20946
- import { defineCommand as defineCommand138 } from "citty";
20778
+ import { defineCommand as defineCommand137 } from "citty";
20947
20779
  registerSchema({
20948
20780
  command: "scheduled-actions.delete",
20949
20781
  description: "Stage deletion of a published scheduled action or cancellation of a temp_sched_* draft creation.",
@@ -20951,7 +20783,7 @@ registerSchema({
20951
20783
  id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
20952
20784
  }
20953
20785
  });
20954
- var deleteCommand2 = defineCommand138({
20786
+ var deleteCommand2 = defineCommand137({
20955
20787
  meta: {
20956
20788
  name: "delete",
20957
20789
  description: "Stage scheduled action deletion. Example: baker scheduled-actions delete <id-or-temp_sched_id>"
@@ -20980,7 +20812,7 @@ var deleteCommand2 = defineCommand138({
20980
20812
  });
20981
20813
 
20982
20814
  // src/commands/scheduled-actions/get.ts
20983
- import { defineCommand as defineCommand139 } from "citty";
20815
+ import { defineCommand as defineCommand138 } from "citty";
20984
20816
  registerSchema({
20985
20817
  command: "scheduled-actions.get",
20986
20818
  description: "Get a published scheduled action or a temp_sched_* draft-created scheduled action.",
@@ -20988,7 +20820,7 @@ registerSchema({
20988
20820
  id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
20989
20821
  }
20990
20822
  });
20991
- var getCommand3 = defineCommand139({
20823
+ var getCommand3 = defineCommand138({
20992
20824
  meta: {
20993
20825
  name: "get",
20994
20826
  description: "Get a scheduled action. Example: baker scheduled-actions get <id-or-temp_sched_id>"
@@ -21025,13 +20857,13 @@ var getCommand3 = defineCommand139({
21025
20857
  });
21026
20858
 
21027
20859
  // src/commands/scheduled-actions/list.ts
21028
- import { defineCommand as defineCommand140 } from "citty";
20860
+ import { defineCommand as defineCommand139 } from "citty";
21029
20861
  registerSchema({
21030
20862
  command: "scheduled-actions.list",
21031
20863
  description: "List published scheduled actions. Includes draft state when BAKER_CHAT_ID is set.",
21032
20864
  args: {}
21033
20865
  });
21034
- var listCommand5 = defineCommand140({
20866
+ var listCommand4 = defineCommand139({
21035
20867
  meta: {
21036
20868
  name: "list",
21037
20869
  description: "List scheduled actions. Includes staged draft ops when BAKER_CHAT_ID is set."
@@ -21052,7 +20884,7 @@ var listCommand5 = defineCommand140({
21052
20884
  });
21053
20885
 
21054
20886
  // src/commands/scheduled-actions/trigger.ts
21055
- import { defineCommand as defineCommand141 } from "citty";
20887
+ import { defineCommand as defineCommand140 } from "citty";
21056
20888
  registerSchema({
21057
20889
  command: "scheduled-actions.trigger",
21058
20890
  description: "Immediately trigger a published scheduled action. Does not require BAKER_CHAT_ID and rejects temp_sched_* IDs.",
@@ -21060,7 +20892,7 @@ registerSchema({
21060
20892
  id: { type: "string", description: "Published scheduled action ID", required: true }
21061
20893
  }
21062
20894
  });
21063
- var triggerCommand = defineCommand141({
20895
+ var triggerCommand = defineCommand140({
21064
20896
  meta: {
21065
20897
  name: "trigger",
21066
20898
  description: "Immediately trigger a published scheduled action. Example: baker scheduled-actions trigger <id>"
@@ -21097,7 +20929,7 @@ var triggerCommand = defineCommand141({
21097
20929
  });
21098
20930
 
21099
20931
  // src/commands/scheduled-actions/update.ts
21100
- import { defineCommand as defineCommand142 } from "citty";
20932
+ import { defineCommand as defineCommand141 } from "citty";
21101
20933
  registerSchema({
21102
20934
  command: "scheduled-actions.update",
21103
20935
  description: "Stage an update to a published scheduled action or temp_sched_* draft-created scheduled action.",
@@ -21122,7 +20954,7 @@ registerSchema({
21122
20954
  prompt: { type: "string", description: "Replacement additional spawned-agent instructions", required: false }
21123
20955
  }
21124
20956
  });
21125
- var updateCommand2 = defineCommand142({
20957
+ var updateCommand2 = defineCommand141({
21126
20958
  meta: {
21127
20959
  name: "update",
21128
20960
  description: "Stage a scheduled action update. Example: baker scheduled-actions update <id> --enabled false"
@@ -21193,7 +21025,7 @@ var updateCommand2 = defineCommand142({
21193
21025
  });
21194
21026
 
21195
21027
  // src/commands/scheduled-actions/index.ts
21196
- var scheduledActionsCommand = defineCommand143({
21028
+ var scheduledActionsCommand = defineCommand142({
21197
21029
  meta: {
21198
21030
  name: "scheduled-actions",
21199
21031
  description: `Manage Scheduled Actions. Subcommands: list, get, create, update, delete, trigger.
@@ -21209,7 +21041,7 @@ Examples:
21209
21041
  baker scheduled-actions trigger <id>`
21210
21042
  },
21211
21043
  subCommands: {
21212
- list: listCommand5,
21044
+ list: listCommand4,
21213
21045
  get: getCommand3,
21214
21046
  create: createCommand2,
21215
21047
  update: updateCommand2,
@@ -21219,8 +21051,8 @@ Examples:
21219
21051
  });
21220
21052
 
21221
21053
  // src/commands/schema.ts
21222
- import { defineCommand as defineCommand144 } from "citty";
21223
- var schemaCommand = defineCommand144({
21054
+ import { defineCommand as defineCommand143 } from "citty";
21055
+ var schemaCommand = defineCommand143({
21224
21056
  meta: {
21225
21057
  name: "schema",
21226
21058
  description: "Inspect command argument schemas (for AI agent introspection). Lists all commands if no argument given. Example: baker schema images.search"
@@ -21256,10 +21088,10 @@ var schemaCommand = defineCommand144({
21256
21088
  });
21257
21089
 
21258
21090
  // src/commands/testimonials/index.ts
21259
- import { defineCommand as defineCommand148 } from "citty";
21091
+ import { defineCommand as defineCommand147 } from "citty";
21260
21092
 
21261
21093
  // src/commands/testimonials/get.ts
21262
- import { defineCommand as defineCommand145 } from "citty";
21094
+ import { defineCommand as defineCommand144 } from "citty";
21263
21095
  registerSchema({
21264
21096
  command: "testimonials.get",
21265
21097
  description: "Get a single testimonial by ID",
@@ -21267,7 +21099,7 @@ registerSchema({
21267
21099
  id: { type: "string", description: "Testimonial ID", required: true }
21268
21100
  }
21269
21101
  });
21270
- var getCommand4 = defineCommand145({
21102
+ var getCommand4 = defineCommand144({
21271
21103
  meta: { name: "get", description: "Get a single testimonial by ID. Example: baker testimonials get j571abc123" },
21272
21104
  args: {
21273
21105
  id: { type: "positional", description: "Testimonial ID", required: false },
@@ -21304,7 +21136,7 @@ var getCommand4 = defineCommand145({
21304
21136
  });
21305
21137
 
21306
21138
  // src/commands/testimonials/list.ts
21307
- import { defineCommand as defineCommand146 } from "citty";
21139
+ import { defineCommand as defineCommand145 } from "citty";
21308
21140
  registerSchema({
21309
21141
  command: "testimonials.list",
21310
21142
  description: "List testimonials with optional filters.",
@@ -21334,7 +21166,7 @@ registerSchema({
21334
21166
  limit: { type: "number", description: "Max results (default 50)", required: false, default: 50 }
21335
21167
  }
21336
21168
  });
21337
- var listCommand6 = defineCommand146({
21169
+ var listCommand5 = defineCommand145({
21338
21170
  meta: {
21339
21171
  name: "list",
21340
21172
  description: "List testimonials with optional filters. Example: baker testimonials list --source google --sentiment positive"
@@ -21383,7 +21215,7 @@ var listCommand6 = defineCommand146({
21383
21215
  });
21384
21216
 
21385
21217
  // src/commands/testimonials/search.ts
21386
- import { defineCommand as defineCommand147 } from "citty";
21218
+ import { defineCommand as defineCommand146 } from "citty";
21387
21219
  registerSchema({
21388
21220
  command: "testimonials.search",
21389
21221
  description: "Search testimonials by text query. Uses hybrid BM25 + vector + reranking.",
@@ -21414,7 +21246,7 @@ registerSchema({
21414
21246
  tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
21415
21247
  }
21416
21248
  });
21417
- var searchCommand2 = defineCommand147({
21249
+ var searchCommand2 = defineCommand146({
21418
21250
  meta: {
21419
21251
  name: "search",
21420
21252
  description: "Semantic search testimonials by text query. Uses hybrid BM25 + vector + reranking. Example: baker testimonials search 'great service' --rating-min 4"
@@ -21488,7 +21320,7 @@ var searchCommand2 = defineCommand147({
21488
21320
  var tagsCommand3 = makeTagsCommand("testimonials", "testimonial", "/api/testimonials/tags");
21489
21321
 
21490
21322
  // src/commands/testimonials/index.ts
21491
- var testimonialsCommand = defineCommand148({
21323
+ var testimonialsCommand = defineCommand147({
21492
21324
  meta: {
21493
21325
  name: "testimonials",
21494
21326
  description: `Find and browse testimonials in Baker. Subcommands: search, get, list, tags.
@@ -21503,16 +21335,16 @@ Examples:
21503
21335
  subCommands: {
21504
21336
  get: getCommand4,
21505
21337
  search: searchCommand2,
21506
- list: listCommand6,
21338
+ list: listCommand5,
21507
21339
  tags: tagsCommand3
21508
21340
  }
21509
21341
  });
21510
21342
 
21511
21343
  // src/commands/videos/index.ts
21512
- import { defineCommand as defineCommand153 } from "citty";
21344
+ import { defineCommand as defineCommand152 } from "citty";
21513
21345
 
21514
21346
  // src/commands/videos/delete.ts
21515
- import { defineCommand as defineCommand149 } from "citty";
21347
+ import { defineCommand as defineCommand148 } from "citty";
21516
21348
  registerSchema({
21517
21349
  command: "videos.delete",
21518
21350
  description: "Delete a video by ID",
@@ -21526,7 +21358,7 @@ registerSchema({
21526
21358
  }
21527
21359
  }
21528
21360
  });
21529
- var deleteCommand3 = defineCommand149({
21361
+ var deleteCommand3 = defineCommand148({
21530
21362
  meta: {
21531
21363
  name: "delete",
21532
21364
  description: "Delete a video by ID. Use --dry-run to preview. Example: baker videos delete j571abc123 --dry-run"
@@ -21567,7 +21399,7 @@ var deleteCommand3 = defineCommand149({
21567
21399
  });
21568
21400
 
21569
21401
  // src/commands/videos/get.ts
21570
- import { defineCommand as defineCommand150 } from "citty";
21402
+ import { defineCommand as defineCommand149 } from "citty";
21571
21403
  registerSchema({
21572
21404
  command: "videos.get",
21573
21405
  description: "Get a single video by ID",
@@ -21575,7 +21407,7 @@ registerSchema({
21575
21407
  id: { type: "string", description: "Video ID", required: true }
21576
21408
  }
21577
21409
  });
21578
- var getCommand5 = defineCommand150({
21410
+ var getCommand5 = defineCommand149({
21579
21411
  meta: { name: "get", description: "Get a single video by ID. Example: baker videos get j571abc123" },
21580
21412
  args: {
21581
21413
  id: { type: "positional", description: "Video ID", required: false },
@@ -21612,7 +21444,7 @@ var getCommand5 = defineCommand150({
21612
21444
  });
21613
21445
 
21614
21446
  // src/commands/videos/search.ts
21615
- import { defineCommand as defineCommand151 } from "citty";
21447
+ import { defineCommand as defineCommand150 } from "citty";
21616
21448
  registerSchema({
21617
21449
  command: "videos.search",
21618
21450
  description: "Search videos by text query. Only returns ready videos.",
@@ -21622,7 +21454,7 @@ registerSchema({
21622
21454
  tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
21623
21455
  }
21624
21456
  });
21625
- var searchCommand3 = defineCommand151({
21457
+ var searchCommand3 = defineCommand150({
21626
21458
  meta: {
21627
21459
  name: "search",
21628
21460
  description: "Semantic search videos by text query. Uses hybrid BM25 + vector + reranking. Example: baker videos search 'product demo' --tags tutorial"
@@ -21674,7 +21506,7 @@ var tagsCommand4 = makeTagsCommand("videos", "video", "/api/videos/tags");
21674
21506
  // src/commands/videos/upload.ts
21675
21507
  import { readFile as readFile12, stat as stat3 } from "fs/promises";
21676
21508
  import { extname as extname3 } from "path";
21677
- import { defineCommand as defineCommand152 } from "citty";
21509
+ import { defineCommand as defineCommand151 } from "citty";
21678
21510
  var MIME_MAP = {
21679
21511
  ".mp4": "video/mp4",
21680
21512
  ".mov": "video/quicktime",
@@ -21708,7 +21540,7 @@ function detectContentType(filePath) {
21708
21540
  }
21709
21541
  return mime;
21710
21542
  }
21711
- var uploadCommand2 = defineCommand152({
21543
+ var uploadCommand2 = defineCommand151({
21712
21544
  meta: {
21713
21545
  name: "upload",
21714
21546
  description: "Upload a video file to Baker via Mux direct upload. Auto-detects content type. Example: baker videos upload ./demo.mp4"
@@ -21762,7 +21594,7 @@ var uploadCommand2 = defineCommand152({
21762
21594
  });
21763
21595
 
21764
21596
  // src/commands/videos/index.ts
21765
- var videosCommand = defineCommand153({
21597
+ var videosCommand = defineCommand152({
21766
21598
  meta: {
21767
21599
  name: "videos",
21768
21600
  description: `Find and manage videos in Baker. Subcommands: search, get, upload, delete, tags.
@@ -21785,10 +21617,10 @@ Examples:
21785
21617
  });
21786
21618
 
21787
21619
  // src/commands/winning-ads/index.ts
21788
- import { defineCommand as defineCommand156 } from "citty";
21620
+ import { defineCommand as defineCommand155 } from "citty";
21789
21621
 
21790
21622
  // src/commands/winning-ads/advertisers.ts
21791
- import { defineCommand as defineCommand154 } from "citty";
21623
+ import { defineCommand as defineCommand153 } from "citty";
21792
21624
  registerSchema({
21793
21625
  command: "winning-ads.advertisers",
21794
21626
  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).",
@@ -21801,7 +21633,7 @@ registerSchema({
21801
21633
  function identity(record) {
21802
21634
  return record;
21803
21635
  }
21804
- var advertisersCommand2 = defineCommand154({
21636
+ var advertisersCommand2 = defineCommand153({
21805
21637
  meta: {
21806
21638
  name: "advertisers",
21807
21639
  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'
@@ -21852,7 +21684,7 @@ var advertisersCommand2 = defineCommand154({
21852
21684
  });
21853
21685
 
21854
21686
  // src/commands/winning-ads/search.ts
21855
- import { defineCommand as defineCommand155 } from "citty";
21687
+ import { defineCommand as defineCommand154 } from "citty";
21856
21688
  registerSchema({
21857
21689
  command: "winning-ads.search",
21858
21690
  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.",
@@ -21960,7 +21792,7 @@ function buildSearchBody(args) {
21960
21792
  }
21961
21793
  return body;
21962
21794
  }
21963
- var searchCommand4 = defineCommand155({
21795
+ var searchCommand4 = defineCommand154({
21964
21796
  meta: {
21965
21797
  name: "search",
21966
21798
  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"
@@ -22072,7 +21904,7 @@ var searchCommand4 = defineCommand155({
22072
21904
  });
22073
21905
 
22074
21906
  // src/commands/winning-ads/index.ts
22075
- var winningAdsCommand = defineCommand156({
21907
+ var winningAdsCommand = defineCommand155({
22076
21908
  meta: {
22077
21909
  name: "winning-ads",
22078
21910
  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.
@@ -22112,7 +21944,7 @@ function getCliVersion() {
22112
21944
  }
22113
21945
 
22114
21946
  // src/cli.ts
22115
- var main = defineCommand157({
21947
+ var main = defineCommand156({
22116
21948
  meta: {
22117
21949
  name: "baker",
22118
21950
  version: getCliVersion(),
@@ -22137,7 +21969,6 @@ Introspection: Run 'baker schema <command>' to inspect argument schemas.`
22137
21969
  testimonials: testimonialsCommand,
22138
21970
  canvas: canvasCommand,
22139
21971
  "winning-ads": winningAdsCommand,
22140
- mcp: mcpCommand,
22141
21972
  schema: schemaCommand
22142
21973
  }
22143
21974
  });