@koda-sl/baker-cli 0.384.0-dev.4699b7308 → 0.385.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 +12 -11
- package/dist/{chunk-CHJOTJTZ.js → chunk-FGHMWBUD.js} +4 -4
- package/dist/chunk-FGHMWBUD.js.map +1 -0
- package/dist/cli.js +50 -127
- package/dist/cli.js.map +1 -1
- package/dist/engine/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-CHJOTJTZ.js.map +0 -1
package/README.md
CHANGED
|
@@ -163,7 +163,7 @@ Multi-platform ad commands. Google, Meta, and LinkedIn support both reads and **
|
|
|
163
163
|
|
|
164
164
|
### `baker ads google accounts`
|
|
165
165
|
|
|
166
|
-
List
|
|
166
|
+
List the Google Ads accounts selected for this company. Run this first to find account IDs.
|
|
167
167
|
|
|
168
168
|
```bash
|
|
169
169
|
baker ads google accounts
|
|
@@ -788,7 +788,7 @@ Read X Ads campaigns, line items, promoted tweets, creatives, audiences, and ana
|
|
|
788
788
|
|
|
789
789
|
| Subcommand | What it returns |
|
|
790
790
|
|---|---|
|
|
791
|
-
| `accounts` |
|
|
791
|
+
| `accounts` | X Ads accounts selected for this company that X currently lists |
|
|
792
792
|
| `funding` | Funding instruments for an account |
|
|
793
793
|
| `campaigns` | Campaigns (filter by `--funding-instrument-ids`, `--campaign-ids`) |
|
|
794
794
|
| `line-items` | Line items / ad groups (filter by `--campaign-ids`, `--line-item-ids`) |
|
|
@@ -892,7 +892,7 @@ baker ads meta insights --object act_123 --level adset \
|
|
|
892
892
|
baker ads meta activities --account-id act_123 --days 7
|
|
893
893
|
|
|
894
894
|
# "Which Page should this ad run from?"
|
|
895
|
-
baker ads meta pages #
|
|
895
|
+
baker ads meta pages # Pages with promotingAccountIds and hasPageAccessToken
|
|
896
896
|
|
|
897
897
|
# "What is the lead form collecting, and how many came in?"
|
|
898
898
|
baker ads meta lead-forms --page-id 100635183117758 # instant forms on a Page + lead counts
|
|
@@ -930,6 +930,8 @@ baker ads meta custom-conversions --account-id act_123 # id, event cate
|
|
|
930
930
|
baker ads meta custom-conversions --account-id act_123 --full # raw rule JSON, retention, timestamps
|
|
931
931
|
```
|
|
932
932
|
|
|
933
|
+
Use a Page only with an ad account listed in its `promotingAccountIds`. Instant-form reads need `hasPageAccessToken: true` on that Page and the company's lead-ads permissions.
|
|
934
|
+
|
|
933
935
|
**Custom Conversions** — a marketer's own conversion (a pixel event narrowed by a rule, e.g. "PageView on /gracias"), which is what "my conversions" almost always means. To optimize an ad set toward one, pass `--custom-conversion-id <id>` and nothing else: Baker reads the conversion off Meta at stage time and fills its pixel, event category and rule, the same four fields Ads Manager stores. Staging refuses an archived or unavailable conversion, one not built on a pixel, and one belonging to another ad account. Deleting one — in Events Manager or over the API — archives it: it leaves the panel but stays readable on the account, so the listing still shows it flagged `archived`.
|
|
934
936
|
|
|
935
937
|
`custom-conversions create` stages a new one (`--name`, `--pixel-id`, `--custom-event-type`, plus `--url-contains "/gracias"` or `--rule-file`). A rule is a tree of `and`/`or` over `{"<field>":{"<operator>":<value>}}` leaves, where the field is `URL`, `event`, `referrer` or any event parameter the pixel sends (`value`, `content_category`, or your own), so `--url-contains` is only the single-URL shortcut and `--rule-file` reaches the rest. Meta accepts an unmatchable rule and reports success, so staging refuses unknown operators, bare values, empty branches and two conditions written side by side where `and` was meant, before the op is staged. A case-sensitive `contains` is a real operator and gets through — on a URL always write `i_contains`. It is create-only, because Meta's edge offers neither update nor a delete that removes — which is also why staging refuses a create whose pixel, event category and rule already exist, live on the account or staged earlier in the same chat, or one that would pass Meta's cap of 100 per account. An ad set in the same chat can chain to it with `--custom-conversion-id meta_temp_*`.
|
|
@@ -997,9 +999,8 @@ To find one entity by name, pass `--name-contains <text>` to `campaigns`, `adset
|
|
|
997
999
|
|
|
998
1000
|
```
|
|
999
1001
|
accounts # ad accounts in the connected scope
|
|
1000
|
-
accounts --include-all # every account the token can see (admin/debug)
|
|
1001
1002
|
account # single-account detail (currency, balance, business, status)
|
|
1002
|
-
businesses #
|
|
1003
|
+
businesses # businesses linked to selected ad accounts
|
|
1003
1004
|
campaigns # ACTIVE-only by default
|
|
1004
1005
|
adsets # filter by --campaign-id
|
|
1005
1006
|
ads # filter by --adset-id or --campaign-id
|
|
@@ -1125,7 +1126,6 @@ baker ads linkedin bid-pricing --account-id 503001492 \
|
|
|
1125
1126
|
|
|
1126
1127
|
```
|
|
1127
1128
|
accounts # accounts in the connected picker scope
|
|
1128
|
-
accounts --include-all # every account the token can see
|
|
1129
1129
|
account # single-account detail (currency, type, status)
|
|
1130
1130
|
|
|
1131
1131
|
campaign-groups # default ACTIVE-only
|
|
@@ -1497,7 +1497,7 @@ A Google Analytics connection made before writes shipped is read-only and every
|
|
|
1497
1497
|
|
|
1498
1498
|
### `baker ga4 properties`
|
|
1499
1499
|
|
|
1500
|
-
List
|
|
1500
|
+
List the GA4 properties selected for this company. Run this first to find property IDs.
|
|
1501
1501
|
|
|
1502
1502
|
```bash
|
|
1503
1503
|
baker ga4 properties
|
|
@@ -3409,7 +3409,7 @@ baker scheduled-agents templates --delete weekly-posthog-check
|
|
|
3409
3409
|
|
|
3410
3410
|
### Marketing Tags (`baker tags`)
|
|
3411
3411
|
|
|
3412
|
-
Read the client's marketing/analytics tags (Meta pixel,
|
|
3412
|
+
Read the client's marketing/analytics tags (Meta pixel, GA4, Google Ads, GTM, Clarity, Hotjar, PostHog, …) — production tags overlaid with the changes staged in this chat.
|
|
3413
3413
|
|
|
3414
3414
|
**The CLI is read-only.** Every tag change (create, edit, delete) goes through the `request_tag_input` tool (`baker_ui` MCP server): the agent proposes one or more changes — each becomes a tab in one blocking approval form — pre-filling the non-secret fields it knows; the user reviews, edits, fills secret fields, and approves or skips each tab. Approved changes stage on the chat and apply when the chat is published; discarding the chat drops them.
|
|
3415
3415
|
|
|
@@ -3425,7 +3425,6 @@ Notes:
|
|
|
3425
3425
|
- **Both reads restate the write path, on stderr.** `list` and `draft` end with the two lines that say the approval form is the only way to change a tag, that it rides on every turn, and that a tag change is never a Task. They are there because a chat concluded from its tool list alone that the form did not exist, never called it, and filed the change as a Task for the user to carry out by hand. stdout stays the list, so piping it is unaffected; `--json` carries the same lines in the envelope's `hints`.
|
|
3426
3426
|
- **`list` prints each tag's full readable config.** Every non-secret field is shown in full under the tag — the Clarity `projectId`, GA4 `measurementId`, the entire custom `code` snippet, etc. — so the agent reuses a stored value to pre-fill a follow-up change instead of asking the user for something already installed. Secrets are never among these fields. (`--json` emits the same data as the raw envelope.)
|
|
3427
3427
|
- **Secrets never travel through this CLI or the chat.** Secret fields (`accessToken`, `apiSecret`, `authorizationToken`, `apiKey`, `conversionToken`, `oauthProviderId`) are entered only in the dashboard's secure tag form and flow straight into the staged draft; tool responses only ever name which secret fields are set/pending.
|
|
3428
|
-
- A `chatgptAds` tag takes a Pixel ID. Its optional `apiKey` is the Conversions API key and enables the server copy of page and Form events; the key stays out of the CLI and published page.
|
|
3429
3428
|
- Staged creates get a server-generated `tag_temp_*` ref (returned in the tool result and printed by `list`). Use it (or a real tag id) as flow side-effect `tagIds` — the published tag keeps resolving under the temp ref.
|
|
3430
3429
|
- Proposing a delete on a `tag_temp_*` ref drops the staged create instead.
|
|
3431
3430
|
- Single-instance types (`code`, `posthog`, `datafast`) reject a second instance against the chat's effective view.
|
|
@@ -3435,8 +3434,6 @@ Notes:
|
|
|
3435
3434
|
|
|
3436
3435
|
Read and shape this workspace's Forms (flows). Operates on the local `_data.json` files only; no secret values are ever decrypted or printed.
|
|
3437
3436
|
|
|
3438
|
-
For ChatGPT Ads conversions, add a `chatgptAds` side effect to the Form step, choose a supported event name, and use `baker flows map` to map `advancedMatching` and optional `eventParams` (`value` and `currency`).
|
|
3439
|
-
|
|
3440
3437
|
**A Form has two halves, split by a trust boundary.** Its *structure* — steps, conditions, side effects, field mappings — is yours, and the write subcommands below edit exactly that. Its *confidential* half — connection secrets, OAuth accounts, third-party field definitions (HubSpot, Calendly, HighLevel, SavvyCal) — is configured through the `request_flow_input` tool (`baker_ui` MCP server): the agent authors the surrounding structure and references it by `nodeId`/`sideEffectId`, and the user enters secrets, connects accounts, and picks resources in the dashboard. Those values are written (encrypted, where a secret) into the Form on the chat's branch and go live when the chat is published. Nothing any of these commands does touches a live system.
|
|
3441
3438
|
|
|
3442
3439
|
```bash
|
|
@@ -3754,6 +3751,10 @@ baker schema tag-manager read # Kebab-case paths resolve to their registered n
|
|
|
3754
3751
|
|
|
3755
3752
|
Not every command registers a schema. On `NOT_FOUND` the error carries a structured `fix` pointing at `--help` and the family's agent doc (`__tooling__/docs/tools/baker/<family>.md` in sandboxes). Every top-level family's `--help` also ends with a `Full guide:` line pointing at that doc; `packages/cli/__tests__/doc-coverage.test.ts` fails CI if a mounted command is missing from its family doc.
|
|
3756
3753
|
|
|
3754
|
+
### `baker tag-manager containers`
|
|
3755
|
+
|
|
3756
|
+
Lists the company's selected Tag Manager containers that the connected Google account can still open. If access to a selected container was lost, the response names it in `unavailableContainers` and asks the user to reconnect with an account that can open it.
|
|
3757
|
+
|
|
3757
3758
|
## `baker studio` — make new imagery
|
|
3758
3759
|
|
|
3759
3760
|
The generation lane. `baker images` **sources** what already exists; `baker studio` **makes** what doesn't. Every call opens a *batch* — one brief, 1-8 takes, rendered in parallel — recorded against the calling chat and shown in the dashboard Studio next to the batches the client ran themselves.
|
|
@@ -20,9 +20,9 @@ import {
|
|
|
20
20
|
shouldEscalate
|
|
21
21
|
} from "./chunk-HJEMOSPH.js";
|
|
22
22
|
|
|
23
|
-
//
|
|
23
|
+
// ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js
|
|
24
24
|
var require_safe_stable_stringify = __commonJS({
|
|
25
|
-
"
|
|
25
|
+
"../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js"(exports, module) {
|
|
26
26
|
"use strict";
|
|
27
27
|
var { hasOwnProperty } = Object.prototype;
|
|
28
28
|
var stringify = configure2();
|
|
@@ -1123,7 +1123,7 @@ function resolveAdaptFormats(params) {
|
|
|
1123
1123
|
return params.formats ?? [];
|
|
1124
1124
|
}
|
|
1125
1125
|
|
|
1126
|
-
//
|
|
1126
|
+
// ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/esm/wrapper.js
|
|
1127
1127
|
var import__ = __toESM(require_safe_stable_stringify(), 1);
|
|
1128
1128
|
var configure = import__.default.configure;
|
|
1129
1129
|
var wrapper_default = import__.default;
|
|
@@ -9986,4 +9986,4 @@ export {
|
|
|
9986
9986
|
defaultRegistry,
|
|
9987
9987
|
createEngineFromEnv
|
|
9988
9988
|
};
|
|
9989
|
-
//# sourceMappingURL=chunk-
|
|
9989
|
+
//# sourceMappingURL=chunk-FGHMWBUD.js.map
|