@koda-sl/baker-cli 0.191.0 → 0.192.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
@@ -5159,7 +5159,9 @@ baker landing inspiration scrape <url> --out <dir> # capture any page now, syn
5159
5159
  - **`add` and `favorite` are recorded on the chat as a "Reference page" change, marked already applied.** The save and the study both happen immediately; there is nothing left for publish to apply and nothing a discard takes back.
5160
5160
  - **Compact by default, `--full` when you have chosen something.** Every list command returns what you need to *pick* a row; the 600-character "why it works" paragraph, the classification facets and the markup ride behind `--full` on `search`, `view`, `page`, `favorites` and `code`. A default `favorites` used to cost more than a default search for a question — "what does this client keep saving?" — that the facets alone answer.
5161
5161
  - **`page_id` on every search row** is what `page <id>` takes, so "how does this page sequence its sections?" is reachable from a result rather than only right after `add`. `favorites --limit` is capped at 100.
5162
- - **`add` studies in the background; `scrape` returns with the page on disk.** `add` grows the shared library and takes minutes, so it can never answer "build our page like this one" within the same turn. `scrape` runs the identical capture locally and blocks until it finishes, writing section screenshots, standalone markup, a whole-page reproduction and `report.html`. `--no-motion` roughly halves the runtime; `--no-mobile`, `--no-code` and `--no-report` skip further passes.
5162
+ - **`add` studies in the background; `scrape` returns with the page on disk.** `add` grows the shared library and takes minutes, so it can never answer "build our page like this one" within the same turn. `scrape` runs the identical capture locally and blocks until it finishes, writing section screenshots, standalone markup, a whole-page reproduction and `report.html`. `--no-motion` is the single biggest lever on runtime; `--no-mobile`, `--no-code` and `--no-report` skip further passes.
5163
+ - **Filming is the expensive pass, and it runs three sections at a time.** Every moving section is filmed in its own fresh page load — the only way to catch an entrance animation before it fires — so a page with ten moving sections pays for ten full loads. Measured on one heavy page, filming was 74% of the capture. The takes are independent, so they overlap; a page that cannot be captured inside the library's budget now says so instead of timing out silently.
5164
+ - **A page we can't open says why.** A dead certificate, an address that doesn't resolve, a site that won't answer or one that is simply too slow each produce their own plain-language reason rather than a browser error.
5163
5165
  - **Inspiration, never a clipboard.** Both `code` and `scrape` record what was consulted, and `critique`'s `originality` family blocks a publish that reuses a reference's copy verbatim.
5164
5166
 
5165
5167
  ### `baker landing critique`
@@ -5264,6 +5266,7 @@ This CLI is designed for AI agent consumption. Key patterns:
5264
5266
 
5265
5267
  A keyword's final URL now also shows on its row when the keyword is being **removed**. 0.178.0 read it from the stage-time snapshot, but the snapshot never asked Google for it, so the removal half of that change silently did nothing — the card said which keyword was going away but not which landing page it had been sending its clicks to. The batch hint says outright that `--final-url` has no per-keyword form rather than implying destinations could differ within one call, and the tool doc now lists each `keywords` subcommand's own flags instead of one shared set (`--ad-group-ref`, `--text` and `--match-type` are `add`-only; `remove` takes a target and nothing else).
5266
5268
  - **0.180.1**: `baker tag-manager --help` said the container version Baker cuts at publish is **NOT** published, and told the agent to have the user publish it in Tag Manager. The executor publishes it — a clean run takes the client's container live — so the help understated an irreversible change to a production site. Corrected, and the stale `versionPendingMessage` helper (no callers, same wrong claim) removed from `@baker/api/tag-manager`. `draft list` already reported both outcomes correctly and is unchanged.
5269
+ - **0.191.0**: `baker ads google draft list` now flags a Search campaign staged with fewer than **3 image assets**, alongside the sitelink/callout/structured-snippet/negative-list advisories it already prints. The completeness pass counted `MARKETING_IMAGE` links but only ever checked them on Performance Max and Demand Gen, so a Search campaign could be staged and published with no images at all and nothing said a word — it just performed worse, which is exactly the failure advisories exist to catch. This is the same gap Google raises as its "Add images to your ads" recommendation, moved to the point where the agent can act on it: an image-less text ad is visibly smaller in the SERP than a competitor's. Images are the one asset kind an agent cannot write inline, so the advisory names the route — build with the `creative-canvas-ads` flow and its new `google_search` platform preset (1:1 required, 1.91:1 cropped from a rendered 16:9), then `assets create` + `assets attach --file` at `"fieldType": "MARKETING_IMAGE"` — and repeats the playbook's two rejections: never stock, never a logo on a plain background. Non-blocking, like every other advisory; publish is never gated on it.
5267
5270
 
5268
5271
  ## Publishing
5269
5272
 
@@ -1049,6 +1049,7 @@ var AD_FORMAT_PLATFORMS = [
1049
1049
  "meta_feed_stories",
1050
1050
  "meta_all",
1051
1051
  "linkedin",
1052
+ "google_search",
1052
1053
  "google_demandgen",
1053
1054
  "tiktok",
1054
1055
  "youtube"
@@ -1058,6 +1059,13 @@ var AD_PLATFORM_FORMAT_PRESETS = {
1058
1059
  meta_feed_stories: { formats: ["4:5", "9:16"], note: "Meta feed + Stories/Reels." },
1059
1060
  meta_all: { formats: ["4:5", "9:16", "1:1"], note: "Meta feed + Stories/Reels + square." },
1060
1061
  linkedin: { formats: ["1:1"], note: "LinkedIn single-image feed (square)." },
1062
+ google_search: {
1063
+ // Search image assets: 1:1 is the required one, 1.91:1 the optional landscape.
1064
+ // 16:9 is rendered only as the crop source for that landscape — Search never serves 16:9 itself.
1065
+ formats: ["1:1", "16:9"],
1066
+ offGrid: ["1.91:1"],
1067
+ note: "Google Search image assets (the image extension on a text ad); 1:1 required, 1.91:1 landscape \u2014 crop that from the rendered 16:9. Stage 3+ per campaign."
1068
+ },
1061
1069
  google_demandgen: {
1062
1070
  // Renders 16:9 too so the off-grid 1.91:1 landscape has a native source to crop from.
1063
1071
  formats: ["1:1", "4:5", "16:9"],
@@ -8368,4 +8376,4 @@ export {
8368
8376
  defaultRegistry,
8369
8377
  createEngineFromEnv
8370
8378
  };
8371
- //# sourceMappingURL=chunk-OWDTSPY4.js.map
8379
+ //# sourceMappingURL=chunk-ISZWNERZ.js.map