@koda-sl/baker-cli 0.434.0-dev.ec5c827fe → 0.435.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -5
- package/dist/{chunk-7I73A72J.js → chunk-6PP3MBGZ.js} +6 -20
- package/dist/chunk-6PP3MBGZ.js.map +1 -0
- package/dist/cli.js +1310 -1571
- package/dist/cli.js.map +1 -1
- package/dist/engine/index.d.ts +0 -8
- package/dist/engine/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-7I73A72J.js.map +0 -1
package/README.md
CHANGED
|
@@ -621,6 +621,18 @@ baker ads google campaigns create --customer-id 1234567890 --name "Brand — Sea
|
|
|
621
621
|
# New campaigns are declared as NOT containing EU political advertising (Google requires the
|
|
622
622
|
# declaration on every create); pass --eu-political-ads only when the campaign does contain it.
|
|
623
623
|
# On update, --eu-political-ads / --eu-political-ads=false corrects an existing declaration.
|
|
624
|
+
# Text guidelines (AI Max Search and Performance Max) stage on update only:
|
|
625
|
+
baker ads google campaigns update <campaign-id> --customer-id 1234567890 \
|
|
626
|
+
--term-exclusion "cheap" --messaging-restriction "Never promise a delivery date"
|
|
627
|
+
# --term-exclusion (repeatable, up to 25 × 30 chars) and --messaging-restriction (repeatable,
|
|
628
|
+
# up to 40 × 300 chars) each REPLACE the campaign's list; --clear-term-exclusions /
|
|
629
|
+
# --clear-messaging-restrictions empty one. A Search campaign needs AI Max with text
|
|
630
|
+
# customization on (in the same update or before), or staging is refused with the reason.
|
|
631
|
+
# AI Max for Search stages on create and update: --ai-max / --ai-max=false (off turns both
|
|
632
|
+
# features off too), --ai-max-text (text customization, needs AI Max) and
|
|
633
|
+
# --ai-max-url-expansion (final URL expansion, needs text customization). An omitted switch
|
|
634
|
+
# keeps the campaign's value; a combination Google refuses is refused at staging.
|
|
635
|
+
baker ads google campaigns update <campaign-id> --customer-id 1234567890 --ai-max --ai-max-text
|
|
624
636
|
baker ads google ad-groups create --customer-id 1234567890 --name "Brand terms" --campaign-ref g_temp_<campaign>
|
|
625
637
|
baker ads google keywords add --customer-id 1234567890 --ad-group-ref g_temp_<adgroup> --text "brand name" --match-type EXACT
|
|
626
638
|
# Shared negative keyword list → attach to the campaign
|
|
@@ -1834,7 +1846,7 @@ Ads start from what customers said. Three commands carry the process; the agent
|
|
|
1834
1846
|
```bash
|
|
1835
1847
|
baker creatives brief [--adset <id>] [--account-id act_<id>] [--no-research] # one read: viewer, account bottleneck, what works, taste, customer quotes, ideas on file
|
|
1836
1848
|
baker creatives ideas [--full] # check and rank src/creatives/_ideas/*.md; build_next
|
|
1837
|
-
baker creatives make <idea> [--slug <s>] [--adset <id>] [--reference <adId>] [--spec <beats.json>] [--from-idea]
|
|
1849
|
+
baker creatives make <idea> [--slug <s>] [--adset <id>] [--reference <adId>] [--spec <beats.json>] [--from-idea]
|
|
1838
1850
|
baker creatives learn [--days <n>] [--dry-run] # what each idea's ads did, written back onto the idea
|
|
1839
1851
|
```
|
|
1840
1852
|
|
|
@@ -1842,7 +1854,6 @@ baker creatives learn [--days <n>] [--dry-run] # what each idea'
|
|
|
1842
1854
|
- `ideas` is free and local. An idea's `evidence` resolves to `src/content/insights/` entries, or it is an `explore` bet. Numbers must be in the Knowledge or our own customers' quotes (a Reddit, forum or web quote never sources a claim), no two ideas may share an angle and format, and a review or testimonial format needs a quote from our own customer.
|
|
1843
1855
|
- `learn` pools each built idea's creatives, judges them against the rest of the account's cost per result and writes `status` (`winner`, `failed`, `inconclusive`, `testing`) and a frozen `result` onto the idea. `ideas` then warns when a new idea repeats a failed one.
|
|
1844
1856
|
- `make` builds one idea. A static searches the idea's container for ads made for our viewer, checks the closest three with `winning-ads fit` and scaffolds from the first that fits. For a new creative it starts scaffolding the best-ranked one while the fits are asked (kept when it fits, stopped and removed whole when another or none is kept), so the reference's describe pass no longer waits for them. Finding and describing a reference gets 50 seconds; past that the build is stopped and the static starts from the idea (`REFERENCE_SLOW` in the hint). A creative whose ad is already written is never built over (`ALREADY_MADE`): edit its `prompt.json`, or pass `--slug` for another ad of the same idea. A video idea takes its beats spec. Either way it records the idea on `_definition.md`, sets `prompt.json`'s `message` and syncs the definition. Drafted copy lines claiming a figure the company never wrote come back first in `hints`. When no proven ad fits (or with `--from-idea`), a static starts from the idea itself: `prompt.json` holds the message and placeholders, and `canvas run` refuses to render until the scene and copy are written.
|
|
1845
|
-
- `make --series <lead>` makes a static idea as another ad of a series: several messages in one style. Nothing is searched or rendered; the ad's `_definition.md` names its lead (`series: <lead>`), its `prompt.json` starts as the lead's ready version with the idea's message, and only its `copy` is written. Its canvas is written from the lead's on every run: the lead's finished picture with this ad's words, every other size the lead's own size with the same words. `baker canvas run --series <lead>` renders every ad of the series at once, one reviewed and corrected run each, skipping an ad already ready from the lead's current version.
|
|
1846
1857
|
|
|
1847
1858
|
### Competitive Intelligence (`baker research`)
|
|
1848
1859
|
|
|
@@ -6591,7 +6602,7 @@ import {
|
|
|
6591
6602
|
|
|
6592
6603
|
## Creatives
|
|
6593
6604
|
|
|
6594
|
-
|
|
6605
|
+
Publish an approved canvas render as a first-class Baker creative: a static image (PNG, JPG, WebP) or a finished video (MP4, MOV, WebM). An image uploads to the Baker image library (tagged `creative`); a video uploads to the Baker video library and is saved once it plays (bounded at 3 minutes). A creative record is created/updated, and the command prints the creative reference JSON the dashboard renders in chat.
|
|
6595
6606
|
|
|
6596
6607
|
```bash
|
|
6597
6608
|
baker creatives publish --title "Spring Offer 4x5" \
|
|
@@ -6609,8 +6620,9 @@ baker creatives publish ./canvas/<run_id>/final.mp4 --title "Spring Offer Reel"
|
|
|
6609
6620
|
| `<file>` | The image or video. For an image it is optional with `--run-id`: the run's own saved output (from its run record, sha-verified) is used instead, so a workspace that never had the run's folder can publish it. |
|
|
6610
6621
|
| `--title <text>` | Required. Human title for the creative. |
|
|
6611
6622
|
| `--slug <slug>` | Creative slug (`src/creatives/<slug>/`): attaches the image or video to that creative's row, marks it `published`. Required for a video. With `--run-id` an image publish also sets `status: published` in the creative's `_definition.md` (`definitionStatus` in the output). |
|
|
6612
|
-
| `--run-id <r_…>` | Pins the
|
|
6623
|
+
| `--run-id <r_…>` | Pins the approved generation from the creative's run history as the published one. |
|
|
6613
6624
|
| `--output <label\|slot\|n>` | With `--run-id` and no file: which of the run's images to save when it made several (a label such as `4:5`, a slot, or a 1-based number). |
|
|
6625
|
+
| `--approved` | The person's own message asked to save it. Needed only for an image run rendered in the current chat turn (`BAKER_TURN_ID`), which they have not seen yet; without it that save is refused. |
|
|
6614
6626
|
| `--source-reference-url <url>` | Original reference ad URL, recorded on the creative. |
|
|
6615
6627
|
| `--context <text>` | Optional describe context for the uploaded image or video. |
|
|
6616
6628
|
|
|
@@ -6672,7 +6684,7 @@ After a rejection, `hints[]` restates what to change, starting from that version
|
|
|
6672
6684
|
|
|
6673
6685
|
### `baker creatives select`
|
|
6674
6686
|
|
|
6675
|
-
|
|
6687
|
+
Choose the version of a creative to keep, or only some of its options, the way choosing it in Baker does: the creative shows that version as the chosen one, and the choice records the chat sender's approval (`source: "selection"`). Naming options replaces the earlier pick. It does not add the image to the library; that is `baker creatives publish`, which, given `--run-id`, also counts as choosing that version.
|
|
6676
6688
|
|
|
6677
6689
|
```bash
|
|
6678
6690
|
baker creatives select --slug spring-offer # the version it shows now
|
|
@@ -24,9 +24,9 @@ import {
|
|
|
24
24
|
shouldEscalate
|
|
25
25
|
} from "./chunk-F7LXMR73.js";
|
|
26
26
|
|
|
27
|
-
//
|
|
27
|
+
// ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js
|
|
28
28
|
var require_safe_stable_stringify = __commonJS({
|
|
29
|
-
"
|
|
29
|
+
"../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js"(exports, module) {
|
|
30
30
|
"use strict";
|
|
31
31
|
var { hasOwnProperty } = Object.prototype;
|
|
32
32
|
var stringify = configure2();
|
|
@@ -1408,7 +1408,7 @@ function resolveAdaptFormats(params) {
|
|
|
1408
1408
|
return params.formats ?? [];
|
|
1409
1409
|
}
|
|
1410
1410
|
|
|
1411
|
-
//
|
|
1411
|
+
// ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/esm/wrapper.js
|
|
1412
1412
|
var import__ = __toESM(require_safe_stable_stringify(), 1);
|
|
1413
1413
|
var configure = import__.default.configure;
|
|
1414
1414
|
var wrapper_default = import__.default;
|
|
@@ -4398,15 +4398,7 @@ var CanvasMetadata = z4.object({
|
|
|
4398
4398
|
// `scaffold-video`) so the editable checklist travels inside the canvas
|
|
4399
4399
|
// instead of only printing to stdout. Ignored by the engine.
|
|
4400
4400
|
todo: z4.unknown().optional(),
|
|
4401
|
-
video: VideoMeta
|
|
4402
|
-
// A static ad of a series (`seriesMemberAd`): the lead ad its picture is an edit of, the
|
|
4403
|
-
// lead's version, and the lead's words as that version drew them, which this ad's replace.
|
|
4404
|
-
// Ignored by the engine; the brief projection reads it.
|
|
4405
|
-
series: z4.object({
|
|
4406
|
-
lead: z4.string().min(1),
|
|
4407
|
-
run_id: z4.string().min(1),
|
|
4408
|
-
copy: z4.array(z4.object({ text: z4.string(), role: z4.string().optional() }).strict())
|
|
4409
|
-
}).strict().optional()
|
|
4401
|
+
video: VideoMeta
|
|
4410
4402
|
}).strict().optional();
|
|
4411
4403
|
var CanvasSchema = z4.object({
|
|
4412
4404
|
schema: z4.literal("baker-canvas/1"),
|
|
@@ -7472,7 +7464,7 @@ function pictureInstruction(p, ctx) {
|
|
|
7472
7464
|
const keep = p.spec?.keep ? ` Keep ${plain(p.spec.keep, ctx.clean)}.` : "";
|
|
7473
7465
|
switch (p.role) {
|
|
7474
7466
|
case "base":
|
|
7475
|
-
return ctx.job === "fix" ? "the current version of this ad, to edit." :
|
|
7467
|
+
return ctx.job === "fix" ? "the current version of this ad, to edit." : "the finished ad, to re-lay for this shape.";
|
|
7476
7468
|
case "identity":
|
|
7477
7469
|
return identityInstruction(p, what, keep, ctx.flowing);
|
|
7478
7470
|
// The user saw one label come back two ways (E4 gallery, BENCH.md § "E1 v2"): the label is the product's.
|
|
@@ -7851,10 +7843,6 @@ function deliverableSection(c) {
|
|
|
7851
7843
|
const change = sentence(c.opts.instruction?.trim() || "correct what is wrong");
|
|
7852
7844
|
return c.flowing ? `Image 1 is the current version of this ad. ${capitalize(change)} Keep everything else in Image 1 exactly the same, preserving its picture, layout, colours, lettering and every word.` : `Edit: Image 1 is the current version of this ad. ${capitalize(change)} Keep everything else exactly as it is in Image 1: the picture, the layout, the colours, the lettering and every word.`;
|
|
7853
7845
|
}
|
|
7854
|
-
if (c.job === "series") {
|
|
7855
|
-
const change = sentence(c.opts.instruction?.trim() || "set the new words");
|
|
7856
|
-
return c.flowing ? `Image 1 is a finished ad of this series. Make the next ad of the same series${forBrand}: ${change} Keep everything else in Image 1 exactly the same, preserving its picture, layout, background, shapes, colours, lettering style and logo, each word in the place and style of the one it replaces.` : `Edit: Image 1 is a finished ad of this series. Make the next ad of the same series${forBrand}. ${capitalize(change)} Keep everything else exactly as it is in Image 1: the picture, the layout, the background, the shapes, the colours, the lettering style and the logo, each new line in the place, size and style of the line it replaces.`;
|
|
7857
|
-
}
|
|
7858
7846
|
if (c.job === "relay") {
|
|
7859
7847
|
return c.flowing ? `Image 1 is a finished ad. Recompose this same ad as a ${noun}${forBrand}: the same picture, colours, lettering and every word, rearranged for the new shape, with more of the scene revealed at the edges.` : `Deliverable: the same ad as Image 1, re-laid as a finished ${noun}${forBrand}. Keep the same picture, colours, lettering and every word, rearranged for the new shape; show more of the scene rather than cropping it.`;
|
|
7860
7848
|
}
|
|
@@ -8525,7 +8513,6 @@ var STATIC_ADAPT_ROLE = "static_adapt";
|
|
|
8525
8513
|
var STATIC_SAFE_FIT_ROLE = "static_safe_fit";
|
|
8526
8514
|
var STATIC_PLACE_ROLE = "static_place";
|
|
8527
8515
|
var LOGO_COMPOSITE_ROLE = "logo_composite";
|
|
8528
|
-
var SERIES_LEAD_ROLE = "series_lead";
|
|
8529
8516
|
var STATIC_FIX_ROLE = "static_fix";
|
|
8530
8517
|
var LOGO_COMPOSITE_DEFAULT = false;
|
|
8531
8518
|
var ADAPT_IMAGE_SIZE = "2K";
|
|
@@ -18710,7 +18697,6 @@ export {
|
|
|
18710
18697
|
STATIC_SAFE_FIT_ROLE,
|
|
18711
18698
|
STATIC_PLACE_ROLE,
|
|
18712
18699
|
LOGO_COMPOSITE_ROLE,
|
|
18713
|
-
SERIES_LEAD_ROLE,
|
|
18714
18700
|
STATIC_FIX_ROLE,
|
|
18715
18701
|
LOGO_COMPOSITE_DEFAULT,
|
|
18716
18702
|
nodesWithRole,
|
|
@@ -18772,4 +18758,4 @@ export {
|
|
|
18772
18758
|
defaultRegistry,
|
|
18773
18759
|
createEngineFromEnv
|
|
18774
18760
|
};
|
|
18775
|
-
//# sourceMappingURL=chunk-
|
|
18761
|
+
//# sourceMappingURL=chunk-6PP3MBGZ.js.map
|