@koda-sl/baker-cli 0.280.0-dev.1f1c09c80 → 0.281.0-dev.1f1c09c80
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 +509 -366
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -110,7 +110,7 @@ import {
|
|
|
110
110
|
} from "./chunk-WFWU3CHS.js";
|
|
111
111
|
|
|
112
112
|
// src/cli.ts
|
|
113
|
-
import { defineCommand as
|
|
113
|
+
import { defineCommand as defineCommand229, runMain } from "citty";
|
|
114
114
|
|
|
115
115
|
// src/cache-flag.ts
|
|
116
116
|
var NO_CACHE_ARG = {
|
|
@@ -3722,6 +3722,26 @@ var avatarsListRequestSchema = z7.object({
|
|
|
3722
3722
|
limit: z7.coerce.number().int().positive().max(100).optional()
|
|
3723
3723
|
});
|
|
3724
3724
|
var avatarsListResponseSchema = z7.object({ avatars: z7.array(avatarSummarySchema) });
|
|
3725
|
+
var avatarsVoicesRequestSchema = z7.object({
|
|
3726
|
+
/** Free-text brief — "Spanish woman, warm, 40" — ranked the same way a render casts. */
|
|
3727
|
+
search: z7.string().trim().max(300).optional(),
|
|
3728
|
+
gender: z7.string().trim().max(40).optional(),
|
|
3729
|
+
language: z7.string().trim().max(40).optional(),
|
|
3730
|
+
limit: z7.coerce.number().int().positive().max(50).optional()
|
|
3731
|
+
});
|
|
3732
|
+
var avatarVoiceSchema = z7.object({
|
|
3733
|
+
voiceId: z7.string(),
|
|
3734
|
+
name: z7.string(),
|
|
3735
|
+
/** The provider's own labels — age and accent are what a casting call turns on. */
|
|
3736
|
+
age: z7.string().optional(),
|
|
3737
|
+
accent: z7.string().optional(),
|
|
3738
|
+
gender: z7.string().optional(),
|
|
3739
|
+
language: z7.string().optional(),
|
|
3740
|
+
useCase: z7.string().optional(),
|
|
3741
|
+
description: z7.string().optional(),
|
|
3742
|
+
previewUrl: z7.string().optional()
|
|
3743
|
+
});
|
|
3744
|
+
var avatarsVoicesResponseSchema = z7.object({ voices: z7.array(avatarVoiceSchema) });
|
|
3725
3745
|
var avatarsGetRequestSchema = z7.object({
|
|
3726
3746
|
handle: z7.string().min(1, "Missing handle parameter"),
|
|
3727
3747
|
full: z7.coerce.boolean().optional()
|
|
@@ -24454,7 +24474,7 @@ Full guide: __tooling__/docs/tools/baker/analytics.md`
|
|
|
24454
24474
|
});
|
|
24455
24475
|
|
|
24456
24476
|
// src/commands/avatars/index.ts
|
|
24457
|
-
import { defineCommand as
|
|
24477
|
+
import { defineCommand as defineCommand95 } from "citty";
|
|
24458
24478
|
|
|
24459
24479
|
// src/commands/avatars/create.ts
|
|
24460
24480
|
import { defineCommand as defineCommand89 } from "citty";
|
|
@@ -25102,11 +25122,72 @@ var updateCommand2 = defineCommand93({
|
|
|
25102
25122
|
}
|
|
25103
25123
|
});
|
|
25104
25124
|
|
|
25125
|
+
// src/commands/avatars/voices.ts
|
|
25126
|
+
import { defineCommand as defineCommand94 } from "citty";
|
|
25127
|
+
registerSchema({
|
|
25128
|
+
command: "avatars.voices",
|
|
25129
|
+
description: 'List the voices an avatar can be given, ranked by the same scorer a render uses to cast one. Start here whenever an avatar has no voice: an avatar is a face AND a voice, and one without a voice cannot be shown speaking \u2014 its lines would be read by whoever the renderer happened to pick, which on screen is dubbing. Pass a brief (--search "mujer espanola calida, 40") plus --gender/--language to narrow it, then pin the winner with `baker avatars update --handle <handle> --voice-id <id>`. Rows carry the provider\'s own age and accent labels, which is what a casting call actually turns on.',
|
|
25130
|
+
args: {
|
|
25131
|
+
search: { type: "string", description: 'Brief to rank by, e.g. "Spanish woman, warm, 40"', required: false },
|
|
25132
|
+
gender: { type: "string", description: "Hard filter: female|male", required: false },
|
|
25133
|
+
language: { type: "string", description: "Hard filter, e.g. spanish|english", required: false },
|
|
25134
|
+
limit: { type: "number", description: "Max voices to return (1-50, default 10)", required: false }
|
|
25135
|
+
}
|
|
25136
|
+
});
|
|
25137
|
+
var voicesCommand = defineCommand94({
|
|
25138
|
+
meta: {
|
|
25139
|
+
name: "voices",
|
|
25140
|
+
description: 'List voices an avatar can be pinned to. Example: baker avatars voices --search "mujer espanola calida" --gender female --language spanish'
|
|
25141
|
+
},
|
|
25142
|
+
args: {
|
|
25143
|
+
search: { type: "string", description: "Brief to rank by", required: false },
|
|
25144
|
+
gender: { type: "string", description: "Hard filter: female|male", required: false },
|
|
25145
|
+
language: { type: "string", description: "Hard filter, e.g. spanish", required: false },
|
|
25146
|
+
limit: { type: "string", description: "Max voices to return (1-50)", required: false },
|
|
25147
|
+
output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
|
|
25148
|
+
fields: { type: "string", description: "Comma-separated field names to include", required: false }
|
|
25149
|
+
},
|
|
25150
|
+
run: async ({ args }) => {
|
|
25151
|
+
try {
|
|
25152
|
+
const params = {};
|
|
25153
|
+
for (const key of ["search", "gender", "language", "limit"]) {
|
|
25154
|
+
const value = args[key];
|
|
25155
|
+
if (value !== void 0 && value !== "") params[key] = value;
|
|
25156
|
+
}
|
|
25157
|
+
const data = await readAvatars("/api/avatars/voices", params);
|
|
25158
|
+
const hints = [];
|
|
25159
|
+
if (data.voices.length === 0) {
|
|
25160
|
+
hints.push("No voice matched. Drop --gender/--language and rank on the brief alone.");
|
|
25161
|
+
} else {
|
|
25162
|
+
const first = data.voices[0];
|
|
25163
|
+
if (first) {
|
|
25164
|
+
hints.push(
|
|
25165
|
+
`Pin one: baker avatars update --handle <handle> --voice-id ${first.voiceId} --voice-description "<how it should sound>"`
|
|
25166
|
+
);
|
|
25167
|
+
}
|
|
25168
|
+
const ages = new Set(data.voices.map((v) => v.age).filter(Boolean));
|
|
25169
|
+
if (ages.size === 1) {
|
|
25170
|
+
hints.push(`Every match is labelled \`${[...ages][0]}\` \u2014 the account stocks no other age for this filter.`);
|
|
25171
|
+
}
|
|
25172
|
+
}
|
|
25173
|
+
const format = args.output || "json";
|
|
25174
|
+
const fields = args.fields ? args.fields.split(",") : void 0;
|
|
25175
|
+
if (format === "json") {
|
|
25176
|
+
writeJson({ ok: true, data: { voices: data.voices }, meta: { count: data.voices.length }, hints });
|
|
25177
|
+
return;
|
|
25178
|
+
}
|
|
25179
|
+
writeOutput({ ok: true, data: data.voices }, format, fields, false);
|
|
25180
|
+
} catch (err) {
|
|
25181
|
+
failAvatarApi(err);
|
|
25182
|
+
}
|
|
25183
|
+
}
|
|
25184
|
+
});
|
|
25185
|
+
|
|
25105
25186
|
// src/commands/avatars/index.ts
|
|
25106
|
-
var avatarsCommand =
|
|
25187
|
+
var avatarsCommand = defineCommand95({
|
|
25107
25188
|
meta: {
|
|
25108
25189
|
name: "avatars",
|
|
25109
|
-
description: `Reusable AI presenters this company can cast into images and video. An avatar holds one settled identity, so the same face can carry a whole campaign. Subcommands: list, get, create, update, delete.
|
|
25190
|
+
description: `Reusable AI presenters this company can cast into images and video. An avatar holds one settled identity, so the same face can carry a whole campaign. Subcommands: list, get, create, update, voices, delete.
|
|
25110
25191
|
|
|
25111
25192
|
How casting works:
|
|
25112
25193
|
1. baker avatars list See who this company already has (reuse before you create)
|
|
@@ -25115,11 +25196,17 @@ How casting works:
|
|
|
25115
25196
|
Ground the render on the identity sheet, never on a source photo,
|
|
25116
25197
|
and copy the subject description into the prompt VERBATIM
|
|
25117
25198
|
|
|
25199
|
+
An avatar is a face AND a voice. One with no pinned voice cannot be shown speaking \u2014 a
|
|
25200
|
+
video ad refuses rather than reading their lines in whoever the renderer picked:
|
|
25201
|
+
baker avatars voices --search "mujer espanola calida, 40" --gender female --language spanish
|
|
25202
|
+
baker avatars update marta --voice-id <id> --voice-description "how it should sound"
|
|
25203
|
+
|
|
25118
25204
|
Examples:
|
|
25119
25205
|
baker avatars list --status ready --output md
|
|
25120
25206
|
baker avatars get marta --full
|
|
25121
25207
|
baker avatars create --name "Marta" --subject "woman in her early 40s, shoulder-length dark hair, light olive skin"
|
|
25122
25208
|
baker avatars update marta --subject "\u2026" --regenerate-sheet
|
|
25209
|
+
baker avatars voices --search "mujer espanola calida" --gender female --language spanish
|
|
25123
25210
|
baker avatars delete marta --archive
|
|
25124
25211
|
Full guide: __tooling__/docs/tools/baker/avatars.md`
|
|
25125
25212
|
},
|
|
@@ -25128,17 +25215,18 @@ Full guide: __tooling__/docs/tools/baker/avatars.md`
|
|
|
25128
25215
|
get: getCommand2,
|
|
25129
25216
|
create: createCommand2,
|
|
25130
25217
|
update: updateCommand2,
|
|
25218
|
+
voices: voicesCommand,
|
|
25131
25219
|
delete: deleteCommand
|
|
25132
25220
|
}
|
|
25133
25221
|
});
|
|
25134
25222
|
|
|
25135
25223
|
// src/commands/brand/index.ts
|
|
25136
|
-
import { defineCommand as
|
|
25224
|
+
import { defineCommand as defineCommand97 } from "citty";
|
|
25137
25225
|
|
|
25138
25226
|
// src/commands/brand/fonts.ts
|
|
25139
25227
|
import { mkdir, readdir, readFile as readFile2, writeFile } from "fs/promises";
|
|
25140
25228
|
import path2 from "path";
|
|
25141
|
-
import { defineCommand as
|
|
25229
|
+
import { defineCommand as defineCommand96 } from "citty";
|
|
25142
25230
|
|
|
25143
25231
|
// src/engine/brand/fonts.ts
|
|
25144
25232
|
import { posix } from "path";
|
|
@@ -25982,7 +26070,7 @@ async function unresolvedAction(css, unresolved) {
|
|
|
25982
26070
|
}
|
|
25983
26071
|
return `Run \`baker brand fonts fetch "${unresolved[0]}"\` to self-host it, which writes the @font-face for you. For a face no catalogue carries, add an @font-face pointing at a file in ${FONTS_DIR}.`;
|
|
25984
26072
|
}
|
|
25985
|
-
var fontsCheckCommand =
|
|
26073
|
+
var fontsCheckCommand = defineCommand96({
|
|
25986
26074
|
meta: {
|
|
25987
26075
|
name: "check",
|
|
25988
26076
|
description: "Verify the brand's fonts really exist. First: every --font-* family in src/styles/global.css must be provided by a local @font-face, or it renders as a fallback on every page \u2014 a Google @import does not provide one here, the build drops it before the page loads. Then, for families still requested from Google, ask Google what it actually serves \u2014 a weight nobody serves is silently synthesized."
|
|
@@ -26034,7 +26122,7 @@ var fontsCheckCommand = defineCommand95({
|
|
|
26034
26122
|
});
|
|
26035
26123
|
}
|
|
26036
26124
|
});
|
|
26037
|
-
var fontsFetchCommand =
|
|
26125
|
+
var fontsFetchCommand = defineCommand96({
|
|
26038
26126
|
meta: {
|
|
26039
26127
|
name: "fetch",
|
|
26040
26128
|
description: "Download a font from Google Fonts or Fontsource into src/brand/fonts/ and write its @font-face into src/styles/global.css above @theme, so the family actually loads. Use when a brand font should be self-hosted rather than requested from a third party on every page load."
|
|
@@ -26135,7 +26223,7 @@ async function astroSources() {
|
|
|
26135
26223
|
}
|
|
26136
26224
|
return out;
|
|
26137
26225
|
}
|
|
26138
|
-
var fontsAdoptCommand =
|
|
26226
|
+
var fontsAdoptCommand = defineCommand96({
|
|
26139
26227
|
meta: {
|
|
26140
26228
|
name: "adopt",
|
|
26141
26229
|
description: "Move brand faces a page already self-hosts into src/styles/global.css, so every page loads them instead of just that one. Use when `check` reports a family as not loaded but the font files are already in src/brand/fonts/ \u2014 downloading it again would hand that page a different build of the same face."
|
|
@@ -26215,7 +26303,7 @@ var fontsAdoptCommand = defineCommand95({
|
|
|
26215
26303
|
});
|
|
26216
26304
|
}
|
|
26217
26305
|
});
|
|
26218
|
-
var fontsCommand =
|
|
26306
|
+
var fontsCommand = defineCommand96({
|
|
26219
26307
|
meta: {
|
|
26220
26308
|
name: "fonts",
|
|
26221
26309
|
description: `Verify and self-host the brand's typefaces.
|
|
@@ -26235,7 +26323,7 @@ Subcommands:
|
|
|
26235
26323
|
});
|
|
26236
26324
|
|
|
26237
26325
|
// src/commands/brand/index.ts
|
|
26238
|
-
var brandCommand =
|
|
26326
|
+
var brandCommand = defineCommand97({
|
|
26239
26327
|
meta: {
|
|
26240
26328
|
name: "brand",
|
|
26241
26329
|
description: `Brand asset verification for src/brand/.
|
|
@@ -26251,11 +26339,11 @@ Subcommands:
|
|
|
26251
26339
|
});
|
|
26252
26340
|
|
|
26253
26341
|
// src/commands/canvas/index.ts
|
|
26254
|
-
import { defineCommand as
|
|
26342
|
+
import { defineCommand as defineCommand109 } from "citty";
|
|
26255
26343
|
|
|
26256
26344
|
// src/commands/canvas/catalog.ts
|
|
26257
|
-
import { defineCommand as
|
|
26258
|
-
var catalogCommand =
|
|
26345
|
+
import { defineCommand as defineCommand98 } from "citty";
|
|
26346
|
+
var catalogCommand = defineCommand98({
|
|
26259
26347
|
meta: {
|
|
26260
26348
|
name: "catalog",
|
|
26261
26349
|
description: "Print the agent-facing node catalog (JSON Schema). Includes every registered node grouped by category."
|
|
@@ -26270,7 +26358,7 @@ var catalogCommand = defineCommand97({
|
|
|
26270
26358
|
// src/commands/canvas/critique.ts
|
|
26271
26359
|
import { readFile as readFile3 } from "fs/promises";
|
|
26272
26360
|
import path3 from "path";
|
|
26273
|
-
import { defineCommand as
|
|
26361
|
+
import { defineCommand as defineCommand99 } from "citty";
|
|
26274
26362
|
|
|
26275
26363
|
// src/engine/scaffold/lib/critique.ts
|
|
26276
26364
|
var VIBE_CUE = /\b(light|lighting|golden|moody|warm|cool|tone|grade|contrast|shadow|glow|rim|backlit|neon|soft)\b/i;
|
|
@@ -26390,7 +26478,7 @@ function critiqueCanvas(canvas) {
|
|
|
26390
26478
|
}
|
|
26391
26479
|
|
|
26392
26480
|
// src/commands/canvas/critique.ts
|
|
26393
|
-
var critiqueCommand =
|
|
26481
|
+
var critiqueCommand = defineCommand99({
|
|
26394
26482
|
meta: {
|
|
26395
26483
|
name: "critique",
|
|
26396
26484
|
description: "Pre-spend creative critic (ADVISORY \u2014 never blocks). Scores a scaffolded creative BEFORE the billed render, so weak spots get fixed for free. A VIDEO creative is scored on hook strength, sound-off first-frame legibility, retention risk, and mechanism clarity; a STATIC ad on baked-text legibility risk, identity grounding, brand-type fidelity, and mechanism clarity. Ground a video hook against `baker winning-ads hooks` for a proven pattern."
|
|
@@ -26432,9 +26520,9 @@ import { execFile } from "child_process";
|
|
|
26432
26520
|
import { readdir as readdir2, readFile as readFile4, stat } from "fs/promises";
|
|
26433
26521
|
import path4 from "path";
|
|
26434
26522
|
import { promisify } from "util";
|
|
26435
|
-
import { defineCommand as
|
|
26523
|
+
import { defineCommand as defineCommand100 } from "citty";
|
|
26436
26524
|
var execFileAsync = promisify(execFile);
|
|
26437
|
-
var inspectCommand =
|
|
26525
|
+
var inspectCommand = defineCommand100({
|
|
26438
26526
|
meta: {
|
|
26439
26527
|
name: "inspect",
|
|
26440
26528
|
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."
|
|
@@ -26542,12 +26630,12 @@ async function probeDuration(filePath) {
|
|
|
26542
26630
|
|
|
26543
26631
|
// src/commands/canvas/rerun.ts
|
|
26544
26632
|
import path17 from "path";
|
|
26545
|
-
import { defineCommand as
|
|
26633
|
+
import { defineCommand as defineCommand102 } from "citty";
|
|
26546
26634
|
|
|
26547
26635
|
// src/commands/canvas/run.ts
|
|
26548
26636
|
import { readFile as readFile12 } from "fs/promises";
|
|
26549
26637
|
import path16 from "path";
|
|
26550
|
-
import { defineCommand as
|
|
26638
|
+
import { defineCommand as defineCommand101 } from "citty";
|
|
26551
26639
|
|
|
26552
26640
|
// src/commands/canvas/normalize-paths.ts
|
|
26553
26641
|
import { existsSync as existsSync3, realpathSync } from "fs";
|
|
@@ -31200,7 +31288,7 @@ async function sceneWindowsBeside(canvasPath) {
|
|
|
31200
31288
|
}
|
|
31201
31289
|
|
|
31202
31290
|
// src/commands/canvas/run.ts
|
|
31203
|
-
var runCommand =
|
|
31291
|
+
var runCommand = defineCommand101({
|
|
31204
31292
|
meta: { name: "run", description: "Validate and execute a canvas JSON file." },
|
|
31205
31293
|
args: {
|
|
31206
31294
|
file: { type: "positional", required: true, description: "Path to canvas JSON" },
|
|
@@ -31598,7 +31686,7 @@ async function postInitialRunRecord(client, payload) {
|
|
|
31598
31686
|
|
|
31599
31687
|
// src/commands/canvas/rerun.ts
|
|
31600
31688
|
var SLUG_PATTERN = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
|
|
31601
|
-
var rerunCommand =
|
|
31689
|
+
var rerunCommand = defineCommand102({
|
|
31602
31690
|
meta: {
|
|
31603
31691
|
name: "rerun",
|
|
31604
31692
|
description: "Re-run a creative's latest recorded canvas. Restores its definition files from run history first, so it works in a fresh workspace that never had the source chat's files \u2014 an interrupted run resumes (in-flight jobs re-attach), a completed one re-renders from the cache."
|
|
@@ -31695,7 +31783,7 @@ async function fetchManifest(url) {
|
|
|
31695
31783
|
// src/commands/canvas/scaffold-static-ad.ts
|
|
31696
31784
|
import { access, mkdir as mkdir6, readFile as readFile14, writeFile as writeFile8 } from "fs/promises";
|
|
31697
31785
|
import path21 from "path";
|
|
31698
|
-
import { defineCommand as
|
|
31786
|
+
import { defineCommand as defineCommand104 } from "citty";
|
|
31699
31787
|
|
|
31700
31788
|
// src/engine/scaffold/staticAd.ts
|
|
31701
31789
|
import { z as z29 } from "zod";
|
|
@@ -32045,7 +32133,7 @@ function isValidScaffoldSlug(slug) {
|
|
|
32045
32133
|
// src/commands/canvas/sync-definition.ts
|
|
32046
32134
|
import { readdir as readdir7, readFile as readFile13, stat as stat3 } from "fs/promises";
|
|
32047
32135
|
import path20 from "path";
|
|
32048
|
-
import { defineCommand as
|
|
32136
|
+
import { defineCommand as defineCommand103 } from "citty";
|
|
32049
32137
|
|
|
32050
32138
|
// src/commands/canvas/definition-graph.ts
|
|
32051
32139
|
var MAX_NODES = 300;
|
|
@@ -32158,7 +32246,7 @@ async function resolveCanvasPath(inputPath) {
|
|
|
32158
32246
|
const chosen = (slug ? canvases.find((name) => name === `${slug}.canvas.json`) : void 0) ?? canvases[0];
|
|
32159
32247
|
return chosen ? path20.join(dir, chosen) : null;
|
|
32160
32248
|
}
|
|
32161
|
-
var syncDefinitionCommand =
|
|
32249
|
+
var syncDefinitionCommand = defineCommand103({
|
|
32162
32250
|
meta: {
|
|
32163
32251
|
name: "sync-definition",
|
|
32164
32252
|
description: "Push a creative's current node-graph + input thumbnails to the dashboard without rendering. Runs automatically when you edit a creative's canvas.json or prompt.json."
|
|
@@ -32388,7 +32476,7 @@ async function runVisionPasses(canvas) {
|
|
|
32388
32476
|
return fail3("read_outputs", e instanceof Error ? e.message : String(e));
|
|
32389
32477
|
}
|
|
32390
32478
|
}
|
|
32391
|
-
var scaffoldStaticAdCommand =
|
|
32479
|
+
var scaffoldStaticAdCommand = defineCommand104({
|
|
32392
32480
|
meta: {
|
|
32393
32481
|
name: "scaffold-static-ad",
|
|
32394
32482
|
description: "Turn a source/inspiration image into a runnable static-ad canvas. Runs billed passes \u2014 image_describe (the blueprint, baked to prompt.json as the editable 'prompt'), an AI selection of the image's MAIN identity elements, and a structured global-layout pass (the column/row grid with per-region bounds and text sizes) \u2014 then scaffolds a canvas that wires one [TODO] ingest slot per element (logo/product/subject/badge + brand font) into image_generate. By default it also fans the hero out to the platform's placement ratios (via image_aspect_adapt \u2014 the hero ratio is free, the rest are billed AI recompositions); pass --placements none for a single base ad, or a preset to pick the set. Edit prompt.json and drop the real assets, then `baker canvas run` it."
|
|
@@ -32576,7 +32664,7 @@ var scaffoldStaticAdCommand = defineCommand103({
|
|
|
32576
32664
|
// src/commands/canvas/scaffold-ad.ts
|
|
32577
32665
|
import { copyFile, cp, mkdir as mkdir7, readFile as readFile16, stat as stat4, writeFile as writeFile9 } from "fs/promises";
|
|
32578
32666
|
import path24 from "path";
|
|
32579
|
-
import { defineCommand as
|
|
32667
|
+
import { defineCommand as defineCommand105 } from "citty";
|
|
32580
32668
|
|
|
32581
32669
|
// src/engine/scaffold/ad-spec.ts
|
|
32582
32670
|
import { z as z30 } from "zod";
|
|
@@ -32821,6 +32909,10 @@ var ASKS_FOR_LEGIBLE = /\b(focus on the (number|amount|total|price|figure|text)|
|
|
|
32821
32909
|
function briefWantsLegibleText(show) {
|
|
32822
32910
|
return ASKS_FOR_LEGIBLE.test(show);
|
|
32823
32911
|
}
|
|
32912
|
+
var SELF_INTRODUCTION = /\b([Ss]oy|[Mm]e llamo|[Mm]i nombre es|[Ss]ou|[Jj]e m'appelle|[Jj]e suis|[Mm]i chiamo|[Ss]ono|[Ii]ch bin|[Ii]'m|[Ii] am|[Mm]y name is)\s+[A-ZÁÉÍÓÚÑ]/;
|
|
32913
|
+
function lineIntroducesSpeaker(line) {
|
|
32914
|
+
return SELF_INTRODUCTION.test(line);
|
|
32915
|
+
}
|
|
32824
32916
|
function endCardWanted(spec) {
|
|
32825
32917
|
if (spec.end_card === false) return false;
|
|
32826
32918
|
return Boolean(spec.brand?.name || spec.brand?.logo);
|
|
@@ -32832,6 +32924,7 @@ function endCardCta(spec) {
|
|
|
32832
32924
|
const closing = (spec.beats[spec.beats.length - 1]?.say ?? "").trim().toLowerCase();
|
|
32833
32925
|
return declared.toLowerCase().replace(/[.!?]$/, "") === closing.replace(/[.!?]$/, "") ? null : declared;
|
|
32834
32926
|
}
|
|
32927
|
+
var AD_CAST_ID = "customer";
|
|
32835
32928
|
function adSpecCastElements(spec, avatar) {
|
|
32836
32929
|
const description = (avatar?.subjectDescription ?? spec.cast?.description)?.trim();
|
|
32837
32930
|
if (!description) return [];
|
|
@@ -32842,7 +32935,10 @@ function adSpecCastElements(spec, avatar) {
|
|
|
32842
32935
|
return [
|
|
32843
32936
|
{
|
|
32844
32937
|
type: "person",
|
|
32845
|
-
label:
|
|
32938
|
+
label: AD_CAST_ID,
|
|
32939
|
+
// Same id the dialogue names as speaker: that pairing is what lets the engine see
|
|
32940
|
+
// the presenter as present in a scene and route it to native audio.
|
|
32941
|
+
cast_id: AD_CAST_ID,
|
|
32846
32942
|
description,
|
|
32847
32943
|
scenes,
|
|
32848
32944
|
// An avatar's identity sheet IS the turnaround the engine would otherwise render,
|
|
@@ -32877,6 +32973,39 @@ function staticTranscript(spec) {
|
|
|
32877
32973
|
}
|
|
32878
32974
|
return out;
|
|
32879
32975
|
}
|
|
32976
|
+
function wantsNativeSpeech(spec, closesOnCard) {
|
|
32977
|
+
if (!spec.cast || spec.voiceover === false) return false;
|
|
32978
|
+
const last = spec.beats.length - 1;
|
|
32979
|
+
const speaking = spec.beats.filter((_, i) => !(closesOnCard && i === last));
|
|
32980
|
+
return speaking.length > 0 && speaking.every((beat) => beat.on_camera === true && beat.cast !== false);
|
|
32981
|
+
}
|
|
32982
|
+
function beatDialogue(spec, beat, window2) {
|
|
32983
|
+
if (spec.voiceover === false) return [];
|
|
32984
|
+
return [
|
|
32985
|
+
{
|
|
32986
|
+
line: beat.say,
|
|
32987
|
+
start_s: window2.start,
|
|
32988
|
+
end_s: window2.end,
|
|
32989
|
+
// `on_camera` is the engine's own switch for "this line is narration" — absent, it
|
|
32990
|
+
// guesses from who is in frame, which is how a still photograph once got lip-synced.
|
|
32991
|
+
// Never true on the closing plate: it is a flat colour card with no one in it, and
|
|
32992
|
+
// saying someone is on camera there sent the engine looking for a mouth to lip-sync
|
|
32993
|
+
// on a picture that has no person.
|
|
32994
|
+
on_camera: beat.on_camera === true && !window2.isClosingCard,
|
|
32995
|
+
// Naming the CAST as speaker is the other half of what sends this beat down the
|
|
32996
|
+
// native path. Left unnamed, the speaker defaults to "voiceover" — a narrator, who is
|
|
32997
|
+
// by definition never on camera — so every beat took the dubbed path: a clip generated
|
|
32998
|
+
// with one mouth and a separate ElevenLabs track laid over it. That is the mismatch
|
|
32999
|
+
// behind every "the mouth does not match" in this ad's history.
|
|
33000
|
+
...window2.nativeSpeech && !window2.isClosingCard ? { speaker: AD_CAST_ID } : {},
|
|
33001
|
+
...spec.voice?.description ? { voice_description: spec.voice.description } : {}
|
|
33002
|
+
}
|
|
33003
|
+
];
|
|
33004
|
+
}
|
|
33005
|
+
function voiceoverMode(spec, nativeSpeech) {
|
|
33006
|
+
if (spec.voiceover === false) return "none";
|
|
33007
|
+
return nativeSpeech ? "on_camera" : "voiceover";
|
|
33008
|
+
}
|
|
32880
33009
|
function adSpecToBlueprint(spec) {
|
|
32881
33010
|
const total = spec.beats.length;
|
|
32882
33011
|
const market = marketFor(spec);
|
|
@@ -32884,6 +33013,7 @@ function adSpecToBlueprint(spec) {
|
|
|
32884
33013
|
const currency = market ? CURRENCY_BY_MARKET[market.toLowerCase()] : void 0;
|
|
32885
33014
|
const physics = " Everything obeys real-world physics: paper, card and screens are OPAQUE with nothing showing through from behind, every object is at believable real-world scale next to the people handling it, and every object has its real-world form and construction \u2014 a phone has ONE screen and it is on the front. NO readable text or numbers anywhere in frame \u2014 phone screens, documents and signage stay illegible or out of focus, because any figure the model invents will contradict the script. Hands are kept simple: no close-up of fingers manipulating small parts, no hand gripping the edge of an object, and each person has exactly TWO arms and TWO legs, all attached and all visible or all out of frame. Anyone working does so the way the trade actually does it: nobody stands or kneels on the equipment being installed, nothing is fitted overhanging an edge or floating unsupported, and every part rests on the structure that would really carry it." + (currency ? ` If a currency is unavoidably visible it is ${currency}.` : "");
|
|
32886
33015
|
const closesOnCard = endCardWanted(spec);
|
|
33016
|
+
const nativeSpeech = wantsNativeSpeech(spec, closesOnCard);
|
|
32887
33017
|
let clock = 0;
|
|
32888
33018
|
const scenes = spec.beats.map((beat, i) => {
|
|
32889
33019
|
const isClosingCard = closesOnCard && i === total - 1;
|
|
@@ -32908,18 +33038,12 @@ function adSpecToBlueprint(spec) {
|
|
|
32908
33038
|
// length to what the provider accepts. An ad emitted none of these until now,
|
|
32909
33039
|
// so every one shipped with a music bed and no sound design at all.
|
|
32910
33040
|
...beat.sound?.trim() ? { sfx: [{ sound_effect_prompt: beat.sound.trim(), duration_s: Math.min(duration, 30) }] } : {},
|
|
32911
|
-
dialogue: spec
|
|
32912
|
-
|
|
32913
|
-
|
|
32914
|
-
|
|
32915
|
-
|
|
32916
|
-
|
|
32917
|
-
// saying someone is on camera there told the engine to look for a mouth to
|
|
32918
|
-
// lip-sync on a picture that has no person.
|
|
32919
|
-
on_camera: beat.on_camera === true && !isClosingCard,
|
|
32920
|
-
...spec.voice?.description ? { voice_description: spec.voice.description } : {}
|
|
32921
|
-
}
|
|
32922
|
-
],
|
|
33041
|
+
dialogue: beatDialogue(spec, beat, {
|
|
33042
|
+
start: Math.round(start * 100) / 100,
|
|
33043
|
+
end: Math.round(clock * 100) / 100,
|
|
33044
|
+
isClosingCard,
|
|
33045
|
+
nativeSpeech
|
|
33046
|
+
}),
|
|
32923
33047
|
motion_prompt: motionPrompt(beat, isClosingCard, place, physics),
|
|
32924
33048
|
start_frame_prompt: isClosingCard ? BRAND_PLATE : `${beat.show}${place}${physics}`
|
|
32925
33049
|
};
|
|
@@ -32929,12 +33053,17 @@ function adSpecToBlueprint(spec) {
|
|
|
32929
33053
|
global: {
|
|
32930
33054
|
transcript: spec.beats.map((b) => b.say).join(" "),
|
|
32931
33055
|
voiceover: {
|
|
32932
|
-
|
|
32933
|
-
// engine a mouth is a lip-sync candidate. A music-led ad says `none`, which is
|
|
32934
|
-
// what keeps a voice out of it entirely.
|
|
32935
|
-
mode: spec.voiceover === false ? "none" : "voiceover",
|
|
33056
|
+
mode: voiceoverMode(spec, nativeSpeech),
|
|
32936
33057
|
...spec.voice?.description ? { voice_description: spec.voice.description } : {}
|
|
32937
33058
|
},
|
|
33059
|
+
...spec.cast ? {
|
|
33060
|
+
cast: [
|
|
33061
|
+
{
|
|
33062
|
+
id: AD_CAST_ID,
|
|
33063
|
+
description: (spec.cast.description ?? "the ad's recurring person").trim()
|
|
33064
|
+
}
|
|
33065
|
+
]
|
|
33066
|
+
} : {},
|
|
32938
33067
|
...spec.brand?.name || spec.brand?.logo ? {
|
|
32939
33068
|
branding: {
|
|
32940
33069
|
...spec.brand?.name ? { name: spec.brand.name } : {},
|
|
@@ -33176,7 +33305,7 @@ registerSchema({
|
|
|
33176
33305
|
}
|
|
33177
33306
|
}
|
|
33178
33307
|
});
|
|
33179
|
-
var scaffoldAdCommand =
|
|
33308
|
+
var scaffoldAdCommand = defineCommand105({
|
|
33180
33309
|
meta: {
|
|
33181
33310
|
name: "scaffold-ad",
|
|
33182
33311
|
description: 'Build a captioned vertical ad from a written spec, with no reference video to copy.\n\nA spec is a list of BEATS. One beat = one line the voice says + one shot on screen while it is said. That pairing is what keeps the ad honest: the caption card IS the line, so it can never end mid-sentence, and the picture can never drift from the read.\n\nTwo rules the spec enforces for you, both learned the expensive way:\n \u2022 `say` is ONE clause with its own punctuation. Two sentences in a beat is rejected.\n \u2022 Nobody in shot is speaking unless you set `on_camera` on that beat. A person visibly talking under a voice that is not theirs reads as bad dubbing.\n\nExample spec:\n { "beats": [\n { "say": "Mientras t\xFA sigues pagando la luz a precio de oro,", "show": "Aerial over Spanish rooftops at golden hour." },\n { "say": "Haz clic en el enlace y reserva tu estudio gratuito.", "show": "A couple walking home at sunset." } ] }\n\nWho is in it:\n `cast: { avatar: "marta" }` grounds every beat on that avatar\'s face \u2014 cast one with `baker avatars`.\n Without a cast, each beat invents its own person and the ad reads as a stock-footage collage.\n\nHow it ends: with a `brand`, the last beat closes on a flat brand plate carrying the mark and the CTA.\n\nThen: baker canvas run <the canvas it writes>'
|
|
@@ -33268,6 +33397,20 @@ var scaffoldAdCommand = defineCommand104({
|
|
|
33268
33397
|
...filledPalette ? { palette: filledPalette } : {}
|
|
33269
33398
|
};
|
|
33270
33399
|
}
|
|
33400
|
+
const introducesOffCamera = spec.data.beats.map((beat, i) => ({ i, beat })).filter(({ beat }) => beat.on_camera !== true && lineIntroducesSpeaker(beat.say));
|
|
33401
|
+
if (introducesOffCamera.length > 0) {
|
|
33402
|
+
const first = introducesOffCamera[0];
|
|
33403
|
+
writeJson({
|
|
33404
|
+
ok: false,
|
|
33405
|
+
error: {
|
|
33406
|
+
code: "VALIDATION_ERROR",
|
|
33407
|
+
message: `Beat ${(first?.i ?? 0) + 1} says "${first?.beat.say.trim()}" \u2014 the speaker introducing themselves \u2014 but nobody is on camera saying it. A voice from off screen introducing the person standing in shot reads as a mistake, the same way a moving mouth under someone else's voice does.`,
|
|
33408
|
+
fix: 'Either set `on_camera: true` on that beat so they say it themselves \u2014 which needs the avatar to have their own pinned voice \u2014 or rewrite the line as narration about them rather than by them: "Marta instal\xF3 placas en nueve d\xEDas", not "Hola, soy Marta".'
|
|
33409
|
+
}
|
|
33410
|
+
});
|
|
33411
|
+
process.exit(1);
|
|
33412
|
+
return;
|
|
33413
|
+
}
|
|
33271
33414
|
const speaksOnCamera = spec.data.beats.some((beat) => beat.on_camera === true);
|
|
33272
33415
|
if (avatar && !avatar.voiceId && speaksOnCamera) {
|
|
33273
33416
|
writeJson({
|
|
@@ -33275,7 +33418,7 @@ var scaffoldAdCommand = defineCommand104({
|
|
|
33275
33418
|
error: {
|
|
33276
33419
|
code: "VALIDATION_ERROR",
|
|
33277
33420
|
message: `Avatar \`${handle}\` has no pinned voice, and this ad has them speaking on camera. Their lines would be read by a voice cast from a description \u2014 a mouth moving under somebody else's voice, which is exactly what dubbing looks like.`,
|
|
33278
|
-
fix: `
|
|
33421
|
+
fix: `Pick a voice with \`baker avatars voices --search "<how they should sound>" --gender <g> --language <l>\`, then pin it: \`baker avatars update --handle ${handle} --voice-id <id> --voice-description "<how it should sound>"\`. Or drop \`on_camera\` from every beat so they appear without speaking and the narration carries the read. An avatar is a face AND a voice; casting one without the other is what puts the wrong voice in their mouth.`
|
|
33279
33422
|
}
|
|
33280
33423
|
});
|
|
33281
33424
|
process.exit(1);
|
|
@@ -33442,7 +33585,7 @@ var scaffoldAdCommand = defineCommand104({
|
|
|
33442
33585
|
import { access as access2, cp as cp2, mkdir as mkdir8, readFile as readFile19, rm as rm7, writeFile as writeFile10 } from "fs/promises";
|
|
33443
33586
|
import { tmpdir as tmpdir3 } from "os";
|
|
33444
33587
|
import path26 from "path";
|
|
33445
|
-
import { defineCommand as
|
|
33588
|
+
import { defineCommand as defineCommand106 } from "citty";
|
|
33446
33589
|
|
|
33447
33590
|
// src/engine/scaffold/lib/model-router.ts
|
|
33448
33591
|
var SEEDANCE = "bytedance/seedance-2.0";
|
|
@@ -33887,7 +34030,7 @@ async function runAnalysisPasses(deconstructCanvas, selectModel) {
|
|
|
33887
34030
|
return fail4("deconstruct", e instanceof Error ? e.message : String(e));
|
|
33888
34031
|
}
|
|
33889
34032
|
}
|
|
33890
|
-
var scaffoldVideoCommand =
|
|
34033
|
+
var scaffoldVideoCommand = defineCommand106({
|
|
33891
34034
|
meta: {
|
|
33892
34035
|
name: "scaffold-video",
|
|
33893
34036
|
description: "Turn a reference video into a runnable reproduction canvas in one command. Runs billed passes \u2014 video_deconstruct (the full scene-by-scene blueprint + transcript, baked to a split, editable blueprint: a global prompt.json plus one small scenes/sNN.json per scene) and an AI selection of the video's RECURRING identity elements (person/animal/product/logo) \u2014 then scaffolds a pipeline where every scene boundary is a static-ad-grade frame (the blueprint as target_blueprint, a reference legend, the real frame as anchor) and each recurring element gets ONE shared [TODO] ingest slot wired into every frame it appears in. The clips feed Seedance an ultra-detailed motion brief (action, camera, dialogue, transcript). Edit a scene's scenes/sNN.json (or prompt.json for global cast/palette/brand), drop the real source images, then `baker canvas run`."
|
|
@@ -34197,7 +34340,7 @@ var scaffoldVideoCommand = defineCommand105({
|
|
|
34197
34340
|
// src/commands/canvas/set-prompt.ts
|
|
34198
34341
|
import { readFile as readFile20, writeFile as writeFile11 } from "fs/promises";
|
|
34199
34342
|
import path27 from "path";
|
|
34200
|
-
import { defineCommand as
|
|
34343
|
+
import { defineCommand as defineCommand107 } from "citty";
|
|
34201
34344
|
function setNodePrompt(canvas, nodeId, text2) {
|
|
34202
34345
|
const nodes = canvas?.nodes;
|
|
34203
34346
|
if (!Array.isArray(nodes)) throw new Error("canvas has no nodes array");
|
|
@@ -34212,7 +34355,7 @@ function setNodePrompt(canvas, nodeId, text2) {
|
|
|
34212
34355
|
newNodes[idx] = newNode;
|
|
34213
34356
|
return { ...canvas, nodes: newNodes };
|
|
34214
34357
|
}
|
|
34215
|
-
var setPromptCommand =
|
|
34358
|
+
var setPromptCommand = defineCommand107({
|
|
34216
34359
|
meta: {
|
|
34217
34360
|
name: "set-prompt",
|
|
34218
34361
|
description: "Safely set a node's params.prompt (a frame description, motion prompt, etc.) without hand-editing the JSON. Prefer --text-file for multi-line/accented copy \u2014 it preserves UTF-8 exactly, unlike shell-quoted jq."
|
|
@@ -34272,8 +34415,8 @@ var setPromptCommand = defineCommand106({
|
|
|
34272
34415
|
// src/commands/canvas/validate.ts
|
|
34273
34416
|
import { readFile as readFile21 } from "fs/promises";
|
|
34274
34417
|
import path28 from "path";
|
|
34275
|
-
import { defineCommand as
|
|
34276
|
-
var validateCommand =
|
|
34418
|
+
import { defineCommand as defineCommand108 } from "citty";
|
|
34419
|
+
var validateCommand = defineCommand108({
|
|
34277
34420
|
meta: {
|
|
34278
34421
|
name: "validate",
|
|
34279
34422
|
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)."
|
|
@@ -34346,7 +34489,7 @@ var validateCommand = defineCommand107({
|
|
|
34346
34489
|
});
|
|
34347
34490
|
|
|
34348
34491
|
// src/commands/canvas/index.ts
|
|
34349
|
-
var canvasCommand =
|
|
34492
|
+
var canvasCommand = defineCommand109({
|
|
34350
34493
|
meta: {
|
|
34351
34494
|
name: "canvas",
|
|
34352
34495
|
description: `Run Baker creative canvas JSON files locally. Local nodes execute in-process; remote nodes POST to the Convex backend gateway.
|
|
@@ -34382,7 +34525,7 @@ Full guide: __tooling__/docs/tools/baker/canvas.md`
|
|
|
34382
34525
|
});
|
|
34383
34526
|
|
|
34384
34527
|
// src/commands/capabilities/index.ts
|
|
34385
|
-
import { defineCommand as
|
|
34528
|
+
import { defineCommand as defineCommand110 } from "citty";
|
|
34386
34529
|
registerSchema({
|
|
34387
34530
|
command: "capabilities",
|
|
34388
34531
|
description: "Start here, before promising the user anything on an ad platform, in Analytics, or in Tag Manager. Answers three questions in one call: what is connected and with what access, what a write on each surface actually does when it lands, and what CANNOT be done here and why. Run it with no arguments for every surface; name one surface to also get the exact fields every change on it accepts.",
|
|
@@ -34425,7 +34568,7 @@ function capabilityHints(surfaces) {
|
|
|
34425
34568
|
}
|
|
34426
34569
|
return hints;
|
|
34427
34570
|
}
|
|
34428
|
-
var runCapabilities =
|
|
34571
|
+
var runCapabilities = defineCommand110({
|
|
34429
34572
|
meta: {
|
|
34430
34573
|
name: "capabilities",
|
|
34431
34574
|
description: `What Baker can and cannot do for this company, before any work starts.
|
|
@@ -34481,7 +34624,7 @@ Full guide: __tooling__/docs/tools/baker/capabilities.md`
|
|
|
34481
34624
|
var capabilitiesCommand = runCapabilities;
|
|
34482
34625
|
|
|
34483
34626
|
// src/commands/chats/index.ts
|
|
34484
|
-
import { defineCommand as
|
|
34627
|
+
import { defineCommand as defineCommand111 } from "citty";
|
|
34485
34628
|
var STATUS_GROUPS = ["active", "archived", "all"];
|
|
34486
34629
|
var REPO_SURFACES = ["knowledge", "company", "brand", "landings", "flows", "creatives"];
|
|
34487
34630
|
function parseBoundedInt(raw, name, min, max) {
|
|
@@ -34503,7 +34646,7 @@ registerSchema({
|
|
|
34503
34646
|
full: { type: "boolean", description: "Include each Session's full change list", required: false, default: false }
|
|
34504
34647
|
}
|
|
34505
34648
|
});
|
|
34506
|
-
var listCommand11 =
|
|
34649
|
+
var listCommand11 = defineCommand111({
|
|
34507
34650
|
meta: { name: "list", description: "List other Sessions on this account, newest first." },
|
|
34508
34651
|
args: {
|
|
34509
34652
|
status: { type: "string", description: "Filter: active|archived|all (default: all)", required: false },
|
|
@@ -34558,7 +34701,7 @@ registerSchema({
|
|
|
34558
34701
|
}
|
|
34559
34702
|
}
|
|
34560
34703
|
});
|
|
34561
|
-
var viewCommand =
|
|
34704
|
+
var viewCommand = defineCommand111({
|
|
34562
34705
|
meta: {
|
|
34563
34706
|
name: "view",
|
|
34564
34707
|
description: "Inspect one Session's full effects \u2014 git content + actions/tags/ads, kickoff, commits."
|
|
@@ -34602,7 +34745,7 @@ registerSchema({
|
|
|
34602
34745
|
}
|
|
34603
34746
|
}
|
|
34604
34747
|
});
|
|
34605
|
-
var transcriptCommand =
|
|
34748
|
+
var transcriptCommand = defineCommand111({
|
|
34606
34749
|
meta: { name: "transcript", description: "Read another Session's conversation." },
|
|
34607
34750
|
args: {
|
|
34608
34751
|
id: { type: "positional", description: "The Session id", required: true },
|
|
@@ -34654,7 +34797,7 @@ registerSchema({
|
|
|
34654
34797
|
}
|
|
34655
34798
|
}
|
|
34656
34799
|
});
|
|
34657
|
-
var diffCommand =
|
|
34800
|
+
var diffCommand = defineCommand111({
|
|
34658
34801
|
meta: { name: "diff", description: "See a published Session's real file-level changes." },
|
|
34659
34802
|
args: {
|
|
34660
34803
|
id: { type: "positional", description: "The Session id", required: true },
|
|
@@ -34698,7 +34841,7 @@ var diffCommand = defineCommand110({
|
|
|
34698
34841
|
}
|
|
34699
34842
|
}
|
|
34700
34843
|
});
|
|
34701
|
-
var chatsCommand =
|
|
34844
|
+
var chatsCommand = defineCommand111({
|
|
34702
34845
|
meta: {
|
|
34703
34846
|
name: "chats",
|
|
34704
34847
|
description: `Inspect other Sessions on this account (read-only): list them, view what they produced, read their conversation, and see their real file changes \u2014 so you can reuse past work for a new goal.
|
|
@@ -34713,10 +34856,10 @@ Full guide: __tooling__/docs/tools/baker/chats.md`
|
|
|
34713
34856
|
});
|
|
34714
34857
|
|
|
34715
34858
|
// src/commands/creatives/index.ts
|
|
34716
|
-
import { defineCommand as
|
|
34859
|
+
import { defineCommand as defineCommand113 } from "citty";
|
|
34717
34860
|
|
|
34718
34861
|
// src/commands/creatives/publish.ts
|
|
34719
|
-
import { defineCommand as
|
|
34862
|
+
import { defineCommand as defineCommand112 } from "citty";
|
|
34720
34863
|
|
|
34721
34864
|
// src/commands/images/api.ts
|
|
34722
34865
|
import { readFile as readFile22 } from "fs/promises";
|
|
@@ -34863,7 +35006,7 @@ async function publishCreative(args, deps = defaultImageApiDeps) {
|
|
|
34863
35006
|
chatId: chatIdFromEnv2()
|
|
34864
35007
|
});
|
|
34865
35008
|
}
|
|
34866
|
-
var publishCommand =
|
|
35009
|
+
var publishCommand = defineCommand112({
|
|
34867
35010
|
meta: {
|
|
34868
35011
|
name: "publish",
|
|
34869
35012
|
description: "Publish a final static creative image to Baker Creatives and print the creative reference JSON."
|
|
@@ -34921,7 +35064,7 @@ var publishCommand = defineCommand111({
|
|
|
34921
35064
|
});
|
|
34922
35065
|
|
|
34923
35066
|
// src/commands/creatives/index.ts
|
|
34924
|
-
var creativesCommand3 =
|
|
35067
|
+
var creativesCommand3 = defineCommand113({
|
|
34925
35068
|
meta: {
|
|
34926
35069
|
name: "creatives",
|
|
34927
35070
|
description: `Publish static ad creatives as first-class Baker outputs.
|
|
@@ -34938,11 +35081,11 @@ Full guide: __tooling__/docs/tools/baker/creatives.md`
|
|
|
34938
35081
|
});
|
|
34939
35082
|
|
|
34940
35083
|
// src/commands/flows/index.ts
|
|
34941
|
-
import { defineCommand as
|
|
35084
|
+
import { defineCommand as defineCommand118 } from "citty";
|
|
34942
35085
|
|
|
34943
35086
|
// src/commands/flows/add.ts
|
|
34944
35087
|
import { randomUUID } from "crypto";
|
|
34945
|
-
import { defineCommand as
|
|
35088
|
+
import { defineCommand as defineCommand114 } from "citty";
|
|
34946
35089
|
|
|
34947
35090
|
// src/commands/flows/shared.ts
|
|
34948
35091
|
import { existsSync as existsSync5, readdirSync as readdirSync2, readFileSync as readFileSync9, writeFileSync as writeFileSync3 } from "fs";
|
|
@@ -35152,7 +35295,7 @@ registerSchema({
|
|
|
35152
35295
|
parent: { type: "string", description: "Parent node id. Omit to append to the root's children.", required: false }
|
|
35153
35296
|
}
|
|
35154
35297
|
});
|
|
35155
|
-
var addNodeCommand =
|
|
35298
|
+
var addNodeCommand = defineCommand114({
|
|
35156
35299
|
meta: {
|
|
35157
35300
|
name: "add-node",
|
|
35158
35301
|
description: 'Add a step to a form, with the skeleton its type requires. Example: baker flows add-node contact --type customForm --name "Contact Info"'
|
|
@@ -35248,7 +35391,7 @@ registerSchema({
|
|
|
35248
35391
|
}
|
|
35249
35392
|
}
|
|
35250
35393
|
});
|
|
35251
|
-
var addSideEffectCommand =
|
|
35394
|
+
var addSideEffectCommand = defineCommand114({
|
|
35252
35395
|
meta: {
|
|
35253
35396
|
name: "add-side-effect",
|
|
35254
35397
|
description: "Add a side effect to a step, with the skeleton its type requires. Example: baker flows add-side-effect contact --node <id> --type googleSpreadsheet"
|
|
@@ -35330,7 +35473,7 @@ var addSideEffectCommand = defineCommand113({
|
|
|
35330
35473
|
|
|
35331
35474
|
// src/commands/flows/map.ts
|
|
35332
35475
|
import { readFileSync as readFileSync11 } from "fs";
|
|
35333
|
-
import { defineCommand as
|
|
35476
|
+
import { defineCommand as defineCommand115 } from "citty";
|
|
35334
35477
|
|
|
35335
35478
|
// src/commands/flows/value-expression.ts
|
|
35336
35479
|
import { existsSync as existsSync6, readFileSync as readFileSync10 } from "fs";
|
|
@@ -36103,7 +36246,7 @@ async function mapOptions(args, fromFile, into) {
|
|
|
36103
36246
|
destinationFields: hubspotForm ? await hubspotFieldCatalog(hubspotForm) : void 0
|
|
36104
36247
|
};
|
|
36105
36248
|
}
|
|
36106
|
-
var mapCommand2 =
|
|
36249
|
+
var mapCommand2 = defineCommand115({
|
|
36107
36250
|
meta: {
|
|
36108
36251
|
name: "map",
|
|
36109
36252
|
description: "Map form fields onto any value a side effect sends \u2014 never hand-write a mapping. Start here: baker flows map contact --from map.json --write"
|
|
@@ -36201,7 +36344,7 @@ var mapCommand2 = defineCommand114({
|
|
|
36201
36344
|
});
|
|
36202
36345
|
|
|
36203
36346
|
// src/commands/flows/normalize.ts
|
|
36204
|
-
import { defineCommand as
|
|
36347
|
+
import { defineCommand as defineCommand116 } from "citty";
|
|
36205
36348
|
var OPTIONAL_STRINGS = ["oauthProviderId"];
|
|
36206
36349
|
var ARRAY_FIELDS = [
|
|
36207
36350
|
"fieldMapping",
|
|
@@ -36270,7 +36413,7 @@ registerSchema({
|
|
|
36270
36413
|
}
|
|
36271
36414
|
}
|
|
36272
36415
|
});
|
|
36273
|
-
var normalizeCommand =
|
|
36416
|
+
var normalizeCommand = defineCommand116({
|
|
36274
36417
|
meta: {
|
|
36275
36418
|
name: "normalize",
|
|
36276
36419
|
description: "Repair the shapes a form file is allowed to get slightly wrong. Example: baker flows normalize contact --write"
|
|
@@ -36301,7 +36444,7 @@ var normalizeCommand = defineCommand115({
|
|
|
36301
36444
|
});
|
|
36302
36445
|
|
|
36303
36446
|
// src/commands/flows/schema.ts
|
|
36304
|
-
import { defineCommand as
|
|
36447
|
+
import { defineCommand as defineCommand117 } from "citty";
|
|
36305
36448
|
registerSchema({
|
|
36306
36449
|
command: "flows.schema",
|
|
36307
36450
|
description: "The shape of one node or side-effect type: a pasteable skeleton, who fills each part, and the reference file with the craft. Start here before authoring anything in a form's _data.json.",
|
|
@@ -36326,7 +36469,7 @@ function triggerHints(triggers) {
|
|
|
36326
36469
|
`A side effect on this step carries \`triggerId: "${triggers.completion}"\`, and \`baker flows add-side-effect\` writes it for you. The trigger belongs to the STEP, not to the side-effect type: one that does not match is valid, ships, and never runs.` + (others.length > 0 ? ` Other moments this step raises: ${others.join(", ")}.` : "")
|
|
36327
36470
|
];
|
|
36328
36471
|
}
|
|
36329
|
-
var schemaCommand =
|
|
36472
|
+
var schemaCommand = defineCommand117({
|
|
36330
36473
|
meta: {
|
|
36331
36474
|
name: "schema",
|
|
36332
36475
|
description: "Show a node or side-effect type's shape. Start here: baker flows schema node customForm \xB7 baker flows schema side-effect googleSpreadsheet \xB7 baker flows schema (lists both)"
|
|
@@ -36460,7 +36603,7 @@ function displayName(slug) {
|
|
|
36460
36603
|
const name = tree.displayName;
|
|
36461
36604
|
return typeof name === "string" && name.trim() ? name.trim() : slug;
|
|
36462
36605
|
}
|
|
36463
|
-
var listCommand12 =
|
|
36606
|
+
var listCommand12 = defineCommand118({
|
|
36464
36607
|
meta: {
|
|
36465
36608
|
name: "list",
|
|
36466
36609
|
description: "List Forms in this workspace with the count of confidential fields still needing setup. Example: baker flows list"
|
|
@@ -36481,7 +36624,7 @@ var listCommand12 = defineCommand117({
|
|
|
36481
36624
|
});
|
|
36482
36625
|
}
|
|
36483
36626
|
});
|
|
36484
|
-
var showCommand3 =
|
|
36627
|
+
var showCommand3 = defineCommand118({
|
|
36485
36628
|
meta: {
|
|
36486
36629
|
name: "show",
|
|
36487
36630
|
description: "Show a Form's confidential fields and their configuration status (never secret values). Example: baker flows show contact"
|
|
@@ -36509,7 +36652,7 @@ var showCommand3 = defineCommand117({
|
|
|
36509
36652
|
});
|
|
36510
36653
|
}
|
|
36511
36654
|
});
|
|
36512
|
-
var flowsCommand =
|
|
36655
|
+
var flowsCommand = defineCommand118({
|
|
36513
36656
|
meta: {
|
|
36514
36657
|
name: "flows",
|
|
36515
36658
|
description: `Read and shape this workspace's Forms (flows).
|
|
@@ -36543,10 +36686,10 @@ Full guide: __tooling__/docs/tools/baker/flows.md`
|
|
|
36543
36686
|
});
|
|
36544
36687
|
|
|
36545
36688
|
// src/commands/ga4/index.ts
|
|
36546
|
-
import { defineCommand as
|
|
36689
|
+
import { defineCommand as defineCommand125 } from "citty";
|
|
36547
36690
|
|
|
36548
36691
|
// src/commands/ga4/audit.ts
|
|
36549
|
-
import { defineCommand as
|
|
36692
|
+
import { defineCommand as defineCommand119 } from "citty";
|
|
36550
36693
|
|
|
36551
36694
|
// src/commands/ga4/resolve.ts
|
|
36552
36695
|
async function fetchProperties(useCache = true) {
|
|
@@ -36612,7 +36755,7 @@ registerSchema({
|
|
|
36612
36755
|
"no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
|
|
36613
36756
|
}
|
|
36614
36757
|
});
|
|
36615
|
-
var auditCommand2 =
|
|
36758
|
+
var auditCommand2 = defineCommand119({
|
|
36616
36759
|
meta: {
|
|
36617
36760
|
name: "audit",
|
|
36618
36761
|
description: `Run all GA4 admin health checks. Returns property config with playbook warnings.
|
|
@@ -36667,7 +36810,7 @@ Examples:
|
|
|
36667
36810
|
});
|
|
36668
36811
|
|
|
36669
36812
|
// src/commands/ga4/config.ts
|
|
36670
|
-
import { defineCommand as
|
|
36813
|
+
import { defineCommand as defineCommand120 } from "citty";
|
|
36671
36814
|
|
|
36672
36815
|
// src/commands/ga4/shared.ts
|
|
36673
36816
|
import { readFileSync as readFileSync12 } from "fs";
|
|
@@ -36863,7 +37006,7 @@ function configHints(config) {
|
|
|
36863
37006
|
}
|
|
36864
37007
|
return hints;
|
|
36865
37008
|
}
|
|
36866
|
-
var configCommand =
|
|
37009
|
+
var configCommand = defineCommand120({
|
|
36867
37010
|
meta: {
|
|
36868
37011
|
name: "config",
|
|
36869
37012
|
description: `Read how the property is configured to measure \u2014 key events, custom definitions, custom events, retention
|
|
@@ -36895,7 +37038,7 @@ Examples:
|
|
|
36895
37038
|
});
|
|
36896
37039
|
|
|
36897
37040
|
// src/commands/ga4/draft.ts
|
|
36898
|
-
import { defineCommand as
|
|
37041
|
+
import { defineCommand as defineCommand121 } from "citty";
|
|
36899
37042
|
registerSchema({
|
|
36900
37043
|
command: "ga4.draft",
|
|
36901
37044
|
description: "Review and undo the Google Analytics changes staged on this chat. Use `list` to see everything staged, `show` to inspect one change in full before the chat completes, `amend` to correct one in place, and `remove`/`clear` to drop them. `list` and `show` take --chat <id> to read an earlier chat's changes instead.",
|
|
@@ -36904,13 +37047,13 @@ registerSchema({
|
|
|
36904
37047
|
chat: { type: "string", description: CHAT_READ_ARG.description, required: false }
|
|
36905
37048
|
}
|
|
36906
37049
|
});
|
|
36907
|
-
var draftCommand3 =
|
|
37050
|
+
var draftCommand3 = defineCommand121({
|
|
36908
37051
|
meta: {
|
|
36909
37052
|
name: "draft",
|
|
36910
37053
|
description: "List, show, amend, remove or clear the Google Analytics changes staged on this chat. `list` and `show` take --chat <id> to read an earlier chat's changes instead."
|
|
36911
37054
|
},
|
|
36912
37055
|
subCommands: {
|
|
36913
|
-
list:
|
|
37056
|
+
list: defineCommand121({
|
|
36914
37057
|
meta: { name: "list", description: "Review everything staged on this chat (--json for the raw envelope)" },
|
|
36915
37058
|
args: {
|
|
36916
37059
|
json: { type: "boolean", description: "Print the raw JSON envelope", required: false },
|
|
@@ -36920,7 +37063,7 @@ var draftCommand3 = defineCommand120({
|
|
|
36920
37063
|
await draftList(args.json === true, args.chat);
|
|
36921
37064
|
}
|
|
36922
37065
|
}),
|
|
36923
|
-
show:
|
|
37066
|
+
show: defineCommand121({
|
|
36924
37067
|
meta: {
|
|
36925
37068
|
name: "show",
|
|
36926
37069
|
description: "Print the full staged payload for one change, alongside how the property looks today \u2014 the receipt to verify it before the chat completes (never truncated)."
|
|
@@ -36937,7 +37080,7 @@ var draftCommand3 = defineCommand120({
|
|
|
36937
37080
|
);
|
|
36938
37081
|
}
|
|
36939
37082
|
}),
|
|
36940
|
-
amend:
|
|
37083
|
+
amend: defineCommand121({
|
|
36941
37084
|
meta: {
|
|
36942
37085
|
name: "amend",
|
|
36943
37086
|
description: "Update a staged change in place \u2014 merges a JSON patch into its payload (objects deep-merge, null deletes a key, arrays/scalars replace) and re-runs every check. Use this instead of remove + re-create."
|
|
@@ -36954,7 +37097,7 @@ var draftCommand3 = defineCommand120({
|
|
|
36954
37097
|
});
|
|
36955
37098
|
}
|
|
36956
37099
|
}),
|
|
36957
|
-
remove:
|
|
37100
|
+
remove: defineCommand121({
|
|
36958
37101
|
meta: { name: "remove", description: "Remove one staged change" },
|
|
36959
37102
|
args: { ref: { type: "positional", description: "Staged ref or target id", required: false } },
|
|
36960
37103
|
run: async ({ args }) => {
|
|
@@ -36963,7 +37106,7 @@ var draftCommand3 = defineCommand120({
|
|
|
36963
37106
|
});
|
|
36964
37107
|
}
|
|
36965
37108
|
}),
|
|
36966
|
-
clear:
|
|
37109
|
+
clear: defineCommand121({
|
|
36967
37110
|
meta: { name: "clear", description: "Discard all Google Analytics changes staged on this chat" },
|
|
36968
37111
|
run: async () => {
|
|
36969
37112
|
await draftAction2("/api/ga4/draft/clear", {});
|
|
@@ -36973,7 +37116,7 @@ var draftCommand3 = defineCommand120({
|
|
|
36973
37116
|
});
|
|
36974
37117
|
|
|
36975
37118
|
// src/commands/ga4/properties.ts
|
|
36976
|
-
import { defineCommand as
|
|
37119
|
+
import { defineCommand as defineCommand122 } from "citty";
|
|
36977
37120
|
registerSchema({
|
|
36978
37121
|
command: "ga4.properties",
|
|
36979
37122
|
description: "List the GA4 properties this company connected \u2014 there can be several, and every one of them is yours to query. Returns the property IDs the query and audit commands take. Run this first to find property IDs.",
|
|
@@ -36989,7 +37132,7 @@ function propertyHints(properties) {
|
|
|
36989
37132
|
resources: properties.map((property) => ({ id: property.externalId, label: property.name }))
|
|
36990
37133
|
});
|
|
36991
37134
|
}
|
|
36992
|
-
var propertiesCommand =
|
|
37135
|
+
var propertiesCommand = defineCommand122({
|
|
36993
37136
|
meta: {
|
|
36994
37137
|
name: "properties",
|
|
36995
37138
|
description: `List accessible GA4 properties.
|
|
@@ -37039,7 +37182,7 @@ Examples:
|
|
|
37039
37182
|
// src/commands/ga4/query.ts
|
|
37040
37183
|
import { appendFileSync as appendFileSync2, existsSync as existsSync7, readFileSync as readFileSync13, writeFileSync as writeFileSync4 } from "fs";
|
|
37041
37184
|
import { resolve as resolve2 } from "path";
|
|
37042
|
-
import { defineCommand as
|
|
37185
|
+
import { defineCommand as defineCommand123 } from "citty";
|
|
37043
37186
|
|
|
37044
37187
|
// src/commands/ga4/presets.ts
|
|
37045
37188
|
var GA4_PRESETS = [
|
|
@@ -37174,7 +37317,7 @@ function handleError3(err) {
|
|
|
37174
37317
|
});
|
|
37175
37318
|
process.exit(1);
|
|
37176
37319
|
}
|
|
37177
|
-
var queryCommand2 =
|
|
37320
|
+
var queryCommand2 = defineCommand123({
|
|
37178
37321
|
meta: {
|
|
37179
37322
|
name: "query",
|
|
37180
37323
|
description: `Run GA4 Data API reports. Preset-first with free-form escape hatch.
|
|
@@ -37245,7 +37388,7 @@ Free-form (escape hatch):
|
|
|
37245
37388
|
});
|
|
37246
37389
|
|
|
37247
37390
|
// src/commands/ga4/write-commands.ts
|
|
37248
|
-
import { defineCommand as
|
|
37391
|
+
import { defineCommand as defineCommand124 } from "citty";
|
|
37249
37392
|
var PROPERTY_ARG_DESCRIPTION = "GA4 property id (optional only when one property is connected \u2014 run `baker ga4 properties`)";
|
|
37250
37393
|
var propertyArg = { type: "string", description: PROPERTY_ARG_DESCRIPTION, required: false };
|
|
37251
37394
|
function createJsonDescription(noun) {
|
|
@@ -37263,7 +37406,7 @@ registerSchema({
|
|
|
37263
37406
|
"property-id": { type: "string", description: PROPERTY_ARG_DESCRIPTION, required: false }
|
|
37264
37407
|
}
|
|
37265
37408
|
});
|
|
37266
|
-
var keyEventCommand =
|
|
37409
|
+
var keyEventCommand = defineCommand124({
|
|
37267
37410
|
meta: {
|
|
37268
37411
|
name: "key-event",
|
|
37269
37412
|
description: `Stage key-event (conversion) changes
|
|
@@ -37276,7 +37419,7 @@ Examples:
|
|
|
37276
37419
|
baker ga4 key-event delete 4185`
|
|
37277
37420
|
},
|
|
37278
37421
|
subCommands: {
|
|
37279
|
-
create:
|
|
37422
|
+
create: defineCommand124({
|
|
37280
37423
|
meta: {
|
|
37281
37424
|
name: "create",
|
|
37282
37425
|
description: "Stage a new key event. Needs eventName and countingMethod (ONCE_PER_EVENT or ONCE_PER_SESSION); defaultValue sets a monetary value when the event does not send one."
|
|
@@ -37297,7 +37440,7 @@ Examples:
|
|
|
37297
37440
|
);
|
|
37298
37441
|
}
|
|
37299
37442
|
}),
|
|
37300
|
-
update:
|
|
37443
|
+
update: defineCommand124({
|
|
37301
37444
|
meta: {
|
|
37302
37445
|
name: "update",
|
|
37303
37446
|
description: "Stage a change to an existing key event (pass its id). Only countingMethod and defaultValue can change \u2014 Google will not rename a key event."
|
|
@@ -37317,7 +37460,7 @@ Examples:
|
|
|
37317
37460
|
});
|
|
37318
37461
|
}
|
|
37319
37462
|
}),
|
|
37320
|
-
delete:
|
|
37463
|
+
delete: defineCommand124({
|
|
37321
37464
|
meta: {
|
|
37322
37465
|
name: "delete",
|
|
37323
37466
|
description: "Stage removing a key event, so the event stops counting as a conversion. The event itself keeps being collected. Irreversible once the chat completes \u2014 confirm with the user first."
|
|
@@ -37365,7 +37508,7 @@ for (const { kind, noun, createHint } of DEFINITIONS) {
|
|
|
37365
37508
|
}
|
|
37366
37509
|
function definitionCommand(definition) {
|
|
37367
37510
|
const { command, kind, noun, example } = definition;
|
|
37368
|
-
return
|
|
37511
|
+
return defineCommand124({
|
|
37369
37512
|
meta: {
|
|
37370
37513
|
name: command,
|
|
37371
37514
|
description: `Stage ${noun} changes
|
|
@@ -37377,7 +37520,7 @@ Examples:
|
|
|
37377
37520
|
baker ga4 ${command} archive 12`
|
|
37378
37521
|
},
|
|
37379
37522
|
subCommands: {
|
|
37380
|
-
create:
|
|
37523
|
+
create: defineCommand124({
|
|
37381
37524
|
meta: { name: "create", description: `Stage a new ${noun} (or a JSON array of them, staged together)` },
|
|
37382
37525
|
args: {
|
|
37383
37526
|
json: { type: "string", description: createJsonDescription(noun), required: false },
|
|
@@ -37395,7 +37538,7 @@ Examples:
|
|
|
37395
37538
|
);
|
|
37396
37539
|
}
|
|
37397
37540
|
}),
|
|
37398
|
-
update:
|
|
37541
|
+
update: defineCommand124({
|
|
37399
37542
|
meta: {
|
|
37400
37543
|
name: "update",
|
|
37401
37544
|
description: `Stage a change to an existing ${noun} (pass its id). The parameter name and scope cannot change \u2014 archive and recreate for that.`
|
|
@@ -37415,7 +37558,7 @@ Examples:
|
|
|
37415
37558
|
});
|
|
37416
37559
|
}
|
|
37417
37560
|
}),
|
|
37418
|
-
archive:
|
|
37561
|
+
archive: defineCommand124({
|
|
37419
37562
|
meta: {
|
|
37420
37563
|
name: "archive",
|
|
37421
37564
|
description: `Stage archiving a ${noun} (pass its id). It stops collecting and leaves reporting; past data stays. Irreversible once the chat completes \u2014 confirm with the user first.`
|
|
@@ -37460,7 +37603,7 @@ var dataStreamArg = {
|
|
|
37460
37603
|
function withStream(args) {
|
|
37461
37604
|
return typeof args["data-stream"] === "string" ? { dataStream: args["data-stream"] } : {};
|
|
37462
37605
|
}
|
|
37463
|
-
var customEventCommand =
|
|
37606
|
+
var customEventCommand = defineCommand124({
|
|
37464
37607
|
meta: {
|
|
37465
37608
|
name: "custom-event",
|
|
37466
37609
|
description: `Stage custom events \u2014 new events built from events the site already sends
|
|
@@ -37471,7 +37614,7 @@ Examples:
|
|
|
37471
37614
|
baker ga4 custom-event delete 7`
|
|
37472
37615
|
},
|
|
37473
37616
|
subCommands: {
|
|
37474
|
-
create:
|
|
37617
|
+
create: defineCommand124({
|
|
37475
37618
|
meta: {
|
|
37476
37619
|
name: "create",
|
|
37477
37620
|
description: "Stage a new custom event. Conditions match the source event: use field `event_name` to match the event itself, or any parameter name to match its value."
|
|
@@ -37494,7 +37637,7 @@ Examples:
|
|
|
37494
37637
|
);
|
|
37495
37638
|
}
|
|
37496
37639
|
}),
|
|
37497
|
-
update:
|
|
37640
|
+
update: defineCommand124({
|
|
37498
37641
|
meta: { name: "update", description: "Stage a change to an existing custom event (pass its id)" },
|
|
37499
37642
|
args: {
|
|
37500
37643
|
id: { type: "positional", description: "Custom event rule id", required: false },
|
|
@@ -37513,7 +37656,7 @@ Examples:
|
|
|
37513
37656
|
});
|
|
37514
37657
|
}
|
|
37515
37658
|
}),
|
|
37516
|
-
delete:
|
|
37659
|
+
delete: defineCommand124({
|
|
37517
37660
|
meta: {
|
|
37518
37661
|
name: "delete",
|
|
37519
37662
|
description: "Stage removing a custom event (pass its id). The event stops being created from then on; data already collected under it stays. Confirm with the user first."
|
|
@@ -37568,7 +37711,7 @@ function booleanArg(input, flag) {
|
|
|
37568
37711
|
if (input === "false") return false;
|
|
37569
37712
|
return failValidation3(`--${flag} must be true or false`);
|
|
37570
37713
|
}
|
|
37571
|
-
var dataRetentionCommand =
|
|
37714
|
+
var dataRetentionCommand = defineCommand124({
|
|
37572
37715
|
meta: {
|
|
37573
37716
|
name: "data-retention",
|
|
37574
37717
|
description: `Stage a change to how long Google Analytics keeps data
|
|
@@ -37578,7 +37721,7 @@ Examples:
|
|
|
37578
37721
|
baker ga4 data-retention set --event-data 14 --user-data 14 --reset-on-activity true`
|
|
37579
37722
|
},
|
|
37580
37723
|
subCommands: {
|
|
37581
|
-
set:
|
|
37724
|
+
set: defineCommand124({
|
|
37582
37725
|
meta: { name: "set", description: "Stage the retention window (months)" },
|
|
37583
37726
|
args: {
|
|
37584
37727
|
"event-data": { type: "string", description: "2, 14, 26, 38 or 50", required: false },
|
|
@@ -37614,7 +37757,7 @@ registerSchema({
|
|
|
37614
37757
|
"property-id": { type: "string", description: PROPERTY_ARG_DESCRIPTION, required: false }
|
|
37615
37758
|
}
|
|
37616
37759
|
});
|
|
37617
|
-
var audienceCommand =
|
|
37760
|
+
var audienceCommand = defineCommand124({
|
|
37618
37761
|
meta: {
|
|
37619
37762
|
name: "audience",
|
|
37620
37763
|
description: `Stage audience changes (saved groups of users, for retargeting and analysis)
|
|
@@ -37646,7 +37789,7 @@ Examples:
|
|
|
37646
37789
|
baker ga4 audience archive 8813`
|
|
37647
37790
|
},
|
|
37648
37791
|
subCommands: {
|
|
37649
|
-
create:
|
|
37792
|
+
create: defineCommand124({
|
|
37650
37793
|
meta: { name: "create", description: createJsonDescription("audience") },
|
|
37651
37794
|
args: {
|
|
37652
37795
|
json: { type: "string", description: createJsonDescription("audience"), required: false },
|
|
@@ -37664,7 +37807,7 @@ Examples:
|
|
|
37664
37807
|
);
|
|
37665
37808
|
}
|
|
37666
37809
|
}),
|
|
37667
|
-
update:
|
|
37810
|
+
update: defineCommand124({
|
|
37668
37811
|
meta: {
|
|
37669
37812
|
name: "update",
|
|
37670
37813
|
description: "Stage a new name or description (pass the audience id). Who is in it cannot be changed."
|
|
@@ -37685,7 +37828,7 @@ Examples:
|
|
|
37685
37828
|
});
|
|
37686
37829
|
}
|
|
37687
37830
|
}),
|
|
37688
|
-
archive:
|
|
37831
|
+
archive: defineCommand124({
|
|
37689
37832
|
meta: {
|
|
37690
37833
|
name: "archive",
|
|
37691
37834
|
description: "Stage retiring an audience. Cannot be undone \u2014 the users it gathered do not come back."
|
|
@@ -37714,7 +37857,7 @@ registerSchema({
|
|
|
37714
37857
|
"property-id": { type: "string", description: PROPERTY_ARG_DESCRIPTION, required: false }
|
|
37715
37858
|
}
|
|
37716
37859
|
});
|
|
37717
|
-
var propertyCommand =
|
|
37860
|
+
var propertyCommand = defineCommand124({
|
|
37718
37861
|
meta: {
|
|
37719
37862
|
name: "property",
|
|
37720
37863
|
description: `Stage a change to the property's own settings
|
|
@@ -37724,7 +37867,7 @@ Examples:
|
|
|
37724
37867
|
baker ga4 property set --name "Acme \u2014 Web" --industry REAL_ESTATE`
|
|
37725
37868
|
},
|
|
37726
37869
|
subCommands: {
|
|
37727
|
-
set:
|
|
37870
|
+
set: defineCommand124({
|
|
37728
37871
|
meta: { name: "set", description: "Stage the property name and/or industry category" },
|
|
37729
37872
|
args: {
|
|
37730
37873
|
name: { type: "string", description: "New property display name", required: false },
|
|
@@ -37764,7 +37907,7 @@ registerSchema({
|
|
|
37764
37907
|
"property-id": { type: "string", description: PROPERTY_ARG_DESCRIPTION, required: false }
|
|
37765
37908
|
}
|
|
37766
37909
|
});
|
|
37767
|
-
var adsLinkCommand =
|
|
37910
|
+
var adsLinkCommand = defineCommand124({
|
|
37768
37911
|
meta: {
|
|
37769
37912
|
name: "ads-link",
|
|
37770
37913
|
description: `Stage linking this property to a Google Ads account
|
|
@@ -37779,7 +37922,7 @@ Examples:
|
|
|
37779
37922
|
baker ga4 ads-link delete L1234`
|
|
37780
37923
|
},
|
|
37781
37924
|
subCommands: {
|
|
37782
|
-
create:
|
|
37925
|
+
create: defineCommand124({
|
|
37783
37926
|
meta: { name: "create", description: "Stage linking the property to a Google Ads account" },
|
|
37784
37927
|
args: {
|
|
37785
37928
|
"customer-id": { type: "string", description: "Google Ads customer id (123-456-7890)", required: false },
|
|
@@ -37798,7 +37941,7 @@ Examples:
|
|
|
37798
37941
|
await stageOp3({ kind: "ga4.googleAdsLink.create", payload, ...withProperty(args) });
|
|
37799
37942
|
}
|
|
37800
37943
|
}),
|
|
37801
|
-
update:
|
|
37944
|
+
update: defineCommand124({
|
|
37802
37945
|
meta: {
|
|
37803
37946
|
name: "update",
|
|
37804
37947
|
description: "Stage the ads-personalisation setting on an existing link (pass its id)"
|
|
@@ -37820,7 +37963,7 @@ Examples:
|
|
|
37820
37963
|
});
|
|
37821
37964
|
}
|
|
37822
37965
|
}),
|
|
37823
|
-
delete:
|
|
37966
|
+
delete: defineCommand124({
|
|
37824
37967
|
meta: {
|
|
37825
37968
|
name: "delete",
|
|
37826
37969
|
description: "Stage unlinking. Stops conversion imports and strands every audience on this property."
|
|
@@ -37871,7 +38014,7 @@ var MEASUREMENT_FLAGS = {
|
|
|
37871
38014
|
"page-changes": "pageChangesEnabled",
|
|
37872
38015
|
"form-interactions": "formInteractionsEnabled"
|
|
37873
38016
|
};
|
|
37874
|
-
var enhancedMeasurementCommand =
|
|
38017
|
+
var enhancedMeasurementCommand = defineCommand124({
|
|
37875
38018
|
meta: {
|
|
37876
38019
|
name: "enhanced-measurement",
|
|
37877
38020
|
description: `Stage the automatic events GA4 collects on a website stream
|
|
@@ -37885,7 +38028,7 @@ Examples:
|
|
|
37885
38028
|
baker ga4 enhanced-measurement set --video false`
|
|
37886
38029
|
},
|
|
37887
38030
|
subCommands: {
|
|
37888
|
-
set:
|
|
38031
|
+
set: defineCommand124({
|
|
37889
38032
|
meta: { name: "set", description: "Stage which automatic events the website stream collects" },
|
|
37890
38033
|
args: {
|
|
37891
38034
|
scrolls: { type: "string", description: "true|false", required: false },
|
|
@@ -37928,7 +38071,7 @@ Examples:
|
|
|
37928
38071
|
});
|
|
37929
38072
|
|
|
37930
38073
|
// src/commands/ga4/index.ts
|
|
37931
|
-
var ga4Command =
|
|
38074
|
+
var ga4Command = defineCommand125({
|
|
37932
38075
|
meta: {
|
|
37933
38076
|
name: "ga4",
|
|
37934
38077
|
description: `Google Analytics 4. Report on a property, audit its config, and change what it measures.
|
|
@@ -37977,12 +38120,12 @@ Full guide: __tooling__/docs/tools/baker/ga4.md`
|
|
|
37977
38120
|
});
|
|
37978
38121
|
|
|
37979
38122
|
// src/commands/gsc/index.ts
|
|
37980
|
-
import { defineCommand as
|
|
38123
|
+
import { defineCommand as defineCommand129 } from "citty";
|
|
37981
38124
|
|
|
37982
38125
|
// src/commands/gsc/query.ts
|
|
37983
38126
|
import { appendFileSync as appendFileSync3, existsSync as existsSync8, readFileSync as readFileSync14, writeFileSync as writeFileSync5 } from "fs";
|
|
37984
38127
|
import { resolve as resolve3 } from "path";
|
|
37985
|
-
import { defineCommand as
|
|
38128
|
+
import { defineCommand as defineCommand126 } from "citty";
|
|
37986
38129
|
|
|
37987
38130
|
// src/commands/gsc/presets.ts
|
|
37988
38131
|
var GSC_PRESETS = [
|
|
@@ -38176,7 +38319,7 @@ function handleError4(err) {
|
|
|
38176
38319
|
});
|
|
38177
38320
|
process.exit(1);
|
|
38178
38321
|
}
|
|
38179
|
-
var queryCommand3 =
|
|
38322
|
+
var queryCommand3 = defineCommand126({
|
|
38180
38323
|
meta: {
|
|
38181
38324
|
name: "query",
|
|
38182
38325
|
description: `Run GSC Search Analytics queries. Preset-first with free-form escape hatch.
|
|
@@ -38254,7 +38397,7 @@ Free-form (escape hatch):
|
|
|
38254
38397
|
});
|
|
38255
38398
|
|
|
38256
38399
|
// src/commands/gsc/sitemaps.ts
|
|
38257
|
-
import { defineCommand as
|
|
38400
|
+
import { defineCommand as defineCommand127 } from "citty";
|
|
38258
38401
|
registerSchema({
|
|
38259
38402
|
command: "gsc.sitemaps",
|
|
38260
38403
|
description: "List sitemaps for a Search Console site. Check sitemap health and errors.",
|
|
@@ -38263,7 +38406,7 @@ registerSchema({
|
|
|
38263
38406
|
"no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false }
|
|
38264
38407
|
}
|
|
38265
38408
|
});
|
|
38266
|
-
var sitemapsCommand =
|
|
38409
|
+
var sitemapsCommand = defineCommand127({
|
|
38267
38410
|
meta: {
|
|
38268
38411
|
name: "sitemaps",
|
|
38269
38412
|
description: `List sitemaps for a site. Check health and errors.
|
|
@@ -38316,7 +38459,7 @@ Examples:
|
|
|
38316
38459
|
});
|
|
38317
38460
|
|
|
38318
38461
|
// src/commands/gsc/sites.ts
|
|
38319
|
-
import { defineCommand as
|
|
38462
|
+
import { defineCommand as defineCommand128 } from "citty";
|
|
38320
38463
|
registerSchema({
|
|
38321
38464
|
command: "gsc.sites",
|
|
38322
38465
|
description: "List the Search Console sites this company connected \u2014 there can be several, and every one of them is yours to query. Returns the site URLs the query and sitemaps commands take.",
|
|
@@ -38332,7 +38475,7 @@ function siteHints(sites) {
|
|
|
38332
38475
|
resources: sites.map((site) => ({ id: site.siteUrl, label: site.permissionLevel }))
|
|
38333
38476
|
});
|
|
38334
38477
|
}
|
|
38335
|
-
var sitesCommand =
|
|
38478
|
+
var sitesCommand = defineCommand128({
|
|
38336
38479
|
meta: {
|
|
38337
38480
|
name: "sites",
|
|
38338
38481
|
description: `List verified Search Console sites.
|
|
@@ -38380,7 +38523,7 @@ Examples:
|
|
|
38380
38523
|
});
|
|
38381
38524
|
|
|
38382
38525
|
// src/commands/gsc/index.ts
|
|
38383
|
-
var gscCommand =
|
|
38526
|
+
var gscCommand = defineCommand129({
|
|
38384
38527
|
meta: {
|
|
38385
38528
|
name: "gsc",
|
|
38386
38529
|
description: `Google Search Console commands. PPC-SEO arbitrage, brand halo analysis, negative keyword discovery.
|
|
@@ -38404,7 +38547,7 @@ Full guide: __tooling__/docs/tools/baker/gsc.md`
|
|
|
38404
38547
|
});
|
|
38405
38548
|
|
|
38406
38549
|
// src/commands/history/index.ts
|
|
38407
|
-
import { defineCommand as
|
|
38550
|
+
import { defineCommand as defineCommand130 } from "citty";
|
|
38408
38551
|
registerSchema({
|
|
38409
38552
|
command: "history.list",
|
|
38410
38553
|
description: "Start here: unified account history (audit log) \u2014 everything that changed on this account, newest first: publishes, chat lifecycle, backlog actions, team changes, setup links, tags, schedules, ad-platform writes, followed advertisers, media, creatives, reports, domains, and integrations. Use it to see what happened recently before planning work. Compact by default; add --full for raw metadata per entry.",
|
|
@@ -38459,7 +38602,7 @@ function parseBoundedInt2(raw, name, min, max) {
|
|
|
38459
38602
|
}
|
|
38460
38603
|
return value;
|
|
38461
38604
|
}
|
|
38462
|
-
var listCommand13 =
|
|
38605
|
+
var listCommand13 = defineCommand130({
|
|
38463
38606
|
meta: {
|
|
38464
38607
|
name: "list",
|
|
38465
38608
|
description: "List recent account changes (unified audit log), newest first."
|
|
@@ -38505,7 +38648,7 @@ var listCommand13 = defineCommand129({
|
|
|
38505
38648
|
}
|
|
38506
38649
|
}
|
|
38507
38650
|
});
|
|
38508
|
-
var historyCommand =
|
|
38651
|
+
var historyCommand = defineCommand130({
|
|
38509
38652
|
meta: {
|
|
38510
38653
|
name: "history",
|
|
38511
38654
|
description: `Unified account history (audit log): what changed, who did it, and when.
|
|
@@ -38515,7 +38658,7 @@ Full guide: __tooling__/docs/tools/baker/history.md`
|
|
|
38515
38658
|
});
|
|
38516
38659
|
|
|
38517
38660
|
// src/commands/hubspot/index.ts
|
|
38518
|
-
import { defineCommand as
|
|
38661
|
+
import { defineCommand as defineCommand131 } from "citty";
|
|
38519
38662
|
var EMBED_TYPES = ["legacy", "v4", "unknown"];
|
|
38520
38663
|
function failNotConnected(err) {
|
|
38521
38664
|
if (err instanceof ApiError && err.code === "FORBIDDEN" && err.message.includes(HUBSPOT_MISSING_GRANT_MARKER)) {
|
|
@@ -38669,7 +38812,7 @@ registerSchema({
|
|
|
38669
38812
|
}
|
|
38670
38813
|
}
|
|
38671
38814
|
});
|
|
38672
|
-
var formsListCommand =
|
|
38815
|
+
var formsListCommand = defineCommand131({
|
|
38673
38816
|
meta: {
|
|
38674
38817
|
name: "list",
|
|
38675
38818
|
description: "List HubSpot forms with embed type and post-submit action. Example: baker hubspot forms list --redirecting-only"
|
|
@@ -38714,7 +38857,7 @@ var formsListCommand = defineCommand130({
|
|
|
38714
38857
|
}
|
|
38715
38858
|
}
|
|
38716
38859
|
});
|
|
38717
|
-
var formsViewCommand =
|
|
38860
|
+
var formsViewCommand = defineCommand131({
|
|
38718
38861
|
meta: {
|
|
38719
38862
|
name: "view",
|
|
38720
38863
|
description: "Show one HubSpot form's fields and configuration. Example: baker hubspot forms view 1a2b3c"
|
|
@@ -38766,7 +38909,7 @@ var formsViewCommand = defineCommand130({
|
|
|
38766
38909
|
}
|
|
38767
38910
|
}
|
|
38768
38911
|
});
|
|
38769
|
-
var meetingsListCommand =
|
|
38912
|
+
var meetingsListCommand = defineCommand131({
|
|
38770
38913
|
meta: {
|
|
38771
38914
|
name: "list",
|
|
38772
38915
|
description: "List HubSpot meeting links (calendars). Example: baker hubspot meetings list"
|
|
@@ -38808,7 +38951,7 @@ var meetingsListCommand = defineCommand130({
|
|
|
38808
38951
|
}
|
|
38809
38952
|
}
|
|
38810
38953
|
});
|
|
38811
|
-
var meetingsViewCommand =
|
|
38954
|
+
var meetingsViewCommand = defineCommand131({
|
|
38812
38955
|
meta: {
|
|
38813
38956
|
name: "view",
|
|
38814
38957
|
description: "Show one HubSpot meeting link's booking fields. Example: baker hubspot meetings view discovery-call"
|
|
@@ -38852,7 +38995,7 @@ var meetingsViewCommand = defineCommand130({
|
|
|
38852
38995
|
}
|
|
38853
38996
|
}
|
|
38854
38997
|
});
|
|
38855
|
-
var formsSubmissionsCommand =
|
|
38998
|
+
var formsSubmissionsCommand = defineCommand131({
|
|
38856
38999
|
meta: {
|
|
38857
39000
|
name: "submissions",
|
|
38858
39001
|
description: "How many leads a form received, and when. Example: baker hubspot forms submissions <formId> --days 30"
|
|
@@ -38901,7 +39044,7 @@ var formsSubmissionsCommand = defineCommand130({
|
|
|
38901
39044
|
}
|
|
38902
39045
|
}
|
|
38903
39046
|
});
|
|
38904
|
-
var workflowsListCommand =
|
|
39047
|
+
var workflowsListCommand = defineCommand131({
|
|
38905
39048
|
meta: {
|
|
38906
39049
|
name: "list",
|
|
38907
39050
|
description: "List HubSpot workflows. Example: baker hubspot workflows list --enabled-only"
|
|
@@ -38966,7 +39109,7 @@ function workflowViewHints(workflow) {
|
|
|
38966
39109
|
}
|
|
38967
39110
|
return hints;
|
|
38968
39111
|
}
|
|
38969
|
-
var workflowsViewCommand =
|
|
39112
|
+
var workflowsViewCommand = defineCommand131({
|
|
38970
39113
|
meta: {
|
|
38971
39114
|
name: "view",
|
|
38972
39115
|
description: "Read one workflow's real configuration \u2014 enrolment, branches in order, and what each step writes. Example: baker hubspot workflows view 121183594 --full"
|
|
@@ -38993,7 +39136,7 @@ var workflowsViewCommand = defineCommand130({
|
|
|
38993
39136
|
}
|
|
38994
39137
|
}
|
|
38995
39138
|
});
|
|
38996
|
-
var pipelinesListCommand =
|
|
39139
|
+
var pipelinesListCommand = defineCommand131({
|
|
38997
39140
|
meta: {
|
|
38998
39141
|
name: "list",
|
|
38999
39142
|
description: "List HubSpot deal pipelines and their stages. Example: baker hubspot pipelines list"
|
|
@@ -39010,7 +39153,7 @@ var pipelinesListCommand = defineCommand130({
|
|
|
39010
39153
|
}
|
|
39011
39154
|
}
|
|
39012
39155
|
});
|
|
39013
|
-
var contactsSummaryCommand =
|
|
39156
|
+
var contactsSummaryCommand = defineCommand131({
|
|
39014
39157
|
meta: {
|
|
39015
39158
|
name: "summary",
|
|
39016
39159
|
description: "Whether recent leads are being worked, as counts. Example: baker hubspot contacts summary --days 30"
|
|
@@ -39080,7 +39223,7 @@ function contactLookupHints(data) {
|
|
|
39080
39223
|
}
|
|
39081
39224
|
return hints;
|
|
39082
39225
|
}
|
|
39083
|
-
var contactsLookupCommand =
|
|
39226
|
+
var contactsLookupCommand = defineCommand131({
|
|
39084
39227
|
meta: {
|
|
39085
39228
|
name: "lookup",
|
|
39086
39229
|
description: "Find one contact by email and see whether it was worked. Example: baker hubspot contacts lookup a@b.com"
|
|
@@ -39104,27 +39247,27 @@ var contactsLookupCommand = defineCommand130({
|
|
|
39104
39247
|
}
|
|
39105
39248
|
}
|
|
39106
39249
|
});
|
|
39107
|
-
var contactsCommand =
|
|
39250
|
+
var contactsCommand = defineCommand131({
|
|
39108
39251
|
meta: { name: "contacts", description: "Contacts on the connected HubSpot account." },
|
|
39109
39252
|
subCommands: { summary: contactsSummaryCommand, lookup: contactsLookupCommand }
|
|
39110
39253
|
});
|
|
39111
|
-
var formsCommand =
|
|
39254
|
+
var formsCommand = defineCommand131({
|
|
39112
39255
|
meta: { name: "forms", description: "HubSpot forms on the connected account." },
|
|
39113
39256
|
subCommands: { list: formsListCommand, view: formsViewCommand, submissions: formsSubmissionsCommand }
|
|
39114
39257
|
});
|
|
39115
|
-
var workflowsCommand =
|
|
39258
|
+
var workflowsCommand = defineCommand131({
|
|
39116
39259
|
meta: { name: "workflows", description: "HubSpot workflows on the connected account." },
|
|
39117
39260
|
subCommands: { list: workflowsListCommand, view: workflowsViewCommand }
|
|
39118
39261
|
});
|
|
39119
|
-
var pipelinesCommand =
|
|
39262
|
+
var pipelinesCommand = defineCommand131({
|
|
39120
39263
|
meta: { name: "pipelines", description: "HubSpot deal pipelines on the connected account." },
|
|
39121
39264
|
subCommands: { list: pipelinesListCommand }
|
|
39122
39265
|
});
|
|
39123
|
-
var meetingsCommand =
|
|
39266
|
+
var meetingsCommand = defineCommand131({
|
|
39124
39267
|
meta: { name: "meetings", description: "HubSpot meeting links (calendars) on the connected account." },
|
|
39125
39268
|
subCommands: { list: meetingsListCommand, view: meetingsViewCommand }
|
|
39126
39269
|
});
|
|
39127
|
-
var hubspotCommand =
|
|
39270
|
+
var hubspotCommand = defineCommand131({
|
|
39128
39271
|
meta: {
|
|
39129
39272
|
name: "hubspot",
|
|
39130
39273
|
description: `Read the connected HubSpot account \u2014 forms, the leads they received, workflows, deal pipelines and
|
|
@@ -39162,10 +39305,10 @@ Full guide: __tooling__/docs/tools/baker/hubspot.md`
|
|
|
39162
39305
|
});
|
|
39163
39306
|
|
|
39164
39307
|
// src/commands/images/index.ts
|
|
39165
|
-
import { defineCommand as
|
|
39308
|
+
import { defineCommand as defineCommand157 } from "citty";
|
|
39166
39309
|
|
|
39167
39310
|
// src/commands/images/crop.ts
|
|
39168
|
-
import { defineCommand as
|
|
39311
|
+
import { defineCommand as defineCommand132 } from "citty";
|
|
39169
39312
|
|
|
39170
39313
|
// src/lib/image/crop-sprite.ts
|
|
39171
39314
|
import sharp from "sharp";
|
|
@@ -39287,7 +39430,7 @@ function emitError2(err) {
|
|
|
39287
39430
|
}
|
|
39288
39431
|
process.exit(1);
|
|
39289
39432
|
}
|
|
39290
|
-
var cropCommand =
|
|
39433
|
+
var cropCommand = defineCommand132({
|
|
39291
39434
|
meta: {
|
|
39292
39435
|
name: "crop",
|
|
39293
39436
|
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"
|
|
@@ -39323,7 +39466,7 @@ var cropCommand = defineCommand131({
|
|
|
39323
39466
|
});
|
|
39324
39467
|
|
|
39325
39468
|
// src/commands/images/delete.ts
|
|
39326
|
-
import { defineCommand as
|
|
39469
|
+
import { defineCommand as defineCommand133 } from "citty";
|
|
39327
39470
|
registerSchema({
|
|
39328
39471
|
command: "images.delete",
|
|
39329
39472
|
description: "Delete an image by ID",
|
|
@@ -39337,7 +39480,7 @@ registerSchema({
|
|
|
39337
39480
|
}
|
|
39338
39481
|
}
|
|
39339
39482
|
});
|
|
39340
|
-
var deleteCommand2 =
|
|
39483
|
+
var deleteCommand2 = defineCommand133({
|
|
39341
39484
|
meta: {
|
|
39342
39485
|
name: "delete",
|
|
39343
39486
|
description: "Delete an image by ID. Use --dry-run to preview. Example: baker images delete j571abc123 --dry-run"
|
|
@@ -39378,7 +39521,7 @@ var deleteCommand2 = defineCommand132({
|
|
|
39378
39521
|
});
|
|
39379
39522
|
|
|
39380
39523
|
// src/commands/images/dimensions.ts
|
|
39381
|
-
import { defineCommand as
|
|
39524
|
+
import { defineCommand as defineCommand134 } from "citty";
|
|
39382
39525
|
|
|
39383
39526
|
// src/lib/image/dimensions.ts
|
|
39384
39527
|
import { imageSize } from "image-size";
|
|
@@ -39407,7 +39550,7 @@ registerSchema({
|
|
|
39407
39550
|
}
|
|
39408
39551
|
}
|
|
39409
39552
|
});
|
|
39410
|
-
var dimensionsCommand =
|
|
39553
|
+
var dimensionsCommand = defineCommand134({
|
|
39411
39554
|
meta: {
|
|
39412
39555
|
name: "dimensions",
|
|
39413
39556
|
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"
|
|
@@ -39463,7 +39606,7 @@ var dimensionsCommand = defineCommand133({
|
|
|
39463
39606
|
});
|
|
39464
39607
|
|
|
39465
39608
|
// src/commands/images/download.ts
|
|
39466
|
-
import { defineCommand as
|
|
39609
|
+
import { defineCommand as defineCommand135 } from "citty";
|
|
39467
39610
|
|
|
39468
39611
|
// src/commands/images/downloadPaths.ts
|
|
39469
39612
|
import { basename as basename2, extname as extname3, join as join6 } from "path";
|
|
@@ -39688,7 +39831,7 @@ function emitError3(err) {
|
|
|
39688
39831
|
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
39689
39832
|
process.exit(1);
|
|
39690
39833
|
}
|
|
39691
|
-
var downloadCommand =
|
|
39834
|
+
var downloadCommand = defineCommand135({
|
|
39692
39835
|
meta: {
|
|
39693
39836
|
name: "download",
|
|
39694
39837
|
description: "Download image URLs and/or library images to local files \u2014 the missing first half of `source \u2192 download \u2192 normalize \u2192 place`. Never use `curl` for this.\n\nExamples:\n baker images download https://media.withbaker.com/\u2026/logo.webp\n baker images download j57abc123 j57def456 --out src/pages/pricing/_images/\n baker images download https://\u2026/hero.png --out ./hero.png"
|
|
@@ -39721,7 +39864,7 @@ var downloadCommand = defineCommand134({
|
|
|
39721
39864
|
});
|
|
39722
39865
|
|
|
39723
39866
|
// src/commands/images/extract.ts
|
|
39724
|
-
import { defineCommand as
|
|
39867
|
+
import { defineCommand as defineCommand136 } from "citty";
|
|
39725
39868
|
|
|
39726
39869
|
// src/commands/images/autoIngest.ts
|
|
39727
39870
|
var AUTO_INGEST_MAX = {
|
|
@@ -39768,7 +39911,7 @@ registerSchema({
|
|
|
39768
39911
|
}
|
|
39769
39912
|
}
|
|
39770
39913
|
});
|
|
39771
|
-
var extractCommand =
|
|
39914
|
+
var extractCommand = defineCommand136({
|
|
39772
39915
|
meta: {
|
|
39773
39916
|
name: "extract",
|
|
39774
39917
|
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"
|
|
@@ -39823,7 +39966,7 @@ var extractCommand = defineCommand135({
|
|
|
39823
39966
|
});
|
|
39824
39967
|
|
|
39825
39968
|
// src/commands/images/find.ts
|
|
39826
|
-
import { defineCommand as
|
|
39969
|
+
import { defineCommand as defineCommand137 } from "citty";
|
|
39827
39970
|
|
|
39828
39971
|
// src/commands/images/providerHits.ts
|
|
39829
39972
|
function asRecord3(value) {
|
|
@@ -39961,7 +40104,7 @@ registerSchema({
|
|
|
39961
40104
|
full: { type: "boolean", description: "Include full metadata", required: false, default: false }
|
|
39962
40105
|
}
|
|
39963
40106
|
});
|
|
39964
|
-
var findCommand =
|
|
40107
|
+
var findCommand = defineCommand137({
|
|
39965
40108
|
meta: {
|
|
39966
40109
|
name: "find",
|
|
39967
40110
|
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"
|
|
@@ -40034,7 +40177,7 @@ var findCommand = defineCommand136({
|
|
|
40034
40177
|
});
|
|
40035
40178
|
|
|
40036
40179
|
// src/commands/images/get.ts
|
|
40037
|
-
import { defineCommand as
|
|
40180
|
+
import { defineCommand as defineCommand138 } from "citty";
|
|
40038
40181
|
registerSchema({
|
|
40039
40182
|
command: "images.get",
|
|
40040
40183
|
description: "Get a single image by ID",
|
|
@@ -40042,7 +40185,7 @@ registerSchema({
|
|
|
40042
40185
|
id: { type: "string", description: "Image ID", required: true }
|
|
40043
40186
|
}
|
|
40044
40187
|
});
|
|
40045
|
-
var getCommand3 =
|
|
40188
|
+
var getCommand3 = defineCommand138({
|
|
40046
40189
|
meta: { name: "get", description: "Get a single image by ID. Example: baker images get j571abc123" },
|
|
40047
40190
|
args: {
|
|
40048
40191
|
id: { type: "positional", description: "Image ID", required: false },
|
|
@@ -40078,7 +40221,7 @@ var getCommand3 = defineCommand137({
|
|
|
40078
40221
|
});
|
|
40079
40222
|
|
|
40080
40223
|
// src/commands/images/gif.ts
|
|
40081
|
-
import { defineCommand as
|
|
40224
|
+
import { defineCommand as defineCommand139 } from "citty";
|
|
40082
40225
|
registerSchema({
|
|
40083
40226
|
command: "images.gif",
|
|
40084
40227
|
description: "Search Giphy for GIFs / reaction memes (paid social creative).",
|
|
@@ -40110,7 +40253,7 @@ registerSchema({
|
|
|
40110
40253
|
}
|
|
40111
40254
|
}
|
|
40112
40255
|
});
|
|
40113
|
-
var gifCommand =
|
|
40256
|
+
var gifCommand = defineCommand139({
|
|
40114
40257
|
meta: {
|
|
40115
40258
|
name: "gif",
|
|
40116
40259
|
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"
|
|
@@ -40157,7 +40300,7 @@ var gifCommand = defineCommand138({
|
|
|
40157
40300
|
});
|
|
40158
40301
|
|
|
40159
40302
|
// src/commands/images/google.ts
|
|
40160
|
-
import { defineCommand as
|
|
40303
|
+
import { defineCommand as defineCommand140 } from "citty";
|
|
40161
40304
|
var GOOGLE_ERROR_FIX = {
|
|
40162
40305
|
action: "use_different_resource",
|
|
40163
40306
|
explanation: "Generate the asset instead of retrying Google. Google is the last-resort image provider. Run `baker studio generate` to make the asset. Never sleep-and-retry this command \u2014 the CLI already backs off on rate limits. If no image can be sourced, continue the rest of the task with a placeholder rather than aborting it."
|
|
@@ -40197,7 +40340,7 @@ registerSchema({
|
|
|
40197
40340
|
}
|
|
40198
40341
|
}
|
|
40199
40342
|
});
|
|
40200
|
-
var googleCommand2 =
|
|
40343
|
+
var googleCommand2 = defineCommand140({
|
|
40201
40344
|
meta: {
|
|
40202
40345
|
name: "google",
|
|
40203
40346
|
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"
|
|
@@ -40270,7 +40413,7 @@ var googleCommand2 = defineCommand139({
|
|
|
40270
40413
|
});
|
|
40271
40414
|
|
|
40272
40415
|
// src/commands/images/group.ts
|
|
40273
|
-
import { defineCommand as
|
|
40416
|
+
import { defineCommand as defineCommand141 } from "citty";
|
|
40274
40417
|
|
|
40275
40418
|
// src/commands/mediaGroup.ts
|
|
40276
40419
|
async function runMediaGroupLookup(input) {
|
|
@@ -40323,7 +40466,7 @@ registerSchema({
|
|
|
40323
40466
|
"group-key": { type: "string", description: "The set key directly, when you already have it", required: false }
|
|
40324
40467
|
}
|
|
40325
40468
|
});
|
|
40326
|
-
var groupCommand =
|
|
40469
|
+
var groupCommand = defineCommand141({
|
|
40327
40470
|
meta: {
|
|
40328
40471
|
name: "group",
|
|
40329
40472
|
description: "List every asset that arrived in the same set \u2014 the slides of one Instagram carousel, the images off one scraped page. Start here whenever a hit looks like part of a sequence: carousel slides are authored to be read in order and usually only make sense together. Takes an image or a video id, since one carousel can contain both. Example: baker images group <imageId>"
|
|
@@ -40343,7 +40486,7 @@ var groupCommand = defineCommand140({
|
|
|
40343
40486
|
});
|
|
40344
40487
|
|
|
40345
40488
|
// src/commands/images/icon.ts
|
|
40346
|
-
import { defineCommand as
|
|
40489
|
+
import { defineCommand as defineCommand142 } from "citty";
|
|
40347
40490
|
|
|
40348
40491
|
// src/commands/images/brandVerification.ts
|
|
40349
40492
|
function brandToken(domain) {
|
|
@@ -40440,7 +40583,7 @@ registerSchema({
|
|
|
40440
40583
|
full: { type: "boolean", description: "Include full metadata", required: false, default: false }
|
|
40441
40584
|
}
|
|
40442
40585
|
});
|
|
40443
|
-
var iconCommand =
|
|
40586
|
+
var iconCommand = defineCommand142({
|
|
40444
40587
|
meta: {
|
|
40445
40588
|
name: "icon",
|
|
40446
40589
|
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'"
|
|
@@ -40510,7 +40653,7 @@ var iconCommand = defineCommand141({
|
|
|
40510
40653
|
});
|
|
40511
40654
|
|
|
40512
40655
|
// src/commands/images/ingest.ts
|
|
40513
|
-
import { defineCommand as
|
|
40656
|
+
import { defineCommand as defineCommand143 } from "citty";
|
|
40514
40657
|
var SOURCE_VALUES = imageSourceSchema.options.join(" | ");
|
|
40515
40658
|
registerSchema({
|
|
40516
40659
|
command: "images.ingest",
|
|
@@ -40525,7 +40668,7 @@ registerSchema({
|
|
|
40525
40668
|
fields: { type: "string", description: "Comma-separated field names to include", required: false }
|
|
40526
40669
|
}
|
|
40527
40670
|
});
|
|
40528
|
-
var ingestCommand =
|
|
40671
|
+
var ingestCommand = defineCommand143({
|
|
40529
40672
|
meta: {
|
|
40530
40673
|
name: "ingest",
|
|
40531
40674
|
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"
|
|
@@ -40594,7 +40737,7 @@ var ingestCommand = defineCommand142({
|
|
|
40594
40737
|
});
|
|
40595
40738
|
|
|
40596
40739
|
// src/commands/images/layerize.ts
|
|
40597
|
-
import { defineCommand as
|
|
40740
|
+
import { defineCommand as defineCommand144 } from "citty";
|
|
40598
40741
|
registerSchema({
|
|
40599
40742
|
command: "images.layerize",
|
|
40600
40743
|
description: "Split a library image into editable layers: transparent PNG cutouts for each element, plus any headline recovered as EDITABLE TEXT with its font, size, colour and position. Waits for completion by default. Costs credits.",
|
|
@@ -40658,7 +40801,7 @@ async function pollUntilSettled(imageId, maxWait) {
|
|
|
40658
40801
|
}
|
|
40659
40802
|
return null;
|
|
40660
40803
|
}
|
|
40661
|
-
var layerizeCommand =
|
|
40804
|
+
var layerizeCommand = defineCommand144({
|
|
40662
40805
|
meta: {
|
|
40663
40806
|
name: "layerize",
|
|
40664
40807
|
description: "Split a library image into editable layers \u2014 transparent cutouts per element, plus any baked-in headline recovered as editable text with its typography.\n\nStart here: baker images layerize j571abc123def\nExample: baker images layerize j571abc123def --full\nExample: baker images layerize j571abc123def --instructions 'keep the product and its shadow together'"
|
|
@@ -40727,7 +40870,7 @@ registerSchema({
|
|
|
40727
40870
|
full: { type: "boolean", description: "Include geometry and typography for every layer", required: false }
|
|
40728
40871
|
}
|
|
40729
40872
|
});
|
|
40730
|
-
var layersCommand =
|
|
40873
|
+
var layersCommand = defineCommand144({
|
|
40731
40874
|
meta: {
|
|
40732
40875
|
name: "layers",
|
|
40733
40876
|
description: "Read the layers of an image that has already been split. Free \u2014 no provider call.\n\nStart here: baker images layers j571abc123def\nExample: baker images layers j571abc123def --full"
|
|
@@ -40767,7 +40910,7 @@ var layersCommand = defineCommand143({
|
|
|
40767
40910
|
});
|
|
40768
40911
|
|
|
40769
40912
|
// src/commands/images/library.ts
|
|
40770
|
-
import { defineCommand as
|
|
40913
|
+
import { defineCommand as defineCommand145 } from "citty";
|
|
40771
40914
|
registerSchema({
|
|
40772
40915
|
command: "images.library",
|
|
40773
40916
|
description: "Search the company image library. Returns only ready images.",
|
|
@@ -40793,7 +40936,7 @@ registerSchema({
|
|
|
40793
40936
|
}
|
|
40794
40937
|
}
|
|
40795
40938
|
});
|
|
40796
|
-
var libraryCommand =
|
|
40939
|
+
var libraryCommand = defineCommand145({
|
|
40797
40940
|
meta: {
|
|
40798
40941
|
name: "library",
|
|
40799
40942
|
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"
|
|
@@ -40856,7 +40999,7 @@ var libraryCommand = defineCommand144({
|
|
|
40856
40999
|
});
|
|
40857
41000
|
|
|
40858
41001
|
// src/commands/images/logo.ts
|
|
40859
|
-
import { defineCommand as
|
|
41002
|
+
import { defineCommand as defineCommand146 } from "citty";
|
|
40860
41003
|
registerSchema({
|
|
40861
41004
|
command: "images.logo",
|
|
40862
41005
|
description: "Brand logo lookup via Brandfetch. Auto-ingests by default. Returns `brandMatch` \u2014 Brandfetch's own verdict on whose brand the domain is (confirmed | mismatch | unverified). Branch on it: `mismatch` means the mark is another company's, so do not place it. `confirmed` verifies the record, not the artwork \u2014 read the ingested row back to check the mark itself.",
|
|
@@ -40884,7 +41027,7 @@ registerSchema({
|
|
|
40884
41027
|
full: { type: "boolean", description: "Include full metadata", required: false, default: false }
|
|
40885
41028
|
}
|
|
40886
41029
|
});
|
|
40887
|
-
var logoCommand =
|
|
41030
|
+
var logoCommand = defineCommand146({
|
|
40888
41031
|
meta: {
|
|
40889
41032
|
name: "logo",
|
|
40890
41033
|
description: "Brand logo via Brandfetch. Returns up to 5 variants (icon, light/dark logo, light/dark symbol) plus `brandMatch`. Auto-ingests the first variant.\n\nStart here: check `brandMatch.verdict`.\n mismatch \u2192 the mark belongs to `brandMatch.name`, a different company. Do not place it.\n unverified \u2192 nothing confirmed whose logo this is. Treat as unchecked.\n confirmed \u2192 Brandfetch has this brand's record. That verifies the record, NOT the artwork \u2014 a confirmed domain has served another company's logo before.\n\n\u26A0 Whatever the verdict, read the ingested row back with `baker images get <imageId>` and check `textInImage`/`subject` before placing it. That is the only check that looks at the mark.\n\nExample: baker images logo stripe.com --variant logo"
|
|
@@ -40957,7 +41100,7 @@ var logoCommand = defineCommand145({
|
|
|
40957
41100
|
});
|
|
40958
41101
|
|
|
40959
41102
|
// src/commands/images/normalize.ts
|
|
40960
|
-
import { defineCommand as
|
|
41103
|
+
import { defineCommand as defineCommand147 } from "citty";
|
|
40961
41104
|
|
|
40962
41105
|
// src/lib/image/color-changer.ts
|
|
40963
41106
|
import quantize from "quantize";
|
|
@@ -41689,7 +41832,7 @@ function coerceRawArgs(args) {
|
|
|
41689
41832
|
"dry-run": bool(args["dry-run"])
|
|
41690
41833
|
};
|
|
41691
41834
|
}
|
|
41692
|
-
var normalizeCommand2 =
|
|
41835
|
+
var normalizeCommand2 = defineCommand147({
|
|
41693
41836
|
meta: {
|
|
41694
41837
|
name: "normalize",
|
|
41695
41838
|
description: `Normalize logos / images: declarative recolor + bg removal + trim + resize. Operates on local files; writes in-place by default.
|
|
@@ -41744,7 +41887,7 @@ Examples:
|
|
|
41744
41887
|
});
|
|
41745
41888
|
|
|
41746
41889
|
// src/commands/images/pinterest.ts
|
|
41747
|
-
import { defineCommand as
|
|
41890
|
+
import { defineCommand as defineCommand148 } from "citty";
|
|
41748
41891
|
registerSchema({
|
|
41749
41892
|
command: "images.pinterest",
|
|
41750
41893
|
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.",
|
|
@@ -41764,7 +41907,7 @@ registerSchema({
|
|
|
41764
41907
|
}
|
|
41765
41908
|
}
|
|
41766
41909
|
});
|
|
41767
|
-
var pinterestCommand =
|
|
41910
|
+
var pinterestCommand = defineCommand148({
|
|
41768
41911
|
meta: {
|
|
41769
41912
|
name: "pinterest",
|
|
41770
41913
|
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'"
|
|
@@ -41821,7 +41964,7 @@ var pinterestCommand = defineCommand147({
|
|
|
41821
41964
|
});
|
|
41822
41965
|
|
|
41823
41966
|
// src/commands/images/screenshot.ts
|
|
41824
|
-
import { defineCommand as
|
|
41967
|
+
import { defineCommand as defineCommand149 } from "citty";
|
|
41825
41968
|
registerSchema({
|
|
41826
41969
|
command: "images.screenshot",
|
|
41827
41970
|
description: "Capture a website screenshot via ScreenshotOne. Auto-ingests on success.",
|
|
@@ -41840,7 +41983,7 @@ registerSchema({
|
|
|
41840
41983
|
full: { type: "boolean", description: "Include full metadata", required: false, default: false }
|
|
41841
41984
|
}
|
|
41842
41985
|
});
|
|
41843
|
-
var screenshotCommand =
|
|
41986
|
+
var screenshotCommand = defineCommand149({
|
|
41844
41987
|
meta: {
|
|
41845
41988
|
name: "screenshot",
|
|
41846
41989
|
description: "Screenshot a URL via ScreenshotOne. $0.009/capture. Auto-ingests to library.\n\nExample: baker images screenshot https://stripe.com --full-page"
|
|
@@ -41904,7 +42047,7 @@ var screenshotCommand = defineCommand148({
|
|
|
41904
42047
|
});
|
|
41905
42048
|
|
|
41906
42049
|
// src/commands/images/search.ts
|
|
41907
|
-
import { defineCommand as
|
|
42050
|
+
import { defineCommand as defineCommand150 } from "citty";
|
|
41908
42051
|
registerSchema({
|
|
41909
42052
|
command: "images.search",
|
|
41910
42053
|
description: "Search images by text query. Only returns ready images.",
|
|
@@ -41920,7 +42063,7 @@ registerSchema({
|
|
|
41920
42063
|
tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
|
|
41921
42064
|
}
|
|
41922
42065
|
});
|
|
41923
|
-
var searchCommand =
|
|
42066
|
+
var searchCommand = defineCommand150({
|
|
41924
42067
|
meta: {
|
|
41925
42068
|
name: "search",
|
|
41926
42069
|
description: "Semantic search images by text query. Uses hybrid BM25 + vector + reranking. Example: baker images search 'hero banner' --aspect-ratio 16:9 --tags logo"
|
|
@@ -41980,7 +42123,7 @@ var searchCommand = defineCommand149({
|
|
|
41980
42123
|
});
|
|
41981
42124
|
|
|
41982
42125
|
// src/commands/images/sticker.ts
|
|
41983
|
-
import { defineCommand as
|
|
42126
|
+
import { defineCommand as defineCommand151 } from "citty";
|
|
41984
42127
|
registerSchema({
|
|
41985
42128
|
command: "images.sticker",
|
|
41986
42129
|
description: "Search Giphy stickers \u2014 transparent-background overlays for ad creative.",
|
|
@@ -42012,7 +42155,7 @@ registerSchema({
|
|
|
42012
42155
|
}
|
|
42013
42156
|
}
|
|
42014
42157
|
});
|
|
42015
|
-
var stickerCommand =
|
|
42158
|
+
var stickerCommand = defineCommand151({
|
|
42016
42159
|
meta: {
|
|
42017
42160
|
name: "sticker",
|
|
42018
42161
|
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"
|
|
@@ -42059,7 +42202,7 @@ var stickerCommand = defineCommand150({
|
|
|
42059
42202
|
});
|
|
42060
42203
|
|
|
42061
42204
|
// src/commands/images/stock.ts
|
|
42062
|
-
import { defineCommand as
|
|
42205
|
+
import { defineCommand as defineCommand152 } from "citty";
|
|
42063
42206
|
var STOCK_ERROR_FIX = {
|
|
42064
42207
|
action: "use_different_resource",
|
|
42065
42208
|
explanation: "Switch provider instead of retrying stock search. Stock search is one of several image sources. Run `baker images find <query> --sources library,pinterest,google` (`--sources` is required \u2014 `find` alone searches the library only) or `baker studio generate` to make the asset. Never sleep-and-retry this command \u2014 the CLI already backs off on rate limits. If no image can be sourced, continue the rest of the task with a placeholder rather than aborting it."
|
|
@@ -42136,7 +42279,7 @@ function buildStockRequest(query, args) {
|
|
|
42136
42279
|
if (args.context) body.descriptionContext = args.context;
|
|
42137
42280
|
return body;
|
|
42138
42281
|
}
|
|
42139
|
-
var stockCommand =
|
|
42282
|
+
var stockCommand = defineCommand152({
|
|
42140
42283
|
meta: {
|
|
42141
42284
|
name: "stock",
|
|
42142
42285
|
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"
|
|
@@ -42209,7 +42352,7 @@ var stockCommand = defineCommand151({
|
|
|
42209
42352
|
});
|
|
42210
42353
|
|
|
42211
42354
|
// src/lib/tags-command.ts
|
|
42212
|
-
import { defineCommand as
|
|
42355
|
+
import { defineCommand as defineCommand153 } from "citty";
|
|
42213
42356
|
function makeTagsCommand(command, label, endpoint) {
|
|
42214
42357
|
registerSchema({
|
|
42215
42358
|
command: `${command}.tags`,
|
|
@@ -42218,7 +42361,7 @@ function makeTagsCommand(command, label, endpoint) {
|
|
|
42218
42361
|
output: { type: "string", description: "Output format: md|json", required: false, default: "md" }
|
|
42219
42362
|
}
|
|
42220
42363
|
});
|
|
42221
|
-
return
|
|
42364
|
+
return defineCommand153({
|
|
42222
42365
|
meta: {
|
|
42223
42366
|
name: "tags",
|
|
42224
42367
|
description: `List the available ${label} tag names (defaults + company custom tags). Use before filtering with --tags. Example: baker ${command} tags`
|
|
@@ -42254,7 +42397,7 @@ function makeTagsCommand(command, label, endpoint) {
|
|
|
42254
42397
|
var tagsCommand3 = makeTagsCommand("images", "image", "/api/images/tags");
|
|
42255
42398
|
|
|
42256
42399
|
// src/commands/images/upload.ts
|
|
42257
|
-
import { defineCommand as
|
|
42400
|
+
import { defineCommand as defineCommand154 } from "citty";
|
|
42258
42401
|
registerSchema({
|
|
42259
42402
|
command: "images.upload",
|
|
42260
42403
|
description: "Upload an image to the library \u2014 local file path or remote http(s) URL.",
|
|
@@ -42292,7 +42435,7 @@ registerSchema({
|
|
|
42292
42435
|
function isRemoteUrl2(value) {
|
|
42293
42436
|
return /^https?:\/\//i.test(value);
|
|
42294
42437
|
}
|
|
42295
|
-
var uploadCommand =
|
|
42438
|
+
var uploadCommand = defineCommand154({
|
|
42296
42439
|
meta: {
|
|
42297
42440
|
name: "upload",
|
|
42298
42441
|
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'"
|
|
@@ -42385,7 +42528,7 @@ async function uploadLocal(target, args) {
|
|
|
42385
42528
|
}
|
|
42386
42529
|
|
|
42387
42530
|
// src/commands/images/upscale.ts
|
|
42388
|
-
import { defineCommand as
|
|
42531
|
+
import { defineCommand as defineCommand155 } from "citty";
|
|
42389
42532
|
registerSchema({
|
|
42390
42533
|
command: "images.upscale",
|
|
42391
42534
|
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).",
|
|
@@ -42400,7 +42543,7 @@ registerSchema({
|
|
|
42400
42543
|
}
|
|
42401
42544
|
});
|
|
42402
42545
|
var POLL_INTERVAL_MS4 = 1500;
|
|
42403
|
-
var upscaleCommand =
|
|
42546
|
+
var upscaleCommand = defineCommand155({
|
|
42404
42547
|
meta: {
|
|
42405
42548
|
name: "upscale",
|
|
42406
42549
|
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"
|
|
@@ -42455,7 +42598,7 @@ var upscaleCommand = defineCommand154({
|
|
|
42455
42598
|
});
|
|
42456
42599
|
|
|
42457
42600
|
// src/commands/images/use.ts
|
|
42458
|
-
import { defineCommand as
|
|
42601
|
+
import { defineCommand as defineCommand156 } from "citty";
|
|
42459
42602
|
registerSchema({
|
|
42460
42603
|
command: "images.use",
|
|
42461
42604
|
description: "Ingest a URL and wait for the library record to be ready.",
|
|
@@ -42484,7 +42627,7 @@ function emitReady(ingestResult, doc, args) {
|
|
|
42484
42627
|
args.full === true
|
|
42485
42628
|
);
|
|
42486
42629
|
}
|
|
42487
|
-
var useCommand =
|
|
42630
|
+
var useCommand = defineCommand156({
|
|
42488
42631
|
meta: {
|
|
42489
42632
|
name: "use",
|
|
42490
42633
|
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"
|
|
@@ -42533,7 +42676,7 @@ var useCommand = defineCommand155({
|
|
|
42533
42676
|
});
|
|
42534
42677
|
|
|
42535
42678
|
// src/commands/images/index.ts
|
|
42536
|
-
var imagesCommand =
|
|
42679
|
+
var imagesCommand = defineCommand157({
|
|
42537
42680
|
meta: {
|
|
42538
42681
|
name: "images",
|
|
42539
42682
|
description: `Find, source, and normalize images. Subcommands route by provider so cost + license are explicit.
|
|
@@ -42611,12 +42754,12 @@ Full guide: __tooling__/docs/tools/baker/images.md`
|
|
|
42611
42754
|
});
|
|
42612
42755
|
|
|
42613
42756
|
// src/commands/landing/index.ts
|
|
42614
|
-
import { defineCommand as
|
|
42757
|
+
import { defineCommand as defineCommand168 } from "citty";
|
|
42615
42758
|
|
|
42616
42759
|
// src/commands/landing/critique.ts
|
|
42617
42760
|
import { readdir as readdir11, stat as stat7 } from "fs/promises";
|
|
42618
42761
|
import path31 from "path";
|
|
42619
|
-
import { defineCommand as
|
|
42762
|
+
import { defineCommand as defineCommand158 } from "citty";
|
|
42620
42763
|
|
|
42621
42764
|
// src/engine/landing/lib/constants.ts
|
|
42622
42765
|
var OVERUSED_FONTS = /* @__PURE__ */ new Set([
|
|
@@ -43685,7 +43828,7 @@ function fail5(code, message, fix) {
|
|
|
43685
43828
|
);
|
|
43686
43829
|
process.exit(2);
|
|
43687
43830
|
}
|
|
43688
|
-
var critiqueCommand2 =
|
|
43831
|
+
var critiqueCommand2 = defineCommand158({
|
|
43689
43832
|
meta: {
|
|
43690
43833
|
name: "critique",
|
|
43691
43834
|
description: "Start here: `baker landing critique <slug>` after building or editing a landing. Deterministic design-quality critic (ADVISORY \u2014 findings never fail it). Flags the known AI design tells (gradient text, overused fonts, side-tab borders, cream palettes, buzzword copy, broken images) tiered block/warn/advisory, respecting the client's BRAND.md as the allowlist. Also records the critique that publishing requires \u2014 run it before finishing a landing."
|
|
@@ -43794,10 +43937,10 @@ async function isDir(p) {
|
|
|
43794
43937
|
}
|
|
43795
43938
|
|
|
43796
43939
|
// src/commands/landing/inspiration/index.ts
|
|
43797
|
-
import { defineCommand as
|
|
43940
|
+
import { defineCommand as defineCommand167 } from "citty";
|
|
43798
43941
|
|
|
43799
43942
|
// src/commands/landing/inspiration/add.ts
|
|
43800
|
-
import { defineCommand as
|
|
43943
|
+
import { defineCommand as defineCommand159 } from "citty";
|
|
43801
43944
|
|
|
43802
43945
|
// src/commands/landing/inspiration/shared.ts
|
|
43803
43946
|
var INSPIRATION_HINTS = {
|
|
@@ -43879,7 +44022,7 @@ registerSchema({
|
|
|
43879
44022
|
note: { type: "string", description: "Why this page is worth keeping", required: false }
|
|
43880
44023
|
}
|
|
43881
44024
|
});
|
|
43882
|
-
var addCommand =
|
|
44025
|
+
var addCommand = defineCommand159({
|
|
43883
44026
|
meta: {
|
|
43884
44027
|
name: "add",
|
|
43885
44028
|
description: "Add someone else's landing page to the reference library. Example: baker landing inspiration add https://linear.app --note 'the client likes this density'"
|
|
@@ -43921,7 +44064,7 @@ var addCommand = defineCommand158({
|
|
|
43921
44064
|
// src/commands/landing/inspiration/code.ts
|
|
43922
44065
|
import { mkdir as mkdir10, writeFile as writeFile14 } from "fs/promises";
|
|
43923
44066
|
import path32 from "path";
|
|
43924
|
-
import { defineCommand as
|
|
44067
|
+
import { defineCommand as defineCommand160 } from "citty";
|
|
43925
44068
|
registerSchema({
|
|
43926
44069
|
command: "landing.inspiration.code",
|
|
43927
44070
|
description: "Write a reference section's standalone HTML+CSS to .baker/inspiration/<id>/ so you can read how it is built. Reference only \u2014 the structure is the lesson, the words are not yours to reuse.",
|
|
@@ -43930,7 +44073,7 @@ registerSchema({
|
|
|
43930
44073
|
full: { type: "boolean", description: "Print the markup inline as well as writing it", required: false }
|
|
43931
44074
|
}
|
|
43932
44075
|
});
|
|
43933
|
-
var codeCommand =
|
|
44076
|
+
var codeCommand = defineCommand160({
|
|
43934
44077
|
meta: {
|
|
43935
44078
|
name: "code",
|
|
43936
44079
|
description: "Write one reference section's standalone markup to disk. Example: baker landing inspiration code k57abc\u2026 \u2014 read it for structure, then build your own."
|
|
@@ -43976,7 +44119,7 @@ var codeCommand = defineCommand159({
|
|
|
43976
44119
|
});
|
|
43977
44120
|
|
|
43978
44121
|
// src/commands/landing/inspiration/favorites.ts
|
|
43979
|
-
import { defineCommand as
|
|
44122
|
+
import { defineCommand as defineCommand161 } from "citty";
|
|
43980
44123
|
registerSchema({
|
|
43981
44124
|
command: "landing.inspiration.favorites",
|
|
43982
44125
|
description: "List the reference sections this company has saved. This is what `search` looks at by default, so it is the client's own taste profile \u2014 read it before proposing a direction.",
|
|
@@ -43990,7 +44133,7 @@ registerSchema({
|
|
|
43990
44133
|
}
|
|
43991
44134
|
}
|
|
43992
44135
|
});
|
|
43993
|
-
var favoritesCommand =
|
|
44136
|
+
var favoritesCommand = defineCommand161({
|
|
43994
44137
|
meta: {
|
|
43995
44138
|
name: "favorites",
|
|
43996
44139
|
description: "List this company's saved reference sections. Example: baker landing inspiration favorites --type hero,pricing"
|
|
@@ -44070,7 +44213,7 @@ registerSchema({
|
|
|
44070
44213
|
note: { type: "string", description: "Why this is worth keeping", required: false }
|
|
44071
44214
|
}
|
|
44072
44215
|
});
|
|
44073
|
-
var favoriteCommand =
|
|
44216
|
+
var favoriteCommand = defineCommand161({
|
|
44074
44217
|
meta: {
|
|
44075
44218
|
name: "favorite",
|
|
44076
44219
|
description: "Save a reference section to this company. Example: baker landing inspiration favorite k57abc\u2026"
|
|
@@ -44108,7 +44251,7 @@ registerSchema({
|
|
|
44108
44251
|
page: { type: "boolean", description: "Treat the id as a page rather than a section", required: false }
|
|
44109
44252
|
}
|
|
44110
44253
|
});
|
|
44111
|
-
var unfavoriteCommand =
|
|
44254
|
+
var unfavoriteCommand = defineCommand161({
|
|
44112
44255
|
meta: {
|
|
44113
44256
|
name: "unfavorite",
|
|
44114
44257
|
description: "Remove a reference section from this company's saved set. Example: baker landing inspiration unfavorite k57abc\u2026"
|
|
@@ -44130,7 +44273,7 @@ var unfavoriteCommand = defineCommand160({
|
|
|
44130
44273
|
});
|
|
44131
44274
|
|
|
44132
44275
|
// src/commands/landing/inspiration/page.ts
|
|
44133
|
-
import { defineCommand as
|
|
44276
|
+
import { defineCommand as defineCommand162 } from "citty";
|
|
44134
44277
|
registerSchema({
|
|
44135
44278
|
command: "landing.inspiration.page",
|
|
44136
44279
|
description: "Show a whole reference page as a sequence: every section top to bottom with its type and the idea behind it. This is the view to use when the question is how a good page is ORDERED rather than what one section looks like.",
|
|
@@ -44147,7 +44290,7 @@ registerSchema({
|
|
|
44147
44290
|
}
|
|
44148
44291
|
}
|
|
44149
44292
|
});
|
|
44150
|
-
var pageCommand2 =
|
|
44293
|
+
var pageCommand2 = defineCommand162({
|
|
44151
44294
|
meta: {
|
|
44152
44295
|
name: "page",
|
|
44153
44296
|
description: "Show how a reference page sequences its sections. Example: baker landing inspiration page j91xyz\u2026 \u2014 the blueprint, not the pixels."
|
|
@@ -44210,7 +44353,7 @@ var pageCommand2 = defineCommand161({
|
|
|
44210
44353
|
});
|
|
44211
44354
|
|
|
44212
44355
|
// src/commands/landing/inspiration/scrape.ts
|
|
44213
|
-
import { defineCommand as
|
|
44356
|
+
import { defineCommand as defineCommand163 } from "citty";
|
|
44214
44357
|
|
|
44215
44358
|
// src/engine/landing-library/proxyFailure.ts
|
|
44216
44359
|
var PROXY_STATUS = 407;
|
|
@@ -46350,7 +46493,7 @@ registerSchema({
|
|
|
46350
46493
|
report: { type: "boolean", description: "Write report.html. `--no-report` to skip", required: false }
|
|
46351
46494
|
}
|
|
46352
46495
|
});
|
|
46353
|
-
var scrapeCommand =
|
|
46496
|
+
var scrapeCommand = defineCommand163({
|
|
46354
46497
|
meta: {
|
|
46355
46498
|
name: "scrape",
|
|
46356
46499
|
description: "Capture a landing page to a directory, now. Example: baker landing inspiration scrape https://linear.app --out .baker/inspiration/linear.app"
|
|
@@ -46459,7 +46602,7 @@ var scrapeCommand = defineCommand162({
|
|
|
46459
46602
|
|
|
46460
46603
|
// src/commands/landing/inspiration/search.ts
|
|
46461
46604
|
import path37 from "path";
|
|
46462
|
-
import { defineCommand as
|
|
46605
|
+
import { defineCommand as defineCommand164 } from "citty";
|
|
46463
46606
|
|
|
46464
46607
|
// src/commands/landing/inspiration/shot.ts
|
|
46465
46608
|
import { mkdir as mkdir12, writeFile as writeFile17 } from "fs/promises";
|
|
@@ -46596,7 +46739,7 @@ async function downloadShots(results) {
|
|
|
46596
46739
|
);
|
|
46597
46740
|
return saved;
|
|
46598
46741
|
}
|
|
46599
|
-
var searchCommand2 =
|
|
46742
|
+
var searchCommand2 = defineCommand164({
|
|
46600
46743
|
meta: {
|
|
46601
46744
|
name: "search",
|
|
46602
46745
|
description: "Search real landing-page sections for reference. Example: baker landing inspiration search 'dark developer hero with a terminal' --register dev-tool-minimal --scope all"
|
|
@@ -46694,7 +46837,7 @@ var searchCommand2 = defineCommand163({
|
|
|
46694
46837
|
});
|
|
46695
46838
|
|
|
46696
46839
|
// src/commands/landing/inspiration/sequences.ts
|
|
46697
|
-
import { defineCommand as
|
|
46840
|
+
import { defineCommand as defineCommand165 } from "citty";
|
|
46698
46841
|
var COMPACT_TRANSITIONS = 12;
|
|
46699
46842
|
var COMPACT_ENDS = 5;
|
|
46700
46843
|
var MAX_PAGES = 50;
|
|
@@ -46768,7 +46911,7 @@ function sequencesHints(data, { scope, full }) {
|
|
|
46768
46911
|
if (scope === "favorites") hints.push(...favoritesScopeHints(data.favoritesHealth, data.pagesReturned));
|
|
46769
46912
|
return hints;
|
|
46770
46913
|
}
|
|
46771
|
-
var sequencesCommand =
|
|
46914
|
+
var sequencesCommand = defineCommand165({
|
|
46772
46915
|
meta: {
|
|
46773
46916
|
name: "sequences",
|
|
46774
46917
|
description: "What section follows what, across many real pages at once. Example: baker landing inspiration sequences 'developer tool pricing page' --scope all \u2014 the evidence for how to order a page you are about to build."
|
|
@@ -46818,7 +46961,7 @@ var sequencesCommand = defineCommand164({
|
|
|
46818
46961
|
|
|
46819
46962
|
// src/commands/landing/inspiration/view.ts
|
|
46820
46963
|
import path38 from "path";
|
|
46821
|
-
import { defineCommand as
|
|
46964
|
+
import { defineCommand as defineCommand166 } from "citty";
|
|
46822
46965
|
registerSchema({
|
|
46823
46966
|
command: "landing.inspiration.view",
|
|
46824
46967
|
description: "Everything known about one section: composition, motion, design tokens, the copy it uses, why it works, and what must change to make it yours. Downloads the desktop and mobile screenshots plus the motion filmstrip so you can look at them.",
|
|
@@ -46831,7 +46974,7 @@ registerSchema({
|
|
|
46831
46974
|
}
|
|
46832
46975
|
}
|
|
46833
46976
|
});
|
|
46834
|
-
var viewCommand2 =
|
|
46977
|
+
var viewCommand2 = defineCommand166({
|
|
46835
46978
|
meta: {
|
|
46836
46979
|
name: "view",
|
|
46837
46980
|
description: "Full detail for one reference section. Example: baker landing inspiration view k57abc\u2026 \u2014 read the screenshots it saves before you build."
|
|
@@ -46915,7 +47058,7 @@ var viewCommand2 = defineCommand165({
|
|
|
46915
47058
|
});
|
|
46916
47059
|
|
|
46917
47060
|
// src/commands/landing/inspiration/index.ts
|
|
46918
|
-
var inspirationCommand =
|
|
47061
|
+
var inspirationCommand = defineCommand167({
|
|
46919
47062
|
meta: {
|
|
46920
47063
|
name: "inspiration",
|
|
46921
47064
|
description: `Reference library of real landing-page sections \u2014 look at how good pages actually solve a problem before you design one.
|
|
@@ -46960,7 +47103,7 @@ Full guide: __tooling__/docs/tools/baker/landing.md`
|
|
|
46960
47103
|
});
|
|
46961
47104
|
|
|
46962
47105
|
// src/commands/landing/index.ts
|
|
46963
|
-
var landingCommand =
|
|
47106
|
+
var landingCommand = defineCommand168({
|
|
46964
47107
|
meta: {
|
|
46965
47108
|
name: "landing",
|
|
46966
47109
|
description: `Design-quality tools for landing pages (src/pages/<slug>/).
|
|
@@ -46978,7 +47121,7 @@ Subcommands:
|
|
|
46978
47121
|
});
|
|
46979
47122
|
|
|
46980
47123
|
// src/commands/mcp/index.ts
|
|
46981
|
-
import { defineCommand as
|
|
47124
|
+
import { defineCommand as defineCommand169 } from "citty";
|
|
46982
47125
|
|
|
46983
47126
|
// src/commands/mcp/platforms.ts
|
|
46984
47127
|
function readsKey(label) {
|
|
@@ -47047,7 +47190,7 @@ registerSchema({
|
|
|
47047
47190
|
description: "List everything this chat can reach: managed integrations (Attio, Slack, Gmail, Google Sheets, \u2026), custom MCP servers, and the platforms the company signed in to (HubSpot, Google Ads, GA4, Search Console, Tag Manager) which you read through their own `baker` commands. Start here when the user mentions an external tool or platform.",
|
|
47048
47191
|
args: {}
|
|
47049
47192
|
});
|
|
47050
|
-
var connectedCommand =
|
|
47193
|
+
var connectedCommand = defineCommand169({
|
|
47051
47194
|
meta: {
|
|
47052
47195
|
name: "connected",
|
|
47053
47196
|
description: `Everything this chat can reach \u2014 managed integrations, custom MCP servers, and connected platforms.
|
|
@@ -47106,7 +47249,7 @@ registerSchema({
|
|
|
47106
47249
|
description: "List the custom MCP servers this company's chats see (org + company + your own user scope).",
|
|
47107
47250
|
args: {}
|
|
47108
47251
|
});
|
|
47109
|
-
var listCommand14 =
|
|
47252
|
+
var listCommand14 = defineCommand169({
|
|
47110
47253
|
meta: { name: "list", description: "List custom MCP servers visible to this company's chats." },
|
|
47111
47254
|
run: async () => {
|
|
47112
47255
|
try {
|
|
@@ -47143,7 +47286,7 @@ registerSchema({
|
|
|
47143
47286
|
header: { type: "string", description: 'Auth header "Key: Value" (repeatable)', required: false }
|
|
47144
47287
|
}
|
|
47145
47288
|
});
|
|
47146
|
-
var addCommand2 =
|
|
47289
|
+
var addCommand2 = defineCommand169({
|
|
47147
47290
|
meta: {
|
|
47148
47291
|
name: "add",
|
|
47149
47292
|
description: `Register a custom MCP server. Tools appear as mcp__<name>__* on the NEXT message.
|
|
@@ -47195,7 +47338,7 @@ registerSchema({
|
|
|
47195
47338
|
description: "Remove a company custom MCP server by name.",
|
|
47196
47339
|
args: { name: { type: "string", description: "Server name to remove", required: true } }
|
|
47197
47340
|
});
|
|
47198
|
-
var removeCommand4 =
|
|
47341
|
+
var removeCommand4 = defineCommand169({
|
|
47199
47342
|
meta: {
|
|
47200
47343
|
name: "remove",
|
|
47201
47344
|
description: `Remove a company custom MCP server by name.
|
|
@@ -47217,7 +47360,7 @@ Example:
|
|
|
47217
47360
|
}
|
|
47218
47361
|
}
|
|
47219
47362
|
});
|
|
47220
|
-
var mcpCommand =
|
|
47363
|
+
var mcpCommand = defineCommand169({
|
|
47221
47364
|
meta: {
|
|
47222
47365
|
name: "mcp",
|
|
47223
47366
|
description: `Third-party tools for this company \u2014 see what's connected, register custom HTTPS MCP endpoints.
|
|
@@ -47243,10 +47386,10 @@ Full guide: __tooling__/docs/tools/baker/mcp.md`
|
|
|
47243
47386
|
});
|
|
47244
47387
|
|
|
47245
47388
|
// src/commands/research/index.ts
|
|
47246
|
-
import { defineCommand as
|
|
47389
|
+
import { defineCommand as defineCommand181 } from "citty";
|
|
47247
47390
|
|
|
47248
47391
|
// src/commands/research/advertisers.ts
|
|
47249
|
-
import { defineCommand as
|
|
47392
|
+
import { defineCommand as defineCommand170 } from "citty";
|
|
47250
47393
|
|
|
47251
47394
|
// src/commands/research/hints.ts
|
|
47252
47395
|
var AD_COPY_ROUTE = 'This returns competing DOMAINS and their SERP economics \u2014 no ad copy, no headlines, no creative. For the actual copy of a competitor\'s ads: `baker winning-ads advertisers "<brand>"` \u2192 `baker winning-ads search "<brief>" --advertiser-id <id>` \u2192 `baker winning-ads content <adId>` (`primary_text` / `headline` / `cta`, plus the spoken transcript and on-screen text for video). That corpus is Meta and LinkedIn only \u2014 Google SERP ad copy is not available through any Baker command, so do not keep querying for it here.';
|
|
@@ -47429,7 +47572,7 @@ var FIELDS3 = {
|
|
|
47429
47572
|
etv: "Estimated traffic value (USD)",
|
|
47430
47573
|
visibility: "SERP visibility score (0-1)"
|
|
47431
47574
|
};
|
|
47432
|
-
var advertisersCommand =
|
|
47575
|
+
var advertisersCommand = defineCommand170({
|
|
47433
47576
|
meta: {
|
|
47434
47577
|
name: "advertisers",
|
|
47435
47578
|
description: `Domains competing for a keyword in Google SERPs, with position, relevance, traffic value and visibility. Returns NO ad copy \u2014 for a competitor's headlines and body copy use \`baker winning-ads content <adId>\` (Meta/LinkedIn only).
|
|
@@ -47485,7 +47628,7 @@ Examples:
|
|
|
47485
47628
|
});
|
|
47486
47629
|
|
|
47487
47630
|
// src/commands/research/autocomplete.ts
|
|
47488
|
-
import { defineCommand as
|
|
47631
|
+
import { defineCommand as defineCommand171 } from "citty";
|
|
47489
47632
|
registerSchema({
|
|
47490
47633
|
command: "research.autocomplete",
|
|
47491
47634
|
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).",
|
|
@@ -47508,7 +47651,7 @@ registerSchema({
|
|
|
47508
47651
|
var FIELDS4 = {
|
|
47509
47652
|
suggestion: "Autocomplete suggestion from Google"
|
|
47510
47653
|
};
|
|
47511
|
-
var autocompleteCommand =
|
|
47654
|
+
var autocompleteCommand = defineCommand171({
|
|
47512
47655
|
meta: {
|
|
47513
47656
|
name: "autocomplete",
|
|
47514
47657
|
description: `Get Google Autocomplete suggestions for keyword expansion.
|
|
@@ -47563,7 +47706,7 @@ Examples:
|
|
|
47563
47706
|
});
|
|
47564
47707
|
|
|
47565
47708
|
// src/commands/research/countries.ts
|
|
47566
|
-
import { defineCommand as
|
|
47709
|
+
import { defineCommand as defineCommand172 } from "citty";
|
|
47567
47710
|
registerSchema({
|
|
47568
47711
|
command: "research.countries",
|
|
47569
47712
|
description: "List all supported country codes for --location flag in research commands.",
|
|
@@ -47620,7 +47763,7 @@ var FIELDS5 = {
|
|
|
47620
47763
|
code: "Country code to pass as --location",
|
|
47621
47764
|
name: "Country name"
|
|
47622
47765
|
};
|
|
47623
|
-
var countriesCommand =
|
|
47766
|
+
var countriesCommand = defineCommand172({
|
|
47624
47767
|
meta: {
|
|
47625
47768
|
name: "countries",
|
|
47626
47769
|
description: "List all supported country codes for --location flag."
|
|
@@ -47631,7 +47774,7 @@ var countriesCommand = defineCommand171({
|
|
|
47631
47774
|
});
|
|
47632
47775
|
|
|
47633
47776
|
// src/commands/research/fetch.ts
|
|
47634
|
-
import { defineCommand as
|
|
47777
|
+
import { defineCommand as defineCommand173 } from "citty";
|
|
47635
47778
|
var CONTENT_PREVIEW_CHARS = 2e4;
|
|
47636
47779
|
var TIMEOUT_MS = 18e4;
|
|
47637
47780
|
registerSchema({
|
|
@@ -47704,7 +47847,7 @@ function fetchFix(code) {
|
|
|
47704
47847
|
explanation: "This read failed. Don't build a retry ladder around it \u2014 finish the rest of the job with what you can reach and name this page as a gap."
|
|
47705
47848
|
};
|
|
47706
47849
|
}
|
|
47707
|
-
var fetchCommand =
|
|
47850
|
+
var fetchCommand = defineCommand173({
|
|
47708
47851
|
meta: {
|
|
47709
47852
|
name: "fetch",
|
|
47710
47853
|
description: `Read a page an ordinary web fetch could not. Bot walls and JavaScript-rendered pages are resolved for you \u2014 you never have to retry, wait, or drive a browser yourself.
|
|
@@ -47781,7 +47924,7 @@ Examples:
|
|
|
47781
47924
|
});
|
|
47782
47925
|
|
|
47783
47926
|
// src/commands/research/intent.ts
|
|
47784
|
-
import { defineCommand as
|
|
47927
|
+
import { defineCommand as defineCommand174 } from "citty";
|
|
47785
47928
|
registerSchema({
|
|
47786
47929
|
command: "research.intent",
|
|
47787
47930
|
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.",
|
|
@@ -47804,7 +47947,7 @@ var FIELDS7 = {
|
|
|
47804
47947
|
intent: "Primary Google Search intent: informational, navigational, commercial, transactional",
|
|
47805
47948
|
probability: "Confidence score 0.0-1.0"
|
|
47806
47949
|
};
|
|
47807
|
-
var intentCommand =
|
|
47950
|
+
var intentCommand = defineCommand174({
|
|
47808
47951
|
meta: {
|
|
47809
47952
|
name: "intent",
|
|
47810
47953
|
description: `Classify Google Search intent for keywords. Returns intent type and confidence.
|
|
@@ -47852,7 +47995,7 @@ Examples:
|
|
|
47852
47995
|
});
|
|
47853
47996
|
|
|
47854
47997
|
// src/commands/research/keyword-gap.ts
|
|
47855
|
-
import { defineCommand as
|
|
47998
|
+
import { defineCommand as defineCommand175 } from "citty";
|
|
47856
47999
|
registerSchema({
|
|
47857
48000
|
command: "research.keyword-gap",
|
|
47858
48001
|
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.",
|
|
@@ -47881,7 +48024,7 @@ var FIELDS8 = {
|
|
|
47881
48024
|
cpc: "Cost per click USD",
|
|
47882
48025
|
their_position: "Competitor's ranking position"
|
|
47883
48026
|
};
|
|
47884
|
-
var keywordGapCommand =
|
|
48027
|
+
var keywordGapCommand = defineCommand175({
|
|
47885
48028
|
meta: {
|
|
47886
48029
|
name: "keyword-gap",
|
|
47887
48030
|
description: `Find keywords a competitor has that you don't. Supports pagination via --offset.
|
|
@@ -47956,7 +48099,7 @@ Examples:
|
|
|
47956
48099
|
});
|
|
47957
48100
|
|
|
47958
48101
|
// src/commands/research/keywords-for-site.ts
|
|
47959
|
-
import { defineCommand as
|
|
48102
|
+
import { defineCommand as defineCommand176 } from "citty";
|
|
47960
48103
|
registerSchema({
|
|
47961
48104
|
command: "research.keywords-for-site",
|
|
47962
48105
|
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.",
|
|
@@ -47989,7 +48132,7 @@ var FIELDS9 = {
|
|
|
47989
48132
|
competition: "LOW, MEDIUM, or HIGH",
|
|
47990
48133
|
competition_index: "Competition score 0-100"
|
|
47991
48134
|
};
|
|
47992
|
-
var keywordsForSiteCommand =
|
|
48135
|
+
var keywordsForSiteCommand = defineCommand176({
|
|
47993
48136
|
meta: {
|
|
47994
48137
|
name: "keywords-for-site",
|
|
47995
48138
|
description: `Get keywords a competitor targets in Google. Use --type to filter paid/organic.
|
|
@@ -48051,7 +48194,7 @@ Examples:
|
|
|
48051
48194
|
});
|
|
48052
48195
|
|
|
48053
48196
|
// src/commands/research/languages.ts
|
|
48054
|
-
import { defineCommand as
|
|
48197
|
+
import { defineCommand as defineCommand177 } from "citty";
|
|
48055
48198
|
registerSchema({
|
|
48056
48199
|
command: "research.languages",
|
|
48057
48200
|
description: "List all supported language codes for --language flag in research commands.",
|
|
@@ -48081,7 +48224,7 @@ var FIELDS10 = {
|
|
|
48081
48224
|
code: "Language code to pass as --language",
|
|
48082
48225
|
name: "Language name (also accepted by --language)"
|
|
48083
48226
|
};
|
|
48084
|
-
var languagesCommand2 =
|
|
48227
|
+
var languagesCommand2 = defineCommand177({
|
|
48085
48228
|
meta: {
|
|
48086
48229
|
name: "languages",
|
|
48087
48230
|
description: "List all supported language codes for --language flag."
|
|
@@ -48092,7 +48235,7 @@ var languagesCommand2 = defineCommand176({
|
|
|
48092
48235
|
});
|
|
48093
48236
|
|
|
48094
48237
|
// src/commands/research/lighthouse.ts
|
|
48095
|
-
import { defineCommand as
|
|
48238
|
+
import { defineCommand as defineCommand178 } from "citty";
|
|
48096
48239
|
registerSchema({
|
|
48097
48240
|
command: "research.lighthouse",
|
|
48098
48241
|
description: "Landing page performance audit. Returns metrics that affect Google Ads Quality Score and CPC.",
|
|
@@ -48111,7 +48254,7 @@ var FIELDS11 = {
|
|
|
48111
48254
|
speed_index_ms: "Speed Index in ms (good: < 3400)",
|
|
48112
48255
|
interactive_ms: "Time to Interactive in ms (good: < 3800)"
|
|
48113
48256
|
};
|
|
48114
|
-
var lighthouseCommand =
|
|
48257
|
+
var lighthouseCommand = defineCommand178({
|
|
48115
48258
|
meta: {
|
|
48116
48259
|
name: "lighthouse",
|
|
48117
48260
|
description: `Landing page performance audit. Metrics affecting Google Ads Quality Score.
|
|
@@ -48149,7 +48292,7 @@ Examples:
|
|
|
48149
48292
|
});
|
|
48150
48293
|
|
|
48151
48294
|
// src/commands/research/relevant-pages.ts
|
|
48152
|
-
import { defineCommand as
|
|
48295
|
+
import { defineCommand as defineCommand179 } from "citty";
|
|
48153
48296
|
registerSchema({
|
|
48154
48297
|
command: "research.relevant-pages",
|
|
48155
48298
|
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).",
|
|
@@ -48175,7 +48318,7 @@ var FIELDS12 = {
|
|
|
48175
48318
|
keywords: "Total organic keywords the page ranks for",
|
|
48176
48319
|
top_10: "Keywords in positions 1-10"
|
|
48177
48320
|
};
|
|
48178
|
-
var relevantPagesCommand =
|
|
48321
|
+
var relevantPagesCommand = defineCommand179({
|
|
48179
48322
|
meta: {
|
|
48180
48323
|
name: "relevant-pages",
|
|
48181
48324
|
description: `Get the top pages of a competitor domain with traffic data.
|
|
@@ -48222,7 +48365,7 @@ Examples:
|
|
|
48222
48365
|
});
|
|
48223
48366
|
|
|
48224
48367
|
// src/commands/research/web.ts
|
|
48225
|
-
import { defineCommand as
|
|
48368
|
+
import { defineCommand as defineCommand180 } from "citty";
|
|
48226
48369
|
registerSchema({
|
|
48227
48370
|
command: "research.web",
|
|
48228
48371
|
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).",
|
|
@@ -48273,7 +48416,7 @@ async function runDeepResearch(question) {
|
|
|
48273
48416
|
}
|
|
48274
48417
|
throw new Error("Deep research timed out");
|
|
48275
48418
|
}
|
|
48276
|
-
var webCommand =
|
|
48419
|
+
var webCommand = defineCommand180({
|
|
48277
48420
|
meta: {
|
|
48278
48421
|
name: "web",
|
|
48279
48422
|
description: `Search the web with AI to answer any open-ended marketing question. Uses live internet data via Google Search.
|
|
@@ -48335,7 +48478,7 @@ Examples:
|
|
|
48335
48478
|
});
|
|
48336
48479
|
|
|
48337
48480
|
// src/commands/research/index.ts
|
|
48338
|
-
var researchCommand =
|
|
48481
|
+
var researchCommand = defineCommand181({
|
|
48339
48482
|
meta: {
|
|
48340
48483
|
name: "research",
|
|
48341
48484
|
description: `Competitive intelligence and AI-powered research commands.
|
|
@@ -48379,10 +48522,10 @@ Full guide: __tooling__/docs/tools/baker/research.md`
|
|
|
48379
48522
|
});
|
|
48380
48523
|
|
|
48381
48524
|
// src/commands/scheduled-actions/index.ts
|
|
48382
|
-
import { defineCommand as
|
|
48525
|
+
import { defineCommand as defineCommand189 } from "citty";
|
|
48383
48526
|
|
|
48384
48527
|
// src/commands/scheduled-actions/create.ts
|
|
48385
|
-
import { defineCommand as
|
|
48528
|
+
import { defineCommand as defineCommand182 } from "citty";
|
|
48386
48529
|
|
|
48387
48530
|
// src/commands/scheduled-actions/shared.ts
|
|
48388
48531
|
var TEMP_SCHEDULED_ACTION_PREFIX = "temp_sched_";
|
|
@@ -48529,7 +48672,7 @@ registerSchema({
|
|
|
48529
48672
|
}
|
|
48530
48673
|
}
|
|
48531
48674
|
});
|
|
48532
|
-
var createCommand3 =
|
|
48675
|
+
var createCommand3 = defineCommand182({
|
|
48533
48676
|
meta: {
|
|
48534
48677
|
name: "create",
|
|
48535
48678
|
description: 'Stage a scheduled action. Example: baker scheduled-actions create --name "Weekly report" --description "..." --cron "0 9 * * MON"'
|
|
@@ -48588,7 +48731,7 @@ var createCommand3 = defineCommand181({
|
|
|
48588
48731
|
});
|
|
48589
48732
|
|
|
48590
48733
|
// src/commands/scheduled-actions/delete.ts
|
|
48591
|
-
import { defineCommand as
|
|
48734
|
+
import { defineCommand as defineCommand183 } from "citty";
|
|
48592
48735
|
registerSchema({
|
|
48593
48736
|
command: "scheduled-actions.delete",
|
|
48594
48737
|
description: "Stage deletion of a published scheduled action or cancellation of a temp_sched_* draft creation.",
|
|
@@ -48596,7 +48739,7 @@ registerSchema({
|
|
|
48596
48739
|
id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
|
|
48597
48740
|
}
|
|
48598
48741
|
});
|
|
48599
|
-
var deleteCommand3 =
|
|
48742
|
+
var deleteCommand3 = defineCommand183({
|
|
48600
48743
|
meta: {
|
|
48601
48744
|
name: "delete",
|
|
48602
48745
|
description: "Stage scheduled action deletion. Example: baker scheduled-actions delete <id-or-temp_sched_id>"
|
|
@@ -48625,7 +48768,7 @@ var deleteCommand3 = defineCommand182({
|
|
|
48625
48768
|
});
|
|
48626
48769
|
|
|
48627
48770
|
// src/commands/scheduled-actions/get.ts
|
|
48628
|
-
import { defineCommand as
|
|
48771
|
+
import { defineCommand as defineCommand184 } from "citty";
|
|
48629
48772
|
registerSchema({
|
|
48630
48773
|
command: "scheduled-actions.get",
|
|
48631
48774
|
description: "Get a published scheduled action or a temp_sched_* draft-created scheduled action.",
|
|
@@ -48634,7 +48777,7 @@ registerSchema({
|
|
|
48634
48777
|
chat: { type: "string", description: CHAT_READ_ARG.description, required: false }
|
|
48635
48778
|
}
|
|
48636
48779
|
});
|
|
48637
|
-
var getCommand4 =
|
|
48780
|
+
var getCommand4 = defineCommand184({
|
|
48638
48781
|
meta: {
|
|
48639
48782
|
name: "get",
|
|
48640
48783
|
description: "Get a scheduled action. Example: baker scheduled-actions get <id-or-temp_sched_id>"
|
|
@@ -48673,7 +48816,7 @@ var getCommand4 = defineCommand183({
|
|
|
48673
48816
|
});
|
|
48674
48817
|
|
|
48675
48818
|
// src/commands/scheduled-actions/list.ts
|
|
48676
|
-
import { defineCommand as
|
|
48819
|
+
import { defineCommand as defineCommand185 } from "citty";
|
|
48677
48820
|
registerSchema({
|
|
48678
48821
|
command: "scheduled-actions.list",
|
|
48679
48822
|
description: "List published scheduled actions. Includes draft state when BAKER_CHAT_ID is set, or --chat <id> to read an earlier chat's staged schedules instead.",
|
|
@@ -48681,7 +48824,7 @@ registerSchema({
|
|
|
48681
48824
|
chat: { type: "string", description: CHAT_READ_ARG.description, required: false }
|
|
48682
48825
|
}
|
|
48683
48826
|
});
|
|
48684
|
-
var listCommand15 =
|
|
48827
|
+
var listCommand15 = defineCommand185({
|
|
48685
48828
|
meta: {
|
|
48686
48829
|
name: "list",
|
|
48687
48830
|
description: "List scheduled actions. Includes staged draft ops when BAKER_CHAT_ID is set, or --chat <id> to read an earlier chat's staged schedules instead."
|
|
@@ -48706,7 +48849,7 @@ var listCommand15 = defineCommand184({
|
|
|
48706
48849
|
// src/commands/scheduled-actions/templates.ts
|
|
48707
48850
|
import { readFile as readFile25 } from "fs/promises";
|
|
48708
48851
|
import path39 from "path";
|
|
48709
|
-
import { defineCommand as
|
|
48852
|
+
import { defineCommand as defineCommand186 } from "citty";
|
|
48710
48853
|
registerSchema({
|
|
48711
48854
|
command: "scheduled-actions.templates",
|
|
48712
48855
|
description: "The recipes available to this company: the ones Baker ships plus the ones they wrote themselves, each with its id, what it produces and how often it is meant to run. Read this before proposing a company's automation, so every recipe you name is one that exists. Also how a company gets a recipe of its own \u2014 save a brief, prove it runs, then publish it.",
|
|
@@ -48761,7 +48904,7 @@ registerSchema({
|
|
|
48761
48904
|
}
|
|
48762
48905
|
}
|
|
48763
48906
|
});
|
|
48764
|
-
var templatesCommand =
|
|
48907
|
+
var templatesCommand = defineCommand186({
|
|
48765
48908
|
meta: {
|
|
48766
48909
|
name: "templates",
|
|
48767
48910
|
description: `The recipes this company can run \u2014 Baker's own plus theirs, with what each one produces.
|
|
@@ -48853,7 +48996,7 @@ Full guide: __tooling__/docs/tools/baker/scheduled-actions.md`
|
|
|
48853
48996
|
});
|
|
48854
48997
|
|
|
48855
48998
|
// src/commands/scheduled-actions/trigger.ts
|
|
48856
|
-
import { defineCommand as
|
|
48999
|
+
import { defineCommand as defineCommand187 } from "citty";
|
|
48857
49000
|
registerSchema({
|
|
48858
49001
|
command: "scheduled-actions.trigger",
|
|
48859
49002
|
description: "Immediately trigger a published scheduled action. Does not require BAKER_CHAT_ID and rejects temp_sched_* IDs.",
|
|
@@ -48861,7 +49004,7 @@ registerSchema({
|
|
|
48861
49004
|
id: { type: "string", description: "Published scheduled action ID", required: true }
|
|
48862
49005
|
}
|
|
48863
49006
|
});
|
|
48864
|
-
var triggerCommand =
|
|
49007
|
+
var triggerCommand = defineCommand187({
|
|
48865
49008
|
meta: {
|
|
48866
49009
|
name: "trigger",
|
|
48867
49010
|
description: "Immediately trigger a published scheduled action. Example: baker scheduled-actions trigger <id>"
|
|
@@ -48898,7 +49041,7 @@ var triggerCommand = defineCommand186({
|
|
|
48898
49041
|
});
|
|
48899
49042
|
|
|
48900
49043
|
// src/commands/scheduled-actions/update.ts
|
|
48901
|
-
import { defineCommand as
|
|
49044
|
+
import { defineCommand as defineCommand188 } from "citty";
|
|
48902
49045
|
registerSchema({
|
|
48903
49046
|
command: "scheduled-actions.update",
|
|
48904
49047
|
description: "Stage an update to a published scheduled action or temp_sched_* draft-created scheduled action.",
|
|
@@ -48929,7 +49072,7 @@ registerSchema({
|
|
|
48929
49072
|
prompt: { type: "string", description: "Replacement additional spawned-agent instructions", required: false }
|
|
48930
49073
|
}
|
|
48931
49074
|
});
|
|
48932
|
-
var updateCommand3 =
|
|
49075
|
+
var updateCommand3 = defineCommand188({
|
|
48933
49076
|
meta: {
|
|
48934
49077
|
name: "update",
|
|
48935
49078
|
description: "Stage a scheduled action update. Examples: baker scheduled-actions update <id> --enabled false | baker scheduled-actions update <id> --mode publish"
|
|
@@ -49007,7 +49150,7 @@ var updateCommand3 = defineCommand187({
|
|
|
49007
49150
|
});
|
|
49008
49151
|
|
|
49009
49152
|
// src/commands/scheduled-actions/index.ts
|
|
49010
|
-
var scheduledActionsCommand =
|
|
49153
|
+
var scheduledActionsCommand = defineCommand189({
|
|
49011
49154
|
meta: {
|
|
49012
49155
|
name: "scheduled-actions",
|
|
49013
49156
|
description: `Manage Scheduled Actions. Subcommands: list, get, create, update, delete, trigger, templates.
|
|
@@ -49036,14 +49179,14 @@ Full guide: __tooling__/docs/tools/baker/scheduled-actions.md`
|
|
|
49036
49179
|
});
|
|
49037
49180
|
|
|
49038
49181
|
// src/commands/schema.ts
|
|
49039
|
-
import { defineCommand as
|
|
49182
|
+
import { defineCommand as defineCommand190 } from "citty";
|
|
49040
49183
|
function narrowToFamily(commandName, available) {
|
|
49041
49184
|
const segments = commandName.split(".");
|
|
49042
49185
|
const prefix = segments[0] === "ads" && segments[1] ? `ads.${segments[1]}.` : `${segments[0]}.`;
|
|
49043
49186
|
const siblings = available.filter((name) => name.startsWith(prefix));
|
|
49044
49187
|
return siblings.length > 0 ? siblings : available;
|
|
49045
49188
|
}
|
|
49046
|
-
var schemaCommand2 =
|
|
49189
|
+
var schemaCommand2 = defineCommand190({
|
|
49047
49190
|
meta: {
|
|
49048
49191
|
name: "schema",
|
|
49049
49192
|
description: "Inspect command argument schemas (for AI agent introspection). Lists all commands if no argument given. Example: baker schema images.search"
|
|
@@ -49087,10 +49230,10 @@ var schemaCommand2 = defineCommand189({
|
|
|
49087
49230
|
});
|
|
49088
49231
|
|
|
49089
49232
|
// src/commands/studio/index.ts
|
|
49090
|
-
import { defineCommand as
|
|
49233
|
+
import { defineCommand as defineCommand199 } from "citty";
|
|
49091
49234
|
|
|
49092
49235
|
// src/commands/studio/animate.ts
|
|
49093
|
-
import { defineCommand as
|
|
49236
|
+
import { defineCommand as defineCommand191 } from "citty";
|
|
49094
49237
|
|
|
49095
49238
|
// src/commands/studio/batch.ts
|
|
49096
49239
|
function projectBatch(generation, full) {
|
|
@@ -49541,7 +49684,7 @@ function costHintsFor(body) {
|
|
|
49541
49684
|
}
|
|
49542
49685
|
return hints;
|
|
49543
49686
|
}
|
|
49544
|
-
var animateCommand =
|
|
49687
|
+
var animateCommand = defineCommand191({
|
|
49545
49688
|
meta: {
|
|
49546
49689
|
name: "animate",
|
|
49547
49690
|
description: "Render a clip. With an image the look is already fixed, so the prompt describes MOVEMENT \u2014 what the camera does, what the subject does, in what order. With --from text there is no image and the prompt is the whole shot.\n\nA rendered clip is NOT usable anywhere until you keep it: `baker studio keep <id> --slot N` is what puts it in the video library. Takes nobody keeps are never ingested, which is what makes a rejected batch cheap.\n\nFor anything longer than 15 seconds, or to build on footage that already exists, use --model bytedance/seedance-2.5: it renders 4-30s and is the only model that reads an existing clip or an existing soundtrack.\n\nExamples:\n baker studio animate 'slow push in, model turns to camera and smiles' --image j57abc123def456ghi789\n baker studio animate 'she looks to camera and says: \"Hola, soy Elena\"' --avatar elena --quality 720p --aspect-ratio 9:16\n baker studio animate 'handheld drift right, steam rising from the cup' --image './out/hero.png' --duration 6 --quality 1080p\n baker studio animate 'product rotates once on a turntable' --image j57abc\u2026,j57def\u2026 --from references\n baker studio animate 'she keeps walking, camera stays with her, then she stops and looks up' --image j57abc\u2026 --from references --from-clip j57batch\u2026:0 --model bytedance/seedance-2.5 --duration 20\n baker studio animate 'hold on the product, then a slow push-in' --from references --from-video j57vid\u2026 --model bytedance/seedance-2.5\n baker studio animate 'slow drone pull-back over a solar farm at golden hour, no people' --from text --model bytedance/seedance-2.5 --duration 12"
|
|
@@ -49665,7 +49808,7 @@ var animateCommand = defineCommand190({
|
|
|
49665
49808
|
});
|
|
49666
49809
|
|
|
49667
49810
|
// src/commands/studio/generate.ts
|
|
49668
|
-
import { defineCommand as
|
|
49811
|
+
import { defineCommand as defineCommand192 } from "citty";
|
|
49669
49812
|
var MODEL_LIST2 = IMAGE_MODEL_IDS;
|
|
49670
49813
|
var DEFAULT_MAX_WAIT_MS2 = 24e4;
|
|
49671
49814
|
registerSchema({
|
|
@@ -49801,7 +49944,7 @@ function buildGenerateBody(args, prompt) {
|
|
|
49801
49944
|
}
|
|
49802
49945
|
return body;
|
|
49803
49946
|
}
|
|
49804
|
-
var generateCommand =
|
|
49947
|
+
var generateCommand = defineCommand192({
|
|
49805
49948
|
meta: {
|
|
49806
49949
|
name: "generate",
|
|
49807
49950
|
description: "Start here to make an image. Renders 1-8 takes of one brief, ingests each into the media library as it lands, and shows the batch in the dashboard Studio next to the ones the client ran.\n\nModel choice: google/gemini-3.1-flash-image-preview (default \u2014 fast, best at editing a reference and at extreme ratios), google/gemini-3-pro-image-preview (highest fidelity, slower), openai/gpt-image-2 (photoreal and the cleanest in-image text \u2014 no --image-size, no 4:5 / 5:4), recraft/recraft-v4.1-pro-vector (vector/flat marks with palette control).\n\n--reference is the biggest quality lever there is: a real logo, product shot, Pinterest pin or sandbox screenshot beats any amount of adjectives.\n\nExamples:\n baker studio generate 'matte black bottle on wet marble, hard studio light, 35mm' --aspect-ratio 3:2 --count 3\n baker studio generate 'this bottle on a sunlit kitchen counter' --reference './src/brand/product.png,https://\u2026/kitchen.jpg'\n baker studio generate 'founder-style selfie, kitchen background, natural light' --skill ugc-selfie-hook\n baker studio generate 'flat geometric mascot, brand palette' --model recraft/recraft-v4.1-pro-vector --rgb-colors '[[10,10,10],[255,80,0]]'"
|
|
@@ -49884,7 +50027,7 @@ var generateCommand = defineCommand191({
|
|
|
49884
50027
|
});
|
|
49885
50028
|
|
|
49886
50029
|
// src/commands/studio/get.ts
|
|
49887
|
-
import { defineCommand as
|
|
50030
|
+
import { defineCommand as defineCommand193 } from "citty";
|
|
49888
50031
|
registerSchema({
|
|
49889
50032
|
command: "studio.get",
|
|
49890
50033
|
description: "Read one Studio batch: every take, where it lives, and why a take is missing. This is how you pick up a batch that was still rendering when the start command returned.",
|
|
@@ -49893,7 +50036,7 @@ registerSchema({
|
|
|
49893
50036
|
full: { type: "boolean", description: "Include settings, references and attribution", required: false }
|
|
49894
50037
|
}
|
|
49895
50038
|
});
|
|
49896
|
-
var getCommand5 =
|
|
50039
|
+
var getCommand5 = defineCommand193({
|
|
49897
50040
|
meta: {
|
|
49898
50041
|
name: "get",
|
|
49899
50042
|
description: "Read one Studio batch \u2014 the takes, their urls, whether each is in the library, and the reason for any that failed.\n\nExample: baker studio get j57abc123def456ghi789\nExample: baker studio get j57abc123def456ghi789 --full"
|
|
@@ -49922,7 +50065,7 @@ var getCommand5 = defineCommand192({
|
|
|
49922
50065
|
});
|
|
49923
50066
|
|
|
49924
50067
|
// src/commands/studio/improve.ts
|
|
49925
|
-
import { defineCommand as
|
|
50068
|
+
import { defineCommand as defineCommand194 } from "citty";
|
|
49926
50069
|
var DESCRIPTION = "Sharpen a rough brief into directed art direction \u2014 the same rewrite the client gets from the wand in the Studio prompt bar. Reach for it when you are relaying the CLIENT's own words and want them shaped without substituting your voice; when you are writing the art direction yourself, just write it, because you will do a better job than this does.";
|
|
49927
50070
|
registerSchema({
|
|
49928
50071
|
command: "studio.improve",
|
|
@@ -49947,7 +50090,7 @@ registerSchema({
|
|
|
49947
50090
|
}
|
|
49948
50091
|
}
|
|
49949
50092
|
});
|
|
49950
|
-
var improveCommand =
|
|
50093
|
+
var improveCommand = defineCommand194({
|
|
49951
50094
|
meta: {
|
|
49952
50095
|
name: "improve",
|
|
49953
50096
|
description: `${DESCRIPTION}
|
|
@@ -49991,7 +50134,7 @@ Examples:
|
|
|
49991
50134
|
});
|
|
49992
50135
|
|
|
49993
50136
|
// src/commands/studio/keep.ts
|
|
49994
|
-
import { defineCommand as
|
|
50137
|
+
import { defineCommand as defineCommand195 } from "citty";
|
|
49995
50138
|
registerSchema({
|
|
49996
50139
|
command: "studio.keep",
|
|
49997
50140
|
description: "Mark one take as the keeper. For an image this stars it, so the client reviewing the batch sees which one you used. For a CLIP it is the step that puts it in the video library \u2014 until then the clip cannot be used in a canvas, a landing, or an ad.",
|
|
@@ -50001,7 +50144,7 @@ registerSchema({
|
|
|
50001
50144
|
undo: { type: "boolean", description: "Un-star an image, or take a kept clip back out", required: false }
|
|
50002
50145
|
}
|
|
50003
50146
|
});
|
|
50004
|
-
var keepCommand =
|
|
50147
|
+
var keepCommand = defineCommand195({
|
|
50005
50148
|
meta: {
|
|
50006
50149
|
name: "keep",
|
|
50007
50150
|
description: "Mark one take as the keeper. An image gets starred (it was already in the library); a clip gets INGESTED into the video library, which is what makes it usable anywhere else.\n\nExample: baker studio keep j57abc123def456ghi789 --slot 2\nExample: baker studio keep j57abc123def456ghi789 --slot 2 --undo"
|
|
@@ -50052,7 +50195,7 @@ var keepCommand = defineCommand194({
|
|
|
50052
50195
|
});
|
|
50053
50196
|
|
|
50054
50197
|
// src/commands/studio/list.ts
|
|
50055
|
-
import { defineCommand as
|
|
50198
|
+
import { defineCommand as defineCommand196 } from "citty";
|
|
50056
50199
|
registerSchema({
|
|
50057
50200
|
command: "studio.list",
|
|
50058
50201
|
description: "Recent Studio batches for THIS conversation, newest first \u2014 what you have already generated, so you re-use a take instead of paying for it twice. `--all` widens it to everything the company generated, including what people ran themselves in the dashboard.",
|
|
@@ -50063,7 +50206,7 @@ registerSchema({
|
|
|
50063
50206
|
full: { type: "boolean", description: "Include settings, references and attribution", required: false }
|
|
50064
50207
|
}
|
|
50065
50208
|
});
|
|
50066
|
-
var listCommand16 =
|
|
50209
|
+
var listCommand16 = defineCommand196({
|
|
50067
50210
|
meta: {
|
|
50068
50211
|
name: "list",
|
|
50069
50212
|
description: "Recent Studio batches, newest first. Scoped to this conversation unless you pass --all.\n\nExample: baker studio list\nExample: baker studio list --kind video --limit 5\nExample: baker studio list --all # includes batches the client ran in the dashboard"
|
|
@@ -50097,7 +50240,7 @@ var listCommand16 = defineCommand195({
|
|
|
50097
50240
|
});
|
|
50098
50241
|
|
|
50099
50242
|
// src/commands/studio/models.ts
|
|
50100
|
-
import { defineCommand as
|
|
50243
|
+
import { defineCommand as defineCommand197 } from "citty";
|
|
50101
50244
|
var DESCRIPTION2 = "What each Studio model actually accepts: its shapes, resolutions, clip lengths, prompt character cap, how many reference images it takes, and which knobs it has. Read this before a batch you care about \u2014 the models disagree far more than they look like they do, and a setting the chosen model does not have is REFUSED, not ignored.";
|
|
50102
50245
|
registerSchema({
|
|
50103
50246
|
command: "studio.models",
|
|
@@ -50184,7 +50327,7 @@ function buildModelCards(kind, model) {
|
|
|
50184
50327
|
const selected = model ? ids.filter((id) => id === model) : ids;
|
|
50185
50328
|
return selected.map((id) => build(id));
|
|
50186
50329
|
}
|
|
50187
|
-
var modelsCommand =
|
|
50330
|
+
var modelsCommand = defineCommand197({
|
|
50188
50331
|
meta: {
|
|
50189
50332
|
name: "models",
|
|
50190
50333
|
description: `${DESCRIPTION2}
|
|
@@ -50231,13 +50374,13 @@ Examples:
|
|
|
50231
50374
|
});
|
|
50232
50375
|
|
|
50233
50376
|
// src/commands/studio/skills.ts
|
|
50234
|
-
import { defineCommand as
|
|
50377
|
+
import { defineCommand as defineCommand198 } from "citty";
|
|
50235
50378
|
registerSchema({
|
|
50236
50379
|
command: "studio.skills",
|
|
50237
50380
|
description: "The craft directions `studio generate --skill <id>` accepts. Each one carries directed art direction plus the model, shape and take count it wants, so you pick a look by name instead of writing the boilerplate yourself.",
|
|
50238
50381
|
args: {}
|
|
50239
50382
|
});
|
|
50240
|
-
var skillsCommand =
|
|
50383
|
+
var skillsCommand = defineCommand198({
|
|
50241
50384
|
meta: {
|
|
50242
50385
|
name: "skills",
|
|
50243
50386
|
description: "List the craft directions available to `baker studio generate --skill <id>` \u2014 what each one is for, whether it wants a reference image, and the model/shape/count it defaults to.\n\nExample: baker studio skills"
|
|
@@ -50261,7 +50404,7 @@ var skillsCommand = defineCommand197({
|
|
|
50261
50404
|
});
|
|
50262
50405
|
|
|
50263
50406
|
// src/commands/studio/index.ts
|
|
50264
|
-
var studioCommand =
|
|
50407
|
+
var studioCommand = defineCommand199({
|
|
50265
50408
|
meta: {
|
|
50266
50409
|
name: "studio",
|
|
50267
50410
|
description: `Make new imagery and clips. Every batch is recorded and shows up in the dashboard Studio for the client to review, labelled with this conversation.
|
|
@@ -50304,10 +50447,10 @@ Full guide: __tooling__/docs/tools/baker/studio.md`
|
|
|
50304
50447
|
});
|
|
50305
50448
|
|
|
50306
50449
|
// src/commands/tag-manager/index.ts
|
|
50307
|
-
import { defineCommand as
|
|
50450
|
+
import { defineCommand as defineCommand203 } from "citty";
|
|
50308
50451
|
|
|
50309
50452
|
// src/commands/tag-manager/draft.ts
|
|
50310
|
-
import { defineCommand as
|
|
50453
|
+
import { defineCommand as defineCommand200 } from "citty";
|
|
50311
50454
|
|
|
50312
50455
|
// src/commands/tag-manager/shared.ts
|
|
50313
50456
|
import { readFileSync as readFileSync15 } from "fs";
|
|
@@ -50430,13 +50573,13 @@ registerSchema({
|
|
|
50430
50573
|
chat: { type: "string", description: CHAT_READ_ARG.description, required: false }
|
|
50431
50574
|
}
|
|
50432
50575
|
});
|
|
50433
|
-
var draftCommand4 =
|
|
50576
|
+
var draftCommand4 = defineCommand200({
|
|
50434
50577
|
meta: {
|
|
50435
50578
|
name: "draft",
|
|
50436
50579
|
description: "List, show, amend, remove, or clear staged Tag Manager changes for this chat. `list` and `show` take --chat <id> to read an earlier chat's changes instead."
|
|
50437
50580
|
},
|
|
50438
50581
|
subCommands: {
|
|
50439
|
-
list:
|
|
50582
|
+
list: defineCommand200({
|
|
50440
50583
|
meta: {
|
|
50441
50584
|
name: "list",
|
|
50442
50585
|
description: "Review everything staged on this chat (--json for the raw envelope)"
|
|
@@ -50449,7 +50592,7 @@ var draftCommand4 = defineCommand199({
|
|
|
50449
50592
|
await draftList2(args.json === true, args.chat);
|
|
50450
50593
|
}
|
|
50451
50594
|
}),
|
|
50452
|
-
show:
|
|
50595
|
+
show: defineCommand200({
|
|
50453
50596
|
meta: {
|
|
50454
50597
|
name: "show",
|
|
50455
50598
|
description: "Print the full staged payload for one change \u2014 the receipt to verify it looks right before publish (never truncated)."
|
|
@@ -50466,7 +50609,7 @@ var draftCommand4 = defineCommand199({
|
|
|
50466
50609
|
);
|
|
50467
50610
|
}
|
|
50468
50611
|
}),
|
|
50469
|
-
amend:
|
|
50612
|
+
amend: defineCommand200({
|
|
50470
50613
|
meta: {
|
|
50471
50614
|
name: "amend",
|
|
50472
50615
|
description: "Update a staged change in place \u2014 merges a JSON patch into its payload (objects deep-merge, null deletes a key, arrays/scalars replace) and re-validates. Use this instead of remove + re-create."
|
|
@@ -50483,7 +50626,7 @@ var draftCommand4 = defineCommand199({
|
|
|
50483
50626
|
});
|
|
50484
50627
|
}
|
|
50485
50628
|
}),
|
|
50486
|
-
remove:
|
|
50629
|
+
remove: defineCommand200({
|
|
50487
50630
|
meta: { name: "remove", description: "Remove one staged change (cascades to anything depending on it)" },
|
|
50488
50631
|
args: { ref: { type: "positional", description: "Staged ref (gtm_temp_*) or target", required: false } },
|
|
50489
50632
|
run: async ({ args }) => {
|
|
@@ -50492,7 +50635,7 @@ var draftCommand4 = defineCommand199({
|
|
|
50492
50635
|
});
|
|
50493
50636
|
}
|
|
50494
50637
|
}),
|
|
50495
|
-
clear:
|
|
50638
|
+
clear: defineCommand200({
|
|
50496
50639
|
meta: { name: "clear", description: "Discard all Tag Manager changes staged on this chat" },
|
|
50497
50640
|
run: async () => {
|
|
50498
50641
|
await draftAction3("/api/tag-manager/draft/clear", {});
|
|
@@ -50502,7 +50645,7 @@ var draftCommand4 = defineCommand199({
|
|
|
50502
50645
|
});
|
|
50503
50646
|
|
|
50504
50647
|
// src/commands/tag-manager/read.ts
|
|
50505
|
-
import { defineCommand as
|
|
50648
|
+
import { defineCommand as defineCommand201 } from "citty";
|
|
50506
50649
|
registerSchema({
|
|
50507
50650
|
command: "tagManager.containers",
|
|
50508
50651
|
description: "List the Google Tag Manager containers this company's connection can reach. Every container the company connected is flagged `connected: true` \u2014 there can be several, and Baker may read and change all of them. Start here to confirm which containers you are managing.",
|
|
@@ -50543,7 +50686,7 @@ function containersHints(containers) {
|
|
|
50543
50686
|
}))
|
|
50544
50687
|
});
|
|
50545
50688
|
}
|
|
50546
|
-
var containersCommand =
|
|
50689
|
+
var containersCommand = defineCommand201({
|
|
50547
50690
|
meta: {
|
|
50548
50691
|
name: "containers",
|
|
50549
50692
|
description: `List Tag Manager containers reachable by this company's connection.
|
|
@@ -50560,7 +50703,7 @@ Start here:
|
|
|
50560
50703
|
}
|
|
50561
50704
|
}
|
|
50562
50705
|
});
|
|
50563
|
-
var readCommand =
|
|
50706
|
+
var readCommand = defineCommand201({
|
|
50564
50707
|
meta: {
|
|
50565
50708
|
name: "read",
|
|
50566
50709
|
description: `Read the current contents of the Tag Manager container \u2014 always do this before staging changes.
|
|
@@ -50602,7 +50745,7 @@ Examples:
|
|
|
50602
50745
|
});
|
|
50603
50746
|
|
|
50604
50747
|
// src/commands/tag-manager/write-commands.ts
|
|
50605
|
-
import { defineCommand as
|
|
50748
|
+
import { defineCommand as defineCommand202 } from "citty";
|
|
50606
50749
|
var CONTAINER_ARG_DESCRIPTION = "Numeric container id (optional only when one container is connected \u2014 run `baker tag-manager containers`)";
|
|
50607
50750
|
var ENTITIES = [
|
|
50608
50751
|
{
|
|
@@ -50658,10 +50801,10 @@ for (const { entity, noun, createHint } of ENTITIES) {
|
|
|
50658
50801
|
});
|
|
50659
50802
|
}
|
|
50660
50803
|
function entityCommand(entity, noun, example) {
|
|
50661
|
-
return
|
|
50804
|
+
return defineCommand202({
|
|
50662
50805
|
meta: { name: entity, description: `Stage ${noun} changes on this chat's Tag Manager draft` },
|
|
50663
50806
|
subCommands: {
|
|
50664
|
-
create:
|
|
50807
|
+
create: defineCommand202({
|
|
50665
50808
|
meta: {
|
|
50666
50809
|
name: "create",
|
|
50667
50810
|
description: `Stage a new ${noun}
|
|
@@ -50683,7 +50826,7 @@ Examples:
|
|
|
50683
50826
|
});
|
|
50684
50827
|
}
|
|
50685
50828
|
}),
|
|
50686
|
-
update:
|
|
50829
|
+
update: defineCommand202({
|
|
50687
50830
|
meta: {
|
|
50688
50831
|
name: "update",
|
|
50689
50832
|
description: `Stage an update to an existing ${noun} (pass its id or path)`
|
|
@@ -50703,7 +50846,7 @@ Examples:
|
|
|
50703
50846
|
});
|
|
50704
50847
|
}
|
|
50705
50848
|
}),
|
|
50706
|
-
delete:
|
|
50849
|
+
delete: defineCommand202({
|
|
50707
50850
|
meta: { name: "delete", description: `Stage the deletion of a ${noun} (pass its id or path)` },
|
|
50708
50851
|
args: {
|
|
50709
50852
|
id: { type: "positional", description: `${noun} id or path`, required: false },
|
|
@@ -50744,7 +50887,7 @@ function builtinTypes(args) {
|
|
|
50744
50887
|
}
|
|
50745
50888
|
return raw.split(",").map((entry) => entry.trim());
|
|
50746
50889
|
}
|
|
50747
|
-
var builtinCommand =
|
|
50890
|
+
var builtinCommand = defineCommand202({
|
|
50748
50891
|
meta: {
|
|
50749
50892
|
name: "builtin",
|
|
50750
50893
|
description: `Enable or disable built-in variables
|
|
@@ -50754,7 +50897,7 @@ Examples:
|
|
|
50754
50897
|
baker tag-manager builtin disable --types formId`
|
|
50755
50898
|
},
|
|
50756
50899
|
subCommands: {
|
|
50757
|
-
enable:
|
|
50900
|
+
enable: defineCommand202({
|
|
50758
50901
|
meta: { name: "enable", description: "Stage enabling built-in variables" },
|
|
50759
50902
|
args: {
|
|
50760
50903
|
types: { type: "string", description: "Comma-separated types", required: false },
|
|
@@ -50768,7 +50911,7 @@ Examples:
|
|
|
50768
50911
|
});
|
|
50769
50912
|
}
|
|
50770
50913
|
}),
|
|
50771
|
-
disable:
|
|
50914
|
+
disable: defineCommand202({
|
|
50772
50915
|
meta: { name: "disable", description: "Stage disabling built-in variables" },
|
|
50773
50916
|
args: {
|
|
50774
50917
|
types: { type: "string", description: "Comma-separated types", required: false },
|
|
@@ -50786,7 +50929,7 @@ Examples:
|
|
|
50786
50929
|
});
|
|
50787
50930
|
|
|
50788
50931
|
// src/commands/tag-manager/index.ts
|
|
50789
|
-
var tagManagerCommand =
|
|
50932
|
+
var tagManagerCommand = defineCommand203({
|
|
50790
50933
|
meta: {
|
|
50791
50934
|
name: "tag-manager",
|
|
50792
50935
|
description: `Read and change what lives inside the client's Google Tag Manager container \u2014 tags, triggers, variables, folders and built-in variables.
|
|
@@ -50823,7 +50966,7 @@ Full guide: __tooling__/docs/tools/baker/tag-manager.md`
|
|
|
50823
50966
|
});
|
|
50824
50967
|
|
|
50825
50968
|
// src/commands/tags/index.ts
|
|
50826
|
-
import { defineCommand as
|
|
50969
|
+
import { defineCommand as defineCommand204 } from "citty";
|
|
50827
50970
|
|
|
50828
50971
|
// src/commands/tags/shared.ts
|
|
50829
50972
|
function failApi3(err) {
|
|
@@ -50892,7 +51035,7 @@ async function listTags(json) {
|
|
|
50892
51035
|
var listArgs9 = {
|
|
50893
51036
|
json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable list" }
|
|
50894
51037
|
};
|
|
50895
|
-
var listCommand17 =
|
|
51038
|
+
var listCommand17 = defineCommand204({
|
|
50896
51039
|
meta: {
|
|
50897
51040
|
name: "list",
|
|
50898
51041
|
description: "Effective tags for this chat (production + staged), with each tag's full readable config (secrets excluded) \u2014 reuse a stored value to pre-fill a change rather than asking the user. Refs printed here are what flow side-effect tagIds should use. Example: baker tags list"
|
|
@@ -50911,7 +51054,7 @@ async function listDraft3(chat) {
|
|
|
50911
51054
|
failApi3(err);
|
|
50912
51055
|
}
|
|
50913
51056
|
}
|
|
50914
|
-
var draftCommand5 =
|
|
51057
|
+
var draftCommand5 = defineCommand204({
|
|
50915
51058
|
meta: {
|
|
50916
51059
|
name: "draft",
|
|
50917
51060
|
description: "Review the tag changes staged in this chat (read-only). Staged changes were approved via request_tag_input and apply when the chat is published; to amend or drop one, propose a follow-up change through the same tool (a delete on a tag_temp_* ref drops the staged create). Takes --chat <id> to read an earlier chat's staged changes instead."
|
|
@@ -50921,7 +51064,7 @@ var draftCommand5 = defineCommand203({
|
|
|
50921
51064
|
await listDraft3(args.chat);
|
|
50922
51065
|
}
|
|
50923
51066
|
});
|
|
50924
|
-
var tagsCommand4 =
|
|
51067
|
+
var tagsCommand4 = defineCommand204({
|
|
50925
51068
|
meta: {
|
|
50926
51069
|
name: "tags",
|
|
50927
51070
|
description: `Read the client's marketing/analytics tags (Meta pixel, GA4, Google Ads, GTM, Clarity, Hotjar, \u2026) \u2014 production tags plus the changes staged in this chat.
|
|
@@ -50950,10 +51093,10 @@ Full guide: __tooling__/docs/tools/baker/tags.md`
|
|
|
50950
51093
|
});
|
|
50951
51094
|
|
|
50952
51095
|
// src/commands/testimonials/index.ts
|
|
50953
|
-
import { defineCommand as
|
|
51096
|
+
import { defineCommand as defineCommand208 } from "citty";
|
|
50954
51097
|
|
|
50955
51098
|
// src/commands/testimonials/get.ts
|
|
50956
|
-
import { defineCommand as
|
|
51099
|
+
import { defineCommand as defineCommand205 } from "citty";
|
|
50957
51100
|
registerSchema({
|
|
50958
51101
|
command: "testimonials.get",
|
|
50959
51102
|
description: "Get a single testimonial by ID",
|
|
@@ -50961,7 +51104,7 @@ registerSchema({
|
|
|
50961
51104
|
id: { type: "string", description: "Testimonial ID", required: true }
|
|
50962
51105
|
}
|
|
50963
51106
|
});
|
|
50964
|
-
var getCommand6 =
|
|
51107
|
+
var getCommand6 = defineCommand205({
|
|
50965
51108
|
meta: { name: "get", description: "Get a single testimonial by ID. Example: baker testimonials get j571abc123" },
|
|
50966
51109
|
args: {
|
|
50967
51110
|
id: { type: "positional", description: "Testimonial ID", required: false },
|
|
@@ -50998,7 +51141,7 @@ var getCommand6 = defineCommand204({
|
|
|
50998
51141
|
});
|
|
50999
51142
|
|
|
51000
51143
|
// src/commands/testimonials/list.ts
|
|
51001
|
-
import { defineCommand as
|
|
51144
|
+
import { defineCommand as defineCommand206 } from "citty";
|
|
51002
51145
|
|
|
51003
51146
|
// src/commands/testimonials/emptyCorpusHints.ts
|
|
51004
51147
|
function resolveEmptyReason({
|
|
@@ -51133,7 +51276,7 @@ function buildListParams(args) {
|
|
|
51133
51276
|
}
|
|
51134
51277
|
return params;
|
|
51135
51278
|
}
|
|
51136
|
-
var listCommand18 =
|
|
51279
|
+
var listCommand18 = defineCommand206({
|
|
51137
51280
|
meta: {
|
|
51138
51281
|
name: "list",
|
|
51139
51282
|
description: "List testimonials with optional filters. Example: baker testimonials list --source google --sentiment positive"
|
|
@@ -51185,7 +51328,7 @@ var listCommand18 = defineCommand205({
|
|
|
51185
51328
|
});
|
|
51186
51329
|
|
|
51187
51330
|
// src/commands/testimonials/search.ts
|
|
51188
|
-
import { defineCommand as
|
|
51331
|
+
import { defineCommand as defineCommand207 } from "citty";
|
|
51189
51332
|
var FILTER_FLAGS2 = ["source", "rating-min", "rating-max", "status", "sentiment", "language", "tags"];
|
|
51190
51333
|
function languageBiasHint(results, requestedLanguage) {
|
|
51191
51334
|
if (requestedLanguage) {
|
|
@@ -51264,7 +51407,7 @@ function buildSearchRequest(query, args) {
|
|
|
51264
51407
|
}
|
|
51265
51408
|
return body;
|
|
51266
51409
|
}
|
|
51267
|
-
var searchCommand3 =
|
|
51410
|
+
var searchCommand3 = defineCommand207({
|
|
51268
51411
|
meta: {
|
|
51269
51412
|
name: "search",
|
|
51270
51413
|
description: "Semantic search testimonials by text query. Uses hybrid BM25 + vector + reranking. Example: baker testimonials search 'great service' --rating-min 4"
|
|
@@ -51328,7 +51471,7 @@ var searchCommand3 = defineCommand206({
|
|
|
51328
51471
|
var tagsCommand5 = makeTagsCommand("testimonials", "testimonial", "/api/testimonials/tags");
|
|
51329
51472
|
|
|
51330
51473
|
// src/commands/testimonials/index.ts
|
|
51331
|
-
var testimonialsCommand =
|
|
51474
|
+
var testimonialsCommand = defineCommand208({
|
|
51332
51475
|
meta: {
|
|
51333
51476
|
name: "testimonials",
|
|
51334
51477
|
description: `Find and browse testimonials in Baker. Subcommands: search, get, list, tags.
|
|
@@ -51350,10 +51493,10 @@ Full guide: __tooling__/docs/tools/baker/testimonials.md`
|
|
|
51350
51493
|
});
|
|
51351
51494
|
|
|
51352
51495
|
// src/commands/videos/index.ts
|
|
51353
|
-
import { defineCommand as
|
|
51496
|
+
import { defineCommand as defineCommand215 } from "citty";
|
|
51354
51497
|
|
|
51355
51498
|
// src/commands/videos/delete.ts
|
|
51356
|
-
import { defineCommand as
|
|
51499
|
+
import { defineCommand as defineCommand209 } from "citty";
|
|
51357
51500
|
registerSchema({
|
|
51358
51501
|
command: "videos.delete",
|
|
51359
51502
|
description: "Delete a video by ID",
|
|
@@ -51367,7 +51510,7 @@ registerSchema({
|
|
|
51367
51510
|
}
|
|
51368
51511
|
}
|
|
51369
51512
|
});
|
|
51370
|
-
var deleteCommand4 =
|
|
51513
|
+
var deleteCommand4 = defineCommand209({
|
|
51371
51514
|
meta: {
|
|
51372
51515
|
name: "delete",
|
|
51373
51516
|
description: "Delete a video by ID. Use --dry-run to preview. Example: baker videos delete j571abc123 --dry-run"
|
|
@@ -51408,7 +51551,7 @@ var deleteCommand4 = defineCommand208({
|
|
|
51408
51551
|
});
|
|
51409
51552
|
|
|
51410
51553
|
// src/commands/videos/get.ts
|
|
51411
|
-
import { defineCommand as
|
|
51554
|
+
import { defineCommand as defineCommand210 } from "citty";
|
|
51412
51555
|
registerSchema({
|
|
51413
51556
|
command: "videos.get",
|
|
51414
51557
|
description: "Get a single video by ID",
|
|
@@ -51416,7 +51559,7 @@ registerSchema({
|
|
|
51416
51559
|
id: { type: "string", description: "Video ID", required: true }
|
|
51417
51560
|
}
|
|
51418
51561
|
});
|
|
51419
|
-
var getCommand7 =
|
|
51562
|
+
var getCommand7 = defineCommand210({
|
|
51420
51563
|
meta: { name: "get", description: "Get a single video by ID. Example: baker videos get j571abc123" },
|
|
51421
51564
|
args: {
|
|
51422
51565
|
id: { type: "positional", description: "Video ID", required: false },
|
|
@@ -51453,7 +51596,7 @@ var getCommand7 = defineCommand209({
|
|
|
51453
51596
|
});
|
|
51454
51597
|
|
|
51455
51598
|
// src/commands/videos/group.ts
|
|
51456
|
-
import { defineCommand as
|
|
51599
|
+
import { defineCommand as defineCommand211 } from "citty";
|
|
51457
51600
|
registerSchema({
|
|
51458
51601
|
command: "videos.group",
|
|
51459
51602
|
description: "List every clip and image that arrived in the same set as this video (carousel slides, one page)",
|
|
@@ -51462,7 +51605,7 @@ registerSchema({
|
|
|
51462
51605
|
"group-key": { type: "string", description: "The set key directly, when you already have it", required: false }
|
|
51463
51606
|
}
|
|
51464
51607
|
});
|
|
51465
|
-
var groupCommand2 =
|
|
51608
|
+
var groupCommand2 = defineCommand211({
|
|
51466
51609
|
meta: {
|
|
51467
51610
|
name: "group",
|
|
51468
51611
|
description: "List every asset that arrived in the same set as this clip \u2014 the other slides of the Instagram post it came from, stills included. A carousel is authored to be read in order, so a clip pulled out of one is usually missing half its meaning. Example: baker videos group <videoId>"
|
|
@@ -51485,7 +51628,7 @@ var groupCommand2 = defineCommand210({
|
|
|
51485
51628
|
import { mkdtemp as mkdtemp3, rm as rm8, stat as stat8 } from "fs/promises";
|
|
51486
51629
|
import { tmpdir as tmpdir4 } from "os";
|
|
51487
51630
|
import path40 from "path";
|
|
51488
|
-
import { defineCommand as
|
|
51631
|
+
import { defineCommand as defineCommand212 } from "citty";
|
|
51489
51632
|
|
|
51490
51633
|
// src/lib/streamUpload.ts
|
|
51491
51634
|
import { createHash as createHash2 } from "crypto";
|
|
@@ -51649,7 +51792,7 @@ registerSchema({
|
|
|
51649
51792
|
"dry-run": { type: "boolean", description: "Preview the operation without executing", required: false }
|
|
51650
51793
|
}
|
|
51651
51794
|
});
|
|
51652
|
-
var ingestCommand2 =
|
|
51795
|
+
var ingestCommand2 = defineCommand212({
|
|
51653
51796
|
meta: {
|
|
51654
51797
|
name: "ingest",
|
|
51655
51798
|
description: "Add a video to the library from a URL. A direct file URL is handed straight to Baker, which fetches it. A page URL (YouTube, TikTok, Vimeo, Instagram) is downloaded here first, then uploaded \u2014 and a direct URL that Baker cannot fetch falls back to that same path automatically.\n\nExample: baker videos ingest https://www.youtube.com/watch?v=abc123"
|
|
@@ -51911,7 +52054,7 @@ async function uploadToAssetStore(filePath, sizeBytes) {
|
|
|
51911
52054
|
}
|
|
51912
52055
|
|
|
51913
52056
|
// src/commands/videos/search.ts
|
|
51914
|
-
import { defineCommand as
|
|
52057
|
+
import { defineCommand as defineCommand213 } from "citty";
|
|
51915
52058
|
registerSchema({
|
|
51916
52059
|
command: "videos.search",
|
|
51917
52060
|
description: "Search videos by text query. Only returns ready videos.",
|
|
@@ -51921,7 +52064,7 @@ registerSchema({
|
|
|
51921
52064
|
tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
|
|
51922
52065
|
}
|
|
51923
52066
|
});
|
|
51924
|
-
var searchCommand4 =
|
|
52067
|
+
var searchCommand4 = defineCommand213({
|
|
51925
52068
|
meta: {
|
|
51926
52069
|
name: "search",
|
|
51927
52070
|
description: "Semantic search videos by text query. Uses hybrid BM25 + vector + reranking. Example: baker videos search 'product demo' --tags tutorial"
|
|
@@ -51973,7 +52116,7 @@ var tagsCommand6 = makeTagsCommand("videos", "video", "/api/videos/tags");
|
|
|
51973
52116
|
// src/commands/videos/upload.ts
|
|
51974
52117
|
import { readFile as readFile26, stat as stat9 } from "fs/promises";
|
|
51975
52118
|
import { basename as basename3, extname as extname4 } from "path";
|
|
51976
|
-
import { defineCommand as
|
|
52119
|
+
import { defineCommand as defineCommand214 } from "citty";
|
|
51977
52120
|
var MIME_MAP = {
|
|
51978
52121
|
".mp4": "video/mp4",
|
|
51979
52122
|
".mov": "video/quicktime",
|
|
@@ -52015,7 +52158,7 @@ function detectContentType(filePath) {
|
|
|
52015
52158
|
function isRemoteUrl3(value) {
|
|
52016
52159
|
return /^https?:\/\//i.test(value);
|
|
52017
52160
|
}
|
|
52018
|
-
var uploadCommand2 =
|
|
52161
|
+
var uploadCommand2 = defineCommand214({
|
|
52019
52162
|
meta: {
|
|
52020
52163
|
name: "upload",
|
|
52021
52164
|
description: "Upload a video to Baker \u2014 accepts a local file path OR a remote http(s) URL.\n\nLocal: auto-detects content type and uploads via Mux direct upload.\nRemote: hands off to `videos ingest` (direct fetch, or download-then-upload for a YouTube/TikTok/Vimeo page).\n\nExamples:\n baker videos upload ./demo.mp4\n baker videos upload https://www.youtube.com/watch?v=abc123"
|
|
@@ -52099,7 +52242,7 @@ var uploadCommand2 = defineCommand213({
|
|
|
52099
52242
|
});
|
|
52100
52243
|
|
|
52101
52244
|
// src/commands/videos/index.ts
|
|
52102
|
-
var videosCommand =
|
|
52245
|
+
var videosCommand = defineCommand215({
|
|
52103
52246
|
meta: {
|
|
52104
52247
|
name: "videos",
|
|
52105
52248
|
description: `Find and manage videos in Baker. Subcommands: search, get, upload, ingest, delete, tags.
|
|
@@ -52126,10 +52269,10 @@ Full guide: __tooling__/docs/tools/baker/videos.md`
|
|
|
52126
52269
|
});
|
|
52127
52270
|
|
|
52128
52271
|
// src/commands/winning-ads/index.ts
|
|
52129
|
-
import { defineCommand as
|
|
52272
|
+
import { defineCommand as defineCommand228 } from "citty";
|
|
52130
52273
|
|
|
52131
52274
|
// src/commands/winning-ads/advertisers.ts
|
|
52132
|
-
import { defineCommand as
|
|
52275
|
+
import { defineCommand as defineCommand216 } from "citty";
|
|
52133
52276
|
|
|
52134
52277
|
// src/commands/winning-ads/shared.ts
|
|
52135
52278
|
function splitList2(value) {
|
|
@@ -52182,7 +52325,7 @@ function advertiserNormalizer(record, full) {
|
|
|
52182
52325
|
last_synced_at: record.last_synced_at ?? null
|
|
52183
52326
|
};
|
|
52184
52327
|
}
|
|
52185
|
-
var advertisersCommand2 =
|
|
52328
|
+
var advertisersCommand2 = defineCommand216({
|
|
52186
52329
|
meta: {
|
|
52187
52330
|
name: "advertisers",
|
|
52188
52331
|
description: 'List corpus advertisers by name or domain. Find your own advertiser for --exclude-advertiser, or a competitor for --advertiser-id / winners. Example: baker winning-ads advertisers "Deel" --output md'
|
|
@@ -52240,7 +52383,7 @@ var advertisersCommand2 = defineCommand215({
|
|
|
52240
52383
|
});
|
|
52241
52384
|
|
|
52242
52385
|
// src/commands/winning-ads/brief.ts
|
|
52243
|
-
import { defineCommand as
|
|
52386
|
+
import { defineCommand as defineCommand217 } from "citty";
|
|
52244
52387
|
registerSchema({
|
|
52245
52388
|
command: "winning-ads.brief",
|
|
52246
52389
|
description: "Generate a creative brief grounded in strategically-similar winning ads. Optionally describe the target creative with --dna (JSON) and steer with --notes.",
|
|
@@ -52286,7 +52429,7 @@ function parseDna(raw) {
|
|
|
52286
52429
|
}
|
|
52287
52430
|
return parsed;
|
|
52288
52431
|
}
|
|
52289
|
-
var briefCommand =
|
|
52432
|
+
var briefCommand = defineCommand217({
|
|
52290
52433
|
meta: {
|
|
52291
52434
|
name: "brief",
|
|
52292
52435
|
description: `Generate a creative brief from winning references. Example: baker winning-ads brief --dna '{"angle":"cost savings"}' --notes "B2B, LinkedIn video" --k 8`
|
|
@@ -52322,7 +52465,7 @@ var briefCommand = defineCommand216({
|
|
|
52322
52465
|
});
|
|
52323
52466
|
|
|
52324
52467
|
// src/commands/winning-ads/content.ts
|
|
52325
|
-
import { defineCommand as
|
|
52468
|
+
import { defineCommand as defineCommand218 } from "citty";
|
|
52326
52469
|
registerSchema({
|
|
52327
52470
|
command: "winning-ads.content",
|
|
52328
52471
|
description: "Read what's INSIDE one winning ad: the spoken transcript, the on-screen text, and the ad copy. Use this after `search`/`winners`/`feed` return a shortlist \u2014 pass an ad_id to understand a reference before reproducing it. Add --full for speech, pacing, and soundtrack detail. Video ads carry the transcript/on-screen text; static ads carry only the copy.",
|
|
@@ -52335,7 +52478,7 @@ registerSchema({
|
|
|
52335
52478
|
}
|
|
52336
52479
|
}
|
|
52337
52480
|
});
|
|
52338
|
-
var contentCommand =
|
|
52481
|
+
var contentCommand = defineCommand218({
|
|
52339
52482
|
meta: {
|
|
52340
52483
|
name: "content",
|
|
52341
52484
|
description: "Read the transcript + on-screen text + copy of one winning ad. Example: baker winning-ads content adg_123 --platform meta --full --output md"
|
|
@@ -52384,7 +52527,7 @@ var contentCommand = defineCommand217({
|
|
|
52384
52527
|
});
|
|
52385
52528
|
|
|
52386
52529
|
// src/commands/winning-ads/feed.ts
|
|
52387
|
-
import { defineCommand as
|
|
52530
|
+
import { defineCommand as defineCommand219 } from "citty";
|
|
52388
52531
|
function buildFeedParams(input) {
|
|
52389
52532
|
const params = {};
|
|
52390
52533
|
const advertiser = splitList2(input.advertiser);
|
|
@@ -52436,7 +52579,7 @@ registerSchema({
|
|
|
52436
52579
|
format: { type: "string", description: "Comma-separated formats to include (e.g. static,video)", required: false }
|
|
52437
52580
|
}
|
|
52438
52581
|
});
|
|
52439
|
-
var feedCommand =
|
|
52582
|
+
var feedCommand = defineCommand219({
|
|
52440
52583
|
meta: {
|
|
52441
52584
|
name: "feed",
|
|
52442
52585
|
description: "Winners across every brand you follow (browse, then trim per advertiser). Example: baker winning-ads feed --per-advertiser 5 --output md"
|
|
@@ -52521,7 +52664,7 @@ var feedCommand = defineCommand218({
|
|
|
52521
52664
|
});
|
|
52522
52665
|
|
|
52523
52666
|
// src/commands/winning-ads/follow.ts
|
|
52524
|
-
import { defineCommand as
|
|
52667
|
+
import { defineCommand as defineCommand220 } from "citty";
|
|
52525
52668
|
var PLATFORMS = ["meta", "linkedin"];
|
|
52526
52669
|
registerSchema({
|
|
52527
52670
|
command: "winning-ads.follow",
|
|
@@ -52536,7 +52679,7 @@ registerSchema({
|
|
|
52536
52679
|
label: { type: "string", description: "Optional display label (defaults to the resolved name)", required: false }
|
|
52537
52680
|
}
|
|
52538
52681
|
});
|
|
52539
|
-
var followCommand =
|
|
52682
|
+
var followCommand = defineCommand220({
|
|
52540
52683
|
meta: {
|
|
52541
52684
|
name: "follow",
|
|
52542
52685
|
description: 'Follow a brand to track ALL its ads \u2014 every platform and country. --platform is how we read your input, not a limit. A domain tracks both Meta + LinkedIn. Example: baker winning-ads follow "deel.com" --platform meta'
|
|
@@ -52583,7 +52726,7 @@ var followCommand = defineCommand219({
|
|
|
52583
52726
|
});
|
|
52584
52727
|
|
|
52585
52728
|
// src/commands/winning-ads/follow-competitors.ts
|
|
52586
|
-
import { defineCommand as
|
|
52729
|
+
import { defineCommand as defineCommand221 } from "citty";
|
|
52587
52730
|
var PLATFORMS2 = ["meta", "linkedin"];
|
|
52588
52731
|
var BATCH_TIMEOUT_MS = 3e5;
|
|
52589
52732
|
function buildFollowBatchBody(input) {
|
|
@@ -52616,7 +52759,7 @@ registerSchema({
|
|
|
52616
52759
|
}
|
|
52617
52760
|
}
|
|
52618
52761
|
});
|
|
52619
|
-
var followCompetitorsCommand =
|
|
52762
|
+
var followCompetitorsCommand = defineCommand221({
|
|
52620
52763
|
meta: {
|
|
52621
52764
|
name: "follow-competitors",
|
|
52622
52765
|
description: 'Follow many brands at once by domain \u2014 add every competitor in one call. Example: baker winning-ads follow-competitors "deel.com,notion.so,hubspot.com"'
|
|
@@ -52691,7 +52834,7 @@ var followCompetitorsCommand = defineCommand220({
|
|
|
52691
52834
|
});
|
|
52692
52835
|
|
|
52693
52836
|
// src/commands/winning-ads/following.ts
|
|
52694
|
-
import { defineCommand as
|
|
52837
|
+
import { defineCommand as defineCommand222 } from "citty";
|
|
52695
52838
|
registerSchema({
|
|
52696
52839
|
command: "winning-ads.following",
|
|
52697
52840
|
description: "List the brands you follow in your ad-dna library, with each one's status (ready vs still adding) and cached ad counts. A brand still adding has counts that are a lie in progress; one with `discovery_failed` has counts that are short because we couldn't finish looking, which is not the same as it running no ads.",
|
|
@@ -52745,7 +52888,7 @@ function followingNormalizer(record, full) {
|
|
|
52745
52888
|
platforms: Array.isArray(record.platforms) ? record.platforms : []
|
|
52746
52889
|
};
|
|
52747
52890
|
}
|
|
52748
|
-
var followingCommand =
|
|
52891
|
+
var followingCommand = defineCommand222({
|
|
52749
52892
|
meta: {
|
|
52750
52893
|
name: "following",
|
|
52751
52894
|
description: "List brands you follow, with status (ready / adding\u2026) and cached counts. A brand's counts are only final once it is ready. Example: baker winning-ads following --output md"
|
|
@@ -52781,7 +52924,7 @@ var followingCommand = defineCommand221({
|
|
|
52781
52924
|
});
|
|
52782
52925
|
|
|
52783
52926
|
// src/commands/winning-ads/patterns.ts
|
|
52784
|
-
import { defineCommand as
|
|
52927
|
+
import { defineCommand as defineCommand223 } from "citty";
|
|
52785
52928
|
registerSchema({
|
|
52786
52929
|
command: "winning-ads.patterns",
|
|
52787
52930
|
description: "Mine what separates two cohorts of ads: pass a comma-list of winning ad ids (--winners) and a comma-list of weaker ad ids (--duds). Returns the discriminating DNA fields.",
|
|
@@ -52820,7 +52963,7 @@ function discriminatorRow(record) {
|
|
|
52820
52963
|
top_values_duds: Array.isArray(record.top_values_b) ? record.top_values_b.join(", ") : ""
|
|
52821
52964
|
};
|
|
52822
52965
|
}
|
|
52823
|
-
var patternsCommand =
|
|
52966
|
+
var patternsCommand = defineCommand223({
|
|
52824
52967
|
meta: {
|
|
52825
52968
|
name: "patterns",
|
|
52826
52969
|
description: "Discover what separates winning ads from weak ones. Example: baker winning-ads patterns --winners a_1,a_2,a_3 --duds a_9,a_8 --output md"
|
|
@@ -52876,7 +53019,7 @@ var patternsCommand = defineCommand222({
|
|
|
52876
53019
|
});
|
|
52877
53020
|
|
|
52878
53021
|
// src/commands/winning-ads/search.ts
|
|
52879
|
-
import { defineCommand as
|
|
53022
|
+
import { defineCommand as defineCommand224 } from "citty";
|
|
52880
53023
|
registerSchema({
|
|
52881
53024
|
command: "winning-ads.search",
|
|
52882
53025
|
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.",
|
|
@@ -52984,7 +53127,7 @@ function buildSearchBody2(args) {
|
|
|
52984
53127
|
}
|
|
52985
53128
|
return body;
|
|
52986
53129
|
}
|
|
52987
|
-
var searchCommand5 =
|
|
53130
|
+
var searchCommand5 = defineCommand224({
|
|
52988
53131
|
meta: {
|
|
52989
53132
|
name: "search",
|
|
52990
53133
|
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"
|
|
@@ -53099,7 +53242,7 @@ var searchCommand5 = defineCommand223({
|
|
|
53099
53242
|
});
|
|
53100
53243
|
|
|
53101
53244
|
// src/commands/winning-ads/seeds.ts
|
|
53102
|
-
import { defineCommand as
|
|
53245
|
+
import { defineCommand as defineCommand225 } from "citty";
|
|
53103
53246
|
function leanRow(r) {
|
|
53104
53247
|
return {
|
|
53105
53248
|
key: r.key,
|
|
@@ -53127,7 +53270,7 @@ function makeSeedCommand(opts) {
|
|
|
53127
53270
|
limit: { type: "number", description: "Max keys 1-100 (default 20)", required: false, default: 20 }
|
|
53128
53271
|
}
|
|
53129
53272
|
});
|
|
53130
|
-
return
|
|
53273
|
+
return defineCommand225({
|
|
53131
53274
|
meta: { name: opts.name, description: opts.description },
|
|
53132
53275
|
args: {
|
|
53133
53276
|
platform: { type: "string", description: "Single platform to segment on", required: false },
|
|
@@ -53176,7 +53319,7 @@ var formatsCommand = makeSeedCommand({
|
|
|
53176
53319
|
});
|
|
53177
53320
|
|
|
53178
53321
|
// src/commands/winning-ads/unfollow.ts
|
|
53179
|
-
import { defineCommand as
|
|
53322
|
+
import { defineCommand as defineCommand226 } from "citty";
|
|
53180
53323
|
registerSchema({
|
|
53181
53324
|
command: "winning-ads.unfollow",
|
|
53182
53325
|
description: "Stop following a brand \u2014 removes it from your ad-dna library by advertiser id.",
|
|
@@ -53184,7 +53327,7 @@ registerSchema({
|
|
|
53184
53327
|
advertiser: { type: "string", description: "Advertiser id to unfollow", required: true }
|
|
53185
53328
|
}
|
|
53186
53329
|
});
|
|
53187
|
-
var unfollowCommand =
|
|
53330
|
+
var unfollowCommand = defineCommand226({
|
|
53188
53331
|
meta: {
|
|
53189
53332
|
name: "unfollow",
|
|
53190
53333
|
description: "Stop following a brand by advertiser id. Example: baker winning-ads unfollow adv_123"
|
|
@@ -53205,7 +53348,7 @@ var unfollowCommand = defineCommand225({
|
|
|
53205
53348
|
});
|
|
53206
53349
|
|
|
53207
53350
|
// src/commands/winning-ads/winners.ts
|
|
53208
|
-
import { defineCommand as
|
|
53351
|
+
import { defineCommand as defineCommand227 } from "citty";
|
|
53209
53352
|
registerSchema({
|
|
53210
53353
|
command: "winning-ads.winners",
|
|
53211
53354
|
description: "Top winning ads for one advertiser id (from `advertisers` or `following`). Returns lean winner cards; add --full for DNA + longevity.",
|
|
@@ -53215,7 +53358,7 @@ registerSchema({
|
|
|
53215
53358
|
platform: { type: "string", description: "Filter to a single platform: meta|linkedin", required: false }
|
|
53216
53359
|
}
|
|
53217
53360
|
});
|
|
53218
|
-
var winnersCommand =
|
|
53361
|
+
var winnersCommand = defineCommand227({
|
|
53219
53362
|
meta: {
|
|
53220
53363
|
name: "winners",
|
|
53221
53364
|
description: "Top winning ads for a specific advertiser id. Example: baker winning-ads winners adv_123 --top 15 --output md"
|
|
@@ -53265,7 +53408,7 @@ var winnersCommand = defineCommand226({
|
|
|
53265
53408
|
});
|
|
53266
53409
|
|
|
53267
53410
|
// src/commands/winning-ads/index.ts
|
|
53268
|
-
var winningAdsCommand =
|
|
53411
|
+
var winningAdsCommand = defineCommand228({
|
|
53269
53412
|
meta: {
|
|
53270
53413
|
name: "winning-ads",
|
|
53271
53414
|
description: `Search the ad-dna corpus of scored "winning" ads for reference creatives to reproduce, and manage the brands your library tracks. Proxied through the Baker backend (BAKER_API_KEY) \u2014 no separate token needed.
|
|
@@ -53503,7 +53646,7 @@ function getCliVersion() {
|
|
|
53503
53646
|
}
|
|
53504
53647
|
|
|
53505
53648
|
// src/cli.ts
|
|
53506
|
-
var main =
|
|
53649
|
+
var main = defineCommand229({
|
|
53507
53650
|
meta: {
|
|
53508
53651
|
name: "baker",
|
|
53509
53652
|
version: getCliVersion(),
|