@koda-sl/baker-cli 0.353.0-dev.afbf521d7 → 0.353.0-dev.f5f2d3146

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/dist/cli.js CHANGED
@@ -54,7 +54,6 @@ import {
54
54
  promptMaxLength,
55
55
  requireCredentialsFromEnv,
56
56
  resolveConcurrency,
57
- runFailureCode,
58
57
  runYtDlp,
59
58
  sha256Hex,
60
59
  spineInputFlags,
@@ -69,7 +68,7 @@ import {
69
68
  validateCanvasDeep,
70
69
  withoutCastName,
71
70
  ytDlpBlockSignal
72
- } from "./chunk-RZWMHH4X.js";
71
+ } from "./chunk-B7MLH3K6.js";
73
72
  import {
74
73
  csvOrJson,
75
74
  daysAgoIso,
@@ -9185,6 +9184,13 @@ var FIELD_DESCRIPTIONS = {
9185
9184
  "ad_group.name": "Ad group display name",
9186
9185
  "ad_group.status": "ENABLED, PAUSED, or REMOVED",
9187
9186
  "ad_group.type": "Ad group type (SEARCH_STANDARD, DISPLAY_STANDARD, etc.)",
9187
+ "ad_group.target_roas": "This ad group's own target ROAS (ratio), overriding its campaign's and portfolio's; 0 or omitted = none",
9188
+ "ad_group.effective_target_roas": "The target ROAS this ad group actually bids to, from whichever level sets it",
9189
+ "ad_group.effective_target_roas_source": "Which level the effective target ROAS comes from: AD_GROUP (its own \u2014 a campaign or portfolio change does not reach it) or CAMPAIGN_BIDDING_STRATEGY (the campaign's strategy, its own or a portfolio)",
9190
+ "ad_group.target_cpa_micros": "This ad group's own target CPA in micros, overriding its campaign's and portfolio's; 0 or omitted = none",
9191
+ "ad_group.effective_target_cpa_micros": "The target CPA (micros) this ad group actually bids to",
9192
+ "ad_group.effective_target_cpa_source": "Which level the effective target CPA comes from: AD_GROUP (its own \u2014 a campaign or portfolio change does not reach it) or CAMPAIGN_BIDDING_STRATEGY (the campaign's strategy, its own or a portfolio)",
9193
+ "campaign.bidding_strategy": "Resource name of the portfolio bidding strategy the campaign uses; blank = its own strategy",
9188
9194
  // Ad group ad
9189
9195
  "ad_group_ad.ad.id": "Unique ad identifier",
9190
9196
  "ad_group_ad.ad.final_urls": "Landing page URLs (array)",
@@ -12038,6 +12044,18 @@ var PRESETS = [
12038
12044
  defaultLimit: 200,
12039
12045
  statusFields: ["campaign.status"]
12040
12046
  },
12047
+ {
12048
+ // A target resolves ad group > campaign > portfolio strategy, so the campaign's or the portfolio's
12049
+ // number is not necessarily the one bidding. `effective_target_*_source` names the level that is;
12050
+ // a change staged anywhere else is inert for that ad group. Undated on purpose: an ad group that
12051
+ // spent nothing in the window still carries its own target, and a dated read would drop its row.
12052
+ name: "bid-targets",
12053
+ description: "Which target each ad group actually bids to \u2014 its own target ROAS / CPA, the effective one and the level it comes from. Read it before changing any target: a campaign or portfolio change does not reach an ad group whose source is AD_GROUP",
12054
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign.bidding_strategy_type, campaign.bidding_strategy, ad_group.id, ad_group.name, ad_group.status, ad_group.target_roas, ad_group.effective_target_roas, ad_group.effective_target_roas_source, ad_group.target_cpa_micros, ad_group.effective_target_cpa_micros, ad_group.effective_target_cpa_source FROM ad_group WHERE campaign.bidding_strategy_type IN ('TARGET_ROAS', 'TARGET_CPA', 'MAXIMIZE_CONVERSION_VALUE', 'MAXIMIZE_CONVERSIONS'){statusScope} ORDER BY campaign.name LIMIT {limit}`,
12055
+ defaultDateRange: "ALL_TIME",
12056
+ defaultLimit: 200,
12057
+ statusFields: ["campaign.status", "ad_group.status"]
12058
+ },
12041
12059
  {
12042
12060
  name: "conversions-by-action",
12043
12061
  description: "Which conversion action each campaign's conversions actually are \u2014 the read that says whether two campaigns' conversion rates are measuring the same event",
@@ -41173,14 +41191,14 @@ ${describeRewrites(healed.rewrites)}
41173
41191
  const failures = e.failures.map((f) => ({ node_id: f.nodeId, message: describeFailureReason(f.reason) }));
41174
41192
  if (poster) await poster.flush(failedPayload(e.message));
41175
41193
  process.stderr.write(
41176
- `${JSON.stringify({ ok: false, error: { code: runFailureCode(e), message: e.message, failures } }, null, 2)}
41194
+ `${JSON.stringify({ ok: false, error: { code: "runtime", message: e.message, failures } }, null, 2)}
41177
41195
  `
41178
41196
  );
41179
41197
  process.exit(1);
41180
41198
  }
41181
41199
  const msg = e instanceof Error ? e.message : String(e);
41182
41200
  if (poster) await poster.flush(failedPayload(msg));
41183
- process.stderr.write(`${JSON.stringify({ ok: false, error: { code: runFailureCode(e), message: msg } }, null, 2)}
41201
+ process.stderr.write(`${JSON.stringify({ ok: false, error: { code: "runtime", message: msg } }, null, 2)}
41184
41202
  `);
41185
41203
  process.exit(1);
41186
41204
  }
@@ -44448,7 +44466,7 @@ import { defineCommand as defineCommand118 } from "citty";
44448
44466
  var validateCommand = defineCommand118({
44449
44467
  meta: {
44450
44468
  name: "validate",
44451
- description: "Validate a canvas JSON file (no execution). Includes a per-node cost preview and runs each node's deep validators (composition meta checks for hyperframe_render/_snapshot), and measures each generator prompt with its {{slots}} filled against the model's character cap (PROMPT_OVER_MODEL_LIMIT)."
44469
+ description: "Validate a canvas JSON file (no execution). Includes a per-node cost preview and runs each node's deep validators (composition meta checks for hyperframe_render/_snapshot)."
44452
44470
  },
44453
44471
  args: { file: { type: "positional", required: true, description: "Path to canvas JSON" } },
44454
44472
  async run({ args: args5 }) {