@koda-sl/baker-cli 0.24.0-dev.55a07065 → 0.25.0-dev.55a07065

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 (31) hide show
  1. package/README.md +79 -46
  2. package/dist/cli.js +1 -1
  3. package/dist/commands/ads/meta/ads.d.ts +5 -1
  4. package/dist/commands/ads/meta/ads.d.ts.map +1 -1
  5. package/dist/commands/ads/meta/ads.js +11 -8
  6. package/dist/commands/ads/meta/ads.js.map +1 -1
  7. package/dist/commands/ads/meta/adsets.d.ts +5 -1
  8. package/dist/commands/ads/meta/adsets.d.ts.map +1 -1
  9. package/dist/commands/ads/meta/adsets.js +9 -6
  10. package/dist/commands/ads/meta/adsets.js.map +1 -1
  11. package/dist/commands/ads/meta/campaigns.d.ts +5 -1
  12. package/dist/commands/ads/meta/campaigns.d.ts.map +1 -1
  13. package/dist/commands/ads/meta/campaigns.js +12 -9
  14. package/dist/commands/ads/meta/campaigns.js.map +1 -1
  15. package/dist/commands/ads/meta/index.d.ts +15 -0
  16. package/dist/commands/ads/meta/index.d.ts.map +1 -1
  17. package/dist/commands/ads/meta/index.js +36 -33
  18. package/dist/commands/ads/meta/index.js.map +1 -1
  19. package/dist/commands/ads/meta/insights.d.ts +26 -14
  20. package/dist/commands/ads/meta/insights.d.ts.map +1 -1
  21. package/dist/commands/ads/meta/insights.js +154 -78
  22. package/dist/commands/ads/meta/insights.js.map +1 -1
  23. package/dist/commands/ads/meta/presets.d.ts +23 -11
  24. package/dist/commands/ads/meta/presets.d.ts.map +1 -1
  25. package/dist/commands/ads/meta/presets.js +62 -86
  26. package/dist/commands/ads/meta/presets.js.map +1 -1
  27. package/dist/commands/ads/meta/shared.d.ts +6 -0
  28. package/dist/commands/ads/meta/shared.d.ts.map +1 -1
  29. package/dist/commands/ads/meta/shared.js +15 -0
  30. package/dist/commands/ads/meta/shared.js.map +1 -1
  31. package/package.json +1 -1
@@ -1,10 +1,14 @@
1
1
  import { defineCommand } from "citty";
2
2
  import { apiPost } from "../../../client.js";
3
3
  import { writeAdsJson, writeAdsOutput } from "../output.js";
4
- import { getPreset, listPresets } from "./presets.js";
4
+ import { composeFields, getIntent, listIntents } from "./presets.js";
5
5
  import { csvOrJson, getDateRange, handleMetaError } from "./shared.js";
6
6
  const POLL_INTERVAL_MS = 5_000;
7
7
  const POLL_MAX_MS = 10 * 60_000;
8
+ /** Default attribution windows — only these still work as of Jan 2026 (1d_view + 28d_click also valid but rarely used). */
9
+ const DEFAULT_ATTRIBUTION_WINDOWS = ["7d_click", "1d_view"];
10
+ /** Default filter — strip rows that didn't deliver. Almost always what we want. */
11
+ const DEFAULT_FILTERING = [{ field: "impressions", operator: "GREATER_THAN", value: 0 }];
8
12
  function commaSplit(input) {
9
13
  if (!input)
10
14
  return undefined;
@@ -23,21 +27,50 @@ function parseFiltering(raw) {
23
27
  handleMetaError(new Error("Invalid --filtering JSON"));
24
28
  }
25
29
  }
26
- function pickLevel(args, preset) {
27
- const level = args.level ?? preset?.level;
28
- if (!level) {
29
- handleMetaError(new Error("--level is required (account|campaign|adset|ad)"));
30
+ function pickIntent(name) {
31
+ if (!name)
32
+ return "baseline";
33
+ const found = getIntent(name);
34
+ if (!found) {
35
+ handleMetaError(new Error(`Unknown --intent: ${name}. Use --list-intents to see options.`));
30
36
  }
31
- return level;
37
+ return found.name;
32
38
  }
33
- function pickFields(fieldsArg, preset) {
34
- const fields = fieldsArg ?? preset?.fields;
35
- if (!fields || fields.length === 0) {
36
- handleMetaError(new Error("--fields is required (comma-separated, e.g. impressions,spend,ctr)"));
39
+ function pickLevel(args) {
40
+ const raw = args.level;
41
+ if (!raw)
42
+ return "account";
43
+ if (raw !== "account" && raw !== "campaign" && raw !== "adset" && raw !== "ad") {
44
+ handleMetaError(new Error("--level must be one of: account|campaign|adset|ad"));
45
+ }
46
+ return raw;
47
+ }
48
+ /**
49
+ * Auto-async heuristic. Heavy queries that would time out as sync go async
50
+ * automatically — the user shouldn't have to think about it.
51
+ *
52
+ * - level=ad with breakdowns
53
+ * - >2 breakdowns at any level
54
+ * - explicit time range > 90 days
55
+ * - level=ad over an account-level object with a wide window
56
+ */
57
+ function shouldAutoAsync(body) {
58
+ const breakdownCount = (body.breakdowns ?? []).length;
59
+ if (body.level === "ad" && breakdownCount > 0 && body.object.startsWith("act_")) {
60
+ return true;
61
+ }
62
+ if (breakdownCount > 2) {
63
+ return true;
64
+ }
65
+ if (body.since && body.until) {
66
+ const days = (Date.parse(body.until) - Date.parse(body.since)) / 86_400_000;
67
+ if (days > 90) {
68
+ return true;
69
+ }
37
70
  }
38
- return fields;
71
+ return false;
39
72
  }
40
- function applyDateRange(body, args, preset) {
73
+ function applyDateRange(body, args) {
41
74
  const range = getDateRange(args);
42
75
  if (range.datePreset)
43
76
  body.datePreset = range.datePreset;
@@ -46,29 +79,46 @@ function applyDateRange(body, args, preset) {
46
79
  if (range.until)
47
80
  body.until = range.until;
48
81
  if (!body.datePreset && !(body.since && body.until)) {
49
- body.datePreset = preset?.defaultDatePreset ?? "last_7d";
82
+ body.datePreset = "last_7d";
50
83
  }
51
84
  }
52
- function buildBodyFromArgs(args, preset) {
53
- const fieldsArg = commaSplit(args.fields);
85
+ function buildFiltering(args) {
86
+ const explicit = parseFiltering(args.filtering);
87
+ if (explicit)
88
+ return explicit;
89
+ if (args["include-undelivered"])
90
+ return undefined;
91
+ return DEFAULT_FILTERING;
92
+ }
93
+ function buildAttributionWindows(args) {
94
+ const explicit = commaSplit(args["attribution-windows"]);
95
+ if (explicit)
96
+ return explicit;
97
+ return DEFAULT_ATTRIBUTION_WINDOWS;
98
+ }
99
+ function buildBody(args) {
100
+ const intent = pickIntent(args.intent);
101
+ const level = pickLevel(args);
102
+ const intentDef = getIntent(intent);
103
+ const explicitFields = commaSplit(args.fields);
104
+ const fields = explicitFields ?? composeFields(intent, level);
54
105
  const breakdowns = commaSplit(args.breakdowns);
55
- const actionBreakdowns = commaSplit(args["action-breakdowns"]);
56
- const attributionWindows = commaSplit(args["attribution-windows"]);
106
+ const actionBreakdowns = commaSplit(args["action-breakdowns"]) ?? intentDef?.actionBreakdowns;
57
107
  const body = {
58
108
  object: args.object,
59
- level: pickLevel(args, preset),
60
- fields: pickFields(fieldsArg, preset),
109
+ level,
110
+ fields,
61
111
  timeIncrement: args["time-increment"],
62
- breakdowns: breakdowns ?? preset?.breakdowns,
63
- actionBreakdowns: actionBreakdowns ?? preset?.actionBreakdowns,
64
- filtering: parseFiltering(args.filtering),
65
- attributionWindows: attributionWindows ?? preset?.attributionWindows,
112
+ breakdowns,
113
+ actionBreakdowns,
114
+ filtering: buildFiltering(args),
115
+ attributionWindows: buildAttributionWindows(args),
66
116
  useAccountAttributionSetting: Boolean(args["use-account-attribution"]),
67
117
  useUnifiedAttributionSetting: Boolean(args["use-unified-attribution"]),
68
- limit: args.limit ? Number(args.limit) : preset?.defaultLimit,
118
+ limit: args.limit ? Number(args.limit) : 1000,
69
119
  skipCache: Boolean(args["skip-cache"]),
70
120
  };
71
- applyDateRange(body, args, preset);
121
+ applyDateRange(body, args);
72
122
  return body;
73
123
  }
74
124
  async function pollAsync(reportRunId) {
@@ -85,90 +135,116 @@ async function pollAsync(reportRunId) {
85
135
  }
86
136
  handleMetaError(new Error("Async insights polling timed out after 10 minutes"));
87
137
  }
138
+ async function runAsync(body) {
139
+ const submit = await apiPost("/api/ads/meta/insights/async", body);
140
+ process.stderr.write(`Async insights job: ${submit.reportRunId}\n`);
141
+ await pollAsync(submit.reportRunId);
142
+ return apiPost("/api/ads/meta/insights/async/result", {
143
+ reportRunId: submit.reportRunId,
144
+ fields: body.fields,
145
+ limit: body.limit,
146
+ });
147
+ }
148
+ /** Insights rows have nested `actions[]` arrays. Sort by the named action_type's value descending. */
149
+ function sortRowsBySpendDesc(rows) {
150
+ return [...rows].sort((a, b) => {
151
+ const sa = Number(a.spend ?? 0);
152
+ const sb = Number(b.spend ?? 0);
153
+ if (Number.isNaN(sa) || Number.isNaN(sb))
154
+ return 0;
155
+ return sb - sa;
156
+ });
157
+ }
88
158
  export const insightsCommand = defineCommand({
89
159
  meta: {
90
160
  name: "insights",
91
- description: `Run Meta Marketing API insights queries.
161
+ description: `Performance reporting — the main Meta tool for AI agents.
92
162
 
93
- Synchronous unless --async is set, or auto-fallback if Meta returns a "too large" error.
94
- Use presets for the marketing team's standard reports.
163
+ Smart defaults so the AI doesn't have to remember every flag:
164
+ --level account (set --level campaign|adset|ad to drill in)
165
+ --intent baseline (or revenue|funnel|ranking|video|identity)
166
+ --date-preset last_7d (override with --since/--until)
167
+ --attribution-windows 7d_click,1d_view (the only ones still working post Jan 2026)
168
+ filter: impressions > 0 (skip undelivered rows; --include-undelivered to keep)
169
+ sort: spend descending (when result fits in memory)
170
+ auto-async when query is heavy (level=ad + breakdowns, big date ranges, etc.)
95
171
 
96
- Presets (run with --preset <name>):
97
- ${listPresets()
98
- .map((p) => ` ${p.name} — ${p.description}`)
99
- .join("\n")}
172
+ Identity fields (campaign_name, ad_name etc.) are appended automatically based on --level so rows
173
+ are self-describing.
100
174
 
101
- Examples:
102
- baker ads meta insights --object act_123 --level ad --fields impressions,spend --date-preset last_7d
103
- baker ads meta insights --object 6123456 --preset campaign-performance
104
- baker ads meta insights --object act_123 --preset placement-breakdown --since 2026-01-01 --until 2026-03-31 --async
105
- baker ads meta insights --object act_123 --level ad --fields ad_id,impressions \\
106
- --filtering '[{"field":"spend","operator":"GREATER_THAN","value":0}]'`,
175
+ Examples — common AI questions:
176
+ # "How is GreenLeaf doing this week?"
177
+ baker ads meta insights --object act_123
178
+
179
+ # "Which campaigns are profitable?"
180
+ baker ads meta insights --object act_123 --level campaign --intent revenue --date-preset last_28d
181
+
182
+ # "Which creatives need a refresh?"
183
+ baker ads meta insights --object act_123 --level ad --intent ranking --date-preset last_14d
184
+
185
+ # "Where do users drop off the funnel?"
186
+ baker ads meta insights --object act_123 --intent funnel
187
+
188
+ # "Should we shift budget to Instagram?"
189
+ baker ads meta insights --object act_123 --level adset --breakdowns publisher_platform,platform_position
190
+
191
+ # Custom field set (escape hatch)
192
+ baker ads meta insights --object act_123 --fields impressions,spend,actions
193
+
194
+ Async is automatic for heavy queries; pass --async to force it, or --no-async to refuse fallback.`,
107
195
  },
108
196
  args: {
109
197
  object: {
110
198
  type: "string",
111
- description: "Object ID — act_<id> for account, or campaign/adset/ad ID",
199
+ description: "Object ID — act_<id> for account, or a campaign/adset/ad ID",
112
200
  required: true,
113
201
  },
114
- level: { type: "string", description: "account|campaign|adset|ad" },
115
- fields: { type: "string", description: "Comma-separated fields list" },
116
- preset: { type: "string", description: "Insights preset name" },
117
- "list-presets": { type: "boolean", description: "List available presets and exit" },
202
+ level: { type: "string", description: "account|campaign|adset|ad (default: account)" },
203
+ intent: { type: "string", description: "baseline|revenue|funnel|ranking|video|identity (default: baseline)" },
204
+ fields: { type: "string", description: "Comma-separated field list (overrides --intent bundle)" },
205
+ "list-intents": { type: "boolean", description: "Print available intents and exit" },
118
206
  "date-preset": { type: "string", description: "Meta date preset (last_7d, last_28d, today, ...)" },
119
207
  since: { type: "string", description: "Custom start date YYYY-MM-DD" },
120
208
  until: { type: "string", description: "Custom end date YYYY-MM-DD" },
121
209
  "time-increment": { type: "string", description: "1 (day) | monthly | all_days" },
122
- breakdowns: { type: "string", description: "Comma-separated breakdowns" },
123
- "action-breakdowns": { type: "string", description: "Comma-separated action_breakdowns" },
124
- filtering: { type: "string", description: "JSON array of {field,operator,value}" },
210
+ breakdowns: { type: "string", description: "Comma-separated breakdowns (e.g. publisher_platform,age)" },
211
+ "action-breakdowns": {
212
+ type: "string",
213
+ description: "Slice the actions[] array (default: action_type for revenue/funnel)",
214
+ },
215
+ filtering: { type: "string", description: "Override default filter — JSON array of {field,operator,value}" },
216
+ "include-undelivered": { type: "boolean", description: "Keep rows where impressions=0 (off by default)" },
125
217
  "attribution-windows": {
126
218
  type: "string",
127
- description: "Comma-separated. Only 1d_view, 1d_click, 7d_click, 28d_click work as of Jan 2026",
219
+ description: "Override default 7d_click,1d_view (only 1d_view, 1d_click, 7d_click, 28d_click work post Jan 2026)",
128
220
  },
129
221
  "use-account-attribution": { type: "boolean", description: "Use account-saved attribution setting" },
130
222
  "use-unified-attribution": { type: "boolean", description: "Use ad-set unified attribution setting" },
131
- limit: { type: "string", description: "Max rows (default per preset)" },
132
- async: { type: "boolean", description: "Submit as async job, poll, then dump results" },
223
+ limit: { type: "string", description: "Max rows (default 1000)" },
224
+ async: { type: "boolean", description: "Force async submit-and-poll path" },
225
+ "no-async": { type: "boolean", description: "Refuse the auto-async fallback for heavy queries" },
226
+ "no-sort": { type: "boolean", description: "Skip default spend-desc sort" },
133
227
  "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
134
228
  output: { type: "string", description: "Output format", default: "json" },
135
229
  },
136
230
  run: async ({ args }) => {
137
- if (args["list-presets"]) {
138
- writeAdsJson({ ok: true, data: listPresets() });
231
+ if (args["list-intents"]) {
232
+ writeAdsJson({ ok: true, data: listIntents() });
139
233
  return;
140
234
  }
141
- const presetName = args.preset;
142
- const preset = presetName ? getPreset(presetName) : undefined;
143
- if (presetName && !preset) {
144
- handleMetaError(new Error(`Unknown preset: ${presetName}. Use --list-presets.`));
145
- }
146
- const body = buildBodyFromArgs(args, preset);
235
+ const body = buildBody(args);
236
+ const fmt = csvOrJson(args);
237
+ const wantAsync = Boolean(args.async) || (!args["no-async"] && shouldAutoAsync(body));
147
238
  try {
148
- if (args.async) {
149
- const submit = await apiPost("/api/ads/meta/insights/async", body);
150
- process.stderr.write(`Submitted async insights job: ${submit.reportRunId}\n`);
151
- await pollAsync(submit.reportRunId);
152
- const result = await apiPost("/api/ads/meta/insights/async/result", {
153
- reportRunId: submit.reportRunId,
154
- fields: body.fields,
155
- limit: body.limit,
156
- });
157
- const fmt = csvOrJson(args);
158
- if (fmt !== "json") {
159
- writeAdsOutput(result, fmt, body.fields);
160
- return;
161
- }
162
- writeAdsJson({ ok: true, data: result });
163
- return;
164
- }
165
- const data = await apiPost("/api/ads/meta/insights", body);
166
- const fmt = csvOrJson(args);
239
+ const rows = wantAsync
240
+ ? await runAsync(body)
241
+ : await apiPost("/api/ads/meta/insights", body);
242
+ const sorted = args["no-sort"] ? rows : sortRowsBySpendDesc(rows);
167
243
  if (fmt !== "json") {
168
- writeAdsOutput(data, fmt, body.fields);
244
+ writeAdsOutput(sorted, fmt, body.fields);
169
245
  return;
170
246
  }
171
- writeAdsJson({ ok: true, data });
247
+ writeAdsJson({ ok: true, data: sorted });
172
248
  }
173
249
  catch (err) {
174
250
  handleMetaError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../../../src/commands/ads/meta/insights.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../../../src/commands/ads/meta/insights.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,30 @@
1
1
  /**
2
- * Meta-native insights presets. Names + fields chosen for our marketing team's
3
- * review workflows not parity-aligned with the Google Ads presets.
2
+ * Insights field bundles. Picked for AI agent ergonomics: small, focused field
3
+ * lists that answer one specific question without forcing the AI to enumerate
4
+ * Meta's 500+ insights fields.
5
+ *
6
+ * Two-axis design:
7
+ * --intent (field bundle, default: baseline) — what data to ask for
8
+ * --level (object granularity, default: account) — at what granularity
9
+ *
10
+ * Intents are independent of level — pass `--intent ranking --level ad` to flag
11
+ * creatives, or `--intent revenue --level campaign` for ROAS by campaign.
12
+ *
13
+ * Identity fields (campaign_name etc.) are appended automatically based on
14
+ * level so the AI can read rows without joining.
4
15
  */
5
- export interface MetaInsightsPreset {
6
- name: string;
16
+ export type InsightsLevel = "account" | "campaign" | "adset" | "ad";
17
+ export type InsightsIntent = "baseline" | "revenue" | "funnel" | "ranking" | "video" | "identity";
18
+ interface IntentDefinition {
19
+ name: InsightsIntent;
7
20
  description: string;
8
- level: "account" | "campaign" | "adset" | "ad";
9
21
  fields: string[];
10
- breakdowns?: string[];
22
+ /** Action breakdowns to slice the actions[] array — empty if not needed. */
11
23
  actionBreakdowns?: string[];
12
- attributionWindows?: string[];
13
- defaultDatePreset: string;
14
- defaultLimit: number;
15
24
  }
16
- export declare function getPreset(name: string): MetaInsightsPreset | undefined;
17
- export declare function listPresets(): MetaInsightsPreset[];
25
+ /** Compose final field list: intent metrics + level-specific identity fields, deduplicated. */
26
+ export declare function composeFields(intent: InsightsIntent, level: InsightsLevel): string[];
27
+ export declare function getIntent(name: string): IntentDefinition | undefined;
28
+ export declare function listIntents(): IntentDefinition[];
29
+ export {};
18
30
  //# sourceMappingURL=presets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/meta/presets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAsGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEtE;AAED,wBAAgB,WAAW,IAAI,kBAAkB,EAAE,CAElD"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/meta/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC;AAEpE,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAElG,UAAU,gBAAgB;IACxB,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAsDD,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,EAAE,CAYpF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEpE;AAED,wBAAgB,WAAW,IAAI,gBAAgB,EAAE,CAEhD"}
@@ -1,92 +1,45 @@
1
1
  /**
2
- * Meta-native insights presets. Names + fields chosen for our marketing team's
3
- * review workflows not parity-aligned with the Google Ads presets.
2
+ * Insights field bundles. Picked for AI agent ergonomics: small, focused field
3
+ * lists that answer one specific question without forcing the AI to enumerate
4
+ * Meta's 500+ insights fields.
5
+ *
6
+ * Two-axis design:
7
+ * --intent (field bundle, default: baseline) — what data to ask for
8
+ * --level (object granularity, default: account) — at what granularity
9
+ *
10
+ * Intents are independent of level — pass `--intent ranking --level ad` to flag
11
+ * creatives, or `--intent revenue --level campaign` for ROAS by campaign.
12
+ *
13
+ * Identity fields (campaign_name etc.) are appended automatically based on
14
+ * level so the AI can read rows without joining.
4
15
  */
5
- const META_INSIGHTS_PRESETS = {
6
- "campaign-performance": {
7
- name: "campaign-performance",
8
- description: "Per-campaign spend, ROAS, and purchase metrics over the last 7 days.",
9
- level: "campaign",
10
- fields: [
11
- "campaign_id",
12
- "campaign_name",
13
- "objective",
14
- "impressions",
15
- "spend",
16
- "clicks",
17
- "ctr",
18
- "cpc",
19
- "actions",
20
- "action_values",
21
- "purchase_roas",
22
- ],
23
- actionBreakdowns: ["action_type"],
24
- defaultDatePreset: "last_7d",
25
- defaultLimit: 1000,
16
+ const INSIGHTS_INTENTS = {
17
+ baseline: {
18
+ name: "baseline",
19
+ description: "Spend, impressions, clicks, CTR, CPC, CPM. The default question: 'how is delivery?'",
20
+ fields: ["impressions", "reach", "frequency", "spend", "clicks", "ctr", "cpc", "cpm"],
26
21
  },
27
- "creative-performance": {
28
- name: "creative-performance",
29
- description: "Per-ad ranking + delivery quality. Use to flag creatives for refresh.",
30
- level: "ad",
31
- fields: [
32
- "ad_id",
33
- "ad_name",
34
- "campaign_name",
35
- "adset_name",
36
- "impressions",
37
- "spend",
38
- "ctr",
39
- "cpc",
40
- "quality_ranking",
41
- "engagement_rate_ranking",
42
- "conversion_rate_ranking",
43
- ],
44
- defaultDatePreset: "last_7d",
45
- defaultLimit: 2000,
46
- },
47
- "placement-breakdown": {
48
- name: "placement-breakdown",
49
- description: "Spend & CPM by Facebook/Instagram placement and device.",
50
- level: "adset",
51
- fields: ["adset_id", "adset_name", "impressions", "spend", "ctr", "cpm", "actions"],
52
- breakdowns: ["publisher_platform", "platform_position", "impression_device"],
53
- defaultDatePreset: "last_14d",
54
- defaultLimit: 5000,
55
- },
56
- "device-breakdown": {
57
- name: "device-breakdown",
58
- description: "Conversion performance by device + OS.",
59
- level: "ad",
60
- fields: ["ad_id", "ad_name", "impressions", "clicks", "spend", "actions", "purchase_roas"],
61
- breakdowns: ["device_platform", "impression_device"],
62
- defaultDatePreset: "last_7d",
63
- defaultLimit: 5000,
64
- },
65
- "audience-breakdown": {
66
- name: "audience-breakdown",
67
- description: "Demographic split (age/gender/country) at adset level.",
68
- level: "adset",
69
- fields: ["adset_id", "adset_name", "impressions", "spend", "actions"],
70
- breakdowns: ["age", "gender", "country"],
71
- defaultDatePreset: "last_28d",
72
- defaultLimit: 10000,
22
+ revenue: {
23
+ name: "revenue",
24
+ description: "Spend, conversions, action_values, purchase_roas. 'How much money are we making?'",
25
+ fields: ["spend", "actions", "action_values", "conversions", "conversion_values", "purchase_roas"],
26
+ actionBreakdowns: ["action_type"],
73
27
  },
74
28
  funnel: {
75
29
  name: "funnel",
76
- description: "Impression → click → landing page view lead/purchase funnel.",
77
- level: "ad",
78
- fields: ["ad_id", "ad_name", "impressions", "clicks", "inline_link_clicks", "actions", "action_values", "spend"],
30
+ description: "Impression → click → landing page → action. 'Where do users drop off?'",
31
+ fields: ["impressions", "clicks", "inline_link_clicks", "outbound_clicks", "actions", "spend"],
79
32
  actionBreakdowns: ["action_type"],
80
- defaultDatePreset: "last_7d",
81
- defaultLimit: 2000,
82
33
  },
83
- "video-performance": {
84
- name: "video-performance",
85
- description: "Video watch funnel and per-thruplay cost.",
86
- level: "ad",
34
+ ranking: {
35
+ name: "ranking",
36
+ description: "Quality, engagement, conversion-rate rankings. 'Which creatives need a refresh?'",
37
+ fields: ["impressions", "spend", "ctr", "quality_ranking", "engagement_rate_ranking", "conversion_rate_ranking"],
38
+ },
39
+ video: {
40
+ name: "video",
41
+ description: "Watch funnel, thruplay cost. 'How are video creatives holding attention?'",
87
42
  fields: [
88
- "ad_id",
89
- "ad_name",
90
43
  "impressions",
91
44
  "spend",
92
45
  "video_play_actions",
@@ -97,14 +50,37 @@ const META_INSIGHTS_PRESETS = {
97
50
  "video_thruplay_watched_actions",
98
51
  "cost_per_thruplay",
99
52
  ],
100
- defaultDatePreset: "last_14d",
101
- defaultLimit: 2000,
53
+ },
54
+ identity: {
55
+ name: "identity",
56
+ description: "Just the names + spend — for cheap roll-up summaries.",
57
+ fields: ["spend", "impressions"],
102
58
  },
103
59
  };
104
- export function getPreset(name) {
105
- return META_INSIGHTS_PRESETS[name];
60
+ const IDENTITY_FIELDS_BY_LEVEL = {
61
+ account: ["account_id", "account_name", "account_currency"],
62
+ campaign: ["campaign_id", "campaign_name", "objective"],
63
+ adset: ["adset_id", "adset_name", "campaign_id", "campaign_name"],
64
+ ad: ["ad_id", "ad_name", "adset_id", "adset_name", "campaign_id", "campaign_name"],
65
+ };
66
+ /** Compose final field list: intent metrics + level-specific identity fields, deduplicated. */
67
+ export function composeFields(intent, level) {
68
+ const intentFields = INSIGHTS_INTENTS[intent].fields;
69
+ const identity = IDENTITY_FIELDS_BY_LEVEL[level];
70
+ const seen = new Set();
71
+ const out = [];
72
+ for (const f of [...identity, ...intentFields]) {
73
+ if (!seen.has(f)) {
74
+ seen.add(f);
75
+ out.push(f);
76
+ }
77
+ }
78
+ return out;
79
+ }
80
+ export function getIntent(name) {
81
+ return INSIGHTS_INTENTS[name];
106
82
  }
107
- export function listPresets() {
108
- return Object.values(META_INSIGHTS_PRESETS);
83
+ export function listIntents() {
84
+ return Object.values(INSIGHTS_INTENTS);
109
85
  }
110
86
  //# sourceMappingURL=presets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../../src/commands/ads/meta/presets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../../src/commands/ads/meta/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,MAAM,gBAAgB,GAA6C;IACjE,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,qFAAqF;QAClG,MAAM,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACtF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,mFAAmF;QAChG,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,CAAC;QAClG,gBAAgB,EAAE,CAAC,aAAa,CAAC;KAClC;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wEAAwE;QACrF,MAAM,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,CAAC;QAC9F,gBAAgB,EAAE,CAAC,aAAa,CAAC;KAClC;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,kFAAkF;QAC/F,MAAM,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,yBAAyB,CAAC;KACjH;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,2EAA2E;QACxF,MAAM,EAAE;YACN,aAAa;YACb,OAAO;YACP,oBAAoB;YACpB,2BAA2B;YAC3B,2BAA2B;YAC3B,2BAA2B;YAC3B,4BAA4B;YAC5B,gCAAgC;YAChC,mBAAmB;SACpB;KACF;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,uDAAuD;QACpE,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;KACjC;CACF,CAAC;AAEF,MAAM,wBAAwB,GAAoC;IAChE,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,kBAAkB,CAAC;IAC3D,QAAQ,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,WAAW,CAAC;IACvD,KAAK,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC;IACjE,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC;CACnF,CAAC;AAEF,+FAA+F;AAC/F,MAAM,UAAU,aAAa,CAAC,MAAsB,EAAE,KAAoB;IACxE,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,gBAAgB,CAAC,IAAsB,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACzC,CAAC"}
@@ -9,4 +9,10 @@ export declare function getDateRange(args: Record<string, unknown>): {
9
9
  export declare function todayIso(): string;
10
10
  export declare function daysAgoIso(days: number): string;
11
11
  export declare function csvOrJson(args: Record<string, unknown>): string;
12
+ /**
13
+ * Default to ACTIVE-only on listings — that's almost always what an AI agent or
14
+ * a human glance wants. Pass `--effective-status ACTIVE,PAUSED` to override, or
15
+ * `--all-statuses` to drop the filter entirely.
16
+ */
17
+ export declare function resolveEffectiveStatus(args: Record<string, unknown>): string | undefined;
12
18
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/meta/shared.ts"],"names":[],"mappings":"AAQA,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAmBnD;AAED,qGAAqG;AACrG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAczE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAMnH;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAE/D"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/meta/shared.ts"],"names":[],"mappings":"AAQA,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAmBnD;AAED,qGAAqG;AACrG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAczE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAMnH;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CASxF"}