@koda-sl/baker-cli 0.354.0-dev.7687bbeae → 0.354.0-dev.85a2d7a47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -696,7 +696,7 @@ Command groups: `budgets`, `campaigns`, `ad-groups`, `keywords` (add/update/remo
696
696
 
697
697
  **Retiring a conversion action** — `status` accepts `ENABLED` and `REMOVED` only. Google denies `HIDDEN` on every conversion-action write, so to stop bidding toward an action while it keeps measuring use `--no-primary`, and to stop it counting at all use `"status": "REMOVED"`. Conversion actions **Google owns** cannot be changed at all — Smart campaign call/directions actions, the in-ad lead form's submit, YouTube subscriptions and follow-on views, Floodlight and Search Ads 360 imports, store visits, codeless webpage actions. Staging any edit to one, a rename included, is refused up front; there is no manual route either, since the Google Ads interface will not change them.
698
698
 
699
- **Reviewing the draft** — `baker ads google draft list` renders everything you've staged as a grouped campaign ▸ ad group ▸ ad tree (with non-blocking completeness advisories), the CLI counterpart to the dashboard's Google Ads tab. Pass `--json` for the raw envelope. Once the chat has published it reports the outcome instead — `published · N applied, M failed`, with a `✗` line naming each op that did not land and why — and every row reads what Google did and the status it left, `Created · Paused`, `Failed to create` or `Created · Enabled · 1 change failed` when a keyword under it did not land, where before publish it reads `Creating · Paused`. Aim for a fully built campaign — 2–4 ad groups, ≥5 keywords each, 2–4 RSAs with 8–12 headlines, ≥4 sitelinks / ≥3 callouts / ≥1 structured snippet, and ≥1 shared negative list; the advisories flag what's still thin.
699
+ **Reviewing the draft** — `baker ads google draft list` renders everything you've staged as a grouped campaign ▸ ad group ▸ ad tree (with non-blocking completeness advisories), the CLI counterpart to the dashboard's Google Ads tab. Pass `--json` for the raw envelope. Once the chat has published it reports the outcome instead — `published · N applied, M failed`, with a `✗` line naming each op that did not land and why. Aim for a fully built campaign — 2–4 ad groups, ≥5 keywords each, 2–4 RSAs with 8–12 headlines, ≥4 sitelinks / ≥3 callouts / ≥1 structured snippet, and ≥1 shared negative list; the advisories flag what's still thin.
700
700
 
701
701
  **Amending a staged op** — `draft amend <ref> (--file patch.json | --patch '<json>')` merges a JSON patch into an already-staged op's payload (objects deep-merge, `null` deletes a key, arrays/scalars replace) and re-validates it in full. Always prefer this over removing and re-staging — it preserves the op's ref (so dependents don't break) and its position in the draft. `draft show <ref>` prints the full staged payload (including warnings/annotations) so you can verify a change looks right before publish.
702
702
 
package/dist/cli.js CHANGED
@@ -3569,10 +3569,7 @@ var googleDraftStatusNodeSchema = z6.lazy(
3569
3569
  existing: z6.boolean(),
3570
3570
  collections: z6.array(googleDraftStatusCollectionSchema),
3571
3571
  children: z6.array(googleDraftStatusNodeSchema),
3572
- warnings: z6.array(z6.string()).optional(),
3573
- result: googleDraftOpResultSchema.shape.status.optional(),
3574
- foldedNotApplied: z6.object({ failed: z6.number(), skipped: z6.number() }).optional(),
3575
- status: z6.string().optional()
3572
+ warnings: z6.array(z6.string()).optional()
3576
3573
  })
3577
3574
  );
3578
3575
  var googleDraftListResponseSchema = z6.object({
@@ -5671,7 +5668,11 @@ var historyEntrySchema = z17.object({
5671
5668
  });
5672
5669
  var historyListResponseSchema = z17.object({
5673
5670
  ok: z17.literal(true),
5674
- data: z17.object({ entries: z17.array(historyEntrySchema) })
5671
+ data: z17.object({
5672
+ entries: z17.array(historyEntrySchema),
5673
+ /** The search stopped at its row budget before reading the whole window. */
5674
+ scanLimited: z17.boolean().optional()
5675
+ })
5675
5676
  });
5676
5677
 
5677
5678
  // ../api/src/hubspot.ts
@@ -11044,44 +11045,14 @@ var OPERATION_LABELS = {
11044
11045
  update: "Updating",
11045
11046
  pause: "Pausing",
11046
11047
  resume: "Resuming",
11047
- remove: "Removing",
11048
- upload: "Uploading"
11049
- };
11050
- var APPLIED_LABELS = {
11051
- create: "Created",
11052
- update: "Updated",
11053
- pause: "Paused",
11054
- resume: "Resumed",
11055
- remove: "Removed",
11056
- upload: "Uploaded"
11048
+ remove: "Removing"
11057
11049
  };
11058
- function notAppliedText(node) {
11059
- const { failed = 0, skipped = 0 } = node.foldedNotApplied ?? {};
11060
- const changes = (n) => `${n} change${n === 1 ? "" : "s"}`;
11061
- const parts = [
11062
- ...failed > 0 ? [`${changes(failed)} failed`] : [],
11063
- ...skipped > 0 ? [`${changes(skipped)} skipped`] : []
11064
- ];
11065
- return parts.length > 0 ? parts.join(", ") : void 0;
11066
- }
11067
- function outcomeBadge(node, result) {
11068
- const verb = node.operation ?? "update";
11069
- if (result === "applied") {
11070
- return node.operation ? APPLIED_LABELS[verb] ?? "Applied" : "Changes applied";
11071
- }
11072
- if (result === "simulated") {
11073
- return `Simulated (${verb})`;
11074
- }
11075
- if (result === "failed") {
11076
- return node.operation ? `Failed to ${verb}` : "Failed";
11077
- }
11078
- return "Skipped";
11079
- }
11080
11050
  function badge(node) {
11081
- const label = node.result ? outcomeBadge(node, node.result) : (node.operation ? OPERATION_LABELS[node.operation] : void 0) ?? (node.existing ? "on Google Ads" : "staged");
11082
- const parts = [label, ...node.status && node.status !== label ? [node.status] : []];
11083
- const notApplied = notAppliedText(node);
11084
- return [...parts, ...notApplied ? [notApplied] : []].join(" \xB7 ");
11051
+ const label = node.operation ? OPERATION_LABELS[node.operation] : void 0;
11052
+ if (label) {
11053
+ return label;
11054
+ }
11055
+ return node.existing ? "on Google Ads" : "staged";
11085
11056
  }
11086
11057
  function collectionLine(collection) {
11087
11058
  const parts = [];
@@ -11480,7 +11451,7 @@ var draftCommand2 = defineCommand22({
11480
11451
  list: defineCommand22({
11481
11452
  meta: {
11482
11453
  name: "list",
11483
- description: "Review everything staged as a campaign \u25B8 ad group \u25B8 ad tree, each row with its status; after publish each row says what Google did (Created / Failed to create) (--json for the raw envelope)"
11454
+ description: "Review everything staged as a campaign \u25B8 ad group \u25B8 ad tree (--json for the raw envelope)"
11484
11455
  },
11485
11456
  args: {
11486
11457
  json: { type: "boolean", description: "Print the raw JSON envelope instead of the readable tree" },
@@ -51318,6 +51289,21 @@ Full guide: __tooling__/docs/tools/baker/gsc.md`
51318
51289
 
51319
51290
  // src/commands/history/index.ts
51320
51291
  import { defineCommand as defineCommand142 } from "citty";
51292
+
51293
+ // src/commands/history/hints.ts
51294
+ function buildHistoryHints2(data) {
51295
+ if (data.entries.length > 0) {
51296
+ return data.scanLimited ? ["The search stopped before reading the whole window, so older matching changes may be missing from this list."] : [];
51297
+ }
51298
+ if (data.scanLimited) {
51299
+ return [
51300
+ "None of the most recent account changes matched, and older ones were not searched: this is not proof that nothing matching happened."
51301
+ ];
51302
+ }
51303
+ return ["No history entries matched. Widen with a larger --days or drop --category."];
51304
+ }
51305
+
51306
+ // src/commands/history/index.ts
51321
51307
  registerSchema({
51322
51308
  command: "history.list",
51323
51309
  description: "Start here: unified account history (audit log) \u2014 everything that changed on this account, newest first: publishes, chat lifecycle, backlog actions, team changes, setup links, tags, schedules, ad-platform writes, followed advertisers, media, creatives, reports, domains, and integrations. Use it to see what happened recently before planning work. Compact by default; add --full for raw metadata per entry.",
@@ -51408,10 +51394,11 @@ var listCommand15 = defineCommand142({
51408
51394
  body.full = true;
51409
51395
  }
51410
51396
  const response = await apiPost("/api/history/list", body);
51397
+ const hints2 = buildHistoryHints2(response.data);
51411
51398
  writeJson({
51412
51399
  ...response,
51413
51400
  meta: { count: response.data.entries.length },
51414
- ...response.data.entries.length === 0 ? { hints: ["No history entries matched. Widen with a larger --days or drop --category."] } : {}
51401
+ ...hints2.length > 0 ? { hints: hints2 } : {}
51415
51402
  });
51416
51403
  } catch (err) {
51417
51404
  failApi(err);