@ainyc/canonry 4.67.0 → 4.69.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 (28) hide show
  1. package/README.md +1 -0
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +8 -1
  3. package/assets/assets/{BacklinksPage-B9oyoljV.js → BacklinksPage-BXVoTc3S.js} +1 -1
  4. package/assets/assets/ChartPrimitives-pJRJPd17.js +1 -0
  5. package/assets/assets/ProjectPage-CQ1_itHh.js +6 -0
  6. package/assets/assets/{RunRow-vHM36Fdi.js → RunRow-DPL4FxPl.js} +1 -1
  7. package/assets/assets/{RunsPage-Cr58nTet.js → RunsPage-B4dCG_66.js} +1 -1
  8. package/assets/assets/{SettingsPage-BuiP8ZOv.js → SettingsPage-D8aWhLsU.js} +1 -1
  9. package/assets/assets/{TrafficPage-bwOxChyo.js → TrafficPage-COZa5_Q_.js} +1 -1
  10. package/assets/assets/{TrafficSourceDetailPage-B0uY6VIB.js → TrafficSourceDetailPage-CN8Cx6YI.js} +1 -1
  11. package/assets/assets/{extract-error-message-CWdzuNp4.js → extract-error-message-D8g8YXDH.js} +1 -1
  12. package/assets/assets/index-BUNCrWTe.css +1 -0
  13. package/assets/assets/{index-DiN_mzYU.js → index-DPO3uDWZ.js} +79 -79
  14. package/assets/assets/{server-traffic-D3aICbxr.js → server-traffic-0JT1Vbj_.js} +1 -1
  15. package/assets/assets/{trash-2-CVKno2W2.js → trash-2-_1TgguOP.js} +1 -1
  16. package/assets/index.html +2 -2
  17. package/dist/{chunk-KHN3XMOR.js → chunk-B2CH7GBW.js} +93 -28
  18. package/dist/{chunk-34PATQZM.js → chunk-D75O5A27.js} +36 -1
  19. package/dist/{chunk-4V3V4MFF.js → chunk-WQ44ZXGQ.js} +45 -8
  20. package/dist/{chunk-RQCVITY4.js → chunk-YYFBMDLC.js} +15 -1
  21. package/dist/cli.js +27 -11
  22. package/dist/index.js +4 -4
  23. package/dist/{intelligence-service-SMU5JVVD.js → intelligence-service-IUKD3PMZ.js} +2 -2
  24. package/dist/mcp.js +2 -2
  25. package/package.json +11 -10
  26. package/assets/assets/ChartPrimitives-CvfM24iC.js +0 -1
  27. package/assets/assets/ProjectPage-DELbOAlm.js +0 -6
  28. package/assets/assets/index-yMJe1bJR.css +0 -1
package/dist/cli.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  setTelemetrySource,
28
28
  showFirstRunNotice,
29
29
  trackEvent
30
- } from "./chunk-4V3V4MFF.js";
30
+ } from "./chunk-WQ44ZXGQ.js";
31
31
  import {
32
32
  CliError,
33
33
  EXIT_SYSTEM_ERROR,
@@ -44,7 +44,7 @@ import {
44
44
  saveConfig,
45
45
  saveConfigPatch,
46
46
  usageError
47
- } from "./chunk-RQCVITY4.js";
47
+ } from "./chunk-YYFBMDLC.js";
48
48
  import {
49
49
  apiKeys,
50
50
  createClient,
@@ -52,7 +52,7 @@ import {
52
52
  projects,
53
53
  queries,
54
54
  renderReportHtml
55
- } from "./chunk-KHN3XMOR.js";
55
+ } from "./chunk-B2CH7GBW.js";
56
56
  import {
57
57
  CcReleaseSyncStatuses,
58
58
  CheckScopes,
@@ -69,7 +69,7 @@ import {
69
69
  notificationEventSchema,
70
70
  providerQuotaPolicySchema,
71
71
  resolveProviderInput
72
- } from "./chunk-34PATQZM.js";
72
+ } from "./chunk-D75O5A27.js";
73
73
 
74
74
  // src/cli.ts
75
75
  import { pathToFileURL } from "url";
@@ -6504,6 +6504,21 @@ Citation Rate Trends (${data.window})`);
6504
6504
  console.log(` ${start} ${pct2(bucket.citationRate).padStart(6)} ${bar}`);
6505
6505
  }
6506
6506
  }
6507
+ const providersInBuckets = [...new Set(data.buckets.flatMap((b) => Object.keys(b.byProvider ?? {})))].sort();
6508
+ if (data.buckets.length > 0 && providersInBuckets.length > 0) {
6509
+ console.log(`
6510
+ By Provider Timeline:`);
6511
+ for (const provider of providersInBuckets) {
6512
+ console.log(` ${provider}:`);
6513
+ for (const bucket of data.buckets) {
6514
+ const metric = bucket.byProvider?.[provider];
6515
+ if (!metric) continue;
6516
+ const start = bucket.startDate.slice(0, 10);
6517
+ const bar = metric.total > 0 ? "\u2588".repeat(Math.round(metric.citationRate * 20)) : "";
6518
+ console.log(` ${start} ${pct2(metric.citationRate).padStart(6)} ${bar}`);
6519
+ }
6520
+ }
6521
+ }
6507
6522
  }
6508
6523
  function printGaps(data) {
6509
6524
  console.log(`
@@ -7742,7 +7757,7 @@ function printSchedule(s) {
7742
7757
  var SCHEDULE_CLI_COMMANDS = [
7743
7758
  {
7744
7759
  path: ["schedule", "set"],
7745
- usage: "canonry schedule set <project> (--preset <preset> | --cron <expr>) [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh] [--source <id>] [--timezone <tz>] [--provider <name>...] [--format json]",
7760
+ usage: "canonry schedule set <project> (--preset <preset> | --cron <expr>) [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh|backlinks-sync] [--source <id>] [--timezone <tz>] [--provider <name>...] [--format json]",
7746
7761
  options: {
7747
7762
  preset: stringOption(),
7748
7763
  cron: stringOption(),
@@ -7752,7 +7767,7 @@ var SCHEDULE_CLI_COMMANDS = [
7752
7767
  provider: multiStringOption()
7753
7768
  },
7754
7769
  run: async (input) => {
7755
- const usage = "canonry schedule set <project> (--preset <preset> | --cron <expr>) [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh] [--source <id>] [--timezone <tz>] [--provider <name>...] [--format json]";
7770
+ const usage = "canonry schedule set <project> (--preset <preset> | --cron <expr>) [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh|backlinks-sync] [--source <id>] [--timezone <tz>] [--provider <name>...] [--format json]";
7756
7771
  const project = requireProject(input, "schedule.set", usage);
7757
7772
  if (!getString(input.values, "preset") && !getString(input.values, "cron")) {
7758
7773
  throw usageError("Error: --preset or --cron is required", {
@@ -7777,7 +7792,7 @@ var SCHEDULE_CLI_COMMANDS = [
7777
7792
  },
7778
7793
  {
7779
7794
  path: ["schedule", "show"],
7780
- usage: "canonry schedule show <project> [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh] [--format json]",
7795
+ usage: "canonry schedule show <project> [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh|backlinks-sync] [--format json]",
7781
7796
  options: { kind: stringOption() },
7782
7797
  run: async (input) => {
7783
7798
  const project = requireProject(input, "schedule.show", "canonry schedule show <project> [--kind ...]");
@@ -7786,7 +7801,7 @@ var SCHEDULE_CLI_COMMANDS = [
7786
7801
  },
7787
7802
  {
7788
7803
  path: ["schedule", "enable"],
7789
- usage: "canonry schedule enable <project> [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh] [--format json]",
7804
+ usage: "canonry schedule enable <project> [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh|backlinks-sync] [--format json]",
7790
7805
  options: { kind: stringOption() },
7791
7806
  run: async (input) => {
7792
7807
  const project = requireProject(input, "schedule.enable", "canonry schedule enable <project> [--kind ...]");
@@ -7795,7 +7810,7 @@ var SCHEDULE_CLI_COMMANDS = [
7795
7810
  },
7796
7811
  {
7797
7812
  path: ["schedule", "disable"],
7798
- usage: "canonry schedule disable <project> [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh] [--format json]",
7813
+ usage: "canonry schedule disable <project> [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh|backlinks-sync] [--format json]",
7799
7814
  options: { kind: stringOption() },
7800
7815
  run: async (input) => {
7801
7816
  const project = requireProject(input, "schedule.disable", "canonry schedule disable <project> [--kind ...]");
@@ -7804,7 +7819,7 @@ var SCHEDULE_CLI_COMMANDS = [
7804
7819
  },
7805
7820
  {
7806
7821
  path: ["schedule", "remove"],
7807
- usage: "canonry schedule remove <project> [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh] [--format json]",
7822
+ usage: "canonry schedule remove <project> [--kind answer-visibility|traffic-sync|gbp-sync|data-refresh|backlinks-sync] [--format json]",
7808
7823
  options: { kind: stringOption() },
7809
7824
  run: async (input) => {
7810
7825
  const project = requireProject(input, "schedule.remove", "canonry schedule remove <project> [--kind ...]");
@@ -8800,7 +8815,8 @@ function renderHuman(overview) {
8800
8815
  printScore("Competitor press.", scores.competitorPressure);
8801
8816
  printScore("Run status ", scores.runStatus);
8802
8817
  console.log(`
8803
- Queries cited: ${queryCounts.citedQueries}/${queryCounts.totalQueries} (${pct(queryCounts.citedRate)})`);
8818
+ Queries cited: ${queryCounts.citedQueries}/${queryCounts.totalQueries} (${pct(queryCounts.citedRate)})`);
8819
+ console.log(` Queries mentioned: ${queryCounts.mentionedQueries}/${queryCounts.totalQueries} (${pct(queryCounts.mentionRate)})`);
8804
8820
  if (movementSummary.hasPreviousRun) {
8805
8821
  console.log(` Movement: +${movementSummary.gained} gained, -${movementSummary.lost} lost (${movementSummary.tone})`);
8806
8822
  } else if (movementSummary.gained > 0) {
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-4V3V4MFF.js";
3
+ } from "./chunk-WQ44ZXGQ.js";
4
4
  import {
5
5
  loadConfig
6
- } from "./chunk-RQCVITY4.js";
7
- import "./chunk-KHN3XMOR.js";
8
- import "./chunk-34PATQZM.js";
6
+ } from "./chunk-YYFBMDLC.js";
7
+ import "./chunk-B2CH7GBW.js";
8
+ import "./chunk-D75O5A27.js";
9
9
  export {
10
10
  createServer,
11
11
  loadConfig
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-KHN3XMOR.js";
4
- import "./chunk-34PATQZM.js";
3
+ } from "./chunk-B2CH7GBW.js";
4
+ import "./chunk-D75O5A27.js";
5
5
  export {
6
6
  IntelligenceService
7
7
  };
package/dist/mcp.js CHANGED
@@ -3,8 +3,8 @@ import {
3
3
  PACKAGE_VERSION,
4
4
  canonryMcpTools,
5
5
  createApiClient
6
- } from "./chunk-RQCVITY4.js";
7
- import "./chunk-34PATQZM.js";
6
+ } from "./chunk-YYFBMDLC.js";
7
+ import "./chunk-D75O5A27.js";
8
8
 
9
9
  // src/mcp/cli.ts
10
10
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainyc/canonry",
3
- "version": "4.67.0",
3
+ "version": "4.69.0",
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",
@@ -46,6 +46,7 @@
46
46
  "@sinclair/typebox": "^0.34.41",
47
47
  "better-sqlite3": "^12.6.2",
48
48
  "chrome-remote-interface": "^0.33.2",
49
+ "cron-parser": "^5.5.0",
49
50
  "drizzle-orm": "^0.45.2",
50
51
  "fastify": "^5.8.5",
51
52
  "node-cron": "^4.2.1",
@@ -62,25 +63,25 @@
62
63
  "tsup": "^8.5.1",
63
64
  "tsx": "^4.19.0",
64
65
  "@ainyc/canonry-api-client": "0.0.0",
65
- "@ainyc/canonry-contracts": "0.0.0",
66
- "@ainyc/canonry-config": "0.0.0",
67
66
  "@ainyc/canonry-api-routes": "0.0.0",
68
- "@ainyc/canonry-db": "0.0.0",
69
- "@ainyc/canonry-integration-bing": "0.0.0",
67
+ "@ainyc/canonry-config": "0.0.0",
68
+ "@ainyc/canonry-contracts": "0.0.0",
70
69
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
71
- "@ainyc/canonry-integration-google": "0.0.0",
72
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
73
- "@ainyc/canonry-integration-google-places": "0.0.0",
70
+ "@ainyc/canonry-integration-bing": "0.0.0",
74
71
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
72
+ "@ainyc/canonry-db": "0.0.0",
75
73
  "@ainyc/canonry-integration-traffic": "0.0.0",
74
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
75
+ "@ainyc/canonry-integration-google-places": "0.0.0",
76
76
  "@ainyc/canonry-intelligence": "0.0.0",
77
77
  "@ainyc/canonry-provider-cdp": "0.0.0",
78
- "@ainyc/canonry-provider-claude": "0.0.0",
79
78
  "@ainyc/canonry-integration-wordpress": "0.0.0",
79
+ "@ainyc/canonry-integration-google": "0.0.0",
80
+ "@ainyc/canonry-provider-gemini": "0.0.0",
80
81
  "@ainyc/canonry-provider-local": "0.0.0",
81
82
  "@ainyc/canonry-provider-openai": "0.0.0",
82
83
  "@ainyc/canonry-provider-perplexity": "0.0.0",
83
- "@ainyc/canonry-provider-gemini": "0.0.0"
84
+ "@ainyc/canonry-provider-claude": "0.0.0"
84
85
  },
85
86
  "scripts": {
86
87
  "build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",
@@ -1 +0,0 @@
1
- import{c as o}from"./index-DiN_mzYU.js";const n=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],c=o("chevron-left",n),s={contentStyle:{backgroundColor:"#18181b",border:"1px solid #3f3f46",borderRadius:8,fontSize:12},labelStyle:{color:"#e4e4e7"},itemStyle:{color:"#a1a1aa"}},i={fill:"#71717a",fontSize:11},f="#27272a",T="#27272a",d=["#34d399","#60a5fa","#f472b6","#facc15","#a78bfa","#fb923c","#22d3ee","#f87171"],S={text:"#a1a1aa",textDim:"#71717a",textFaint:"#52525b",surface:"#27272a"},l={positiveDeep:"#10b981"};function a(e){const t=String(e);return t.includes("T")?new Date(t):new Date(t+"T00:00:00")}function C(e){return a(String(e)).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function u(e){const t=a(e);return`${t.getMonth()+1}/${t.getDate()}`}export{T as C,i as a,C as b,s as c,S as d,d as e,u as f,l as g,c as h,f as i};