@koda-sl/baker-cli 0.105.1 → 0.106.0-dev.2a665c873

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
@@ -9,10 +9,10 @@ import {
9
9
  defaultRegistry,
10
10
  generateCatalog,
11
11
  validateCanvasDeep
12
- } from "./chunk-3JVYU72O.js";
12
+ } from "./chunk-26K7V346.js";
13
13
 
14
14
  // src/cli.ts
15
- import { defineCommand as defineCommand152, runMain } from "citty";
15
+ import { defineCommand as defineCommand153, runMain } from "citty";
16
16
 
17
17
  // src/commands/actions/index.ts
18
18
  import { defineCommand as defineCommand18 } from "citty";
@@ -31,6 +31,7 @@ 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(),
34
35
  BAKER_GOOGLE_ADS_CUSTOMER_ID: z.string().regex(/^\d{10}$/).optional(),
35
36
  BAKER_GA4_PROPERTY_ID: z.string().optional(),
36
37
  BAKER_GSC_SITE_URL: z.string().optional(),
@@ -2623,12 +2624,12 @@ function buildCommand(query, ctx) {
2623
2624
  return `baker ads google query "${query}" --customer-id ${ctx.customerId}`;
2624
2625
  }
2625
2626
  var CORRECTION_RULES = [
2626
- // 1. bare keyword.text → ad_group_criterion.keyword.text (leaves <resource>.keyword.text untouched)
2627
+ // 1. keyword.text → ad_group_criterion.keyword.text
2627
2628
  {
2628
- matchQuery: /(?<![\w.])keyword\.text\b/,
2629
+ matchQuery: /\bkeyword\.text\b/,
2629
2630
  matchApiError: /keyword\.text/i,
2630
2631
  fix: (ctx) => {
2631
- const corrected = ctx.originalQuery.replace(/(?<![\w.])keyword\.text\b/g, "ad_group_criterion.keyword.text");
2632
+ const corrected = ctx.originalQuery.replace(/\bkeyword\.text\b/g, "ad_group_criterion.keyword.text");
2632
2633
  return {
2633
2634
  action: "retry_with_modified_query",
2634
2635
  correctedCommand: buildCommand(corrected, ctx),
@@ -2636,15 +2637,12 @@ var CORRECTION_RULES = [
2636
2637
  };
2637
2638
  }
2638
2639
  },
2639
- // 2. bare keyword.match_type → ad_group_criterion.keyword.match_type (leaves <resource>.keyword.match_type untouched)
2640
+ // 2. keyword.match_type → ad_group_criterion.keyword.match_type
2640
2641
  {
2641
- matchQuery: /(?<![\w.])keyword\.match_type\b/,
2642
+ matchQuery: /\bkeyword\.match_type\b/,
2642
2643
  matchApiError: /keyword\.match_type/i,
2643
2644
  fix: (ctx) => {
2644
- const corrected = ctx.originalQuery.replace(
2645
- /(?<![\w.])keyword\.match_type\b/g,
2646
- "ad_group_criterion.keyword.match_type"
2647
- );
2645
+ const corrected = ctx.originalQuery.replace(/\bkeyword\.match_type\b/g, "ad_group_criterion.keyword.match_type");
2648
2646
  return {
2649
2647
  action: "retry_with_modified_query",
2650
2648
  correctedCommand: buildCommand(corrected, ctx),
@@ -3996,12 +3994,12 @@ function buildCommand2(query, customerId) {
3996
3994
  function applyAutoFixes(query, limit) {
3997
3995
  let corrected = query;
3998
3996
  const warnings = [];
3999
- if (/(?<![\w.])keyword\.text\b/.test(corrected)) {
4000
- corrected = corrected.replace(/(?<![\w.])keyword\.text\b/g, "ad_group_criterion.keyword.text");
3997
+ if (/\bkeyword\.text\b/.test(corrected) && !/ad_group_criterion\.keyword\.text/.test(corrected)) {
3998
+ corrected = corrected.replace(/\bkeyword\.text\b/g, "ad_group_criterion.keyword.text");
4001
3999
  warnings.push({ code: "FIELD_RENAMED", message: "keyword.text \u2192 ad_group_criterion.keyword.text" });
4002
4000
  }
4003
- if (/(?<![\w.])keyword\.match_type\b/.test(corrected)) {
4004
- corrected = corrected.replace(/(?<![\w.])keyword\.match_type\b/g, "ad_group_criterion.keyword.match_type");
4001
+ if (/\bkeyword\.match_type\b/.test(corrected) && !/ad_group_criterion\.keyword\.match_type/.test(corrected)) {
4002
+ corrected = corrected.replace(/\bkeyword\.match_type\b/g, "ad_group_criterion.keyword.match_type");
4005
4003
  warnings.push({ code: "FIELD_RENAMED", message: "keyword.match_type \u2192 ad_group_criterion.keyword.match_type" });
4006
4004
  }
4007
4005
  if (/shopping_performance_view\.product_\w+/.test(corrected)) {
@@ -16392,11 +16390,162 @@ Paid transforms (run on the Convex backend, cost-tracked):
16392
16390
  }
16393
16391
  });
16394
16392
 
16393
+ // src/commands/mcp/index.ts
16394
+ import { defineCommand as defineCommand121 } from "citty";
16395
+ var SCOPES = ["user", "company", "org"];
16396
+ function parseScope(raw) {
16397
+ const scope = raw === void 0 ? "company" : String(raw);
16398
+ if (!SCOPES.includes(scope)) {
16399
+ throw new ApiError("VALIDATION_ERROR", `Invalid --scope "${scope}". Use user | company | org.`);
16400
+ }
16401
+ return scope;
16402
+ }
16403
+ function actingUserId() {
16404
+ return getEnv().BAKER_ACTING_USER_ID;
16405
+ }
16406
+ function parseHeaders(raw) {
16407
+ const list = raw === void 0 ? [] : Array.isArray(raw) ? raw : [raw];
16408
+ const headers = {};
16409
+ for (const entry of list) {
16410
+ const text = String(entry);
16411
+ const sep = text.indexOf(":") >= 0 && (text.indexOf(":") < text.indexOf("=") || text.indexOf("=") < 0) ? ":" : "=";
16412
+ const at = text.indexOf(sep);
16413
+ if (at <= 0) {
16414
+ throw new ApiError("VALIDATION_ERROR", `Invalid header "${text}". Use "Key: Value".`);
16415
+ }
16416
+ headers[text.slice(0, at).trim()] = text.slice(at + 1).trim();
16417
+ }
16418
+ return Object.keys(headers).length > 0 ? headers : void 0;
16419
+ }
16420
+ function fail3(err) {
16421
+ if (err instanceof ApiError) {
16422
+ writeJson({ ok: false, error: { code: err.code, message: err.message } });
16423
+ process.exit(1);
16424
+ }
16425
+ writeJson({ ok: false, error: { code: "NETWORK_ERROR", message: "Unexpected error" } });
16426
+ process.exit(1);
16427
+ }
16428
+ registerSchema({
16429
+ command: "mcp.list",
16430
+ description: "List the custom MCP servers this company's chats see (org + company + your own user scope).",
16431
+ args: {}
16432
+ });
16433
+ var listCommand3 = defineCommand121({
16434
+ meta: { name: "list", description: "List custom MCP servers visible to this company's chats." },
16435
+ run: async () => {
16436
+ try {
16437
+ const user = actingUserId();
16438
+ const data = await apiGet(
16439
+ "/api/mcp/custom",
16440
+ user ? { actingUserId: user } : void 0
16441
+ );
16442
+ writeJson({ ok: true, data: data.servers });
16443
+ } catch (err) {
16444
+ fail3(err);
16445
+ }
16446
+ }
16447
+ });
16448
+ registerSchema({
16449
+ command: "mcp.add",
16450
+ 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).",
16451
+ args: {
16452
+ name: { type: "string", description: "Server name \u2192 tools appear as mcp__<name>__*", required: true },
16453
+ url: { type: "string", description: "HTTPS MCP endpoint", required: true },
16454
+ scope: { type: "string", description: "user | company | org (default company)", required: false },
16455
+ header: { type: "string", description: 'Auth header "Key: Value" (repeatable)', required: false }
16456
+ }
16457
+ });
16458
+ var addCommand = defineCommand121({
16459
+ meta: {
16460
+ name: "add",
16461
+ description: `Register a custom MCP server. Tools appear as mcp__<name>__* on the NEXT message.
16462
+
16463
+ 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).
16464
+
16465
+ Examples:
16466
+ baker mcp add --name weather --url https://mcp.example.com/mcp
16467
+ baker mcp add --name acme --url https://acme.dev/mcp --header "Authorization: Bearer sk-\u2026"
16468
+ baker mcp add --name mine --url https://my.dev/mcp --scope user`
16469
+ },
16470
+ args: {
16471
+ name: { type: "string", description: "Server name (mcp__<name>__*)", required: true },
16472
+ url: { type: "string", description: "HTTPS MCP endpoint", required: true },
16473
+ scope: { type: "string", description: "user | company | org (default company)", required: false },
16474
+ header: { type: "string", description: 'Auth header "Key: Value" (repeatable)', required: false }
16475
+ },
16476
+ run: async ({ args }) => {
16477
+ try {
16478
+ const scope = parseScope(args.scope);
16479
+ const user = actingUserId();
16480
+ const headers = parseHeaders(args.header);
16481
+ const data = await apiPost("/api/mcp/custom", {
16482
+ name: args.name,
16483
+ url: args.url,
16484
+ scope,
16485
+ ...user ? { actingUserId: user } : {},
16486
+ ...headers ? { headers } : {}
16487
+ });
16488
+ writeJson({ ok: true, data });
16489
+ } catch (err) {
16490
+ fail3(err);
16491
+ }
16492
+ }
16493
+ });
16494
+ registerSchema({
16495
+ command: "mcp.remove",
16496
+ description: "Remove a company custom MCP server by name.",
16497
+ args: { name: { type: "string", description: "Server name to remove", required: true } }
16498
+ });
16499
+ var removeCommand2 = defineCommand121({
16500
+ meta: {
16501
+ name: "remove",
16502
+ description: `Remove a company custom MCP server by name.
16503
+
16504
+ Example:
16505
+ baker mcp remove --name weather`
16506
+ },
16507
+ args: { name: { type: "string", description: "Server name to remove", required: true } },
16508
+ run: async ({ args }) => {
16509
+ try {
16510
+ const user = actingUserId();
16511
+ const data = await apiPost("/api/mcp/custom/remove", {
16512
+ name: args.name,
16513
+ ...user ? { actingUserId: user } : {}
16514
+ });
16515
+ writeJson({ ok: true, data });
16516
+ } catch (err) {
16517
+ fail3(err);
16518
+ }
16519
+ }
16520
+ });
16521
+ var mcpCommand = defineCommand121({
16522
+ meta: {
16523
+ name: "mcp",
16524
+ description: `Custom MCP servers for this company \u2014 point the agent at any HTTPS MCP endpoint.
16525
+
16526
+ Tools from a registered server appear as mcp__<name>__* on the next message.
16527
+ Managed here are **company-scoped** servers; user- and org-scoped servers are managed in the dashboard.
16528
+
16529
+ Start here:
16530
+ baker mcp list
16531
+
16532
+ Examples:
16533
+ baker mcp add --name weather --url https://mcp.example.com/mcp
16534
+ baker mcp add --name acme --url https://acme.dev/mcp --header "Authorization: Bearer sk-\u2026"
16535
+ baker mcp remove --name weather`
16536
+ },
16537
+ subCommands: {
16538
+ list: listCommand3,
16539
+ add: addCommand,
16540
+ remove: removeCommand2
16541
+ }
16542
+ });
16543
+
16395
16544
  // src/commands/research/index.ts
16396
- import { defineCommand as defineCommand131 } from "citty";
16545
+ import { defineCommand as defineCommand132 } from "citty";
16397
16546
 
16398
16547
  // src/commands/research/advertisers.ts
16399
- import { defineCommand as defineCommand121 } from "citty";
16548
+ import { defineCommand as defineCommand122 } from "citty";
16400
16549
 
16401
16550
  // src/commands/research/output.ts
16402
16551
  var RESEARCH_DATA_NOTE = "Estimates based on third-party SERP data \u2014 not exact figures. Use for directional insights, not precise measurement.";
@@ -16509,7 +16658,7 @@ var FIELDS3 = {
16509
16658
  etv: "Estimated traffic value (USD)",
16510
16659
  visibility: "SERP visibility score (0-1)"
16511
16660
  };
16512
- var advertisersCommand = defineCommand121({
16661
+ var advertisersCommand = defineCommand122({
16513
16662
  meta: {
16514
16663
  name: "advertisers",
16515
16664
  description: `Find domains competing for a keyword in Google SERPs.
@@ -16556,7 +16705,7 @@ Examples:
16556
16705
  });
16557
16706
 
16558
16707
  // src/commands/research/autocomplete.ts
16559
- import { defineCommand as defineCommand122 } from "citty";
16708
+ import { defineCommand as defineCommand123 } from "citty";
16560
16709
  registerSchema({
16561
16710
  command: "research.autocomplete",
16562
16711
  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).",
@@ -16579,7 +16728,7 @@ registerSchema({
16579
16728
  var FIELDS4 = {
16580
16729
  suggestion: "Autocomplete suggestion from Google"
16581
16730
  };
16582
- var autocompleteCommand = defineCommand122({
16731
+ var autocompleteCommand = defineCommand123({
16583
16732
  meta: {
16584
16733
  name: "autocomplete",
16585
16734
  description: `Get Google Autocomplete suggestions for keyword expansion.
@@ -16625,7 +16774,7 @@ Examples:
16625
16774
  });
16626
16775
 
16627
16776
  // src/commands/research/countries.ts
16628
- import { defineCommand as defineCommand123 } from "citty";
16777
+ import { defineCommand as defineCommand124 } from "citty";
16629
16778
  registerSchema({
16630
16779
  command: "research.countries",
16631
16780
  description: "List all supported country codes for --location flag in research commands.",
@@ -16682,7 +16831,7 @@ var FIELDS5 = {
16682
16831
  code: "Country code to pass as --location",
16683
16832
  name: "Country name"
16684
16833
  };
16685
- var countriesCommand = defineCommand123({
16834
+ var countriesCommand = defineCommand124({
16686
16835
  meta: {
16687
16836
  name: "countries",
16688
16837
  description: "List all supported country codes for --location flag."
@@ -16693,7 +16842,7 @@ var countriesCommand = defineCommand123({
16693
16842
  });
16694
16843
 
16695
16844
  // src/commands/research/intent.ts
16696
- import { defineCommand as defineCommand124 } from "citty";
16845
+ import { defineCommand as defineCommand125 } from "citty";
16697
16846
  registerSchema({
16698
16847
  command: "research.intent",
16699
16848
  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.",
@@ -16716,7 +16865,7 @@ var FIELDS6 = {
16716
16865
  intent: "Primary Google Search intent: informational, navigational, commercial, transactional",
16717
16866
  probability: "Confidence score 0.0-1.0"
16718
16867
  };
16719
- var intentCommand = defineCommand124({
16868
+ var intentCommand = defineCommand125({
16720
16869
  meta: {
16721
16870
  name: "intent",
16722
16871
  description: `Classify Google Search intent for keywords. Returns intent type and confidence.
@@ -16764,7 +16913,7 @@ Examples:
16764
16913
  });
16765
16914
 
16766
16915
  // src/commands/research/keyword-gap.ts
16767
- import { defineCommand as defineCommand125 } from "citty";
16916
+ import { defineCommand as defineCommand126 } from "citty";
16768
16917
  registerSchema({
16769
16918
  command: "research.keyword-gap",
16770
16919
  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.",
@@ -16793,7 +16942,7 @@ var FIELDS7 = {
16793
16942
  cpc: "Cost per click USD",
16794
16943
  their_position: "Competitor's ranking position"
16795
16944
  };
16796
- var keywordGapCommand = defineCommand125({
16945
+ var keywordGapCommand = defineCommand126({
16797
16946
  meta: {
16798
16947
  name: "keyword-gap",
16799
16948
  description: `Find keywords a competitor has that you don't. Supports pagination via --offset.
@@ -16867,7 +17016,7 @@ Examples:
16867
17016
  });
16868
17017
 
16869
17018
  // src/commands/research/keywords-for-site.ts
16870
- import { defineCommand as defineCommand126 } from "citty";
17019
+ import { defineCommand as defineCommand127 } from "citty";
16871
17020
  registerSchema({
16872
17021
  command: "research.keywords-for-site",
16873
17022
  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.",
@@ -16900,7 +17049,7 @@ var FIELDS8 = {
16900
17049
  competition: "LOW, MEDIUM, or HIGH",
16901
17050
  competition_index: "Competition score 0-100"
16902
17051
  };
16903
- var keywordsForSiteCommand = defineCommand126({
17052
+ var keywordsForSiteCommand = defineCommand127({
16904
17053
  meta: {
16905
17054
  name: "keywords-for-site",
16906
17055
  description: `Get keywords a competitor targets in Google. Use --type to filter paid/organic.
@@ -16953,7 +17102,7 @@ Examples:
16953
17102
  });
16954
17103
 
16955
17104
  // src/commands/research/languages.ts
16956
- import { defineCommand as defineCommand127 } from "citty";
17105
+ import { defineCommand as defineCommand128 } from "citty";
16957
17106
  registerSchema({
16958
17107
  command: "research.languages",
16959
17108
  description: "List all supported language codes for --language flag in research commands.",
@@ -16983,7 +17132,7 @@ var FIELDS9 = {
16983
17132
  code: "Language code to pass as --language",
16984
17133
  name: "Language name (also accepted by --language)"
16985
17134
  };
16986
- var languagesCommand2 = defineCommand127({
17135
+ var languagesCommand2 = defineCommand128({
16987
17136
  meta: {
16988
17137
  name: "languages",
16989
17138
  description: "List all supported language codes for --language flag."
@@ -16994,7 +17143,7 @@ var languagesCommand2 = defineCommand127({
16994
17143
  });
16995
17144
 
16996
17145
  // src/commands/research/lighthouse.ts
16997
- import { defineCommand as defineCommand128 } from "citty";
17146
+ import { defineCommand as defineCommand129 } from "citty";
16998
17147
  registerSchema({
16999
17148
  command: "research.lighthouse",
17000
17149
  description: "Landing page performance audit. Returns metrics that affect Google Ads Quality Score and CPC.",
@@ -17013,7 +17162,7 @@ var FIELDS10 = {
17013
17162
  speed_index_ms: "Speed Index in ms (good: < 3400)",
17014
17163
  interactive_ms: "Time to Interactive in ms (good: < 3800)"
17015
17164
  };
17016
- var lighthouseCommand = defineCommand128({
17165
+ var lighthouseCommand = defineCommand129({
17017
17166
  meta: {
17018
17167
  name: "lighthouse",
17019
17168
  description: `Landing page performance audit. Metrics affecting Google Ads Quality Score.
@@ -17051,7 +17200,7 @@ Examples:
17051
17200
  });
17052
17201
 
17053
17202
  // src/commands/research/relevant-pages.ts
17054
- import { defineCommand as defineCommand129 } from "citty";
17203
+ import { defineCommand as defineCommand130 } from "citty";
17055
17204
  registerSchema({
17056
17205
  command: "research.relevant-pages",
17057
17206
  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).",
@@ -17077,7 +17226,7 @@ var FIELDS11 = {
17077
17226
  keywords: "Total organic keywords the page ranks for",
17078
17227
  top_10: "Keywords in positions 1-10"
17079
17228
  };
17080
- var relevantPagesCommand = defineCommand129({
17229
+ var relevantPagesCommand = defineCommand130({
17081
17230
  meta: {
17082
17231
  name: "relevant-pages",
17083
17232
  description: `Get the top pages of a competitor domain with traffic data.
@@ -17123,7 +17272,7 @@ Examples:
17123
17272
  });
17124
17273
 
17125
17274
  // src/commands/research/web.ts
17126
- import { defineCommand as defineCommand130 } from "citty";
17275
+ import { defineCommand as defineCommand131 } from "citty";
17127
17276
  registerSchema({
17128
17277
  command: "research.web",
17129
17278
  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).",
@@ -17174,7 +17323,7 @@ async function runDeepResearch(question) {
17174
17323
  }
17175
17324
  throw new Error("Deep research timed out");
17176
17325
  }
17177
- var webCommand = defineCommand130({
17326
+ var webCommand = defineCommand131({
17178
17327
  meta: {
17179
17328
  name: "web",
17180
17329
  description: `Search the web with AI to answer any open-ended marketing question. Uses live internet data via Google Search.
@@ -17234,7 +17383,7 @@ Examples:
17234
17383
  });
17235
17384
 
17236
17385
  // src/commands/research/index.ts
17237
- var researchCommand = defineCommand131({
17386
+ var researchCommand = defineCommand132({
17238
17387
  meta: {
17239
17388
  name: "research",
17240
17389
  description: `Competitive intelligence and AI-powered research commands.
@@ -17274,10 +17423,10 @@ Examples:
17274
17423
  });
17275
17424
 
17276
17425
  // src/commands/scheduled-actions/index.ts
17277
- import { defineCommand as defineCommand138 } from "citty";
17426
+ import { defineCommand as defineCommand139 } from "citty";
17278
17427
 
17279
17428
  // src/commands/scheduled-actions/create.ts
17280
- import { defineCommand as defineCommand132 } from "citty";
17429
+ import { defineCommand as defineCommand133 } from "citty";
17281
17430
 
17282
17431
  // src/commands/scheduled-actions/shared.ts
17283
17432
  var TEMP_SCHEDULED_ACTION_PREFIX = "temp_sched_";
@@ -17392,7 +17541,7 @@ registerSchema({
17392
17541
  prompt: { type: "string", description: "Additional prompt instructions for the spawned agent", required: false }
17393
17542
  }
17394
17543
  });
17395
- var createCommand2 = defineCommand132({
17544
+ var createCommand2 = defineCommand133({
17396
17545
  meta: {
17397
17546
  name: "create",
17398
17547
  description: 'Stage a scheduled action. Example: baker scheduled-actions create --name "Weekly report" --description "..." --cron "0 9 * * MON"'
@@ -17441,7 +17590,7 @@ var createCommand2 = defineCommand132({
17441
17590
  });
17442
17591
 
17443
17592
  // src/commands/scheduled-actions/delete.ts
17444
- import { defineCommand as defineCommand133 } from "citty";
17593
+ import { defineCommand as defineCommand134 } from "citty";
17445
17594
  registerSchema({
17446
17595
  command: "scheduled-actions.delete",
17447
17596
  description: "Stage deletion of a published scheduled action or cancellation of a temp_sched_* draft creation.",
@@ -17449,7 +17598,7 @@ registerSchema({
17449
17598
  id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
17450
17599
  }
17451
17600
  });
17452
- var deleteCommand2 = defineCommand133({
17601
+ var deleteCommand2 = defineCommand134({
17453
17602
  meta: {
17454
17603
  name: "delete",
17455
17604
  description: "Stage scheduled action deletion. Example: baker scheduled-actions delete <id-or-temp_sched_id>"
@@ -17478,7 +17627,7 @@ var deleteCommand2 = defineCommand133({
17478
17627
  });
17479
17628
 
17480
17629
  // src/commands/scheduled-actions/get.ts
17481
- import { defineCommand as defineCommand134 } from "citty";
17630
+ import { defineCommand as defineCommand135 } from "citty";
17482
17631
  registerSchema({
17483
17632
  command: "scheduled-actions.get",
17484
17633
  description: "Get a published scheduled action or a temp_sched_* draft-created scheduled action.",
@@ -17486,7 +17635,7 @@ registerSchema({
17486
17635
  id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
17487
17636
  }
17488
17637
  });
17489
- var getCommand3 = defineCommand134({
17638
+ var getCommand3 = defineCommand135({
17490
17639
  meta: {
17491
17640
  name: "get",
17492
17641
  description: "Get a scheduled action. Example: baker scheduled-actions get <id-or-temp_sched_id>"
@@ -17523,13 +17672,13 @@ var getCommand3 = defineCommand134({
17523
17672
  });
17524
17673
 
17525
17674
  // src/commands/scheduled-actions/list.ts
17526
- import { defineCommand as defineCommand135 } from "citty";
17675
+ import { defineCommand as defineCommand136 } from "citty";
17527
17676
  registerSchema({
17528
17677
  command: "scheduled-actions.list",
17529
17678
  description: "List published scheduled actions. Includes draft state when BAKER_CHAT_ID is set.",
17530
17679
  args: {}
17531
17680
  });
17532
- var listCommand3 = defineCommand135({
17681
+ var listCommand4 = defineCommand136({
17533
17682
  meta: {
17534
17683
  name: "list",
17535
17684
  description: "List scheduled actions. Includes staged draft ops when BAKER_CHAT_ID is set."
@@ -17550,7 +17699,7 @@ var listCommand3 = defineCommand135({
17550
17699
  });
17551
17700
 
17552
17701
  // src/commands/scheduled-actions/trigger.ts
17553
- import { defineCommand as defineCommand136 } from "citty";
17702
+ import { defineCommand as defineCommand137 } from "citty";
17554
17703
  registerSchema({
17555
17704
  command: "scheduled-actions.trigger",
17556
17705
  description: "Immediately trigger a published scheduled action. Does not require BAKER_CHAT_ID and rejects temp_sched_* IDs.",
@@ -17558,7 +17707,7 @@ registerSchema({
17558
17707
  id: { type: "string", description: "Published scheduled action ID", required: true }
17559
17708
  }
17560
17709
  });
17561
- var triggerCommand = defineCommand136({
17710
+ var triggerCommand = defineCommand137({
17562
17711
  meta: {
17563
17712
  name: "trigger",
17564
17713
  description: "Immediately trigger a published scheduled action. Example: baker scheduled-actions trigger <id>"
@@ -17595,7 +17744,7 @@ var triggerCommand = defineCommand136({
17595
17744
  });
17596
17745
 
17597
17746
  // src/commands/scheduled-actions/update.ts
17598
- import { defineCommand as defineCommand137 } from "citty";
17747
+ import { defineCommand as defineCommand138 } from "citty";
17599
17748
  registerSchema({
17600
17749
  command: "scheduled-actions.update",
17601
17750
  description: "Stage an update to a published scheduled action or temp_sched_* draft-created scheduled action.",
@@ -17620,7 +17769,7 @@ registerSchema({
17620
17769
  prompt: { type: "string", description: "Replacement additional spawned-agent instructions", required: false }
17621
17770
  }
17622
17771
  });
17623
- var updateCommand2 = defineCommand137({
17772
+ var updateCommand2 = defineCommand138({
17624
17773
  meta: {
17625
17774
  name: "update",
17626
17775
  description: "Stage a scheduled action update. Example: baker scheduled-actions update <id> --enabled false"
@@ -17691,7 +17840,7 @@ var updateCommand2 = defineCommand137({
17691
17840
  });
17692
17841
 
17693
17842
  // src/commands/scheduled-actions/index.ts
17694
- var scheduledActionsCommand = defineCommand138({
17843
+ var scheduledActionsCommand = defineCommand139({
17695
17844
  meta: {
17696
17845
  name: "scheduled-actions",
17697
17846
  description: `Manage Scheduled Actions. Subcommands: list, get, create, update, delete, trigger.
@@ -17707,7 +17856,7 @@ Examples:
17707
17856
  baker scheduled-actions trigger <id>`
17708
17857
  },
17709
17858
  subCommands: {
17710
- list: listCommand3,
17859
+ list: listCommand4,
17711
17860
  get: getCommand3,
17712
17861
  create: createCommand2,
17713
17862
  update: updateCommand2,
@@ -17717,8 +17866,8 @@ Examples:
17717
17866
  });
17718
17867
 
17719
17868
  // src/commands/schema.ts
17720
- import { defineCommand as defineCommand139 } from "citty";
17721
- var schemaCommand = defineCommand139({
17869
+ import { defineCommand as defineCommand140 } from "citty";
17870
+ var schemaCommand = defineCommand140({
17722
17871
  meta: {
17723
17872
  name: "schema",
17724
17873
  description: "Inspect command argument schemas (for AI agent introspection). Lists all commands if no argument given. Example: baker schema images.search"
@@ -17754,10 +17903,10 @@ var schemaCommand = defineCommand139({
17754
17903
  });
17755
17904
 
17756
17905
  // src/commands/testimonials/index.ts
17757
- import { defineCommand as defineCommand143 } from "citty";
17906
+ import { defineCommand as defineCommand144 } from "citty";
17758
17907
 
17759
17908
  // src/commands/testimonials/get.ts
17760
- import { defineCommand as defineCommand140 } from "citty";
17909
+ import { defineCommand as defineCommand141 } from "citty";
17761
17910
  registerSchema({
17762
17911
  command: "testimonials.get",
17763
17912
  description: "Get a single testimonial by ID",
@@ -17765,7 +17914,7 @@ registerSchema({
17765
17914
  id: { type: "string", description: "Testimonial ID", required: true }
17766
17915
  }
17767
17916
  });
17768
- var getCommand4 = defineCommand140({
17917
+ var getCommand4 = defineCommand141({
17769
17918
  meta: { name: "get", description: "Get a single testimonial by ID. Example: baker testimonials get j571abc123" },
17770
17919
  args: {
17771
17920
  id: { type: "positional", description: "Testimonial ID", required: false },
@@ -17802,7 +17951,7 @@ var getCommand4 = defineCommand140({
17802
17951
  });
17803
17952
 
17804
17953
  // src/commands/testimonials/list.ts
17805
- import { defineCommand as defineCommand141 } from "citty";
17954
+ import { defineCommand as defineCommand142 } from "citty";
17806
17955
  registerSchema({
17807
17956
  command: "testimonials.list",
17808
17957
  description: "List testimonials with optional filters.",
@@ -17832,7 +17981,7 @@ registerSchema({
17832
17981
  limit: { type: "number", description: "Max results (default 50)", required: false, default: 50 }
17833
17982
  }
17834
17983
  });
17835
- var listCommand4 = defineCommand141({
17984
+ var listCommand5 = defineCommand142({
17836
17985
  meta: {
17837
17986
  name: "list",
17838
17987
  description: "List testimonials with optional filters. Example: baker testimonials list --source google --sentiment positive"
@@ -17881,7 +18030,7 @@ var listCommand4 = defineCommand141({
17881
18030
  });
17882
18031
 
17883
18032
  // src/commands/testimonials/search.ts
17884
- import { defineCommand as defineCommand142 } from "citty";
18033
+ import { defineCommand as defineCommand143 } from "citty";
17885
18034
  registerSchema({
17886
18035
  command: "testimonials.search",
17887
18036
  description: "Search testimonials by text query. Uses hybrid BM25 + vector + reranking.",
@@ -17912,7 +18061,7 @@ registerSchema({
17912
18061
  tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
17913
18062
  }
17914
18063
  });
17915
- var searchCommand2 = defineCommand142({
18064
+ var searchCommand2 = defineCommand143({
17916
18065
  meta: {
17917
18066
  name: "search",
17918
18067
  description: "Semantic search testimonials by text query. Uses hybrid BM25 + vector + reranking. Example: baker testimonials search 'great service' --rating-min 4"
@@ -17986,7 +18135,7 @@ var searchCommand2 = defineCommand142({
17986
18135
  var tagsCommand3 = makeTagsCommand("testimonials", "testimonial", "/api/testimonials/tags");
17987
18136
 
17988
18137
  // src/commands/testimonials/index.ts
17989
- var testimonialsCommand = defineCommand143({
18138
+ var testimonialsCommand = defineCommand144({
17990
18139
  meta: {
17991
18140
  name: "testimonials",
17992
18141
  description: `Find and browse testimonials in Baker. Subcommands: search, get, list, tags.
@@ -18001,16 +18150,16 @@ Examples:
18001
18150
  subCommands: {
18002
18151
  get: getCommand4,
18003
18152
  search: searchCommand2,
18004
- list: listCommand4,
18153
+ list: listCommand5,
18005
18154
  tags: tagsCommand3
18006
18155
  }
18007
18156
  });
18008
18157
 
18009
18158
  // src/commands/videos/index.ts
18010
- import { defineCommand as defineCommand148 } from "citty";
18159
+ import { defineCommand as defineCommand149 } from "citty";
18011
18160
 
18012
18161
  // src/commands/videos/delete.ts
18013
- import { defineCommand as defineCommand144 } from "citty";
18162
+ import { defineCommand as defineCommand145 } from "citty";
18014
18163
  registerSchema({
18015
18164
  command: "videos.delete",
18016
18165
  description: "Delete a video by ID",
@@ -18024,7 +18173,7 @@ registerSchema({
18024
18173
  }
18025
18174
  }
18026
18175
  });
18027
- var deleteCommand3 = defineCommand144({
18176
+ var deleteCommand3 = defineCommand145({
18028
18177
  meta: {
18029
18178
  name: "delete",
18030
18179
  description: "Delete a video by ID. Use --dry-run to preview. Example: baker videos delete j571abc123 --dry-run"
@@ -18065,7 +18214,7 @@ var deleteCommand3 = defineCommand144({
18065
18214
  });
18066
18215
 
18067
18216
  // src/commands/videos/get.ts
18068
- import { defineCommand as defineCommand145 } from "citty";
18217
+ import { defineCommand as defineCommand146 } from "citty";
18069
18218
  registerSchema({
18070
18219
  command: "videos.get",
18071
18220
  description: "Get a single video by ID",
@@ -18073,7 +18222,7 @@ registerSchema({
18073
18222
  id: { type: "string", description: "Video ID", required: true }
18074
18223
  }
18075
18224
  });
18076
- var getCommand5 = defineCommand145({
18225
+ var getCommand5 = defineCommand146({
18077
18226
  meta: { name: "get", description: "Get a single video by ID. Example: baker videos get j571abc123" },
18078
18227
  args: {
18079
18228
  id: { type: "positional", description: "Video ID", required: false },
@@ -18110,7 +18259,7 @@ var getCommand5 = defineCommand145({
18110
18259
  });
18111
18260
 
18112
18261
  // src/commands/videos/search.ts
18113
- import { defineCommand as defineCommand146 } from "citty";
18262
+ import { defineCommand as defineCommand147 } from "citty";
18114
18263
  registerSchema({
18115
18264
  command: "videos.search",
18116
18265
  description: "Search videos by text query. Only returns ready videos.",
@@ -18120,7 +18269,7 @@ registerSchema({
18120
18269
  tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
18121
18270
  }
18122
18271
  });
18123
- var searchCommand3 = defineCommand146({
18272
+ var searchCommand3 = defineCommand147({
18124
18273
  meta: {
18125
18274
  name: "search",
18126
18275
  description: "Semantic search videos by text query. Uses hybrid BM25 + vector + reranking. Example: baker videos search 'product demo' --tags tutorial"
@@ -18172,7 +18321,7 @@ var tagsCommand4 = makeTagsCommand("videos", "video", "/api/videos/tags");
18172
18321
  // src/commands/videos/upload.ts
18173
18322
  import { readFile as readFile12, stat as stat3 } from "fs/promises";
18174
18323
  import { extname as extname3 } from "path";
18175
- import { defineCommand as defineCommand147 } from "citty";
18324
+ import { defineCommand as defineCommand148 } from "citty";
18176
18325
  var MIME_MAP = {
18177
18326
  ".mp4": "video/mp4",
18178
18327
  ".mov": "video/quicktime",
@@ -18206,7 +18355,7 @@ function detectContentType(filePath) {
18206
18355
  }
18207
18356
  return mime;
18208
18357
  }
18209
- var uploadCommand2 = defineCommand147({
18358
+ var uploadCommand2 = defineCommand148({
18210
18359
  meta: {
18211
18360
  name: "upload",
18212
18361
  description: "Upload a video file to Baker via Mux direct upload. Auto-detects content type. Example: baker videos upload ./demo.mp4"
@@ -18260,7 +18409,7 @@ var uploadCommand2 = defineCommand147({
18260
18409
  });
18261
18410
 
18262
18411
  // src/commands/videos/index.ts
18263
- var videosCommand = defineCommand148({
18412
+ var videosCommand = defineCommand149({
18264
18413
  meta: {
18265
18414
  name: "videos",
18266
18415
  description: `Find and manage videos in Baker. Subcommands: search, get, upload, delete, tags.
@@ -18283,10 +18432,10 @@ Examples:
18283
18432
  });
18284
18433
 
18285
18434
  // src/commands/winning-ads/index.ts
18286
- import { defineCommand as defineCommand151 } from "citty";
18435
+ import { defineCommand as defineCommand152 } from "citty";
18287
18436
 
18288
18437
  // src/commands/winning-ads/advertisers.ts
18289
- import { defineCommand as defineCommand149 } from "citty";
18438
+ import { defineCommand as defineCommand150 } from "citty";
18290
18439
  registerSchema({
18291
18440
  command: "winning-ads.advertisers",
18292
18441
  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).",
@@ -18299,7 +18448,7 @@ registerSchema({
18299
18448
  function identity(record) {
18300
18449
  return record;
18301
18450
  }
18302
- var advertisersCommand2 = defineCommand149({
18451
+ var advertisersCommand2 = defineCommand150({
18303
18452
  meta: {
18304
18453
  name: "advertisers",
18305
18454
  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'
@@ -18350,7 +18499,7 @@ var advertisersCommand2 = defineCommand149({
18350
18499
  });
18351
18500
 
18352
18501
  // src/commands/winning-ads/search.ts
18353
- import { defineCommand as defineCommand150 } from "citty";
18502
+ import { defineCommand as defineCommand151 } from "citty";
18354
18503
  registerSchema({
18355
18504
  command: "winning-ads.search",
18356
18505
  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.",
@@ -18458,7 +18607,7 @@ function buildSearchBody(args) {
18458
18607
  }
18459
18608
  return body;
18460
18609
  }
18461
- var searchCommand4 = defineCommand150({
18610
+ var searchCommand4 = defineCommand151({
18462
18611
  meta: {
18463
18612
  name: "search",
18464
18613
  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"
@@ -18570,7 +18719,7 @@ var searchCommand4 = defineCommand150({
18570
18719
  });
18571
18720
 
18572
18721
  // src/commands/winning-ads/index.ts
18573
- var winningAdsCommand = defineCommand151({
18722
+ var winningAdsCommand = defineCommand152({
18574
18723
  meta: {
18575
18724
  name: "winning-ads",
18576
18725
  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.
@@ -18610,7 +18759,7 @@ function getCliVersion() {
18610
18759
  }
18611
18760
 
18612
18761
  // src/cli.ts
18613
- var main = defineCommand152({
18762
+ var main = defineCommand153({
18614
18763
  meta: {
18615
18764
  name: "baker",
18616
18765
  version: getCliVersion(),
@@ -18635,6 +18784,7 @@ Introspection: Run 'baker schema <command>' to inspect argument schemas.`
18635
18784
  testimonials: testimonialsCommand,
18636
18785
  canvas: canvasCommand,
18637
18786
  "winning-ads": winningAdsCommand,
18787
+ mcp: mcpCommand,
18638
18788
  schema: schemaCommand
18639
18789
  }
18640
18790
  });