@canonry/canonry 7.83.0 → 7.83.2

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.
@@ -27,14 +27,14 @@ import {
27
27
  resolveConfiguredAgentProvider,
28
28
  resolveSessionProviderAndModel,
29
29
  setAeroSystemPrompt
30
- } from "./chunk-4PPF3SIU.js";
30
+ } from "./chunk-QHUCHZA3.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-4XM3T65L.js";
37
+ } from "./chunk-4D2QHIRS.js";
38
38
  import {
39
39
  getGoogleAuthConfig,
40
40
  getGoogleConnection,
@@ -161,7 +161,7 @@ import {
161
161
  } from "./chunk-HGMYEDAQ.js";
162
162
  import {
163
163
  IntelligenceService
164
- } from "./chunk-JECDHS6M.js";
164
+ } from "./chunk-UGUON7IK.js";
165
165
  import {
166
166
  addLogListener,
167
167
  createFastifyLogger,
@@ -291,7 +291,7 @@ import {
291
291
  webhookResponseReason,
292
292
  webhookTargetRefusalReason,
293
293
  writeAuditLog
294
- } from "./chunk-OIHR2BDK.js";
294
+ } from "./chunk-5AGYH5PX.js";
295
295
  import {
296
296
  OperationalLogStore,
297
297
  SentimentIdempotencyConflict,
@@ -5939,7 +5939,7 @@ function nonBlank(value) {
5939
5939
  return trimmed ? trimmed : void 0;
5940
5940
  }
5941
5941
  function resolveBuildCommit(env = process.env) {
5942
- const embedded = true ? "422c745a4356201c9edcd13c64e567ce2d8afe73" : void 0;
5942
+ const embedded = true ? "75364de8747fc957bbcd4ff16a1eceffda2cf9dd" : void 0;
5943
5943
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5944
5944
  }
5945
5945
  function resolveInstanceIdentity(env = process.env) {
@@ -5,7 +5,7 @@ import {
5
5
  isStoredPageReadTool,
6
6
  isStoredReadTool,
7
7
  truncateToolResult
8
- } from "./chunk-4XM3T65L.js";
8
+ } from "./chunk-4D2QHIRS.js";
9
9
  import {
10
10
  CANONRY_MCP_TOOLKITS,
11
11
  resolveAeroSkillDir
@@ -17,7 +17,7 @@ import {
17
17
  mergeGscQueryTotalsWithFallback,
18
18
  readGscQueryDailyRows,
19
19
  readLatestGscDataDate
20
- } from "./chunk-OIHR2BDK.js";
20
+ } from "./chunk-5AGYH5PX.js";
21
21
  import {
22
22
  competitors,
23
23
  gbpDailyMetrics,
@@ -727,7 +727,7 @@ var DEMO_CLI_COMMANDS = [{
727
727
  options: { host: stringOption(), port: stringOption(), "trust-proxy": multiStringOption() },
728
728
  allowPositionals: false,
729
729
  run: async (input) => {
730
- const { demoCommand } = await import("./demo-KD2SLCIP.js");
730
+ const { demoCommand } = await import("./demo-DIP5JBEI.js");
731
731
  await demoCommand({
732
732
  host: getString(input.values, "host"),
733
733
  port: getString(input.values, "port"),
@@ -748,7 +748,7 @@ var BACKFILL_CLI_COMMANDS = [
748
748
  allowPositionals: false,
749
749
  supportsDryRun: true,
750
750
  run: async (input) => {
751
- const { backfillAnswerVisibilityCommand } = await import("./backfill-NMHO3AIW.js");
751
+ const { backfillAnswerVisibilityCommand } = await import("./backfill-PZBLCRPI.js");
752
752
  await backfillAnswerVisibilityCommand({
753
753
  project: getString(input.values, "project"),
754
754
  dryRun: input.dryRun,
@@ -765,7 +765,7 @@ var BACKFILL_CLI_COMMANDS = [
765
765
  allowPositionals: false,
766
766
  supportsDryRun: true,
767
767
  run: async (input) => {
768
- const { backfillAnswerMentionsCommand } = await import("./backfill-NMHO3AIW.js");
768
+ const { backfillAnswerMentionsCommand } = await import("./backfill-PZBLCRPI.js");
769
769
  await backfillAnswerMentionsCommand({
770
770
  project: getString(input.values, "project"),
771
771
  dryRun: input.dryRun,
@@ -783,7 +783,7 @@ var BACKFILL_CLI_COMMANDS = [
783
783
  },
784
784
  supportsDryRun: true,
785
785
  run: async (input) => {
786
- const { backfillInsightsCommand } = await import("./backfill-NMHO3AIW.js");
786
+ const { backfillInsightsCommand } = await import("./backfill-PZBLCRPI.js");
787
787
  const usage = "canonry backfill insights <project> [--from-run <id>] [--to-run <id>] [--since <date>] [--dry-run] [--format json]";
788
788
  const project3 = requireProject(input, "backfill insights", usage);
789
789
  await backfillInsightsCommand(project3, {
@@ -803,7 +803,7 @@ var BACKFILL_CLI_COMMANDS = [
803
803
  },
804
804
  allowPositionals: false,
805
805
  run: async (input) => {
806
- const { backfillNormalizedPathsCommand } = await import("./backfill-NMHO3AIW.js");
806
+ const { backfillNormalizedPathsCommand } = await import("./backfill-PZBLCRPI.js");
807
807
  await backfillNormalizedPathsCommand({
808
808
  project: getString(input.values, "project"),
809
809
  format: input.format
@@ -818,7 +818,7 @@ var BACKFILL_CLI_COMMANDS = [
818
818
  },
819
819
  allowPositionals: false,
820
820
  run: async (input) => {
821
- const { backfillAiReferralPathsCommand } = await import("./backfill-NMHO3AIW.js");
821
+ const { backfillAiReferralPathsCommand } = await import("./backfill-PZBLCRPI.js");
822
822
  await backfillAiReferralPathsCommand({
823
823
  project: getString(input.values, "project"),
824
824
  format: input.format
@@ -830,7 +830,7 @@ var BACKFILL_CLI_COMMANDS = [
830
830
  usage: "canonry backfill snapshot-attribution <project> [--dry-run] [--format json]",
831
831
  supportsDryRun: true,
832
832
  run: async (input) => {
833
- const { backfillSnapshotAttributionCommand } = await import("./backfill-NMHO3AIW.js");
833
+ const { backfillSnapshotAttributionCommand } = await import("./backfill-PZBLCRPI.js");
834
834
  const usage = "canonry backfill snapshot-attribution <project> [--dry-run] [--format json]";
835
835
  const project3 = requireProject(input, "backfill snapshot-attribution", usage);
836
836
  await backfillSnapshotAttributionCommand({
@@ -849,7 +849,7 @@ var BACKFILL_CLI_COMMANDS = [
849
849
  allowPositionals: false,
850
850
  supportsDryRun: true,
851
851
  run: async (input) => {
852
- const { backfillTrafficClassificationCommand } = await import("./backfill-NMHO3AIW.js");
852
+ const { backfillTrafficClassificationCommand } = await import("./backfill-PZBLCRPI.js");
853
853
  await backfillTrafficClassificationCommand({
854
854
  project: getString(input.values, "project"),
855
855
  dryRun: input.dryRun,
@@ -1291,7 +1291,7 @@ var DASHBOARD_CLI_COMMANDS = [
1291
1291
  usage: "canonry dashboard reset-password [--format json]",
1292
1292
  help: "Clears the dashboard password from config.yaml, so the dashboard asks for a new one after a restart.\nLocal only: it edits the config file under CANONRY_CONFIG_DIR and does not call the server.",
1293
1293
  run: async (input) => {
1294
- const { resetDashboardPassword } = await import("./dashboard-72QZZ5Q6.js");
1294
+ const { resetDashboardPassword } = await import("./dashboard-SMI6A6OF.js");
1295
1295
  await resetDashboardPassword({ format: input.format });
1296
1296
  }
1297
1297
  },
@@ -3285,7 +3285,7 @@ var TRAFFIC_CLI_COMMANDS = [
3285
3285
  help: "Complete stored traffic totals and breakdowns for the selected window. Project-wide for Simple and Advanced portfolios; no provider calls or sync.",
3286
3286
  options: { period: stringOption() },
3287
3287
  run: async (input) => {
3288
- const { trafficAnalytics } = await import("./traffic-ZJHB2TWF.js");
3288
+ const { trafficAnalytics } = await import("./traffic-CE47IFFI.js");
3289
3289
  const project3 = requireProject(input, "traffic.analytics", "canonry traffic analytics <project> [--period 7|14|30|90]");
3290
3290
  await trafficAnalytics(project3, { period: getString(input.values, "window") ?? getString(input.values, "period"), format: input.format });
3291
3291
  }
@@ -3297,7 +3297,7 @@ var TRAFFIC_CLI_COMMANDS = [
3297
3297
  help: "DB-only diagnostic. Raw headlines stay unchanged. Candidate bursts are not confirmed automation; adjusted counts are estimates. Property, Target and market attribution are unavailable. The observed GA quotient has unknown comparable coverage.",
3298
3298
  options: { "start-date": stringOption(), "end-date": stringOption(), source: stringOption(), "burst-threshold": stringOption(), "ratio-threshold": stringOption(), limit: stringOption() },
3299
3299
  run: async (input) => {
3300
- const { trafficReferralAssessment } = await import("./traffic-ZJHB2TWF.js");
3300
+ const { trafficReferralAssessment } = await import("./traffic-CE47IFFI.js");
3301
3301
  const project3 = requireProject(input, "traffic.referral-assessment", "canonry traffic referral-assessment <project> --start-date YYYY-MM-DD --end-date YYYY-MM-DD");
3302
3302
  await trafficReferralAssessment(project3, {
3303
3303
  startDate: getString(input.values, "start") ?? getString(input.values, "start-date"),
@@ -3330,7 +3330,7 @@ var TRAFFIC_CLI_COMMANDS = [
3330
3330
  "confirm-fail-open": { type: "boolean" }
3331
3331
  },
3332
3332
  run: async (input) => {
3333
- const { trafficConnectCloudflare, DEFAULT_CLOUDFLARE_QUEUE_RETENTION_SECONDS } = await import("./traffic-ZJHB2TWF.js");
3333
+ const { trafficConnectCloudflare, DEFAULT_CLOUDFLARE_QUEUE_RETENTION_SECONDS } = await import("./traffic-CE47IFFI.js");
3334
3334
  const forwardPageViews = getBoolean(input.values, "forward-page-views");
3335
3335
  const noForwardPageViews = getBoolean(input.values, "no-forward-page-views");
3336
3336
  if (forwardPageViews && noForwardPageViews) {
@@ -3383,7 +3383,7 @@ var TRAFFIC_CLI_COMMANDS = [
3383
3383
  "display-name": stringOption()
3384
3384
  },
3385
3385
  run: async (input) => {
3386
- const { trafficConnectCloudRun } = await import("./traffic-ZJHB2TWF.js");
3386
+ const { trafficConnectCloudRun } = await import("./traffic-CE47IFFI.js");
3387
3387
  const project3 = requireProject(
3388
3388
  input,
3389
3389
  "traffic.connect.cloud-run",
@@ -3414,7 +3414,7 @@ var TRAFFIC_CLI_COMMANDS = [
3414
3414
  "display-name": stringOption()
3415
3415
  },
3416
3416
  run: async (input) => {
3417
- const { trafficConnectWordpress } = await import("./traffic-ZJHB2TWF.js");
3417
+ const { trafficConnectWordpress } = await import("./traffic-CE47IFFI.js");
3418
3418
  const project3 = requireProject(
3419
3419
  input,
3420
3420
  "traffic.connect.wordpress",
@@ -3446,7 +3446,7 @@ var TRAFFIC_CLI_COMMANDS = [
3446
3446
  "display-name": stringOption()
3447
3447
  },
3448
3448
  run: async (input) => {
3449
- const { trafficConnectVercel } = await import("./traffic-ZJHB2TWF.js");
3449
+ const { trafficConnectVercel } = await import("./traffic-CE47IFFI.js");
3450
3450
  const project3 = requireProject(
3451
3451
  input,
3452
3452
  "traffic.connect.vercel",
@@ -3485,7 +3485,7 @@ var TRAFFIC_CLI_COMMANDS = [
3485
3485
  source: stringOption()
3486
3486
  },
3487
3487
  run: async (input) => {
3488
- const { trafficActivate } = await import("./traffic-ZJHB2TWF.js");
3488
+ const { trafficActivate } = await import("./traffic-CE47IFFI.js");
3489
3489
  const project3 = requireProject(
3490
3490
  input,
3491
3491
  "traffic.activate",
@@ -3504,7 +3504,7 @@ var TRAFFIC_CLI_COMMANDS = [
3504
3504
  "since-minutes": stringOption()
3505
3505
  },
3506
3506
  run: async (input) => {
3507
- const { trafficSync } = await import("./traffic-ZJHB2TWF.js");
3507
+ const { trafficSync } = await import("./traffic-CE47IFFI.js");
3508
3508
  const project3 = requireProject(
3509
3509
  input,
3510
3510
  "traffic.sync",
@@ -3533,7 +3533,7 @@ var TRAFFIC_CLI_COMMANDS = [
3533
3533
  wait: { type: "boolean" }
3534
3534
  },
3535
3535
  run: async (input) => {
3536
- const { trafficBackfill } = await import("./traffic-ZJHB2TWF.js");
3536
+ const { trafficBackfill } = await import("./traffic-CE47IFFI.js");
3537
3537
  const project3 = requireProject(
3538
3538
  input,
3539
3539
  "traffic.backfill",
@@ -3562,7 +3562,7 @@ var TRAFFIC_CLI_COMMANDS = [
3562
3562
  "advance-to-now": { type: "boolean" }
3563
3563
  },
3564
3564
  run: async (input) => {
3565
- const { trafficReset } = await import("./traffic-ZJHB2TWF.js");
3565
+ const { trafficReset } = await import("./traffic-CE47IFFI.js");
3566
3566
  const project3 = requireProject(
3567
3567
  input,
3568
3568
  "traffic.reset",
@@ -3584,7 +3584,7 @@ var TRAFFIC_CLI_COMMANDS = [
3584
3584
  source: stringOption()
3585
3585
  },
3586
3586
  run: async (input) => {
3587
- const { trafficDeclareGap } = await import("./traffic-ZJHB2TWF.js");
3587
+ const { trafficDeclareGap } = await import("./traffic-CE47IFFI.js");
3588
3588
  const project3 = requireProject(
3589
3589
  input,
3590
3590
  "traffic.declare-gap",
@@ -3599,7 +3599,7 @@ var TRAFFIC_CLI_COMMANDS = [
3599
3599
  path: ["traffic", "sources"],
3600
3600
  usage: "canonry traffic sources <project> [--format json]",
3601
3601
  run: async (input) => {
3602
- const { trafficSources } = await import("./traffic-ZJHB2TWF.js");
3602
+ const { trafficSources } = await import("./traffic-CE47IFFI.js");
3603
3603
  const project3 = requireProject(
3604
3604
  input,
3605
3605
  "traffic.sources",
@@ -3612,7 +3612,7 @@ var TRAFFIC_CLI_COMMANDS = [
3612
3612
  path: ["traffic", "status"],
3613
3613
  usage: "canonry traffic status <project> [--format json]",
3614
3614
  run: async (input) => {
3615
- const { trafficStatus } = await import("./traffic-ZJHB2TWF.js");
3615
+ const { trafficStatus } = await import("./traffic-CE47IFFI.js");
3616
3616
  const project3 = requireProject(
3617
3617
  input,
3618
3618
  "traffic.status",
@@ -3627,7 +3627,7 @@ var TRAFFIC_CLI_COMMANDS = [
3627
3627
  help: "Stored sampled tail with 30-day retention, not visits. Unknown traffic is excluded by default. No provider calls.",
3628
3628
  options: { kind: stringOption(), source: stringOption(), since: stringOption(), until: stringOption(), "since-minutes": stringOption(), path: stringOption(), limit: stringOption(), offset: stringOption() },
3629
3629
  run: async (input) => {
3630
- const { trafficSamples } = await import("./traffic-ZJHB2TWF.js");
3630
+ const { trafficSamples } = await import("./traffic-CE47IFFI.js");
3631
3631
  const project3 = requireProject(input, "traffic.samples", "canonry traffic samples <project>");
3632
3632
  const integer = (name) => parseIntegerOption(input, name, { command: "traffic.samples", usage: "canonry traffic samples <project>", message: `--${name} must be an integer` });
3633
3633
  await trafficSamples(project3, { kind: getString(input.values, "kind"), sourceId: getString(input.values, "source"), since: getString(input.values, "since"), until: getString(input.values, "until"), sinceMinutes: integer("since-minutes"), path: getString(input.values, "path"), limit: integer("limit"), offset: integer("offset"), format: input.format });
@@ -3639,7 +3639,7 @@ var TRAFFIC_CLI_COMMANDS = [
3639
3639
  help: "Bots and agents no rule recognizes yet, by the name in their user agent, busiest first. Default window: last 30 days. Stored rows only, no provider calls.",
3640
3640
  options: { source: stringOption(), since: stringOption(), until: stringOption(), limit: stringOption() },
3641
3641
  run: async (input) => {
3642
- const { trafficUnrecognized } = await import("./traffic-ZJHB2TWF.js");
3642
+ const { trafficUnrecognized } = await import("./traffic-CE47IFFI.js");
3643
3643
  const project3 = requireProject(input, "traffic.unrecognized", "canonry traffic unrecognized <project>");
3644
3644
  const limit = parseIntegerOption(input, "limit", { command: "traffic.unrecognized", usage: "canonry traffic unrecognized <project>", message: "--limit must be an integer" });
3645
3645
  await trafficUnrecognized(project3, { sourceId: getString(input.values, "source"), since: getString(input.values, "since"), until: getString(input.values, "until"), limit, format: input.format });
@@ -3658,7 +3658,7 @@ var TRAFFIC_CLI_COMMANDS = [
3658
3658
  granularity: stringOption()
3659
3659
  },
3660
3660
  run: async (input) => {
3661
- const { trafficEvents } = await import("./traffic-ZJHB2TWF.js");
3661
+ const { trafficEvents } = await import("./traffic-CE47IFFI.js");
3662
3662
  const project3 = requireProject(
3663
3663
  input,
3664
3664
  "traffic.events",
@@ -6929,7 +6929,7 @@ var SYSTEM_CLI_COMMANDS = [
6929
6929
  options: { access: stringOption() },
6930
6930
  run: async (input) => {
6931
6931
  if (input.positionals.length > 1) throw usageError("Expected at most one command group");
6932
- const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-IKF4A7ZS.js"), import("./cli-commands-7UXIHESS.js")]);
6932
+ const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-IKF4A7ZS.js"), import("./cli-commands-KNMPQFQO.js")]);
6933
6933
  printCliCatalog(REGISTERED_CLI_COMMANDS2, input.format, input.positionals[0], getString(input.values, "access"));
6934
6934
  }
6935
6935
  },
@@ -6978,7 +6978,7 @@ var SYSTEM_CLI_COMMANDS = [
6978
6978
  },
6979
6979
  allowPositionals: false,
6980
6980
  run: async (input) => {
6981
- const { initCommand } = await import("./init-R2OT2EC7.js");
6981
+ const { initCommand } = await import("./init-UZPL4H55.js");
6982
6982
  await initCommand({
6983
6983
  force: getBoolean(input.values, "force"),
6984
6984
  ref: getString(input.values, "ref"),
@@ -7033,7 +7033,7 @@ var SYSTEM_CLI_COMMANDS = [
7033
7033
  allowPositionals: false,
7034
7034
  run: async (input) => {
7035
7035
  applyServerEnv(input.values);
7036
- const { serveCommand } = await import("./serve-HWLAUXAU.js");
7036
+ const { serveCommand } = await import("./serve-KGZW5WPA.js");
7037
7037
  await serveCommand(input.format);
7038
7038
  }
7039
7039
  },
@@ -8351,8 +8351,8 @@ var AGENT_CLI_COMMANDS = [
8351
8351
  "timeout-ms": stringOption()
8352
8352
  },
8353
8353
  run: async (input) => {
8354
- const { coerceAgentProvider } = await import("./session-LBMTUPPY.js");
8355
- const { AERO_TOOL_PROFILES, isAeroToolProfile } = await import("./tools-LROEIKWI.js");
8354
+ const { coerceAgentProvider } = await import("./session-BY2FSRYU.js");
8355
+ const { AERO_TOOL_PROFILES, isAeroToolProfile } = await import("./tools-5YRH5NEI.js");
8356
8356
  const { agentAsk } = await import("./agent-ask-A4HQCNLV.js");
8357
8357
  const usage = `canonry agent ask <project> "<prompt>" [--provider ${AGENT_PROVIDER_IDS.join("|")}] [--model <id>] [--scope all|read-only] [--profile default|ads-operator] [--context <json>] [--conversation <id>] [--max-tool-calls <n>] [--timeout-ms <ms>] [--format json]`;
8358
8358
  const project3 = requireProject(input, "agent.ask", usage);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  REGISTERED_CLI_COMMANDS
3
- } from "./chunk-N3PYCQYT.js";
3
+ } from "./chunk-V52KSHH7.js";
4
4
  import "./chunk-6GO5VVAC.js";
5
5
  import "./chunk-VJWDBFSL.js";
6
6
  import "./chunk-JCWXEVYW.js";
package/dist/cli.js CHANGED
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node --import tsx
2
2
  import {
3
3
  REGISTERED_CLI_COMMANDS
4
- } from "./chunk-N3PYCQYT.js";
4
+ } from "./chunk-V52KSHH7.js";
5
5
  import "./chunk-6GO5VVAC.js";
6
6
  import {
7
7
  buildSetupState,
8
8
  runPendingServeHandoff
9
- } from "./chunk-S5Y633HH.js";
9
+ } from "./chunk-IJQJSNOZ.js";
10
10
  import "./chunk-VJWDBFSL.js";
11
11
  import "./chunk-JCWXEVYW.js";
12
12
  import "./chunk-TSENU4GG.js";
@@ -7,8 +7,8 @@ import {
7
7
  } from "./chunk-HGMYEDAQ.js";
8
8
  import {
9
9
  anyUsersExist
10
- } from "./chunk-OIHR2BDK.js";
11
- import "./chunk-FICCBAAY.js";
10
+ } from "./chunk-5AGYH5PX.js";
11
+ import "./chunk-IQTMHY23.js";
12
12
  import "./chunk-WDEDEEWA.js";
13
13
  import {
14
14
  createClient
@@ -40,7 +40,7 @@ function parseDemoTrustedProxies(values) {
40
40
  async function demoCommand(options) {
41
41
  const { host, port } = parseDemoListenOptions(options);
42
42
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
43
- const { createDemoServer } = await import("./demo-server-7EYKEN23.js");
43
+ const { createDemoServer } = await import("./demo-server-EWOBWWV4.js");
44
44
  const app = await createDemoServer({ trustProxy });
45
45
  let stopping = false;
46
46
  const stop = () => {
@@ -18,7 +18,7 @@ import "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  HISTORY_WINDOW_RUNS,
20
20
  IntelligenceService
21
- } from "./chunk-JECDHS6M.js";
21
+ } from "./chunk-UGUON7IK.js";
22
22
  import "./chunk-SVMTN7MI.js";
23
23
  import {
24
24
  determineCitationState
@@ -26,8 +26,8 @@ import {
26
26
  import {
27
27
  apiRoutes,
28
28
  assessConversionTrackingIntegrity
29
- } from "./chunk-OIHR2BDK.js";
30
- import "./chunk-FICCBAAY.js";
29
+ } from "./chunk-5AGYH5PX.js";
30
+ import "./chunk-IQTMHY23.js";
31
31
  import "./chunk-WDEDEEWA.js";
32
32
  import {
33
33
  adsAdGroups,