@koda-sl/baker-cli 0.423.0 → 0.424.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 +7 -5
- package/dist/{chunk-5JVAP5DC.js → chunk-FQOKJYKN.js} +4 -1
- package/dist/{chunk-S36N4SOX.js → chunk-GCTR4MDE.js} +2 -2
- package/dist/{chunk-SWYBHYB5.js → chunk-IR4ZOEZV.js} +12 -6
- package/dist/{chunk-SWYBHYB5.js.map → chunk-IR4ZOEZV.js.map} +1 -1
- package/dist/{chunk-XNFV6BQU.js → chunk-PHLFNYGQ.js} +4 -4
- package/dist/{chunk-G5L5FX2B.js → chunk-Q6F5UNOU.js} +3 -3
- package/dist/{chunk-3X2EMLBQ.js → chunk-RFZYRG2Q.js} +3 -3
- package/dist/cli.js +98 -38
- package/dist/cli.js.map +1 -1
- package/dist/{client-PIKJZFRA.js → client-GS7T7ETG.js} +4 -4
- package/dist/engine/index.js +3 -3
- package/dist/{env-6UAIAY4M.js → env-SL22S6CM.js} +2 -2
- package/dist/{output-CFDBWWYJ.js → output-OFDKEPPJ.js} +5 -5
- package/dist/{shared-3O5RKQYZ.js → shared-XR54KFMH.js} +6 -6
- package/package.json +1 -1
- /package/dist/{chunk-5JVAP5DC.js.map → chunk-FQOKJYKN.js.map} +0 -0
- /package/dist/{chunk-S36N4SOX.js.map → chunk-GCTR4MDE.js.map} +0 -0
- /package/dist/{chunk-XNFV6BQU.js.map → chunk-PHLFNYGQ.js.map} +0 -0
- /package/dist/{chunk-G5L5FX2B.js.map → chunk-Q6F5UNOU.js.map} +0 -0
- /package/dist/{chunk-3X2EMLBQ.js.map → chunk-RFZYRG2Q.js.map} +0 -0
- /package/dist/{client-PIKJZFRA.js.map → client-GS7T7ETG.js.map} +0 -0
- /package/dist/{env-6UAIAY4M.js.map → env-SL22S6CM.js.map} +0 -0
- /package/dist/{output-CFDBWWYJ.js.map → output-OFDKEPPJ.js.map} +0 -0
- /package/dist/{shared-3O5RKQYZ.js.map → shared-XR54KFMH.js.map} +0 -0
package/README.md
CHANGED
|
@@ -3360,7 +3360,7 @@ baker winning-ads search "delivery driver recruitment" --audience-temperature 0_
|
|
|
3360
3360
|
| `--scope followed-first\|followed\|all` | Which brands to draw from (default `followed-first`: the company's followed brands, topped up from the shared library; the whole library when it follows nobody) |
|
|
3361
3361
|
| `--sort winner\|longest_running\|newest` | Order of a no-query browse (default `winner`); ignored when a query is given |
|
|
3362
3362
|
| `--limit <n>` | Max results 1–100 (**default 10** — shortlist size) |
|
|
3363
|
-
| `--max-per-advertiser <n>` |
|
|
3363
|
+
| `--max-per-advertiser <n>` | Unset (default): brands spread, each brand's best 3 first and the rest after the other brands, none dropped. `1`–`50`: drop a brand's ads past N (`1` = one reference per brand). `0`: rank order. Brands the query names ("HubSpot video ads") are never capped |
|
|
3364
3364
|
| `--min-relevance <0-1>` | Relevance floor; trims weak matches |
|
|
3365
3365
|
| `--platform <list>` | `meta,linkedin,tiktok` — pass a single value to search **only** that platform |
|
|
3366
3366
|
| `--format <list>` | `video,static,carousel` |
|
|
@@ -3372,15 +3372,17 @@ baker winning-ads search "delivery driver recruitment" --audience-temperature 0_
|
|
|
3372
3372
|
| `--exclude-brand-reliant` | Drop ads whose copy only works if the viewer already knows the brand (ads not judged yet are kept) |
|
|
3373
3373
|
| `--advertiser-id <list>` | **Restrict to** these advertiser ids (browse one brand's winners) |
|
|
3374
3374
|
| `--exclude-advertiser <list>` | **Drop** these advertiser ids, usually your own brand |
|
|
3375
|
-
| `--country <list>`
|
|
3375
|
+
| `--country <list>` | ISO country codes: ads known to run there, plus ads with no country data (every Meta ad) in that country's main language |
|
|
3376
|
+
| `--language <list>` | ISO 639-1 codes (`es,en`) for the language of the ad's copy and voiceover |
|
|
3376
3377
|
| `--first-seen-after` / `--first-seen-before` | ISO date (`2026-01-01`, read as the start of that day in UTC) or datetime bounds (recency) |
|
|
3377
3378
|
| `--hook-archetype <list>` | Narrow to ads on a proven hook **seed** (from `winning-ads hooks`) |
|
|
3378
3379
|
| `--format-pattern <list>` | Narrow to statics in these containers (from `winning-ads formats`, e.g. `comparison_table`) |
|
|
3379
3380
|
| `--diverse` | One varied page (different brands, containers, hooks) instead of rank order; ignores paging |
|
|
3380
3381
|
| `--output json\|md\|files` | Output format (default json) |
|
|
3382
|
+
| `--fields <list>` | Only these row fields (e.g. `advertiser,container,mechanism`); a `--full`-only field turns `--full` on, an unknown one is refused with `error.fix.validValues` |
|
|
3381
3383
|
| `--full` | Include DNA detail + longevity |
|
|
3382
3384
|
|
|
3383
|
-
A value outside a closed list (`--platform`, `--format`, `--winner-category`, `--awareness`, `--audience-temperature`, `--funnel-stage`, `--advertiser-size`, `--format-pattern`), a non-numeric `--limit`/`--max-per-advertiser`/`--min-relevance`, or a bound that is not a date is refused before the search runs; a refused list value comes with `error.fix.validValues`. References this company already adapted (`already_adapted`) never take a fresh reference's place: `--limit N` returns up to N fresh ones first. The search waits up to 120 s (`followed-first` can run two library searches).
|
|
3385
|
+
A value outside a closed list (`--platform`, `--format`, `--winner-category`, `--awareness`, `--audience-temperature`, `--funnel-stage`, `--advertiser-size`, `--format-pattern`), a non-numeric `--limit`/`--max-per-advertiser`/`--min-relevance`, or a bound that is not a date is refused before the search runs; a refused list value comes with `error.fix.validValues`. References this company already adapted (`already_adapted`) never take a fresh reference's place: `--limit N` returns up to N fresh ones first. The search waits up to 120 s (`followed-first` can run two library searches). A library that does not answer in time is `UNAVAILABLE`, with an `error.fix` to retry once narrower. An empty answer carries a hint naming the one filter to loosen.
|
|
3384
3386
|
|
|
3385
3387
|
Reading the scores: **`relevance`** (0–1) = match of the creative to your query; **`winner_score`** = how proven the ad is in-market. Pick references that are both relevant *and* proven.
|
|
3386
3388
|
|
|
@@ -3454,7 +3456,7 @@ Winners across **every** brand you follow, in one library → `GET /api/ad-libra
|
|
|
3454
3456
|
Response `data`: `winners`, `following_count` (how many brands you follow), `advertiser_ids` (the ids actually queried = follows ∩ requested), and — when relevant — `hints` (e.g. you follow nobody yet, or a requested id isn't in your follows and was skipped). In `--output md`/`files` the table is the payload and the hints are written to **stderr** so they still surface without corrupting the output.
|
|
3455
3457
|
|
|
3456
3458
|
```bash
|
|
3457
|
-
baker winning-ads feed --
|
|
3459
|
+
baker winning-ads feed --output md
|
|
3458
3460
|
baker winning-ads feed --advertiser adv_123,adv_456 --platform meta --output md
|
|
3459
3461
|
```
|
|
3460
3462
|
|
|
@@ -3462,7 +3464,7 @@ baker winning-ads feed --advertiser adv_123,adv_456 --platform meta --output md
|
|
|
3462
3464
|
|---|---|
|
|
3463
3465
|
| `--advertiser <ids>` | Trim to a comma-separated subset of your followed advertiser ids (ids you don't follow are skipped and reported) |
|
|
3464
3466
|
| `--platform meta\|linkedin` | Filter to a single platform |
|
|
3465
|
-
| `--per-advertiser <n>` |
|
|
3467
|
+
| `--per-advertiser <n>` | Unset (default): brands spread, each brand's best 3 first and the rest after, none dropped. `1`–`50`: keep at most N per brand. `0`: rank order |
|
|
3466
3468
|
| `--limit <n>` | Total winners across all follows 1–200 (default 40) |
|
|
3467
3469
|
| `--winner-category <list>` | Restrict to specific winner categories |
|
|
3468
3470
|
| `--format <list>` | Restrict to specific formats (e.g. `static,video`) |
|
|
@@ -1391,8 +1391,11 @@ export {
|
|
|
1391
1391
|
compactVideo,
|
|
1392
1392
|
videoNormalizer,
|
|
1393
1393
|
testimonialNormalizer,
|
|
1394
|
+
compactWinningAd,
|
|
1395
|
+
fullWinningAd,
|
|
1394
1396
|
winningAdNormalizer,
|
|
1395
1397
|
adContentNormalizer,
|
|
1398
|
+
applyFieldMask,
|
|
1396
1399
|
writeJson,
|
|
1397
1400
|
writeOutput,
|
|
1398
1401
|
getEnv,
|
|
@@ -1412,4 +1415,4 @@ export {
|
|
|
1412
1415
|
captureVimeoCookie,
|
|
1413
1416
|
childEnvWith
|
|
1414
1417
|
};
|
|
1415
|
-
//# sourceMappingURL=chunk-
|
|
1418
|
+
//# sourceMappingURL=chunk-FQOKJYKN.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
debugLogSetting
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FQOKJYKN.js";
|
|
4
4
|
|
|
5
5
|
// src/debugLog.ts
|
|
6
6
|
import { appendFileSync, mkdirSync, renameSync, statSync } from "fs";
|
|
@@ -212,4 +212,4 @@ export {
|
|
|
212
212
|
readBodyForLog,
|
|
213
213
|
installStreamTaps
|
|
214
214
|
};
|
|
215
|
-
//# sourceMappingURL=chunk-
|
|
215
|
+
//# sourceMappingURL=chunk-GCTR4MDE.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
debugLogHttp,
|
|
3
3
|
readBodyForLog
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-GCTR4MDE.js";
|
|
5
5
|
import {
|
|
6
6
|
API_KEY_FORMAT_MESSAGE,
|
|
7
7
|
DIRECT_ROUTE,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
refuseNonPublicUrl,
|
|
23
23
|
requireConnection,
|
|
24
24
|
shouldEscalate
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-FQOKJYKN.js";
|
|
26
26
|
|
|
27
27
|
// ../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js
|
|
28
28
|
var require_safe_stable_stringify = __commonJS({
|
|
@@ -1040,10 +1040,15 @@ var winnersSearchFields = z2.object({
|
|
|
1040
1040
|
// Pagination offset for infinite scroll. The browse view (no query) scrolls
|
|
1041
1041
|
// the whole library; a text/similar search scrolls its bounded ranked pool.
|
|
1042
1042
|
offset: z2.number().int().min(0).optional(),
|
|
1043
|
-
// Per-advertiser cap. `0` = no cap (the
|
|
1044
|
-
// facet-filtered slice shows every winner
|
|
1045
|
-
//
|
|
1043
|
+
// Per-advertiser cap: past it a brand's ads are dropped. `0` = no cap (the
|
|
1044
|
+
// library browse view sends it so a facet-filtered slice shows every winner
|
|
1045
|
+
// and matches the facet-rail count); omit it to spread the brands instead,
|
|
1046
|
+
// three each at the top and none dropped.
|
|
1046
1047
|
max_per_advertiser: z2.number().int().min(0).max(50).optional(),
|
|
1048
|
+
// ad-dna reads one advertiser in `advertiser_ids` as browsing that brand, and
|
|
1049
|
+
// keeps its measured failures. `false` keeps it a reference search: what
|
|
1050
|
+
// Baker sends when it narrowed to the company's followed brands itself.
|
|
1051
|
+
brand_browse: z2.boolean().optional(),
|
|
1047
1052
|
min_relevance: z2.number().min(0).max(1).optional(),
|
|
1048
1053
|
// One page picked for variety (different brands, containers and hooks)
|
|
1049
1054
|
// instead of rank order: a reference set for N concepts. Ignores offset.
|
|
@@ -24633,6 +24638,7 @@ export {
|
|
|
24633
24638
|
actionTempIdSchema,
|
|
24634
24639
|
ACTION_COMPLETE_NOTE_MIN,
|
|
24635
24640
|
adLibraryPlatformSchema,
|
|
24641
|
+
staticFormatPatternSchema,
|
|
24636
24642
|
winnersSortSchema,
|
|
24637
24643
|
winnerSearchScopeSchema,
|
|
24638
24644
|
scopedWinnersSearchRequestSchema,
|
|
@@ -24916,4 +24922,4 @@ export {
|
|
|
24916
24922
|
defaultRegistry,
|
|
24917
24923
|
createEngineFromEnv
|
|
24918
24924
|
};
|
|
24919
|
-
//# sourceMappingURL=chunk-
|
|
24925
|
+
//# sourceMappingURL=chunk-IR4ZOEZV.js.map
|