@canonry/canonry 7.58.5 → 7.60.0

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 (132) hide show
  1. package/assets/agent-workspace/skills/aero/SKILL.md +2 -1
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +48 -4
  3. package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +34 -0
  4. package/assets/assets/{AgentSetupPage-CoD9a386.js → AgentSetupPage-xAe2RSTQ.js} +1 -1
  5. package/assets/assets/{AuditHistoryPanel-DSUKF9GC.js → AuditHistoryPanel-DRGMxc1o.js} +1 -1
  6. package/assets/assets/{BacklinksPage-DIZy0NkW.js → BacklinksPage-OS6r_MtQ.js} +1 -1
  7. package/assets/assets/{HistoryPage-B2Xtxu5L.js → HistoryPage-RDxUN7rD.js} +1 -1
  8. package/assets/assets/{MeasurementPropertyPage-BZmvjMiS.js → MeasurementPropertyPage-BVAmJBKa.js} +1 -1
  9. package/assets/assets/{ProjectPage-DMIoYBCF.js → ProjectPage-BWY9eFFx.js} +1 -1
  10. package/assets/assets/{RunsPage-DtvesLu2.js → RunsPage-Fb7IM6iV.js} +1 -1
  11. package/assets/assets/{SettingsPage-BjE3d5Ae.js → SettingsPage-Dz_agQCf.js} +1 -1
  12. package/assets/assets/{SiteHealthSection-D6RLbM2o.js → SiteHealthSection-TXp2Cszl.js} +2 -2
  13. package/assets/assets/ToneBadge-DZzQvXs_.js +60 -0
  14. package/assets/assets/{TrafficPage-CHZlfMgd.js → TrafficPage-BKfgooKl.js} +1 -1
  15. package/assets/assets/{TrafficSourceDetailPage-Dp7AYvRP.js → TrafficSourceDetailPage-C1HM_4Mh.js} +1 -1
  16. package/assets/assets/{account-context-DHWaWJSr.js → account-context-sj3dKq-a.js} +1 -1
  17. package/assets/assets/{card-im88-x1b.js → card-DKV0mNmm.js} +1 -1
  18. package/assets/assets/{extract-error-message-Bq8oNvfF.js → extract-error-message-Tfdo6vAJ.js} +1 -1
  19. package/assets/assets/{format-helpers-DOEct2q8.js → format-helpers-BagbvnfZ.js} +1 -1
  20. package/assets/assets/{index-CgAMnZFS.js → index-7G0DHKIO.js} +4 -4
  21. package/assets/assets/{query-client-BN_-qp71.js → query-client-7P_Wczfa.js} +1 -1
  22. package/assets/assets/{react-query-P6OZ-MPl.js → react-query-agN8P-yg.js} +1 -1
  23. package/assets/assets/{react-sigma_core.esm.min-TGwpCHs4.js → react-sigma_core.esm.min-CHz1PIYq.js} +1 -1
  24. package/assets/assets/{service-CUJkePNp.js → service-CAV4dMit.js} +1 -1
  25. package/assets/index.html +7 -7
  26. package/dist/{ads-BMBXQB67.js → ads-A42JBQ5Q.js} +3 -3
  27. package/dist/{agent-S6CU36RL.js → agent-ZKKHPMOB.js} +7 -7
  28. package/dist/{agent-ask-XG7WQBX6.js → agent-ask-SMV76QZM.js} +3 -3
  29. package/dist/{agent-conversations-C4QBZAPC.js → agent-conversations-O5QA3MHR.js} +3 -3
  30. package/dist/{agent-memory-I7UJ7MKH.js → agent-memory-ZRJQ6SZU.js} +3 -3
  31. package/dist/{agent-providers-YHRIYJDT.js → agent-providers-EOXIPRXN.js} +3 -3
  32. package/dist/{agent-transcript-2WICUOEW.js → agent-transcript-4TB2VI5E.js} +3 -3
  33. package/dist/{analytics-Y5AGSYWD.js → analytics-KSHS32RJ.js} +3 -3
  34. package/dist/{apply-DLVLMU3O.js → apply-4ZZMONED.js} +3 -3
  35. package/dist/{backfill-SINDWLD3.js → backfill-DJIIN5ZR.js} +9 -9
  36. package/dist/{backlinks-TEZTPNZ5.js → backlinks-XIAPORR5.js} +3 -3
  37. package/dist/{bing-IIA5HLND.js → bing-QDZXI334.js} +3 -3
  38. package/dist/{bootstrap-AKGA3BJI.js → bootstrap-7RAGKHJZ.js} +10 -10
  39. package/dist/{cdp-WWOFWFYU.js → cdp-3OX3WGWN.js} +7 -7
  40. package/dist/{chunk-4P7NK7XM.js → chunk-2IBFY7KQ.js} +2 -2
  41. package/dist/{chunk-SCS7R2ND.js → chunk-3JV3PWNA.js} +128 -1
  42. package/dist/{chunk-QEJBAPDP.js → chunk-4IV4FO3O.js} +2616 -2055
  43. package/dist/{chunk-27SGL3DF.js → chunk-66C7YITH.js} +1 -1
  44. package/dist/{chunk-TH3NNUJW.js → chunk-7HZ7KRHT.js} +5 -1
  45. package/dist/{chunk-O6TF6TPM.js → chunk-7KEIZ5OO.js} +8 -8
  46. package/dist/{chunk-YJPQBJZO.js → chunk-7XSGAPN5.js} +48 -3
  47. package/dist/{chunk-NWYNTYPD.js → chunk-ADY24WBX.js} +4 -4
  48. package/dist/{chunk-N2HCXIQ3.js → chunk-D7ZU5LMK.js} +1 -1
  49. package/dist/{chunk-BP5OKJIC.js → chunk-DUYENNUI.js} +2 -2
  50. package/dist/{chunk-52NCZIAC.js → chunk-FCPIOH6P.js} +1 -1
  51. package/dist/{chunk-CYVQW32W.js → chunk-FKQPVB5B.js} +21 -20
  52. package/dist/{chunk-IFVTHGXG.js → chunk-G7VJEPDZ.js} +2 -2
  53. package/dist/{chunk-U65LWABS.js → chunk-GLFE3Q3C.js} +7 -3
  54. package/dist/{chunk-QSPLYPVA.js → chunk-HGBIJIVM.js} +1 -1
  55. package/dist/{chunk-WLIGKWVB.js → chunk-HV5MGQYI.js} +3 -3
  56. package/dist/{chunk-4UGM5YV4.js → chunk-I32IFAB3.js} +3 -3
  57. package/dist/{chunk-G34BVUMF.js → chunk-IDPAYZHR.js} +1 -1
  58. package/dist/{chunk-Y7NX6EIK.js → chunk-JDL4QAPT.js} +2666 -2407
  59. package/dist/{chunk-5D4RL23M.js → chunk-L7WQTD3D.js} +5 -5
  60. package/dist/{chunk-6IBLGQVZ.js → chunk-NQTUPEBQ.js} +1 -1
  61. package/dist/{chunk-Q4J3XSWE.js → chunk-O7KIDW4H.js} +347 -10
  62. package/dist/{chunk-A5F5E4DL.js → chunk-OA6N3BI7.js} +4 -4
  63. package/dist/{chunk-3U7LL3JM.js → chunk-QCSNNKFI.js} +1 -1
  64. package/dist/{chunk-TVANRUBO.js → chunk-QEG7BSLH.js} +8 -1
  65. package/dist/{chunk-AP7YSOFC.js → chunk-QRC6SDPF.js} +417 -331
  66. package/dist/{chunk-65YQFVJM.js → chunk-RLXNZRHD.js} +5 -5
  67. package/dist/{chunk-F6W7FCS2.js → chunk-SJNF5GN2.js} +26 -2
  68. package/dist/{chunk-JGRUCEL4.js → chunk-TLNHDCJF.js} +2 -2
  69. package/dist/{chunk-L7TKNHEX.js → chunk-UHE4RLFW.js} +1 -1
  70. package/dist/{chunk-YDSY5YJE.js → chunk-XJF7LMGU.js} +4 -4
  71. package/dist/{chunk-ZYL3LCDZ.js → chunk-Z63ZR6AD.js} +1 -1
  72. package/dist/{chunk-KWXARGCT.js → chunk-Z7WG6F7Q.js} +3 -3
  73. package/dist/{chunk-4TM4NXQR.js → chunk-ZK5WIVGA.js} +2 -2
  74. package/dist/{citations-4LVBHTDX.js → citations-L3HFNQVU.js} +3 -3
  75. package/dist/{cli-catalog-PJYR3JHX.js → cli-catalog-DJPRREDK.js} +3 -3
  76. package/dist/{cli-commands-ZPW3OST3.js → cli-commands-4KG4X76Z.js} +7 -7
  77. package/dist/cli.js +14 -14
  78. package/dist/{competitor-T7UXAW4F.js → competitor-Q5LZ26U5.js} +3 -3
  79. package/dist/{content-DFYYGGPI.js → content-WRVFNQSO.js} +3 -3
  80. package/dist/{dashboard-VT3GQRW4.js → dashboard-GBP2T2AG.js} +6 -6
  81. package/dist/{demo-ZBNVULOO.js → demo-JMLMPLJ6.js} +1 -1
  82. package/dist/{demo-server-QUW4TDJL.js → demo-server-AOVPBGZ7.js} +11 -11
  83. package/dist/{discover-QTC5OBQG.js → discover-SKUNZE4Y.js} +3 -3
  84. package/dist/{discover-eval-QQZGUPR6.js → discover-eval-57BEDSQN.js} +3 -3
  85. package/dist/{doctor-VHFDL5MH.js → doctor-DMLJGH6G.js} +3 -3
  86. package/dist/{evidence-4PRFOC2I.js → evidence-J4XF4W7O.js} +3 -3
  87. package/dist/{export-cmd-BQE7BPKZ.js → export-cmd-3JXT2YAP.js} +3 -3
  88. package/dist/{ga-ULY5XDBK.js → ga-KHILAPMC.js} +3 -3
  89. package/dist/{gbp-4WHNZAFY.js → gbp-PHOFQZNT.js} +3 -3
  90. package/dist/{google-O4IVWLSG.js → google-QOLM2NBI.js} +4 -4
  91. package/dist/{google-marketing-DCQDTDDG.js → google-marketing-N37WUWNL.js} +1 -1
  92. package/dist/{health-cmd-I2JTACS7.js → health-cmd-2FUEPUJZ.js} +3 -3
  93. package/dist/{history-LUPHO3P3.js → history-MOSRCLAD.js} +3 -3
  94. package/dist/index.d.ts +818 -64
  95. package/dist/index.js +24 -24
  96. package/dist/{init-C2DLDK6T.js → init-V6ER2PJV.js} +11 -11
  97. package/dist/{insights-GC2W45U4.js → insights-F3MT66IV.js} +3 -3
  98. package/dist/intelligence-service-S5DI74LD.js +15 -0
  99. package/dist/journeys-DNS3EZNK.js +122 -0
  100. package/dist/{keys-DXQBSOBI.js → keys-NPOLKCWZ.js} +3 -3
  101. package/dist/{keyword-2DCR2QCJ.js → keyword-AXEPIJQ7.js} +3 -3
  102. package/dist/{logs-H45QFIEB.js → logs-ECEDVUTX.js} +3 -3
  103. package/dist/{mcp-NXXP6M3C.js → mcp-HUIRIY74.js} +2 -2
  104. package/dist/mcp.js +9 -9
  105. package/dist/{measurement-plan-IG4JUKKW.js → measurement-plan-5Y2IHH43.js} +5 -5
  106. package/dist/{notify-BLLWXMBB.js → notify-PIFCJ7WM.js} +3 -3
  107. package/dist/{organic-evidence-73K7W7SB.js → organic-evidence-S2IE5XV6.js} +3 -3
  108. package/dist/{overview-4TAULPUG.js → overview-TZT7C4U4.js} +4 -4
  109. package/dist/{project-ANX4JTWS.js → project-HIY673Y5.js} +3 -3
  110. package/dist/{query-U3MFTLGR.js → query-FUJIMFJQ.js} +3 -3
  111. package/dist/{research-3YZ6QI67.js → research-ECGEXWID.js} +3 -3
  112. package/dist/{results-export-72OVLKSC.js → results-export-7DRGFNUX.js} +3 -3
  113. package/dist/{run-SI6IL4FC.js → run-4JEDD5VT.js} +4 -4
  114. package/dist/{schedule-FYEHU2VH.js → schedule-NRHQXHTW.js} +3 -3
  115. package/dist/{search-MXDT3DQE.js → search-M7PNZZZL.js} +3 -3
  116. package/dist/{serve-ME2KJ6BG.js → serve-RXLQEALQ.js} +56 -27
  117. package/dist/{session-R3PRJ3RB.js → session-MCSZQR5V.js} +12 -12
  118. package/dist/{settings-ZGS26QOP.js → settings-JXOYI7VV.js} +3 -3
  119. package/dist/{skills-ZMMCKKSA.js → skills-SRUXD2PV.js} +2 -2
  120. package/dist/{snapshot-5AGGUQKE.js → snapshot-7N4BEGGM.js} +3 -3
  121. package/dist/{src-AIM5FPLZ.js → src-ZAAE3NIM.js} +8 -2
  122. package/dist/{status-HVQI4E5X.js → status-5OYYSMAY.js} +4 -4
  123. package/dist/{technical-aeo-S4OFCURE.js → technical-aeo-464OUUWT.js} +3 -3
  124. package/dist/{telemetry-SPSC5MUN.js → telemetry-BZFNXACR.js} +4 -4
  125. package/dist/{tools-VZVQ2CTU.js → tools-YVWC3NTG.js} +11 -11
  126. package/dist/{traffic-5AXVN37M.js → traffic-WXJHRB7H.js} +13 -8
  127. package/dist/{users-WFKSUCGV.js → users-U2UNKGDY.js} +3 -3
  128. package/dist/{visibility-stats-5S26GC27.js → visibility-stats-AHGME46N.js} +3 -3
  129. package/dist/{wordpress-IUPZC7II.js → wordpress-FUVFZKH2.js} +3 -3
  130. package/package.json +1 -1
  131. package/assets/assets/ToneBadge-DYEbxp5S.js +0 -60
  132. package/dist/intelligence-service-R5BRSQKI.js +0 -15
@@ -20,7 +20,7 @@ import {
20
20
  templateLinkRatio,
21
21
  templateLinkUbiquityAvailable,
22
22
  validationError
23
- } from "./chunk-Y7NX6EIK.js";
23
+ } from "./chunk-JDL4QAPT.js";
24
24
  import {
25
25
  __export
26
26
  } from "./chunk-MLKGABMK.js";
@@ -107,6 +107,9 @@ __export(schema_exports, {
107
107
  healthSnapshots: () => healthSnapshots,
108
108
  insightNotifyState: () => insightNotifyState,
109
109
  insights: () => insights,
110
+ journeyEvents: () => journeyEvents,
111
+ journeyVisitors: () => journeyVisitors,
112
+ journeyVisits: () => journeyVisits,
110
113
  llmUsageEvents: () => llmUsageEvents,
111
114
  marketCompetitorNames: () => marketCompetitorNames,
112
115
  measurementDiscoveryConfigs: () => measurementDiscoveryConfigs,
@@ -2555,6 +2558,64 @@ var rawEventSamples = sqliteTable2("raw_event_samples", {
2555
2558
  index2("idx_raw_event_samples_source_ts").on(table.sourceId, table.ts),
2556
2559
  index2("idx_raw_event_samples_event_type").on(table.eventType)
2557
2560
  ]);
2561
+ var journeyVisitors = sqliteTable2("journey_visitors", {
2562
+ projectId: text2("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
2563
+ visitorKey: text2("visitor_key").notNull(),
2564
+ keyBasis: text2("key_basis").notNull(),
2565
+ userAgent: text2("user_agent"),
2566
+ firstAiAt: text2("first_ai_at").notNull(),
2567
+ firstAiEngine: text2("first_ai_engine").notNull(),
2568
+ lastAiAt: text2("last_ai_at").notNull(),
2569
+ lastSeenAt: text2("last_seen_at").notNull(),
2570
+ /** UTC days (YYYY-MM-DD) on which this key reached the per-day request cap. */
2571
+ cappedDays: text2("capped_days", { mode: "json" }).$type().notNull().default([]),
2572
+ createdAt: text2("created_at").notNull(),
2573
+ updatedAt: text2("updated_at").notNull()
2574
+ }, (table) => [
2575
+ primaryKey2({ columns: [table.projectId, table.visitorKey] }),
2576
+ index2("idx_journey_visitors_project_first_ai").on(table.projectId, table.firstAiAt),
2577
+ index2("idx_journey_visitors_last_seen").on(table.lastSeenAt)
2578
+ ]);
2579
+ var journeyVisits = sqliteTable2("journey_visits", {
2580
+ id: text2("id").primaryKey(),
2581
+ projectId: text2("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
2582
+ visitorKey: text2("visitor_key").notNull(),
2583
+ sourceId: text2("source_id").notNull().references(() => trafficSources.id, { onDelete: "cascade" }),
2584
+ startedAt: text2("started_at").notNull(),
2585
+ endedAt: text2("ended_at").notNull(),
2586
+ entryClass: text2("entry_class").notNull(),
2587
+ entryName: text2("entry_name"),
2588
+ entryHost: text2("entry_host"),
2589
+ paid: integer2("paid", { mode: "boolean" }).notNull().default(false),
2590
+ landingPath: text2("landing_path").notNull(),
2591
+ requestCount: integer2("request_count").notNull(),
2592
+ pageCount: integer2("page_count").notNull(),
2593
+ createdAt: text2("created_at").notNull(),
2594
+ updatedAt: text2("updated_at").notNull()
2595
+ }, (table) => [
2596
+ index2("idx_journey_visits_visitor").on(table.projectId, table.visitorKey, table.startedAt),
2597
+ index2("idx_journey_visits_project_started").on(table.projectId, table.startedAt),
2598
+ index2("idx_journey_visits_ended").on(table.endedAt)
2599
+ ]);
2600
+ var journeyEvents = sqliteTable2("journey_events", {
2601
+ id: text2("id").primaryKey(),
2602
+ projectId: text2("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
2603
+ visitId: text2("visit_id").notNull().references(() => journeyVisits.id, { onDelete: "cascade" }),
2604
+ sourceId: text2("source_id").notNull().references(() => trafficSources.id, { onDelete: "cascade" }),
2605
+ sourceEventId: text2("source_event_id").notNull(),
2606
+ ts: text2("ts").notNull(),
2607
+ method: text2("method"),
2608
+ path: text2("path").notNull(),
2609
+ status: integer2("status"),
2610
+ kind: text2("kind").notNull(),
2611
+ /** The request was an AI touch: it starts or renews the visitor's 30-day lookback. */
2612
+ aiTouch: integer2("ai_touch", { mode: "boolean" }).notNull().default(false),
2613
+ createdAt: text2("created_at").notNull()
2614
+ }, (table) => [
2615
+ uniqueIndex2("idx_journey_events_source_event").on(table.projectId, table.sourceId, table.sourceEventId),
2616
+ index2("idx_journey_events_visit_ts").on(table.visitId, table.ts),
2617
+ index2("idx_journey_events_ts").on(table.ts)
2618
+ ]);
2558
2619
  var discoverySessions = sqliteTable2("discovery_sessions", {
2559
2620
  id: text2("id").primaryKey(),
2560
2621
  projectId: text2("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
@@ -8062,6 +8123,69 @@ var MIGRATION_VERSIONS = [
8062
8123
  statements: [
8063
8124
  `CREATE INDEX IF NOT EXISTS idx_seo_jobs_intent ON seo_jobs(project_key,request_hash)`
8064
8125
  ]
8126
+ },
8127
+ {
8128
+ // AI visitor journeys: visitors who arrived from an AI engine, their
8129
+ // visits within 30 days after an AI visit, and those visits'
8130
+ // requests. Visitor keys are keyed hashes; no IP is stored. New tables
8131
+ // only, so every existing row and query is unchanged.
8132
+ version: 192,
8133
+ name: "ai-visitor-journeys",
8134
+ statements: [
8135
+ `CREATE TABLE IF NOT EXISTS journey_visitors (
8136
+ project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
8137
+ visitor_key TEXT NOT NULL,
8138
+ key_basis TEXT NOT NULL,
8139
+ user_agent TEXT,
8140
+ first_ai_at TEXT NOT NULL,
8141
+ first_ai_engine TEXT NOT NULL,
8142
+ last_ai_at TEXT NOT NULL,
8143
+ last_seen_at TEXT NOT NULL,
8144
+ capped_days TEXT NOT NULL DEFAULT '[]',
8145
+ created_at TEXT NOT NULL,
8146
+ updated_at TEXT NOT NULL,
8147
+ PRIMARY KEY (project_id, visitor_key)
8148
+ )`,
8149
+ `CREATE INDEX IF NOT EXISTS idx_journey_visitors_project_first_ai ON journey_visitors(project_id, first_ai_at)`,
8150
+ `CREATE INDEX IF NOT EXISTS idx_journey_visitors_last_seen ON journey_visitors(last_seen_at)`,
8151
+ `CREATE TABLE IF NOT EXISTS journey_visits (
8152
+ id TEXT PRIMARY KEY,
8153
+ project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
8154
+ visitor_key TEXT NOT NULL,
8155
+ source_id TEXT NOT NULL REFERENCES traffic_sources(id) ON DELETE CASCADE,
8156
+ started_at TEXT NOT NULL,
8157
+ ended_at TEXT NOT NULL,
8158
+ entry_class TEXT NOT NULL,
8159
+ entry_name TEXT,
8160
+ entry_host TEXT,
8161
+ paid INTEGER NOT NULL DEFAULT 0,
8162
+ landing_path TEXT NOT NULL,
8163
+ request_count INTEGER NOT NULL,
8164
+ page_count INTEGER NOT NULL,
8165
+ created_at TEXT NOT NULL,
8166
+ updated_at TEXT NOT NULL
8167
+ )`,
8168
+ `CREATE INDEX IF NOT EXISTS idx_journey_visits_visitor ON journey_visits(project_id, visitor_key, started_at)`,
8169
+ `CREATE INDEX IF NOT EXISTS idx_journey_visits_project_started ON journey_visits(project_id, started_at)`,
8170
+ `CREATE INDEX IF NOT EXISTS idx_journey_visits_ended ON journey_visits(ended_at)`,
8171
+ `CREATE TABLE IF NOT EXISTS journey_events (
8172
+ id TEXT PRIMARY KEY,
8173
+ project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
8174
+ visit_id TEXT NOT NULL REFERENCES journey_visits(id) ON DELETE CASCADE,
8175
+ source_id TEXT NOT NULL REFERENCES traffic_sources(id) ON DELETE CASCADE,
8176
+ source_event_id TEXT NOT NULL,
8177
+ ts TEXT NOT NULL,
8178
+ method TEXT,
8179
+ path TEXT NOT NULL,
8180
+ status INTEGER,
8181
+ kind TEXT NOT NULL,
8182
+ ai_touch INTEGER NOT NULL DEFAULT 0,
8183
+ created_at TEXT NOT NULL
8184
+ )`,
8185
+ `CREATE UNIQUE INDEX IF NOT EXISTS idx_journey_events_source_event ON journey_events(project_id, source_id, source_event_id)`,
8186
+ `CREATE INDEX IF NOT EXISTS idx_journey_events_visit_ts ON journey_events(visit_id, ts)`,
8187
+ `CREATE INDEX IF NOT EXISTS idx_journey_events_ts ON journey_events(ts)`
8188
+ ]
8065
8189
  }
8066
8190
  ];
8067
8191
  var AERO_LEDGER_REBUILDS = [
@@ -9528,6 +9652,9 @@ export {
9528
9652
  aiUserFetchVerificationManifestsHourly,
9529
9653
  aiReferralEventsHourly,
9530
9654
  rawEventSamples,
9655
+ journeyVisitors,
9656
+ journeyVisits,
9657
+ journeyEvents,
9531
9658
  discoverySessions,
9532
9659
  researchRuns,
9533
9660
  researchRunQueries,