@koda-sl/baker-cli 0.28.0 → 0.31.0-dev.31ee8d9c

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.
Files changed (83) hide show
  1. package/README.md +282 -15
  2. package/dist/cli.js +1 -1
  3. package/dist/commands/actions/complete.d.ts +2 -2
  4. package/dist/commands/actions/complete.d.ts.map +1 -1
  5. package/dist/commands/actions/complete.js +10 -8
  6. package/dist/commands/actions/complete.js.map +1 -1
  7. package/dist/commands/actions/shared.d.ts +1 -0
  8. package/dist/commands/actions/shared.d.ts.map +1 -1
  9. package/dist/commands/actions/shared.js +3 -0
  10. package/dist/commands/actions/shared.js.map +1 -1
  11. package/dist/commands/ads/google/correction-table.d.ts.map +1 -1
  12. package/dist/commands/ads/google/correction-table.js +13 -1
  13. package/dist/commands/ads/google/correction-table.js.map +1 -1
  14. package/dist/commands/ads/google/preflight.d.ts.map +1 -1
  15. package/dist/commands/ads/google/preflight.js +7 -0
  16. package/dist/commands/ads/google/preflight.js.map +1 -1
  17. package/dist/commands/ads/google/presets.d.ts.map +1 -1
  18. package/dist/commands/ads/google/presets.js +14 -0
  19. package/dist/commands/ads/google/presets.js.map +1 -1
  20. package/dist/commands/images/extract.d.ts +23 -0
  21. package/dist/commands/images/extract.d.ts.map +1 -0
  22. package/dist/commands/images/extract.js +53 -0
  23. package/dist/commands/images/extract.js.map +1 -0
  24. package/dist/commands/images/find.d.ts +33 -0
  25. package/dist/commands/images/find.d.ts.map +1 -0
  26. package/dist/commands/images/find.js +70 -0
  27. package/dist/commands/images/find.js.map +1 -0
  28. package/dist/commands/images/gif.d.ts +33 -0
  29. package/dist/commands/images/gif.d.ts.map +1 -0
  30. package/dist/commands/images/gif.js +81 -0
  31. package/dist/commands/images/gif.js.map +1 -0
  32. package/dist/commands/images/google.d.ts +38 -0
  33. package/dist/commands/images/google.d.ts.map +1 -0
  34. package/dist/commands/images/google.js +77 -0
  35. package/dist/commands/images/google.js.map +1 -0
  36. package/dist/commands/images/icon.d.ts +23 -0
  37. package/dist/commands/images/icon.d.ts.map +1 -0
  38. package/dist/commands/images/icon.js +57 -0
  39. package/dist/commands/images/icon.js.map +1 -0
  40. package/dist/commands/images/index.d.ts.map +1 -1
  41. package/dist/commands/images/index.js +45 -7
  42. package/dist/commands/images/index.js.map +1 -1
  43. package/dist/commands/images/ingest.d.ts +28 -0
  44. package/dist/commands/images/ingest.d.ts.map +1 -0
  45. package/dist/commands/images/ingest.js +60 -0
  46. package/dist/commands/images/ingest.js.map +1 -0
  47. package/dist/commands/images/library.d.ts +55 -0
  48. package/dist/commands/images/library.d.ts.map +1 -0
  49. package/dist/commands/images/library.js +86 -0
  50. package/dist/commands/images/library.js.map +1 -0
  51. package/dist/commands/images/logo.d.ts +18 -0
  52. package/dist/commands/images/logo.d.ts.map +1 -0
  53. package/dist/commands/images/logo.js +49 -0
  54. package/dist/commands/images/logo.js.map +1 -0
  55. package/dist/commands/images/meme.d.ts +28 -0
  56. package/dist/commands/images/meme.d.ts.map +1 -0
  57. package/dist/commands/images/meme.js +66 -0
  58. package/dist/commands/images/meme.js.map +1 -0
  59. package/dist/commands/images/screenshot.d.ts +23 -0
  60. package/dist/commands/images/screenshot.d.ts.map +1 -0
  61. package/dist/commands/images/screenshot.js +64 -0
  62. package/dist/commands/images/screenshot.js.map +1 -0
  63. package/dist/commands/images/search.d.ts.map +1 -1
  64. package/dist/commands/images/search.js +1 -0
  65. package/dist/commands/images/search.js.map +1 -1
  66. package/dist/commands/images/sticker.d.ts +33 -0
  67. package/dist/commands/images/sticker.d.ts.map +1 -0
  68. package/dist/commands/images/sticker.js +81 -0
  69. package/dist/commands/images/sticker.js.map +1 -0
  70. package/dist/commands/images/stock.d.ts +58 -0
  71. package/dist/commands/images/stock.d.ts.map +1 -0
  72. package/dist/commands/images/stock.js +116 -0
  73. package/dist/commands/images/stock.js.map +1 -0
  74. package/dist/commands/images/use.d.ts +18 -0
  75. package/dist/commands/images/use.d.ts.map +1 -0
  76. package/dist/commands/images/use.js +57 -0
  77. package/dist/commands/images/use.js.map +1 -0
  78. package/dist/output.d.ts.map +1 -1
  79. package/dist/output.js +1 -0
  80. package/dist/output.js.map +1 -1
  81. package/dist/output.test.js +1 -0
  82. package/dist/output.test.js.map +1 -1
  83. package/package.json +1 -1
package/README.md CHANGED
@@ -218,6 +218,8 @@ baker ads google query --list-presets
218
218
  |------------------------|------------------------------------------|--------------------|
219
219
  | `campaign-performance` | Campaign metrics overview | LAST_30_DAYS |
220
220
  | `keyword-analysis` | Keyword performance with match type | LAST_30_DAYS |
221
+ | `positive-keywords` | Positive (targeting) keywords only | ALL_TIME |
222
+ | `negative-keywords` | Negative (blocking) keywords only | ALL_TIME |
221
223
  | `search-terms` | Actual user queries triggering ads | LAST_7_DAYS |
222
224
  | `ad-copy-performance` | Ad headline/description effectiveness | LAST_30_DAYS |
223
225
  | `asset-performance` | PMax asset performance labels | LAST_30_DAYS |
@@ -234,6 +236,7 @@ The CLI automatically corrects common GAQL mistakes before hitting the API:
234
236
  | `keyword.text` | `ad_group_criterion.keyword.text` | `"keyword.text → ad_group_criterion.keyword.text"` |
235
237
  | `shopping_performance_view.product_*` | `segments.product_*` | Field renamed |
236
238
  | `campaign.status = 'ACTIVE'` | `= 'ENABLED'` | Enum corrected |
239
+ | `FROM ad_group_criterion` without `negative` field | Warns | `"ad_group_criterion returns BOTH positive and negative keywords. Use --preset positive-keywords or negative-keywords."` |
237
240
 
238
241
  Auto-fixed queries proceed normally. Warnings appear in the response:
239
242
 
@@ -1570,27 +1573,291 @@ Research data is cached server-side (shared across all callers). No local cache
1570
1573
 
1571
1574
  ### Assets (`baker images`, `baker videos`, `baker testimonials`)
1572
1575
 
1573
- ### `baker images search <query>`
1576
+ #### Image sourcing verb-per-provider overview
1574
1577
 
1575
- Semantic search using hybrid BM25 + vector + reranking. Only returns ready images.
1578
+ Each external source is its own subcommand. Pick the verb that matches the source — license, cost, and result shape are all provider-specific.
1579
+
1580
+ | Command | Purpose | Cost | Auto-ingest default |
1581
+ |---|---|---|---|
1582
+ | `baker images library <q>` | Hybrid library search (replaces `search`) | $0 | n/a |
1583
+ | `baker images find <q>` | Fanout: library + opted-in providers | sum of providers | off |
1584
+ | `baker images stock <q> [--type photo\|vector\|psd]` | Magnific (Freepik's dev API) — photos, vectors, illustrations, PSDs (~250M assets) | $0.002/req | off |
1585
+ | `baker images google <q>` | Google Images via the official Custom Search JSON API | $0 under 100/day, then $0.005/query | off |
1586
+ | `baker images logo <domain>` | Brand logo via Brandfetch CDN | $0 | **on** (top 1) |
1587
+ | `baker images icon <name>` | Iconify (200+ icon sets, no API key) | $0 | off (CDN URL is stable) |
1588
+ | `baker images gif <q>` | Reaction GIFs / memes via Giphy (paid-social creative) | $0 | off |
1589
+ | `baker images sticker <q>` | Transparent stickers via Giphy (overlay-friendly for ad creative) | $0 | off |
1590
+ | `baker images extract <url>` | Pull every image off a URL via Firecrawl | $0.001/scrape | off |
1591
+ | `baker images screenshot <url>` | Website screenshot via ScreenshotOne | $0.009/capture | **on** |
1592
+ | `baker images ingest <url>` | Save a remote URL to the library | ~$0.001–$0.002 (describe + embed) | always on |
1593
+ | `baker images use <url>` | Sugar over `ingest` — waits until `ready` | same as `ingest` | always on |
1594
+ | `baker images get <id>` | Single record | $0 | n/a |
1595
+ | `baker images upload <file>` | Upload a local file | $0 | always on |
1596
+ | `baker images delete <id>` | Delete a record | $0 | n/a |
1597
+
1598
+ **Auto-ingest** runs the full `processImage` pipeline (Gemini describe + Voyage multimodal embed + OpenRouter text embed, ~$0.001–$0.002/image) on top of the provider cost. Override with `--auto-ingest N` (turn on) or `--no-auto-ingest` (turn off where default is on). After auto-ingest the next `baker images library` query for the same concept hits the local row.
1599
+
1600
+ **Hash-dedup is automatic.** `contentHash` (sha256 of bytes) + `externalId` per-source — same JPEG from two providers becomes one library row.
1601
+
1602
+ **`baker images search` is a deprecated alias** for `library` (stderr deprecation log, removed in next minor).
1603
+
1604
+ **Migrating from Tenor:** the old `baker images meme` command and Tenor provider have been removed. Use `baker images gif` (Giphy) instead. Existing library rows ingested via Tenor remain stored with `source: "tenor"` but are no longer returned by `baker images find` and `--source tenor` is no longer a valid filter on `library`. Re-ingest via `baker images gif --auto-ingest N` if you need fresh equivalents.
1605
+
1606
+ ### `baker images library <query>`
1607
+
1608
+ Search the company library (hybrid BM25 + vector + Cohere rerank). Use this FIRST before any external provider.
1609
+
1610
+ ```bash
1611
+ baker images library "hero banner"
1612
+ baker images library "logo" --aspect-ratio 1:1 --tags logo
1613
+ baker images library "office" --source magnific
1614
+ baker images library "pricing" --external-url-host competitor.com
1615
+ ```
1616
+
1617
+ **Flags:**
1618
+
1619
+ | Flag | Description |
1620
+ |-----------------------|--------------------------------------------------------------------------|
1621
+ | `--limit` | Max results (default 5) |
1622
+ | `--min-score` | Minimum relevance score, 0-1 |
1623
+ | `--aspect-ratio` | Filter by aspect ratio |
1624
+ | `--tags` | Comma-separated tag names |
1625
+ | `--source` | Filter by source (uploaded, magnific, brandfetch, google_images, firecrawl, screenshotone, iconify, giphy, …) |
1626
+ | `--external-url-host` | Filter by host substring of `externalUrl` (e.g. competitor.com) |
1627
+ | `--output` | Output format: `json` \| `files` \| `md` |
1628
+ | `--fields` | Comma-separated field names to include |
1629
+ | `--full` | Include full metadata |
1630
+
1631
+ > `baker images search` is a deprecated alias for `library` (emits a deprecation log on stderr; removed in the next minor).
1632
+
1633
+ ### `baker images find <query> --sources <list>`
1634
+
1635
+ Fanout image search: library first, then opted-in providers in parallel.
1636
+
1637
+ ```bash
1638
+ baker images find "office" --sources library,magnific --limit 20
1639
+ baker images find "office" --sources library,magnific --fallback --threshold 0.4
1640
+ baker images find "celebration" --sources library,giphy --auto-ingest 3
1641
+ ```
1642
+
1643
+ Providers: `library`, `magnific`, `google`, `iconify`, `brandfetch`, `giphy`. Response shape: `{ groups: { library, external }, meta: { counts, errors } }`. Partial failures (one provider throws) return the successful providers plus a `meta.errors` array; the whole call never fails on a single provider error.
1644
+
1645
+ **Flags:**
1646
+
1647
+ | Flag | Description |
1648
+ |------------------|--------------------------------------------------------------------------------------------|
1649
+ | `--sources` | Comma-separated providers (default `library`) |
1650
+ | `--limit` | Max results per group (default 20, max 50) |
1651
+ | `--fallback` | Skip external providers when the top library score ≥ `--threshold` |
1652
+ | `--threshold` | Library score floor for `--fallback` (default `0.4`) |
1653
+ | `--auto-ingest` | Ingest top N external hits into the library (0–20, default 0) |
1654
+
1655
+ ### `baker images stock <query>`
1656
+
1657
+ Stock search via **Magnific** — Freepik's developer API (post-acquisition rebrand — `api.magnific.com`, header `x-magnific-api-key`). One library, ~250M assets covering photos, vectors, illustrations, icon sets, mockups, PSDs.
1658
+
1659
+ ```bash
1660
+ baker images stock "minimalist office"
1661
+ baker images stock "flat office workers" --type vector
1662
+ baker images stock "hero photo of a kitchen" --type photo --orientation landscape --ai exclude
1663
+ baker images stock "brand pattern" --color "#0a0a0a" --license freemium --auto-ingest 2
1664
+ baker images stock "office reaction" --people only
1665
+ ```
1666
+
1667
+ Cost: $0.002/req. Free tier exists but watermarks previews — pass `--license freemium` to filter to clean free assets explicitly.
1668
+
1669
+ **Flags:**
1670
+
1671
+ | Flag | Description |
1672
+ |------------------|--------------------------------------------------------------------------------------------|
1673
+ | `--type` | Content type: `photo \| vector \| psd` |
1674
+ | `--orientation` | `landscape \| portrait \| square \| panoramic` |
1675
+ | `--license` | `freemium` (free with attribution) or `premium` (paid, watermark-free) |
1676
+ | `--color` | Hex color filter (`#0a0a0a` or `0a0a0a`) |
1677
+ | `--ai` | AI-generated filter: `exclude` or `only` (default: no filter) |
1678
+ | `--people` | People-in-image filter: `include` \| `exclude` \| `only` |
1679
+ | `--order` | `relevance` (default) or `recent` |
1680
+ | `--limit` | Max results (1–50, default 10) |
1681
+ | `--page` | Page number for pagination |
1682
+ | `--auto-ingest` | Ingest top N hits (0–20, default 0) |
1683
+
1684
+ ### `baker images google <query>`
1685
+
1686
+ Google Images via the official Custom Search JSON API. ⚠ Source is unverified web content — inspect before placing.
1687
+
1688
+ ```bash
1689
+ baker images google "industrial workshop" --type photo --size large --limit 20
1690
+ ```
1691
+
1692
+ Cost: $0.005/query above the free tier (100 queries/day free). Custom Search caps at 10 results per call — pagination is automatic and bills per page (`--limit 30` = 3 queries against your daily quota).
1693
+
1694
+ Requires both `GOOGLE_CUSTOM_SEARCH_API_KEY` and `GOOGLE_CUSTOM_SEARCH_ENGINE_ID` (Programmable Search Engine `cx`) set on the Convex deployment, with the engine configured to "Search the entire web" + Image search ON.
1695
+
1696
+ **Flags:**
1697
+
1698
+ | Flag | Description |
1699
+ |------------------|----------------------------------------------------------------------------------------------------------|
1700
+ | `--type` | `imgType`: `photo \| clipart \| lineart \| stock \| animated \| face \| news` |
1701
+ | `--size` | `imgSize`: `icon \| small \| medium \| large \| xlarge \| xxlarge \| huge` |
1702
+ | `--color` | `imgColorType`: `color \| gray \| mono \| trans` |
1703
+ | `--safe` | `off \| active` |
1704
+ | `--limit` | Max results (1–50, paginated 10 per call) |
1705
+ | `--auto-ingest` | Ingest top N (0–20, default 0) |
1706
+
1707
+ ### `baker images logo <domain>`
1708
+
1709
+ Brand logo via Brandfetch CDN (`fallback/404`). Returns up to 5 variants per domain (icon, light/dark logo, light/dark symbol). Auto-ingests the first by default.
1710
+
1711
+ ```bash
1712
+ baker images logo stripe.com
1713
+ baker images logo linear.app --variant logo
1714
+ baker images logo example.com --no-auto-ingest
1715
+ ```
1716
+
1717
+ If the domain isn't in Brandfetch the result is empty — fall back to `baker images extract https://<domain>` to pull the logo from the site directly.
1718
+
1719
+ **Flags:**
1720
+
1721
+ | Flag | Description |
1722
+ |---------------------|--------------------------------------------------------------------------|
1723
+ | `--variant` | Pin to one variant: `icon \| logo \| symbol` (default: try all 5) |
1724
+ | `--no-auto-ingest` | Skip the default top-1 ingest |
1725
+
1726
+ ### `baker images icon <name> [--set <set>]`
1727
+
1728
+ Icon lookup via Iconify (200+ icon sets). Free, no API key.
1729
+
1730
+ ```bash
1731
+ baker images icon react --set devicon
1732
+ baker images icon lucide:check --color "#0a0a0a" --width 24
1733
+ baker images icon stripe # tries simple-icons → logos → devicon
1734
+ ```
1735
+
1736
+ Pass a prefixed id (`lucide:check`) to pin both set and name explicitly. Without `--set`, the lookup chain is `simple-icons → logos → devicon`.
1737
+
1738
+ **Flags:**
1739
+
1740
+ | Flag | Description |
1741
+ |------------|------------------------------------------------------------------------------------------------------|
1742
+ | `--set` | Iconify set (`simple-icons`, `logos`, `lucide`, `devicon`, `heroicons`, `tabler`, `phosphor`, …) |
1743
+ | `--color` | Hex color — replaces `currentColor` in the SVG |
1744
+ | `--width` | Render width in px (height auto-scales) |
1745
+
1746
+ ### `baker images gif <query>`
1747
+
1748
+ Search **Giphy** for GIFs / reaction memes — built for paid-social creative (Meta, TikTok, LinkedIn, X). Free API, no per-request cost. Replaces the discontinued Tenor integration.
1749
+
1750
+ ```bash
1751
+ baker images gif "this is fine" --limit 10
1752
+ baker images gif "office reaction" --rating pg --auto-ingest 2
1753
+ baker images gif "celebration" --lang es
1754
+ baker images gif --trending --limit 25
1755
+ ```
1756
+
1757
+ Each hit returns the primary URL (WebP — best for ingest) plus `providerMeta.gifUrl`, `providerMeta.mp4Url`, `providerMeta.webpUrl` so you can pick the right format per platform. `providerMeta.kind` is `"gif"`. `externalUrl` points at the Giphy permalink for verification.
1758
+
1759
+ **Flags:**
1760
+
1761
+ | Flag | Description |
1762
+ |------------------|--------------------------------------------------------------------------------------------|
1763
+ | `--trending` | Fetch the current trending feed (omit `<query>` when set) |
1764
+ | `--limit` | Max results (default 20, max 50) |
1765
+ | `--rating` | Content rating: `g \| pg \| pg-13 \| r` (default `pg`) |
1766
+ | `--lang` | ISO 639-1 language code (`en`, `es`, `fr`, …) to bias results |
1767
+ | `--auto-ingest` | Ingest top N (0–20, default 0). Ingest uses the WebP URL; `processImage` partial-fails on animated GIFs (no thumbhash/palette) but describe + embed still work. |
1768
+
1769
+ ### `baker images sticker <query>`
1770
+
1771
+ Search **Giphy's sticker corpus** — same API as `gif`, different corpus. Stickers are transparent-background WebPs / GIFs, ideal for overlaying on ad creative (Stories, Reels, banners).
1772
+
1773
+ ```bash
1774
+ baker images sticker "thumbs up" --limit 10
1775
+ baker images sticker celebration --rating g --auto-ingest 3
1776
+ baker images sticker --trending --limit 25
1777
+ ```
1778
+
1779
+ Same response shape as `gif`. `providerMeta.kind` is `"sticker"`; `externalUrl` points at `https://giphy.com/stickers/<id>`.
1780
+
1781
+ **Flags:** identical to `baker images gif` (`--trending`, `--limit`, `--rating`, `--lang`, `--auto-ingest`).
1782
+
1783
+ ### `baker images extract <url>`
1784
+
1785
+ Pull every image from a single URL via Firecrawl (`formats: ["images"]`).
1786
+
1787
+ ```bash
1788
+ baker images extract https://stripe.com --auto-ingest 5
1789
+ baker images extract https://example.com --wait-for 1500 --limit 20
1790
+ ```
1791
+
1792
+ Every image extracted from a page shares the scraped-page URL as `externalUrl`. Big pages can return 100+ images — cap auto-ingest at 20.
1793
+
1794
+ Cost: $0.001/scrape. JS-rendered pages with `--wait-for` cost the heavier credit bucket.
1795
+
1796
+ **Flags:**
1797
+
1798
+ | Flag | Description |
1799
+ |------------------|--------------------------------------------------------------------------------------------|
1800
+ | `--wait-for` | JS render wait in ms (0–30000) |
1801
+ | `--limit` | Max images returned (default 50) |
1802
+ | `--auto-ingest` | Ingest top N (0–20, default 0) |
1803
+
1804
+ ### `baker images screenshot <url>`
1805
+
1806
+ Capture a website screenshot via ScreenshotOne. Auto-ingests on success.
1807
+
1808
+ ```bash
1809
+ baker images screenshot https://stripe.com
1810
+ baker images screenshot https://stripe.com --full-page --viewport 1440x900
1811
+ baker images screenshot https://stripe.com --format png
1812
+ ```
1813
+
1814
+ Auto-ingests with prefetched bytes (no double-fetch). The screenshot bytes themselves are the artifact — `externalUrl` is the captured URL.
1815
+
1816
+ Cost: $0.009/capture. ScreenshotOne caches captures for 30 days, so re-shotting the same URL within that window is cheap.
1817
+
1818
+ **Flags:**
1819
+
1820
+ | Flag | Description |
1821
+ |----------------|--------------------------------------------------------------------------------------------|
1822
+ | `--full-page` | Capture the full scrolled page (default: viewport only) |
1823
+ | `--viewport` | `WxH` viewport (default `1280x800`) |
1824
+ | `--format` | `webp \| png \| jpg` (default `webp`) |
1825
+
1826
+ ### `baker images ingest <url> --source <enum>`
1827
+
1828
+ Download a remote URL and store it in the library. Byte-exact deduped via sha256 + externalId, then queued for describe + embed.
1829
+
1830
+ ```bash
1831
+ baker images ingest https://img.freepik.com/free-photo/xyz.jpg --source magnific --external-id 12345
1832
+ baker images ingest https://acme.com/hero.png --source firecrawl --external-url https://acme.com/pricing --context "competitor pricing hero"
1833
+ ```
1834
+
1835
+ Returns `{ imageId, deduped, contentHash }`. When `deduped: true`, an existing library row is returned — no new bytes are stored. Max ingest size 25MB.
1836
+
1837
+ **Flags:**
1838
+
1839
+ | Flag | Description |
1840
+ |------------------|--------------------------------------------------------------------------------------------|
1841
+ | `--source` | **Required.** Source enum (`uploaded`, `magnific`, `brandfetch`, `google_images`, `firecrawl`, `screenshotone`, `iconify`, `giphy`, `instagram`, …) |
1842
+ | `--external-id` | Provider asset id — enables per-source dedup before bytes are fetched |
1843
+ | `--external-url` | Canonical page URL (parent page for scraped/Google hits, provider page for stock) |
1844
+ | `--context` | Free-text hint passed to Gemini describe to bias the generated description and tags |
1845
+
1846
+ ### `baker images use <url>`
1847
+
1848
+ Sugar over `ingest`: stores the URL and polls `get` until the library record is `ready` (or errored). Returns the ingest result plus the ready image doc — synchronous from the agent's perspective.
1576
1849
 
1577
1850
  ```bash
1578
- baker images search "hero banner"
1579
- baker images search "logo" --aspect-ratio 1:1 --tags logo
1580
- baker images search "team photo" --limit 5 --min-score 0.3
1851
+ baker images use https://cdn.example.com/hero.png
1852
+ baker images use https://cdn.example.com/hero.png --source magnific --max-wait 60000
1581
1853
  ```
1582
1854
 
1583
1855
  **Flags:**
1584
1856
 
1585
- | Flag | Description |
1586
- |------------------|--------------------------------------------------------------------------|
1587
- | `--limit` | Max results (default 5) |
1588
- | `--min-score` | Minimum relevance score, 0-1 |
1589
- | `--aspect-ratio` | Filter by aspect ratio (1:1, 16:9, 9:16, 2:3, 3:4, 1:2, 2:1, 4:5, 3:2, 4:3) |
1590
- | `--tags` | Comma-separated tag names to filter by |
1591
- | `--output` | Output format: `json` \| `files` \| `md` |
1592
- | `--fields` | Comma-separated field names to include |
1593
- | `--full` | Include full metadata |
1857
+ | Flag | Description |
1858
+ |----------------|--------------------------------------------------------------------------------------------|
1859
+ | `--source` | Source enum (default `uploaded`) |
1860
+ | `--max-wait` | Max wait ms before returning `TIMEOUT` (default `30000`, polled every 1500ms) |
1594
1861
 
1595
1862
  ### `baker images get <id>`
1596
1863
 
@@ -1691,7 +1958,7 @@ baker actions release <action-id>
1691
1958
  baker actions create --name "Build hero" --description "..." --tag copy,landing
1692
1959
  # → returns { ok, data: { tempId }, hints: [...] } — check hints for dependencies/tags/description reminders
1693
1960
  baker actions update <action-id> --name "Better name"
1694
- baker actions complete <action-id> --note "What was done" # stages — applies on chat publish
1961
+ baker actions complete <action-id-or-tempId> --note "What was done" # stages — applies on chat publish
1695
1962
  baker actions discard <action-id> --reason "obsolete"
1696
1963
 
1697
1964
  baker actions link --blocker <id-or-tempId> --blocked <id-or-tempId>
package/dist/cli.js CHANGED
@@ -12,7 +12,7 @@ import { videosCommand } from "./commands/videos/index.js";
12
12
  const main = defineCommand({
13
13
  meta: {
14
14
  name: "baker",
15
- version: "0.28.0",
15
+ version: "0.32.0",
16
16
  description: `AI-agent CLI for finding and managing images, videos, testimonials, action items, and ad platform data in Baker.
17
17
 
18
18
  Auth: Set BAKER_API_KEY (starts with bk_) and BAKER_API_URL environment variables.
@@ -1,12 +1,12 @@
1
1
  export declare const completeCommand: import("citty").CommandDef<{
2
2
  readonly id: {
3
3
  readonly type: "positional";
4
- readonly description: "Action ID";
4
+ readonly description: "Action ID or temp ID";
5
5
  readonly required: false;
6
6
  };
7
7
  readonly "action-id": {
8
8
  readonly type: "string";
9
- readonly description: "Action ID";
9
+ readonly description: "Action ID or temp ID";
10
10
  readonly required: false;
11
11
  };
12
12
  readonly note: {
@@ -1 +1 @@
1
- {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../../src/commands/actions/complete.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;EAyB1B,CAAC"}
1
+ {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../../src/commands/actions/complete.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;EA2B1B,CAAC"}
@@ -2,23 +2,23 @@ import { defineCommand } from "citty";
2
2
  import { apiPost, validateConvexId } from "../../client.js";
3
3
  import { requireChatId } from "../../env.js";
4
4
  import { registerSchema } from "../../schemas.js";
5
- import { failApi, failValidation, writeOk } from "./shared.js";
5
+ import { failApi, failValidation, isTempId, writeOk } from "./shared.js";
6
6
  registerSchema({
7
7
  command: "actions.complete",
8
- description: "Stage completion of a claimed action. The action stays claimed and in_progress until the chat is published only then does it become completed.",
8
+ description: "Stage completion of an action. Accepts a real action ID (must be claimed) or a temp ID from the same draft. The action becomes completed when the chat is published.",
9
9
  args: {
10
- id: { type: "string", description: "Action ID (must be claimed by current chat)", required: true },
10
+ id: { type: "string", description: "Action ID or temp ID", required: true },
11
11
  note: { type: "string", description: "What was done — context for the team and AI", required: false },
12
12
  },
13
13
  });
14
14
  export const completeCommand = defineCommand({
15
15
  meta: {
16
16
  name: "complete",
17
- description: "Stage completion of a claimed action. Real completion happens on chat publish. Example: baker actions complete <id>",
17
+ description: "Stage completion of an action. Accepts real IDs (claimed) or temp IDs (same draft). Example: baker actions complete <id>",
18
18
  },
19
19
  args: {
20
- id: { type: "positional", description: "Action ID", required: false },
21
- "action-id": { type: "string", description: "Action ID", required: false },
20
+ id: { type: "positional", description: "Action ID or temp ID", required: false },
21
+ "action-id": { type: "string", description: "Action ID or temp ID", required: false },
22
22
  note: { type: "string", description: "What was done — context for the team and AI", required: false },
23
23
  },
24
24
  run: async ({ args }) => {
@@ -27,9 +27,11 @@ export const completeCommand = defineCommand({
27
27
  if (!id) {
28
28
  failValidation("Action ID is required.");
29
29
  }
30
- validateConvexId(id);
30
+ if (!isTempId(id)) {
31
+ validateConvexId(id);
32
+ }
31
33
  const chatId = requireChatId();
32
- await apiPost("/api/actions/complete", { chatId, actionId: id, note: args.note });
34
+ await apiPost("/api/actions/complete", { chatId, actionRef: id, note: args.note });
33
35
  writeOk();
34
36
  }
35
37
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/commands/actions/complete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE/D,cAAc,CAAC;IACb,OAAO,EAAE,kBAAkB;IAC3B,WAAW,EACT,kJAAkJ;IACpJ,IAAI,EAAE;QACJ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClG,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE,QAAQ,EAAE,KAAK,EAAE;KACtG;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;IAC3C,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,qHAAqH;KACxH;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;QACrE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC1E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE,QAAQ,EAAE,KAAK,EAAE;KACtG;IACD,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,GAAI,IAAI,CAAC,EAAyB,IAAK,IAAI,CAAC,WAAW,CAAwB,CAAC;YACxF,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,cAAc,CAAC,wBAAwB,CAAC,CAAC;YAC3C,CAAC;YACD,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,OAAO,CAAe,uBAAuB,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAChG,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/commands/actions/complete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEzE,cAAc,CAAC;IACb,OAAO,EAAE,kBAAkB;IAC3B,WAAW,EACT,sKAAsK;IACxK,IAAI,EAAE;QACJ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC3E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE,QAAQ,EAAE,KAAK,EAAE;KACtG;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;IAC3C,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,0HAA0H;KAC7H;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE;QAChF,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE;QACrF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE,QAAQ,EAAE,KAAK,EAAE;KACtG;IACD,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,GAAI,IAAI,CAAC,EAAyB,IAAK,IAAI,CAAC,WAAW,CAAwB,CAAC;YACxF,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,cAAc,CAAC,wBAAwB,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClB,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,OAAO,CAAe,uBAAuB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACjG,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -2,4 +2,5 @@ export declare function writeOk<T = null>(data?: T): void;
2
2
  export declare function failValidation(message: string): never;
3
3
  export declare function failApi(err: unknown): never;
4
4
  export declare function generateTempId(): string;
5
+ export declare function isTempId(id: string): boolean;
5
6
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/actions/shared.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAEhD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGrD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAW3C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/actions/shared.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAEhD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGrD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAW3C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE5C"}
@@ -22,4 +22,7 @@ export function failApi(err) {
22
22
  export function generateTempId() {
23
23
  return `temp_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
24
24
  }
25
+ export function isTempId(id) {
26
+ return id.startsWith("temp_");
27
+ }
25
28
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/actions/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,OAAO,CAAW,IAAQ;IACxC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,CAAM,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAY;IAClC,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACtF,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/actions/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,OAAO,CAAW,IAAQ;IACxC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,CAAM,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAY;IAClC,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAU;IACjC,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"correction-table.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/correction-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,aAAa,CAAC;AAMrE,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAsX5C,CAAC"}
1
+ {"version":3,"file":"correction-table.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/correction-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,aAAa,CAAC;AAMrE,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAoY5C,CAAC"}
@@ -63,7 +63,19 @@ export const CORRECTION_RULES = [
63
63
  };
64
64
  },
65
65
  },
66
- // 5. Missing campaign.id in ad_group queries
66
+ // 5. ad_group_criterion query without negative filter — auto-add the field
67
+ {
68
+ matchQuery: /FROM\s+ad_group_criterion\b(?!.*ad_group_criterion\.negative)/i,
69
+ fix: (ctx) => {
70
+ const corrected = ctx.originalQuery.replace(/SELECT\s+/i, "SELECT ad_group_criterion.negative, ");
71
+ return {
72
+ action: "add_required_field",
73
+ correctedCommand: buildCommand(corrected, ctx),
74
+ explanation: "Added ad_group_criterion.negative to distinguish positive (targeting) from negative (blocking) keywords. Filter with WHERE ad_group_criterion.negative = FALSE for positives only.",
75
+ };
76
+ },
77
+ },
78
+ // 6. Missing campaign.id in ad_group queries
67
79
  {
68
80
  matchQuery: /FROM\s+ad_group\b/i,
69
81
  matchApiError: /campaign\.id.*required|must.*include.*campaign\.id/i,
@@ -1 +1 @@
1
- {"version":3,"file":"correction-table.js","sourceRoot":"","sources":["../../../../src/commands/ads/google/correction-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"correction-table.js","sourceRoot":"","sources":["../../../../src/commands/ads/google/correction-table.ts"],"names":[],"mappings":"AAEA,SAAS,YAAY,CAAC,KAAa,EAAE,GAAsB;IACzD,OAAO,2BAA2B,KAAK,mBAAmB,GAAG,CAAC,UAAU,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,oDAAoD;IACpD;QACE,UAAU,EAAE,mBAAmB;QAC/B,aAAa,EAAE,gBAAgB;QAC/B,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,oBAAoB,EAAE,iCAAiC,CAAC,CAAC;YACrG,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,4FAA4F;aAC1G,CAAC;QACJ,CAAC;KACF;IAED,gEAAgE;IAChE;QACE,UAAU,EAAE,yBAAyB;QACrC,aAAa,EAAE,sBAAsB;QACrC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,0BAA0B,EAAE,uCAAuC,CAAC,CAAC;YACjH,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,kEAAkE;aAChF,CAAC;QACJ,CAAC;KACF;IAED,6CAA6C;IAC7C;QACE,UAAU,EAAE,0CAA0C;QACtD,aAAa,EAAE,wEAAwE;QACvF,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;YAC1F,OAAO;gBACL,MAAM,EAAE,wBAAwB;gBAChC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,gFAAgF;aAC9F,CAAC;QACJ,CAAC;KACF;IAED,qBAAqB;IACrB;QACE,UAAU,EAAE,gBAAgB;QAC5B,aAAa,EAAE,uDAAuD;QACtE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACpF,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CACzC,wCAAwC,EACxC,GAAG,KAAK,WAAW,KAAK,IAAI,CAC7B,CAAC;gBACF,OAAO;oBACL,MAAM,EAAE,iBAAiB;oBACzB,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;oBAC9C,WAAW,EAAE,iEAAiE;iBAC/E,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE,4DAA4D;aAC1E,CAAC;QACJ,CAAC;KACF;IAED,2EAA2E;IAC3E;QACE,UAAU,EAAE,gEAAgE;QAC5E,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,sCAAsC,CAAC,CAAC;YAClG,OAAO;gBACL,MAAM,EAAE,oBAAoB;gBAC5B,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EACT,oLAAoL;aACvL,CAAC;QACJ,CAAC;KACF;IAED,6CAA6C;IAC7C;QACE,UAAU,EAAE,oBAAoB;QAChC,aAAa,EAAE,qDAAqD;QACpE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;YAClF,OAAO;gBACL,MAAM,EAAE,oBAAoB;gBAC5B,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,mEAAmE;aACjF,CAAC;QACJ,CAAC;KACF;IAED,iDAAiD;IACjD;QACE,UAAU,EAAE,wBAAwB;QACpC,aAAa,EAAE,kCAAkC;QACjD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;YAClF,OAAO;gBACL,MAAM,EAAE,oBAAoB;gBAC5B,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,oDAAoD;aAClE,CAAC;QACJ,CAAC;KACF;IAED,8DAA8D;IAC9D;QACE,UAAU,EAAE,wCAAwC;QACpD,aAAa,EAAE,qCAAqC;QACpD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,2CAA2C,EAAE,qBAAqB,CAAC,CAAC;YAChH,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,2FAA2F;aACzG,CAAC;QACJ,CAAC;KACF;IAED,2BAA2B;IAC3B;QACE,UAAU,EAAE,8CAA8C;QAC1D,aAAa,EAAE,wCAAwC;QACvD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YACtF,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CACzC,8CAA8C,EAC9C,0BAA0B,SAAS,UAAU,KAAK,GAAG,CACtD,CAAC;YACF,OAAO;gBACL,MAAM,EAAE,mBAAmB;gBAC3B,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,0EAA0E;aACxF,CAAC;QACJ,CAAC;KACF;IAED,mBAAmB;IACnB;QACE,UAAU,EAAE,oBAAoB;QAChC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC;YAC7D,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,oDAAoD;aAClE,CAAC;QACJ,CAAC;KACF;IAED,8CAA8C;IAC9C;QACE,aAAa,EAAE,0CAA0C;QACzD,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACV,MAAM,EAAE,QAAQ;YAChB,WAAW,EACT,2HAA2H;SAC9H,CAAC;KACH;IAED,mDAAmD;IACnD;QACE,aAAa,EAAE,oCAAoC;QACnD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,MAAM,EAAE,QAAQ;YAChB,gBAAgB,EAAE,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;YACtD,WAAW,EACT,iJAAiJ;SACpJ,CAAC;KACH;IAED,qCAAqC;IACrC;QACE,UAAU,EAAE,yEAAyE;QACrF,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;YACjH,MAAM,OAAO,GAA2B;gBACtC,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,iBAAiB;gBACvB,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE,OAAO;aACf,CAAC;YACF,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC;YACzE,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CACzC,oCAAoC,EACpC,wCAAwC,WAAW,GAAG,CACvD,CAAC;YACF,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,uEAAuE;aACrF,CAAC;QACJ,CAAC;KACF;IAED,0BAA0B;IAC1B;QACE,aAAa,EAAE,4DAA4D;QAC3E,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACV,MAAM,EAAE,aAAa;YACrB,WAAW,EAAE,6FAA6F;SAC3G,CAAC;KACH;IAED,6CAA6C;IAC7C;QACE,UAAU,EAAE,kCAAkC;QAC9C,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,mCAAmC,EAAE,6BAA6B,CAAC,CAAC;YAChH,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,0CAA0C;aACxD,CAAC;QACJ,CAAC;KACF;IAED,6CAA6C;IAC7C;QACE,UAAU,EAAE,kCAAkC;QAC9C,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,mCAAmC,EAAE,6BAA6B,CAAC,CAAC;YAChH,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,0CAA0C;aACxD,CAAC;QACJ,CAAC;KACF;IAED,gDAAgD;IAChD;QACE,UAAU,EAAE,qCAAqC;QACjD,aAAa,EAAE,iBAAiB;QAChC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,2BAA2B,CAAC,CAAC;YAChG,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,8CAA8C;aAC5D,CAAC;QACJ,CAAC;KACF;IAED,yBAAyB;IACzB;QACE,aAAa,EAAE,iDAAiD;QAChE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACV,MAAM,EAAE,gBAAgB;YACxB,WAAW,EAAE,sDAAsD;SACpE,CAAC;KACH;IAED,uBAAuB;IACvB;QACE,aAAa,EAAE,0DAA0D;QACzE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACV,MAAM,EAAE,QAAQ;YAChB,WAAW,EACT,qGAAqG;SACxG,CAAC;KACH;IAED,mCAAmC;IACnC;QACE,aAAa,EAAE,6DAA6D;QAC5E,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;YACzC,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;YAC/E,OAAO;gBACL,MAAM,EAAE,oBAAoB;gBAC5B,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,OAAO,KAAK,+CAA+C;aACzE,CAAC;QACJ,CAAC;KACF;IAED,uCAAuC;IACvC;QACE,aAAa,EAAE,mCAAmC;QAClD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;YAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,sBAAsB,CAAC,CAAC,CAAC,UAAU,QAAQ,sBAAsB,CAAC;YAC5G,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAChE,IAAI,SAAiB,CAAC;YACtB,IAAI,UAAU,EAAE,CAAC;gBACf,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;YACnD,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,wCAAwC,QAAQ,GAAG;aACjE,CAAC;QACJ,CAAC;KACF;IAED,2CAA2C;IAC3C;QACE,UAAU,EAAE,8CAA8C;QAC1D,aAAa,EAAE,4CAA4C;QAC3D,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/F,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,QAAQ;gBACrB,CAAC,CAAC,0CAA0C,YAAY,GAAG;gBAC3D,CAAC,CAAC,4CAA4C,YAAY,GAAG,CAAC;YAChE,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;YACvD,OAAO;gBACL,MAAM,EAAE,oBAAoB;gBAC5B,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,oEAAoE;aAClF,CAAC;QACJ,CAAC;KACF;IAED,0DAA0D;IAC1D;QACE,UAAU,EAAE,0DAA0D;QACtE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAClG,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;YAC1C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CACzC,0DAA0D,EAC1D,GAAG,QAAQ,SAAS,EAAE,EAAE,CACzB,CAAC;YACF,OAAO;gBACL,MAAM,EAAE,2BAA2B;gBACnC,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,gBAAgB,QAAQ,SAAS,EAAE,gCAAgC;aACjF,CAAC;QACJ,CAAC;KACF;IAED,0CAA0C;IAC1C;QACE,aAAa,EAAE,8CAA8C;QAC7D,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;YAC9E,OAAO;gBACL,MAAM,EAAE,aAAa;gBACrB,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;gBAC9C,WAAW,EAAE,yFAAyF;aACvG,CAAC;QACJ,CAAC;KACF;IAED,8BAA8B;IAC9B;QACE,aAAa,EAAE,gDAAgD;QAC/D,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACV,MAAM,EAAE,2BAA2B;YACnC,WAAW,EAAE,gGAAgG;SAC9G,CAAC;KACH;IAED,2BAA2B;IAC3B;QACE,aAAa,EAAE,gEAAgE;QAC/E,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACV,MAAM,EAAE,cAAc;YACtB,WAAW,EAAE,+EAA+E;SAC7F,CAAC;KACH;IAED,kCAAkC;IAClC;QACE,aAAa,EAAE,+CAA+C;QAC9D,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,MAAM,EAAE,2BAA2B;YACnC,gBAAgB,EAAE,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;YACtD,WAAW,EAAE,kFAAkF;SAChG,CAAC;KACH;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,eAAe,EAAE,MAAM,aAAa,CAAC;AAkD/D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,eAAe,CAkFpG"}
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,eAAe,EAAE,MAAM,aAAa,CAAC;AAkD/D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,eAAe,CA2FpG"}
@@ -108,6 +108,13 @@ export function validatePreflight(query, customerId, limit) {
108
108
  },
109
109
  };
110
110
  }
111
+ // WARN: ad_group_criterion without negative field — positives and negatives will be mixed
112
+ if (/FROM\s+ad_group_criterion\b/i.test(corrected) && !/ad_group_criterion\.negative/i.test(corrected)) {
113
+ warnings.push({
114
+ code: "NEGATIVE_FIELD_MISSING",
115
+ message: "ad_group_criterion returns BOTH positive and negative keywords. Add ad_group_criterion.negative to SELECT or filter with WHERE ad_group_criterion.negative = FALSE (positives) / TRUE (negatives). Use --preset positive-keywords or negative-keywords instead.",
116
+ });
117
+ }
111
118
  const { query: autoFixed, warnings: autoFixWarnings } = applyAutoFixes(corrected, limit);
112
119
  warnings.push(...autoFixWarnings);
113
120
  return { valid: true, correctedQuery: autoFixed, warnings };
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../../src/commands/ads/google/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../../src/commands/ads/google/preflight.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,eAAO,MAAM,OAAO,EAAE,gBAAgB,EAkDrC,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEpE;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAa5C"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/google/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,eAAO,MAAM,OAAO,EAAE,gBAAgB,EAgErC,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEpE;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAa5C"}
@@ -17,6 +17,20 @@ export const PRESETS = [
17
17
  defaultDateRange: "LAST_30_DAYS",
18
18
  defaultLimit: 200,
19
19
  },
20
+ {
21
+ name: "positive-keywords",
22
+ description: "Positive (targeting) keywords only — excludes negatives",
23
+ gaqlTemplate: `SELECT campaign.id, campaign.name, ad_group.name, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.status, ad_group_criterion.negative FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = FALSE AND campaign.status != 'REMOVED' AND ad_group_criterion.status != 'REMOVED' ORDER BY campaign.name LIMIT {limit}`,
24
+ defaultDateRange: "ALL_TIME",
25
+ defaultLimit: 500,
26
+ },
27
+ {
28
+ name: "negative-keywords",
29
+ description: "Negative keywords only — campaign and ad group level",
30
+ gaqlTemplate: `SELECT campaign.id, campaign.name, ad_group.name, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.negative FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = TRUE AND campaign.status != 'REMOVED' ORDER BY campaign.name LIMIT {limit}`,
31
+ defaultDateRange: "ALL_TIME",
32
+ defaultLimit: 500,
33
+ },
20
34
  {
21
35
  name: "search-terms",
22
36
  description: "Actual user search queries triggering ads",
@@ -1 +1 @@
1
- {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../../src/commands/ads/google/presets.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GACtB,oOAAoO,CAAC;AAEvO,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAuB;IACzC;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,iCAAiC;QAC9C,YAAY,EAAE,yWAAyW;QACvX,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,iDAAiD;QAC9D,YAAY,EAAE,+VAA+V;QAC7W,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,2CAA2C;QACxD,YAAY,EAAE,4SAA4S;QAC1T,gBAAgB,EAAE,aAAa;QAC/B,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,2CAA2C;QACxD,YAAY,EAAE,iXAAiX;QAC/X,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,0CAA0C;QACvD,YAAY,EAAE,kUAAkU;QAChV,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,4CAA4C;QACzD,YAAY,EAAE,4UAA4U;QAC1V,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,uCAAuC;QACpD,YAAY,EAAE,sNAAsN;QACpO,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,CAAC;KAChB;CACF,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAwB,EACxB,MAA8C;IAE9C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,gBAAgB,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,YAAY,CAAC;IAElD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,KAAK,EAAE,EAAE;YACT,cAAc,EAAE,wBAAwB,SAAS,iGAAiG;SACnJ,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5G,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../../src/commands/ads/google/presets.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GACtB,oOAAoO,CAAC;AAEvO,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAuB;IACzC;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,iCAAiC;QAC9C,YAAY,EAAE,yWAAyW;QACvX,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,iDAAiD;QAC9D,YAAY,EAAE,+VAA+V;QAC7W,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,yDAAyD;QACtE,YAAY,EAAE,6YAA6Y;QAC3Z,gBAAgB,EAAE,UAAU;QAC5B,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,sDAAsD;QACnE,YAAY,EAAE,sUAAsU;QACpV,gBAAgB,EAAE,UAAU;QAC5B,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,2CAA2C;QACxD,YAAY,EAAE,4SAA4S;QAC1T,gBAAgB,EAAE,aAAa;QAC/B,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,2CAA2C;QACxD,YAAY,EAAE,iXAAiX;QAC/X,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,0CAA0C;QACvD,YAAY,EAAE,kUAAkU;QAChV,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,4CAA4C;QACzD,YAAY,EAAE,4UAA4U;QAC1V,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,GAAG;KAClB;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,uCAAuC;QACpD,YAAY,EAAE,sNAAsN;QACpO,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,CAAC;KAChB;CACF,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAwB,EACxB,MAA8C;IAE9C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,gBAAgB,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,YAAY,CAAC;IAElD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,KAAK,EAAE,EAAE;YACT,cAAc,EAAE,wBAAwB,SAAS,iGAAiG;SACnJ,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5G,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}