@ainyc/canonry 3.2.1 → 3.2.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.
@@ -62,7 +62,7 @@ import {
62
62
  visibilityStateFromAnswerMentioned,
63
63
  windowCutoff,
64
64
  wordpressEnvSchema
65
- } from "./chunk-TUXS2Y6C.js";
65
+ } from "./chunk-TBFRAJU2.js";
66
66
  import {
67
67
  IntelligenceService,
68
68
  agentMemory,
@@ -11033,7 +11033,7 @@ async function wordpressRoutes(app, opts) {
11033
11033
 
11034
11034
  // ../api-routes/src/backlinks.ts
11035
11035
  import crypto18 from "crypto";
11036
- import { and as and9, asc as asc2, desc as desc10, eq as eq21, sql as sql6 } from "drizzle-orm";
11036
+ import { and as and10, asc as asc2, desc as desc10, eq as eq21, sql as sql6 } from "drizzle-orm";
11037
11037
 
11038
11038
  // ../integration-commoncrawl/src/constants.ts
11039
11039
  import os2 from "os";
@@ -11429,6 +11429,35 @@ function pruneCachedRelease(release, opts = {}) {
11429
11429
  fs5.rmSync(dir, { recursive: true, force: true });
11430
11430
  }
11431
11431
 
11432
+ // ../api-routes/src/backlinks-filter.ts
11433
+ import { and as and9, ne, notLike } from "drizzle-orm";
11434
+ var BACKLINK_FILTER_PATTERNS = [
11435
+ "*.google.com",
11436
+ "*.googleusercontent.com",
11437
+ "*.translate.goog",
11438
+ "*.bing.com",
11439
+ "*.yandex.com",
11440
+ "*.yandex.ru",
11441
+ "*.baidu.com",
11442
+ "*.duckduckgo.com",
11443
+ "*.archive.org"
11444
+ ];
11445
+ function backlinkCrawlerExclusionClause() {
11446
+ const conditions = [];
11447
+ for (const pattern of BACKLINK_FILTER_PATTERNS) {
11448
+ if (pattern.startsWith("*.")) {
11449
+ const suffix = pattern.slice(2);
11450
+ conditions.push(ne(backlinkDomains.linkingDomain, suffix));
11451
+ conditions.push(notLike(backlinkDomains.linkingDomain, `%.${suffix}`));
11452
+ } else {
11453
+ conditions.push(ne(backlinkDomains.linkingDomain, pattern));
11454
+ }
11455
+ }
11456
+ const combined = and9(...conditions);
11457
+ if (!combined) throw new Error("BACKLINK_FILTER_PATTERNS is unexpectedly empty");
11458
+ return combined;
11459
+ }
11460
+
11432
11461
  // ../api-routes/src/backlinks.ts
11433
11462
  var BACKLINKS_UNSUPPORTED_MESSAGE = "Backlinks sync and install are only available from a local canonry install. Run `canonry backlinks install` locally to use this feature.";
11434
11463
  var NON_TERMINAL_SYNC_STATUSES = /* @__PURE__ */ new Set([
@@ -11485,9 +11514,47 @@ function mapRunRow(row) {
11485
11514
  };
11486
11515
  }
11487
11516
  function latestSummaryForProject(db, projectId, release) {
11488
- const condition = release ? and9(eq21(backlinkSummaries.projectId, projectId), eq21(backlinkSummaries.release, release)) : eq21(backlinkSummaries.projectId, projectId);
11517
+ const condition = release ? and10(eq21(backlinkSummaries.projectId, projectId), eq21(backlinkSummaries.release, release)) : eq21(backlinkSummaries.projectId, projectId);
11489
11518
  return db.select().from(backlinkSummaries).where(condition).orderBy(desc10(backlinkSummaries.queriedAt)).limit(1).get();
11490
11519
  }
11520
+ function parseExcludeCrawlers(value) {
11521
+ if (!value) return false;
11522
+ const lower = value.toLowerCase();
11523
+ return lower === "1" || lower === "true" || lower === "yes";
11524
+ }
11525
+ function computeFilteredSummary(db, base) {
11526
+ const baseDomainCondition = and10(
11527
+ eq21(backlinkDomains.projectId, base.projectId),
11528
+ eq21(backlinkDomains.release, base.release)
11529
+ );
11530
+ const filteredCondition = and10(baseDomainCondition, backlinkCrawlerExclusionClause());
11531
+ const unfilteredAgg = db.select({
11532
+ count: sql6`count(*)`,
11533
+ total: sql6`coalesce(sum(${backlinkDomains.numHosts}), 0)`
11534
+ }).from(backlinkDomains).where(baseDomainCondition).get();
11535
+ const filteredAgg = db.select({
11536
+ count: sql6`count(*)`,
11537
+ total: sql6`coalesce(sum(${backlinkDomains.numHosts}), 0)`
11538
+ }).from(backlinkDomains).where(filteredCondition).get();
11539
+ const top10Rows = db.select({ numHosts: backlinkDomains.numHosts }).from(backlinkDomains).where(filteredCondition).orderBy(desc10(backlinkDomains.numHosts)).limit(10).all();
11540
+ const totalLinkingDomains = Number(filteredAgg?.count ?? 0);
11541
+ const totalHosts = Number(filteredAgg?.total ?? 0);
11542
+ const unfilteredLinkingDomains = Number(unfilteredAgg?.count ?? 0);
11543
+ const unfilteredHosts = Number(unfilteredAgg?.total ?? 0);
11544
+ const top10Sum = top10Rows.reduce((sum, r) => sum + r.numHosts, 0);
11545
+ const top10Share = totalHosts > 0 ? top10Sum / totalHosts : 0;
11546
+ return {
11547
+ projectId: base.projectId,
11548
+ release: base.release,
11549
+ targetDomain: base.targetDomain,
11550
+ totalLinkingDomains,
11551
+ totalHosts,
11552
+ top10HostsShare: top10Share.toFixed(6),
11553
+ queriedAt: base.queriedAt,
11554
+ excludedLinkingDomains: Math.max(0, unfilteredLinkingDomains - totalLinkingDomains),
11555
+ excludedHosts: Math.max(0, unfilteredHosts - totalHosts)
11556
+ };
11557
+ }
11491
11558
  async function backlinksRoutes(app, opts) {
11492
11559
  app.get("/backlinks/status", async (_request, reply) => {
11493
11560
  if (!opts.getBacklinksStatus) {
@@ -11620,7 +11687,9 @@ async function backlinksRoutes(app, opts) {
11620
11687
  async (request, reply) => {
11621
11688
  const project = resolveProject(app.db, request.params.name);
11622
11689
  const row = latestSummaryForProject(app.db, project.id, request.query.release);
11623
- return reply.send(row ? mapSummaryRow(row) : null);
11690
+ if (!row) return reply.send(null);
11691
+ const excludeCrawlers = parseExcludeCrawlers(request.query.excludeCrawlers);
11692
+ return reply.send(excludeCrawlers ? computeFilteredSummary(app.db, row) : mapSummaryRow(row));
11624
11693
  }
11625
11694
  );
11626
11695
  app.get("/projects/:name/backlinks/domains", async (request, reply) => {
@@ -11633,17 +11702,23 @@ async function backlinksRoutes(app, opts) {
11633
11702
  }
11634
11703
  const limit = Math.min(Math.max(parseInt(request.query.limit ?? "50", 10) || 50, 1), 500);
11635
11704
  const offset = Math.max(parseInt(request.query.offset ?? "0", 10) || 0, 0);
11636
- const domainCondition = and9(
11705
+ const excludeCrawlers = parseExcludeCrawlers(request.query.excludeCrawlers);
11706
+ const baseDomainCondition = and10(
11637
11707
  eq21(backlinkDomains.projectId, project.id),
11638
11708
  eq21(backlinkDomains.release, targetRelease)
11639
11709
  );
11710
+ const domainCondition = excludeCrawlers ? and10(baseDomainCondition, backlinkCrawlerExclusionClause()) : baseDomainCondition;
11640
11711
  const totalRow = app.db.select({ count: sql6`count(*)` }).from(backlinkDomains).where(domainCondition).get();
11641
11712
  const rows = app.db.select({
11642
11713
  linkingDomain: backlinkDomains.linkingDomain,
11643
11714
  numHosts: backlinkDomains.numHosts
11644
11715
  }).from(backlinkDomains).where(domainCondition).orderBy(desc10(backlinkDomains.numHosts)).limit(limit).offset(offset).all();
11716
+ let summary = null;
11717
+ if (summaryRow) {
11718
+ summary = excludeCrawlers ? computeFilteredSummary(app.db, summaryRow) : mapSummaryRow(summaryRow);
11719
+ }
11645
11720
  const response = {
11646
- summary: summaryRow ? mapSummaryRow(summaryRow) : null,
11721
+ summary,
11647
11722
  total: Number(totalRow?.count ?? 0),
11648
11723
  rows
11649
11724
  };
@@ -14997,7 +15072,7 @@ import crypto19 from "crypto";
14997
15072
  import fs7 from "fs";
14998
15073
  import path9 from "path";
14999
15074
  import os4 from "os";
15000
- import { and as and10, eq as eq22, inArray as inArray5, sql as sql7 } from "drizzle-orm";
15075
+ import { and as and11, eq as eq22, inArray as inArray5, sql as sql7 } from "drizzle-orm";
15001
15076
 
15002
15077
  // src/citation-utils.ts
15003
15078
  function domainMatches(domain, canonicalDomain) {
@@ -15281,7 +15356,7 @@ var JobRunner = class {
15281
15356
  throw new Error(`Run ${runId} is not executable from status '${existingRun.status}'`);
15282
15357
  }
15283
15358
  if (existingRun.status === "queued") {
15284
- this.db.update(runs).set({ status: "running", startedAt: now }).where(and10(eq22(runs.id, runId), eq22(runs.status, "queued"))).run();
15359
+ this.db.update(runs).set({ status: "running", startedAt: now }).where(and11(eq22(runs.id, runId), eq22(runs.status, "queued"))).run();
15285
15360
  }
15286
15361
  this.throwIfRunCancelled(runId);
15287
15362
  const project = this.db.select().from(projects).where(eq22(projects.id, projectId)).get();
@@ -15584,7 +15659,7 @@ function getCurrentUsageDay() {
15584
15659
 
15585
15660
  // src/gsc-sync.ts
15586
15661
  import crypto20 from "crypto";
15587
- import { eq as eq23, and as and11, sql as sql8 } from "drizzle-orm";
15662
+ import { eq as eq23, and as and12, sql as sql8 } from "drizzle-orm";
15588
15663
  var log2 = createLogger("GscSync");
15589
15664
  function formatDate2(d) {
15590
15665
  return d.toISOString().split("T")[0];
@@ -15636,7 +15711,7 @@ async function executeGscSync(db, runId, projectId, opts) {
15636
15711
  });
15637
15712
  log2.info("fetch.complete", { runId, projectId, rowCount: rows.length });
15638
15713
  db.delete(gscSearchData).where(
15639
- and11(
15714
+ and12(
15640
15715
  eq23(gscSearchData.projectId, projectId),
15641
15716
  sql8`${gscSearchData.date} >= ${startDate}`,
15642
15717
  sql8`${gscSearchData.date} <= ${endDate}`
@@ -15725,7 +15800,7 @@ async function executeGscSync(db, runId, projectId, opts) {
15725
15800
  }
15726
15801
  }
15727
15802
  const snapshotDate = formatDate2(/* @__PURE__ */ new Date());
15728
- db.delete(gscCoverageSnapshots).where(and11(eq23(gscCoverageSnapshots.projectId, projectId), eq23(gscCoverageSnapshots.date, snapshotDate))).run();
15803
+ db.delete(gscCoverageSnapshots).where(and12(eq23(gscCoverageSnapshots.projectId, projectId), eq23(gscCoverageSnapshots.date, snapshotDate))).run();
15729
15804
  db.insert(gscCoverageSnapshots).values({
15730
15805
  id: crypto20.randomUUID(),
15731
15806
  projectId,
@@ -15748,7 +15823,7 @@ async function executeGscSync(db, runId, projectId, opts) {
15748
15823
 
15749
15824
  // src/gsc-inspect-sitemap.ts
15750
15825
  import crypto21 from "crypto";
15751
- import { eq as eq24, and as and12 } from "drizzle-orm";
15826
+ import { eq as eq24, and as and13 } from "drizzle-orm";
15752
15827
 
15753
15828
  // src/sitemap-parser.ts
15754
15829
  var log3 = createLogger("SitemapParser");
@@ -15964,7 +16039,7 @@ async function executeInspectSitemap(db, runId, projectId, opts) {
15964
16039
  }
15965
16040
  }
15966
16041
  const snapshotDate = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
15967
- db.delete(gscCoverageSnapshots).where(and12(eq24(gscCoverageSnapshots.projectId, projectId), eq24(gscCoverageSnapshots.date, snapshotDate))).run();
16042
+ db.delete(gscCoverageSnapshots).where(and13(eq24(gscCoverageSnapshots.projectId, projectId), eq24(gscCoverageSnapshots.date, snapshotDate))).run();
15968
16043
  db.insert(gscCoverageSnapshots).values({
15969
16044
  id: crypto21.randomUUID(),
15970
16045
  projectId,
@@ -16175,7 +16250,7 @@ async function executeBingInspectSitemap(db, runId, projectId, opts) {
16175
16250
  // src/commoncrawl-sync.ts
16176
16251
  import crypto23 from "crypto";
16177
16252
  import path10 from "path";
16178
- import { and as and13, eq as eq26, sql as sql9 } from "drizzle-orm";
16253
+ import { and as and14, eq as eq26, sql as sql9 } from "drizzle-orm";
16179
16254
  var log6 = createLogger("CommonCrawlSync");
16180
16255
  var INSERT_CHUNK_SIZE = 1e4;
16181
16256
  function defaultDeps() {
@@ -16366,7 +16441,7 @@ function computeSummary(rows) {
16366
16441
  // src/backlink-extract.ts
16367
16442
  import crypto24 from "crypto";
16368
16443
  import fs8 from "fs";
16369
- import { and as and14, desc as desc12, eq as eq27 } from "drizzle-orm";
16444
+ import { and as and15, desc as desc12, eq as eq27 } from "drizzle-orm";
16370
16445
  var log7 = createLogger("BacklinkExtract");
16371
16446
  function defaultDeps2() {
16372
16447
  return {
@@ -16412,7 +16487,7 @@ async function executeBacklinkExtract(db, runId, projectId, opts = {}) {
16412
16487
  const targetDomain = project.canonicalDomain;
16413
16488
  db.transaction((tx) => {
16414
16489
  tx.delete(backlinkDomains).where(
16415
- and14(eq27(backlinkDomains.projectId, projectId), eq27(backlinkDomains.release, release))
16490
+ and15(eq27(backlinkDomains.projectId, projectId), eq27(backlinkDomains.release, release))
16416
16491
  ).run();
16417
16492
  if (rows.length > 0) {
16418
16493
  const values = rows.map((r) => ({
@@ -16668,7 +16743,7 @@ var Scheduler = class {
16668
16743
  };
16669
16744
 
16670
16745
  // src/notifier.ts
16671
- import { eq as eq29, desc as desc13, and as and15, or as or3 } from "drizzle-orm";
16746
+ import { eq as eq29, desc as desc13, and as and16, or as or3 } from "drizzle-orm";
16672
16747
  import crypto25 from "crypto";
16673
16748
  var log9 = createLogger("Notifier");
16674
16749
  var Notifier = class {
@@ -16774,7 +16849,7 @@ var Notifier = class {
16774
16849
  }
16775
16850
  computeTransitions(runId, projectId) {
16776
16851
  const recentRuns = this.db.select().from(runs).where(
16777
- and15(
16852
+ and16(
16778
16853
  eq29(runs.projectId, projectId),
16779
16854
  or3(eq29(runs.status, "completed"), eq29(runs.status, "partial"))
16780
16855
  )
@@ -17260,7 +17335,7 @@ function resolveSessionProviderAndModel(config, opts) {
17260
17335
 
17261
17336
  // src/agent/memory-store.ts
17262
17337
  import crypto26 from "crypto";
17263
- import { and as and16, desc as desc14, eq as eq30, like as like2, sql as sql10 } from "drizzle-orm";
17338
+ import { and as and17, desc as desc14, eq as eq30, like as like2, sql as sql10 } from "drizzle-orm";
17264
17339
  var COMPACTION_KEY_PREFIX = "compaction:";
17265
17340
  var COMPACTION_NOTES_PER_SESSION = 3;
17266
17341
  function rowToDto(row) {
@@ -17305,12 +17380,12 @@ function upsertMemoryEntry(db, args) {
17305
17380
  updatedAt: now
17306
17381
  }
17307
17382
  }).run();
17308
- const row = db.select().from(agentMemory).where(and16(eq30(agentMemory.projectId, args.projectId), eq30(agentMemory.key, args.key))).get();
17383
+ const row = db.select().from(agentMemory).where(and17(eq30(agentMemory.projectId, args.projectId), eq30(agentMemory.key, args.key))).get();
17309
17384
  if (!row) throw new Error("memory upsert produced no row");
17310
17385
  return rowToDto(row);
17311
17386
  }
17312
17387
  function deleteMemoryEntry(db, projectId, key) {
17313
- const result = db.delete(agentMemory).where(and16(eq30(agentMemory.projectId, projectId), eq30(agentMemory.key, key))).run();
17388
+ const result = db.delete(agentMemory).where(and17(eq30(agentMemory.projectId, projectId), eq30(agentMemory.key, key))).run();
17314
17389
  const changes = result.changes ?? 0;
17315
17390
  return changes > 0;
17316
17391
  }
@@ -17339,7 +17414,7 @@ function writeCompactionNote(db, args) {
17339
17414
  }).run();
17340
17415
  const sessionPrefix = `${COMPACTION_KEY_PREFIX}${args.sessionId}:`;
17341
17416
  const existing = tx.select({ id: agentMemory.id, updatedAt: agentMemory.updatedAt }).from(agentMemory).where(
17342
- and16(
17417
+ and17(
17343
17418
  eq30(agentMemory.projectId, args.projectId),
17344
17419
  like2(agentMemory.key, `${sessionPrefix}%`)
17345
17420
  )
@@ -17348,7 +17423,7 @@ function writeCompactionNote(db, args) {
17348
17423
  if (stale.length > 0) {
17349
17424
  tx.delete(agentMemory).where(sql10`${agentMemory.id} IN (${sql10.join(stale.map((s) => sql10`${s}`), sql10`, `)})`).run();
17350
17425
  }
17351
- const row = tx.select().from(agentMemory).where(and16(eq30(agentMemory.projectId, args.projectId), eq30(agentMemory.key, key))).get();
17426
+ const row = tx.select().from(agentMemory).where(and17(eq30(agentMemory.projectId, args.projectId), eq30(agentMemory.key, key))).get();
17352
17427
  if (row) inserted = rowToDto(row);
17353
17428
  });
17354
17429
  if (!inserted) throw new Error("compaction note write produced no row");
@@ -1577,7 +1577,12 @@ var backlinkSummaryDtoSchema = z14.object({
1577
1577
  totalLinkingDomains: z14.number().int(),
1578
1578
  totalHosts: z14.number().int(),
1579
1579
  top10HostsShare: z14.string(),
1580
- queriedAt: z14.string()
1580
+ queriedAt: z14.string(),
1581
+ // Populated when the response is filtered (e.g. ?excludeCrawlers=1).
1582
+ // Counts the rows omitted from totalLinkingDomains/totalHosts so callers
1583
+ // can show "N hidden" hints without re-deriving them.
1584
+ excludedLinkingDomains: z14.number().int().optional(),
1585
+ excludedHosts: z14.number().int().optional()
1581
1586
  });
1582
1587
  var backlinkListResponseSchema = z14.object({
1583
1588
  summary: backlinkSummaryDtoSchema.nullable(),
@@ -2650,15 +2655,19 @@ var ApiClient = class {
2650
2655
  async backlinksExtract(project, release) {
2651
2656
  return this.request("POST", `/projects/${encodeURIComponent(project)}/backlinks/extract`, release ? { release } : {});
2652
2657
  }
2653
- async backlinksSummary(project, release) {
2654
- const qs = release ? `?release=${encodeURIComponent(release)}` : "";
2655
- return this.request("GET", `/projects/${encodeURIComponent(project)}/backlinks/summary${qs}`);
2658
+ async backlinksSummary(project, opts = {}) {
2659
+ const qs = new URLSearchParams();
2660
+ if (opts.release) qs.set("release", opts.release);
2661
+ if (opts.excludeCrawlers) qs.set("excludeCrawlers", "1");
2662
+ const suffix = qs.toString() ? `?${qs.toString()}` : "";
2663
+ return this.request("GET", `/projects/${encodeURIComponent(project)}/backlinks/summary${suffix}`);
2656
2664
  }
2657
2665
  async backlinksDomains(project, opts = {}) {
2658
2666
  const qs = new URLSearchParams();
2659
2667
  if (opts.limit !== void 0) qs.set("limit", String(opts.limit));
2660
2668
  if (opts.offset !== void 0) qs.set("offset", String(opts.offset));
2661
2669
  if (opts.release) qs.set("release", opts.release);
2670
+ if (opts.excludeCrawlers) qs.set("excludeCrawlers", "1");
2662
2671
  const suffix = qs.toString() ? `?${qs.toString()}` : "";
2663
2672
  return this.request("GET", `/projects/${encodeURIComponent(project)}/backlinks/domains${suffix}`);
2664
2673
  }
package/dist/cli.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  setGoogleAuthConfig,
18
18
  showFirstRunNotice,
19
19
  trackEvent
20
- } from "./chunk-QJPPK4WW.js";
20
+ } from "./chunk-QA5HRDRS.js";
21
21
  import {
22
22
  CcReleaseSyncStatuses,
23
23
  CheckScopes,
@@ -45,7 +45,7 @@ import {
45
45
  saveConfig,
46
46
  saveConfigPatch,
47
47
  usageError
48
- } from "./chunk-TUXS2Y6C.js";
48
+ } from "./chunk-TBFRAJU2.js";
49
49
  import {
50
50
  apiKeys,
51
51
  competitors,
@@ -728,6 +728,9 @@ function formatSummaryAndDomains(project, response) {
728
728
  lines.push(`Linking domains: ${s.totalLinkingDomains}`);
729
729
  lines.push(`Total hosts: ${s.totalHosts}`);
730
730
  lines.push(`Top-10 share: ${s.top10HostsShare}`);
731
+ if (s.excludedLinkingDomains !== void 0 && s.excludedLinkingDomains > 0) {
732
+ lines.push(`Excluded: ${s.excludedLinkingDomains} crawler/proxy domains (${s.excludedHosts ?? 0} hosts)`);
733
+ }
731
734
  if (response.rows.length > 0) {
732
735
  lines.push("");
733
736
  lines.push(`Top ${response.rows.length} linking domains (of ${response.total}):`);
@@ -861,7 +864,8 @@ async function backlinksList(opts) {
861
864
  const client = getClient();
862
865
  const response = await client.backlinksDomains(opts.project, {
863
866
  limit: opts.limit ?? 50,
864
- release: opts.release
867
+ release: opts.release,
868
+ excludeCrawlers: opts.excludeCrawlers
865
869
  });
866
870
  if (opts.format === "json") {
867
871
  printJson(response);
@@ -943,16 +947,17 @@ var BACKLINKS_CLI_COMMANDS = [
943
947
  },
944
948
  {
945
949
  path: ["backlinks", "list"],
946
- usage: "canonry backlinks list <project> [--limit <n>] [--release <id>] [--format json]",
950
+ usage: "canonry backlinks list <project> [--limit <n>] [--release <id>] [--exclude-crawlers] [--format json]",
947
951
  options: {
948
952
  limit: stringOption(),
949
- release: stringOption()
953
+ release: stringOption(),
954
+ "exclude-crawlers": { type: "boolean" }
950
955
  },
951
956
  run: async (input) => {
952
957
  const project = requireProject(
953
958
  input,
954
959
  "backlinks list",
955
- "canonry backlinks list <project> [--limit <n>] [--release <id>]"
960
+ "canonry backlinks list <project> [--limit <n>] [--release <id>] [--exclude-crawlers]"
956
961
  );
957
962
  const limit = parseIntegerOption(input, "limit", {
958
963
  message: "--limit must be an integer",
@@ -963,6 +968,7 @@ var BACKLINKS_CLI_COMMANDS = [
963
968
  project,
964
969
  limit,
965
970
  release: getString(input.values, "release"),
971
+ excludeCrawlers: getBoolean(input.values, "exclude-crawlers"),
966
972
  format: input.format
967
973
  });
968
974
  }
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-QJPPK4WW.js";
3
+ } from "./chunk-QA5HRDRS.js";
4
4
  import {
5
5
  loadConfig
6
- } from "./chunk-TUXS2Y6C.js";
6
+ } from "./chunk-TBFRAJU2.js";
7
7
  import "./chunk-UQH5SKM2.js";
8
8
  import "./chunk-MLKGABMK.js";
9
9
  export {
package/dist/mcp.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  CliError,
3
3
  canonryMcpTools,
4
4
  createApiClient
5
- } from "./chunk-TUXS2Y6C.js";
5
+ } from "./chunk-TBFRAJU2.js";
6
6
  import "./chunk-MLKGABMK.js";
7
7
 
8
8
  // src/mcp/cli.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainyc/canonry",
3
- "version": "3.2.1",
3
+ "version": "3.2.2",
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",
@@ -59,21 +59,21 @@
59
59
  "@types/node-cron": "^3.0.11",
60
60
  "tsup": "^8.5.1",
61
61
  "tsx": "^4.19.0",
62
- "@ainyc/canonry-config": "0.0.0",
63
62
  "@ainyc/canonry-api-routes": "0.0.0",
64
63
  "@ainyc/canonry-db": "0.0.0",
64
+ "@ainyc/canonry-config": "0.0.0",
65
65
  "@ainyc/canonry-intelligence": "0.0.0",
66
- "@ainyc/canonry-integration-google": "0.0.0",
67
- "@ainyc/canonry-integration-wordpress": "0.0.0",
68
66
  "@ainyc/canonry-contracts": "0.0.0",
69
- "@ainyc/canonry-integration-commoncrawl": "0.0.0",
70
- "@ainyc/canonry-provider-cdp": "0.0.0",
71
67
  "@ainyc/canonry-integration-bing": "0.0.0",
68
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
69
+ "@ainyc/canonry-integration-google": "0.0.0",
70
+ "@ainyc/canonry-integration-wordpress": "0.0.0",
72
71
  "@ainyc/canonry-provider-claude": "0.0.0",
73
72
  "@ainyc/canonry-provider-gemini": "0.0.0",
74
73
  "@ainyc/canonry-provider-local": "0.0.0",
75
- "@ainyc/canonry-provider-perplexity": "0.0.0",
76
- "@ainyc/canonry-provider-openai": "0.0.0"
74
+ "@ainyc/canonry-provider-openai": "0.0.0",
75
+ "@ainyc/canonry-provider-cdp": "0.0.0",
76
+ "@ainyc/canonry-provider-perplexity": "0.0.0"
77
77
  },
78
78
  "scripts": {
79
79
  "build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",