@koda-sl/baker-cli 0.434.0-dev.e6bd6f23c → 0.434.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 CHANGED
@@ -1834,7 +1834,7 @@ Ads start from what customers said. Three commands carry the process; the agent
1834
1834
  ```bash
1835
1835
  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
1836
  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] [--series <lead>]
1837
+ baker creatives make <idea> [--slug <s>] [--adset <id>] [--reference <adId>] [--spec <beats.json>] [--from-idea]
1838
1838
  baker creatives learn [--days <n>] [--dry-run] # what each idea's ads did, written back onto the idea
1839
1839
  ```
1840
1840
 
@@ -1842,7 +1842,6 @@ baker creatives learn [--days <n>] [--dry-run] # what each idea'
1842
1842
  - `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
1843
  - `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
1844
  - `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
1845
 
1847
1846
  ### Competitive Intelligence (`baker research`)
1848
1847
 
@@ -6591,7 +6590,7 @@ import {
6591
6590
 
6592
6591
  ## Creatives
6593
6592
 
6594
- Save a finished canvas render as a Baker creative: a static image (PNG, JPG, WebP) or a finished video (MP4, MOV, WebM). Choose and save the best finished version without waiting for the user to choose, including in the turn that rendered it. Saving pins the version as the agent's choice without recording user approval or putting an ad live. 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.
6593
+ 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
6594
 
6596
6595
  ```bash
6597
6596
  baker creatives publish --title "Spring Offer 4x5" \
@@ -6609,8 +6608,9 @@ baker creatives publish ./canvas/<run_id>/final.mp4 --title "Spring Offer Reel"
6609
6608
  | `<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
6609
  | `--title <text>` | Required. Human title for the creative. |
6611
6610
  | `--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 finished generation from the creative's run history as the saved one. |
6611
+ | `--run-id <r_…>` | Pins the approved generation from the creative's run history as the published one. |
6613
6612
  | `--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). |
6613
+ | `--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
6614
  | `--source-reference-url <url>` | Original reference ad URL, recorded on the creative. |
6615
6615
  | `--context <text>` | Optional describe context for the uploaded image or video. |
6616
6616
 
@@ -6672,7 +6672,7 @@ After a rejection, `hints[]` restates what to change, starting from that version
6672
6672
 
6673
6673
  ### `baker creatives select`
6674
6674
 
6675
- Record the user's choice of a creative version, 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 pins the agent's saved version without recording user approval. Use `select` only for a choice the user actually made; autonomous saving uses `publish`.
6675
+ 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
6676
 
6677
6677
  ```bash
6678
6678
  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
- // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/766ad107c42df28eeadaf0ac2f9089c8a9e200f6ba0b2b1a817b8d536cbdcc49/node_modules/safe-stable-stringify/index.js
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
- "../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/766ad107c42df28eeadaf0ac2f9089c8a9e200f6ba0b2b1a817b8d536cbdcc49/node_modules/safe-stable-stringify/index.js"(exports, module) {
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
- // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/766ad107c42df28eeadaf0ac2f9089c8a9e200f6ba0b2b1a817b8d536cbdcc49/node_modules/safe-stable-stringify/esm/wrapper.js
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,16 +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
- design: z4.string().optional()
4410
- }).strict().optional()
4401
+ video: VideoMeta
4411
4402
  }).strict().optional();
4412
4403
  var CanvasSchema = z4.object({
4413
4404
  schema: z4.literal("baker-canvas/1"),
@@ -7473,7 +7464,7 @@ function pictureInstruction(p, ctx) {
7473
7464
  const keep = p.spec?.keep ? ` Keep ${plain(p.spec.keep, ctx.clean)}.` : "";
7474
7465
  switch (p.role) {
7475
7466
  case "base":
7476
- return ctx.job === "fix" ? "the current version of this ad, to edit." : ctx.job === "series" ? "the finished ad this series repeats, to copy exactly with new words." : "the finished ad, to re-lay for this shape.";
7467
+ return ctx.job === "fix" ? "the current version of this ad, to edit." : "the finished ad, to re-lay for this shape.";
7477
7468
  case "identity":
7478
7469
  return identityInstruction(p, what, keep, ctx.flowing);
7479
7470
  // The user saw one label come back two ways (E4 gallery, BENCH.md § "E1 v2"): the label is the product's.
@@ -7852,10 +7843,6 @@ function deliverableSection(c) {
7852
7843
  const change = sentence(c.opts.instruction?.trim() || "correct what is wrong");
7853
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.`;
7854
7845
  }
7855
- if (c.job === "series") {
7856
- const change = sentence(c.opts.instruction?.trim() || "set the new words");
7857
- 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.`;
7858
- }
7859
7846
  if (c.job === "relay") {
7860
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.`;
7861
7848
  }
@@ -8526,7 +8513,6 @@ var STATIC_ADAPT_ROLE = "static_adapt";
8526
8513
  var STATIC_SAFE_FIT_ROLE = "static_safe_fit";
8527
8514
  var STATIC_PLACE_ROLE = "static_place";
8528
8515
  var LOGO_COMPOSITE_ROLE = "logo_composite";
8529
- var SERIES_LEAD_ROLE = "series_lead";
8530
8516
  var STATIC_FIX_ROLE = "static_fix";
8531
8517
  var LOGO_COMPOSITE_DEFAULT = false;
8532
8518
  var ADAPT_IMAGE_SIZE = "2K";
@@ -18711,7 +18697,6 @@ export {
18711
18697
  STATIC_SAFE_FIT_ROLE,
18712
18698
  STATIC_PLACE_ROLE,
18713
18699
  LOGO_COMPOSITE_ROLE,
18714
- SERIES_LEAD_ROLE,
18715
18700
  STATIC_FIX_ROLE,
18716
18701
  LOGO_COMPOSITE_DEFAULT,
18717
18702
  nodesWithRole,
@@ -18773,4 +18758,4 @@ export {
18773
18758
  defaultRegistry,
18774
18759
  createEngineFromEnv
18775
18760
  };
18776
- //# sourceMappingURL=chunk-ENTQULTV.js.map
18761
+ //# sourceMappingURL=chunk-6PP3MBGZ.js.map