@koda-sl/baker-cli 0.148.0 → 0.149.0-dev.7b64ca6b5

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
@@ -492,8 +492,6 @@ Command groups: `budgets`, `campaigns`, `ad-groups`, `keywords` (add/update/remo
492
492
 
493
493
  **Amending a staged op** — `draft amend <ref> (--file patch.json | --patch '<json>')` merges a JSON patch into an already-staged op's payload (objects deep-merge, `null` deletes a key, arrays/scalars replace) and re-validates it in full. Always prefer this over removing and re-staging — it preserves the op's ref (so dependents don't break) and its position in the draft. `draft show <ref>` prints the full staged payload (including warnings/annotations) so you can verify a change looks right before publish.
494
494
 
495
- **Already-satisfied writes aren't staged** — an update or pause/resume whose every field already holds the requested value on the live account is dropped instead of staged: the envelope returns `"staged": false, "noop": true` with a `reason` ("this ad is already Paused on Google Ads"), plus a hint. This is a success, not an error — there is nothing to publish. Only a positively-read live snapshot can trigger it; a failed or empty read always stages. Batch responses list the dropped ops under `skipped`, and `count` reflects what actually entered the draft.
496
-
497
495
  **Batch keyword adds** — `keywords add`, `negative-keywords add`, and `keyword-lists add` take a whole batch in one command: comma-separate `--text` entries and/or pass `--file <list.txt>` (one keyword per line). A `:EXACT`/`:PHRASE`/`:BROAD` suffix per entry overrides the `--match-type` default. Batches stage all-or-nothing as one request (limit 500); each keyword still lands as its own draft op, so it stays individually removable/amendable.
498
496
 
499
497
  ---
@@ -1750,6 +1748,8 @@ Returns `{ images: [{ imageId, imageUrl, deduped, width, height }], model, costU
1750
1748
 
1751
1749
  Brand logo via Brandfetch CDN (`fallback/404`). Probes all 5 logo variants in parallel and returns whichever ones the domain actually publishes. Auto-ingests the first by default.
1752
1750
 
1751
+ **Variants are returned wordmark-first** (`logo` dark → `logo` light → `symbol` dark → `symbol` light → `icon`), so the default `--auto-ingest 1` gives you the wide lockup a "trusted by" strip needs. `icon` is deliberately last: for many brands (Salesforce, HubSpot) it is a solid coloured square with the mark knocked out of it, which renders as a filled box beside the wordmarks around it and cannot be rescued with CSS. Reach for it only in slots under ~32px, and then ask for it explicitly.
1752
+
1753
1753
  ```bash
1754
1754
  baker images logo stripe.com # all available variants
1755
1755
  baker images logo linear.app --variant logo # just full wordmark logos (light + dark)
@@ -1757,13 +1757,16 @@ baker images logo linear.app --variant icon # just the square app icon
1757
1757
  baker images logo linear.app --variant symbol # just the bare brand mark (no wordmark), light + dark
1758
1758
  baker images logo example.com --no-auto-ingest # browse without writing to library
1759
1759
  baker images logo stripe.com --auto-ingest 5 # ingest every returned variant
1760
+ baker images logo stripe.com,intercom.com,notion.so --variant logo # a whole strip in one call
1760
1761
  ```
1761
1762
 
1763
+ **Multiple domains.** Pass a comma-separated list (max 20) to source an entire logo row in one call. Domains are fetched in parallel and a failure on one never loses the rest, so a partial strip is still placeable. The response shape switches to `{ results: [{ domain, hits, error? }] }`, and domains Brandfetch didn't know come back in a `hints[]` entry naming the fallback ladder. A single domain returns the original shape unchanged.
1764
+
1762
1765
  **The 5 variants — pick by use case:**
1763
1766
 
1764
1767
  | `--variant` | `providerMeta.type` | `providerMeta.theme` | What it is | Typical use |
1765
1768
  |---|---|---|---|---|
1766
- | `icon` | `icon` | `null` (single) | App-style square icon (favicon-grade), often rounded | Favicon, social proof grid, app-tile mock |
1769
+ | `icon` | `icon` | `null` (single) | App-style square icon (favicon-grade), often a **solid coloured plate** with the mark knocked out | Favicon and nav slots under ~32px only — **never a logo strip** |
1767
1770
  | `logo` | `logo` | `light` | Full wordmark designed for **light backgrounds** (dark ink on transparent) | Logo on white page, light hero |
1768
1771
  | `logo` | `logo` | `dark` | Full wordmark designed for **dark backgrounds** (light ink on transparent) | Footer on dark, dark hero |
1769
1772
  | `symbol` | `symbol` | `light` | Brand mark/glyph only (no wordmark) for **light backgrounds** | Compact UI, avatar, small-space placement |
@@ -2027,7 +2030,7 @@ Inputs accept a single path, a quoted glob, or a comma-separated list. Writes in
2027
2030
  Pipeline stages, each opt-in via flag presence and idempotent on already-correct input:
2028
2031
 
2029
2032
  1. Rasterize SVG (only when raster ops are requested — pure resize keeps SVG)
2030
- 2. `--remove-bg` → two-pass background removal with gradient/solid branching (skipped when the source is already transparent)
2033
+ 2. `--remove-bg` → two-pass background removal with gradient/solid branching (skipped when the source is already transparent). "Already transparent" is decided by **solidity** — how completely the opaque pixels fill their own bounding box — not by a raw transparent-pixel count. An app-icon tile is only 5–8% transparent (its rounded corners) while being a solid coloured plate everywhere else, so a global count treated it as already-transparent and left the plate on. Plates measure ~0.8–1.0 solidity; real wordmarks measure 0.2–0.45.
2031
2034
  3. `--color <hex>` → recolor foreground pixels to the target color. Single-fill assets stay monochrome; multi-fill SVGs preserve relative contrast with target-color tones so foreground/background fills do not collapse into a solid shape.
2032
2035
  4. `--shrink-to-content` → trim transparent borders
2033
2036
  5. Resize:
@@ -7,9 +7,9 @@ import {
7
7
  __toESM
8
8
  } from "./chunk-RK67WL4O.js";
9
9
 
10
- // ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js
10
+ // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/810146e81bae4e3a061fe487864f2fde80c4b03b886877dc0f1fffbc6480b67e/node_modules/safe-stable-stringify/index.js
11
11
  var require_safe_stable_stringify = __commonJS({
12
- "../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js"(exports, module) {
12
+ "../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/810146e81bae4e3a061fe487864f2fde80c4b03b886877dc0f1fffbc6480b67e/node_modules/safe-stable-stringify/index.js"(exports, module) {
13
13
  "use strict";
14
14
  var { hasOwnProperty } = Object.prototype;
15
15
  var stringify = configure2();
@@ -1070,7 +1070,7 @@ function resolveAdaptFormats(params) {
1070
1070
  return params.formats ?? [];
1071
1071
  }
1072
1072
 
1073
- // ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/esm/wrapper.js
1073
+ // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/810146e81bae4e3a061fe487864f2fde80c4b03b886877dc0f1fffbc6480b67e/node_modules/safe-stable-stringify/esm/wrapper.js
1074
1074
  var import__ = __toESM(require_safe_stable_stringify(), 1);
1075
1075
  var configure = import__.default.configure;
1076
1076
  var wrapper_default = import__.default;
@@ -7898,4 +7898,4 @@ export {
7898
7898
  defaultRegistry,
7899
7899
  createEngineFromEnv
7900
7900
  };
7901
- //# sourceMappingURL=chunk-2F5SCTNS.js.map
7901
+ //# sourceMappingURL=chunk-ZBRVPPJP.js.map