adloop 0.33.0__tar.gz → 0.34.0__tar.gz

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 (73) hide show
  1. {adloop-0.33.0 → adloop-0.34.0}/PKG-INFO +6 -3
  2. {adloop-0.33.0 → adloop-0.34.0}/README.md +5 -2
  3. {adloop-0.33.0 → adloop-0.34.0}/pyproject.toml +1 -1
  4. {adloop-0.33.0 → adloop-0.34.0}/pyproject.toml.orig +1 -1
  5. adloop-0.34.0/src/adloop/ads/assets.py +734 -0
  6. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/write.py +40 -173
  7. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/rules/adloop.md +9 -5
  8. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/safety/approval.py +69 -0
  9. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/safety/preview.py +5 -0
  10. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/server.py +213 -17
  11. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/__init__.py +0 -0
  12. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/__main__.py +0 -0
  13. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/_mcp_patches.py +0 -0
  14. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/__init__.py +0 -0
  15. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/ai_max.py +0 -0
  16. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/audiences.py +0 -0
  17. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/brands.py +0 -0
  18. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/client.py +0 -0
  19. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/conversion_actions.py +0 -0
  20. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/currency.py +0 -0
  21. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/custom_conversion_goals.py +0 -0
  22. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/enums.py +0 -0
  23. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/forecast.py +0 -0
  24. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/gaql.py +0 -0
  25. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/image_fetch.py +0 -0
  26. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/pmax.py +0 -0
  27. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/read.py +0 -0
  28. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/shopping.py +0 -0
  29. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ads/validate_only.py +0 -0
  30. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/auth.py +0 -0
  31. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/cli.py +0 -0
  32. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/config.py +0 -0
  33. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/crossref.py +0 -0
  34. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/diagnostics.py +0 -0
  35. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ga4/__init__.py +0 -0
  36. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ga4/client.py +0 -0
  37. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ga4/reports.py +0 -0
  38. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ga4/tracking.py +0 -0
  39. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/ga4/write.py +0 -0
  40. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/gsc/__init__.py +0 -0
  41. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/gsc/client.py +0 -0
  42. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/gsc/reports.py +0 -0
  43. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/gtm/__init__.py +0 -0
  44. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/gtm/client.py +0 -0
  45. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/gtm/entities.py +0 -0
  46. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/gtm/read.py +0 -0
  47. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/gtm/write.py +0 -0
  48. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/merchant/__init__.py +0 -0
  49. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/merchant/client.py +0 -0
  50. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/merchant/read.py +0 -0
  51. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/pagespeed.py +0 -0
  52. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/reddit/__init__.py +0 -0
  53. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/reddit/auth.py +0 -0
  54. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/reddit/client.py +0 -0
  55. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/reddit/read.py +0 -0
  56. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/reddit/schedule.py +0 -0
  57. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/reddit/write.py +0 -0
  58. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/rules/__init__.py +0 -0
  59. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/rules/commands/analyze-performance.md +0 -0
  60. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/rules/commands/budget-plan.md +0 -0
  61. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/rules/commands/create-ad.md +0 -0
  62. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/rules/commands/create-campaign.md +0 -0
  63. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/rules/commands/diagnose-tracking.md +0 -0
  64. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/rules/commands/optimize-campaign.md +0 -0
  65. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/rules_install.py +0 -0
  66. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/runtime.py +0 -0
  67. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/safety/__init__.py +0 -0
  68. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/safety/approval_card.html +0 -0
  69. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/safety/audit.py +0 -0
  70. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/safety/guards.py +0 -0
  71. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/tracking.py +0 -0
  72. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/upload_card.html +0 -0
  73. {adloop-0.33.0 → adloop-0.34.0}/src/adloop/uploads.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: adloop
3
- Version: 0.33.0
3
+ Version: 0.34.0
4
4
  Summary: The AI command center for Google Ads, Reddit Ads, GA4, and tracking code.
5
5
  Keywords: mcp,google-ads,reddit-ads,google-analytics,ga4,cursor,marketing
6
6
  Author: Daniel Klose
@@ -305,8 +305,11 @@ All write operations follow a **draft → preview → confirm** workflow. Nothin
305
305
  | `draft_ad_group` | Create a paused SEARCH_STANDARD ad group inside an existing campaign, with optional MANUAL_CPC `max_cpc`. |
306
306
  | `update_ad_group` | Update an ad group name and/or MANUAL_CPC `max_cpc`. Use `pause_entity` / `enable_entity` for ad-group status changes. |
307
307
  | `draft_responsive_search_ad` | Create RSA preview (3-15 headlines ≤30 chars, 2-4 descriptions ≤90 chars). Warns if headline/description count is below best practice. |
308
- | `draft_callouts` | Create campaign callout assets from 1-25 character text snippets. |
309
- | `draft_structured_snippets` | Create campaign structured snippet assets using official header values and 3-10 snippet values. |
308
+ | `draft_callouts` | Create callout assets (1-25 characters) for an ad group, a campaign or the account. |
309
+ | `draft_structured_snippets` | Create structured snippet assets for an ad group, a campaign or the account, using official header values and 3-10 values. |
310
+ | `draft_business_name_asset` | Create the business name shown with the ads, for a campaign or the account. |
311
+ | `link_asset_to_customer` | Link existing assets account-wide; the asset type is checked against the field type. |
312
+ | `update_callout` / `update_sitelink` / `update_structured_snippet` | Edit an asset in place, keeping its ID and history; the apply refuses if it was changed in Google Ads since the preview. |
310
313
  | `draft_image_assets` | Create campaign image assets from local files, public image URLs or uploads (PNG, JPEG, or GIF). |
311
314
  | `draft_keywords` | Propose keyword additions with match types. Proactively checks bidding strategy — flags BROAD match on campaigns without Smart Bidding as dangerous in the preview. |
312
315
  | `add_negative_keywords` | Propose negative keywords directly on a campaign |
@@ -277,8 +277,11 @@ All write operations follow a **draft → preview → confirm** workflow. Nothin
277
277
  | `draft_ad_group` | Create a paused SEARCH_STANDARD ad group inside an existing campaign, with optional MANUAL_CPC `max_cpc`. |
278
278
  | `update_ad_group` | Update an ad group name and/or MANUAL_CPC `max_cpc`. Use `pause_entity` / `enable_entity` for ad-group status changes. |
279
279
  | `draft_responsive_search_ad` | Create RSA preview (3-15 headlines ≤30 chars, 2-4 descriptions ≤90 chars). Warns if headline/description count is below best practice. |
280
- | `draft_callouts` | Create campaign callout assets from 1-25 character text snippets. |
281
- | `draft_structured_snippets` | Create campaign structured snippet assets using official header values and 3-10 snippet values. |
280
+ | `draft_callouts` | Create callout assets (1-25 characters) for an ad group, a campaign or the account. |
281
+ | `draft_structured_snippets` | Create structured snippet assets for an ad group, a campaign or the account, using official header values and 3-10 values. |
282
+ | `draft_business_name_asset` | Create the business name shown with the ads, for a campaign or the account. |
283
+ | `link_asset_to_customer` | Link existing assets account-wide; the asset type is checked against the field type. |
284
+ | `update_callout` / `update_sitelink` / `update_structured_snippet` | Edit an asset in place, keeping its ID and history; the apply refuses if it was changed in Google Ads since the preview. |
282
285
  | `draft_image_assets` | Create campaign image assets from local files, public image URLs or uploads (PNG, JPEG, or GIF). |
283
286
  | `draft_keywords` | Propose keyword additions with match types. Proactively checks bidding strategy — flags BROAD match on campaigns without Smart Bidding as dangerous in the preview. |
284
287
  | `add_negative_keywords` | Propose negative keywords directly on a campaign |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "adloop"
3
- version = "0.33.0"
3
+ version = "0.34.0"
4
4
  description = "The AI command center for Google Ads, Reddit Ads, GA4, and tracking code."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "adloop"
3
- version = "0.33.0"
3
+ version = "0.34.0"
4
4
  description = "The AI command center for Google Ads, Reddit Ads, GA4, and tracking code."
5
5
  readme = "README.md"
6
6
  authors = [