@ainyc/canonry 4.139.0 → 4.139.1

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 (23) hide show
  1. package/assets/agent-workspace/skills/aero/references/reporting.md +22 -1
  2. package/assets/assets/{AuditHistoryPanel-DL9chF3F.js → AuditHistoryPanel-FiMbN4_a.js} +1 -1
  3. package/assets/assets/{BacklinksPage-sA_tgQJv.js → BacklinksPage-CLRIsKHN.js} +1 -1
  4. package/assets/assets/{ChartPrimitives-D7nLxIbe.js → ChartPrimitives-BuTqG5NR.js} +1 -1
  5. package/assets/assets/{HistoryPage-CLWbcu5m.js → HistoryPage-BWRbsFAT.js} +1 -1
  6. package/assets/assets/{ProjectPage-C_oXMCNU.js → ProjectPage-DQ2kIj-L.js} +1 -1
  7. package/assets/assets/{RunRow-DQ4icEiv.js → RunRow-BZobaeDq.js} +1 -1
  8. package/assets/assets/{RunsPage-D5sizm9T.js → RunsPage-DhrY4Ouc.js} +1 -1
  9. package/assets/assets/{SettingsPage-XdQjvWsg.js → SettingsPage-C6VcJEgB.js} +1 -1
  10. package/assets/assets/{TrafficPage-C12osXDa.js → TrafficPage-KqYl5HUH.js} +1 -1
  11. package/assets/assets/{TrafficSourceDetailPage-CXAiNK8Y.js → TrafficSourceDetailPage-mMJi-QZr.js} +1 -1
  12. package/assets/assets/{arrow-left-LaI5a16g.js → arrow-left-CpLow2Kp.js} +1 -1
  13. package/assets/assets/{extract-error-message-CYWaTM3m.js → extract-error-message-dHq11Y4U.js} +1 -1
  14. package/assets/assets/{index-CguwySA5.js → index-iRW7X23W.js} +98 -98
  15. package/assets/assets/{trash-2-DoH00q7m.js → trash-2-CnEPNBqu.js} +1 -1
  16. package/assets/index.html +1 -1
  17. package/dist/{chunk-IGU67QFM.js → chunk-DJHSOPMU.js} +2 -0
  18. package/dist/{chunk-DLKUDNDA.js → chunk-YLHZQ7HQ.js} +38 -2
  19. package/dist/cli.js +2 -2
  20. package/dist/index.d.ts +6 -0
  21. package/dist/index.js +2 -2
  22. package/dist/{intelligence-service-SMYVN3KN.js → intelligence-service-BGH2MGHB.js} +1 -1
  23. package/package.json +7 -7
@@ -1 +1 @@
1
- import{c as a}from"./index-CguwySA5.js";const t=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],h=a("circle-question-mark",t);const e=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],d=a("download",e);const o=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],p=a("external-link",o);const c=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],s=a("trash-2",c);export{h as C,d as D,p as E,s as T};
1
+ import{c as a}from"./index-iRW7X23W.js";const t=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],h=a("circle-question-mark",t);const e=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],d=a("download",e);const o=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],p=a("external-link",o);const c=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],s=a("trash-2",c);export{h as C,d as D,p as E,s as T};
package/assets/index.html CHANGED
@@ -12,7 +12,7 @@
12
12
  <link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
13
13
  <link rel="apple-touch-icon" href="./apple-touch-icon.png" />
14
14
  <title>Canonry</title>
15
- <script type="module" crossorigin src="./assets/index-CguwySA5.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-iRW7X23W.js"></script>
16
16
  <link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-Be8JdV5M.js">
17
17
  <link rel="modulepreload" crossorigin href="./assets/vendor-radix-CQ77EO2y.js">
18
18
  <link rel="modulepreload" crossorigin href="./assets/vendor-recharts-DSxTZhaH.js">
@@ -45946,6 +45946,8 @@ export {
45946
45946
  extractRecommendedCompetitors,
45947
45947
  getPlaceDetails,
45948
45948
  hashPlaceDetails,
45949
+ latestQueryBasketRevision,
45950
+ ensureCurrentQueryBasketRevision,
45949
45951
  queueRunIfProjectIdle,
45950
45952
  nextRunFromCron,
45951
45953
  resolveWebhookTarget,
@@ -53,6 +53,7 @@ import {
53
53
  doctorHealthState,
54
54
  downloadFile,
55
55
  dropLegacyCredentialColumns,
56
+ ensureCurrentQueryBasketRevision,
56
57
  executeDiscovery,
57
58
  extractLegacyCredentials,
58
59
  extractRecommendedCompetitors,
@@ -88,6 +89,7 @@ import {
88
89
  installDuckdb,
89
90
  isDuckdbInstalled,
90
91
  isValidReleaseId,
92
+ latestQueryBasketRevision,
91
93
  listCachedReleases,
92
94
  listLocations,
93
95
  listMonthlyKeywords,
@@ -121,7 +123,7 @@ import {
121
123
  siteAuditSnapshots,
122
124
  toAlertView,
123
125
  usageCounters
124
- } from "./chunk-IGU67QFM.js";
126
+ } from "./chunk-DJHSOPMU.js";
125
127
  import {
126
128
  AGENT_MEMORY_VALUE_MAX_BYTES,
127
129
  AGENT_PROVIDER_IDS,
@@ -7176,7 +7178,7 @@ function readStoredGroundingSources(rawResponse) {
7176
7178
  return result;
7177
7179
  }
7178
7180
  async function backfillInsightsCommand(project, opts) {
7179
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-SMYVN3KN.js");
7181
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-BGH2MGHB.js");
7180
7182
  const config = loadConfig();
7181
7183
  const db = createClient(config.database);
7182
7184
  migrate(db);
@@ -8151,9 +8153,36 @@ var Scheduler = class {
8151
8153
  }
8152
8154
  log13.info("health-schedule.seeded", { projectCount: projectsWithoutHealth.length, cron: DEFAULT_HEALTH_CRON });
8153
8155
  }
8156
+ /**
8157
+ * Record each project's current query set as basket revision 1 if it has
8158
+ * never been recorded. Minting normally happens when a sweep is queued, but a
8159
+ * project whose sweeps are manual (the common cadence: twice a month) would
8160
+ * otherwise keep its analytics on the pre-basket date heuristic for weeks
8161
+ * after the feature ships — with the chart still hiding exactly the history
8162
+ * the basket exists to recover. Boot is the moment the current set is known
8163
+ * and nothing has to be guessed, and ensureCurrentQueryBasketRevision is
8164
+ * idempotent, so restarts are no-ops and an unchanged set never churns
8165
+ * revisions. Runs are NOT stamped retroactively: the revision describes the
8166
+ * set as of now, and historical runs keep their null stamp.
8167
+ */
8168
+ ensureQueryBaskets() {
8169
+ const allProjects = this.db.select({ id: projects.id }).from(projects).all();
8170
+ let minted = 0;
8171
+ for (const project of allProjects) {
8172
+ try {
8173
+ const previous = latestQueryBasketRevision(this.db, project.id)?.revision ?? null;
8174
+ const current = ensureCurrentQueryBasketRevision(this.db, project.id);
8175
+ if (current !== null && current.revision !== previous) minted += 1;
8176
+ } catch (err) {
8177
+ log13.warn("query-basket.mint-failed", { projectId: project.id, err: String(err) });
8178
+ }
8179
+ }
8180
+ if (minted > 0) log13.info("query-basket.ensured", { projectCount: minted });
8181
+ }
8154
8182
  /** Load all enabled schedules from DB and register cron jobs. */
8155
8183
  start() {
8156
8184
  this.ensureHealthSchedules();
8185
+ this.ensureQueryBaskets();
8157
8186
  const allSchedules = this.db.select().from(schedules).where(eq14(schedules.enabled, true)).all();
8158
8187
  for (const schedule of allSchedules) {
8159
8188
  const missedRunAt = schedule.nextRunAt;
@@ -11979,6 +12008,9 @@ function parseBooleanEnv(value) {
11979
12008
  function resolveDashboardRequirePassword(env, config) {
11980
12009
  return parseBooleanEnv(env.CANONRY_DASHBOARD_REQUIRE_PASSWORD) ?? config.dashboard?.requirePassword ?? true;
11981
12010
  }
12011
+ function resolveDashboardShowResourceLinks(env, config) {
12012
+ return parseBooleanEnv(env.CANONRY_DASHBOARD_SHOW_RESOURCE_LINKS) ?? config.dashboard?.showResourceLinks ?? true;
12013
+ }
11982
12014
  var API_ADAPTERS = [
11983
12015
  geminiAdapter,
11984
12016
  openaiAdapter,
@@ -12843,6 +12875,7 @@ async function createServer(opts) {
12843
12875
  );
12844
12876
  }
12845
12877
  const dashboardRequirePassword = resolveDashboardRequirePassword(process.env, opts.config);
12878
+ const dashboardShowResourceLinks = resolveDashboardShowResourceLinks(process.env, opts.config);
12846
12879
  app.log.info(
12847
12880
  { dashboardRequirePassword },
12848
12881
  "Dashboard password gate resolved"
@@ -13592,6 +13625,9 @@ async function createServer(opts) {
13592
13625
  const injectConfig = (html, projectTabsOverride, themeOverride, renderTokenOverride) => {
13593
13626
  const clientConfig = {};
13594
13627
  if (basePath) clientConfig.basePath = basePath;
13628
+ if (!dashboardShowResourceLinks) {
13629
+ clientConfig.dashboard = { showResourceLinks: false };
13630
+ }
13595
13631
  if (embed.enabled) {
13596
13632
  const embedClient = embedClientConfigForRequest(embed, projectTabsOverride, themeOverride, renderTokenOverride);
13597
13633
  if (embedClient) clientConfig.embed = embedClient;
package/dist/cli.js CHANGED
@@ -30,7 +30,7 @@ import {
30
30
  showFirstRunNotice,
31
31
  trackCliCommandFinished,
32
32
  trackEvent
33
- } from "./chunk-DLKUDNDA.js";
33
+ } from "./chunk-YLHZQ7HQ.js";
34
34
  import {
35
35
  CliError,
36
36
  EXIT_SYSTEM_ERROR,
@@ -55,7 +55,7 @@ import {
55
55
  projects,
56
56
  queries,
57
57
  renderReportHtml
58
- } from "./chunk-IGU67QFM.js";
58
+ } from "./chunk-DJHSOPMU.js";
59
59
  import {
60
60
  AdsDeliverySnapshotStatuses,
61
61
  AdsHistoricalCampaignRollupStatuses,
package/dist/index.d.ts CHANGED
@@ -190,6 +190,12 @@ interface DashboardConfigEntry {
190
190
  * and the engine is not directly internet-reachable.
191
191
  */
192
192
  requirePassword?: boolean;
193
+ /**
194
+ * Whether the dashboard sidebar and page footer show the Canonry GitHub,
195
+ * documentation, and changelog links. Defaults to true. Disable for a
196
+ * quieter branded UI.
197
+ */
198
+ showResourceLinks?: boolean;
193
199
  }
194
200
  /**
195
201
  * Google Places API config — supplemental rendered-listing data for GBP
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-DLKUDNDA.js";
3
+ } from "./chunk-YLHZQ7HQ.js";
4
4
  import {
5
5
  loadConfig
6
6
  } from "./chunk-IYTHIAAE.js";
7
- import "./chunk-IGU67QFM.js";
7
+ import "./chunk-DJHSOPMU.js";
8
8
  import "./chunk-OA2EGCUS.js";
9
9
  export {
10
10
  createServer,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-IGU67QFM.js";
3
+ } from "./chunk-DJHSOPMU.js";
4
4
  import "./chunk-OA2EGCUS.js";
5
5
  export {
6
6
  IntelligenceService
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainyc/canonry",
3
- "version": "4.139.0",
3
+ "version": "4.139.1",
4
4
  "type": "module",
5
5
  "description": "Agent-first open-source AEO operating platform - track how answer engines cite your domain",
6
6
  "license": "FSL-1.1-ALv2",
@@ -73,19 +73,19 @@
73
73
  "@ainyc/canonry-integration-bing": "0.0.0",
74
74
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
75
75
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
76
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
76
77
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
77
78
  "@ainyc/canonry-integration-google": "0.0.0",
78
- "@ainyc/canonry-integration-google-places": "0.0.0",
79
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
79
+ "@ainyc/canonry-integration-traffic": "0.0.0",
80
80
  "@ainyc/canonry-integration-wordpress": "0.0.0",
81
81
  "@ainyc/canonry-intelligence": "0.0.0",
82
- "@ainyc/canonry-integration-traffic": "0.0.0",
82
+ "@ainyc/canonry-integration-google-places": "0.0.0",
83
83
  "@ainyc/canonry-provider-cdp": "0.0.0",
84
- "@ainyc/canonry-provider-gemini": "0.0.0",
85
84
  "@ainyc/canonry-provider-claude": "0.0.0",
85
+ "@ainyc/canonry-provider-gemini": "0.0.0",
86
86
  "@ainyc/canonry-provider-local": "0.0.0",
87
- "@ainyc/canonry-provider-openai": "0.0.0",
88
- "@ainyc/canonry-provider-perplexity": "0.0.0"
87
+ "@ainyc/canonry-provider-perplexity": "0.0.0",
88
+ "@ainyc/canonry-provider-openai": "0.0.0"
89
89
  },
90
90
  "scripts": {
91
91
  "build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",