@koda-sl/baker-cli 0.94.0 → 0.95.1
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/README.md +23 -3
- package/dist/cli.js +225 -107
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./chunk-RCPMJKI7.js";
|
|
13
13
|
|
|
14
14
|
// src/cli.ts
|
|
15
|
-
import { defineCommand as
|
|
15
|
+
import { defineCommand as defineCommand144, runMain } from "citty";
|
|
16
16
|
|
|
17
17
|
// src/commands/actions/index.ts
|
|
18
18
|
import { defineCommand as defineCommand13 } from "citty";
|
|
@@ -853,7 +853,7 @@ var linkCommand = defineCommand7({
|
|
|
853
853
|
import { defineCommand as defineCommand8 } from "citty";
|
|
854
854
|
registerSchema({
|
|
855
855
|
command: "actions.list",
|
|
856
|
-
description: "List actions for the current company. Default: pre-bucketed (claimable/myClaims/blocked/claimedByOthers/completed/discarded). Set --bucketed=false for a flat list filterable by --status.",
|
|
856
|
+
description: "List actions for the current company. Default: pre-bucketed (claimable/myClaims/blocked/claimedByOthers/completed/discarded), each bucket ordered do-first (blockers before blocked, then highest-leverage). Set --bucketed=false for a flat list filterable by --status and orderable by --sort.",
|
|
857
857
|
args: {
|
|
858
858
|
bucketed: {
|
|
859
859
|
type: "boolean",
|
|
@@ -865,6 +865,11 @@ registerSchema({
|
|
|
865
865
|
type: "string",
|
|
866
866
|
description: "Filter by status (only with --bucketed=false): pending|in_progress|completed|discarded",
|
|
867
867
|
required: false
|
|
868
|
+
},
|
|
869
|
+
sort: {
|
|
870
|
+
type: "string",
|
|
871
|
+
description: "Order a flat list (only with --bucketed=false): priority (do-first: blockers before blocked, then highest-leverage) | recent. Default: priority.",
|
|
872
|
+
required: false
|
|
868
873
|
}
|
|
869
874
|
}
|
|
870
875
|
});
|
|
@@ -875,7 +880,8 @@ var listCommand2 = defineCommand8({
|
|
|
875
880
|
},
|
|
876
881
|
args: {
|
|
877
882
|
bucketed: { type: "boolean", description: "Pre-bucket by chat", required: false, default: true },
|
|
878
|
-
status: { type: "string", description: "Status filter (raw mode)", required: false }
|
|
883
|
+
status: { type: "string", description: "Status filter (raw mode)", required: false },
|
|
884
|
+
sort: { type: "string", description: "Order (raw mode): priority|recent", required: false }
|
|
879
885
|
},
|
|
880
886
|
run: async ({ args }) => {
|
|
881
887
|
try {
|
|
@@ -889,6 +895,7 @@ var listCommand2 = defineCommand8({
|
|
|
889
895
|
if (args.status) {
|
|
890
896
|
body.status = args.status;
|
|
891
897
|
}
|
|
898
|
+
body.sort = args.sort === "recent" ? "recent" : "priority";
|
|
892
899
|
}
|
|
893
900
|
const response = await apiPost("/api/actions/list", body);
|
|
894
901
|
writeJson(response);
|
|
@@ -9096,7 +9103,8 @@ function buildElementSlots(elements) {
|
|
|
9096
9103
|
"spine",
|
|
9097
9104
|
"overlaid",
|
|
9098
9105
|
"captions",
|
|
9099
|
-
"
|
|
9106
|
+
"captions_premux",
|
|
9107
|
+
"captions_transcribe",
|
|
9100
9108
|
"audio_mix",
|
|
9101
9109
|
"final",
|
|
9102
9110
|
"music_bed"
|
|
@@ -9762,7 +9770,8 @@ function makePresenterPresent(slots, canonical, opts = {}) {
|
|
|
9762
9770
|
};
|
|
9763
9771
|
}
|
|
9764
9772
|
var PAUSE_GAP_S = 0.6;
|
|
9765
|
-
var
|
|
9773
|
+
var SEEDANCE_SAFE_MAX_S = SEEDANCE_DURATIONS.find((d) => d >= 10) ?? 10;
|
|
9774
|
+
var PHRASE_MAX_S = SEEDANCE_SAFE_MAX_S;
|
|
9766
9775
|
function collapseVoiceover(blueprint) {
|
|
9767
9776
|
const casts = castIdSet(blueprint);
|
|
9768
9777
|
const cameraOn = onCameraDialogue(blueprint);
|
|
@@ -10564,22 +10573,8 @@ function scaffoldVideoCanvas(input, elementsInput, opts) {
|
|
|
10564
10573
|
videoRef = "$ref:overlaid.video";
|
|
10565
10574
|
videoNode = "overlaid";
|
|
10566
10575
|
}
|
|
10567
|
-
if (opts.captionsCompositionPath && opts.transcriptPath) {
|
|
10568
|
-
nodes.push({
|
|
10569
|
-
id: "captions_transcript",
|
|
10570
|
-
type: "ingest",
|
|
10571
|
-
params: { source: "path", path: opts.transcriptPath, expect: "json" }
|
|
10572
|
-
});
|
|
10573
|
-
nodes.push({
|
|
10574
|
-
id: "captions",
|
|
10575
|
-
type: "hyperframe_render",
|
|
10576
|
-
inputs: { background: videoRef, transcript: "$ref:captions_transcript.asset" },
|
|
10577
|
-
params: { composition: opts.captionsCompositionPath }
|
|
10578
|
-
});
|
|
10579
|
-
videoRef = "$ref:captions.video";
|
|
10580
|
-
videoNode = "captions";
|
|
10581
|
-
}
|
|
10582
10576
|
const tracks = [...voTracks, ...buildSfxMusic(blueprint, nodes)];
|
|
10577
|
+
let audioMixRef;
|
|
10583
10578
|
if (tracks.length > 0) {
|
|
10584
10579
|
const mixInputs = {};
|
|
10585
10580
|
for (const t of tracks) mixInputs[t.slot] = t.ref;
|
|
@@ -10600,10 +10595,54 @@ function scaffoldVideoCanvas(input, elementsInput, opts) {
|
|
|
10600
10595
|
...duck
|
|
10601
10596
|
}
|
|
10602
10597
|
});
|
|
10598
|
+
audioMixRef = "$ref:audio_mix.audio";
|
|
10599
|
+
}
|
|
10600
|
+
if (opts.captionsCompositionPath && audioMixRef) {
|
|
10601
|
+
nodes.push({
|
|
10602
|
+
id: "captions_premux",
|
|
10603
|
+
type: "ffmpeg",
|
|
10604
|
+
inputs: { video: videoRef, audio: audioMixRef },
|
|
10605
|
+
params: {
|
|
10606
|
+
args: [
|
|
10607
|
+
"-i",
|
|
10608
|
+
"{{in.video}}",
|
|
10609
|
+
"-i",
|
|
10610
|
+
"{{in.audio}}",
|
|
10611
|
+
"-map",
|
|
10612
|
+
"0:v:0",
|
|
10613
|
+
"-map",
|
|
10614
|
+
"1:a:0",
|
|
10615
|
+
"-c:v",
|
|
10616
|
+
"copy",
|
|
10617
|
+
"-c:a",
|
|
10618
|
+
"aac",
|
|
10619
|
+
"-shortest",
|
|
10620
|
+
"{{out.video}}"
|
|
10621
|
+
],
|
|
10622
|
+
outputs: { video: { kind: "video", ext: "mp4" } }
|
|
10623
|
+
}
|
|
10624
|
+
});
|
|
10625
|
+
const captionLanguage = deriveTtsLanguageCode(blueprint);
|
|
10626
|
+
nodes.push({
|
|
10627
|
+
id: "captions_transcribe",
|
|
10628
|
+
type: "video_transcribe",
|
|
10629
|
+
inputs: { video: "$ref:captions_premux.video" },
|
|
10630
|
+
params: captionLanguage ? { language: captionLanguage } : {}
|
|
10631
|
+
});
|
|
10632
|
+
nodes.push({
|
|
10633
|
+
id: "captions",
|
|
10634
|
+
type: "hyperframe_render",
|
|
10635
|
+
inputs: { background: videoRef, transcript: "$ref:captions_transcribe.transcript" },
|
|
10636
|
+
params: { composition: opts.captionsCompositionPath }
|
|
10637
|
+
});
|
|
10638
|
+
videoRef = "$ref:captions.video";
|
|
10639
|
+
videoNode = "captions";
|
|
10640
|
+
}
|
|
10641
|
+
if (audioMixRef) {
|
|
10603
10642
|
nodes.push({
|
|
10604
10643
|
id: "final",
|
|
10605
10644
|
type: "ffmpeg",
|
|
10606
|
-
inputs: { video: videoRef, audio:
|
|
10645
|
+
inputs: { video: videoRef, audio: audioMixRef },
|
|
10607
10646
|
params: {
|
|
10608
10647
|
args: [
|
|
10609
10648
|
"-i",
|
|
@@ -10845,14 +10884,36 @@ function buildVideoTodo(report, overlayCount, floatingCount, opts, blueprint) {
|
|
|
10845
10884
|
// "none detected" — re-watch the reference and fill the gaps with the right tool.
|
|
10846
10885
|
completeness_check: 'The scaffold mirrors the deconstruct\'s catalog, which UNDER-DETECTS \u2014 never trust a 0 count. Re-watch the reference frame-by-frame and add anything missing: (1) ON-IMAGE GRAPHICS not in floating_elements (dollar/coin icons, emojis, checkmarks, rating stars, price tags, arrows, progress bars, app UI) \u2192 source each with `baker images icon "<desc>"` / `baker images sticker` / `baker images gif` / `baker images logo <domain>` and add it as an <img class="ov pos-* " data-start data-dur> in video-overlay-composition/index.html (NEVER bake graphics into the frame plates). (2) SOUND CUES not in sound_effects (cha-ching/coin, whoosh, ding, pop, notification, keyboard) \u2192 add a `sound_effect` node (eleven_text_to_sound) and wire it onto `audio_mix` at its timestamp. (3) RECURRING people/animals/products/logos/sets with no el_* slot \u2192 add an `ingest` [TODO] slot and reference it from the frames they appear in. (4) Burned-in captions/text not in text_overlays \u2192 add an <img>-free <div class="ov"> in index.html. (5) ONE person playing MULTIPLE personas/wardrobes (skeptic vs believer, before vs after, two outfits) collapsed into a single el_* slot \u2192 split into one el_* slot PER look, each linked as the SAME individual via `same_as` so every outfit has its own reference image but the face/identity stays identical.',
|
|
10847
10886
|
scenes_clamped_to_15s: report.clamped_scenes,
|
|
10887
|
+
oversize_scenes: report.oversize_scenes.length > 0 ? {
|
|
10888
|
+
scenes: report.oversize_scenes,
|
|
10889
|
+
fix: "Each listed scene's own footage is longer than the gateway-safe ~10s clip ceiling, so its clip will fail the gateway (HTTP 524) \u2014 and the scaffold can't auto-split a single scene. Split each into two scenes in prompt.json (scene N+1's start frame = scene N's end frame, so the action stays continuous) before rendering."
|
|
10890
|
+
} : "none \u2014 every scene fits within the gateway-safe clip ceiling.",
|
|
10891
|
+
overstuffed_scenes: report.overstuffed_scenes.length > 0 ? {
|
|
10892
|
+
scenes: report.overstuffed_scenes,
|
|
10893
|
+
fix: "Each listed scene's estimated speech runs well past its window \u2014 the line will overrun the scene and push the picture off the audio timeline (lips fall behind). Shorten the copy in prompt.json or lengthen the scene before rendering."
|
|
10894
|
+
} : "none \u2014 every scene's spoken length fits its window.",
|
|
10848
10895
|
run_warning: "`baker canvas run` generates many billed image/video/audio assets \u2014 validate first, it is not free."
|
|
10849
10896
|
};
|
|
10850
10897
|
}
|
|
10898
|
+
var OVERSTUFF_RATIO = 1.3;
|
|
10899
|
+
function collectClipAdvisories(scene, i, out) {
|
|
10900
|
+
const round22 = (n) => Math.round(n * 100) / 100;
|
|
10901
|
+
const original = scene.duration_s ?? 5;
|
|
10902
|
+
if (original > 15) out.clamped.push({ scene: i, original_s: original, clip_s: snapToSeedance(original) });
|
|
10903
|
+
const window = sceneDurationS(scene);
|
|
10904
|
+
if (window > SEEDANCE_SAFE_MAX_S)
|
|
10905
|
+
out.oversize.push({ scene: i, scene_s: round22(window), clip_s: ceilToSeedance(window) });
|
|
10906
|
+
const speech = (scene.dialogue ?? []).reduce((s, line) => s + (line.line ? estSpeechS(line.line) : 0), 0);
|
|
10907
|
+
if (speech > window * OVERSTUFF_RATIO)
|
|
10908
|
+
out.overstuffed.push({ scene: i, scene_s: round22(window), est_speech_s: round22(speech) });
|
|
10909
|
+
}
|
|
10851
10910
|
function videoReport(input, elementsInput) {
|
|
10852
10911
|
const blueprint = VideoBlueprint.parse(input);
|
|
10853
10912
|
const elements = RecurringElements.parse(elementsInput);
|
|
10854
10913
|
const dialogue = [];
|
|
10855
10914
|
const clamped = [];
|
|
10915
|
+
const oversize = [];
|
|
10916
|
+
const overstuffed = [];
|
|
10856
10917
|
let sfxCount = 0;
|
|
10857
10918
|
let overlayCount = 0;
|
|
10858
10919
|
blueprint.scenes.forEach((scene, i) => {
|
|
@@ -10868,9 +10929,7 @@ function videoReport(input, elementsInput) {
|
|
|
10868
10929
|
}
|
|
10869
10930
|
sfxCount += (scene.sfx ?? []).length;
|
|
10870
10931
|
overlayCount += (scene.overlays ?? []).length;
|
|
10871
|
-
|
|
10872
|
-
const clip = snapToSeedance(original);
|
|
10873
|
-
if (original > 15) clamped.push({ scene: i, original_s: original, clip_s: clip });
|
|
10932
|
+
collectClipAdvisories(scene, i, { clamped, oversize, overstuffed });
|
|
10874
10933
|
});
|
|
10875
10934
|
return {
|
|
10876
10935
|
scene_count: blueprint.scenes.length,
|
|
@@ -10885,6 +10944,8 @@ function videoReport(input, elementsInput) {
|
|
|
10885
10944
|
sfx_count: sfxCount,
|
|
10886
10945
|
overlay_count: overlayCount,
|
|
10887
10946
|
clamped_scenes: clamped,
|
|
10947
|
+
oversize_scenes: oversize,
|
|
10948
|
+
overstuffed_scenes: overstuffed,
|
|
10888
10949
|
has_music: Boolean(blueprint.global?.music?.music_prompt)
|
|
10889
10950
|
};
|
|
10890
10951
|
}
|
|
@@ -10950,12 +11011,9 @@ async function loadTranscriptBestEffort(ref) {
|
|
|
10950
11011
|
async function stageCaptions(outDir, transcript) {
|
|
10951
11012
|
const text = transcript?.trim();
|
|
10952
11013
|
if (!text || text === "[]") return {};
|
|
10953
|
-
const transcriptPath = path5.join(outDir, "transcript.json");
|
|
10954
|
-
await writeFile2(transcriptPath, `${text}
|
|
10955
|
-
`, "utf8");
|
|
10956
11014
|
const compositionPath = path5.join(outDir, "tiktok-captions-composition");
|
|
10957
11015
|
await cp(SHIPPED_CAPTIONS_DIR, compositionPath, { recursive: true });
|
|
10958
|
-
return { compositionPath
|
|
11016
|
+
return { compositionPath };
|
|
10959
11017
|
}
|
|
10960
11018
|
function parseElements2(raw) {
|
|
10961
11019
|
const parsed = JSON.parse(raw);
|
|
@@ -11161,7 +11219,6 @@ var scaffoldVideoCommand = defineCommand78({
|
|
|
11161
11219
|
videoModel,
|
|
11162
11220
|
overlayCompositionPath: compositionDest,
|
|
11163
11221
|
captionsCompositionPath: captions.compositionPath,
|
|
11164
|
-
transcriptPath: captions.transcriptPath,
|
|
11165
11222
|
blueprintPath,
|
|
11166
11223
|
frames,
|
|
11167
11224
|
ambient: Boolean(args.ambient),
|
|
@@ -11214,6 +11271,8 @@ var scaffoldVideoCommand = defineCommand78({
|
|
|
11214
11271
|
overlay_count: report.overlay_count,
|
|
11215
11272
|
has_music: report.has_music,
|
|
11216
11273
|
scenes_clamped_to_15s: report.clamped_scenes,
|
|
11274
|
+
oversize_scenes: report.oversize_scenes,
|
|
11275
|
+
overstuffed_scenes: report.overstuffed_scenes,
|
|
11217
11276
|
note: "Drop ONE real source image at each el_* [TODO] (reused across every frame that element appears in), confirm each voice_select casting, then `baker canvas validate` and `baker canvas run`. Running generates many billed image/video/audio assets \u2014 it is not free."
|
|
11218
11277
|
}
|
|
11219
11278
|
},
|
|
@@ -12108,7 +12167,7 @@ Examples:
|
|
|
12108
12167
|
});
|
|
12109
12168
|
|
|
12110
12169
|
// src/commands/images/index.ts
|
|
12111
|
-
import { defineCommand as
|
|
12170
|
+
import { defineCommand as defineCommand112 } from "citty";
|
|
12112
12171
|
|
|
12113
12172
|
// src/commands/images/crop.ts
|
|
12114
12173
|
import { defineCommand as defineCommand89 } from "citty";
|
|
@@ -14329,10 +14388,55 @@ var stockCommand = defineCommand107({
|
|
|
14329
14388
|
}
|
|
14330
14389
|
});
|
|
14331
14390
|
|
|
14391
|
+
// src/lib/tags-command.ts
|
|
14392
|
+
import { defineCommand as defineCommand108 } from "citty";
|
|
14393
|
+
function makeTagsCommand(command, label, endpoint) {
|
|
14394
|
+
registerSchema({
|
|
14395
|
+
command: `${command}.tags`,
|
|
14396
|
+
description: `List the available ${label} tag taxonomy (built-in defaults + this company's custom tags).`,
|
|
14397
|
+
args: {
|
|
14398
|
+
output: { type: "string", description: "Output format: md|json", required: false, default: "md" }
|
|
14399
|
+
}
|
|
14400
|
+
});
|
|
14401
|
+
return defineCommand108({
|
|
14402
|
+
meta: {
|
|
14403
|
+
name: "tags",
|
|
14404
|
+
description: `List the available ${label} tag names (defaults + company custom tags). Use before filtering with --tags. Example: baker ${command} tags`
|
|
14405
|
+
},
|
|
14406
|
+
args: {
|
|
14407
|
+
output: { type: "string", description: "Output format: md|json", required: false, default: "md" }
|
|
14408
|
+
},
|
|
14409
|
+
run: async ({ args }) => {
|
|
14410
|
+
try {
|
|
14411
|
+
const { markdown } = await apiGet(endpoint);
|
|
14412
|
+
if (args.output === "json") {
|
|
14413
|
+
writeJson({ ok: true, data: { markdown } });
|
|
14414
|
+
return;
|
|
14415
|
+
}
|
|
14416
|
+
process.stdout.write(`${markdown.trimEnd()}
|
|
14417
|
+
`);
|
|
14418
|
+
} catch (err) {
|
|
14419
|
+
const code = err instanceof ApiError ? err.code : "INTERNAL_ERROR";
|
|
14420
|
+
const message = err instanceof ApiError ? err.message : "Unexpected error";
|
|
14421
|
+
if (args.output === "json") {
|
|
14422
|
+
writeJson({ ok: false, error: { code, message } });
|
|
14423
|
+
} else {
|
|
14424
|
+
process.stderr.write(`Error: ${message}
|
|
14425
|
+
`);
|
|
14426
|
+
}
|
|
14427
|
+
process.exit(1);
|
|
14428
|
+
}
|
|
14429
|
+
}
|
|
14430
|
+
});
|
|
14431
|
+
}
|
|
14432
|
+
|
|
14433
|
+
// src/commands/images/tags.ts
|
|
14434
|
+
var tagsCommand = makeTagsCommand("images", "image", "/api/images/tags");
|
|
14435
|
+
|
|
14332
14436
|
// src/commands/images/upload.ts
|
|
14333
14437
|
import { readFile as readFile9 } from "fs/promises";
|
|
14334
14438
|
import { extname as extname2 } from "path";
|
|
14335
|
-
import { defineCommand as
|
|
14439
|
+
import { defineCommand as defineCommand109 } from "citty";
|
|
14336
14440
|
var MIME_MAP = {
|
|
14337
14441
|
".png": "image/png",
|
|
14338
14442
|
".jpg": "image/jpeg",
|
|
@@ -14387,7 +14491,7 @@ function detectContentType(filePath) {
|
|
|
14387
14491
|
}
|
|
14388
14492
|
return mime;
|
|
14389
14493
|
}
|
|
14390
|
-
var uploadCommand =
|
|
14494
|
+
var uploadCommand = defineCommand109({
|
|
14391
14495
|
meta: {
|
|
14392
14496
|
name: "upload",
|
|
14393
14497
|
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'"
|
|
@@ -14480,7 +14584,7 @@ async function uploadLocal(target, args) {
|
|
|
14480
14584
|
}
|
|
14481
14585
|
|
|
14482
14586
|
// src/commands/images/upscale.ts
|
|
14483
|
-
import { defineCommand as
|
|
14587
|
+
import { defineCommand as defineCommand110 } from "citty";
|
|
14484
14588
|
registerSchema({
|
|
14485
14589
|
command: "images.upscale",
|
|
14486
14590
|
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).",
|
|
@@ -14495,7 +14599,7 @@ registerSchema({
|
|
|
14495
14599
|
}
|
|
14496
14600
|
});
|
|
14497
14601
|
var POLL_INTERVAL_MS3 = 1500;
|
|
14498
|
-
var upscaleCommand =
|
|
14602
|
+
var upscaleCommand = defineCommand110({
|
|
14499
14603
|
meta: {
|
|
14500
14604
|
name: "upscale",
|
|
14501
14605
|
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"
|
|
@@ -14550,7 +14654,7 @@ var upscaleCommand = defineCommand109({
|
|
|
14550
14654
|
});
|
|
14551
14655
|
|
|
14552
14656
|
// src/commands/images/use.ts
|
|
14553
|
-
import { defineCommand as
|
|
14657
|
+
import { defineCommand as defineCommand111 } from "citty";
|
|
14554
14658
|
registerSchema({
|
|
14555
14659
|
command: "images.use",
|
|
14556
14660
|
description: "Ingest a URL and wait for the library record to be ready.",
|
|
@@ -14566,7 +14670,7 @@ registerSchema({
|
|
|
14566
14670
|
}
|
|
14567
14671
|
});
|
|
14568
14672
|
var POLL_INTERVAL_MS4 = 1500;
|
|
14569
|
-
var useCommand =
|
|
14673
|
+
var useCommand = defineCommand111({
|
|
14570
14674
|
meta: {
|
|
14571
14675
|
name: "use",
|
|
14572
14676
|
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"
|
|
@@ -14612,7 +14716,7 @@ var useCommand = defineCommand110({
|
|
|
14612
14716
|
});
|
|
14613
14717
|
|
|
14614
14718
|
// src/commands/images/index.ts
|
|
14615
|
-
var imagesCommand =
|
|
14719
|
+
var imagesCommand = defineCommand112({
|
|
14616
14720
|
meta: {
|
|
14617
14721
|
name: "images",
|
|
14618
14722
|
description: `Find, source, and normalize images. Subcommands route by provider so cost + license are explicit.
|
|
@@ -14648,6 +14752,9 @@ Local transforms (operate on files in the sandbox, before upload):
|
|
|
14648
14752
|
Coordinate-based rectangular extract
|
|
14649
14753
|
baker images dimensions <file-or-url> Width / height / aspect / format without decoding the full image
|
|
14650
14754
|
|
|
14755
|
+
Taxonomy:
|
|
14756
|
+
baker images tags List available image tag names (defaults + company custom tags)
|
|
14757
|
+
|
|
14651
14758
|
Paid transforms (run on the Convex backend, cost-tracked):
|
|
14652
14759
|
baker images upscale <imageId> Real-ESRGAN super-resolution ($0.05/image, waits for completion)`
|
|
14653
14760
|
},
|
|
@@ -14673,15 +14780,16 @@ Paid transforms (run on the Convex backend, cost-tracked):
|
|
|
14673
14780
|
normalize: normalizeCommand,
|
|
14674
14781
|
crop: cropCommand,
|
|
14675
14782
|
dimensions: dimensionsCommand,
|
|
14676
|
-
upscale: upscaleCommand
|
|
14783
|
+
upscale: upscaleCommand,
|
|
14784
|
+
tags: tagsCommand
|
|
14677
14785
|
}
|
|
14678
14786
|
});
|
|
14679
14787
|
|
|
14680
14788
|
// src/commands/research/index.ts
|
|
14681
|
-
import { defineCommand as
|
|
14789
|
+
import { defineCommand as defineCommand123 } from "citty";
|
|
14682
14790
|
|
|
14683
14791
|
// src/commands/research/advertisers.ts
|
|
14684
|
-
import { defineCommand as
|
|
14792
|
+
import { defineCommand as defineCommand113 } from "citty";
|
|
14685
14793
|
|
|
14686
14794
|
// src/commands/research/output.ts
|
|
14687
14795
|
var RESEARCH_DATA_NOTE = "Estimates based on third-party SERP data \u2014 not exact figures. Use for directional insights, not precise measurement.";
|
|
@@ -14794,7 +14902,7 @@ var FIELDS3 = {
|
|
|
14794
14902
|
etv: "Estimated traffic value (USD)",
|
|
14795
14903
|
visibility: "SERP visibility score (0-1)"
|
|
14796
14904
|
};
|
|
14797
|
-
var advertisersCommand =
|
|
14905
|
+
var advertisersCommand = defineCommand113({
|
|
14798
14906
|
meta: {
|
|
14799
14907
|
name: "advertisers",
|
|
14800
14908
|
description: `Find domains competing for a keyword in Google SERPs.
|
|
@@ -14841,7 +14949,7 @@ Examples:
|
|
|
14841
14949
|
});
|
|
14842
14950
|
|
|
14843
14951
|
// src/commands/research/autocomplete.ts
|
|
14844
|
-
import { defineCommand as
|
|
14952
|
+
import { defineCommand as defineCommand114 } from "citty";
|
|
14845
14953
|
registerSchema({
|
|
14846
14954
|
command: "research.autocomplete",
|
|
14847
14955
|
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).",
|
|
@@ -14864,7 +14972,7 @@ registerSchema({
|
|
|
14864
14972
|
var FIELDS4 = {
|
|
14865
14973
|
suggestion: "Autocomplete suggestion from Google"
|
|
14866
14974
|
};
|
|
14867
|
-
var autocompleteCommand =
|
|
14975
|
+
var autocompleteCommand = defineCommand114({
|
|
14868
14976
|
meta: {
|
|
14869
14977
|
name: "autocomplete",
|
|
14870
14978
|
description: `Get Google Autocomplete suggestions for keyword expansion.
|
|
@@ -14910,7 +15018,7 @@ Examples:
|
|
|
14910
15018
|
});
|
|
14911
15019
|
|
|
14912
15020
|
// src/commands/research/countries.ts
|
|
14913
|
-
import { defineCommand as
|
|
15021
|
+
import { defineCommand as defineCommand115 } from "citty";
|
|
14914
15022
|
registerSchema({
|
|
14915
15023
|
command: "research.countries",
|
|
14916
15024
|
description: "List all supported country codes for --location flag in research commands.",
|
|
@@ -14967,7 +15075,7 @@ var FIELDS5 = {
|
|
|
14967
15075
|
code: "Country code to pass as --location",
|
|
14968
15076
|
name: "Country name"
|
|
14969
15077
|
};
|
|
14970
|
-
var countriesCommand =
|
|
15078
|
+
var countriesCommand = defineCommand115({
|
|
14971
15079
|
meta: {
|
|
14972
15080
|
name: "countries",
|
|
14973
15081
|
description: "List all supported country codes for --location flag."
|
|
@@ -14978,7 +15086,7 @@ var countriesCommand = defineCommand114({
|
|
|
14978
15086
|
});
|
|
14979
15087
|
|
|
14980
15088
|
// src/commands/research/intent.ts
|
|
14981
|
-
import { defineCommand as
|
|
15089
|
+
import { defineCommand as defineCommand116 } from "citty";
|
|
14982
15090
|
registerSchema({
|
|
14983
15091
|
command: "research.intent",
|
|
14984
15092
|
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.",
|
|
@@ -15001,7 +15109,7 @@ var FIELDS6 = {
|
|
|
15001
15109
|
intent: "Primary Google Search intent: informational, navigational, commercial, transactional",
|
|
15002
15110
|
probability: "Confidence score 0.0-1.0"
|
|
15003
15111
|
};
|
|
15004
|
-
var intentCommand =
|
|
15112
|
+
var intentCommand = defineCommand116({
|
|
15005
15113
|
meta: {
|
|
15006
15114
|
name: "intent",
|
|
15007
15115
|
description: `Classify Google Search intent for keywords. Returns intent type and confidence.
|
|
@@ -15049,7 +15157,7 @@ Examples:
|
|
|
15049
15157
|
});
|
|
15050
15158
|
|
|
15051
15159
|
// src/commands/research/keyword-gap.ts
|
|
15052
|
-
import { defineCommand as
|
|
15160
|
+
import { defineCommand as defineCommand117 } from "citty";
|
|
15053
15161
|
registerSchema({
|
|
15054
15162
|
command: "research.keyword-gap",
|
|
15055
15163
|
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.",
|
|
@@ -15078,7 +15186,7 @@ var FIELDS7 = {
|
|
|
15078
15186
|
cpc: "Cost per click USD",
|
|
15079
15187
|
their_position: "Competitor's ranking position"
|
|
15080
15188
|
};
|
|
15081
|
-
var keywordGapCommand =
|
|
15189
|
+
var keywordGapCommand = defineCommand117({
|
|
15082
15190
|
meta: {
|
|
15083
15191
|
name: "keyword-gap",
|
|
15084
15192
|
description: `Find keywords a competitor has that you don't. Supports pagination via --offset.
|
|
@@ -15152,7 +15260,7 @@ Examples:
|
|
|
15152
15260
|
});
|
|
15153
15261
|
|
|
15154
15262
|
// src/commands/research/keywords-for-site.ts
|
|
15155
|
-
import { defineCommand as
|
|
15263
|
+
import { defineCommand as defineCommand118 } from "citty";
|
|
15156
15264
|
registerSchema({
|
|
15157
15265
|
command: "research.keywords-for-site",
|
|
15158
15266
|
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.",
|
|
@@ -15185,7 +15293,7 @@ var FIELDS8 = {
|
|
|
15185
15293
|
competition: "LOW, MEDIUM, or HIGH",
|
|
15186
15294
|
competition_index: "Competition score 0-100"
|
|
15187
15295
|
};
|
|
15188
|
-
var keywordsForSiteCommand =
|
|
15296
|
+
var keywordsForSiteCommand = defineCommand118({
|
|
15189
15297
|
meta: {
|
|
15190
15298
|
name: "keywords-for-site",
|
|
15191
15299
|
description: `Get keywords a competitor targets in Google. Use --type to filter paid/organic.
|
|
@@ -15238,7 +15346,7 @@ Examples:
|
|
|
15238
15346
|
});
|
|
15239
15347
|
|
|
15240
15348
|
// src/commands/research/languages.ts
|
|
15241
|
-
import { defineCommand as
|
|
15349
|
+
import { defineCommand as defineCommand119 } from "citty";
|
|
15242
15350
|
registerSchema({
|
|
15243
15351
|
command: "research.languages",
|
|
15244
15352
|
description: "List all supported language codes for --language flag in research commands.",
|
|
@@ -15268,7 +15376,7 @@ var FIELDS9 = {
|
|
|
15268
15376
|
code: "Language code to pass as --language",
|
|
15269
15377
|
name: "Language name (also accepted by --language)"
|
|
15270
15378
|
};
|
|
15271
|
-
var languagesCommand2 =
|
|
15379
|
+
var languagesCommand2 = defineCommand119({
|
|
15272
15380
|
meta: {
|
|
15273
15381
|
name: "languages",
|
|
15274
15382
|
description: "List all supported language codes for --language flag."
|
|
@@ -15279,7 +15387,7 @@ var languagesCommand2 = defineCommand118({
|
|
|
15279
15387
|
});
|
|
15280
15388
|
|
|
15281
15389
|
// src/commands/research/lighthouse.ts
|
|
15282
|
-
import { defineCommand as
|
|
15390
|
+
import { defineCommand as defineCommand120 } from "citty";
|
|
15283
15391
|
registerSchema({
|
|
15284
15392
|
command: "research.lighthouse",
|
|
15285
15393
|
description: "Landing page performance audit. Returns metrics that affect Google Ads Quality Score and CPC.",
|
|
@@ -15298,7 +15406,7 @@ var FIELDS10 = {
|
|
|
15298
15406
|
speed_index_ms: "Speed Index in ms (good: < 3400)",
|
|
15299
15407
|
interactive_ms: "Time to Interactive in ms (good: < 3800)"
|
|
15300
15408
|
};
|
|
15301
|
-
var lighthouseCommand =
|
|
15409
|
+
var lighthouseCommand = defineCommand120({
|
|
15302
15410
|
meta: {
|
|
15303
15411
|
name: "lighthouse",
|
|
15304
15412
|
description: `Landing page performance audit. Metrics affecting Google Ads Quality Score.
|
|
@@ -15336,7 +15444,7 @@ Examples:
|
|
|
15336
15444
|
});
|
|
15337
15445
|
|
|
15338
15446
|
// src/commands/research/relevant-pages.ts
|
|
15339
|
-
import { defineCommand as
|
|
15447
|
+
import { defineCommand as defineCommand121 } from "citty";
|
|
15340
15448
|
registerSchema({
|
|
15341
15449
|
command: "research.relevant-pages",
|
|
15342
15450
|
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).",
|
|
@@ -15362,7 +15470,7 @@ var FIELDS11 = {
|
|
|
15362
15470
|
keywords: "Total organic keywords the page ranks for",
|
|
15363
15471
|
top_10: "Keywords in positions 1-10"
|
|
15364
15472
|
};
|
|
15365
|
-
var relevantPagesCommand =
|
|
15473
|
+
var relevantPagesCommand = defineCommand121({
|
|
15366
15474
|
meta: {
|
|
15367
15475
|
name: "relevant-pages",
|
|
15368
15476
|
description: `Get the top pages of a competitor domain with traffic data.
|
|
@@ -15408,7 +15516,7 @@ Examples:
|
|
|
15408
15516
|
});
|
|
15409
15517
|
|
|
15410
15518
|
// src/commands/research/web.ts
|
|
15411
|
-
import { defineCommand as
|
|
15519
|
+
import { defineCommand as defineCommand122 } from "citty";
|
|
15412
15520
|
registerSchema({
|
|
15413
15521
|
command: "research.web",
|
|
15414
15522
|
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).",
|
|
@@ -15459,7 +15567,7 @@ async function runDeepResearch(question) {
|
|
|
15459
15567
|
}
|
|
15460
15568
|
throw new Error("Deep research timed out");
|
|
15461
15569
|
}
|
|
15462
|
-
var webCommand =
|
|
15570
|
+
var webCommand = defineCommand122({
|
|
15463
15571
|
meta: {
|
|
15464
15572
|
name: "web",
|
|
15465
15573
|
description: `Search the web with AI to answer any open-ended marketing question. Uses live internet data via Google Search.
|
|
@@ -15519,7 +15627,7 @@ Examples:
|
|
|
15519
15627
|
});
|
|
15520
15628
|
|
|
15521
15629
|
// src/commands/research/index.ts
|
|
15522
|
-
var researchCommand =
|
|
15630
|
+
var researchCommand = defineCommand123({
|
|
15523
15631
|
meta: {
|
|
15524
15632
|
name: "research",
|
|
15525
15633
|
description: `Competitive intelligence and AI-powered research commands.
|
|
@@ -15559,10 +15667,10 @@ Examples:
|
|
|
15559
15667
|
});
|
|
15560
15668
|
|
|
15561
15669
|
// src/commands/scheduled-actions/index.ts
|
|
15562
|
-
import { defineCommand as
|
|
15670
|
+
import { defineCommand as defineCommand130 } from "citty";
|
|
15563
15671
|
|
|
15564
15672
|
// src/commands/scheduled-actions/create.ts
|
|
15565
|
-
import { defineCommand as
|
|
15673
|
+
import { defineCommand as defineCommand124 } from "citty";
|
|
15566
15674
|
|
|
15567
15675
|
// src/commands/scheduled-actions/shared.ts
|
|
15568
15676
|
var TEMP_SCHEDULED_ACTION_PREFIX = "temp_sched_";
|
|
@@ -15667,7 +15775,7 @@ registerSchema({
|
|
|
15667
15775
|
prompt: { type: "string", description: "Additional prompt instructions for the spawned agent", required: false }
|
|
15668
15776
|
}
|
|
15669
15777
|
});
|
|
15670
|
-
var createCommand2 =
|
|
15778
|
+
var createCommand2 = defineCommand124({
|
|
15671
15779
|
meta: {
|
|
15672
15780
|
name: "create",
|
|
15673
15781
|
description: 'Stage a scheduled action. Example: baker scheduled-actions create --name "Weekly report" --description "..." --cron "0 9 * * MON"'
|
|
@@ -15715,7 +15823,7 @@ var createCommand2 = defineCommand123({
|
|
|
15715
15823
|
});
|
|
15716
15824
|
|
|
15717
15825
|
// src/commands/scheduled-actions/delete.ts
|
|
15718
|
-
import { defineCommand as
|
|
15826
|
+
import { defineCommand as defineCommand125 } from "citty";
|
|
15719
15827
|
registerSchema({
|
|
15720
15828
|
command: "scheduled-actions.delete",
|
|
15721
15829
|
description: "Stage deletion of a published scheduled action or cancellation of a temp_sched_* draft creation.",
|
|
@@ -15723,7 +15831,7 @@ registerSchema({
|
|
|
15723
15831
|
id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
|
|
15724
15832
|
}
|
|
15725
15833
|
});
|
|
15726
|
-
var deleteCommand2 =
|
|
15834
|
+
var deleteCommand2 = defineCommand125({
|
|
15727
15835
|
meta: {
|
|
15728
15836
|
name: "delete",
|
|
15729
15837
|
description: "Stage scheduled action deletion. Example: baker scheduled-actions delete <id-or-temp_sched_id>"
|
|
@@ -15752,7 +15860,7 @@ var deleteCommand2 = defineCommand124({
|
|
|
15752
15860
|
});
|
|
15753
15861
|
|
|
15754
15862
|
// src/commands/scheduled-actions/get.ts
|
|
15755
|
-
import { defineCommand as
|
|
15863
|
+
import { defineCommand as defineCommand126 } from "citty";
|
|
15756
15864
|
registerSchema({
|
|
15757
15865
|
command: "scheduled-actions.get",
|
|
15758
15866
|
description: "Get a published scheduled action or a temp_sched_* draft-created scheduled action.",
|
|
@@ -15760,7 +15868,7 @@ registerSchema({
|
|
|
15760
15868
|
id: { type: "string", description: "Published scheduled action ID or temp_sched_* draft ID", required: true }
|
|
15761
15869
|
}
|
|
15762
15870
|
});
|
|
15763
|
-
var getCommand3 =
|
|
15871
|
+
var getCommand3 = defineCommand126({
|
|
15764
15872
|
meta: {
|
|
15765
15873
|
name: "get",
|
|
15766
15874
|
description: "Get a scheduled action. Example: baker scheduled-actions get <id-or-temp_sched_id>"
|
|
@@ -15797,13 +15905,13 @@ var getCommand3 = defineCommand125({
|
|
|
15797
15905
|
});
|
|
15798
15906
|
|
|
15799
15907
|
// src/commands/scheduled-actions/list.ts
|
|
15800
|
-
import { defineCommand as
|
|
15908
|
+
import { defineCommand as defineCommand127 } from "citty";
|
|
15801
15909
|
registerSchema({
|
|
15802
15910
|
command: "scheduled-actions.list",
|
|
15803
15911
|
description: "List published scheduled actions. Includes draft state when BAKER_CHAT_ID is set.",
|
|
15804
15912
|
args: {}
|
|
15805
15913
|
});
|
|
15806
|
-
var listCommand3 =
|
|
15914
|
+
var listCommand3 = defineCommand127({
|
|
15807
15915
|
meta: {
|
|
15808
15916
|
name: "list",
|
|
15809
15917
|
description: "List scheduled actions. Includes staged draft ops when BAKER_CHAT_ID is set."
|
|
@@ -15824,7 +15932,7 @@ var listCommand3 = defineCommand126({
|
|
|
15824
15932
|
});
|
|
15825
15933
|
|
|
15826
15934
|
// src/commands/scheduled-actions/trigger.ts
|
|
15827
|
-
import { defineCommand as
|
|
15935
|
+
import { defineCommand as defineCommand128 } from "citty";
|
|
15828
15936
|
registerSchema({
|
|
15829
15937
|
command: "scheduled-actions.trigger",
|
|
15830
15938
|
description: "Immediately trigger a published scheduled action. Does not require BAKER_CHAT_ID and rejects temp_sched_* IDs.",
|
|
@@ -15832,7 +15940,7 @@ registerSchema({
|
|
|
15832
15940
|
id: { type: "string", description: "Published scheduled action ID", required: true }
|
|
15833
15941
|
}
|
|
15834
15942
|
});
|
|
15835
|
-
var triggerCommand =
|
|
15943
|
+
var triggerCommand = defineCommand128({
|
|
15836
15944
|
meta: {
|
|
15837
15945
|
name: "trigger",
|
|
15838
15946
|
description: "Immediately trigger a published scheduled action. Example: baker scheduled-actions trigger <id>"
|
|
@@ -15869,7 +15977,7 @@ var triggerCommand = defineCommand127({
|
|
|
15869
15977
|
});
|
|
15870
15978
|
|
|
15871
15979
|
// src/commands/scheduled-actions/update.ts
|
|
15872
|
-
import { defineCommand as
|
|
15980
|
+
import { defineCommand as defineCommand129 } from "citty";
|
|
15873
15981
|
registerSchema({
|
|
15874
15982
|
command: "scheduled-actions.update",
|
|
15875
15983
|
description: "Stage an update to a published scheduled action or temp_sched_* draft-created scheduled action.",
|
|
@@ -15894,7 +16002,7 @@ registerSchema({
|
|
|
15894
16002
|
prompt: { type: "string", description: "Replacement additional spawned-agent instructions", required: false }
|
|
15895
16003
|
}
|
|
15896
16004
|
});
|
|
15897
|
-
var updateCommand2 =
|
|
16005
|
+
var updateCommand2 = defineCommand129({
|
|
15898
16006
|
meta: {
|
|
15899
16007
|
name: "update",
|
|
15900
16008
|
description: "Stage a scheduled action update. Example: baker scheduled-actions update <id> --enabled false"
|
|
@@ -15964,7 +16072,7 @@ var updateCommand2 = defineCommand128({
|
|
|
15964
16072
|
});
|
|
15965
16073
|
|
|
15966
16074
|
// src/commands/scheduled-actions/index.ts
|
|
15967
|
-
var scheduledActionsCommand =
|
|
16075
|
+
var scheduledActionsCommand = defineCommand130({
|
|
15968
16076
|
meta: {
|
|
15969
16077
|
name: "scheduled-actions",
|
|
15970
16078
|
description: `Manage Scheduled Actions. Subcommands: list, get, create, update, delete, trigger.
|
|
@@ -15990,8 +16098,8 @@ Examples:
|
|
|
15990
16098
|
});
|
|
15991
16099
|
|
|
15992
16100
|
// src/commands/schema.ts
|
|
15993
|
-
import { defineCommand as
|
|
15994
|
-
var schemaCommand =
|
|
16101
|
+
import { defineCommand as defineCommand131 } from "citty";
|
|
16102
|
+
var schemaCommand = defineCommand131({
|
|
15995
16103
|
meta: {
|
|
15996
16104
|
name: "schema",
|
|
15997
16105
|
description: "Inspect command argument schemas (for AI agent introspection). Lists all commands if no argument given. Example: baker schema images.search"
|
|
@@ -16027,10 +16135,10 @@ var schemaCommand = defineCommand130({
|
|
|
16027
16135
|
});
|
|
16028
16136
|
|
|
16029
16137
|
// src/commands/testimonials/index.ts
|
|
16030
|
-
import { defineCommand as
|
|
16138
|
+
import { defineCommand as defineCommand135 } from "citty";
|
|
16031
16139
|
|
|
16032
16140
|
// src/commands/testimonials/get.ts
|
|
16033
|
-
import { defineCommand as
|
|
16141
|
+
import { defineCommand as defineCommand132 } from "citty";
|
|
16034
16142
|
registerSchema({
|
|
16035
16143
|
command: "testimonials.get",
|
|
16036
16144
|
description: "Get a single testimonial by ID",
|
|
@@ -16038,7 +16146,7 @@ registerSchema({
|
|
|
16038
16146
|
id: { type: "string", description: "Testimonial ID", required: true }
|
|
16039
16147
|
}
|
|
16040
16148
|
});
|
|
16041
|
-
var getCommand4 =
|
|
16149
|
+
var getCommand4 = defineCommand132({
|
|
16042
16150
|
meta: { name: "get", description: "Get a single testimonial by ID. Example: baker testimonials get j571abc123" },
|
|
16043
16151
|
args: {
|
|
16044
16152
|
id: { type: "positional", description: "Testimonial ID", required: false },
|
|
@@ -16075,7 +16183,7 @@ var getCommand4 = defineCommand131({
|
|
|
16075
16183
|
});
|
|
16076
16184
|
|
|
16077
16185
|
// src/commands/testimonials/list.ts
|
|
16078
|
-
import { defineCommand as
|
|
16186
|
+
import { defineCommand as defineCommand133 } from "citty";
|
|
16079
16187
|
registerSchema({
|
|
16080
16188
|
command: "testimonials.list",
|
|
16081
16189
|
description: "List testimonials with optional filters.",
|
|
@@ -16105,7 +16213,7 @@ registerSchema({
|
|
|
16105
16213
|
limit: { type: "number", description: "Max results (default 50)", required: false, default: 50 }
|
|
16106
16214
|
}
|
|
16107
16215
|
});
|
|
16108
|
-
var listCommand4 =
|
|
16216
|
+
var listCommand4 = defineCommand133({
|
|
16109
16217
|
meta: {
|
|
16110
16218
|
name: "list",
|
|
16111
16219
|
description: "List testimonials with optional filters. Example: baker testimonials list --source google --sentiment positive"
|
|
@@ -16154,7 +16262,7 @@ var listCommand4 = defineCommand132({
|
|
|
16154
16262
|
});
|
|
16155
16263
|
|
|
16156
16264
|
// src/commands/testimonials/search.ts
|
|
16157
|
-
import { defineCommand as
|
|
16265
|
+
import { defineCommand as defineCommand134 } from "citty";
|
|
16158
16266
|
registerSchema({
|
|
16159
16267
|
command: "testimonials.search",
|
|
16160
16268
|
description: "Search testimonials by text query. Uses hybrid BM25 + vector + reranking.",
|
|
@@ -16185,7 +16293,7 @@ registerSchema({
|
|
|
16185
16293
|
tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
|
|
16186
16294
|
}
|
|
16187
16295
|
});
|
|
16188
|
-
var searchCommand2 =
|
|
16296
|
+
var searchCommand2 = defineCommand134({
|
|
16189
16297
|
meta: {
|
|
16190
16298
|
name: "search",
|
|
16191
16299
|
description: "Semantic search testimonials by text query. Uses hybrid BM25 + vector + reranking. Example: baker testimonials search 'great service' --rating-min 4"
|
|
@@ -16255,30 +16363,35 @@ var searchCommand2 = defineCommand133({
|
|
|
16255
16363
|
}
|
|
16256
16364
|
});
|
|
16257
16365
|
|
|
16366
|
+
// src/commands/testimonials/tags.ts
|
|
16367
|
+
var tagsCommand2 = makeTagsCommand("testimonials", "testimonial", "/api/testimonials/tags");
|
|
16368
|
+
|
|
16258
16369
|
// src/commands/testimonials/index.ts
|
|
16259
|
-
var testimonialsCommand =
|
|
16370
|
+
var testimonialsCommand = defineCommand135({
|
|
16260
16371
|
meta: {
|
|
16261
16372
|
name: "testimonials",
|
|
16262
|
-
description: `Find and browse testimonials in Baker. Subcommands: search, get, list.
|
|
16373
|
+
description: `Find and browse testimonials in Baker. Subcommands: search, get, list, tags.
|
|
16263
16374
|
|
|
16264
16375
|
Examples:
|
|
16265
16376
|
baker testimonials search "great customer service" --limit 5
|
|
16266
16377
|
baker testimonials search "value for money" --rating-min 4
|
|
16267
16378
|
baker testimonials get <testimonial-id>
|
|
16268
|
-
baker testimonials list --source google --sentiment positive
|
|
16379
|
+
baker testimonials list --source google --sentiment positive
|
|
16380
|
+
baker testimonials tags`
|
|
16269
16381
|
},
|
|
16270
16382
|
subCommands: {
|
|
16271
16383
|
get: getCommand4,
|
|
16272
16384
|
search: searchCommand2,
|
|
16273
|
-
list: listCommand4
|
|
16385
|
+
list: listCommand4,
|
|
16386
|
+
tags: tagsCommand2
|
|
16274
16387
|
}
|
|
16275
16388
|
});
|
|
16276
16389
|
|
|
16277
16390
|
// src/commands/videos/index.ts
|
|
16278
|
-
import { defineCommand as
|
|
16391
|
+
import { defineCommand as defineCommand140 } from "citty";
|
|
16279
16392
|
|
|
16280
16393
|
// src/commands/videos/delete.ts
|
|
16281
|
-
import { defineCommand as
|
|
16394
|
+
import { defineCommand as defineCommand136 } from "citty";
|
|
16282
16395
|
registerSchema({
|
|
16283
16396
|
command: "videos.delete",
|
|
16284
16397
|
description: "Delete a video by ID",
|
|
@@ -16292,7 +16405,7 @@ registerSchema({
|
|
|
16292
16405
|
}
|
|
16293
16406
|
}
|
|
16294
16407
|
});
|
|
16295
|
-
var deleteCommand3 =
|
|
16408
|
+
var deleteCommand3 = defineCommand136({
|
|
16296
16409
|
meta: {
|
|
16297
16410
|
name: "delete",
|
|
16298
16411
|
description: "Delete a video by ID. Use --dry-run to preview. Example: baker videos delete j571abc123 --dry-run"
|
|
@@ -16333,7 +16446,7 @@ var deleteCommand3 = defineCommand135({
|
|
|
16333
16446
|
});
|
|
16334
16447
|
|
|
16335
16448
|
// src/commands/videos/get.ts
|
|
16336
|
-
import { defineCommand as
|
|
16449
|
+
import { defineCommand as defineCommand137 } from "citty";
|
|
16337
16450
|
registerSchema({
|
|
16338
16451
|
command: "videos.get",
|
|
16339
16452
|
description: "Get a single video by ID",
|
|
@@ -16341,7 +16454,7 @@ registerSchema({
|
|
|
16341
16454
|
id: { type: "string", description: "Video ID", required: true }
|
|
16342
16455
|
}
|
|
16343
16456
|
});
|
|
16344
|
-
var getCommand5 =
|
|
16457
|
+
var getCommand5 = defineCommand137({
|
|
16345
16458
|
meta: { name: "get", description: "Get a single video by ID. Example: baker videos get j571abc123" },
|
|
16346
16459
|
args: {
|
|
16347
16460
|
id: { type: "positional", description: "Video ID", required: false },
|
|
@@ -16378,7 +16491,7 @@ var getCommand5 = defineCommand136({
|
|
|
16378
16491
|
});
|
|
16379
16492
|
|
|
16380
16493
|
// src/commands/videos/search.ts
|
|
16381
|
-
import { defineCommand as
|
|
16494
|
+
import { defineCommand as defineCommand138 } from "citty";
|
|
16382
16495
|
registerSchema({
|
|
16383
16496
|
command: "videos.search",
|
|
16384
16497
|
description: "Search videos by text query. Only returns ready videos.",
|
|
@@ -16388,7 +16501,7 @@ registerSchema({
|
|
|
16388
16501
|
tags: { type: "string", description: "Comma-separated tags to filter by", required: false }
|
|
16389
16502
|
}
|
|
16390
16503
|
});
|
|
16391
|
-
var searchCommand3 =
|
|
16504
|
+
var searchCommand3 = defineCommand138({
|
|
16392
16505
|
meta: {
|
|
16393
16506
|
name: "search",
|
|
16394
16507
|
description: "Semantic search videos by text query. Uses hybrid BM25 + vector + reranking. Example: baker videos search 'product demo' --tags tutorial"
|
|
@@ -16434,10 +16547,13 @@ var searchCommand3 = defineCommand137({
|
|
|
16434
16547
|
}
|
|
16435
16548
|
});
|
|
16436
16549
|
|
|
16550
|
+
// src/commands/videos/tags.ts
|
|
16551
|
+
var tagsCommand3 = makeTagsCommand("videos", "video", "/api/videos/tags");
|
|
16552
|
+
|
|
16437
16553
|
// src/commands/videos/upload.ts
|
|
16438
16554
|
import { readFile as readFile10, stat as stat3 } from "fs/promises";
|
|
16439
16555
|
import { extname as extname3 } from "path";
|
|
16440
|
-
import { defineCommand as
|
|
16556
|
+
import { defineCommand as defineCommand139 } from "citty";
|
|
16441
16557
|
var MIME_MAP2 = {
|
|
16442
16558
|
".mp4": "video/mp4",
|
|
16443
16559
|
".mov": "video/quicktime",
|
|
@@ -16471,7 +16587,7 @@ function detectContentType2(filePath) {
|
|
|
16471
16587
|
}
|
|
16472
16588
|
return mime;
|
|
16473
16589
|
}
|
|
16474
|
-
var uploadCommand2 =
|
|
16590
|
+
var uploadCommand2 = defineCommand139({
|
|
16475
16591
|
meta: {
|
|
16476
16592
|
name: "upload",
|
|
16477
16593
|
description: "Upload a video file to Baker via Mux direct upload. Auto-detects content type. Example: baker videos upload ./demo.mp4"
|
|
@@ -16525,31 +16641,33 @@ var uploadCommand2 = defineCommand138({
|
|
|
16525
16641
|
});
|
|
16526
16642
|
|
|
16527
16643
|
// src/commands/videos/index.ts
|
|
16528
|
-
var videosCommand =
|
|
16644
|
+
var videosCommand = defineCommand140({
|
|
16529
16645
|
meta: {
|
|
16530
16646
|
name: "videos",
|
|
16531
|
-
description: `Find and manage videos in Baker. Subcommands: search, get, upload, delete.
|
|
16647
|
+
description: `Find and manage videos in Baker. Subcommands: search, get, upload, delete, tags.
|
|
16532
16648
|
|
|
16533
16649
|
Examples:
|
|
16534
16650
|
baker videos search "product demo" --limit 5
|
|
16535
16651
|
baker videos search "tutorial" --tags explainer
|
|
16536
16652
|
baker videos get <video-id>
|
|
16537
16653
|
baker videos upload ./demo.mp4
|
|
16538
|
-
baker videos delete <video-id> --dry-run
|
|
16654
|
+
baker videos delete <video-id> --dry-run
|
|
16655
|
+
baker videos tags`
|
|
16539
16656
|
},
|
|
16540
16657
|
subCommands: {
|
|
16541
16658
|
get: getCommand5,
|
|
16542
16659
|
search: searchCommand3,
|
|
16543
16660
|
upload: uploadCommand2,
|
|
16544
|
-
delete: deleteCommand3
|
|
16661
|
+
delete: deleteCommand3,
|
|
16662
|
+
tags: tagsCommand3
|
|
16545
16663
|
}
|
|
16546
16664
|
});
|
|
16547
16665
|
|
|
16548
16666
|
// src/commands/winning-ads/index.ts
|
|
16549
|
-
import { defineCommand as
|
|
16667
|
+
import { defineCommand as defineCommand143 } from "citty";
|
|
16550
16668
|
|
|
16551
16669
|
// src/commands/winning-ads/advertisers.ts
|
|
16552
|
-
import { defineCommand as
|
|
16670
|
+
import { defineCommand as defineCommand141 } from "citty";
|
|
16553
16671
|
registerSchema({
|
|
16554
16672
|
command: "winning-ads.advertisers",
|
|
16555
16673
|
description: "Resolve a brand name to advertiser_id(s) in the ad-dna corpus \u2014 to find your OWN advertiser (to --exclude-advertiser) or a competitor (to --advertiser-id).",
|
|
@@ -16562,7 +16680,7 @@ registerSchema({
|
|
|
16562
16680
|
function identity(record) {
|
|
16563
16681
|
return record;
|
|
16564
16682
|
}
|
|
16565
|
-
var advertisersCommand2 =
|
|
16683
|
+
var advertisersCommand2 = defineCommand141({
|
|
16566
16684
|
meta: {
|
|
16567
16685
|
name: "advertisers",
|
|
16568
16686
|
description: 'Resolve a brand name to advertiser_id(s). Use it to find your own advertiser for --exclude-advertiser, or a competitor for --advertiser-id. Example: baker winning-ads advertisers "Deel" --output md'
|
|
@@ -16613,7 +16731,7 @@ var advertisersCommand2 = defineCommand140({
|
|
|
16613
16731
|
});
|
|
16614
16732
|
|
|
16615
16733
|
// src/commands/winning-ads/search.ts
|
|
16616
|
-
import { defineCommand as
|
|
16734
|
+
import { defineCommand as defineCommand142 } from "citty";
|
|
16617
16735
|
registerSchema({
|
|
16618
16736
|
command: "winning-ads.search",
|
|
16619
16737
|
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.",
|
|
@@ -16721,7 +16839,7 @@ function buildSearchBody(args) {
|
|
|
16721
16839
|
}
|
|
16722
16840
|
return body;
|
|
16723
16841
|
}
|
|
16724
|
-
var searchCommand4 =
|
|
16842
|
+
var searchCommand4 = defineCommand142({
|
|
16725
16843
|
meta: {
|
|
16726
16844
|
name: "search",
|
|
16727
16845
|
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"
|
|
@@ -16833,7 +16951,7 @@ var searchCommand4 = defineCommand141({
|
|
|
16833
16951
|
});
|
|
16834
16952
|
|
|
16835
16953
|
// src/commands/winning-ads/index.ts
|
|
16836
|
-
var winningAdsCommand =
|
|
16954
|
+
var winningAdsCommand = defineCommand143({
|
|
16837
16955
|
meta: {
|
|
16838
16956
|
name: "winning-ads",
|
|
16839
16957
|
description: `Search the ad-dna corpus of scored "winning" ads for reference creatives to reproduce. Proxied through the Baker backend (BAKER_API_KEY) \u2014 no separate token needed.
|
|
@@ -16873,7 +16991,7 @@ function getCliVersion() {
|
|
|
16873
16991
|
}
|
|
16874
16992
|
|
|
16875
16993
|
// src/cli.ts
|
|
16876
|
-
var main =
|
|
16994
|
+
var main = defineCommand144({
|
|
16877
16995
|
meta: {
|
|
16878
16996
|
name: "baker",
|
|
16879
16997
|
version: getCliVersion(),
|