@koda-sl/baker-cli 0.116.0-dev.86609d2a7 → 0.116.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
@@ -82,7 +82,7 @@ Use `--output` to change format:
82
82
 
83
83
  ### Ad Platforms (`baker ads`)
84
84
 
85
- Multi-platform ad commands. Google, Meta, and LinkedIn support both reads and **staged writes** (create/update campaigns, ad sets/ad groups, ads, creatives, audiences — applied on chat publish); X (Twitter) is read + analytics. TikTok is coming.
85
+ Multi-platform ad data commands. Currently supports Google Ads, with Meta, LinkedIn, and TikTok coming.
86
86
 
87
87
  ---
88
88
 
@@ -862,36 +862,6 @@ baker ads meta pixels --account-id act_123
862
862
  baker ads meta pixels --pixel-id 9988 --stats --days 7
863
863
  ```
864
864
 
865
- #### Staged writes (`baker ads meta campaigns|adsets|ads|creatives|audiences|media|draft`)
866
-
867
- Meta writes mirror the Google/LinkedIn model: they **never hit the Graph API when you run them**. Each op is validated at stage time (field shapes, budget rules, page/Instagram identity ownership, CBO/ABO exclusivity, status-transition legality), shows in the dashboard chat as a pending Meta change, and applies only when the chat is published. Meta has no atomic batch mutate, so ops apply **sequentially** on publish — one failure skips its dependents but the publish completes.
868
-
869
- If the company's `metaAdsWriteEnabled` flag is off (the default), publish runs the identical lifecycle **simulated** — fake `sim_meta_*` ids, zero Meta calls. The stage response and `baker ads meta draft` show `mode: "simulated"`.
870
-
871
- Chain a full ad from scratch with `meta_temp_*` refs (each create returns one):
872
-
873
- ```bash
874
- # 1. (optional) upload creative media from the Baker library → publishes an image hash
875
- baker ads meta media upload --account-id act_123 --kind image --image-id <bakerImageId> # → meta_temp_img
876
-
877
- # 2. campaign → ad set → creative → ad
878
- baker ads meta campaigns create --account-id act_123 --name "Q3 Prospecting" --objective OUTCOME_LEADS --daily-budget 50 # → meta_temp_camp
879
- baker ads meta adsets create --account-id act_123 --campaign meta_temp_camp --name "US 25-54" \
880
- --optimization-goal OFFSITE_CONVERSIONS --billing-event IMPRESSIONS --pixel-id 111 --custom-event-type LEAD \
881
- --targeting-file targeting.json # → meta_temp_as
882
- baker ads meta creatives create --account-id act_123 --page 555 --instagram-user 777 \
883
- --message "Save money on pet insurance" --link https://example.com --headline "Best cover" \
884
- --image-ref meta_temp_img --cta SHOP_NOW --standard-enhancements on # → meta_temp_cr
885
- baker ads meta ads create --account-id act_123 --name "Ad 1" --adset meta_temp_as --creative meta_temp_cr
886
-
887
- # review + edit before publish
888
- baker ads meta draft
889
- baker ads meta draft remove meta_temp_cr # removing a create cascades to dependents
890
- baker ads meta draft clear
891
- ```
892
-
893
- Status changes are `pause|resume|archive` subcommands on `campaigns`/`adsets`/`ads`. `duplicate` reconstructs a paused copy from the live snapshot (`--replace` also pauses the original once the copy publishes). Carousel/dynamic creatives and complex targeting go via `--file` (creativeType `carousel`/`dynamic`; full Meta targeting spec). Advantage+ Creative enhancements: `--standard-enhancements on|off`, or per-feature toggles via a `--file` `enhancements.features` map.
894
-
895
865
  #### Smart defaults (so agents don't enumerate the API)
896
866
 
897
867
  **`insights`** — the workhorse:
@@ -939,7 +909,7 @@ The HTTP backend exposes more endpoints (catalogs, ad-studies, ad-images, labels
939
909
 
940
910
  - `spend` is a decimal string in account currency, not an integer.
941
911
  - `effective_status` ≠ `status`. The dashboard shows effective_status (e.g. `WITH_ISSUES`, `PENDING_REVIEW`, `DISAPPROVED`, `ADSET_PAUSED`).
942
- - Meta creatives are effectively immutable once attached. Editing copy/image/CTA = stage a new creative + `ads update <id> --creative <ref>` (or `creatives duplicate`), not an edit of the live creative — see [Staged writes](#staged-writes-baker-ads-meta-campaignsadsetsadscreativesaudiencesmediadraft) above.
912
+ - Meta creatives are effectively immutable once attached. Editing copy/image/CTA = create a new creative + reattach (writes are out of scope for now).
943
913
  - Currency offsets are non-uniform (JPY/KRW = 1, KWD/BHD = 1000, most = 100). Read `account.currency` before doing budget math.
944
914
 
945
915
  ---
@@ -1,11 +1,32 @@
1
- import {
2
- __commonJS,
3
- __toESM
4
- } from "./chunk-5WRI5ZAA.js";
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __commonJS = (cb, mod) => function __require() {
8
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
19
+ // If the importer is in node compatibility mode or this is not an ESM
20
+ // file that has been converted to a CommonJS file using a Babel-
21
+ // compatible transform (i.e. "__esModule" has not been set), then set
22
+ // "default" to the CommonJS "module.exports" for node compatibility.
23
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
24
+ mod
25
+ ));
5
26
 
6
- // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/810146e81bae4e3a061fe487864f2fde80c4b03b886877dc0f1fffbc6480b67e/node_modules/safe-stable-stringify/index.js
27
+ // ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js
7
28
  var require_safe_stable_stringify = __commonJS({
8
- "../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/810146e81bae4e3a061fe487864f2fde80c4b03b886877dc0f1fffbc6480b67e/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) {
9
30
  "use strict";
10
31
  var { hasOwnProperty } = Object.prototype;
11
32
  var stringify = configure2();
@@ -901,7 +922,7 @@ function describeCause(c) {
901
922
  }
902
923
  }
903
924
 
904
- // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/810146e81bae4e3a061fe487864f2fde80c4b03b886877dc0f1fffbc6480b67e/node_modules/safe-stable-stringify/esm/wrapper.js
925
+ // ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/esm/wrapper.js
905
926
  var import__ = __toESM(require_safe_stable_stringify(), 1);
906
927
  var configure = import__.default.configure;
907
928
  var wrapper_default = import__.default;
@@ -6478,4 +6499,4 @@ export {
6478
6499
  defaultRegistry,
6479
6500
  createEngineFromEnv
6480
6501
  };
6481
- //# sourceMappingURL=chunk-KBWQRZL2.js.map
6502
+ //# sourceMappingURL=chunk-ZWMMCLJ4.js.map