@koda-sl/baker-cli 0.111.0-dev.4a58faec8 → 0.111.0-dev.94fd3a2a1
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 +35 -20
- package/dist/cli.js +1857 -654
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -653,6 +653,39 @@ baker ads google library search-competitors "crm software" --location uk
|
|
|
653
653
|
|
|
654
654
|
---
|
|
655
655
|
|
|
656
|
+
### Staged writes (`baker ads google budgets|campaigns|...`)
|
|
657
|
+
|
|
658
|
+
Write commands **never touch the Google Ads API at stage time**. Each command stages a create/update/pause/resume/remove op against the current chat's draft (`BAKER_CHAT_ID`); the dashboard shows it as a pending "Google Ads" change, and the whole draft applies as one atomic `GoogleAdsService.Mutate` when the chat is published. Feature-flagged per company (`companies.googleAdsWriteEnabled`) — off by default = a fully simulated publish with zero real API calls.
|
|
659
|
+
|
|
660
|
+
Reference not-yet-created resources with `g_temp_*` refs returned by earlier `create` commands (they map to Google's temporary negative-ID resource names inside one atomic batch).
|
|
661
|
+
|
|
662
|
+
```bash
|
|
663
|
+
# Build a Search campaign bottom-up, chaining temp refs
|
|
664
|
+
baker ads google budgets create --customer-id 1234567890 --name "Search budget" --amount 50
|
|
665
|
+
# → { ref: "g_temp_ab12", ... }
|
|
666
|
+
baker ads google campaigns create --customer-id 1234567890 --name "Brand — Search" \
|
|
667
|
+
--channel-type SEARCH --budget-ref g_temp_ab12 --bidding-strategy MANUAL_CPC
|
|
668
|
+
baker ads google ad-groups create --customer-id 1234567890 --name "Brand terms" --campaign-ref g_temp_<campaign>
|
|
669
|
+
baker ads google keywords add --customer-id 1234567890 --ad-group-ref g_temp_<adgroup> --text "brand name" --match-type EXACT
|
|
670
|
+
# Shared negative keyword list → attach to the campaign
|
|
671
|
+
baker ads google keyword-lists create --customer-id 1234567890 --name "Brand exclusions"
|
|
672
|
+
baker ads google keyword-lists add --customer-id 1234567890 --list-ref g_temp_<list> --text "free" --match-type BROAD
|
|
673
|
+
baker ads google keyword-lists attach --customer-id 1234567890 --campaign-ref g_temp_<campaign> --list-ref g_temp_<list>
|
|
674
|
+
# Responsive search ad
|
|
675
|
+
baker ads google ads create --customer-id 1234567890 --ad-group-ref g_temp_<adgroup> \
|
|
676
|
+
--headlines "Fast Widgets,Buy Online,Free Shipping" --descriptions "Best widgets around.,Ships tomorrow." \
|
|
677
|
+
--final-url https://example.com
|
|
678
|
+
|
|
679
|
+
# Review / undo staged changes
|
|
680
|
+
baker ads google draft list
|
|
681
|
+
baker ads google draft remove g_temp_ab12 # cascades to dependents
|
|
682
|
+
baker ads google draft clear
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
Command groups: `budgets`, `campaigns`, `ad-groups`, `keywords` (add/update/remove), `negative-keywords`, `keyword-lists`, `ads`, `assets`, `audiences`, `conversions`, `bidding-strategies`, `labels`, `campaign-criteria`, and `draft`. Amounts are in major currency units (converted to micros). Money/bids: `--amount`, `--cpc-bid`, `--target-cpa` take major units; `--target-roas` a ratio. Less-common ops accept a `--file <payload.json>` (flags override file keys). Updates target a resource name or bare id as the positional argument; a target that names an op staged earlier **amends it in place**.
|
|
686
|
+
|
|
687
|
+
---
|
|
688
|
+
|
|
656
689
|
### Caching
|
|
657
690
|
|
|
658
691
|
Google Ads data is cached at two levels:
|
|
@@ -2487,24 +2520,6 @@ Permissions enforced server-side:
|
|
|
2487
2520
|
|
|
2488
2521
|
---
|
|
2489
2522
|
|
|
2490
|
-
### `baker mcp list | add | remove`
|
|
2491
|
-
|
|
2492
|
-
Manage **custom MCP servers** — point the agent at any remote HTTPS MCP endpoint. Registered tools appear as `mcp__<name>__*` on the next chat message.
|
|
2493
|
-
|
|
2494
|
-
```bash
|
|
2495
|
-
baker mcp list
|
|
2496
|
-
baker mcp add --name weather --url https://mcp.example.com/mcp
|
|
2497
|
-
baker mcp add --name acme --url https://acme.dev/mcp --header "Authorization: Bearer sk-…"
|
|
2498
|
-
baker mcp add --name mine --url https://my.dev/mcp --scope user
|
|
2499
|
-
baker mcp remove --name weather
|
|
2500
|
-
```
|
|
2501
|
-
|
|
2502
|
-
- `--url` must be HTTPS and public; loopback / private / cloud-metadata hosts are rejected.
|
|
2503
|
-
- `--scope company` (default) shares with every chat in the company; `--scope org` needs an admin API key; `--scope user` binds to the current message sender (requires running inside a chat turn — the bridge supplies the sender via `BAKER_ACTING_USER_ID`).
|
|
2504
|
-
- Repeat `--header "Key: Value"` for multiple auth headers. Header values are stored server-side and ride the MCP transport — `list` returns only the header keys, never the values.
|
|
2505
|
-
|
|
2506
|
-
---
|
|
2507
|
-
|
|
2508
2523
|
### `baker schema [command]`
|
|
2509
2524
|
|
|
2510
2525
|
Inspect command argument schemas for AI agent introspection.
|
|
@@ -3842,8 +3857,8 @@ The two scaffold passes are billed (the full `video_deconstruct` is the heavy on
|
|
|
3842
3857
|
|
|
3843
3858
|
Turn a source/inspiration image into a **runnable, self-validated static-ad canvas** — the static counterpart of `scaffold-video`. Like the video scaffold, this runs **billed Gemini passes** up front:
|
|
3844
3859
|
|
|
3845
|
-
1. **`image_describe`** (`~google/gemini-pro-latest`) — reverse-engineers the image into a blueprint JSON, written next to the canvas as **`prompt.json`**. This is the editable "prompt": you rewrite it by hand into the ad you want (palette, copy, claims, subjects). It feeds the generator directly — there is **no automatic brand-transform step**.
|
|
3846
|
-
2. **element selection** (`~google/gemini-flash-latest`) — picks the **main, identity-critical** elements (the brand logo, a showcased product, a
|
|
3860
|
+
1. **`image_describe`** (`~google/gemini-pro-latest`) — reverse-engineers the image into a blueprint JSON, written next to the canvas as **`prompt.json`**. This is the editable "prompt": you rewrite it by hand into the ad you want (palette, copy, claims, subjects). It feeds the generator directly — there is **no automatic brand-transform step**.
|
|
3861
|
+
2. **element selection** (`~google/gemini-flash-latest`) — picks only the **main, identity-critical** elements (the brand logo, a showcased product, a foreground person/animal, a trust badge); background extras are dropped. Each is stamped back onto its blueprint entry as a `reference_image` label so the JSON self-documents which slot grounds which subject.
|
|
3847
3862
|
3. **global layout** (`~google/gemini-flash-latest`) — produces a structured `layout` block in `prompt.json`: the column/row grid, each region's `x_pct`/`y_pct` bounds, panel splits, background/shape, and every text block's relative size/weight/case/alignment. This is what gives the generator a precise composition to rebuild.
|
|
3848
3863
|
|
|
3849
3864
|
It then scaffolds a canvas that ingests `prompt.json`, wires **one `[TODO]` ingest slot per detected element** (plus an optional brand-font → type-specimen) into `image_generate`, and wires the original image in for composition only. The canvas is validated before it's written. stdout returns `{ ok, canvas_path, prompt_path, models, layout_regions, stats, checklist }` — the **checklist** lists every real asset to drop in.
|